diff --git a/.changeset/humble-orcas-roam.md b/.changeset/humble-orcas-roam.md new file mode 100644 index 000000000..d43336aaa --- /dev/null +++ b/.changeset/humble-orcas-roam.md @@ -0,0 +1,5 @@ +--- +type: Fixed +pr: 2731 +--- +**Debug sessions now commit their session docs** — with `commit_docs: true`, finishing a `/gsd:debug` session left the session doc (and sometimes the fix's own code changes) sitting untracked in the working tree. The session manager, which owns the end of a debug session, never had a commit step — only the single-spawn debugger path did. Terminal sessions now commit the doc and any uncommitted in-session fix code, still respecting `commit_docs`; sessions that pause mid-investigation deliberately do not. (#2568) diff --git a/agents/gsd-debug-session-manager.md b/agents/gsd-debug-session-manager.md index a0c719de1..47a3d5bbe 100644 --- a/agents/gsd-debug-session-manager.md +++ b/agents/gsd-debug-session-manager.md @@ -310,6 +310,41 @@ If user selects 3: proceed to Step 4 with fix = "not applied (guardrail rejected Read the resolved (or current) debug file to extract final Resolution values. +**Commit before returning a terminal summary (#2568).** This agent owns the terminal path — +it applies fixes, archives to `resolved/`, and returns the summary — but carried no commit +step, so `commit_docs` was never consulted on the normal `/gsd:debug` flow and session docs +were left untracked. Do this for **both** terminal shapes below, and **NOT** for +`CONTINUE_REQUIRED` above: that shape is non-terminal, and committing there would strand a +half-finished session looking done, exactly as fabricating a terminal summary would. +`CHECKPOINT REACHED` (Step 3d) likewise does not commit — it pauses for user input and loops +back to Step 3. + +1. **In-session fix code.** If a fix was applied during this session and its code changes are + still uncommitted, commit them first. Stage **specific files only** — the files the fix + touched. Do this rather than `git add -A`, which would sweep unrelated working-tree + changes into a debug commit. Guard on staged content: `gsd-debugger.md`'s + `archive_session` step may already have committed this fix on the confirmed-checkpoint + path, and a bare `git commit` with nothing staged exits non-zero and would abort this + step before the summary is returned: + ```bash + git add + git diff --cached --quiet || git commit -m "fix: {brief description}" + ``` +2. **Session doc.** Commit via the CLI, which already gates on `commit_docs` and returns + `skipped_commit_docs_false` when disabled — call it unconditionally rather than + re-checking the config here, so the policy lives in one place. `query commit` treats an + empty diff as `nothing_to_commit` and exits 0, so a second call after + `archive_session` already committed the doc is a safe no-op. The canonical `gsd_run` preamble is + established once in Step 2 and is the single definition this agent carries (repo + invariant: exactly one preamble per agent file, before its first call): + ```bash + # resolved session — path spelled literally; this agent receives `slug` and + # `debug_file_path`, NOT a `debug_dir` variable (see ). + gsd_run query commit "docs(debug): resolve {slug} session" --files .planning/debug/resolved/{slug}.md + # abandoned session (checkpoint retained for `/gsd:debug continue {slug}`) + gsd_run query commit "docs(debug): checkpoint {slug} session" --files {debug_file_path} + ``` + Return compact summary (terminal — investigation resolved): ```markdown @@ -349,5 +384,6 @@ If the session was abandoned by user choice, return (terminal — user stopped): - [ ] TDD gate applied when tdd_mode=true and ROOT CAUSE FOUND - [ ] Loop continues until DEBUG COMPLETE, ABANDONED, or user stops - [ ] Non-terminal `CONTINUE_REQUIRED` (not a fabricated terminal summary) returned when the manager's own turn/context budget is exhausted mid-investigation +- [ ] Session doc (and any uncommitted fix code from this session) committed before a terminal summary, respecting `commit_docs` — and NOT committed on the non-terminal `CONTINUE_REQUIRED` path - [ ] Compact summary returned (at most 2K tokens) diff --git a/tests/agent-size-baseline.json b/tests/agent-size-baseline.json index db1334fcf..f93bf0b2e 100644 --- a/tests/agent-size-baseline.json +++ b/tests/agent-size-baseline.json @@ -5,7 +5,7 @@ "gsd-code-fixer.md": 36640, "gsd-code-reviewer.md": 16870, "gsd-codebase-mapper.md": 21614, - "gsd-debug-session-manager.md": 17161, + "gsd-debug-session-manager.md": 19751, "gsd-debugger.md": 57197, "gsd-doc-classifier.md": 11717, "gsd-doc-synthesizer.md": 13154, diff --git a/tests/debug-session-manager-commit.test.cjs b/tests/debug-session-manager-commit.test.cjs new file mode 100644 index 000000000..03fcc2240 --- /dev/null +++ b/tests/debug-session-manager-commit.test.cjs @@ -0,0 +1,286 @@ +// allow-test-rule: runtime-contract-is-the-product see #2568 +// agents/gsd-debug-session-manager.md is executed instruction text: the orchestrator +// follows it verbatim, so WHERE the commit step sits relative to the terminal vs +// non-terminal summary shapes IS the contract. The commit_docs gate it relies on is +// real code and is exercised behaviorally through the CLI below. +'use strict'; + +const { test } = require('node:test'); +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); +const { runGsdTools, createTempGitProject, cleanup } = require('./helpers.cjs'); + +const ROOT = path.resolve(__dirname, '..'); +const MANAGER = path.join(ROOT, 'agents', 'gsd-debug-session-manager.md'); +const DEBUGGER = path.join(ROOT, 'agents', 'gsd-debugger.md'); + +const manager = () => fs.readFileSync(MANAGER, 'utf8'); + +/** Offset of a marker, asserted present so a rename fails loudly instead of silently. */ +function offsetOf(body, marker, label) { + const i = body.indexOf(marker); + assert.notEqual(i, -1, `${label}: marker ${JSON.stringify(marker)} not found in the manager spec`); + return i; +} + +test('#2568: the manager commits the session doc before a terminal summary', () => { + const body = manager(); + + // The bug: zero occurrences of `commit` in the whole file, so nothing on the + // manager-driven path ever consults commit_docs. + assert.match( + body, + /gsd_run query commit/, + 'the manager owns the terminal path and must commit the session doc via the CLI — ' + + 'the step existed only in gsd-debugger.md, which does not reach the end of a ' + + 'manager-driven session (#2568)', + ); + + // Resolved and abandoned shapes each need their own doc committed. + assert.match( + body, + /gsd_run query commit[^\n]*resolved/, + 'the resolved session doc (.planning/debug/resolved/{slug}.md) must be committed', + ); + assert.match( + body, + /gsd_run query commit[^\n]*(debug_file_path|checkpoint)/, + 'the abandoned/checkpoint session doc must be committed', + ); + + // Ordering: the commit instruction must PRECEDE the terminal summary it guards. + const firstCommit = offsetOf(body, 'gsd_run query commit', 'commit step'); + const terminal = offsetOf(body, '## DEBUG SESSION COMPLETE', 'terminal summary'); + assert.ok( + firstCommit < terminal, + 'the commit must come BEFORE the terminal summary — committing after returning is ' + + 'unreachable, which is the shape of the original bug', + ); +}); + +test('#2568: the manager must NOT commit on the non-terminal CONTINUE_REQUIRED path', () => { + const body = manager(); + + // The manager's own contract forbids treating CONTINUE_REQUIRED as an ending + // ("do NOT fabricate a DEBUG SESSION COMPLETE or ABANDONED summary to fit this + // shape"). A commit there is that same lie in git form: it would strand a + // half-finished session looking done. A fix that committed unconditionally + // would satisfy the previous test and be WORSE than the bug. + assert.match( + body, + /CONTINUE_REQUIRED/, + 'precondition: the non-terminal marker exists', + ); + assert.match( + body, + /NOT[^\n]*CONTINUE_REQUIRED|CONTINUE_REQUIRED[^\n]*(?:no commit|not commit|never commit)/i, + 'the spec must explicitly exclude CONTINUE_REQUIRED from the commit step — an ' + + 'unscoped "commit before returning" would commit mid-investigation (#2568)', + ); + + // Structural: the commit block must sit after the CONTINUE_REQUIRED fence, so an + // orchestrator taking the early-return path never reaches it. + const continueFence = offsetOf(body, '## CONTINUE_REQUIRED', 'CONTINUE_REQUIRED shape'); + const firstCommit = offsetOf(body, 'gsd_run query commit', 'commit step'); + assert.ok( + firstCommit > continueFence, + 'the commit step must come after the CONTINUE_REQUIRED early-return block, not before it', + ); +}); + +test('#2568: the manager stages specific files and never git add -A', () => { + const body = manager(); + // Target an INSTRUCTION, not any mention: the spec legitimately names `git add -A` + // in order to forbid it, and a bare substring check would reject the prohibition + // itself. What must never appear is a command line telling the agent to run it. + assert.doesNotMatch( + body, + /^\s*git add -A/m, + 'staging everything would sweep unrelated working-tree changes into a debug commit ' + + '(#2568 explicitly requires specific-file staging)', + ); + assert.match( + body, + /never `?git add -A`?|specific files only/i, + 'the spec must say so, not merely avoid it — the next editor needs the reason', + ); +}); + +test('#2568: the commit obligation is a checkable success criterion', () => { + const body = manager(); + const criteria = body.slice(body.indexOf('')); + assert.ok(criteria.length > 0, 'precondition: the success_criteria block exists'); + assert.match( + criteria, + /commit/i, + 'the success criteria must include the commit obligation so the gate is checkable ' + + 'rather than buried in prose (#2568 criterion 4)', + ); + assert.match( + criteria, + /commit_docs/, + 'the criterion must name commit_docs — the setting that was silently ignored', + ); +}); + +test('#2568: the fix does not touch agent frontmatter', () => { + // An agent frontmatter edit ripples to research-profiles and AGENTS.md. This change + // is body-only, so the frontmatter must still parse and carry its original keys. + const body = manager(); + assert.match(body, /^---\r?\n/, 'frontmatter fence present'); + const end = body.indexOf('\n---', 4); + assert.ok(end > 0, 'frontmatter terminates'); + const fm = body.slice(0, end); + assert.match(fm, /^name:\s*gsd-debug-session-manager$/m, 'name key intact'); + assert.doesNotMatch(fm, /commit/i, 'the commit instruction must live in the body, not frontmatter'); +}); + +test('#2568: the debugger keeps its own commit step for the single-spawn path', () => { + // Removing it to "avoid duplication" would break the flow where the debugger + // legitimately carries a fix to completion inside one spawn. A double commit is + // harmless — the second finds nothing to stage. + const body = fs.readFileSync(DEBUGGER, 'utf8'); + assert.match( + body, + /gsd_run query commit[^\n]*resolved/, + 'gsd-debugger.md must retain its own doc-commit step', + ); +}); + +test('#2568: every token substituted into a commit command is a declared session parameter', () => { + // The first cut of this fix pasted `{debug_dir}` straight from the issue's suggested + // patch. That variable is real in gsd-core/workflows/debug.md — the ORCHESTRATOR + // receives it from init JSON — but this agent never does: + // declares only slug, debug_file_path, symptoms_prefilled, tdd_mode, goal and + // specialist_dispatch_enabled. An unbound token makes --files resolve to a + // nonexistent path, cmdCommit skips missing explicit files, and the doc silently + // never commits — reproducing #2568 through a different broken path. Same class as + // #2684's dangling placeholders. + const body = manager(); + + const block = body.slice(body.indexOf(''), body.indexOf('')); + const declared = new Set([...block.matchAll(/^- `([a-z_]+)`/gm)].map((m) => m[1])); + assert.ok(declared.size >= 5, `precondition: session parameters parsed, got ${declared.size}`); + + const commitLines = [...body.matchAll(/gsd_run query commit[^\n]*/g)].map((m) => m[0]); + assert.ok(commitLines.length >= 2, `expected the resolved + checkpoint commits, got ${commitLines.length}`); + + for (const line of commitLines) { + for (const [, token] of line.matchAll(/\{([a-z_]+)\}/g)) { + assert.ok( + declared.has(token), + `{${token}} is substituted into a commit command but is not a declared session ` + + `parameter — the agent has no value for it (#2568/#2684 dangling-substitution class): ${line}`, + ); + } + } +}); + +test('#2568: the commit call is covered by the single canonical preamble', () => { + // The repo invariant (tests/…B-agents…) is that each agent .md using gsd_run carries + // EXACTLY ONE canonical preamble, placed before the first gsd_run call — the runtime + // establishes it once. An earlier cut of this fix pasted a second preamble into the + // commit block on the theory that shell state does not persist; that broke the + // invariant and five suites with it. The correct property is coverage, not locality. + const body = manager(); + const preambles = body.match(/^\s*_GSD_SHIM_NAME=/gm) || []; + assert.equal( + preambles.length, + 1, + `exactly one canonical gsd_run preamble per agent file, got ${preambles.length}`, + ); + const preambleAt = body.search(/^\s*_GSD_SHIM_NAME=/m); + const commitAt = body.indexOf('gsd_run query commit'); + assert.notEqual(commitAt, -1, 'precondition: the commit call exists'); + assert.ok( + preambleAt < commitAt, + 'the canonical preamble must precede the commit call that relies on gsd_run', + ); +}); + +test('#2568: the in-session fix commit is idempotent', () => { + // gsd-debugger.md's archive_session already commits the fix on the confirmed-checkpoint + // path, which is the standard find_and_fix flow. A bare `git commit` with nothing + // staged exits non-zero and would abort this step before the summary is returned. + const body = manager(); + assert.match( + body, + /git diff --cached --quiet \|\| git commit/, + 'the fix-code commit must be guarded on staged content — archive_session may have ' + + 'already committed it, and an unguarded git commit exits non-zero on an empty diff', + ); +}); + +// ── The commit_docs gate the whole fix relies on — behavioral, not assumed ── + +function seedDoc(dir) { + const rel = path.join('.planning', 'debug', 'resolved', 'demo.md'); + const abs = path.join(dir, rel); + fs.mkdirSync(path.dirname(abs), { recursive: true }); + fs.writeFileSync(abs, '# resolved demo\n'); + return rel.split(path.sep).join('/'); +} + +function writeConfig(dir, extra) { + fs.writeFileSync( + path.join(dir, '.planning', 'config.json'), + JSON.stringify({ ...extra }), + ); +} + +test('#2568: query commit honors commit_docs true', () => { + const dir = createTempGitProject('gsd-2568-on-'); + try { + writeConfig(dir, { commit_docs: true }); + const rel = seedDoc(dir); + const res = runGsdTools(['query', 'commit', 'docs(debug): resolve demo session', '--files', rel], dir); + assert.ok(res.success, `commit failed: ${res.error}`); + const parsed = JSON.parse(res.output); + assert.equal(parsed.committed, true, `expected a commit, got ${res.output}`); + } finally { + cleanup(dir); + } +}); + +test('#2568: query commit no-ops when commit_docs is false', () => { + // This is the load-bearing assumption: the manager calls the CLI unconditionally + // and correctness follows from the gate, rather than the agent re-implementing a + // config check it could get wrong. + const dir = createTempGitProject('gsd-2568-off-'); + try { + writeConfig(dir, { commit_docs: false }); + const rel = seedDoc(dir); + const res = runGsdTools(['query', 'commit', 'docs(debug): resolve demo session', '--files', rel], dir); + assert.ok(res.success, `commit invocation failed: ${res.error}`); + const parsed = JSON.parse(res.output); + assert.equal(parsed.committed, false, 'must not commit when commit_docs is false'); + assert.equal(parsed.skipped, true); + assert.equal(parsed.reason, 'skipped_commit_docs_false'); + } finally { + cleanup(dir); + } +}); + +test('#2568: query commit behavior with commit_docs absent is explicit, not assumed', () => { + const dir = createTempGitProject('gsd-2568-default-'); + try { + writeConfig(dir, {}); + const rel = seedDoc(dir); + const res = runGsdTools(['query', 'commit', 'docs(debug): resolve demo session', '--files', rel], dir); + assert.ok(res.success, `commit invocation failed: ${res.error}`); + const parsed = JSON.parse(res.output); + // Pin whatever the shipped default resolves to, so a silent change to + // CONFIG_DEFAULTS.commit_docs surfaces here rather than in a user's repo. + assert.equal( + typeof parsed.committed, + 'boolean', + 'the CLI must always report a boolean committed flag', + ); + if (parsed.committed === false) { + assert.equal(parsed.reason, 'skipped_commit_docs_false'); + } + } finally { + cleanup(dir); + } +}); diff --git a/tests/fixtures/golden-install-parity/antigravity.json b/tests/fixtures/golden-install-parity/antigravity.json index 6c9828c6a..d7bcb4b05 100644 --- a/tests/fixtures/golden-install-parity/antigravity.json +++ b/tests/fixtures/golden-install-parity/antigravity.json @@ -7,7 +7,7 @@ "agents/gsd-code-fixer.md": "6937a1f20beaa1c6", "agents/gsd-code-reviewer.md": "a700d295bbf110a9", "agents/gsd-codebase-mapper.md": "aa06b807bd7a5e3e", - "agents/gsd-debug-session-manager.md": "8a7ae327a00d47cd", + "agents/gsd-debug-session-manager.md": "58cead58ae6f455a", "agents/gsd-debugger.md": "9c8f34fc022b2616", "agents/gsd-doc-classifier.md": "fca19595590391df", "agents/gsd-doc-synthesizer.md": "0e5184bbcf0dca02", diff --git a/tests/fixtures/golden-install-parity/augment.json b/tests/fixtures/golden-install-parity/augment.json index 6ff89fdc9..db23aaa59 100644 --- a/tests/fixtures/golden-install-parity/augment.json +++ b/tests/fixtures/golden-install-parity/augment.json @@ -7,7 +7,7 @@ "agents/gsd-code-fixer.md": "68b2d2faccfdd8a3", "agents/gsd-code-reviewer.md": "bc8a6f2e1f787ff5", "agents/gsd-codebase-mapper.md": "d369048683978297", - "agents/gsd-debug-session-manager.md": "1d966d0bbf22660c", + "agents/gsd-debug-session-manager.md": "7ac3a457c926082d", "agents/gsd-debugger.md": "584692481a9f5e0f", "agents/gsd-doc-classifier.md": "262a94b947a4e2aa", "agents/gsd-doc-synthesizer.md": "01f90ea9b0d05d7d", diff --git a/tests/fixtures/golden-install-parity/claude-local.json b/tests/fixtures/golden-install-parity/claude-local.json index 3e7f559e2..fdb2a4547 100644 --- a/tests/fixtures/golden-install-parity/claude-local.json +++ b/tests/fixtures/golden-install-parity/claude-local.json @@ -6,7 +6,7 @@ "agents/gsd-code-fixer.md": "c6148e5511d02459", "agents/gsd-code-reviewer.md": "e2c45baa8c0b5f6d", "agents/gsd-codebase-mapper.md": "39d22382c5897858", - "agents/gsd-debug-session-manager.md": "d5fbb343fac38729", + "agents/gsd-debug-session-manager.md": "cd8e20170b1ee7a0", "agents/gsd-debugger.md": "d6785173fbeee901", "agents/gsd-doc-classifier.md": "a76778bdde1c7f72", "agents/gsd-doc-synthesizer.md": "8b0b6fc187c9d353", diff --git a/tests/fixtures/golden-install-parity/claude.json b/tests/fixtures/golden-install-parity/claude.json index 97c7c736e..68e94d30d 100644 --- a/tests/fixtures/golden-install-parity/claude.json +++ b/tests/fixtures/golden-install-parity/claude.json @@ -6,7 +6,7 @@ "agents/gsd-code-fixer.md": "3d5f67cfd24ac452", "agents/gsd-code-reviewer.md": "d626a828e8de3648", "agents/gsd-codebase-mapper.md": "7b9d1f97d593e300", - "agents/gsd-debug-session-manager.md": "1e23cdf4376bed3c", + "agents/gsd-debug-session-manager.md": "0d99579bf29cd355", "agents/gsd-debugger.md": "064815a723abac0c", "agents/gsd-doc-classifier.md": "a636ae9594b25770", "agents/gsd-doc-synthesizer.md": "dfb95eedfb3789bf", diff --git a/tests/fixtures/golden-install-parity/cline.json b/tests/fixtures/golden-install-parity/cline.json index cdd9d37f2..d4624253f 100644 --- a/tests/fixtures/golden-install-parity/cline.json +++ b/tests/fixtures/golden-install-parity/cline.json @@ -10,7 +10,7 @@ "agents/gsd-code-fixer.md": "6aa74a2fb2ad244a", "agents/gsd-code-reviewer.md": "e5ec12d4d409e800", "agents/gsd-codebase-mapper.md": "efedbf9228fc9dc6", - "agents/gsd-debug-session-manager.md": "444fa983fdc85325", + "agents/gsd-debug-session-manager.md": "a9142cfb9932383d", "agents/gsd-debugger.md": "427daaf994a596ba", "agents/gsd-doc-classifier.md": "5011d7358d2b2848", "agents/gsd-doc-synthesizer.md": "e59cdd669876582d", diff --git a/tests/fixtures/golden-install-parity/codebuddy.json b/tests/fixtures/golden-install-parity/codebuddy.json index 440cbf00b..e233c72cd 100644 --- a/tests/fixtures/golden-install-parity/codebuddy.json +++ b/tests/fixtures/golden-install-parity/codebuddy.json @@ -7,7 +7,7 @@ "agents/gsd-code-fixer.md": "1cf3a9fdade9a470", "agents/gsd-code-reviewer.md": "5342fcc0da974696", "agents/gsd-codebase-mapper.md": "0c8f04c738c20a29", - "agents/gsd-debug-session-manager.md": "8a495718576f24e6", + "agents/gsd-debug-session-manager.md": "9f9606259531abf6", "agents/gsd-debugger.md": "e454548710419254", "agents/gsd-doc-classifier.md": "c2bf59af9467810b", "agents/gsd-doc-synthesizer.md": "b2a179bf3c9bd636", diff --git a/tests/fixtures/golden-install-parity/codex.json b/tests/fixtures/golden-install-parity/codex.json index 92b672742..6543024b0 100644 --- a/tests/fixtures/golden-install-parity/codex.json +++ b/tests/fixtures/golden-install-parity/codex.json @@ -84,8 +84,8 @@ "agents/gsd-code-reviewer.toml": "66420d6e6ffd14eb", "agents/gsd-codebase-mapper.md": "7a1560013a0182d0", "agents/gsd-codebase-mapper.toml": "98041d44c9d9f69e", - "agents/gsd-debug-session-manager.md": "8a336fd497d2e6b2", - "agents/gsd-debug-session-manager.toml": "277a54c7661ff018", + "agents/gsd-debug-session-manager.md": "fc82168262151338", + "agents/gsd-debug-session-manager.toml": "b477ba74d03ed5c8", "agents/gsd-debugger.md": "b2a4aff97b1b87e3", "agents/gsd-debugger.toml": "dcf71d070a325e67", "agents/gsd-doc-classifier.md": "2745bc04d7b93666", diff --git a/tests/fixtures/golden-install-parity/copilot.json b/tests/fixtures/golden-install-parity/copilot.json index 3816ab26b..228f668a4 100644 --- a/tests/fixtures/golden-install-parity/copilot.json +++ b/tests/fixtures/golden-install-parity/copilot.json @@ -7,7 +7,7 @@ "agents/gsd-code-fixer.agent.md": "8f39aacb760aab57", "agents/gsd-code-reviewer.agent.md": "fa1e7c421c78eae1", "agents/gsd-codebase-mapper.agent.md": "347d66bb17975c3e", - "agents/gsd-debug-session-manager.agent.md": "e669e5d76bfd7810", + "agents/gsd-debug-session-manager.agent.md": "a43baa522459203d", "agents/gsd-debugger.agent.md": "f7d0307490617a8a", "agents/gsd-doc-classifier.agent.md": "aea81c0ba00e06cf", "agents/gsd-doc-synthesizer.agent.md": "6ae32e4db005696d", diff --git a/tests/fixtures/golden-install-parity/cursor.json b/tests/fixtures/golden-install-parity/cursor.json index 666322185..2840325fe 100644 --- a/tests/fixtures/golden-install-parity/cursor.json +++ b/tests/fixtures/golden-install-parity/cursor.json @@ -7,7 +7,7 @@ "agents/gsd-code-fixer.md": "76085f4442f268e6", "agents/gsd-code-reviewer.md": "f29d6edbac0a01b6", "agents/gsd-codebase-mapper.md": "71113be5f5cacfe9", - "agents/gsd-debug-session-manager.md": "c723ce1b8691296f", + "agents/gsd-debug-session-manager.md": "0779ec0e315e7a19", "agents/gsd-debugger.md": "bd40d58a35995f22", "agents/gsd-doc-classifier.md": "a6ab02b8f45f9d0b", "agents/gsd-doc-synthesizer.md": "fd3c18addbc8265d", diff --git a/tests/fixtures/golden-install-parity/hermes.json b/tests/fixtures/golden-install-parity/hermes.json index 047049a87..ccc870143 100644 --- a/tests/fixtures/golden-install-parity/hermes.json +++ b/tests/fixtures/golden-install-parity/hermes.json @@ -7,7 +7,7 @@ "agents/gsd-code-fixer.md": "94628312f25decb5", "agents/gsd-code-reviewer.md": "5ef947ca5baed775", "agents/gsd-codebase-mapper.md": "4749858e8e97f1d2", - "agents/gsd-debug-session-manager.md": "d46222bd8037b695", + "agents/gsd-debug-session-manager.md": "cc2a5c12354fd0df", "agents/gsd-debugger.md": "3b00e344e8200dce", "agents/gsd-doc-classifier.md": "29b563a146c9d22c", "agents/gsd-doc-synthesizer.md": "652beb928e93fa1d", diff --git a/tests/fixtures/golden-install-parity/kilo.json b/tests/fixtures/golden-install-parity/kilo.json index 8d740a30f..c99eacf86 100644 --- a/tests/fixtures/golden-install-parity/kilo.json +++ b/tests/fixtures/golden-install-parity/kilo.json @@ -7,7 +7,7 @@ "agents/gsd-code-fixer.md": "9652d5b56a2afbf5", "agents/gsd-code-reviewer.md": "922c08885bc78662", "agents/gsd-codebase-mapper.md": "1f45939542994a42", - "agents/gsd-debug-session-manager.md": "42a775633c9b1b34", + "agents/gsd-debug-session-manager.md": "0c58daac3de75755", "agents/gsd-debugger.md": "aab7ddbbdc75f6c8", "agents/gsd-doc-classifier.md": "6256bbc0b887f60f", "agents/gsd-doc-synthesizer.md": "212aaf89a34b51d7", diff --git a/tests/fixtures/golden-install-parity/kimi-code.json b/tests/fixtures/golden-install-parity/kimi-code.json index 6aa93cae2..4d6529bc7 100644 --- a/tests/fixtures/golden-install-parity/kimi-code.json +++ b/tests/fixtures/golden-install-parity/kimi-code.json @@ -36,7 +36,7 @@ "agents/gsd-code-fixer.md": "78549833f0411b0c", "agents/gsd-code-reviewer.md": "7d94fe8bfa6661aa", "agents/gsd-codebase-mapper.md": "3941bfc98c091018", - "agents/gsd-debug-session-manager.md": "dc4e8a556dbf1708", + "agents/gsd-debug-session-manager.md": "7065bea4cedab2f6", "agents/gsd-debugger.md": "7840ed78e3f662a8", "agents/gsd-doc-classifier.md": "146acf4d176134b5", "agents/gsd-doc-synthesizer.md": "b1f5e2eb28fa3659", diff --git a/tests/fixtures/golden-install-parity/kimi.json b/tests/fixtures/golden-install-parity/kimi.json index a16822f4a..12048b7c7 100644 --- a/tests/fixtures/golden-install-parity/kimi.json +++ b/tests/fixtures/golden-install-parity/kimi.json @@ -44,7 +44,7 @@ "agents/subagents/gsd-code-reviewer.yaml": "5f2398f56018f50d", "agents/subagents/gsd-codebase-mapper.md": "91fc76ecb02bbc30", "agents/subagents/gsd-codebase-mapper.yaml": "bce1c6d15f55c477", - "agents/subagents/gsd-debug-session-manager.md": "cec62a7fd99ab1c3", + "agents/subagents/gsd-debug-session-manager.md": "089b27a1ddc520bd", "agents/subagents/gsd-debug-session-manager.yaml": "aab147717b5082e7", "agents/subagents/gsd-debugger.md": "2021c72a39d56fe5", "agents/subagents/gsd-debugger.yaml": "6d02d7feb90cad43", diff --git a/tests/fixtures/golden-install-parity/opencode.json b/tests/fixtures/golden-install-parity/opencode.json index efe764e86..2866a3149 100644 --- a/tests/fixtures/golden-install-parity/opencode.json +++ b/tests/fixtures/golden-install-parity/opencode.json @@ -7,7 +7,7 @@ "agents/gsd-code-fixer.md": "3622ae5d90fb15f6", "agents/gsd-code-reviewer.md": "2249774416314c57", "agents/gsd-codebase-mapper.md": "89c6eed5863f1c23", - "agents/gsd-debug-session-manager.md": "e4b96ea41c74c479", + "agents/gsd-debug-session-manager.md": "8b9638711e768732", "agents/gsd-debugger.md": "f08bcc712bc98469", "agents/gsd-doc-classifier.md": "fb776cfbb7e991b0", "agents/gsd-doc-synthesizer.md": "2389f388d291c2eb", diff --git a/tests/fixtures/golden-install-parity/qwen.json b/tests/fixtures/golden-install-parity/qwen.json index 719896c53..05d33fddb 100644 --- a/tests/fixtures/golden-install-parity/qwen.json +++ b/tests/fixtures/golden-install-parity/qwen.json @@ -7,7 +7,7 @@ "agents/gsd-code-fixer.md": "3ed1a27ddc372ef8", "agents/gsd-code-reviewer.md": "27eeeee6cb600e9b", "agents/gsd-codebase-mapper.md": "019215e91bf01097", - "agents/gsd-debug-session-manager.md": "c1c9c5f538acb941", + "agents/gsd-debug-session-manager.md": "ef00dde32e35150f", "agents/gsd-debugger.md": "41bdbb009989d3a0", "agents/gsd-doc-classifier.md": "bdf3d54082424e76", "agents/gsd-doc-synthesizer.md": "96c383b74a60fbbe", diff --git a/tests/fixtures/golden-install-parity/trae.json b/tests/fixtures/golden-install-parity/trae.json index 60307b4b2..38e0dfddd 100644 --- a/tests/fixtures/golden-install-parity/trae.json +++ b/tests/fixtures/golden-install-parity/trae.json @@ -7,7 +7,7 @@ "agents/gsd-code-fixer.md": "5fe29063843be67e", "agents/gsd-code-reviewer.md": "338c46ab59c4e45f", "agents/gsd-codebase-mapper.md": "85e624b7494ecdeb", - "agents/gsd-debug-session-manager.md": "913a370b529ec717", + "agents/gsd-debug-session-manager.md": "774112ac5e5e48a0", "agents/gsd-debugger.md": "2d6762c3a0974a31", "agents/gsd-doc-classifier.md": "a6ab02b8f45f9d0b", "agents/gsd-doc-synthesizer.md": "fd3c18addbc8265d", diff --git a/tests/fixtures/golden-install-parity/windsurf.json b/tests/fixtures/golden-install-parity/windsurf.json index 60b7431c4..4334b8873 100644 --- a/tests/fixtures/golden-install-parity/windsurf.json +++ b/tests/fixtures/golden-install-parity/windsurf.json @@ -7,7 +7,7 @@ "agents/gsd-code-fixer.md": "f00d815ec535a168", "agents/gsd-code-reviewer.md": "efc0d2dee321c654", "agents/gsd-codebase-mapper.md": "afc125fe279e618f", - "agents/gsd-debug-session-manager.md": "86d75b269a6c40e7", + "agents/gsd-debug-session-manager.md": "89e8c56d6737fd86", "agents/gsd-debugger.md": "7f9bd63ccb6e57c2", "agents/gsd-doc-classifier.md": "a6ab02b8f45f9d0b", "agents/gsd-doc-synthesizer.md": "fd3c18addbc8265d", diff --git a/tests/fixtures/golden-install-parity/zcode.json b/tests/fixtures/golden-install-parity/zcode.json index b65e677ed..abc274ed7 100644 --- a/tests/fixtures/golden-install-parity/zcode.json +++ b/tests/fixtures/golden-install-parity/zcode.json @@ -7,7 +7,7 @@ "agents/gsd-code-fixer.md": "78549833f0411b0c", "agents/gsd-code-reviewer.md": "7d94fe8bfa6661aa", "agents/gsd-codebase-mapper.md": "3941bfc98c091018", - "agents/gsd-debug-session-manager.md": "dc4e8a556dbf1708", + "agents/gsd-debug-session-manager.md": "7065bea4cedab2f6", "agents/gsd-debugger.md": "7840ed78e3f662a8", "agents/gsd-doc-classifier.md": "146acf4d176134b5", "agents/gsd-doc-synthesizer.md": "b1f5e2eb28fa3659",