feat(ship): decompose High-risk+Large units instead of one implementer - #618
Merged
Conversation
A single approved plan handed to one fresh coding agent works for most /ship units, but a genuinely large one (observed live on issue #585 phase 0: ~30 files across Docker orchestration, a precision corpus, a parity harness, and evidence generation) reliably exhausts one agent's context before finishing -- the first attempt hit ~65% after its first commit. Adds an explicit Large flag to per-issue-cycle.md's risk classification: High-risk units additionally state whether they're Large (likely to exceed one coding agent's session), with a one-line justification. Most units are not Large, and Large is not inferred from risk alone. SKILL.md step 2.3 branches on it: High + Large runs references/decompose-and-implement-loop.workflow.mjs instead of spawning one implementer. That script has Fable/high propose an ordered, dependency-respecting sub-task breakdown -- grounded against whatever is ALREADY committed on the branch, not just the plan in the abstract, so a partial prior attempt's real progress isn't redone -- then runs one fresh Sonnet agent per sub-task, strictly sequentially on the same branch. Sequential, not parallel-worktree: the problem being solved is context exhaustion, not wall-clock speed, and a sub-task's declared file scope is a claim, not a verified guarantee, so concurrent writes would add real conflict risk for a benefit this doesn't need. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwFPT465eDJqYcRa8HGNLz
29 tasks
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.
What & why
A single approved plan handed to one fresh coding agent works for most
/shipunits, but a genuinely large one reliably exhausts one agent's context before finishing — observed live on issue #585 phase 0 (a ~30-file plan across Docker orchestration, a precision corpus, a parity harness, and evidence generation): the first implementation attempt hit ~65% context after its first commit.per-issue-cycle.mdgets an explicit Large flag alongside the existing risk classification: High-risk units additionally state whether they're Large (likely to exceed one coding agent's session), with a one-line justification. Most units are not Large, and Large is not inferred from risk alone — a High-risk unit can still be small (e.g. a narrow auth fix).SKILL.mdstep 2.3 branches on it: High + Large runsreferences/decompose-and-implement-loop.workflow.mjsinstead of spawning one implementer. Fable/high proposes an ordered, dependency-respecting sub-task breakdown — grounded against whatever is already committed on the branch (not just the plan in the abstract), so a partial prior attempt's real progress doesn't get re-planned or redone. The script then runs one fresh Sonnet agent per sub-task, strictly sequentially on the same branch.Sequential, not parallel-worktree, deliberately: the problem being solved is context exhaustion, not wall-clock speed, and a sub-task's declared file scope is a claim from the decomposition agent, not a mechanically verified guarantee — concurrent writes would add real conflict risk (two sub-tasks both wanting to touch
package.json, say) for a benefit this doesn't need. Discussed and narrowed down from a more rigid alternative (a decomposition graph baked into the reviewed plan itself) — rejected because decomposition benefits from seeing what's actually been implemented, which doesn't exist yet at planning time, and because forcing a machine-parseable graph into a ChatGPT-authored prose plan document would add exactly the kind of parsing fragility #616 just finished fixing for the plan-author format itself.skills/ship/tests/*.test.mjs(plainnode --test) is green: 8/8.Checklist
node --testsuite — N/A to product vitest gate)npm test(product coverage gate) — N/A, this only touchesskills/ship/npm run build— N/A, same reasonsrc/core/src/net/src/ui) — N/A, same reason