fix(#2257): auto-resume debug on non-terminal session-manager return (#2300)

The /gsd-debug orchestrator handled the gsd-debug-session-manager return
with only two literal-string checks (DEBUG SESSION COMPLETE, ABANDONED)
and no else branch, so a usable-but-non-terminal progress summary (the
manager's own turn/context budget exhausted mid-loop, with a valid
on-disk checkpoint) fell through to the user as if the debug were
complete. Same gap at the continue subcommand.

Callee side (agents/gsd-debug-session-manager.md): add an explicit
non-terminal CONTINUE_REQUIRED return marker, distinct from the two
terminal shapes and from a genuine user-input checkpoint.

Orchestrator (gsd-core/workflows/debug.md Sections 4 and 1c): classify
returns exhaustively — recognized terminal markers behave as before,
anything else is non-terminal and auto-resumes by re-spawning the
session manager from the same slug/checkpoint. Anti-loop guard: after
two consecutive no-progress resumes (unchanged next_action/updated),
emit a blocker report instead of looping.

Regression test (source-text contract guard, fix-2196 idiom) asserts
both sections' non-terminal/auto-resume branch, the CONTINUE_REQUIRED
marker, and the anti-loop bound.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Tom Boucher
2026-07-15 12:55:38 -04:00
committed by GitHub
parent 9c65a2ea02
commit f74442310d
24 changed files with 215 additions and 42 deletions

View File

@@ -0,0 +1,5 @@
---
type: Fixed
pr: 2300
---
**`/gsd-debug` now auto-resumes instead of stopping mid-investigation** — when the debug session-manager's own turn ended before the investigation was complete, the orchestrator treated the intermediate progress summary as completion and returned control to the user. It now recognizes a non-terminal `CONTINUE_REQUIRED` return, auto-resumes from the on-disk checkpoint, and only stops for genuine terminal conditions (with a no-progress anti-loop guard). (#2257)

View File

@@ -272,9 +272,22 @@ If user selects 3: proceed to Step 4 with fix = "not applied".
## Step 4: Return Compact Summary
**Non-terminal early stop — check this FIRST.** Before returning any summary below, ask: is your own turn/context budget exhausted while the debugger (`gsd-debugger`) is still investigating — i.e. you have NOT reached `DEBUG COMPLETE`, a user-chosen `ABANDONED`, or exhausted the `INVESTIGATION INCONCLUSIVE` options? If so, do NOT fabricate a `DEBUG SESSION COMPLETE` or `ABANDONED` summary to fit this shape. Return the non-terminal marker instead:
```markdown
## CONTINUE_REQUIRED
**Session:** {debug_file_path}
**Status:** {status from frontmatter, e.g. investigating}
**Next action:** {next_action from Current Focus}
**Reason:** session-manager turn/context budget exhausted — investigation still in progress
```
`CONTINUE_REQUIRED` is distinct from both terminal shapes below AND from `## CHECKPOINT REACHED` (Step 3d): a `CHECKPOINT REACHED` is a genuine user-input/approval checkpoint that already correctly pauses via `AskUserQuestion` before looping back to Step 3 — it is not returned to the orchestrator. `CONTINUE_REQUIRED` is emitted only when no checkpoint is pending and the loop simply cannot proceed further in this turn. The orchestrator resumes by re-spawning this agent with the SAME `slug`/`debug_file_path` — the on-disk checkpoint at `.planning/debug/{slug}.md` (its `status` and `next_action`) is the source of truth for where to pick up. Never return control to the user as if the session were complete when it is not.
Read the resolved (or current) debug file to extract final Resolution values.
Return compact summary:
Return compact summary (terminal — investigation resolved):
```markdown
## DEBUG SESSION COMPLETE
@@ -287,7 +300,7 @@ Return compact summary:
**Specialist review:** {specialist_hint used, or "none"}
```
If the session was abandoned by user choice, return:
If the session was abandoned by user choice, return (terminal — user stopped):
```markdown
## DEBUG SESSION COMPLETE
@@ -311,5 +324,6 @@ If the session was abandoned by user choice, return:
- [ ] Specialist dispatch executed when specialist_dispatch_enabled and hint maps to a skill
- [ ] 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
- [ ] Compact summary returned (at most 2K tokens)
</success_criteria>

View File

@@ -137,6 +137,10 @@ specialist_dispatch_enabled: true
Display the compact summary returned by the session manager.
**Return handling — exhaustive, no fallthrough (#2257).** Apply the same three-way classification as Section 4 "Session Management" below: `DEBUG SESSION COMPLETE` and `ABANDONED` are the only two terminal shapes. ANYTHING ELSE — including the explicit `## CONTINUE_REQUIRED` marker and any unrecognized or malformed summary that is not one of the two terminal markers — is non-terminal. Read `.planning/debug/{SLUG}.md` for the current `status`/`next_action` and AUTO-RESUME by re-spawning `gsd-debug-session-manager` with the SAME `SLUG`/checkpoint (identical `session_params` as the spawn above) — do NOT return control to the user, and do NOT report the session as complete.
**Anti-loop guard.** Same two-stop policy as Section 4 "Session Management": (1) a no-progress heuristic keyed on `next_action` ALONE from `.planning/debug/{SLUG}.md` — never `updated`, which is overwritten on every checkpoint write (`agents/gsd-debugger.md`: "Update the file BEFORE taking action"), so it changes every cycle and can never signal no-progress. Two consecutive auto-resumes with `next_action` UNCHANGED stop the loop and print a blocker report to the user (checkpoint path, status, next_action, "N auto-resumes made no progress"). And (2) an absolute hard cap, independent of content: the orchestrator tracks a running total of auto-resume spawns for this `SLUG` within the current `/gsd:debug` invocation; after **3** total auto-resumes for the slug, STOP auto-resuming and emit the blocker report REGARDLESS of whether `next_action` changed. The hard cap is the guaranteed termination bound; the no-progress heuristic is only a faster early exit before the cap is reached.
## 1d. Check Active Sessions (SUBCMD=debug)
When SUBCMD=debug:
@@ -222,8 +226,18 @@ specialist_dispatch_enabled: true
Display the compact summary returned by the session manager.
If summary shows `DEBUG SESSION COMPLETE`: done.
If summary shows `ABANDONED`: note session saved at `.planning/debug/{slug}.md` for later `/gsd:debug continue {slug}`.
**Return handling — exhaustive, no fallthrough (#2257).** Every return from the session manager falls into exactly one of three buckets. Do not treat "not recognized" as "complete."
1. **Terminal — complete.** Summary shows `DEBUG SESSION COMPLETE` (without an `ABANDONED` status line): the session is finished. Stop.
2. **Terminal — abandoned.** Summary shows `ABANDONED`: note session saved at `.planning/debug/{slug}.md` for later `/gsd:debug continue {slug}`. Stop.
3. **Non-terminal — auto-resume.** ANYTHING ELSE — including the explicit `## CONTINUE_REQUIRED` marker and any unrecognized or malformed summary that is not one of the two terminal markers above — is non-terminal. Read `.planning/debug/{slug}.md` for the current `status` and `next_action`, then AUTO-RESUME by re-spawning `gsd-debug-session-manager` with the SAME `slug`/`debug_file_path` and identical `session_params` as the spawn above. Do NOT return control to the user; do NOT report the session as complete.
**Anti-loop guard.** Two independent stops apply; the orchestrator honors whichever trips first:
1. **No-progress heuristic (fast early-stop).** Before each auto-resume, record the checkpoint's `next_action` from `.planning/debug/{slug}.md`. Do NOT key this off `updated` — the session manager overwrites `updated` on every checkpoint write (`agents/gsd-debugger.md`: "Update the file BEFORE taking action"), so it changes every cycle and can never signal no-progress; an AND-condition on `updated` is permanently false and makes the guard dead. After the resumed spawn returns, compare `next_action` against the pre-spawn value. If two consecutive auto-resumes complete with `next_action` UNCHANGED, STOP auto-resuming: print a blocker report to the user — checkpoint path, status, next_action, and "N auto-resumes made no progress" — and return control.
2. **Absolute hard cap (real termination bound).** Independent of content: the orchestrator tracks a running total of auto-resume spawns for this `slug` within the current `/gsd:debug` invocation. After **3** total auto-resumes for the slug, STOP auto-resuming and emit the blocker report REGARDLESS of whether `next_action` changed. This hard cap is the guaranteed termination bound; the no-progress heuristic above is only a faster early exit before the cap is reached.
**Note — session-manager-internal pause points.** Genuine user input / architectural decisions, destructive-action approvals, unresolved blockers, unrepairable gate failures, and readiness-for-native-UAT are all handled INSIDE `gsd-debug-session-manager` via `AskUserQuestion` (Step 3d `CHECKPOINT REACHED`) — the manager pauses, collects the response, and loops internally; it does not return to the orchestrator for these. The orchestrator only ever sees the two terminal markers (`DEBUG SESSION COMPLETE`, `ABANDONED`) or a non-terminal return that triggers auto-resume — the classification above stays strictly terminal-vs-non-terminal, with no third orchestrator-visible "stop for user" return type.
</process>
@@ -236,4 +250,6 @@ If summary shows `ABANDONED`: note session saved at `.planning/debug/{slug}.md`
- [ ] gsd-debug-session-manager spawned with security-hardened session_params
- [ ] Session manager handles full checkpoint/continuation loop in isolated context
- [ ] Compact summary displayed to user after session manager returns
- [ ] Non-terminal returns (`CONTINUE_REQUIRED` or unrecognized) auto-resume from the checkpoint instead of being treated as complete
- [ ] Anti-loop guard stops auto-resume after repeated no-progress cycles and reports a blocker
</success_criteria>

View File

@@ -5,7 +5,7 @@
"gsd-code-fixer.md": 36640,
"gsd-code-reviewer.md": 16870,
"gsd-codebase-mapper.md": 21485,
"gsd-debug-session-manager.md": 14203,
"gsd-debug-session-manager.md": 15887,
"gsd-debugger.md": 51354,
"gsd-doc-classifier.md": 11717,
"gsd-doc-synthesizer.md": 13154,

View File

@@ -0,0 +1,138 @@
'use strict';
/**
* #2257: the /gsd-debug orchestrator had no contract for a foreground
* gsd-debug-session-manager return that is usable but non-terminal. Section 4
* "Session Management" (and the `continue` subcommand's return handling in
* Section 1c) recognized only two literal-string returns — `DEBUG SESSION
* COMPLETE` and `ABANDONED` — with no else branch. Any other return (e.g. a
* mid-investigation progress summary emitted when the manager's own
* turn/context budget runs out) matched neither and fell through to the user
* as if the debug session were complete, silently abandoning the
* investigation mid-flight.
*
* The fix defines an explicit non-terminal marker, `CONTINUE_REQUIRED`, that
* the session manager emits when it must stop before reaching a terminal
* state (distinct from the two terminal returns and from a genuine
* user-input/approval `CHECKPOINT REACHED`, which already correctly pauses
* via AskUserQuestion). The orchestrator treats anything that is not one of
* the two terminal markers as non-terminal and auto-resumes by re-spawning
* the session manager from the on-disk checkpoint, bounded by an anti-loop
* guard.
*
* Correction (orthogonal review): the first cut of the anti-loop guard
* required BOTH `next_action` AND `updated` to be unchanged across two
* resumes to detect no-progress — but `agents/gsd-debugger.md` overwrites
* `updated` on every checkpoint write ("Update the file BEFORE taking
* action"), so `updated` changes every cycle and the AND-condition could
* never be true, making the guard dead (unbounded auto-resume / DoS
* regression). The corrected guard keys no-progress detection off
* `next_action` ALONE and adds an absolute, content-independent hard cap of
* 3 total auto-resumes per slug per `/gsd:debug` invocation as the real
* termination bound.
*
* debug.md and gsd-debug-session-manager.md ARE the product the runtime
* loads, so this asserts the deployed text carries the contract — the
* sanctioned source-text/contract-guard idiom (see
* tests/fix-2196-debug-agent-handoff.test.cjs).
*/
const { describe, test } = require('node:test');
const assert = require('node:assert/strict');
const fs = require('node:fs');
const path = require('node:path');
const DEBUG_MD = path.join(__dirname, '..', 'gsd-core', 'workflows', 'debug.md');
const SESSION_MANAGER_MD = path.join(__dirname, '..', 'agents', 'gsd-debug-session-manager.md');
describe('#2257 debug non-terminal session-manager return contract', () => {
// allow-test-rule: workflow/agent prose IS the runtime contract under test #2257
const debugContent = fs.readFileSync(DEBUG_MD, 'utf-8');
// allow-test-rule: workflow/agent prose IS the runtime contract under test #2257
const managerContent = fs.readFileSync(SESSION_MANAGER_MD, 'utf-8');
const section4Start = debugContent.indexOf('## 4. Session Management');
const section4 = section4Start !== -1 ? debugContent.slice(section4Start) : '';
const section1cStart = debugContent.indexOf('## 1c. CONTINUE subcommand');
const section1dStart = debugContent.indexOf('## 1d. Check Active Sessions');
const section1c =
section1cStart !== -1 && section1dStart !== -1
? debugContent.slice(section1cStart, section1dStart)
: '';
test('debug.md has Section 4 (Session Management) and Section 1c (CONTINUE subcommand)', () => {
assert.notEqual(section4Start, -1, 'debug.md must contain Section 4 Session Management');
assert.notEqual(section1cStart, -1, 'debug.md must contain Section 1c CONTINUE subcommand');
});
test('Section 4 has an exhaustive non-terminal branch that auto-resumes from the checkpoint', () => {
assert.ok(/CONTINUE_REQUIRED/.test(section4),
'Section 4 must reference the CONTINUE_REQUIRED non-terminal marker');
assert.ok(/ANYTHING ELSE/i.test(section4),
'Section 4 must exhaustively catch any return that is not one of the two terminal markers');
assert.ok(/AUTO-RESUME/i.test(section4) && /re-spawning/i.test(section4),
'Section 4 must auto-resume by re-spawning the session manager, not return control to the user');
assert.ok(/same.{0,20}slug/i.test(section4),
'Section 4 auto-resume must use the SAME slug/checkpoint as the original spawn');
});
test('Section 1c has the same exhaustive non-terminal auto-resume branch (not just the two literals)', () => {
assert.ok(/CONTINUE_REQUIRED/.test(section1c),
'Section 1c must reference the CONTINUE_REQUIRED non-terminal marker');
assert.ok(/ANYTHING ELSE/i.test(section1c),
'Section 1c must exhaustively catch any return that is not one of the two terminal markers');
assert.ok(/AUTO-RESUME/i.test(section1c) && /re-spawning/i.test(section1c),
'Section 1c must auto-resume by re-spawning the session manager, not return control to the user');
assert.ok(/same.{0,20}slug/i.test(section1c),
'Section 1c auto-resume must use the SAME slug/checkpoint as the original spawn (symmetric with Section 4)');
});
test('gsd-debug-session-manager.md defines CONTINUE_REQUIRED distinct from the two terminal formats', () => {
assert.ok(/## CONTINUE_REQUIRED/.test(managerContent),
'the agent must define an explicit ## CONTINUE_REQUIRED return heading');
assert.ok(/## DEBUG SESSION COMPLETE/.test(managerContent),
'the terminal DEBUG SESSION COMPLETE format must still be present');
assert.ok(/ABANDONED/.test(managerContent),
'the terminal ABANDONED format must still be present');
assert.ok(/non-terminal/i.test(managerContent),
'the agent must characterize CONTINUE_REQUIRED as non-terminal');
assert.ok(/CHECKPOINT REACHED/.test(managerContent) && /distinct from/i.test(managerContent),
'CONTINUE_REQUIRED must be explicitly distinguished from the genuine user-input CHECKPOINT REACHED shape');
assert.ok(/\.planning\/debug\/\{slug\}\.md/.test(managerContent),
'CONTINUE_REQUIRED must reference the on-disk checkpoint path');
assert.ok(/next_action/.test(managerContent) && /status/.test(managerContent),
'CONTINUE_REQUIRED must reference the checkpoint status/next_action fields');
});
test('an anti-loop bound exists so repeated no-progress auto-resumes do not loop indefinitely', () => {
assert.ok(/anti-loop guard/i.test(section4),
'Section 4 must name an anti-loop guard');
assert.ok(/blocker report/i.test(section4),
'Section 4 must emit a blocker report to the user once the bound is exceeded, instead of looping forever');
assert.ok(/anti-loop guard/i.test(section1c),
'Section 1c must name an anti-loop guard');
});
test('the anti-loop guard has an absolute hard cap independent of no-progress detection (#2257 correction)', () => {
for (const [label, section] of [['Section 4', section4], ['Section 1c', section1c]]) {
assert.ok(/hard cap/i.test(section), `${label} must name an absolute hard cap`);
assert.ok(/\b3\b/.test(section) && /total auto-resumes/i.test(section),
`${label} must encode a concrete numeric cap of 3 total auto-resumes`);
assert.ok(/regardless/i.test(section),
`${label} hard cap must trip regardless of whether next_action changed (content-independent)`);
}
});
test('no-progress detection keys off next_action alone, never the always-changing updated timestamp (#2257 correction)', () => {
for (const [label, section] of [['Section 4', section4], ['Section 1c', section1c]]) {
assert.ok(/next_action/.test(section),
`${label} no-progress heuristic must reference next_action`);
assert.ok(/(do not|never).{0,40}updated/i.test(section),
`${label} must explicitly forbid keying no-progress detection off updated`);
assert.ok(/changes every cycle/i.test(section),
`${label} must state WHY updated cannot be used: it is overwritten/changes every checkpoint cycle`);
}
});
});

View File

@@ -7,7 +7,7 @@
"agents/gsd-code-fixer.md": "6937a1f20beaa1c6",
"agents/gsd-code-reviewer.md": "a700d295bbf110a9",
"agents/gsd-codebase-mapper.md": "afdae82284cb21b4",
"agents/gsd-debug-session-manager.md": "5ea82765fc041ad7",
"agents/gsd-debug-session-manager.md": "a2ca059d2ebf0858",
"agents/gsd-debugger.md": "7439166a1770521c",
"agents/gsd-doc-classifier.md": "fca19595590391df",
"agents/gsd-doc-synthesizer.md": "0e5184bbcf0dca02",
@@ -211,7 +211,7 @@
"gsd-core/workflows/code-review-fix.md": "60640e633b0a124b",
"gsd-core/workflows/code-review.md": "5c40505c01871153",
"gsd-core/workflows/complete-milestone.md": "aaf272074acec69d",
"gsd-core/workflows/debug.md": "af2d1ae03b24fc71",
"gsd-core/workflows/debug.md": "0b802b267d0ca2d1",
"gsd-core/workflows/diagnose-issues.md": "c8c41993c277363c",
"gsd-core/workflows/discovery-phase.md": "3de990caffdde4f8",
"gsd-core/workflows/discuss-phase-assumptions.md": "8581fd77def7ce84",

View File

@@ -7,7 +7,7 @@
"agents/gsd-code-fixer.md": "68b2d2faccfdd8a3",
"agents/gsd-code-reviewer.md": "bc8a6f2e1f787ff5",
"agents/gsd-codebase-mapper.md": "85ea778ad9cf7e66",
"agents/gsd-debug-session-manager.md": "0d388fcee3eba770",
"agents/gsd-debug-session-manager.md": "cf7f235f6d32c0b9",
"agents/gsd-debugger.md": "2c8234c76c5d15c1",
"agents/gsd-doc-classifier.md": "262a94b947a4e2aa",
"agents/gsd-doc-synthesizer.md": "01f90ea9b0d05d7d",
@@ -282,7 +282,7 @@
"gsd-core/workflows/code-review-fix.md": "2e113d1f4350a075",
"gsd-core/workflows/code-review.md": "334c90c401f291f8",
"gsd-core/workflows/complete-milestone.md": "c1f91b77f4ace7f2",
"gsd-core/workflows/debug.md": "c581e89aa9d9d71e",
"gsd-core/workflows/debug.md": "98c8ed5af882ef8f",
"gsd-core/workflows/diagnose-issues.md": "6cc3900891dfb927",
"gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761",
"gsd-core/workflows/discuss-phase-assumptions.md": "f5b765d33eba4f88",

View File

@@ -6,7 +6,7 @@
"agents/gsd-code-fixer.md": "c6148e5511d02459",
"agents/gsd-code-reviewer.md": "e2c45baa8c0b5f6d",
"agents/gsd-codebase-mapper.md": "f96958e5f85b93fb",
"agents/gsd-debug-session-manager.md": "ec9ca0011a1aab75",
"agents/gsd-debug-session-manager.md": "368d88502df7ac5f",
"agents/gsd-debugger.md": "9f35a91f8b3a918e",
"agents/gsd-doc-classifier.md": "a76778bdde1c7f72",
"agents/gsd-doc-synthesizer.md": "8b0b6fc187c9d353",
@@ -281,7 +281,7 @@
"gsd-core/workflows/code-review-fix.md": "78c716068ccdf820",
"gsd-core/workflows/code-review.md": "2d21452eb0449fdd",
"gsd-core/workflows/complete-milestone.md": "9962377cddee50d7",
"gsd-core/workflows/debug.md": "18c97b804f2dd5dd",
"gsd-core/workflows/debug.md": "80c413b3a9877433",
"gsd-core/workflows/diagnose-issues.md": "db6a599674efbc4d",
"gsd-core/workflows/discovery-phase.md": "a20dfb32adec51de",
"gsd-core/workflows/discuss-phase-assumptions.md": "35a3b2d1285565d8",

View File

@@ -6,7 +6,7 @@
"agents/gsd-code-fixer.md": "3d5f67cfd24ac452",
"agents/gsd-code-reviewer.md": "d626a828e8de3648",
"agents/gsd-codebase-mapper.md": "8c2e9f2ce3aedf78",
"agents/gsd-debug-session-manager.md": "767c0f43d47e89ad",
"agents/gsd-debug-session-manager.md": "93bbc34d0d1cfdef",
"agents/gsd-debugger.md": "4d8a618121c8056a",
"agents/gsd-doc-classifier.md": "a636ae9594b25770",
"agents/gsd-doc-synthesizer.md": "dfb95eedfb3789bf",
@@ -210,7 +210,7 @@
"gsd-core/workflows/code-review-fix.md": "722416b71b31c5fc",
"gsd-core/workflows/code-review.md": "506412604f767adc",
"gsd-core/workflows/complete-milestone.md": "dcf1182398efb1ca",
"gsd-core/workflows/debug.md": "7183935f8e145a01",
"gsd-core/workflows/debug.md": "b4c658c9608d08e2",
"gsd-core/workflows/diagnose-issues.md": "75ffc381ac3059ff",
"gsd-core/workflows/discovery-phase.md": "6161c60d752d0058",
"gsd-core/workflows/discuss-phase-assumptions.md": "a8cd1db094fefd35",

View File

@@ -10,7 +10,7 @@
"agents/gsd-code-fixer.md": "6aa74a2fb2ad244a",
"agents/gsd-code-reviewer.md": "e5ec12d4d409e800",
"agents/gsd-codebase-mapper.md": "e5b7941bdda53c91",
"agents/gsd-debug-session-manager.md": "a9d4e43e4d2e327a",
"agents/gsd-debug-session-manager.md": "60f3b42d4aa7f90f",
"agents/gsd-debugger.md": "b1f3af91f0e651c8",
"agents/gsd-doc-classifier.md": "5011d7358d2b2848",
"agents/gsd-doc-synthesizer.md": "e59cdd669876582d",
@@ -214,7 +214,7 @@
"gsd-core/workflows/code-review-fix.md": "e4549af672e74e6f",
"gsd-core/workflows/code-review.md": "a65e3e869508f89e",
"gsd-core/workflows/complete-milestone.md": "c0808127038a8f86",
"gsd-core/workflows/debug.md": "337fc2076e7fc449",
"gsd-core/workflows/debug.md": "870682af53182a6c",
"gsd-core/workflows/diagnose-issues.md": "e616d0d730328d68",
"gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761",
"gsd-core/workflows/discuss-phase-assumptions.md": "9efcb2ef6a9245b3",

View File

@@ -7,7 +7,7 @@
"agents/gsd-code-fixer.md": "1cf3a9fdade9a470",
"agents/gsd-code-reviewer.md": "5342fcc0da974696",
"agents/gsd-codebase-mapper.md": "b995bf01af0193d2",
"agents/gsd-debug-session-manager.md": "a5649998f68812d5",
"agents/gsd-debug-session-manager.md": "a13fdb7f466dd5ff",
"agents/gsd-debugger.md": "a63306f54bdc63bf",
"agents/gsd-doc-classifier.md": "c2bf59af9467810b",
"agents/gsd-doc-synthesizer.md": "b2a179bf3c9bd636",
@@ -282,7 +282,7 @@
"gsd-core/workflows/code-review-fix.md": "2e113d1f4350a075",
"gsd-core/workflows/code-review.md": "334c90c401f291f8",
"gsd-core/workflows/complete-milestone.md": "c1f91b77f4ace7f2",
"gsd-core/workflows/debug.md": "c581e89aa9d9d71e",
"gsd-core/workflows/debug.md": "98c8ed5af882ef8f",
"gsd-core/workflows/diagnose-issues.md": "77d98ac07c4a26ff",
"gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761",
"gsd-core/workflows/discuss-phase-assumptions.md": "f5b765d33eba4f88",

View File

@@ -84,8 +84,8 @@
"agents/gsd-code-reviewer.toml": "66420d6e6ffd14eb",
"agents/gsd-codebase-mapper.md": "cf8f8550b44aec35",
"agents/gsd-codebase-mapper.toml": "a4609f3ac66c2081",
"agents/gsd-debug-session-manager.md": "3d4779f94c6cfb14",
"agents/gsd-debug-session-manager.toml": "c8d894c734e97256",
"agents/gsd-debug-session-manager.md": "22afb03c62b19298",
"agents/gsd-debug-session-manager.toml": "6abd110e0c7f62d1",
"agents/gsd-debugger.md": "cb8a103ed221ca7c",
"agents/gsd-debugger.toml": "b31333b83a8fed0a",
"agents/gsd-doc-classifier.md": "2745bc04d7b93666",
@@ -317,7 +317,7 @@
"gsd-core/workflows/code-review-fix.md": "ae7f9c6b39a23c12",
"gsd-core/workflows/code-review.md": "eadada9e0a89adf2",
"gsd-core/workflows/complete-milestone.md": "017df7443bd08da5",
"gsd-core/workflows/debug.md": "7c3b407470762585",
"gsd-core/workflows/debug.md": "63691293c0bc0294",
"gsd-core/workflows/diagnose-issues.md": "e38bb21d06dff077",
"gsd-core/workflows/discovery-phase.md": "71a4b78ff876a854",
"gsd-core/workflows/discuss-phase-assumptions.md": "0d936ec25299917c",

View File

@@ -7,7 +7,7 @@
"agents/gsd-code-fixer.agent.md": "8f39aacb760aab57",
"agents/gsd-code-reviewer.agent.md": "fa1e7c421c78eae1",
"agents/gsd-codebase-mapper.agent.md": "949bc73f2a7ea44d",
"agents/gsd-debug-session-manager.agent.md": "558683230ba311ba",
"agents/gsd-debug-session-manager.agent.md": "b34b7d3f7e7035ca",
"agents/gsd-debugger.agent.md": "d31e32f73cd1e0dc",
"agents/gsd-doc-classifier.agent.md": "aea81c0ba00e06cf",
"agents/gsd-doc-synthesizer.agent.md": "6ae32e4db005696d",
@@ -212,7 +212,7 @@
"gsd-core/workflows/code-review-fix.md": "fda53892ae4b17fc",
"gsd-core/workflows/code-review.md": "f1c045ec4d33abc8",
"gsd-core/workflows/complete-milestone.md": "470cf39261400ee2",
"gsd-core/workflows/debug.md": "505ed67d48b1fa9d",
"gsd-core/workflows/debug.md": "37c900b9f6c11663",
"gsd-core/workflows/diagnose-issues.md": "42acbe2a43fc886e",
"gsd-core/workflows/discovery-phase.md": "8e99da61fb2b7074",
"gsd-core/workflows/discuss-phase-assumptions.md": "ab0c432b84038681",

View File

@@ -7,7 +7,7 @@
"agents/gsd-code-fixer.md": "76085f4442f268e6",
"agents/gsd-code-reviewer.md": "f29d6edbac0a01b6",
"agents/gsd-codebase-mapper.md": "d49c91fdab4efc70",
"agents/gsd-debug-session-manager.md": "d6e799fdeb1fadde",
"agents/gsd-debug-session-manager.md": "284d49a7fbe4a040",
"agents/gsd-debugger.md": "79bccf33fa2b4272",
"agents/gsd-doc-classifier.md": "a6ab02b8f45f9d0b",
"agents/gsd-doc-synthesizer.md": "fd3c18addbc8265d",
@@ -282,7 +282,7 @@
"gsd-core/workflows/code-review-fix.md": "c57af378033b1b58",
"gsd-core/workflows/code-review.md": "32c37bcbec8b8698",
"gsd-core/workflows/complete-milestone.md": "1400a4856f592f3e",
"gsd-core/workflows/debug.md": "c02dec84c8a346b9",
"gsd-core/workflows/debug.md": "fb9e5ecb5027b98e",
"gsd-core/workflows/diagnose-issues.md": "cd582747131726e3",
"gsd-core/workflows/discovery-phase.md": "7dcf150998559c11",
"gsd-core/workflows/discuss-phase-assumptions.md": "c25c6a6c633d71b6",

View File

@@ -7,7 +7,7 @@
"agents/gsd-code-fixer.md": "94628312f25decb5",
"agents/gsd-code-reviewer.md": "5ef947ca5baed775",
"agents/gsd-codebase-mapper.md": "feccaeeacd05e34b",
"agents/gsd-debug-session-manager.md": "e0bdc1947db579c4",
"agents/gsd-debug-session-manager.md": "ac81c11d0fd3292a",
"agents/gsd-debugger.md": "ec4f796f5c39504a",
"agents/gsd-doc-classifier.md": "29b563a146c9d22c",
"agents/gsd-doc-synthesizer.md": "652beb928e93fa1d",
@@ -211,7 +211,7 @@
"gsd-core/workflows/code-review-fix.md": "e829d3baf9901b54",
"gsd-core/workflows/code-review.md": "50a05ab8957bd05f",
"gsd-core/workflows/complete-milestone.md": "f1866541148dc291",
"gsd-core/workflows/debug.md": "639348c8657e7147",
"gsd-core/workflows/debug.md": "0289d3caa7252779",
"gsd-core/workflows/diagnose-issues.md": "16f2d2a85335641f",
"gsd-core/workflows/discovery-phase.md": "6161c60d752d0058",
"gsd-core/workflows/discuss-phase-assumptions.md": "3a1e215890d2b3f4",

View File

@@ -7,7 +7,7 @@
"agents/gsd-code-fixer.md": "9652d5b56a2afbf5",
"agents/gsd-code-reviewer.md": "922c08885bc78662",
"agents/gsd-codebase-mapper.md": "0ccbf6a685804979",
"agents/gsd-debug-session-manager.md": "828335b15a46b324",
"agents/gsd-debug-session-manager.md": "56719239e1e06145",
"agents/gsd-debugger.md": "b59cda547363e617",
"agents/gsd-doc-classifier.md": "6256bbc0b887f60f",
"agents/gsd-doc-synthesizer.md": "212aaf89a34b51d7",
@@ -282,7 +282,7 @@
"gsd-core/workflows/code-review-fix.md": "722416b71b31c5fc",
"gsd-core/workflows/code-review.md": "506412604f767adc",
"gsd-core/workflows/complete-milestone.md": "59753bf44d4300da",
"gsd-core/workflows/debug.md": "28c964bceb6f03af",
"gsd-core/workflows/debug.md": "e88c2d430c3625b6",
"gsd-core/workflows/diagnose-issues.md": "210b5b313e8a559a",
"gsd-core/workflows/discovery-phase.md": "ca7b2be46e59e862",
"gsd-core/workflows/discuss-phase-assumptions.md": "3ef1df313e715387",

View File

@@ -43,7 +43,7 @@
"agents/subagents/gsd-code-reviewer.yaml": "5f2398f56018f50d",
"agents/subagents/gsd-codebase-mapper.md": "04c7528a13fa3de7",
"agents/subagents/gsd-codebase-mapper.yaml": "bce1c6d15f55c477",
"agents/subagents/gsd-debug-session-manager.md": "be5653e631bbd006",
"agents/subagents/gsd-debug-session-manager.md": "feb32f5c184db47b",
"agents/subagents/gsd-debug-session-manager.yaml": "aab147717b5082e7",
"agents/subagents/gsd-debugger.md": "528ad732ccff4485",
"agents/subagents/gsd-debugger.yaml": "6d02d7feb90cad43",
@@ -275,7 +275,7 @@
"gsd-core/workflows/code-review-fix.md": "2e113d1f4350a075",
"gsd-core/workflows/code-review.md": "334c90c401f291f8",
"gsd-core/workflows/complete-milestone.md": "c1f91b77f4ace7f2",
"gsd-core/workflows/debug.md": "c581e89aa9d9d71e",
"gsd-core/workflows/debug.md": "98c8ed5af882ef8f",
"gsd-core/workflows/diagnose-issues.md": "67c058fc7ae6026b",
"gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761",
"gsd-core/workflows/discuss-phase-assumptions.md": "f5b765d33eba4f88",

View File

@@ -7,7 +7,7 @@
"agents/gsd-code-fixer.md": "3622ae5d90fb15f6",
"agents/gsd-code-reviewer.md": "2249774416314c57",
"agents/gsd-codebase-mapper.md": "948612acd505e87f",
"agents/gsd-debug-session-manager.md": "0a0483c6470df4d1",
"agents/gsd-debug-session-manager.md": "373b4c83cc19595d",
"agents/gsd-debugger.md": "a83427bd5a0406fc",
"agents/gsd-doc-classifier.md": "fb776cfbb7e991b0",
"agents/gsd-doc-synthesizer.md": "2389f388d291c2eb",
@@ -282,7 +282,7 @@
"gsd-core/workflows/code-review-fix.md": "adb9388bb157610c",
"gsd-core/workflows/code-review.md": "ae6bcbd1575aeec4",
"gsd-core/workflows/complete-milestone.md": "614299b2c08e66c3",
"gsd-core/workflows/debug.md": "437b47e14eba8786",
"gsd-core/workflows/debug.md": "161be2a77ffce47a",
"gsd-core/workflows/diagnose-issues.md": "2971c699d52f1b85",
"gsd-core/workflows/discovery-phase.md": "724408336596c50c",
"gsd-core/workflows/discuss-phase-assumptions.md": "92e43cd12200c610",

View File

@@ -178,7 +178,7 @@
"gsd-core/workflows/code-review-fix.md": "2e113d1f4350a075",
"gsd-core/workflows/code-review.md": "334c90c401f291f8",
"gsd-core/workflows/complete-milestone.md": "c1f91b77f4ace7f2",
"gsd-core/workflows/debug.md": "c581e89aa9d9d71e",
"gsd-core/workflows/debug.md": "98c8ed5af882ef8f",
"gsd-core/workflows/diagnose-issues.md": "d6d978fddfd5da8d",
"gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761",
"gsd-core/workflows/discuss-phase-assumptions.md": "f5b765d33eba4f88",

View File

@@ -7,7 +7,7 @@
"agents/gsd-code-fixer.md": "3ed1a27ddc372ef8",
"agents/gsd-code-reviewer.md": "27eeeee6cb600e9b",
"agents/gsd-codebase-mapper.md": "032ff8ac55466a74",
"agents/gsd-debug-session-manager.md": "9f64af6513b8ec9e",
"agents/gsd-debug-session-manager.md": "72e3f4c60d282873",
"agents/gsd-debugger.md": "d0a1e6a1b1cfd9e6",
"agents/gsd-doc-classifier.md": "bdf3d54082424e76",
"agents/gsd-doc-synthesizer.md": "96c383b74a60fbbe",
@@ -211,7 +211,7 @@
"gsd-core/workflows/code-review-fix.md": "f3725ae9d685bed2",
"gsd-core/workflows/code-review.md": "29125604bed2c467",
"gsd-core/workflows/complete-milestone.md": "40085d32b15805c8",
"gsd-core/workflows/debug.md": "a4e4c2f6d004460e",
"gsd-core/workflows/debug.md": "09b6bad63939bb82",
"gsd-core/workflows/diagnose-issues.md": "652ae26975f82242",
"gsd-core/workflows/discovery-phase.md": "6161c60d752d0058",
"gsd-core/workflows/discuss-phase-assumptions.md": "18712f78bb960ec8",

View File

@@ -7,7 +7,7 @@
"agents/gsd-code-fixer.md": "5fe29063843be67e",
"agents/gsd-code-reviewer.md": "338c46ab59c4e45f",
"agents/gsd-codebase-mapper.md": "8529d8a1ede8bbfb",
"agents/gsd-debug-session-manager.md": "69aa7eae3a23f6a9",
"agents/gsd-debug-session-manager.md": "1519818b8efb2385",
"agents/gsd-debugger.md": "704eb4e94b4d1212",
"agents/gsd-doc-classifier.md": "a6ab02b8f45f9d0b",
"agents/gsd-doc-synthesizer.md": "fd3c18addbc8265d",
@@ -211,7 +211,7 @@
"gsd-core/workflows/code-review-fix.md": "f2761f7f8c4a5674",
"gsd-core/workflows/code-review.md": "47663a2922756c5e",
"gsd-core/workflows/complete-milestone.md": "6e918b72bd885426",
"gsd-core/workflows/debug.md": "7783c3cb81fef70d",
"gsd-core/workflows/debug.md": "04b29e0ba18603b6",
"gsd-core/workflows/diagnose-issues.md": "9274b11a3db98c65",
"gsd-core/workflows/discovery-phase.md": "b32b6197b66c9a13",
"gsd-core/workflows/discuss-phase-assumptions.md": "e376b1cf29379df4",

View File

@@ -7,7 +7,7 @@
"agents/gsd-code-fixer.md": "f00d815ec535a168",
"agents/gsd-code-reviewer.md": "efc0d2dee321c654",
"agents/gsd-codebase-mapper.md": "cfa2bbfaf264e1fd",
"agents/gsd-debug-session-manager.md": "793d9a80778d1080",
"agents/gsd-debug-session-manager.md": "a31a327a82f37af1",
"agents/gsd-debugger.md": "6b28c99a37402200",
"agents/gsd-doc-classifier.md": "a6ab02b8f45f9d0b",
"agents/gsd-doc-synthesizer.md": "fd3c18addbc8265d",
@@ -211,7 +211,7 @@
"gsd-core/workflows/code-review-fix.md": "b99b1f20bb27c291",
"gsd-core/workflows/code-review.md": "faa87faf07ae765a",
"gsd-core/workflows/complete-milestone.md": "f463bf4e86ac26f6",
"gsd-core/workflows/debug.md": "d0ee63e547f4d997",
"gsd-core/workflows/debug.md": "830c309b48c35c8c",
"gsd-core/workflows/diagnose-issues.md": "447072aa72385271",
"gsd-core/workflows/discovery-phase.md": "7dcf150998559c11",
"gsd-core/workflows/discuss-phase-assumptions.md": "b091b3d3e580dd29",

View File

@@ -7,7 +7,7 @@
"agents/gsd-code-fixer.md": "78549833f0411b0c",
"agents/gsd-code-reviewer.md": "7d94fe8bfa6661aa",
"agents/gsd-codebase-mapper.md": "7cc9d387f29c46e1",
"agents/gsd-debug-session-manager.md": "30651d0b4a465263",
"agents/gsd-debug-session-manager.md": "4d3b1d31c6242e3a",
"agents/gsd-debugger.md": "fc76a617817be610",
"agents/gsd-doc-classifier.md": "146acf4d176134b5",
"agents/gsd-doc-synthesizer.md": "b1f5e2eb28fa3659",
@@ -282,7 +282,7 @@
"gsd-core/workflows/code-review-fix.md": "2e113d1f4350a075",
"gsd-core/workflows/code-review.md": "334c90c401f291f8",
"gsd-core/workflows/complete-milestone.md": "c1f91b77f4ace7f2",
"gsd-core/workflows/debug.md": "c581e89aa9d9d71e",
"gsd-core/workflows/debug.md": "98c8ed5af882ef8f",
"gsd-core/workflows/diagnose-issues.md": "aa8d787db8f3c46c",
"gsd-core/workflows/discovery-phase.md": "3ba7cfb89fb1e761",
"gsd-core/workflows/discuss-phase-assumptions.md": "f5b765d33eba4f88",

View File

@@ -14,7 +14,7 @@
"code-review-fix.md": 24320,
"code-review.md": 31916,
"complete-milestone.md": 31071,
"debug.md": 14241,
"debug.md": 19031,
"diagnose-issues.md": 12864,
"discovery-phase.md": 8651,
"discuss-phase-assumptions.md": 27302,