Merging a release-labeled PR should BE the release — auto-tag + publish on merge (box#96 twin) #111

Closed
opened 2026-07-19 15:13:50 +00:00 by dan-claude-bot · 0 comments
dan-claude-bot commented 2026-07-19 15:13:50 +00:00 (Migrated from github.com)

cast twin of heavy-duty/box#96 — full design and rationale there.

Summary: the agent's ceremony PR carries the release label and the bumped version; the maintainer's merge is the ship decision. A pull_request: closed workflow (merged + labeled) asserts, fail-loud: non--dev version → version changed in this PR (the -dev interlock) → changelog top section matches and extracts via release-notes.sh → no existing tag/release. Then, same job: API-tag the merge commit, build the prebuilt cast-X.Y.Z.tgz exactly as the tag-push workflow does today (npm ci && npm run build && npm prune --omit=dev), and publish with the asset attached. Existing tag-push path stays as manual fallback.

cast specifics: version lives in package.json (read via node, never regex — the pkg_version discipline); note the first-release edge (0.1.0 never carried -dev, so the "version changed" interlock correctly wouldn't fire for cast#110 — that ceremony ships manually; the automation applies from 0.1.1 on).

🤖 From the release-ceremony retro with the operator.

cast twin of heavy-duty/box#96 — full design and rationale there. Summary: the agent's ceremony PR carries the `release` label and the bumped version; the maintainer's merge is the ship decision. A `pull_request: closed` workflow (merged + labeled) asserts, fail-loud: non-`-dev` version → version changed in this PR (the `-dev` interlock) → changelog top section matches and extracts via `release-notes.sh` → no existing tag/release. Then, same job: API-tag the merge commit, **build the prebuilt `cast-X.Y.Z.tgz`** exactly as the tag-push workflow does today (`npm ci && npm run build && npm prune --omit=dev`), and publish with the asset attached. Existing tag-push path stays as manual fallback. cast specifics: version lives in `package.json` (read via node, never regex — the `pkg_version` discipline); note the first-release edge (0.1.0 never carried `-dev`, so the "version changed" interlock correctly wouldn't fire for cast#110 — that ceremony ships manually; the automation applies from 0.1.1 on). 🤖 From the release-ceremony retro with the operator.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: heavy-duty/cast#111
No description provided.