chore(ship): one PR per unit, auto-chained, gated only on explicit decisions - #622
Merged
Merged
Conversation
…cisions /ship's stated default squashed every remaining phase of a multi-phase issue (or every issue in a comma-list) into one shared PR at the end of the run — a default that real multi-phase issues (#585, #593, historically #427) have always had to override with an explicit owner decision to ship one PR per phase instead. Separately, there was no structured concept of a "gate": a human had to notice free prose like #585's "Phases 2-4 ... do not proceed without a new decision" and manually re-invoke /ship phase-by-phase. Restructure the per-unit cycle so each unit (a phase or a whole issue) gets its own branch, plan, PR, 3-pass code-review loop, and merge, then auto-chains straight into the next unit off the freshly-merged origin/main with no re-prompting. Add explicit gate detection (a `> **Gate:**` blockquote convention, with a prose-scanning fallback for issues written before it existed) that stops only the gated unit's own dependency spine — every other independent unit or spine still ships in the same run. Plan- and merge-proof exhaustion remain whole-run FULL STOPs, unchanged. No workflow script changes were needed: none of the four .workflow.mjs scripts hardcode a "whole run" assumption, and skills/ship/tests/* doesn't assert anything this touches (verified: both test files still pass). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwFPT465eDJqYcRa8HGNLz
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.
Summary
/ship's documented default squashed every remaining phase of a multi-phase issue (or every issue in a comma-list) into one shared PR at the end of the run. In practice this was never actually followed: ADR-0005: adopt @clickhouse/client-web behind the SQL Browser transport adapter #585 (5 phases) and Umbrella: V2 architecture refactor — shell primitives, composition root, state reactivity, transport adapter #593 (8 phases) both carry an explicit owner decision overriding it to one PR per phase, matching how Separate Library queries from dashboard-owned query copies #427 shipped historically. Every time, a human had to notice this and manually re-invoke/ship ISSUE.Nphase-by-phase./ship 585stopped after Phase 0 partly because of a legitimate review-loop exhaustion, and partly because the issue's own prose ("Phases 2-4 ... do not proceed without a new decision") meant no further phase would ever auto-continue, but nothing in the skill recognized that prose as a first-class stop condition.origin/mainwith no re-prompting.> **Gate:**blockquote convention under the affected## Phasesrow(s) as the primary signal, with a prose-scanning fallback (matched against ADR-0005: adopt @clickhouse/client-web behind the SQL Browser transport adapter #585's and Umbrella: V2 architecture refactor — shell primitives, composition root, state reactivity, transport adapter #593's actual live wording) for issues written before the convention existed. A gate stops only its own dependency spine; every other independent unit/spine still ships in the same run.Scope
Process/documentation only —
skills/ship/SKILL.mdand three of itsreferences/*.mdfiles. No changes to any.workflow.mjsscript or toparse-invocation.mjs: none of the four workflow scripts hardcode a "whole run" assumption (each already takesplanFile/prUrl/branchas a plain per-call argument), so this is purely a rewrite of the coordinator's own operating contract.Test plan
node --test skills/ship/tests/invocation.test.mjs skills/ship/tests/workflow-contract.test.mjs— 8/8 pass, confirming the literal strings (High risk + Large unit,decompose-and-implement-loop.workflow.mjs, etc.) those tests grep for inSKILL.md/per-issue-cycle.mdsurvived verbatim.SKILL.mdfor internal consistency: every step-number cross-reference (2.2/2.6/2.7/2.8/step 3) resolves correctly acrossSKILL.mdandreferences/review-loops.md.🤖 Generated with Claude Code
https://claude.ai/code/session_01LwFPT465eDJqYcRa8HGNLz