Skip to content

release: v3.10.0 GitHub release exists but never published to npm — clean up phantom release #1056

@carlos-alm

Description

@carlos-alm

Summary

The v3.10.0 release flow ended in an inconsistent state:

  • ✅ GitHub release v3.10.0 is published
  • ✅ Git tag `v3.10.0` exists on `main`
  • ❌ npm package `@optave/[email protected]` was never published (`npm view @optave/codegraph versions` ends at 3.9.6)
  • ❌ `package.json` on `main` is still `3.9.6`

What happened

The new pre-publish benchmark gate (#1040) correctly caught the native-engine regressions (#1054, #1055) and blocked the npm publish job — but only after the release event had already created the GitHub release. The publish workflow's `Pre-publish benchmark gate` job is upstream of `publish` (good), but downstream of `actions/checkout@v6` against the already-tagged release ref (the tag is what the workflow checks out).

Failed run: the `publish` and `publish-dev` jobs were skipped because the gate failed; the GH release remained.

User-visible consequence

Anyone consulting the GitHub releases page sees v3.10.0 as the latest stable, but `npm install @optave/codegraph@latest` still resolves to 3.9.6. This is a confusing inconsistency — the changelog/release notes describe shipped changes that aren't actually shipped.

Decisions needed

  1. Release retraction: delete the v3.10.0 GitHub release + tag, or convert it to a draft until the regressions are fixed?
  2. Next stable version: if v3.10.0 ships with perf(native): ~2 second flat overhead added to rebuild operations in v3.10.0 #1054/perf(native): fnDeps query 52% slower in v3.10.0 (likely shares root cause with #1054) #1055 fixed, do we re-tag (force) v3.10.0, or bump to v3.10.1 to keep history monotonic?
  3. Workflow guard: should the pre-publish benchmark gate run before the GitHub release is created (e.g., on the release-prep PR / push-to-main rather than the release event), so a regression aborts the release earlier?

Suggested workflow improvement

Run the regression guard on the `docs: prepare release notes for vX.Y.Z` PR (it's the last commit before the release tag). If it fails there, the release simply isn't cut. Today the gate runs after the tag exists, which is too late to prevent partial-release state.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions