diff --git a/TODOS.md b/TODOS.md index f61b765ed..f82c82119 100644 --- a/TODOS.md +++ b/TODOS.md @@ -2686,12 +2686,17 @@ Shipped in v0.8.4; redesigned twice since. Current design (v0.18.2.0+, carved in v1.54.0.0): `/ship` Step 18 (`ship/sections/pr-body.md`) dispatches `/document-release` as a general-purpose subagent AFTER Step 17 (push) and BEFORE Step 19 (PR creation); the subagent's JSON contract (`files_updated`, -`commit_sha`, `pushed`, `documentation_section`) is baked into the initial PR -body. Subagent failure is non-blocking. The skeleton names "the -/document-release subagent" at three touchpoints (section-index trigger + STOP -pointer, Step 17 handoff, hoisted doc-sync invariant). Pinned by -`test/ship-document-release-dispatch.test.ts` + carve-guards anchors; behavior -proven by the `ship-docsync` gate E2E (`test/skill-e2e-ship-docsync.test.ts`). +`commit_sha`, `pushed`, `documentation_section`, `decisions` since v1.76.0.0) +is baked into the initial PR body — except `decisions`, which prints to the +ship console and never enters PR markdown. Since v1.76.0.0 (#2733) the dispatch +marks the subagent `GSTACK_SESSION_KIND=spawned` so its interactive gates +auto-choose the recommended option. Subagent failure is non-blocking. The +skeleton names "the /document-release subagent" at three touchpoints +(section-index trigger + STOP pointer, Step 17 handoff, hoisted doc-sync +invariant). Pinned by `test/ship-document-release-dispatch.test.ts` + +carve-guards anchors; behavior proven by the `ship-docsync` gate E2E +(`test/skill-e2e-ship-docsync.test.ts`) and the spawned-dispatch gate E2E +(`test/skill-e2e-docsync-spawned.test.ts`). ### Machine-checkable Step 18 dispatch receipt in /ship's Section self-check