Skip to content

Two-channel release (stable→main / edge spacedock@next→next) + per-channel devBranch stamp + next-publish#339

Merged
clkao merged 1 commit into
nextfrom
spacedock-ensign/two-channel-release-devbranch-stamp
Jun 9, 2026
Merged

Two-channel release (stable→main / edge spacedock@next→next) + per-channel devBranch stamp + next-publish#339
clkao merged 1 commit into
nextfrom
spacedock-ensign/two-channel-release-devbranch-stamp

Conversation

@clkao

@clkao clkao commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

Ahead of the 0.20.0 flip, each released channel's binary must install its own channel's plugin — this stamps devBranch per channel and emits both casks.

What changed

  • Stamp devBranch per channel via two goreleaser builds (stable→main, edge→next).
  • Emit two casks: stable spacedock and edge spacedock@next, each pinning its own archive.
  • Swap the release.yml plugin-manifest stamp step to main (single-target, tag-only trigger).
  • Add an internal/release guard pinning the binary-side pair agreement on main.
  • Add a codex sole-knob smoke asserting per-channel --ref main/--ref next install argv.

Evidence

  • goreleaser release --snapshot emits both casks (distinct archives/shas); built binaries install @main/@next (claude) and --ref main/next (codex), observed in argv.
  • go test ./internal/release/ ./internal/cli/ → 75 + 341 passed; detached adversarial audit caught every weakening, no material findings.

Review guidance

  • The tri-surface guard intentionally SKIPs until pj flips the marketplace ref; the binary-side pair is green now and pj un-skips it green-by-construction at the flip.

k6d

…p swap

Make each released spacedock channel auto-install its own channel's plugin:
the stable binary (devBranch=main) installs the `main` plugin, the edge binary
(devBranch=next) installs the `next` plugin. The single mechanism is the
build-time devBranch ldflag, set per channel by two goreleaser builds.

.goreleaser.yaml: replace the single devBranch=next build with two builds
(spacedock-stable → main, spacedock-edge → next), two archives (edge carries an
`_edge` asset suffix), and two homebrew_casks (stable `spacedock`, edge
`spacedock@next`), each cask pinning only its channel's archive via `ids:`. One
`goreleaser release --snapshot` emits both channels; the built stable/edge
binaries' fresh-HOME front-door auto-install was observed issuing
`marketplace add …@main` / `…@next` (claude) and `--ref main` / `--ref next`
(codex) — AC-a, AC-c, AC-d live smoke.

release.yml: single-target swap of the "Stamp plugin manifests" step
next→main (release.yml is tag-only-triggered → exactly one stamp target, the
stable channel, whose plugin lives on `main`). Not a per-channel branch.

internal/release/channel_agreement_guard_test.go: NEW green guard asserting the
binary-side pair agreement — release.yml stamp target == .goreleaser.yaml stable
devBranch, both `main` — parsed from two independently-authored artifacts. The
full tri-surface ==main check (adding marketplace.json ref) is skipped until pj
flips the ref; structured so pj extends it green-by-construction at the flip.

internal/cli/codex_channel_smoke_test.go: hermetic per-channel front-door tests
driving runClaude/runCodex no-plugin auto-install with devBranch set per channel,
observing the channel-correct @ref / --ref in the recorded install seam — AC-a/d.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
clkao added a commit that referenced this pull request Jun 9, 2026
@clkao clkao merged commit 4862c2a into next Jun 9, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant