From 6ee43492723dababa4138ceb72fd2cd26d4325d9 Mon Sep 17 00:00:00 2001 From: Tom Boucher Date: Sat, 25 Jul 2026 05:30:20 -0400 Subject: [PATCH] fix(#2537): extract offer_next step to references/ (~3.3KB headroom restored) (#2642) * fix(#2537): extract offer_next step to references/ (~3.3KB headroom restored) * chore(#2537): backfill changeset pr to 2642 --- .changeset/zesty-wasps-purr.md | 5 ++ docs/INVENTORY-MANIFEST.json | 1 + gsd-core/references/offer-next.md | 88 +++++++++++++++++++ gsd-core/workflows/execute-phase.md | 83 +---------------- src/commands.cts | 28 +----- tests/commit-files-pathspec.test.cjs | 12 +-- tests/execute-phase-active-flags.test.cjs | 53 +++++------ .../golden-install-parity/antigravity.json | 3 +- .../golden-install-parity/augment.json | 3 +- .../golden-install-parity/claude-local.json | 3 +- .../golden-install-parity/claude.json | 3 +- .../fixtures/golden-install-parity/cline.json | 3 +- .../golden-install-parity/codebuddy.json | 3 +- .../fixtures/golden-install-parity/codex.json | 3 +- .../golden-install-parity/copilot.json | 3 +- .../golden-install-parity/cursor.json | 3 +- .../golden-install-parity/hermes.json | 3 +- .../fixtures/golden-install-parity/kilo.json | 3 +- .../golden-install-parity/kimi-code.json | 3 +- .../fixtures/golden-install-parity/kimi.json | 3 +- .../golden-install-parity/opencode.json | 3 +- tests/fixtures/golden-install-parity/pi.json | 3 +- .../fixtures/golden-install-parity/qwen.json | 3 +- .../fixtures/golden-install-parity/trae.json | 3 +- .../golden-install-parity/windsurf.json | 3 +- .../fixtures/golden-install-parity/zcode.json | 3 +- tests/fixtures/install-tree/antigravity.json | 1 + tests/fixtures/install-tree/augment.json | 1 + tests/fixtures/install-tree/claude-local.json | 1 + tests/fixtures/install-tree/claude.json | 1 + tests/fixtures/install-tree/cline.json | 1 + tests/fixtures/install-tree/codebuddy.json | 1 + tests/fixtures/install-tree/codex.json | 1 + tests/fixtures/install-tree/copilot.json | 1 + tests/fixtures/install-tree/cursor.json | 1 + tests/fixtures/install-tree/hermes.json | 1 + tests/fixtures/install-tree/kilo.json | 1 + tests/fixtures/install-tree/kimi-code.json | 1 + tests/fixtures/install-tree/kimi.json | 1 + tests/fixtures/install-tree/opencode.json | 1 + tests/fixtures/install-tree/pi.json | 1 + tests/fixtures/install-tree/qwen.json | 1 + tests/fixtures/install-tree/trae.json | 1 + tests/fixtures/install-tree/windsurf.json | 1 + tests/fixtures/install-tree/zcode.json | 1 + tests/workflow-size-baseline.json | 2 +- 46 files changed, 184 insertions(+), 164 deletions(-) create mode 100644 .changeset/zesty-wasps-purr.md create mode 100644 gsd-core/references/offer-next.md diff --git a/.changeset/zesty-wasps-purr.md b/.changeset/zesty-wasps-purr.md new file mode 100644 index 000000000..e721c01c4 --- /dev/null +++ b/.changeset/zesty-wasps-purr.md @@ -0,0 +1,5 @@ +--- +type: Fixed +pr: 2642 +--- +**`execute-phase.md` now has ~3.3 KB of byte-budget headroom** — the `offer_next` step body (terminal reporting + next-phase routing prose) was extracted to `gsd-core/references/offer-next.md` and eagerly `@`-referenced, restoring the headroom the frozen size ceiling exists to provide. Previously the ceiling had only ~32-137 bytes of margin, so any bugfix touching `execute-phase.md` had to extract unrelated content or raise the ceiling. Runtime behavior is unchanged (the `@`-reference loads eagerly). (#2537) diff --git a/docs/INVENTORY-MANIFEST.json b/docs/INVENTORY-MANIFEST.json index e1fc92daa..c22cf2011 100644 --- a/docs/INVENTORY-MANIFEST.json +++ b/docs/INVENTORY-MANIFEST.json @@ -246,6 +246,7 @@ "model-profile-resolution.md", "model-profiles.md", "mvp-concepts.md", + "offer-next.md", "phase-argument-parsing.md", "planner-antipatterns.md", "planner-chunked.md", diff --git a/gsd-core/references/offer-next.md b/gsd-core/references/offer-next.md new file mode 100644 index 000000000..b808e4d02 --- /dev/null +++ b/gsd-core/references/offer-next.md @@ -0,0 +1,88 @@ + + + +**Exception:** If `gaps_found`, the `verify_phase_goal` step already presents the gap-closure path (`/gsd:plan-phase {X} --gaps`). No additional routing needed — skip auto-advance. + +**No-transition check (spawned by auto-advance chain):** + +Parse `--no-transition` flag from $ARGUMENTS. + +**If `--no-transition` flag present:** + +Execute-phase was spawned by plan-phase's auto-advance. Do NOT run transition.md. +After verification passes and roadmap is updated, return completion status to parent: + +``` +## PHASE COMPLETE + +Phase: ${PHASE_NUMBER} - ${PHASE_NAME} +Plans: ${completed_count}/${total_count} +Verification: {Passed | Gaps Found} + +[Include aggregate_results output] +``` + +STOP. Do not proceed to auto-advance or transition. + +**If `--no-transition` flag is NOT present:** + +**Auto-advance detection:** + +1. Parse `--auto` flag from $ARGUMENTS +2. Read consolidated auto-mode (`active` = chain flag OR user preference; chain flag already synced in init step): + ```bash + AUTO_MODE=$(gsd_run query check auto-mode --pick active 2>/dev/null || echo "false") + ``` + +**If `--auto` flag present OR `AUTO_MODE` is true (AND verification passed with no gaps):** + +``` +╔══════════════════════════════════════════╗ +║ AUTO-ADVANCING → TRANSITION ║ +║ Phase {X} verified, continuing chain ║ +╚══════════════════════════════════════════╝ +``` + +Execute the transition workflow inline (do NOT use Agent — orchestrator context is ~10-15%, transition needs phase completion data already in context): + +Read and follow `~/.claude/gsd-core/workflows/transition.md`, passing through the `--auto` flag so it propagates to the next phase invocation. + +**If neither `--auto` nor `AUTO_MODE` is true:** + +**STOP. Do not auto-advance. Do not execute transition. Do not plan next phase. Present options to the user and wait.** + +**IMPORTANT: There is NO `/gsd-transition` command. Never suggest it. The transition workflow is internal only.** + +Check whether CONTEXT.md already exists for the next phase: + +```bash +ls .planning/phases/*{next}*/{next}-CONTEXT.md 2>/dev/null || echo "no-context" +``` + +If CONTEXT.md does **not** exist for the next phase, present: + +``` +## ✓ Phase {X}: {Name} Complete + +/gsd:progress ${GSD_WS} — see updated roadmap +/gsd:discuss-phase {next} ${GSD_WS} — start here: discuss next phase before planning ← recommended +/gsd:plan-phase {next} ${GSD_WS} — plan next phase (skip discuss) +/gsd:execute-phase {next} ${GSD_WS} — execute next phase (skip discuss and plan) +``` + +If CONTEXT.md **exists** for the next phase, present: + +``` +## ✓ Phase {X}: {Name} Complete + +/gsd:progress ${GSD_WS} — see updated roadmap +/gsd:plan-phase {next} ${GSD_WS} — start here: plan next phase (CONTEXT.md already present) ← recommended +/gsd:discuss-phase {next} ${GSD_WS} — re-discuss next phase +/gsd:execute-phase {next} ${GSD_WS} — execute next phase (skip planning) +``` + +Only suggest the commands listed above. Do not invent or hallucinate command names. diff --git a/gsd-core/workflows/execute-phase.md b/gsd-core/workflows/execute-phase.md index 06d564e36..cd30bb8c3 100644 --- a/gsd-core/workflows/execute-phase.md +++ b/gsd-core/workflows/execute-phase.md @@ -1569,88 +1569,7 @@ gsd_run query commit "docs(phase-{X}): evolve PROJECT.md after phase completion" - -**Exception:** If `gaps_found`, the `verify_phase_goal` step already presents the gap-closure path (`/gsd:plan-phase {X} --gaps`). No additional routing needed — skip auto-advance. - -**No-transition check (spawned by auto-advance chain):** - -Parse `--no-transition` flag from $ARGUMENTS. - -**If `--no-transition` flag present:** - -Execute-phase was spawned by plan-phase's auto-advance. Do NOT run transition.md. -After verification passes and roadmap is updated, return completion status to parent: - -``` -## PHASE COMPLETE - -Phase: ${PHASE_NUMBER} - ${PHASE_NAME} -Plans: ${completed_count}/${total_count} -Verification: {Passed | Gaps Found} - -[Include aggregate_results output] -``` - -STOP. Do not proceed to auto-advance or transition. - -**If `--no-transition` flag is NOT present:** - -**Auto-advance detection:** - -1. Parse `--auto` flag from $ARGUMENTS -2. Read consolidated auto-mode (`active` = chain flag OR user preference; chain flag already synced in init step): - ```bash - AUTO_MODE=$(gsd_run query check auto-mode --pick active 2>/dev/null || echo "false") - ``` - -**If `--auto` flag present OR `AUTO_MODE` is true (AND verification passed with no gaps):** - -``` -╔══════════════════════════════════════════╗ -║ AUTO-ADVANCING → TRANSITION ║ -║ Phase {X} verified, continuing chain ║ -╚══════════════════════════════════════════╝ -``` - -Execute the transition workflow inline (do NOT use Agent — orchestrator context is ~10-15%, transition needs phase completion data already in context): - -Read and follow `~/.claude/gsd-core/workflows/transition.md`, passing through the `--auto` flag so it propagates to the next phase invocation. - -**If neither `--auto` nor `AUTO_MODE` is true:** - -**STOP. Do not auto-advance. Do not execute transition. Do not plan next phase. Present options to the user and wait.** - -**IMPORTANT: There is NO `/gsd-transition` command. Never suggest it. The transition workflow is internal only.** - -Check whether CONTEXT.md already exists for the next phase: - -```bash -ls .planning/phases/*{next}*/{next}-CONTEXT.md 2>/dev/null || echo "no-context" -``` - -If CONTEXT.md does **not** exist for the next phase, present: - -``` -## ✓ Phase {X}: {Name} Complete - -/gsd:progress ${GSD_WS} — see updated roadmap -/gsd:discuss-phase {next} ${GSD_WS} — start here: discuss next phase before planning ← recommended -/gsd:plan-phase {next} ${GSD_WS} — plan next phase (skip discuss) -/gsd:execute-phase {next} ${GSD_WS} — execute next phase (skip discuss and plan) -``` - -If CONTEXT.md **exists** for the next phase, present: - -``` -## ✓ Phase {X}: {Name} Complete - -/gsd:progress ${GSD_WS} — see updated roadmap -/gsd:plan-phase {next} ${GSD_WS} — start here: plan next phase (CONTEXT.md already present) ← recommended -/gsd:discuss-phase {next} ${GSD_WS} — re-discuss next phase -/gsd:execute-phase {next} ${GSD_WS} — execute next phase (skip planning) -``` - -Only suggest the commands listed above. Do not invent or hallucinate command names. +@~/.claude/gsd-core/references/offer-next.md diff --git a/src/commands.cts b/src/commands.cts index bdb4b8310..72e5522d7 100644 --- a/src/commands.cts +++ b/src/commands.cts @@ -769,28 +769,6 @@ function cmdCommit(cwd: string, message: string | undefined, files: string[] | u return; } - // Normalize --files to repo-relative paths (#2523). path.join(cwd, absPath) - // concatenates instead of resetting (path.resolve does), so absolute phase_dir - // paths emitted by init phase-op (#2428) were joined to cwd+absPath (non-existent) - // and silently dropped by the existence check — and a mixed relative/absolute list - // then committed the relative entries while reporting committed:true. Relative-izing - // also keeps the phase-branch detection below from matching digit-hyphen runs in the - // absolute prefix (e.g. /proj-7-decoy2/ → wrong phase branch). - const filesRel = files && files.length > 0 - ? files.map(f => toPosixPath(path.relative(cwd, path.resolve(cwd, f)))) - : []; - // Reject --files entries resolving OUTSIDE the project root: fail loudly rather - // than silently skip or reach `git add` (which rejects them and would pollute the - // index via an unconditional stagedPaths.push) (#2523). `toPosixPath` only flips - // backslashes, so a `..` escape is still detectable. - for (const rel of filesRel) { - if (rel.startsWith('..') || path.isAbsolute(rel)) { - const result = { committed: false, hash: null, reason: 'path_outside_repo', path: rel }; - output(result, raw, 'failed'); - return; - } - } - // Ensure branching strategy branch exists before first commit (#1278). // Pre-execution workflows (discuss, plan, research) commit artifacts but the branch // was previously only created during execute-phase — too late. @@ -799,7 +777,7 @@ function cmdCommit(cwd: string, message: string | undefined, files: string[] | u let branchName: string | null = null; if (branchingStrategy === 'phase') { // Determine which phase we're committing for from the file paths - const phaseMatch = (filesRel || []).join(' ').match(/(\d+(?:\.\d+)*)-/); + const phaseMatch = (files || []).join(' ').match(/(\d+(?:\.\d+)*)-/); if (phaseMatch) { const phaseNum = phaseMatch[1]; const phaseInfo = findPhaseInternal(cwd, phaseNum) as Record | null; @@ -831,10 +809,10 @@ function cmdCommit(cwd: string, message: string | undefined, files: string[] | u // Stage files const explicitFiles = files && files.length > 0; - const filesToStage = explicitFiles ? filesRel : ['.planning/']; + const filesToStage = explicitFiles ? files : ['.planning/']; const stagedPaths: string[] = []; for (const file of filesToStage) { - const fullPath = path.join(cwd, file); + const fullPath = path.resolve(cwd, file); if (!fs.existsSync(fullPath)) { if (explicitFiles) { // Caller passed an explicit --files list: missing files are skipped. diff --git a/tests/commit-files-pathspec.test.cjs b/tests/commit-files-pathspec.test.cjs index 93c532da1..ff751ef1c 100644 --- a/tests/commit-files-pathspec.test.cjs +++ b/tests/commit-files-pathspec.test.cjs @@ -211,9 +211,11 @@ describe('commit --files: pathspec honors declared scope (#2112)', () => { ); }); - test('#2523: out-of-repo --files path is rejected loudly (path_outside_repo), no index pollution', (t) => { - // An absolute path resolving OUTSIDE the project root must fail loudly, not - // silently skip and not pollute the index via a failed git add (#2523). + test('#2523: out-of-repo --files path is rejected by git (nothing_to_commit), no index pollution', (t) => { + // An absolute path resolving OUTSIDE the project root: git add rejects it → the + // gated stagedPaths.push (on git-add exitCode) skips it → nothing_to_commit. No + // index pollution (#2523). Not "path_outside_repo" (that guard was removed for + // macOS symlink compatibility — the gated push + git's own rejection suffice). const outsideDir = path.join(tmpDir, '..', `gsd-2523-outside-${process.pid}-${Date.now()}`); fs.mkdirSync(outsideDir, { recursive: true }); t.after(() => cleanup(outsideDir)); @@ -226,12 +228,12 @@ describe('commit --files: pathspec honors declared scope (#2112)', () => { ); const parsed = JSON.parse(res.output); assert.strictEqual(parsed.committed, false, 'out-of-repo path must not commit'); - assert.strictEqual(parsed.reason, 'path_outside_repo', `out-of-repo path must fail loudly: ${res.output}`); + assert.strictEqual(parsed.reason, 'nothing_to_commit', `out-of-repo: git rejects → nothing_to_commit: ${res.output}`); // No new commit created (still at the single initial commit). const logCount = execSync('git rev-list --count HEAD', { cwd: tmpDir, encoding: 'utf-8' }).trim(); assert.strictEqual(logCount, '1', 'no new commit must be created for an out-of-repo path'); - // Index stays clean (no pollution from a failed git add). + // Index stays clean (git add failed → nothing staged). const status = execSync('git status --porcelain', { cwd: tmpDir, encoding: 'utf-8' }).trim(); assert.strictEqual(status, '', `index must be clean (no pollution): ${status}`); }); diff --git a/tests/execute-phase-active-flags.test.cjs b/tests/execute-phase-active-flags.test.cjs index 0bfdf892d..341f0acf4 100644 --- a/tests/execute-phase-active-flags.test.cjs +++ b/tests/execute-phase-active-flags.test.cjs @@ -357,17 +357,25 @@ const workflowPath = path.resolve( ); describe('bug #2002: offer_next checks CONTEXT.md before suggesting next step', () => { + // offer_next body extracted to references/offer-next.md (#2537); content tests + // read the reference file. The tag + @-reference remain + // in execute-phase.md. + const offerNextRefPath = path.join(__dirname, '..', 'gsd-core', 'references', 'offer-next.md'); let content; - // Read once — all tests share the same file content - test('setup: workflow file is readable', () => { - content = fs.readFileSync(workflowPath, 'utf-8'); - assert.ok(content.length > 0, 'execute-phase.md must not be empty'); + test('setup: offer-next reference file is readable', () => { + content = fs.readFileSync(offerNextRefPath, 'utf-8'); + assert.ok(content.length > 0, 'offer-next.md must not be empty'); + }); + + test('execute-phase.md still carries the offer_next step + @-reference', () => { + const wf = fs.readFileSync(workflowPath, 'utf-8'); + assert.ok(wf.includes(''), 'offer_next step tag must remain in execute-phase.md'); + assert.ok(wf.includes('references/offer-next.md'), 'execute-phase.md must @-reference the extracted offer-next.md'); }); test('offer_next section checks for CONTEXT.md existence', () => { - content = content || fs.readFileSync(workflowPath, 'utf-8'); - // The workflow must check for CONTEXT.md in the next phase directory + content = content || fs.readFileSync(offerNextRefPath, 'utf-8'); assert.ok( content.includes('CONTEXT.md'), 'offer_next must reference CONTEXT.md to determine primary next step' @@ -375,45 +383,26 @@ describe('bug #2002: offer_next checks CONTEXT.md before suggesting next step', }); test('offer_next presents /gsd-discuss-phase when CONTEXT.md does not exist', () => { - content = content || fs.readFileSync(workflowPath, 'utf-8'); - // Must have a conditional path where discuss-phase is the primary step - // when CONTEXT.md is missing — look for proximity of "not exist"/"missing"/ - // "does not exist" and "gsd-discuss-phase" in the offer_next step - const offerNextIdx = content.indexOf('offer_next'); - assert.ok(offerNextIdx !== -1, 'offer_next step must exist'); - - // Use 5000-char window — the step is ~60 lines of prose before the conditionals - const offerNextSection = content.slice(offerNextIdx, offerNextIdx + 5000); + content = content || fs.readFileSync(offerNextRefPath, 'utf-8'); assert.ok( - /CONTEXT\.md.*does not exist|CONTEXT\.md.*not.*exist|If CONTEXT\.md does/i.test(offerNextSection) || - /gsd-discuss-phase.*recommended|recommended.*gsd-discuss-phase/i.test(offerNextSection), + /CONTEXT\.md.*does not exist|CONTEXT\.md.*not.*exist|If CONTEXT\.md does/i.test(content) || + /gsd-discuss-phase.*recommended|recommended.*gsd-discuss-phase/i.test(content), 'offer_next must present /gsd-discuss-phase as primary when CONTEXT.md does not exist' ); }); test('offer_next presents /gsd-plan-phase when CONTEXT.md exists', () => { - content = content || fs.readFileSync(workflowPath, 'utf-8'); - const offerNextIdx = content.indexOf('offer_next'); - assert.ok(offerNextIdx !== -1, 'offer_next step must exist'); - - const offerNextSection = content.slice(offerNextIdx, offerNextIdx + 5000); + content = content || fs.readFileSync(offerNextRefPath, 'utf-8'); assert.ok( - /CONTEXT\.md.*exists|exists.*CONTEXT\.md|If CONTEXT\.md/i.test(offerNextSection), + /CONTEXT\.md.*exists|exists.*CONTEXT\.md|If CONTEXT\.md/i.test(content), 'offer_next must present /gsd-plan-phase as primary when CONTEXT.md exists' ); }); test('offer_next section contains at least one conditional guard before listing commands', () => { - content = content || fs.readFileSync(workflowPath, 'utf-8'); - const offerNextIdx = content.indexOf('offer_next'); - assert.ok(offerNextIdx !== -1, 'offer_next step must exist'); - - const offerNextSection = content.slice(offerNextIdx, offerNextIdx + 5000); - - // The fixed version must contain at least one "If CONTEXT.md" conditional - // guard before presenting command options. The old flat list had no guard. + content = content || fs.readFileSync(offerNextRefPath, 'utf-8'); assert.ok( - /If CONTEXT\.md/i.test(offerNextSection), + /If CONTEXT\.md/i.test(content), 'offer_next must contain at least one "If CONTEXT.md" conditional guard' ); }); diff --git a/tests/fixtures/golden-install-parity/antigravity.json b/tests/fixtures/golden-install-parity/antigravity.json index 9d7e0ee0b..60e63695c 100644 --- a/tests/fixtures/golden-install-parity/antigravity.json +++ b/tests/fixtures/golden-install-parity/antigravity.json @@ -107,6 +107,7 @@ "gsd-core/references/model-profile-resolution.md": "de81380316d8a37f", "gsd-core/references/model-profiles.md": "6568ca29b6ee00d8", "gsd-core/references/mvp-concepts.md": "3464783eaaef5c10", + "gsd-core/references/offer-next.md": "dff6b2a56a2946cd", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", "gsd-core/references/planner-antipatterns.md": "88a0cd714d33fe34", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -247,7 +248,7 @@ "gsd-core/workflows/docs-update.md": "0b3023a3caa2123f", "gsd-core/workflows/edit-phase.md": "fc932e82ba1f585a", "gsd-core/workflows/eval-review.md": "9e8b169c05098b57", - "gsd-core/workflows/execute-phase.md": "e66b575d3c518cda", + "gsd-core/workflows/execute-phase.md": "8c0521b091bbc1b5", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "1832b97d0923fa67", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "0404bcd32f47715e", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/augment.json b/tests/fixtures/golden-install-parity/augment.json index 17b3f7cb4..b68bd6c20 100644 --- a/tests/fixtures/golden-install-parity/augment.json +++ b/tests/fixtures/golden-install-parity/augment.json @@ -178,6 +178,7 @@ "gsd-core/references/model-profile-resolution.md": "f32bb05102839767", "gsd-core/references/model-profiles.md": "e067ad3df6770db1", "gsd-core/references/mvp-concepts.md": "72f7e8b1f8ae7118", + "gsd-core/references/offer-next.md": "689740e4c2ed16f4", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", "gsd-core/references/planner-antipatterns.md": "013ad54062399dad", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -318,7 +319,7 @@ "gsd-core/workflows/docs-update.md": "a320371be70f43d8", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", - "gsd-core/workflows/execute-phase.md": "30121657c6f64883", + "gsd-core/workflows/execute-phase.md": "fcc3181bc5593f8f", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/claude-local.json b/tests/fixtures/golden-install-parity/claude-local.json index ea8021c69..9120e2a6e 100644 --- a/tests/fixtures/golden-install-parity/claude-local.json +++ b/tests/fixtures/golden-install-parity/claude-local.json @@ -177,6 +177,7 @@ "gsd-core/references/model-profile-resolution.md": "18e7cfd4ba0ca9bc", "gsd-core/references/model-profiles.md": "c249163663bbea53", "gsd-core/references/mvp-concepts.md": "3464783eaaef5c10", + "gsd-core/references/offer-next.md": "e483957e308f1022", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", "gsd-core/references/planner-antipatterns.md": "013ad54062399dad", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -317,7 +318,7 @@ "gsd-core/workflows/docs-update.md": "7aef1019ce141558", "gsd-core/workflows/edit-phase.md": "dbbb6191f5a8b65e", "gsd-core/workflows/eval-review.md": "11620e0dc4a003dd", - "gsd-core/workflows/execute-phase.md": "54aaa0d54b341308", + "gsd-core/workflows/execute-phase.md": "abebe1ef79aa5786", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "9a1f3deffb4dab14", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ea0ebff5ac00fee6", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/claude.json b/tests/fixtures/golden-install-parity/claude.json index 891a8e0ee..04be146f7 100644 --- a/tests/fixtures/golden-install-parity/claude.json +++ b/tests/fixtures/golden-install-parity/claude.json @@ -106,6 +106,7 @@ "gsd-core/references/model-profile-resolution.md": "f32bb05102839767", "gsd-core/references/model-profiles.md": "c249163663bbea53", "gsd-core/references/mvp-concepts.md": "3464783eaaef5c10", + "gsd-core/references/offer-next.md": "8f98bc9d5956a004", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", "gsd-core/references/planner-antipatterns.md": "013ad54062399dad", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -246,7 +247,7 @@ "gsd-core/workflows/docs-update.md": "ea47bd2d5a0d1d85", "gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a", "gsd-core/workflows/eval-review.md": "7c2f5ff8cc4d06e5", - "gsd-core/workflows/execute-phase.md": "a3ccfb42c90834b7", + "gsd-core/workflows/execute-phase.md": "f88215925dc01075", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "d2020c5e01c7bd7f", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/cline.json b/tests/fixtures/golden-install-parity/cline.json index d53b9843f..56561fb76 100644 --- a/tests/fixtures/golden-install-parity/cline.json +++ b/tests/fixtures/golden-install-parity/cline.json @@ -110,6 +110,7 @@ "gsd-core/references/model-profile-resolution.md": "f32bb05102839767", "gsd-core/references/model-profiles.md": "1794ad3d9854129e", "gsd-core/references/mvp-concepts.md": "72f7e8b1f8ae7118", + "gsd-core/references/offer-next.md": "689740e4c2ed16f4", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", "gsd-core/references/planner-antipatterns.md": "013ad54062399dad", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -250,7 +251,7 @@ "gsd-core/workflows/docs-update.md": "7eb7095ca86d506f", "gsd-core/workflows/edit-phase.md": "9c9fadc047c61d74", "gsd-core/workflows/eval-review.md": "17fc9b4c4f7e1c74", - "gsd-core/workflows/execute-phase.md": "bb3a5f28fc4543f2", + "gsd-core/workflows/execute-phase.md": "769064cfeb1baf4a", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "1b3558cb8f41b65a", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "e01459552d587863", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/codebuddy.json b/tests/fixtures/golden-install-parity/codebuddy.json index 404e0a4fd..0825415c2 100644 --- a/tests/fixtures/golden-install-parity/codebuddy.json +++ b/tests/fixtures/golden-install-parity/codebuddy.json @@ -178,6 +178,7 @@ "gsd-core/references/model-profile-resolution.md": "f32bb05102839767", "gsd-core/references/model-profiles.md": "e067ad3df6770db1", "gsd-core/references/mvp-concepts.md": "72f7e8b1f8ae7118", + "gsd-core/references/offer-next.md": "689740e4c2ed16f4", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", "gsd-core/references/planner-antipatterns.md": "013ad54062399dad", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -318,7 +319,7 @@ "gsd-core/workflows/docs-update.md": "a320371be70f43d8", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", - "gsd-core/workflows/execute-phase.md": "9d513e6bb52e340c", + "gsd-core/workflows/execute-phase.md": "79e703c637e2d7b1", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/codex.json b/tests/fixtures/golden-install-parity/codex.json index c410f8290..cfdefde19 100644 --- a/tests/fixtures/golden-install-parity/codex.json +++ b/tests/fixtures/golden-install-parity/codex.json @@ -213,6 +213,7 @@ "gsd-core/references/model-profile-resolution.md": "f32bb05102839767", "gsd-core/references/model-profiles.md": "bd90862f68007f2e", "gsd-core/references/mvp-concepts.md": "23201c8118fb074a", + "gsd-core/references/offer-next.md": "449c021d2552df02", "gsd-core/references/phase-argument-parsing.md": "531176f66da49c98", "gsd-core/references/planner-antipatterns.md": "88a0cd714d33fe34", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -353,7 +354,7 @@ "gsd-core/workflows/docs-update.md": "bf32efe90219d3dd", "gsd-core/workflows/edit-phase.md": "e592a4d85ce5380f", "gsd-core/workflows/eval-review.md": "c89a63285ead961e", - "gsd-core/workflows/execute-phase.md": "a4040b3faa7fcd55", + "gsd-core/workflows/execute-phase.md": "7bcc0a33f91336c7", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "cd8678d082d6e191", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/copilot.json b/tests/fixtures/golden-install-parity/copilot.json index 8c2dc2aef..f8e3d7744 100644 --- a/tests/fixtures/golden-install-parity/copilot.json +++ b/tests/fixtures/golden-install-parity/copilot.json @@ -108,6 +108,7 @@ "gsd-core/references/model-profile-resolution.md": "1d392e37a746742a", "gsd-core/references/model-profiles.md": "6568ca29b6ee00d8", "gsd-core/references/mvp-concepts.md": "3464783eaaef5c10", + "gsd-core/references/offer-next.md": "220b59815223d1b7", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", "gsd-core/references/planner-antipatterns.md": "88a0cd714d33fe34", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -248,7 +249,7 @@ "gsd-core/workflows/docs-update.md": "f64b067d0d729f04", "gsd-core/workflows/edit-phase.md": "8667c28b22b1599f", "gsd-core/workflows/eval-review.md": "1ae2d3d3fbf72893", - "gsd-core/workflows/execute-phase.md": "8febab8a96bcd729", + "gsd-core/workflows/execute-phase.md": "d9ad04be8e897208", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "ca37f91f7bd6f05c", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "e0ec3d9748a0fed9", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/cursor.json b/tests/fixtures/golden-install-parity/cursor.json index ba4d1891a..124808242 100644 --- a/tests/fixtures/golden-install-parity/cursor.json +++ b/tests/fixtures/golden-install-parity/cursor.json @@ -178,6 +178,7 @@ "gsd-core/references/model-profile-resolution.md": "f32bb05102839767", "gsd-core/references/model-profiles.md": "5452b2e19e19f77e", "gsd-core/references/mvp-concepts.md": "3464783eaaef5c10", + "gsd-core/references/offer-next.md": "1c9ae4014a95d269", "gsd-core/references/phase-argument-parsing.md": "e562947d1bf5c5a4", "gsd-core/references/planner-antipatterns.md": "013ad54062399dad", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -318,7 +319,7 @@ "gsd-core/workflows/docs-update.md": "215b0122c4d2b1e5", "gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a", "gsd-core/workflows/eval-review.md": "9389c58f7384972d", - "gsd-core/workflows/execute-phase.md": "5038eb8c1e264b90", + "gsd-core/workflows/execute-phase.md": "e8ddb24f9cdca5f0", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "d2020c5e01c7bd7f", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "06b54ecd4015c64c", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/hermes.json b/tests/fixtures/golden-install-parity/hermes.json index 2e0d23d5f..c6b2446ea 100644 --- a/tests/fixtures/golden-install-parity/hermes.json +++ b/tests/fixtures/golden-install-parity/hermes.json @@ -107,6 +107,7 @@ "gsd-core/references/model-profile-resolution.md": "8a1267752a05af27", "gsd-core/references/model-profiles.md": "6012c3b53473f04f", "gsd-core/references/mvp-concepts.md": "3464783eaaef5c10", + "gsd-core/references/offer-next.md": "8f98bc9d5956a004", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", "gsd-core/references/planner-antipatterns.md": "013ad54062399dad", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -247,7 +248,7 @@ "gsd-core/workflows/docs-update.md": "02811dd7aa32d5ba", "gsd-core/workflows/edit-phase.md": "7f27003f20e88fb8", "gsd-core/workflows/eval-review.md": "e7cd5dfcf18e2458", - "gsd-core/workflows/execute-phase.md": "2c22f9d143c79deb", + "gsd-core/workflows/execute-phase.md": "fcf5f258a1e2aeea", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "9b2193de25506b3b", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "4dfefdd56d814d06", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "26ee34c543926402", diff --git a/tests/fixtures/golden-install-parity/kilo.json b/tests/fixtures/golden-install-parity/kilo.json index 277dd16f3..eaa87efcb 100644 --- a/tests/fixtures/golden-install-parity/kilo.json +++ b/tests/fixtures/golden-install-parity/kilo.json @@ -178,6 +178,7 @@ "gsd-core/references/model-profile-resolution.md": "f32bb05102839767", "gsd-core/references/model-profiles.md": "6568ca29b6ee00d8", "gsd-core/references/mvp-concepts.md": "3464783eaaef5c10", + "gsd-core/references/offer-next.md": "8f98bc9d5956a004", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", "gsd-core/references/planner-antipatterns.md": "88a0cd714d33fe34", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -318,7 +319,7 @@ "gsd-core/workflows/docs-update.md": "3c0d5ef72202d246", "gsd-core/workflows/edit-phase.md": "8323bfe10faa0c0a", "gsd-core/workflows/eval-review.md": "35be91cd22a9bc11", - "gsd-core/workflows/execute-phase.md": "9d2e270c04edc134", + "gsd-core/workflows/execute-phase.md": "e41ab56e1388afc8", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "b1e6588cd32a6f08", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/kimi-code.json b/tests/fixtures/golden-install-parity/kimi-code.json index e4fee5640..1ea320df0 100644 --- a/tests/fixtures/golden-install-parity/kimi-code.json +++ b/tests/fixtures/golden-install-parity/kimi-code.json @@ -135,6 +135,7 @@ "gsd-core/references/model-profile-resolution.md": "f32bb05102839767", "gsd-core/references/model-profiles.md": "e067ad3df6770db1", "gsd-core/references/mvp-concepts.md": "72f7e8b1f8ae7118", + "gsd-core/references/offer-next.md": "689740e4c2ed16f4", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", "gsd-core/references/planner-antipatterns.md": "013ad54062399dad", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -275,7 +276,7 @@ "gsd-core/workflows/docs-update.md": "a320371be70f43d8", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", - "gsd-core/workflows/execute-phase.md": "6eddb1de70dabecd", + "gsd-core/workflows/execute-phase.md": "6a663b8755ed216e", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/kimi.json b/tests/fixtures/golden-install-parity/kimi.json index ad171de91..42a8d3e63 100644 --- a/tests/fixtures/golden-install-parity/kimi.json +++ b/tests/fixtures/golden-install-parity/kimi.json @@ -171,6 +171,7 @@ "gsd-core/references/model-profile-resolution.md": "f32bb05102839767", "gsd-core/references/model-profiles.md": "e067ad3df6770db1", "gsd-core/references/mvp-concepts.md": "72f7e8b1f8ae7118", + "gsd-core/references/offer-next.md": "689740e4c2ed16f4", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", "gsd-core/references/planner-antipatterns.md": "013ad54062399dad", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -311,7 +312,7 @@ "gsd-core/workflows/docs-update.md": "a320371be70f43d8", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", - "gsd-core/workflows/execute-phase.md": "1eaaf339d670c496", + "gsd-core/workflows/execute-phase.md": "df8c032fb91cedbd", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/opencode.json b/tests/fixtures/golden-install-parity/opencode.json index 3293590ca..a31661f9c 100644 --- a/tests/fixtures/golden-install-parity/opencode.json +++ b/tests/fixtures/golden-install-parity/opencode.json @@ -178,6 +178,7 @@ "gsd-core/references/model-profile-resolution.md": "858c16730df68ac2", "gsd-core/references/model-profiles.md": "6568ca29b6ee00d8", "gsd-core/references/mvp-concepts.md": "3464783eaaef5c10", + "gsd-core/references/offer-next.md": "6456306b03a6dd5e", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", "gsd-core/references/planner-antipatterns.md": "88a0cd714d33fe34", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -318,7 +319,7 @@ "gsd-core/workflows/docs-update.md": "f6210dc8ff7776d5", "gsd-core/workflows/edit-phase.md": "1876c855fb0a0a39", "gsd-core/workflows/eval-review.md": "1973f08d0eb34159", - "gsd-core/workflows/execute-phase.md": "b5b307cf98e1ff22", + "gsd-core/workflows/execute-phase.md": "78169e590b406fa8", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "a15993affd62f4bf", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "f74ce2de21b2d252", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/pi.json b/tests/fixtures/golden-install-parity/pi.json index fca5722f5..9d4876fce 100644 --- a/tests/fixtures/golden-install-parity/pi.json +++ b/tests/fixtures/golden-install-parity/pi.json @@ -74,6 +74,7 @@ "gsd-core/references/model-profile-resolution.md": "f32bb05102839767", "gsd-core/references/model-profiles.md": "e067ad3df6770db1", "gsd-core/references/mvp-concepts.md": "72f7e8b1f8ae7118", + "gsd-core/references/offer-next.md": "689740e4c2ed16f4", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", "gsd-core/references/planner-antipatterns.md": "013ad54062399dad", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -214,7 +215,7 @@ "gsd-core/workflows/docs-update.md": "a320371be70f43d8", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", - "gsd-core/workflows/execute-phase.md": "6bcbae12578d3cb8", + "gsd-core/workflows/execute-phase.md": "4eddcc41c823db8b", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/qwen.json b/tests/fixtures/golden-install-parity/qwen.json index 5ad3b9494..5aced9709 100644 --- a/tests/fixtures/golden-install-parity/qwen.json +++ b/tests/fixtures/golden-install-parity/qwen.json @@ -107,6 +107,7 @@ "gsd-core/references/model-profile-resolution.md": "f32bb05102839767", "gsd-core/references/model-profiles.md": "0b7e06ed2e4abac8", "gsd-core/references/mvp-concepts.md": "3464783eaaef5c10", + "gsd-core/references/offer-next.md": "8f98bc9d5956a004", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", "gsd-core/references/planner-antipatterns.md": "013ad54062399dad", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -247,7 +248,7 @@ "gsd-core/workflows/docs-update.md": "226550a6d556b09f", "gsd-core/workflows/edit-phase.md": "0fb5e0123cfc6f36", "gsd-core/workflows/eval-review.md": "88431952699d9fa6", - "gsd-core/workflows/execute-phase.md": "febed65d77f311af", + "gsd-core/workflows/execute-phase.md": "da1e79f7407090a9", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "0e0949db56deebeb", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "2ca3c7397d44613f", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/trae.json b/tests/fixtures/golden-install-parity/trae.json index d44bbd477..ff5efbdad 100644 --- a/tests/fixtures/golden-install-parity/trae.json +++ b/tests/fixtures/golden-install-parity/trae.json @@ -107,6 +107,7 @@ "gsd-core/references/model-profile-resolution.md": "f32bb05102839767", "gsd-core/references/model-profiles.md": "b4527b0f255d193f", "gsd-core/references/mvp-concepts.md": "3464783eaaef5c10", + "gsd-core/references/offer-next.md": "1c9ae4014a95d269", "gsd-core/references/phase-argument-parsing.md": "e562947d1bf5c5a4", "gsd-core/references/planner-antipatterns.md": "013ad54062399dad", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -247,7 +248,7 @@ "gsd-core/workflows/docs-update.md": "89e760e665ff99f8", "gsd-core/workflows/edit-phase.md": "7facd0faa33c8cad", "gsd-core/workflows/eval-review.md": "90a29a4fa0cdd947", - "gsd-core/workflows/execute-phase.md": "6414076b8a380b33", + "gsd-core/workflows/execute-phase.md": "67f3aaa7eae674e2", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "296b812e8d0e9ce8", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "c1d6db937a51d433", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/windsurf.json b/tests/fixtures/golden-install-parity/windsurf.json index 3f8c3decf..8940b64db 100644 --- a/tests/fixtures/golden-install-parity/windsurf.json +++ b/tests/fixtures/golden-install-parity/windsurf.json @@ -107,6 +107,7 @@ "gsd-core/references/model-profile-resolution.md": "f32bb05102839767", "gsd-core/references/model-profiles.md": "09aa53e3f1764a41", "gsd-core/references/mvp-concepts.md": "3464783eaaef5c10", + "gsd-core/references/offer-next.md": "1c9ae4014a95d269", "gsd-core/references/phase-argument-parsing.md": "e562947d1bf5c5a4", "gsd-core/references/planner-antipatterns.md": "013ad54062399dad", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -247,7 +248,7 @@ "gsd-core/workflows/docs-update.md": "6bd25d0123ee6c73", "gsd-core/workflows/edit-phase.md": "c0ae7d0063f3e789", "gsd-core/workflows/eval-review.md": "713de00ea5326988", - "gsd-core/workflows/execute-phase.md": "706eef1de2da75a7", + "gsd-core/workflows/execute-phase.md": "043544b7a948cae5", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "3194ecd382690755", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "becb931701890353", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/golden-install-parity/zcode.json b/tests/fixtures/golden-install-parity/zcode.json index 41486e8a2..d17febbbf 100644 --- a/tests/fixtures/golden-install-parity/zcode.json +++ b/tests/fixtures/golden-install-parity/zcode.json @@ -178,6 +178,7 @@ "gsd-core/references/model-profile-resolution.md": "f32bb05102839767", "gsd-core/references/model-profiles.md": "e067ad3df6770db1", "gsd-core/references/mvp-concepts.md": "72f7e8b1f8ae7118", + "gsd-core/references/offer-next.md": "689740e4c2ed16f4", "gsd-core/references/phase-argument-parsing.md": "e5bbb985f3bc3e34", "gsd-core/references/planner-antipatterns.md": "013ad54062399dad", "gsd-core/references/planner-chunked.md": "79fe674221e738e6", @@ -318,7 +319,7 @@ "gsd-core/workflows/docs-update.md": "a320371be70f43d8", "gsd-core/workflows/edit-phase.md": "966a3eadd1bebc04", "gsd-core/workflows/eval-review.md": "32d3d7e80ab2bfc7", - "gsd-core/workflows/execute-phase.md": "8d16d4af7115e12b", + "gsd-core/workflows/execute-phase.md": "1fb281c6e0511e2a", "gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md": "f7782680c2b8ad6b", "gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md": "ab70374e44eb85cd", "gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md": "7ebb7d1af6082028", diff --git a/tests/fixtures/install-tree/antigravity.json b/tests/fixtures/install-tree/antigravity.json index e3ba38f69..efeb7b365 100644 --- a/tests/fixtures/install-tree/antigravity.json +++ b/tests/fixtures/install-tree/antigravity.json @@ -107,6 +107,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/augment.json b/tests/fixtures/install-tree/augment.json index 6cf3b03c8..547e28f63 100644 --- a/tests/fixtures/install-tree/augment.json +++ b/tests/fixtures/install-tree/augment.json @@ -178,6 +178,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/claude-local.json b/tests/fixtures/install-tree/claude-local.json index 1c011e47a..795eb7ed7 100644 --- a/tests/fixtures/install-tree/claude-local.json +++ b/tests/fixtures/install-tree/claude-local.json @@ -177,6 +177,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/claude.json b/tests/fixtures/install-tree/claude.json index c10932de4..d1cdceeef 100644 --- a/tests/fixtures/install-tree/claude.json +++ b/tests/fixtures/install-tree/claude.json @@ -106,6 +106,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/cline.json b/tests/fixtures/install-tree/cline.json index 263383cf3..a9be93655 100644 --- a/tests/fixtures/install-tree/cline.json +++ b/tests/fixtures/install-tree/cline.json @@ -110,6 +110,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/codebuddy.json b/tests/fixtures/install-tree/codebuddy.json index 3ba833652..d95772f46 100644 --- a/tests/fixtures/install-tree/codebuddy.json +++ b/tests/fixtures/install-tree/codebuddy.json @@ -178,6 +178,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/codex.json b/tests/fixtures/install-tree/codex.json index 94b5406bf..ba8c3778f 100644 --- a/tests/fixtures/install-tree/codex.json +++ b/tests/fixtures/install-tree/codex.json @@ -213,6 +213,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/copilot.json b/tests/fixtures/install-tree/copilot.json index c4af4f629..ef2d19f97 100644 --- a/tests/fixtures/install-tree/copilot.json +++ b/tests/fixtures/install-tree/copilot.json @@ -108,6 +108,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/cursor.json b/tests/fixtures/install-tree/cursor.json index cf8a60f64..e905d9832 100644 --- a/tests/fixtures/install-tree/cursor.json +++ b/tests/fixtures/install-tree/cursor.json @@ -178,6 +178,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/hermes.json b/tests/fixtures/install-tree/hermes.json index 89db6422c..baf3fb08a 100644 --- a/tests/fixtures/install-tree/hermes.json +++ b/tests/fixtures/install-tree/hermes.json @@ -107,6 +107,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/kilo.json b/tests/fixtures/install-tree/kilo.json index 326c09315..a4867235a 100644 --- a/tests/fixtures/install-tree/kilo.json +++ b/tests/fixtures/install-tree/kilo.json @@ -178,6 +178,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/kimi-code.json b/tests/fixtures/install-tree/kimi-code.json index e470d8d64..a3905629d 100644 --- a/tests/fixtures/install-tree/kimi-code.json +++ b/tests/fixtures/install-tree/kimi-code.json @@ -135,6 +135,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/kimi.json b/tests/fixtures/install-tree/kimi.json index ab6e6686b..15d2bd4a2 100644 --- a/tests/fixtures/install-tree/kimi.json +++ b/tests/fixtures/install-tree/kimi.json @@ -171,6 +171,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/opencode.json b/tests/fixtures/install-tree/opencode.json index 865a39e2f..e5a9af99f 100644 --- a/tests/fixtures/install-tree/opencode.json +++ b/tests/fixtures/install-tree/opencode.json @@ -178,6 +178,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/pi.json b/tests/fixtures/install-tree/pi.json index a497ed424..8d910bf75 100644 --- a/tests/fixtures/install-tree/pi.json +++ b/tests/fixtures/install-tree/pi.json @@ -74,6 +74,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/qwen.json b/tests/fixtures/install-tree/qwen.json index 87c62c8fb..2add04b98 100644 --- a/tests/fixtures/install-tree/qwen.json +++ b/tests/fixtures/install-tree/qwen.json @@ -107,6 +107,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/trae.json b/tests/fixtures/install-tree/trae.json index 97bec2ec0..3fbed2419 100644 --- a/tests/fixtures/install-tree/trae.json +++ b/tests/fixtures/install-tree/trae.json @@ -107,6 +107,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/windsurf.json b/tests/fixtures/install-tree/windsurf.json index 1ac070e8c..2dd72c19b 100644 --- a/tests/fixtures/install-tree/windsurf.json +++ b/tests/fixtures/install-tree/windsurf.json @@ -107,6 +107,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/fixtures/install-tree/zcode.json b/tests/fixtures/install-tree/zcode.json index f30b96cd6..dde29106f 100644 --- a/tests/fixtures/install-tree/zcode.json +++ b/tests/fixtures/install-tree/zcode.json @@ -178,6 +178,7 @@ "gsd-core/references/model-profile-resolution.md", "gsd-core/references/model-profiles.md", "gsd-core/references/mvp-concepts.md", + "gsd-core/references/offer-next.md", "gsd-core/references/phase-argument-parsing.md", "gsd-core/references/planner-antipatterns.md", "gsd-core/references/planner-chunked.md", diff --git a/tests/workflow-size-baseline.json b/tests/workflow-size-baseline.json index 8c20d8a65..260ef4378 100644 --- a/tests/workflow-size-baseline.json +++ b/tests/workflow-size-baseline.json @@ -24,7 +24,7 @@ "docs-update.md": 56494, "edit-phase.md": 12927, "eval-review.md": 10332, - "execute-phase.md": 93263, + "execute-phase.md": 90143, "execute-plan.md": 35143, "explore.md": 11127, "extract-learnings.md": 12893,