Release process must advance the next edge line (reconcile + calendar bump) on every release, not just stable#455
Merged
Conversation
release.yml's hyphenated-tag carve-out advanced neither `stable` (correctly) nor `next`, so a prerelease cut left the edge marketplace serving a stale plugin — the 0.24.0-pre1 cut drifted `next` 40 commits behind `main` and hard-blocked `spacedock codex` on a binary/plugin version-compat check. Add an `edge-advance` job (`needs: goreleaser`, a sibling so a reconcile conflict can't unwind the published release) that reconciles `next` to the tagged commit via `git merge -X theirs` on both tag paths, then bumps the marketplace calendar key. On a stable tag it also stamps `next` PAST the release to the post-release dev pre-version (X.(Y+1).0-pre1) so the edge line never masquerades as the stable version it just shipped. The reconcile is a fast-forward merge, never a reset or force-push. Add release.DevPreVersion + the `spacedock-release dev-preversion` subcommand (reusing stamp-version/bump-calendar unchanged), a temp-repo fixture proving the reconcile closes the divergence force-free on both paths, a never-forces workflow guard with adversarial twins, and the docs/releasing.md edge-line section. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Close the two coupling holes the detached adversarial audit found: flipping release.yml's reconcile steps to `-X ours` (the 0.24.0-pre1 incident) or widening the stable step's `if:` to `always()` both stayed green. - The divergence fixture now reads its merge `-X <strategy>` from the parsed edge-advance reconcile step for the tag's path instead of hardcoding `-X theirs`, so a workflow drift to `-X ours` reds the tree-match assertion directly. Corrected the overclaiming doc-comment (it reconstructs the sequence; it does not run release.yml's steps). - Add TestReleaseWorkflowEdgeAdvanceWiring + assertEdgeAdvanceWiring in the same readWorkflow harness, asserting both reconcile steps merge `-X theirs`, the `if:` guards are complementary (exactly one fires per tag), and bump-calendar carries no `if:`. Adversarial twins (-X ours, always(), copy-paste guard, gated bump) each red. Consolidated on a shared edgeAdvanceJob lookup. The never-force and DevPreVersion lenses are unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Keep the
nextedge line advanced on every release tag, so the edge marketplace serves the just-released plugin instead of drifting behindmain.What changed
release.ymledge-advancejob reconcilingnexton every tag (prerelease and stable).git merge -X theirs— a force-free fast-forward push, never--force/reset.spacedock-release dev-preversion, stampingnextpast a stable release (X.Y.Z → X.(Y+1).0-pre1).release.yml.docs/releasing.md.Evidence
internal/release+cmd/spacedock-release: all suites passed;go build/gofmt/vetclean.s2