diff --git a/.changeset/1959-sbfl-fault-localization.md b/.changeset/1959-sbfl-fault-localization.md new file mode 100644 index 000000000..e01ce733c --- /dev/null +++ b/.changeset/1959-sbfl-fault-localization.md @@ -0,0 +1,5 @@ +--- +type: Added +pr: 2403 +--- +**`gsd-debugger` now ranks suspect code by Ochiai suspiciousness before forming hypotheses** — when a runnable test suite with per-test coverage exists (≥1 failing and ≥1 passing test), the debugger computes a spectrum-based fault-localization (Ochiai) ranking over the coverage and seeds the top-N suspicious locations into the Evidence section as first-class hypothesis candidates, narrowing the search space deterministically before any LLM reasoning. Tarantula is documented as a fallback formula. The step degrades cleanly (logged, never a silent pass) when there is no test suite, no failing tests, or no per-test coverage, and it is explicitly not trusted on flaky/Heisenbug spectra (pairs with the Phase 2B bug-taxonomy routing). Full rules live in `gsd-core/references/debugger-sbfl.md`. (#1959) diff --git a/agents/gsd-debugger.md b/agents/gsd-debugger.md index d4a8884ec..cbd11ac11 100644 --- a/agents/gsd-debugger.md +++ b/agents/gsd-debugger.md @@ -983,6 +983,13 @@ At investigation decision points, apply structured reasoning: - Run app/tests to observe behavior - APPEND to Evidence after each finding +**Phase 1.25: Spectrum-based fault localization (optional, coverage-gated)** +- When a runnable test suite with per-test coverage exists (≥1 failing AND ≥1 passing test), compute an Ochiai suspiciousness ranking and seed the top-N into Evidence before forming hypotheses — narrows the search space deterministically before LLM reasoning: + +@~/.claude/gsd-core/references/debugger-sbfl.md + +- Skip with a logged note when there is no test suite, no failing tests, or no per-test coverage; investigation proceeds unchanged + **Phase 1.5: Check common bug patterns** - Read @~/.claude/gsd-core/references/common-bug-patterns.md - Match symptoms to pattern categories using the Symptom-to-Category Quick Map diff --git a/docs/AGENTS.md b/docs/AGENTS.md index 5b4d268f4..8751711c1 100644 --- a/docs/AGENTS.md +++ b/docs/AGENTS.md @@ -401,6 +401,7 @@ runs its default whole-repo scan. - State persists across context resets - Requires human verification before marking resolved - Runs a multi-signal fix-acceptance guardrail (mutation check, no-op/deletion detector, adjacent tests, revert-and-reconfirm) before accepting a fix; degrades gracefully when Stryker or a test suite is absent +- Ranks suspect code by Ochiai suspiciousness from test pass/fail coverage (spectrum-based fault localization) before forming hypotheses; skips cleanly when no coverage exists - Appends to persistent knowledge base on resolution - Consults knowledge base on new sessions diff --git a/docs/INVENTORY-MANIFEST.json b/docs/INVENTORY-MANIFEST.json index d0123c9f9..54e8df122 100644 --- a/docs/INVENTORY-MANIFEST.json +++ b/docs/INVENTORY-MANIFEST.json @@ -216,6 +216,7 @@ "continuation-format.md", "debugger-fix-acceptance.md", "debugger-philosophy.md", + "debugger-sbfl.md", "decimal-phase-calculation.md", "doc-conflict-engine.md", "domain-probes.md", diff --git a/docs/INVENTORY.md b/docs/INVENTORY.md index 30ee818b7..0d6da296a 100644 --- a/docs/INVENTORY.md +++ b/docs/INVENTORY.md @@ -295,6 +295,7 @@ Full roster at `gsd-core/references/*.md`. References are shared knowledge docum | `common-bug-patterns.md` | Common bug patterns for code review and verification. | | `debugger-philosophy.md` | Evergreen debugging disciplines loaded by `gsd-debugger`. | | `debugger-fix-acceptance.md` | Multi-signal fix-acceptance guardrail (anti-overfitting) loaded by `gsd-debugger`. | +| `debugger-sbfl.md` | Spectrum-based fault localization (Ochiai) pre-filter loaded by `gsd-debugger`. | | `mandatory-initial-read.md` | Shared required-reading boilerplate injected into agent prompts. | | `agent-skills-bootstrap.md` | Shared agent_skills self-load contract (query + Read + dedup guard) injected into all 22 consumer agents. | | `project-skills-discovery.md` | Shared project-skills-discovery boilerplate injected into agent prompts. | diff --git a/gsd-core/references/debugger-sbfl.md b/gsd-core/references/debugger-sbfl.md new file mode 100644 index 000000000..ddd542f9d --- /dev/null +++ b/gsd-core/references/debugger-sbfl.md @@ -0,0 +1,110 @@ +# Spectrum-Based Fault Localization (SBFL) Pre-filter + +Loaded by `gsd-debugger` via `@-include`. A deterministic ranked "where to look +first" list derived from existing test pass/fail coverage, computed before LLM +reasoning over an unranked search space. + +## Why this exists + +`investigation_loop` Phase 1 searches the codebase and reads files to seed +hypotheses via (expensive, non-deterministic) LLM reasoning over an unranked +space. When a runnable test suite with per-test coverage exists, there is a +cheap, deterministic signal being left on the table: which code is +disproportionately executed by **failing** vs **passing** tests. SBFL turns +that coverage spectrum into a suspiciousness ranking. The agent currently has no +fault-localization step at all. + +## When to run it (Phase 1.25 — after initial evidence, before hypothesis formation) + +Run only when ALL hold: +- A runnable test suite exists for the failing area. +- At least one failing test AND at least one passing test exist (a spectrum + requires both). +- Per-test coverage is available (which tests executed which code + element — function, line, or branch). + +If any precondition fails, **skip** this step with a logged note (see +Degradation) and proceed with Phase 1's normal evidence gathering unchanged. + +## The Ochiai formula + +For each code element `s` executed by the test suite: + +``` +ochiai(s) = failed(s) / sqrt(totalFailed × (failed(s) + passed(s))) +``` + +where: +- `failed(s)` = number of **failing** tests that executed `s` +- `passed(s)` = number of **passing** tests that executed `s` +- `totalFailed` = total number of failing tests in the suite + +The score is in `[0, 1]`. An element executed by every failing test and no +passing test scores `1.0` (maximum suspiciousness). An element touched only by +passing tests scores `0`. Ochiai is empirically stronger than Tarantula across +the SBFL literature; **Tarantula** is the documented fallback formula +(`tarantula(s) = (failed(s)/totalFailed) / ((failed(s)/totalFailed) + (passed(s)/totalPassed))`) +if a comparison or secondary signal is wanted. + +## Output — top-N shortlist seeded into the hypothesis space + +Rank all executed elements by descending Ochiai score and take the **top-N** +(N is judgment — 5–10 is typical; bounded by what narrows the search without +flooding it). Append each top-N element to the debug file's **Evidence** +section as a first-class hypothesis candidate: + +``` +- timestamp: + checked: SBFL Ochiai ranking (Phase 1.25) + found: top-N suspicious locations — + 1. path/to/file.cts:LINE (score 0.89) — + 2. path/to/other.cts:LINE (score 0.77) — + ... + implication: investigate these before forming broader hypotheses +``` + +This narrows the search space by orders of magnitude before any LLM tokens are +spent forming hypotheses. Each top-N entry becomes a candidate for Phase 2 +hypothesis formation, ranked ahead of un-evidenced guesses. + +## Degradation (Gall's Law — optional step, degrades onto the working agent) + +This step is **purely additive**. Every miss degrades to today's behavior; a +skipped step is logged, never a silent pass (Kernighan — the debugger stays +auditable). + +| Condition | Behavior | +|---|---| +| No test suite for the failing area | **skip** with a logged note in Evidence ("SBFL skipped: no test suite"); Phase 1 proceeds unchanged | +| Test suite but no failing tests | **skip** with a logged note ("SBFL skipped: no failing tests — no spectrum"); Phase 1 proceeds unchanged | +| Test suite but no passing tests | **skip** with a logged note ("SBFL skipped: no spectrum — no passing tests"); Phase 1 proceeds unchanged (Tarantula would divide by `totalPassed=0`; do not run it) | +| Test suite but no per-test coverage | **skip** with a logged note ("SBFL skipped: no per-test coverage available"); Phase 1 proceeds unchanged | +| Coverage exists but is coarse (file-level, not line/function) | run anyway, rank at the available granularity, and note the granularity in Evidence | + +## Bug-class gating (pairs with Phase 2B bug-taxonomy routing) + +SBFL is the go-to pre-filter for **deterministic failures (Bohrbugs)** — bugs +that reproduce reliably. It is explicitly **not trusted** on +**Heisenbug/Mandelbug** spectra (timing, races, environment-dependent failures): +a flaky suite pollutes the spectrum (a "failing" test that sometimes passes +poisons `failed(s)`), so the ranking becomes noise. When the failure is +non-deterministic (Phase 2B classifies it), **skip SBFL** and route to +record-replay or stability-stress instead. If SBFL has already run before +classification and the class later resolves to Heisenbug/Mandelbug, mark the +prior SBFL Evidence entry as revoked (do not delete it — Kernighan +auditability) and note why in Evidence. + +## Scope boundary (Zawinski's Law) + +This is a deterministic pre-filter that reuses the project's existing +test/coverage runner — it adds **no new coverage framework** and no new +subsystem. It narrows the LLM's search space; it does not replace hypothesis +formation, fix-and-verify, or the knowledge base. Coverage acquisition is the +agent's adaptive job (use whatever coverage the project produces); the formula +above is the canonical ranking. + +**Bound the coverage run** (CLAUDE.md gauntlet — unbounded subprocess): a +coverage run is often 2–3× slower than a plain test run due to instrumentation, +so cap it (60s for npm-tier suites; scale with suite size) and **degrade to +skip with a logged note on timeout** — never let coverage acquisition hang the +debug session. diff --git a/tests/agent-size-baseline.json b/tests/agent-size-baseline.json index f532f9a11..2d0c7ffe1 100644 --- a/tests/agent-size-baseline.json +++ b/tests/agent-size-baseline.json @@ -6,7 +6,7 @@ "gsd-code-reviewer.md": 16870, "gsd-codebase-mapper.md": 21485, "gsd-debug-session-manager.md": 16850, - "gsd-debugger.md": 52209, + "gsd-debugger.md": 52734, "gsd-doc-classifier.md": 11717, "gsd-doc-synthesizer.md": 13154, "gsd-doc-verifier.md": 12403, diff --git a/tests/debugger-sbfl.test.cjs b/tests/debugger-sbfl.test.cjs new file mode 100644 index 000000000..a22c5cb77 --- /dev/null +++ b/tests/debugger-sbfl.test.cjs @@ -0,0 +1,198 @@ +// allow-test-rule: source-text-is-the-product (see #1959) +// Agent .md + reference .md files — their text IS what the runtime loads. +// Testing text content tests the deployed SBFL contract. The pure-JS Ochiai +// tests below validate the formula the reference documents (criterion 2: +// known-faulty location in top-N). Per CONTRIBUTING.md exception matrix. +// Covers epic #1957 Phase 1B (#1959). +'use strict'; + +const { describe, test } = require('node:test'); +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); + +let fc; +try { + fc = require('fast-check'); +} catch { + fc = null; +} + +const ROOT = process.cwd(); +const AGENT = path.join(ROOT, 'agents/gsd-debugger.md'); +const REFERENCE = path.join(ROOT, 'gsd-core/references/debugger-sbfl.md'); + +// In-test canonical Ochiai implementation — validates the formula the reference +// documents. If the reference's formula drifts from real Ochiai, the contract +// tests (Ochiai named + formula shape) flag the drift, and these correctness +// tests pin what "correct Ochiai" means. +function ochiai(failedExec, passedExec, totalFailed) { + if (totalFailed <= 0) return 0; + const denom = Math.sqrt(totalFailed * (failedExec + passedExec)); + return denom === 0 ? 0 : failedExec / denom; +} + +function rankByOchiai(elements, totalFailed) { + return elements + .map((e) => ({ element: e.element, score: ochiai(e.failedExec, e.passedExec, totalFailed) })) + .sort((a, b) => b.score - a.score); +} + +describe('spectrum-based fault localization (#1959, epic #1957 Phase 1B)', () => { + describe('reference extract exists and is wired into the agent', () => { + test('gsd-core/references/debugger-sbfl.md exists', () => { + assert.ok(fs.existsSync(REFERENCE), 'debugger-sbfl.md reference must exist'); + }); + + test('gsd-debugger.md @-includes the SBFL reference', () => { + const content = fs.readFileSync(AGENT, 'utf8'); + assert.ok( + content.includes('@~/.claude/gsd-core/references/debugger-sbfl.md'), + 'gsd-debugger.md must @-include the SBFL reference' + ); + }); + }); + + describe('Ochiai contract documented (criterion 1)', () => { + test('reference names Ochiai and documents the formula', () => { + const content = fs.readFileSync(REFERENCE, 'utf8'); + assert.ok(/ochiai/i.test(content), 'reference must name the Ochiai formula'); + assert.ok(/sqrt/i.test(content), 'reference must document the sqrt-based formula'); + assert.ok(/failed/i.test(content) && /passed/i.test(content), + 'reference must reference failed(s) and passed(s) terms'); + }); + + test('reference documents Tarantula as a fallback', () => { + const content = fs.readFileSync(REFERENCE, 'utf8'); + assert.ok(/tarantula/i.test(content), 'reference must mention Tarantula as a documented fallback'); + }); + + test('reference documents top-N seeding into the hypothesis space', () => { + const content = fs.readFileSync(REFERENCE, 'utf8'); + assert.ok(/top-?n/i.test(content), 'reference must document top-N shortlist seeding'); + }); + }); + + describe('graceful degradation (criterion 3)', () => { + test('reference documents skip when no coverage / no test suite', () => { + const content = fs.readFileSync(REFERENCE, 'utf8'); + assert.ok(/no coverage|no test suite|coverage (?:is )?(?:absent|unavailable)/i.test(content), + 'must document the no-coverage skip path'); + assert.ok(/skip.*log|log.*skip|skip.*note|note.*skip/i.test(content), + 'skip must be logged (not a silent pass) — Kernighan auditability'); + }); + }); + + describe('ranking written to the debug file as seed evidence (criterion 4)', () => { + test('reference documents recording the ranking under Evidence', () => { + const content = fs.readFileSync(REFERENCE, 'utf8'); + assert.ok(/evidence/i.test(content), + 'reference must document that the ranking lands in the Evidence section of the debug file'); + }); + }); + + describe('pairs with Phase 2B bug-taxonomy routing', () => { + test('reference notes SBFL is gated for deterministic (Bohrbug) failures', () => { + const content = fs.readFileSync(REFERENCE, 'utf8'); + assert.ok(/bohrbug|deterministic|flaky|heisenbug|mandelbug/i.test(content), + 'reference must note SBFL suits deterministic bugs and is not trusted on flaky spectra (pairs with Phase 2B)'); + }); + }); + + describe('Ochiai formula correctness — behavioral (criterion 2: known-faulty location in top-N)', () => { + test('score is always in [0, 1] for any non-negative inputs (totalFailed > 0)', () => { + const fixture = [ + { failedExec: 0, passedExec: 10, totalFailed: 5 }, + { failedExec: 5, passedExec: 0, totalFailed: 5 }, + { failedExec: 3, passedExec: 7, totalFailed: 5 }, + { failedExec: 5, passedExec: 100, totalFailed: 5 }, + ]; + for (const f of fixture) { + const s = ochiai(f.failedExec, f.passedExec, f.totalFailed); + assert.ok(s >= 0 && s <= 1, `score ${s} out of [0,1] for failedExec=${f.failedExec} passedExec=${f.passedExec} totalFailed=${f.totalFailed}`); + } + }); + + test('an element hit by all failing tests and no passing tests scores the maximum (1.0)', () => { + assert.strictEqual(ochiai(5, 0, 5), 1); + assert.strictEqual(ochiai(1, 0, 1), 1); + }); + + test('a known-faulty element ranks in the top-N of a representative fixture', () => { + // Representative fixture: 5 tests (3 failing, 2 passing), 4 code elements. + // Element "bug" is executed by all 3 failing tests and 0 passing → Ochiai 1.0 → rank #1. + const totalFailed = 3; + const elements = [ + { element: 'unrelated-a', failedExec: 1, passedExec: 2 }, + { element: 'bug', failedExec: 3, passedExec: 0 }, // the known fault + { element: 'unrelated-b', failedExec: 2, passedExec: 2 }, + { element: 'unrelated-c', failedExec: 0, passedExec: 2 }, + ]; + const ranked = rankByOchiai(elements, totalFailed); + const topN = ranked.slice(0, Math.min(3, ranked.length)); + assert.ok(topN.length > 0, 'ranking must be non-empty'); + assert.strictEqual(ranked[0].element, 'bug', 'the known-faulty element must rank #1'); + assert.ok(topN.some((r) => r.element === 'bug'), + 'the known-faulty element must appear in the top-N (criterion 2)'); + // ranking is non-increasing + for (let i = 1; i < ranked.length; i++) { + assert.ok(ranked[i - 1].score >= ranked[i].score, 'ranking must be non-increasing'); + } + }); + + test('degrades cleanly when there are no failing tests (totalFailed = 0 → all scores 0)', () => { + const elements = [ + { element: 'a', failedExec: 0, passedExec: 5 }, + { element: 'b', failedExec: 0, passedExec: 3 }, + ]; + const ranked = rankByOchiai(elements, 0); + for (const r of ranked) { + assert.strictEqual(r.score, 0, 'no failing tests → every suspiciousness score is 0 (clean degradation)'); + } + }); + + if (fc) { + test('property: ochiai ∈ [0, 1] for valid coverage counts (failedExec ≤ totalFailed)', () => { + // Ochiai is defined over coverage counts where failedExec is bounded by + // totalFailed (a failing test that executed s is one of the totalFailed + // failing tests) and passedExec is bounded by totalPassed. Generate + // in-domain inputs via chain. + const validCoverage = fc.integer({ min: 1, max: 30 }).chain((totalFailed) => + fc.record({ + totalFailed: fc.constant(totalFailed), + failedExec: fc.integer({ min: 0, max: totalFailed }), + passedExec: fc.nat(30), + }) + ); + fc.assert( + fc.property(validCoverage, ({ totalFailed, failedExec, passedExec }) => { + const s = ochiai(failedExec, passedExec, totalFailed); + return s >= 0 && s <= 1 + 1e-9; + }), + { numRuns: 200 } + ); + }); + + test('property: ochiai is non-decreasing in failedExec (holding totalFailed + passedExec fixed)', () => { + // Non-trivial: a correct Ochiai must not penalize an element for being + // hit by MORE failing tests. An inverted numerator/denominator would fail this. + // failedExecA is bounded by totalFailed (coverage invariant) via chain. + const validStart = fc.integer({ min: 1, max: 30 }).chain((totalFailed) => + fc.record({ + totalFailed: fc.constant(totalFailed), + passedExec: fc.nat(30), + failedExecA: fc.integer({ min: 0, max: totalFailed }), + }) + ); + fc.assert( + fc.property(validStart, ({ totalFailed, passedExec, failedExecA }) => { + const failedExecB = Math.min(totalFailed, failedExecA + 1); + if (failedExecB === failedExecA) return true; // A already at totalFailed + return ochiai(failedExecB, passedExec, totalFailed) >= ochiai(failedExecA, passedExec, totalFailed) - 1e-9; + }), + { numRuns: 300 } + ); + }); + } + }); +}); diff --git a/tests/fixtures/golden-install-parity/antigravity.json b/tests/fixtures/golden-install-parity/antigravity.json index 9f009f92d..fc6d54c8a 100644 --- a/tests/fixtures/golden-install-parity/antigravity.json +++ b/tests/fixtures/golden-install-parity/antigravity.json @@ -8,7 +8,7 @@ "agents/gsd-code-reviewer.md": "a700d295bbf110a9", "agents/gsd-codebase-mapper.md": "afdae82284cb21b4", "agents/gsd-debug-session-manager.md": "95441545abeab3f5", - "agents/gsd-debugger.md": "c4420686f490d948", + "agents/gsd-debugger.md": "a41ea4bc59ea744f", "agents/gsd-doc-classifier.md": "fca19595590391df", "agents/gsd-doc-synthesizer.md": "0e5184bbcf0dca02", "agents/gsd-doc-verifier.md": "888c6ac870cb91a6", @@ -62,6 +62,7 @@ "gsd-core/references/continuation-format.md": "580287399ad3ba68", "gsd-core/references/debugger-fix-acceptance.md": "87d367e4e864910e", "gsd-core/references/debugger-philosophy.md": "1cb61d4565081c88", + "gsd-core/references/debugger-sbfl.md": "de9cd1bd0e1485c6", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "883d0a1b9d9ff96e", "gsd-core/references/domain-probes.md": "762b965e84035b72", diff --git a/tests/fixtures/golden-install-parity/augment.json b/tests/fixtures/golden-install-parity/augment.json index a48446310..acf08f35c 100644 --- a/tests/fixtures/golden-install-parity/augment.json +++ b/tests/fixtures/golden-install-parity/augment.json @@ -8,7 +8,7 @@ "agents/gsd-code-reviewer.md": "bc8a6f2e1f787ff5", "agents/gsd-codebase-mapper.md": "85ea778ad9cf7e66", "agents/gsd-debug-session-manager.md": "2f775ae4ab8855a0", - "agents/gsd-debugger.md": "a21c4e8d29b0eaee", + "agents/gsd-debugger.md": "a0ec84b507f2e036", "agents/gsd-doc-classifier.md": "262a94b947a4e2aa", "agents/gsd-doc-synthesizer.md": "01f90ea9b0d05d7d", "agents/gsd-doc-verifier.md": "b3433e0db51e1c60", @@ -133,6 +133,7 @@ "gsd-core/references/continuation-format.md": "ce73e57d053ab8a7", "gsd-core/references/debugger-fix-acceptance.md": "5616622f33e00436", "gsd-core/references/debugger-philosophy.md": "0466f95a3d6bfcd3", + "gsd-core/references/debugger-sbfl.md": "a7d0cd5940d6d2cd", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "67d019d23e17f934", "gsd-core/references/domain-probes.md": "62d23ed1992c48a9", diff --git a/tests/fixtures/golden-install-parity/claude-local.json b/tests/fixtures/golden-install-parity/claude-local.json index 68536223f..060db57c6 100644 --- a/tests/fixtures/golden-install-parity/claude-local.json +++ b/tests/fixtures/golden-install-parity/claude-local.json @@ -7,7 +7,7 @@ "agents/gsd-code-reviewer.md": "e2c45baa8c0b5f6d", "agents/gsd-codebase-mapper.md": "f96958e5f85b93fb", "agents/gsd-debug-session-manager.md": "7e08652ad1c48efb", - "agents/gsd-debugger.md": "a3643fb51b054988", + "agents/gsd-debugger.md": "3c0526872ae337d7", "agents/gsd-doc-classifier.md": "a76778bdde1c7f72", "agents/gsd-doc-synthesizer.md": "8b0b6fc187c9d353", "agents/gsd-doc-verifier.md": "4232dcf9076e3566", @@ -132,6 +132,7 @@ "gsd-core/references/continuation-format.md": "580287399ad3ba68", "gsd-core/references/debugger-fix-acceptance.md": "5616622f33e00436", "gsd-core/references/debugger-philosophy.md": "0466f95a3d6bfcd3", + "gsd-core/references/debugger-sbfl.md": "a7d0cd5940d6d2cd", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "883d0a1b9d9ff96e", "gsd-core/references/domain-probes.md": "762b965e84035b72", diff --git a/tests/fixtures/golden-install-parity/claude.json b/tests/fixtures/golden-install-parity/claude.json index 29a38707e..f460f1f48 100644 --- a/tests/fixtures/golden-install-parity/claude.json +++ b/tests/fixtures/golden-install-parity/claude.json @@ -7,7 +7,7 @@ "agents/gsd-code-reviewer.md": "d626a828e8de3648", "agents/gsd-codebase-mapper.md": "8c2e9f2ce3aedf78", "agents/gsd-debug-session-manager.md": "a813e6b226b2be58", - "agents/gsd-debugger.md": "dd4baf1337cebe09", + "agents/gsd-debugger.md": "fc975cf160dfee7a", "agents/gsd-doc-classifier.md": "a636ae9594b25770", "agents/gsd-doc-synthesizer.md": "dfb95eedfb3789bf", "agents/gsd-doc-verifier.md": "4232dcf9076e3566", @@ -61,6 +61,7 @@ "gsd-core/references/continuation-format.md": "580287399ad3ba68", "gsd-core/references/debugger-fix-acceptance.md": "5616622f33e00436", "gsd-core/references/debugger-philosophy.md": "0466f95a3d6bfcd3", + "gsd-core/references/debugger-sbfl.md": "a7d0cd5940d6d2cd", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "883d0a1b9d9ff96e", "gsd-core/references/domain-probes.md": "762b965e84035b72", diff --git a/tests/fixtures/golden-install-parity/cline.json b/tests/fixtures/golden-install-parity/cline.json index 5b66305c2..c38f677e0 100644 --- a/tests/fixtures/golden-install-parity/cline.json +++ b/tests/fixtures/golden-install-parity/cline.json @@ -11,7 +11,7 @@ "agents/gsd-code-reviewer.md": "e5ec12d4d409e800", "agents/gsd-codebase-mapper.md": "e5b7941bdda53c91", "agents/gsd-debug-session-manager.md": "dd70329c06ec5b79", - "agents/gsd-debugger.md": "8709cc2721688ea9", + "agents/gsd-debugger.md": "706cc2c87a8da251", "agents/gsd-doc-classifier.md": "5011d7358d2b2848", "agents/gsd-doc-synthesizer.md": "e59cdd669876582d", "agents/gsd-doc-verifier.md": "b60290c9d9f6d8d2", @@ -65,6 +65,7 @@ "gsd-core/references/continuation-format.md": "ce73e57d053ab8a7", "gsd-core/references/debugger-fix-acceptance.md": "1057d70f7f2d654a", "gsd-core/references/debugger-philosophy.md": "0466f95a3d6bfcd3", + "gsd-core/references/debugger-sbfl.md": "6e4975ee50973c23", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "67d019d23e17f934", "gsd-core/references/domain-probes.md": "62d23ed1992c48a9", diff --git a/tests/fixtures/golden-install-parity/codebuddy.json b/tests/fixtures/golden-install-parity/codebuddy.json index d0b80a49e..a7d023273 100644 --- a/tests/fixtures/golden-install-parity/codebuddy.json +++ b/tests/fixtures/golden-install-parity/codebuddy.json @@ -8,7 +8,7 @@ "agents/gsd-code-reviewer.md": "5342fcc0da974696", "agents/gsd-codebase-mapper.md": "b995bf01af0193d2", "agents/gsd-debug-session-manager.md": "6dc05c3ac8a3f2cc", - "agents/gsd-debugger.md": "5549e84b9b576d9b", + "agents/gsd-debugger.md": "54ab502a6b751680", "agents/gsd-doc-classifier.md": "c2bf59af9467810b", "agents/gsd-doc-synthesizer.md": "b2a179bf3c9bd636", "agents/gsd-doc-verifier.md": "e74d930905a782ea", @@ -133,6 +133,7 @@ "gsd-core/references/continuation-format.md": "ce73e57d053ab8a7", "gsd-core/references/debugger-fix-acceptance.md": "5616622f33e00436", "gsd-core/references/debugger-philosophy.md": "0466f95a3d6bfcd3", + "gsd-core/references/debugger-sbfl.md": "a7d0cd5940d6d2cd", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "67d019d23e17f934", "gsd-core/references/domain-probes.md": "62d23ed1992c48a9", diff --git a/tests/fixtures/golden-install-parity/codex.json b/tests/fixtures/golden-install-parity/codex.json index cd77bb4bf..7910f70c2 100644 --- a/tests/fixtures/golden-install-parity/codex.json +++ b/tests/fixtures/golden-install-parity/codex.json @@ -86,8 +86,8 @@ "agents/gsd-codebase-mapper.toml": "a4609f3ac66c2081", "agents/gsd-debug-session-manager.md": "5c7af4adccaa9597", "agents/gsd-debug-session-manager.toml": "e3b962d5478f2b46", - "agents/gsd-debugger.md": "aec67e757771e460", - "agents/gsd-debugger.toml": "99a17d121197cfa5", + "agents/gsd-debugger.md": "fefd9d1a59661bff", + "agents/gsd-debugger.toml": "83dbb27716668d91", "agents/gsd-doc-classifier.md": "2745bc04d7b93666", "agents/gsd-doc-classifier.toml": "3fe5ec83f62b586e", "agents/gsd-doc-synthesizer.md": "4f545f2e916458ad", @@ -168,6 +168,7 @@ "gsd-core/references/continuation-format.md": "e64c0da2b3d0f2f0", "gsd-core/references/debugger-fix-acceptance.md": "b2732420bdbcadcd", "gsd-core/references/debugger-philosophy.md": "1cb61d4565081c88", + "gsd-core/references/debugger-sbfl.md": "391e732abf32786a", "gsd-core/references/decimal-phase-calculation.md": "ee363ec47be68922", "gsd-core/references/doc-conflict-engine.md": "257aba80c93854d4", "gsd-core/references/domain-probes.md": "4901deac8eac0f49", diff --git a/tests/fixtures/golden-install-parity/copilot.json b/tests/fixtures/golden-install-parity/copilot.json index 93063cfee..99f5266d2 100644 --- a/tests/fixtures/golden-install-parity/copilot.json +++ b/tests/fixtures/golden-install-parity/copilot.json @@ -8,7 +8,7 @@ "agents/gsd-code-reviewer.agent.md": "fa1e7c421c78eae1", "agents/gsd-codebase-mapper.agent.md": "949bc73f2a7ea44d", "agents/gsd-debug-session-manager.agent.md": "bbea35c986c88ce6", - "agents/gsd-debugger.agent.md": "92ba32ed5042d76d", + "agents/gsd-debugger.agent.md": "358b4c70a38b4341", "agents/gsd-doc-classifier.agent.md": "aea81c0ba00e06cf", "agents/gsd-doc-synthesizer.agent.md": "6ae32e4db005696d", "agents/gsd-doc-verifier.agent.md": "0230208ae7ab1a08", @@ -63,6 +63,7 @@ "gsd-core/references/continuation-format.md": "580287399ad3ba68", "gsd-core/references/debugger-fix-acceptance.md": "812922e2b5db9410", "gsd-core/references/debugger-philosophy.md": "1cb61d4565081c88", + "gsd-core/references/debugger-sbfl.md": "5bb65a8653bf2e06", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "883d0a1b9d9ff96e", "gsd-core/references/domain-probes.md": "762b965e84035b72", diff --git a/tests/fixtures/golden-install-parity/cursor.json b/tests/fixtures/golden-install-parity/cursor.json index 672977db8..1d11089fe 100644 --- a/tests/fixtures/golden-install-parity/cursor.json +++ b/tests/fixtures/golden-install-parity/cursor.json @@ -8,7 +8,7 @@ "agents/gsd-code-reviewer.md": "f29d6edbac0a01b6", "agents/gsd-codebase-mapper.md": "d49c91fdab4efc70", "agents/gsd-debug-session-manager.md": "69a051432e54f9a5", - "agents/gsd-debugger.md": "3fb544d8fce11aea", + "agents/gsd-debugger.md": "ac61fdd3129770c5", "agents/gsd-doc-classifier.md": "a6ab02b8f45f9d0b", "agents/gsd-doc-synthesizer.md": "fd3c18addbc8265d", "agents/gsd-doc-verifier.md": "9934ec11845d41c3", @@ -133,6 +133,7 @@ "gsd-core/references/continuation-format.md": "580287399ad3ba68", "gsd-core/references/debugger-fix-acceptance.md": "86b7cbde0171fafd", "gsd-core/references/debugger-philosophy.md": "0466f95a3d6bfcd3", + "gsd-core/references/debugger-sbfl.md": "838445590aab52e3", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "883d0a1b9d9ff96e", "gsd-core/references/domain-probes.md": "762b965e84035b72", diff --git a/tests/fixtures/golden-install-parity/hermes.json b/tests/fixtures/golden-install-parity/hermes.json index 733fee395..e83e24ea2 100644 --- a/tests/fixtures/golden-install-parity/hermes.json +++ b/tests/fixtures/golden-install-parity/hermes.json @@ -8,7 +8,7 @@ "agents/gsd-code-reviewer.md": "5ef947ca5baed775", "agents/gsd-codebase-mapper.md": "feccaeeacd05e34b", "agents/gsd-debug-session-manager.md": "60945a8dcfb7e3d7", - "agents/gsd-debugger.md": "0489cee92e1361a7", + "agents/gsd-debugger.md": "8a375259b81d8adf", "agents/gsd-doc-classifier.md": "29b563a146c9d22c", "agents/gsd-doc-synthesizer.md": "652beb928e93fa1d", "agents/gsd-doc-verifier.md": "d3d8457bdd44bf10", @@ -62,6 +62,7 @@ "gsd-core/references/continuation-format.md": "580287399ad3ba68", "gsd-core/references/debugger-fix-acceptance.md": "b04b913d5ea0ac90", "gsd-core/references/debugger-philosophy.md": "0466f95a3d6bfcd3", + "gsd-core/references/debugger-sbfl.md": "70e699200f6197e0", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "883d0a1b9d9ff96e", "gsd-core/references/domain-probes.md": "762b965e84035b72", diff --git a/tests/fixtures/golden-install-parity/kilo.json b/tests/fixtures/golden-install-parity/kilo.json index a03c1af36..55a43199a 100644 --- a/tests/fixtures/golden-install-parity/kilo.json +++ b/tests/fixtures/golden-install-parity/kilo.json @@ -8,7 +8,7 @@ "agents/gsd-code-reviewer.md": "922c08885bc78662", "agents/gsd-codebase-mapper.md": "0ccbf6a685804979", "agents/gsd-debug-session-manager.md": "621c4c28af4f7b01", - "agents/gsd-debugger.md": "75c345b1ae4a86d2", + "agents/gsd-debugger.md": "c9fcb57e5f6e6ee7", "agents/gsd-doc-classifier.md": "6256bbc0b887f60f", "agents/gsd-doc-synthesizer.md": "212aaf89a34b51d7", "agents/gsd-doc-verifier.md": "8016f792d0766b77", @@ -133,6 +133,7 @@ "gsd-core/references/continuation-format.md": "580287399ad3ba68", "gsd-core/references/debugger-fix-acceptance.md": "b2732420bdbcadcd", "gsd-core/references/debugger-philosophy.md": "1cb61d4565081c88", + "gsd-core/references/debugger-sbfl.md": "391e732abf32786a", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "883d0a1b9d9ff96e", "gsd-core/references/domain-probes.md": "762b965e84035b72", diff --git a/tests/fixtures/golden-install-parity/kimi.json b/tests/fixtures/golden-install-parity/kimi.json index a5e446a8a..6ddc71261 100644 --- a/tests/fixtures/golden-install-parity/kimi.json +++ b/tests/fixtures/golden-install-parity/kimi.json @@ -45,7 +45,7 @@ "agents/subagents/gsd-codebase-mapper.yaml": "bce1c6d15f55c477", "agents/subagents/gsd-debug-session-manager.md": "69b3083e7e29c435", "agents/subagents/gsd-debug-session-manager.yaml": "aab147717b5082e7", - "agents/subagents/gsd-debugger.md": "3e9607a7ba92cec5", + "agents/subagents/gsd-debugger.md": "a2f38433646baffc", "agents/subagents/gsd-debugger.yaml": "6d02d7feb90cad43", "agents/subagents/gsd-doc-classifier.md": "632dc6c61bafa63e", "agents/subagents/gsd-doc-classifier.yaml": "a4e9cf7025b57503", @@ -126,6 +126,7 @@ "gsd-core/references/continuation-format.md": "ce73e57d053ab8a7", "gsd-core/references/debugger-fix-acceptance.md": "5616622f33e00436", "gsd-core/references/debugger-philosophy.md": "0466f95a3d6bfcd3", + "gsd-core/references/debugger-sbfl.md": "a7d0cd5940d6d2cd", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "67d019d23e17f934", "gsd-core/references/domain-probes.md": "62d23ed1992c48a9", diff --git a/tests/fixtures/golden-install-parity/opencode.json b/tests/fixtures/golden-install-parity/opencode.json index b24ca55ac..9a6fb216b 100644 --- a/tests/fixtures/golden-install-parity/opencode.json +++ b/tests/fixtures/golden-install-parity/opencode.json @@ -8,7 +8,7 @@ "agents/gsd-code-reviewer.md": "2249774416314c57", "agents/gsd-codebase-mapper.md": "948612acd505e87f", "agents/gsd-debug-session-manager.md": "cb64aa404849be60", - "agents/gsd-debugger.md": "60df2107066b0006", + "agents/gsd-debugger.md": "1653f7447e3fa8a8", "agents/gsd-doc-classifier.md": "fb776cfbb7e991b0", "agents/gsd-doc-synthesizer.md": "2389f388d291c2eb", "agents/gsd-doc-verifier.md": "65bbc2ae6b9ace29", @@ -133,6 +133,7 @@ "gsd-core/references/continuation-format.md": "580287399ad3ba68", "gsd-core/references/debugger-fix-acceptance.md": "b2732420bdbcadcd", "gsd-core/references/debugger-philosophy.md": "1cb61d4565081c88", + "gsd-core/references/debugger-sbfl.md": "391e732abf32786a", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "883d0a1b9d9ff96e", "gsd-core/references/domain-probes.md": "762b965e84035b72", diff --git a/tests/fixtures/golden-install-parity/pi.json b/tests/fixtures/golden-install-parity/pi.json index 4ac403d0d..867f181a3 100644 --- a/tests/fixtures/golden-install-parity/pi.json +++ b/tests/fixtures/golden-install-parity/pi.json @@ -29,6 +29,7 @@ "gsd-core/references/continuation-format.md": "ce73e57d053ab8a7", "gsd-core/references/debugger-fix-acceptance.md": "5616622f33e00436", "gsd-core/references/debugger-philosophy.md": "0466f95a3d6bfcd3", + "gsd-core/references/debugger-sbfl.md": "a7d0cd5940d6d2cd", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "67d019d23e17f934", "gsd-core/references/domain-probes.md": "62d23ed1992c48a9", diff --git a/tests/fixtures/golden-install-parity/qwen.json b/tests/fixtures/golden-install-parity/qwen.json index 12892cb7c..0988c71cf 100644 --- a/tests/fixtures/golden-install-parity/qwen.json +++ b/tests/fixtures/golden-install-parity/qwen.json @@ -8,7 +8,7 @@ "agents/gsd-code-reviewer.md": "27eeeee6cb600e9b", "agents/gsd-codebase-mapper.md": "032ff8ac55466a74", "agents/gsd-debug-session-manager.md": "e4db798b5a536a2c", - "agents/gsd-debugger.md": "8448c971f713412f", + "agents/gsd-debugger.md": "a93dd835d97836c7", "agents/gsd-doc-classifier.md": "bdf3d54082424e76", "agents/gsd-doc-synthesizer.md": "96c383b74a60fbbe", "agents/gsd-doc-verifier.md": "da9ab6f3ec27778a", @@ -62,6 +62,7 @@ "gsd-core/references/continuation-format.md": "580287399ad3ba68", "gsd-core/references/debugger-fix-acceptance.md": "ab6a1cce253944f4", "gsd-core/references/debugger-philosophy.md": "0466f95a3d6bfcd3", + "gsd-core/references/debugger-sbfl.md": "061b719c754a12d3", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "883d0a1b9d9ff96e", "gsd-core/references/domain-probes.md": "762b965e84035b72", diff --git a/tests/fixtures/golden-install-parity/trae.json b/tests/fixtures/golden-install-parity/trae.json index bbbecfd7e..16b8eb1b3 100644 --- a/tests/fixtures/golden-install-parity/trae.json +++ b/tests/fixtures/golden-install-parity/trae.json @@ -8,7 +8,7 @@ "agents/gsd-code-reviewer.md": "338c46ab59c4e45f", "agents/gsd-codebase-mapper.md": "8529d8a1ede8bbfb", "agents/gsd-debug-session-manager.md": "5e64d23321942c1c", - "agents/gsd-debugger.md": "d7fc667ae590dd6f", + "agents/gsd-debugger.md": "1839444836892ffe", "agents/gsd-doc-classifier.md": "a6ab02b8f45f9d0b", "agents/gsd-doc-synthesizer.md": "fd3c18addbc8265d", "agents/gsd-doc-verifier.md": "e51e50892963ccc7", @@ -62,6 +62,7 @@ "gsd-core/references/continuation-format.md": "580287399ad3ba68", "gsd-core/references/debugger-fix-acceptance.md": "134f83886c343733", "gsd-core/references/debugger-philosophy.md": "0466f95a3d6bfcd3", + "gsd-core/references/debugger-sbfl.md": "23d7a3bb15bc8b7c", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "883d0a1b9d9ff96e", "gsd-core/references/domain-probes.md": "762b965e84035b72", diff --git a/tests/fixtures/golden-install-parity/windsurf.json b/tests/fixtures/golden-install-parity/windsurf.json index 18feb7adb..de7340f16 100644 --- a/tests/fixtures/golden-install-parity/windsurf.json +++ b/tests/fixtures/golden-install-parity/windsurf.json @@ -8,7 +8,7 @@ "agents/gsd-code-reviewer.md": "efc0d2dee321c654", "agents/gsd-codebase-mapper.md": "cfa2bbfaf264e1fd", "agents/gsd-debug-session-manager.md": "7ea9975264a99b2c", - "agents/gsd-debugger.md": "778496a47881df83", + "agents/gsd-debugger.md": "520dbc9408761e2e", "agents/gsd-doc-classifier.md": "a6ab02b8f45f9d0b", "agents/gsd-doc-synthesizer.md": "fd3c18addbc8265d", "agents/gsd-doc-verifier.md": "ede2f297b73b5a86", @@ -62,6 +62,7 @@ "gsd-core/references/continuation-format.md": "580287399ad3ba68", "gsd-core/references/debugger-fix-acceptance.md": "ddd00cbd78dd3fdf", "gsd-core/references/debugger-philosophy.md": "0466f95a3d6bfcd3", + "gsd-core/references/debugger-sbfl.md": "071651eaf7414a4c", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "883d0a1b9d9ff96e", "gsd-core/references/domain-probes.md": "762b965e84035b72", diff --git a/tests/fixtures/golden-install-parity/zcode.json b/tests/fixtures/golden-install-parity/zcode.json index fb88e1a66..3ef40c8db 100644 --- a/tests/fixtures/golden-install-parity/zcode.json +++ b/tests/fixtures/golden-install-parity/zcode.json @@ -8,7 +8,7 @@ "agents/gsd-code-reviewer.md": "7d94fe8bfa6661aa", "agents/gsd-codebase-mapper.md": "7cc9d387f29c46e1", "agents/gsd-debug-session-manager.md": "716e31255a94e0ce", - "agents/gsd-debugger.md": "be00f854f4b0a6c9", + "agents/gsd-debugger.md": "376cb361acbafafd", "agents/gsd-doc-classifier.md": "146acf4d176134b5", "agents/gsd-doc-synthesizer.md": "b1f5e2eb28fa3659", "agents/gsd-doc-verifier.md": "7ed4d9611f678a95", @@ -133,6 +133,7 @@ "gsd-core/references/continuation-format.md": "ce73e57d053ab8a7", "gsd-core/references/debugger-fix-acceptance.md": "5616622f33e00436", "gsd-core/references/debugger-philosophy.md": "0466f95a3d6bfcd3", + "gsd-core/references/debugger-sbfl.md": "a7d0cd5940d6d2cd", "gsd-core/references/decimal-phase-calculation.md": "46b5ba045852c474", "gsd-core/references/doc-conflict-engine.md": "67d019d23e17f934", "gsd-core/references/domain-probes.md": "62d23ed1992c48a9", diff --git a/tests/fixtures/install-tree/antigravity.json b/tests/fixtures/install-tree/antigravity.json index 087ad7905..d10828ff7 100644 --- a/tests/fixtures/install-tree/antigravity.json +++ b/tests/fixtures/install-tree/antigravity.json @@ -62,6 +62,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/augment.json b/tests/fixtures/install-tree/augment.json index ffe7d8d10..8f3c7a9e7 100644 --- a/tests/fixtures/install-tree/augment.json +++ b/tests/fixtures/install-tree/augment.json @@ -133,6 +133,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/claude-local.json b/tests/fixtures/install-tree/claude-local.json index e876f542e..531a4eb0c 100644 --- a/tests/fixtures/install-tree/claude-local.json +++ b/tests/fixtures/install-tree/claude-local.json @@ -132,6 +132,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/claude.json b/tests/fixtures/install-tree/claude.json index 475259c19..3f7e4746e 100644 --- a/tests/fixtures/install-tree/claude.json +++ b/tests/fixtures/install-tree/claude.json @@ -61,6 +61,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/cline.json b/tests/fixtures/install-tree/cline.json index 8a2a76c8d..018cdcf26 100644 --- a/tests/fixtures/install-tree/cline.json +++ b/tests/fixtures/install-tree/cline.json @@ -65,6 +65,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/codebuddy.json b/tests/fixtures/install-tree/codebuddy.json index f5c919960..14e8f1a87 100644 --- a/tests/fixtures/install-tree/codebuddy.json +++ b/tests/fixtures/install-tree/codebuddy.json @@ -133,6 +133,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/codex.json b/tests/fixtures/install-tree/codex.json index fa1ab2eaa..99e756335 100644 --- a/tests/fixtures/install-tree/codex.json +++ b/tests/fixtures/install-tree/codex.json @@ -168,6 +168,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/copilot.json b/tests/fixtures/install-tree/copilot.json index 201b73f6c..6fcf66339 100644 --- a/tests/fixtures/install-tree/copilot.json +++ b/tests/fixtures/install-tree/copilot.json @@ -63,6 +63,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/cursor.json b/tests/fixtures/install-tree/cursor.json index d8484dc83..c11bd418e 100644 --- a/tests/fixtures/install-tree/cursor.json +++ b/tests/fixtures/install-tree/cursor.json @@ -133,6 +133,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/hermes.json b/tests/fixtures/install-tree/hermes.json index 997964f6c..5b3d192e6 100644 --- a/tests/fixtures/install-tree/hermes.json +++ b/tests/fixtures/install-tree/hermes.json @@ -62,6 +62,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/kilo.json b/tests/fixtures/install-tree/kilo.json index 70b883846..01d454ef8 100644 --- a/tests/fixtures/install-tree/kilo.json +++ b/tests/fixtures/install-tree/kilo.json @@ -133,6 +133,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/kimi.json b/tests/fixtures/install-tree/kimi.json index 6e19b8b8b..410bd83eb 100644 --- a/tests/fixtures/install-tree/kimi.json +++ b/tests/fixtures/install-tree/kimi.json @@ -126,6 +126,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/opencode.json b/tests/fixtures/install-tree/opencode.json index 7b2a4fc03..bbd7223ea 100644 --- a/tests/fixtures/install-tree/opencode.json +++ b/tests/fixtures/install-tree/opencode.json @@ -133,6 +133,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/pi.json b/tests/fixtures/install-tree/pi.json index 06e7dcb07..a41a00c29 100644 --- a/tests/fixtures/install-tree/pi.json +++ b/tests/fixtures/install-tree/pi.json @@ -29,6 +29,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/qwen.json b/tests/fixtures/install-tree/qwen.json index 5535bfb7b..eb66d94f8 100644 --- a/tests/fixtures/install-tree/qwen.json +++ b/tests/fixtures/install-tree/qwen.json @@ -62,6 +62,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/trae.json b/tests/fixtures/install-tree/trae.json index 57cb21e7d..d4762326e 100644 --- a/tests/fixtures/install-tree/trae.json +++ b/tests/fixtures/install-tree/trae.json @@ -62,6 +62,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/windsurf.json b/tests/fixtures/install-tree/windsurf.json index b6dd1fb8d..7c4c36870 100644 --- a/tests/fixtures/install-tree/windsurf.json +++ b/tests/fixtures/install-tree/windsurf.json @@ -62,6 +62,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md", diff --git a/tests/fixtures/install-tree/zcode.json b/tests/fixtures/install-tree/zcode.json index ef56440b9..ce7ab9262 100644 --- a/tests/fixtures/install-tree/zcode.json +++ b/tests/fixtures/install-tree/zcode.json @@ -133,6 +133,7 @@ "gsd-core/references/continuation-format.md", "gsd-core/references/debugger-fix-acceptance.md", "gsd-core/references/debugger-philosophy.md", + "gsd-core/references/debugger-sbfl.md", "gsd-core/references/decimal-phase-calculation.md", "gsd-core/references/doc-conflict-engine.md", "gsd-core/references/domain-probes.md",