feat(harness): milestone-gated release cycle + auto-filed rollout/feedback companion (#176) - #193
Merged
robercano-ghbot merged 2 commits intoJul 24, 2026
Conversation
…ut companion (issue #176) Adds the release-cycle machinery: a `Release vX.Y.Z` issue template that reuses issue #97's "Blocked by #N" blocking-graph gate against every other issue in the milestone (no new state machine), a `.claude/scripts/release.sh` driver that bumps plugin.json/marketplace.json, generates a dated CHANGELOG entry from merged PR titles since the last tag (or full history on a first release), tags/commits/pushes, closes the milestone, and auto-files a census-invisible `Rollout & feedback: vX.Y.Z` companion issue with a consumer-sync checklist for reDeploy/reDeFi (sync v2, issue #141). `--dry-run` performs the real file transforms but only prints every git/gh side effect, covered by an offline release.test.sh fixture suite (with-tag, no-prior-tag, and Unreleased-scaffold cases). Documents the whole convention, including the hotfix path, in docs/USAGE.md -> "Release cycle", superseding the ad-hoc pattern from #136. Co-Authored-By: Claude Sonnet 5 <[email protected]>
…path, fix commit gpgsign (issue #176) Fix round addressing three review-blocking defects: 1. release.md rewritten so no "blocked by" phrase is ever adjacent to a real digit anywhere except the one editable Blocked-by field — prose issue references drop the leading `#` (issue 97/136/141) and the worked example uses non-numeric #AAA/#BBB/#CCC placeholders. Verified empty template yields blockedBy=[] via `cockpit.sh --parse-blocking`, and a filled-in field still extracts exactly the real numbers. 2. release.test.sh gains real (non-dry-run) coverage: a local `git init --bare` origin stands in for the network and a fake bot-gh.sh stub (installed at the fixture's own .claude/scripts/bot-gh.sh, since release.sh's gh() always shells out to its sibling, never $PATH) stands in for gh. Asserts the version-bump commit landed, the tag was created, the push reached the bare origin (branch + tag), and the milestone-close / label-create / rollout-issue-create gh calls fired with the right args (including the rollout body's derived test-focus titles) — plus the no-`--issue` warn-and-skip variant. 44 checks total (was 27). 3. The real commit step now disables gpgsign the same way the tag step already did (`git -c commit.gpgSign=false commit ...`), so an unattended run with `commit.gpgsign=true` and no agent configured can't hang. Co-Authored-By: Claude Sonnet 5 <[email protected]>
Collaborator
Author
|
feat(harness): milestone-gated release cycle + auto-filed rollout/feedback companion (#176) (not yet reviewed) |
robercano
approved these changes
Jul 24, 2026
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.
Closes #176.
Formalizes the release cycle as a milestone-gated convention that reuses the existing #97 blocking graph as the release gate — no new state machine.
What ships
.github/ISSUE_TEMPLATE/release.md) — aRelease vX.Y.Zissue whose Blocked-by line = every sibling issue in the milestone, plus a helper query to keep that list current. (Template prose uses non-numeric placeholders socockpit.sh --parse-blockingyields no phantom blocking edges.).claude/scripts/release.sh) — bumps theversioninplugin.json+marketplace.json(via node), prepends a dated Keep-a-Changelog entry toCHANGELOG.mdfrom merged PR titles since the last tag (handles the first-release / no-prior-tag case), tagsvX.Y.Z, commits/pushes and prints the manual/plugin marketplace updatefollow-up (no real registry publish), closes the milestone, and auto-files aRollout & feedback: vX.Y.Zissue (no milestone, noplanned, labelfeedback) with the reDeploy/reDeFi consumer-sync checklist (via/orchestrator:syncv2, /orchestrator:sync v2 — one sanctioned migration path to bring consumer repos current #141), test-focus areas from the milestone's issue titles, and a feedback back-reference section.--dry-runperforms the pure file transforms and prints every git/gh side effect without executing any of them..claude/scripts/release.test.sh) — 44 checks: dry-run transforms plus a real (non-dry-run) path exercised against a local bare-repo origin + a fakebot-gh.shstub (commit/tag/push land; milestone-close/label-create/rollout-issue-file gh calls fire with correct args), and the no---issuewarn-and-skip path. Fully offline.docs/USAGE.md"Release cycle" section: the milestone-gated release issue, driver steps, rollout companion, label conventions (feedback+from:redeploy/from:redefi+ version in body; feedback issues carry no milestone/noplanneduntil owner triage — a census-invisible inbox), and the hotfix path (vX.Y.Z+1micro-milestone). Supersedes the ad-hoc Release 0.2.2 — published plugin cache lacks the #131 driver working-directory fix #136 pattern.Gates & review
GATES_FILE=.claude/self/gates.json): build / lint / test all green (44 checks + fan-out smoke, offline).🤖 Generated with Claude Code