* test(#1963): add failing-first prevention/postmortem contract tests Epic #1957 Phase 3B. Source-text-is-the-product contract tests: blameless 5-Whys that BRANCHES per Phase 2A RCA (not a single-cause chain; treats agent error as 'why was that possible?'), the 'why wasn't this caught?' question, the recurrence-guard taxonomy (regression test / assertion / lint rule / KB pattern), the KB-entry why_not_caught + recurrence_guard fields with backward compat, the session-manager prevention summary line, and the Zawinski scope-boundary (a block, not a subsystem). Failing-first: reference, archive_session edit, KB schema extension, and session-manager summary do not yet exist. * feat(#1963): emit blameless-postmortem Prevention block at resolution Epic #1957 Phase 3B. At archive_session the debugger now produces a Prevention block with three blame-free components: a branching 5-Whys causal chain (branches per Phase 2A RCA, not a single chain; 'agent error' prompts 'why was that possible?', never blame), a 'why wasn't this caught?' answer naming the missed gate (test/typecheck/lint/review/verify), and a concrete recurrence guard (regression test / assertion / lint rule / KB pattern). The knowledge-base entry gains two structured fields (why_not_caught + recurrence_guard) so future Phase-0 recall surfaces the prior prevention, not just the prior fix. Additive: old entries without the fields still load. The session-manager compact summary surfaces a one-line prevention summary. Full rules extracted to gsd-core/references/debugger-prevention.md (slim archive_session step + 2 KB fields kept in the agent). INVENTORY + manifest + agent-size baseline + install-parity goldens + AGENTS.md updated. * fix(#1963): address orthogonal review (CRITICAL append-template drift + Phase-0 consumption + parity test) - CRITICAL: the archive_session KB append template omitted Why not caught + Recurrence guard (only the Entry Format had them) — the feature's core deliverable silently did not happen. Added both fields to the append template the agent actually follows (nearest-instruction wins). - HIGH: Phase 0 (KB read) only surfaced root_cause + fix; the new fields were dead data. Extended the Phase 0 Evidence line to consume why_not_caught + recurrence_guard when present (absent on old entries — backward compat holds). - MEDIUM: added a cross-section parity test (every Entry-Format field must also appear in the append template — the guard that would have caught the Critical) + a Phase-0-consumption assertion. - MEDIUM: the 'branches per Phase 2A' claim is now wired — reuses reasoning_checkpoint.candidate_causes across the four categories. - MEDIUM: recurrence-guard taxonomy gains type refinement + config-default change; LOW: added 'build' gate to both surfaces for parity. - NIT: compact-summary fallback shape ('no gate existed'); verify the guard artifact exists before recording it. * test(#1963): anchor Phase-0 consumption test on the specific heading The regex /Phase 0[\s\S]{0,1200}/ matched the first 'Phase 0' in the file (in knowledge_base_protocol prose), not the Phase 0 block in investigation_loop. Anchor on '**Phase 0: Check knowledge base**' and widen to 1500 chars. * chore(#1963): backfill changeset pr number (PR #2410)
This commit is contained in:
5
.changeset/1963-prevention-postmortem.md
Normal file
5
.changeset/1963-prevention-postmortem.md
Normal file
@@ -0,0 +1,5 @@
|
||||
---
|
||||
type: Added
|
||||
pr: 2410
|
||||
---
|
||||
**`gsd-debugger` now emits a blameless-postmortem Prevention block at resolution, closing the loop on bug-class prevention** — at `archive_session` the debugger produces three blame-free components: a **branching 5-Whys** causal chain (branching per the Phase 2A RCA discipline, not a single linear chain; "agent error" prompts "why was that error possible?", never blame), a **"why wasn't this caught?"** answer naming the existing gate (test/typecheck/lint/review/verify) that missed it, and a **concrete recurrence guard** (a regression test / assertion / lint rule / knowledge-base pattern). The knowledge-base entry gains two structured fields — `why_not_caught` and `recurrence_guard` — so a future Phase-0 recall surfaces not just the prior fix but the prior *prevention* (additive; old entries without the fields still load). The session-manager's compact summary surfaces a one-line prevention summary. Full rules live in `gsd-core/references/debugger-prevention.md`; kept minimal — a block, not an incident-management subsystem. (#1963)
|
||||
@@ -321,6 +321,7 @@ Return compact summary (terminal — investigation resolved):
|
||||
**Cycles:** {N} (investigation) + {M} (fix)
|
||||
**TDD:** {yes/no}
|
||||
**Specialist review:** {specialist_hint used, or "none"}
|
||||
**Prevention:** {one-line from the blameless postmortem — "why not caught: <gate, or 'none (no gate existed for this class)'>; guard: <artifact>"}
|
||||
```
|
||||
|
||||
If the session was abandoned by user choice, return (terminal — user stopped):
|
||||
|
||||
@@ -807,6 +807,8 @@ Each resolved session appends one entry:
|
||||
- **Root cause(s):** {from Resolution.root_cause — one cause, or a '; '-joined list when the AND-gate fired}
|
||||
- **Fix:** {from Resolution.fix}
|
||||
- **Files changed:** {from Resolution.files_changed}
|
||||
- **Why not caught:** {which existing gate (test/typecheck/lint/review/verify/build) should have caught it — or "no gate existed for this class"}
|
||||
- **Recurrence guard:** {the concrete artifact preventing this class from returning — regression test (path:name) / assertion / lint rule / type refinement / config-default change / KB pattern}
|
||||
---
|
||||
```
|
||||
|
||||
@@ -987,7 +989,7 @@ At investigation decision points, apply structured reasoning:
|
||||
- Scan knowledge base entries for 2+ keyword overlap (case-insensitive)
|
||||
- If match found:
|
||||
- Note in Current Focus: `known_pattern_candidate: "{matched slug} — {description}"`
|
||||
- Add to Evidence: `found: Knowledge base match on [{keywords}] → Root cause was: {root_cause}. Fix was: {fix}.`
|
||||
- Add to Evidence: `found: Knowledge base match on [{keywords}] → Root cause was: {root_cause}. Fix was: {fix}. Why not caught: {why_not_caught}. Recurrence guard: {recurrence_guard}.` (the last two are absent on old entries — that's fine; consume them when present)
|
||||
- Test this hypothesis FIRST in Phase 2 — but treat it as one hypothesis, not a certainty
|
||||
- If no match: proceed normally
|
||||
|
||||
@@ -1212,9 +1214,13 @@ Then commit planning docs via CLI (respects `commit_docs` config automatically):
|
||||
gsd_run query commit "docs: resolve debug {slug}" --files .planning/debug/resolved/{slug}.md
|
||||
```
|
||||
|
||||
**Append to knowledge base:**
|
||||
**Append to knowledge base (with the Prevention block):**
|
||||
|
||||
Read `.planning/debug/resolved/{slug}.md` to extract final `Resolution` values. Then append to `.planning/debug/knowledge-base.md` (create file with header if it doesn't exist):
|
||||
Read `.planning/debug/resolved/{slug}.md` to extract final `Resolution` values. Then produce the **Prevention block** — a blameless postmortem (branching 5-Whys per RCA, "why wasn't this caught?", and a concrete recurrence guard):
|
||||
|
||||
@~/.claude/gsd-core/references/debugger-prevention.md
|
||||
|
||||
Then append to `.planning/debug/knowledge-base.md` (create file with header if it doesn't exist):
|
||||
|
||||
If creating for the first time, write this header first:
|
||||
```markdown
|
||||
@@ -1234,6 +1240,8 @@ Then append the entry:
|
||||
- **Root cause(s):** {Resolution.root_cause — joined as '; ' when multiple contributing causes were confirmed}
|
||||
- **Fix:** {Resolution.fix}
|
||||
- **Files changed:** {Resolution.files_changed joined as comma list}
|
||||
- **Why not caught:** {which existing gate (test/typecheck/lint/review/verify/build) should have caught it — or "no gate existed for this class"}
|
||||
- **Recurrence guard:** {concrete artifact preventing this class from returning — regression test (path:name) / assertion / lint rule / KB pattern / type refinement / config-default change}
|
||||
---
|
||||
|
||||
```
|
||||
|
||||
@@ -405,6 +405,7 @@ runs its default whole-repo scan.
|
||||
- Branches root-cause analysis across ≥2 Ishikawa categories and applies an AND-gate check before committing root_cause (guards against 5-Whys single-cause bias); root_cause may hold a set when the AND-gate fires
|
||||
- Classifies each failure as Bohrbug / Heisenbug-Mandelbug / Concurrency at Phase 1.75 and routes the investigation technique accordingly (routes Bohrbugs to SBFL+bisect, Heisenbugs to record-replay/stability with SBFL skipped, Concurrency to the atomicity/order/deadlock checklist)
|
||||
- Hardens regression tests via PBT shrinking (minimized counterexample as the seed), explicit oracle classification (specified/derived/metamorphic/implicit), and boundary neighbors around the fixed equivalence class
|
||||
- Emits a blameless-postmortem Prevention block at resolution (branching 5-Whys, why-wasn't-this-caught, a concrete recurrence guard) and records `why_not_caught` + `recurrence_guard` in the knowledge base so the same bug class is prevented, not just fixed
|
||||
- Appends to persistent knowledge base on resolution
|
||||
- Consults knowledge base on new sessions
|
||||
|
||||
|
||||
@@ -217,6 +217,7 @@
|
||||
"debugger-bug-taxonomy.md",
|
||||
"debugger-fix-acceptance.md",
|
||||
"debugger-philosophy.md",
|
||||
"debugger-prevention.md",
|
||||
"debugger-rca-branching.md",
|
||||
"debugger-repro-hardening.md",
|
||||
"debugger-sbfl.md",
|
||||
|
||||
@@ -299,6 +299,7 @@ Full roster at `gsd-core/references/*.md`. References are shared knowledge docum
|
||||
| `debugger-rca-branching.md` | RCA branching (fishbone + AND-gate) anti-single-cause discipline loaded by `gsd-debugger`. |
|
||||
| `debugger-bug-taxonomy.md` | Bug-taxonomy classification (Bohrbug/Heisenbug/Concurrency) + technique routing table loaded by `gsd-debugger`. |
|
||||
| `debugger-repro-hardening.md` | Regression-test hardening (PBT shrinking + oracle classification + boundary neighbors) loaded by `gsd-debugger`. |
|
||||
| `debugger-prevention.md` | Prevention / blameless-postmortem output (5-Whys + why-not-caught + recurrence guard) 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. |
|
||||
|
||||
98
gsd-core/references/debugger-prevention.md
Normal file
98
gsd-core/references/debugger-prevention.md
Normal file
@@ -0,0 +1,98 @@
|
||||
# Prevention / Blameless-Postmortem Output
|
||||
|
||||
Loaded by `gsd-debugger` via `@-include` from `archive_session`. Emits the
|
||||
forward-looking half of a resolved debug session — not just *what* was wrong and
|
||||
the fix, but **why it happened, why it wasn't caught, and the guard that
|
||||
prevents its whole class from returning**.
|
||||
|
||||
## Why this exists
|
||||
|
||||
When a session resolves, the debugger records `root_cause` + `fix` and appends a
|
||||
keyword entry to the knowledge base. What it did **not** produce is the
|
||||
forward-looking half that industry incident practice (Google SRE Book, AWS COE)
|
||||
treats as the whole point: a blameless postmortem / Correction of Error. The
|
||||
bug gets fixed; the *class* of bug and the *reason it slipped through* are never
|
||||
captured — so the same class recurs and no guardrail is added. This block closes
|
||||
that gap. It reuses the existing debug file and knowledge base; it does not add a
|
||||
new command or workflow.
|
||||
|
||||
## The Prevention block (three blame-free components)
|
||||
|
||||
At `archive_session`, after the fix is confirmed, emit a Prevention block and
|
||||
fold its two structured fields (`why_not_caught`, `recurrence_guard`) into the
|
||||
knowledge-base entry.
|
||||
|
||||
### 1. Blameless 5-Whys that BRANCHES (per Phase 2A RCA)
|
||||
|
||||
A causal chain — but **branch across ≥2 Ishikawa categories**, do not collapse to
|
||||
a single linear "why" (the same single-cause bias Phase 2A guards the diagnosis
|
||||
against applies to the postmortem). For each branch ask "why" until you reach an
|
||||
actionable condition.
|
||||
|
||||
**Reuse the diagnosis branches:** the `reasoning_checkpoint.candidate_causes`
|
||||
recorded at Phase 2A already enumerated the candidate causes across the four
|
||||
categories (**code / config / environment / data** — see
|
||||
`debugger-rca-branching.md`); start the postmortem from those branches and the
|
||||
AND-gate answer rather than re-deriving a chain from scratch.
|
||||
|
||||
**Blame-free:** treat "agent error" / "human error" as a prompt for *"why was
|
||||
that error possible?"* — not a terminal cause. A postmortem that stops at "the
|
||||
engineer made a mistake" prevents nothing; one that asks "why was the mistake
|
||||
possible / not caught" produces a guard. Never assign blame to a person.
|
||||
|
||||
### 2. "Why wasn't this caught?"
|
||||
|
||||
Name the **existing gate** that should have caught this bug class and didn't —
|
||||
a test, a type check, a lint rule, code review, the verify step, the build. If
|
||||
the honest answer is "no gate existed for this class," that itself is the finding
|
||||
(and the recurrence guard below is "add the gate").
|
||||
|
||||
### 3. The recurrence guard
|
||||
|
||||
The **concrete artifact** that prevents this class from returning. Choose the
|
||||
strongest applicable:
|
||||
|
||||
- a **regression test** (already produced by Test-First Debugging — reference it),
|
||||
- an **assertion / precondition** (fail loud at runtime if the bad condition recurs),
|
||||
- a **type refinement** (make the bad state unrepresentable — the strongest guard
|
||||
in a typed codebase; e.g., a branded type / exhaustive union that rules out the
|
||||
invalid value at compile time),
|
||||
- a **config-default change** (eliminate the misconfiguration that enabled the
|
||||
bug — flip the default so the unsafe path is opt-in, not the path of least resistance),
|
||||
- a **lint rule / broken-window ledger entry** (fail the build / surface in review),
|
||||
- a **knowledge-base pattern** — this very entry, so a future Phase-0 recall
|
||||
surfaces the prior guard when a similar symptom appears.
|
||||
|
||||
State the guard concretely (which file, which rule, which test name) — not "add
|
||||
a test" but "the regression test at `tests/foo.test.cjs:42` now covers this
|
||||
class." **Verify the artifact exists before recording it** (the test passes, the
|
||||
type compiles, the lint rule is registered) — a stale or unverified path is worse
|
||||
than none, since a future Phase-0 match would surface it as if it were real.
|
||||
|
||||
## Knowledge-base entry: the two structured fields
|
||||
|
||||
The KB entry gains two fields (additive — see backward-compat below):
|
||||
|
||||
- **Why not caught:** {the existing gate that should have caught it, or "no gate existed for this class"}
|
||||
- **Recurrence guard:** {the concrete artifact — regression test / assertion / lint rule / KB pattern — with its location}
|
||||
|
||||
These ride alongside the existing `Error patterns` / `Root cause(s)` / `Fix` /
|
||||
`Files changed` fields so a future Phase-0 match surfaces not just the prior fix
|
||||
but the prior *prevention*.
|
||||
|
||||
## Backward compatibility (additive — no format break)
|
||||
|
||||
Old knowledge-base entries without `why_not_caught` / `recurrence_guard`
|
||||
**still load** unchanged. The matcher reads the `Error patterns` field (which
|
||||
every entry has); the two new fields are consumed when present and ignored when
|
||||
absent. A knowledge base with a mix of old and new entries works correctly —
|
||||
there is no migration, no schema version bump.
|
||||
|
||||
## Scope boundary (Zawinski's Law)
|
||||
|
||||
A **block**, not an incident-management subsystem. It reuses the existing debug
|
||||
file's `archive_session` step and the existing knowledge base; it adds two
|
||||
fields and three prompt-level questions. It is not a new command, not a
|
||||
reporting framework, not a metrics pipeline. Where a bug is trivial and the
|
||||
postmortem would add nothing, a one-line recurrence guard suffices — the
|
||||
discipline scales down.
|
||||
@@ -5,8 +5,8 @@
|
||||
"gsd-code-fixer.md": 36640,
|
||||
"gsd-code-reviewer.md": 16870,
|
||||
"gsd-codebase-mapper.md": 21485,
|
||||
"gsd-debug-session-manager.md": 17012,
|
||||
"gsd-debugger.md": 55758,
|
||||
"gsd-debug-session-manager.md": 17161,
|
||||
"gsd-debugger.md": 56835,
|
||||
"gsd-doc-classifier.md": 11717,
|
||||
"gsd-doc-synthesizer.md": 13154,
|
||||
"gsd-doc-verifier.md": 12403,
|
||||
|
||||
119
tests/debugger-prevention.test.cjs
Normal file
119
tests/debugger-prevention.test.cjs
Normal file
@@ -0,0 +1,119 @@
|
||||
// allow-test-rule: source-text-is-the-product (see #1963)
|
||||
// Agent .md + reference .md files — their text IS what the runtime loads.
|
||||
// Testing text content tests the deployed prevention/postmortem contract.
|
||||
// Per CONTRIBUTING.md exception matrix. Covers epic #1957 Phase 3B (#1963).
|
||||
'use strict';
|
||||
|
||||
const { describe, test } = require('node:test');
|
||||
const assert = require('node:assert/strict');
|
||||
const fs = require('node:fs');
|
||||
const path = require('node:path');
|
||||
|
||||
const ROOT = process.cwd();
|
||||
const AGENT = path.join(ROOT, 'agents/gsd-debugger.md');
|
||||
const SESSION_MGR = path.join(ROOT, 'agents/gsd-debug-session-manager.md');
|
||||
const REFERENCE = path.join(ROOT, 'gsd-core/references/debugger-prevention.md');
|
||||
|
||||
describe('prevention / blameless-postmortem output (#1963, epic #1957 Phase 3B)', () => {
|
||||
describe('reference extract exists and is wired into archive_session', () => {
|
||||
test('gsd-core/references/debugger-prevention.md exists', () => {
|
||||
assert.ok(fs.existsSync(REFERENCE), 'debugger-prevention.md reference must exist');
|
||||
});
|
||||
|
||||
test('gsd-debugger.md @-includes the prevention reference', () => {
|
||||
const content = fs.readFileSync(AGENT, 'utf8');
|
||||
assert.ok(
|
||||
content.includes('@~/.claude/gsd-core/references/debugger-prevention.md'),
|
||||
'gsd-debugger.md must @-include the prevention reference from archive_session'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('the Prevention block has three blame-free components (criterion 1)', () => {
|
||||
test('reference documents a blameless 5-Whys causal chain', () => {
|
||||
const content = fs.readFileSync(REFERENCE, 'utf8');
|
||||
assert.ok(/5-?\s*whys|five whys|causal chain/i.test(content), 'must document a 5-Whys causal chain');
|
||||
assert.ok(/blame|blameless|blame-free/i.test(content), 'must state the chain is blame-free/blameless');
|
||||
});
|
||||
|
||||
test('the 5-Whys branches per RCA (Phase 2A), not a single-cause chain', () => {
|
||||
const content = fs.readFileSync(REFERENCE, 'utf8');
|
||||
assert.ok(/branch/i.test(content), 'the postmortem must branch (not chain) per the Phase 2A RCA discipline');
|
||||
assert.ok(/single[\s-]?cause|agent error|why was that (?:error|possible)/i.test(content),
|
||||
'must treat "agent error" as a prompt for "why was that error possible?" (blame-free), not a terminal cause');
|
||||
});
|
||||
|
||||
test('reference documents the "why wasn\'t this caught?" question', () => {
|
||||
const content = fs.readFileSync(REFERENCE, 'utf8');
|
||||
assert.ok(/why (?:wasn'?t|was not|didn'?t).*(?:caught|prevent)/i.test(content) || /why[\s-]?not[\s-]?caught/i.test(content),
|
||||
'must document the "why wasn\'t this caught?" question (which existing gate missed it)');
|
||||
});
|
||||
|
||||
test('reference documents the recurrence-guard taxonomy', () => {
|
||||
const content = fs.readFileSync(REFERENCE, 'utf8');
|
||||
assert.ok(/recurrence guard|recurrence-guard/i.test(content), 'must name the recurrence guard');
|
||||
// The concrete artifact options from the issue
|
||||
assert.ok(/regression test/i.test(content), 'guard option: regression test');
|
||||
assert.ok(/lint rule|assertion|precondition/i.test(content), 'guard option: lint rule / assertion / precondition');
|
||||
});
|
||||
});
|
||||
|
||||
describe('knowledge-base entry stores the prevention fields (criterion 2)', () => {
|
||||
test('KB entry format in gsd-debugger.md includes why_not_caught + recurrence_guard', () => {
|
||||
const content = fs.readFileSync(AGENT, 'utf8');
|
||||
assert.ok(/why.not.caught/i.test(content), 'KB entry format must include a why_not_caught field');
|
||||
assert.ok(/recurrence.guard/i.test(content), 'KB entry format must include a recurrence_guard field');
|
||||
});
|
||||
|
||||
test('reference documents backward compatibility (old entries without the fields still load)', () => {
|
||||
const content = fs.readFileSync(REFERENCE, 'utf8');
|
||||
assert.ok(/backward|back.compat|old entries|without.*fields.*load|absent.*field/i.test(content),
|
||||
'must document that old KB entries without the new fields still load (additive, no format break)');
|
||||
});
|
||||
});
|
||||
|
||||
describe('session-manager compact return surfaces the prevention summary (criterion 3)', () => {
|
||||
test('gsd-debug-session-manager.md compact summary includes a prevention line', () => {
|
||||
const content = fs.readFileSync(SESSION_MGR, 'utf8');
|
||||
assert.ok(/prevention|recurrence guard|why not caught/i.test(content),
|
||||
'session-manager compact summary must surface the prevention summary (recurrence guard / why-not-caught)');
|
||||
});
|
||||
});
|
||||
|
||||
describe('scope boundary (Zawinski) — a block, not an incident-management subsystem', () => {
|
||||
test('reference states the prevention block reuses existing structures and adds no subsystem', () => {
|
||||
const content = fs.readFileSync(REFERENCE, 'utf8');
|
||||
assert.ok(/reuse|existing|no(?:t| new).*(?:subsystem|framework|command)|block, not/i.test(content),
|
||||
'must state the prevention block reuses the existing debug file + knowledge base (no new subsystem)');
|
||||
});
|
||||
});
|
||||
|
||||
describe('cross-section parity (guards the Critical: Entry-Format fields must also appear in the archive append template)', () => {
|
||||
test('every Entry-Format KB field appears in the archive_session append template', () => {
|
||||
// DEFECT.GENERATIVE-FIX guard: the <knowledge_base_protocol> Entry Format
|
||||
// and the archive_session append template are two parallel surfaces that
|
||||
// must agree. A field declared in one but not the other is dead data.
|
||||
const content = fs.readFileSync(AGENT, 'utf8');
|
||||
const requiredFields = ['Date', 'Error patterns', 'Root cause', 'Fix', 'Files changed', 'Why not caught', 'Recurrence guard'];
|
||||
for (const field of requiredFields) {
|
||||
const re = new RegExp(`\\*\\*${field}`, 'i');
|
||||
const matches = content.match(new RegExp(`\\*\\*${field}`, 'gi'));
|
||||
assert.ok(
|
||||
matches && matches.length >= 2,
|
||||
`KB field "${field}" must appear in BOTH the Entry Format and the archive append template (found ${matches ? matches.length : 0} occurrence(s)) — parallel-surface drift`
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
test('Phase 0 consumes the prevention fields (why_not_caught + recurrence_guard) when present', () => {
|
||||
const content = fs.readFileSync(AGENT, 'utf8');
|
||||
// Anchor on the specific Phase 0 heading in investigation_loop (the
|
||||
// string "Phase 0" also appears in knowledge_base_protocol prose, which
|
||||
// would match the wrong region).
|
||||
const phase0Block = content.match(/\*\*Phase 0: Check knowledge base\*\*[\s\S]{0,1500}/);
|
||||
assert.ok(phase0Block, 'a Phase 0: Check knowledge base block must exist in investigation_loop');
|
||||
assert.ok(/why.?not.?caught/i.test(phase0Block[0]) && /recurrence.?guard/i.test(phase0Block[0]),
|
||||
'the Phase 0 Evidence line must include why_not_caught + recurrence_guard (consume when present, absent on old entries)');
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -7,8 +7,8 @@
|
||||
"agents/gsd-code-fixer.md": "6937a1f20beaa1c6",
|
||||
"agents/gsd-code-reviewer.md": "a700d295bbf110a9",
|
||||
"agents/gsd-codebase-mapper.md": "afdae82284cb21b4",
|
||||
"agents/gsd-debug-session-manager.md": "523f28a1ed8a4536",
|
||||
"agents/gsd-debugger.md": "a4ea87f55b1c9718",
|
||||
"agents/gsd-debug-session-manager.md": "8a7ae327a00d47cd",
|
||||
"agents/gsd-debugger.md": "b4d6a994d6c433c4",
|
||||
"agents/gsd-doc-classifier.md": "fca19595590391df",
|
||||
"agents/gsd-doc-synthesizer.md": "0e5184bbcf0dca02",
|
||||
"agents/gsd-doc-verifier.md": "888c6ac870cb91a6",
|
||||
@@ -63,6 +63,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "4c13da220b6a4261",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "87d367e4e864910e",
|
||||
"gsd-core/references/debugger-philosophy.md": "459a8ac647c4ce9c",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "745e517012e03d23",
|
||||
"gsd-core/references/debugger-sbfl.md": "de9cd1bd0e1485c6",
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
"agents/gsd-code-fixer.md": "68b2d2faccfdd8a3",
|
||||
"agents/gsd-code-reviewer.md": "bc8a6f2e1f787ff5",
|
||||
"agents/gsd-codebase-mapper.md": "85ea778ad9cf7e66",
|
||||
"agents/gsd-debug-session-manager.md": "d2b983f774816e9a",
|
||||
"agents/gsd-debugger.md": "714649ac8c7fabce",
|
||||
"agents/gsd-debug-session-manager.md": "1d966d0bbf22660c",
|
||||
"agents/gsd-debugger.md": "7141e0c61747befe",
|
||||
"agents/gsd-doc-classifier.md": "262a94b947a4e2aa",
|
||||
"agents/gsd-doc-synthesizer.md": "01f90ea9b0d05d7d",
|
||||
"agents/gsd-doc-verifier.md": "b3433e0db51e1c60",
|
||||
@@ -134,6 +134,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "78fb8c1711acc971",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "5616622f33e00436",
|
||||
"gsd-core/references/debugger-philosophy.md": "16f0cb55eb457f33",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "fdf55a6cee9b1792",
|
||||
"gsd-core/references/debugger-sbfl.md": "a7d0cd5940d6d2cd",
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
"agents/gsd-code-fixer.md": "c6148e5511d02459",
|
||||
"agents/gsd-code-reviewer.md": "e2c45baa8c0b5f6d",
|
||||
"agents/gsd-codebase-mapper.md": "f96958e5f85b93fb",
|
||||
"agents/gsd-debug-session-manager.md": "11afaabc2a749f32",
|
||||
"agents/gsd-debugger.md": "76e3f9b0ccdeb4db",
|
||||
"agents/gsd-debug-session-manager.md": "d5fbb343fac38729",
|
||||
"agents/gsd-debugger.md": "13cfdb9e8caa78d9",
|
||||
"agents/gsd-doc-classifier.md": "a76778bdde1c7f72",
|
||||
"agents/gsd-doc-synthesizer.md": "8b0b6fc187c9d353",
|
||||
"agents/gsd-doc-verifier.md": "4232dcf9076e3566",
|
||||
@@ -133,6 +133,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "78fb8c1711acc971",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "5616622f33e00436",
|
||||
"gsd-core/references/debugger-philosophy.md": "16f0cb55eb457f33",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "fdf55a6cee9b1792",
|
||||
"gsd-core/references/debugger-sbfl.md": "a7d0cd5940d6d2cd",
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
"agents/gsd-code-fixer.md": "3d5f67cfd24ac452",
|
||||
"agents/gsd-code-reviewer.md": "d626a828e8de3648",
|
||||
"agents/gsd-codebase-mapper.md": "8c2e9f2ce3aedf78",
|
||||
"agents/gsd-debug-session-manager.md": "3a6614424653612b",
|
||||
"agents/gsd-debugger.md": "f6323235d733c990",
|
||||
"agents/gsd-debug-session-manager.md": "1e23cdf4376bed3c",
|
||||
"agents/gsd-debugger.md": "54cb91f574d020ed",
|
||||
"agents/gsd-doc-classifier.md": "a636ae9594b25770",
|
||||
"agents/gsd-doc-synthesizer.md": "dfb95eedfb3789bf",
|
||||
"agents/gsd-doc-verifier.md": "4232dcf9076e3566",
|
||||
@@ -62,6 +62,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "78fb8c1711acc971",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "5616622f33e00436",
|
||||
"gsd-core/references/debugger-philosophy.md": "16f0cb55eb457f33",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "fdf55a6cee9b1792",
|
||||
"gsd-core/references/debugger-sbfl.md": "a7d0cd5940d6d2cd",
|
||||
|
||||
@@ -10,8 +10,8 @@
|
||||
"agents/gsd-code-fixer.md": "6aa74a2fb2ad244a",
|
||||
"agents/gsd-code-reviewer.md": "e5ec12d4d409e800",
|
||||
"agents/gsd-codebase-mapper.md": "e5b7941bdda53c91",
|
||||
"agents/gsd-debug-session-manager.md": "55788b44fdfc4375",
|
||||
"agents/gsd-debugger.md": "51f39ada470339ff",
|
||||
"agents/gsd-debug-session-manager.md": "444fa983fdc85325",
|
||||
"agents/gsd-debugger.md": "815a2b65d85c29dd",
|
||||
"agents/gsd-doc-classifier.md": "5011d7358d2b2848",
|
||||
"agents/gsd-doc-synthesizer.md": "e59cdd669876582d",
|
||||
"agents/gsd-doc-verifier.md": "b60290c9d9f6d8d2",
|
||||
@@ -66,6 +66,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "63521aea0206d4ac",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "1057d70f7f2d654a",
|
||||
"gsd-core/references/debugger-philosophy.md": "16f0cb55eb457f33",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "98872822b7f1ef08",
|
||||
"gsd-core/references/debugger-sbfl.md": "6e4975ee50973c23",
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
"agents/gsd-code-fixer.md": "1cf3a9fdade9a470",
|
||||
"agents/gsd-code-reviewer.md": "5342fcc0da974696",
|
||||
"agents/gsd-codebase-mapper.md": "b995bf01af0193d2",
|
||||
"agents/gsd-debug-session-manager.md": "9f56455afb580275",
|
||||
"agents/gsd-debugger.md": "0dd86ecf4e9e3ee9",
|
||||
"agents/gsd-debug-session-manager.md": "8a495718576f24e6",
|
||||
"agents/gsd-debugger.md": "dbf1b89a5ef6a7ea",
|
||||
"agents/gsd-doc-classifier.md": "c2bf59af9467810b",
|
||||
"agents/gsd-doc-synthesizer.md": "b2a179bf3c9bd636",
|
||||
"agents/gsd-doc-verifier.md": "e74d930905a782ea",
|
||||
@@ -134,6 +134,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "78fb8c1711acc971",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "5616622f33e00436",
|
||||
"gsd-core/references/debugger-philosophy.md": "16f0cb55eb457f33",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "fdf55a6cee9b1792",
|
||||
"gsd-core/references/debugger-sbfl.md": "a7d0cd5940d6d2cd",
|
||||
|
||||
@@ -84,10 +84,10 @@
|
||||
"agents/gsd-code-reviewer.toml": "66420d6e6ffd14eb",
|
||||
"agents/gsd-codebase-mapper.md": "cf8f8550b44aec35",
|
||||
"agents/gsd-codebase-mapper.toml": "a4609f3ac66c2081",
|
||||
"agents/gsd-debug-session-manager.md": "c2b615fce5adc13e",
|
||||
"agents/gsd-debug-session-manager.toml": "4420cb596ad6b183",
|
||||
"agents/gsd-debugger.md": "8b40ec1a784b1c84",
|
||||
"agents/gsd-debugger.toml": "9ade5b336aae9a91",
|
||||
"agents/gsd-debug-session-manager.md": "8a336fd497d2e6b2",
|
||||
"agents/gsd-debug-session-manager.toml": "277a54c7661ff018",
|
||||
"agents/gsd-debugger.md": "ad9aa9530c891872",
|
||||
"agents/gsd-debugger.toml": "b05785c9a4dad6f6",
|
||||
"agents/gsd-doc-classifier.md": "2745bc04d7b93666",
|
||||
"agents/gsd-doc-classifier.toml": "3fe5ec83f62b586e",
|
||||
"agents/gsd-doc-synthesizer.md": "4f545f2e916458ad",
|
||||
@@ -169,6 +169,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "49f94fe75cabba52",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "b2732420bdbcadcd",
|
||||
"gsd-core/references/debugger-philosophy.md": "459a8ac647c4ce9c",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "097c2da83d697566",
|
||||
"gsd-core/references/debugger-sbfl.md": "391e732abf32786a",
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
"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": "77ee029f0f81c09d",
|
||||
"agents/gsd-debugger.agent.md": "943af322184a1479",
|
||||
"agents/gsd-debug-session-manager.agent.md": "e669e5d76bfd7810",
|
||||
"agents/gsd-debugger.agent.md": "1f5cd5c6d3d7d1aa",
|
||||
"agents/gsd-doc-classifier.agent.md": "aea81c0ba00e06cf",
|
||||
"agents/gsd-doc-synthesizer.agent.md": "6ae32e4db005696d",
|
||||
"agents/gsd-doc-verifier.agent.md": "0230208ae7ab1a08",
|
||||
@@ -64,6 +64,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "ddfb2bbc1f3de50a",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "812922e2b5db9410",
|
||||
"gsd-core/references/debugger-philosophy.md": "459a8ac647c4ce9c",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "62089f91dfa470bd",
|
||||
"gsd-core/references/debugger-sbfl.md": "5bb65a8653bf2e06",
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
"agents/gsd-code-fixer.md": "76085f4442f268e6",
|
||||
"agents/gsd-code-reviewer.md": "f29d6edbac0a01b6",
|
||||
"agents/gsd-codebase-mapper.md": "d49c91fdab4efc70",
|
||||
"agents/gsd-debug-session-manager.md": "5e47d7b36e262219",
|
||||
"agents/gsd-debugger.md": "327fe2ec83e46205",
|
||||
"agents/gsd-debug-session-manager.md": "c723ce1b8691296f",
|
||||
"agents/gsd-debugger.md": "3a568af40765db29",
|
||||
"agents/gsd-doc-classifier.md": "a6ab02b8f45f9d0b",
|
||||
"agents/gsd-doc-synthesizer.md": "fd3c18addbc8265d",
|
||||
"agents/gsd-doc-verifier.md": "9934ec11845d41c3",
|
||||
@@ -134,6 +134,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "63c03b8afbd21b8a",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "86b7cbde0171fafd",
|
||||
"gsd-core/references/debugger-philosophy.md": "16f0cb55eb457f33",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "d5f1796cde97e7d2",
|
||||
"gsd-core/references/debugger-sbfl.md": "838445590aab52e3",
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
"agents/gsd-code-fixer.md": "94628312f25decb5",
|
||||
"agents/gsd-code-reviewer.md": "5ef947ca5baed775",
|
||||
"agents/gsd-codebase-mapper.md": "feccaeeacd05e34b",
|
||||
"agents/gsd-debug-session-manager.md": "de03d1f43295518f",
|
||||
"agents/gsd-debugger.md": "1912fdfe312b3482",
|
||||
"agents/gsd-debug-session-manager.md": "d46222bd8037b695",
|
||||
"agents/gsd-debugger.md": "ef869f69333fdcd9",
|
||||
"agents/gsd-doc-classifier.md": "29b563a146c9d22c",
|
||||
"agents/gsd-doc-synthesizer.md": "652beb928e93fa1d",
|
||||
"agents/gsd-doc-verifier.md": "d3d8457bdd44bf10",
|
||||
@@ -63,6 +63,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "fd9b10fffb3bd052",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "b04b913d5ea0ac90",
|
||||
"gsd-core/references/debugger-philosophy.md": "16f0cb55eb457f33",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "8318008696c1e0b2",
|
||||
"gsd-core/references/debugger-sbfl.md": "70e699200f6197e0",
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
"agents/gsd-code-fixer.md": "9652d5b56a2afbf5",
|
||||
"agents/gsd-code-reviewer.md": "922c08885bc78662",
|
||||
"agents/gsd-codebase-mapper.md": "0ccbf6a685804979",
|
||||
"agents/gsd-debug-session-manager.md": "59191275e650f655",
|
||||
"agents/gsd-debugger.md": "5dfaadd8e26b5d57",
|
||||
"agents/gsd-debug-session-manager.md": "42a775633c9b1b34",
|
||||
"agents/gsd-debugger.md": "753165cedae67dd6",
|
||||
"agents/gsd-doc-classifier.md": "6256bbc0b887f60f",
|
||||
"agents/gsd-doc-synthesizer.md": "212aaf89a34b51d7",
|
||||
"agents/gsd-doc-verifier.md": "8016f792d0766b77",
|
||||
@@ -134,6 +134,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "49f94fe75cabba52",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "b2732420bdbcadcd",
|
||||
"gsd-core/references/debugger-philosophy.md": "459a8ac647c4ce9c",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "097c2da83d697566",
|
||||
"gsd-core/references/debugger-sbfl.md": "391e732abf32786a",
|
||||
|
||||
@@ -43,9 +43,9 @@
|
||||
"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": "c71b4debebaa978e",
|
||||
"agents/subagents/gsd-debug-session-manager.md": "cec62a7fd99ab1c3",
|
||||
"agents/subagents/gsd-debug-session-manager.yaml": "aab147717b5082e7",
|
||||
"agents/subagents/gsd-debugger.md": "9302c5c4b7d5a2b7",
|
||||
"agents/subagents/gsd-debugger.md": "ce8ab001fde869cb",
|
||||
"agents/subagents/gsd-debugger.yaml": "6d02d7feb90cad43",
|
||||
"agents/subagents/gsd-doc-classifier.md": "632dc6c61bafa63e",
|
||||
"agents/subagents/gsd-doc-classifier.yaml": "a4e9cf7025b57503",
|
||||
@@ -127,6 +127,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "78fb8c1711acc971",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "5616622f33e00436",
|
||||
"gsd-core/references/debugger-philosophy.md": "16f0cb55eb457f33",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "fdf55a6cee9b1792",
|
||||
"gsd-core/references/debugger-sbfl.md": "a7d0cd5940d6d2cd",
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
"agents/gsd-code-fixer.md": "3622ae5d90fb15f6",
|
||||
"agents/gsd-code-reviewer.md": "2249774416314c57",
|
||||
"agents/gsd-codebase-mapper.md": "948612acd505e87f",
|
||||
"agents/gsd-debug-session-manager.md": "b5a39dcf10210cbb",
|
||||
"agents/gsd-debugger.md": "2cb64b4cac666e81",
|
||||
"agents/gsd-debug-session-manager.md": "e4b96ea41c74c479",
|
||||
"agents/gsd-debugger.md": "e7f3e6c558756918",
|
||||
"agents/gsd-doc-classifier.md": "fb776cfbb7e991b0",
|
||||
"agents/gsd-doc-synthesizer.md": "2389f388d291c2eb",
|
||||
"agents/gsd-doc-verifier.md": "65bbc2ae6b9ace29",
|
||||
@@ -134,6 +134,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "49f94fe75cabba52",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "b2732420bdbcadcd",
|
||||
"gsd-core/references/debugger-philosophy.md": "459a8ac647c4ce9c",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "097c2da83d697566",
|
||||
"gsd-core/references/debugger-sbfl.md": "391e732abf32786a",
|
||||
|
||||
1
tests/fixtures/golden-install-parity/pi.json
vendored
1
tests/fixtures/golden-install-parity/pi.json
vendored
@@ -30,6 +30,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "78fb8c1711acc971",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "5616622f33e00436",
|
||||
"gsd-core/references/debugger-philosophy.md": "16f0cb55eb457f33",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "fdf55a6cee9b1792",
|
||||
"gsd-core/references/debugger-sbfl.md": "a7d0cd5940d6d2cd",
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
"agents/gsd-code-fixer.md": "3ed1a27ddc372ef8",
|
||||
"agents/gsd-code-reviewer.md": "27eeeee6cb600e9b",
|
||||
"agents/gsd-codebase-mapper.md": "032ff8ac55466a74",
|
||||
"agents/gsd-debug-session-manager.md": "afe383b6483d4097",
|
||||
"agents/gsd-debugger.md": "620e92debfaa906c",
|
||||
"agents/gsd-debug-session-manager.md": "c1c9c5f538acb941",
|
||||
"agents/gsd-debugger.md": "2a6bf0bb1a964771",
|
||||
"agents/gsd-doc-classifier.md": "bdf3d54082424e76",
|
||||
"agents/gsd-doc-synthesizer.md": "96c383b74a60fbbe",
|
||||
"agents/gsd-doc-verifier.md": "da9ab6f3ec27778a",
|
||||
@@ -63,6 +63,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "47e7929972c06378",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "ab6a1cce253944f4",
|
||||
"gsd-core/references/debugger-philosophy.md": "16f0cb55eb457f33",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "07ad93b8bcad3c34",
|
||||
"gsd-core/references/debugger-sbfl.md": "061b719c754a12d3",
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
"agents/gsd-code-fixer.md": "5fe29063843be67e",
|
||||
"agents/gsd-code-reviewer.md": "338c46ab59c4e45f",
|
||||
"agents/gsd-codebase-mapper.md": "8529d8a1ede8bbfb",
|
||||
"agents/gsd-debug-session-manager.md": "ada53877ba56d894",
|
||||
"agents/gsd-debugger.md": "c2dea41cd878723c",
|
||||
"agents/gsd-debug-session-manager.md": "913a370b529ec717",
|
||||
"agents/gsd-debugger.md": "7a2fd82d5f328d23",
|
||||
"agents/gsd-doc-classifier.md": "a6ab02b8f45f9d0b",
|
||||
"agents/gsd-doc-synthesizer.md": "fd3c18addbc8265d",
|
||||
"agents/gsd-doc-verifier.md": "e51e50892963ccc7",
|
||||
@@ -63,6 +63,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "d0458c690c4487c9",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "134f83886c343733",
|
||||
"gsd-core/references/debugger-philosophy.md": "16f0cb55eb457f33",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "4bf1af239ae875f3",
|
||||
"gsd-core/references/debugger-sbfl.md": "23d7a3bb15bc8b7c",
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
"agents/gsd-code-fixer.md": "f00d815ec535a168",
|
||||
"agents/gsd-code-reviewer.md": "efc0d2dee321c654",
|
||||
"agents/gsd-codebase-mapper.md": "cfa2bbfaf264e1fd",
|
||||
"agents/gsd-debug-session-manager.md": "b7d57cd8ed9103d3",
|
||||
"agents/gsd-debugger.md": "8d91db51d9fe1959",
|
||||
"agents/gsd-debug-session-manager.md": "86d75b269a6c40e7",
|
||||
"agents/gsd-debugger.md": "77a2f8edc9193e54",
|
||||
"agents/gsd-doc-classifier.md": "a6ab02b8f45f9d0b",
|
||||
"agents/gsd-doc-synthesizer.md": "fd3c18addbc8265d",
|
||||
"agents/gsd-doc-verifier.md": "ede2f297b73b5a86",
|
||||
@@ -63,6 +63,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "5d8c0a266a6d61f8",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "ddd00cbd78dd3fdf",
|
||||
"gsd-core/references/debugger-philosophy.md": "16f0cb55eb457f33",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "b5d7c4a5804327c3",
|
||||
"gsd-core/references/debugger-sbfl.md": "071651eaf7414a4c",
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
"agents/gsd-code-fixer.md": "78549833f0411b0c",
|
||||
"agents/gsd-code-reviewer.md": "7d94fe8bfa6661aa",
|
||||
"agents/gsd-codebase-mapper.md": "7cc9d387f29c46e1",
|
||||
"agents/gsd-debug-session-manager.md": "baf23c3834eb36ba",
|
||||
"agents/gsd-debugger.md": "240cb56fcb4fa4a7",
|
||||
"agents/gsd-debug-session-manager.md": "dc4e8a556dbf1708",
|
||||
"agents/gsd-debugger.md": "95854ad0457494f2",
|
||||
"agents/gsd-doc-classifier.md": "146acf4d176134b5",
|
||||
"agents/gsd-doc-synthesizer.md": "b1f5e2eb28fa3659",
|
||||
"agents/gsd-doc-verifier.md": "7ed4d9611f678a95",
|
||||
@@ -134,6 +134,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md": "78fb8c1711acc971",
|
||||
"gsd-core/references/debugger-fix-acceptance.md": "5616622f33e00436",
|
||||
"gsd-core/references/debugger-philosophy.md": "16f0cb55eb457f33",
|
||||
"gsd-core/references/debugger-prevention.md": "74b6c5556a428efd",
|
||||
"gsd-core/references/debugger-rca-branching.md": "7dcf3ddbe3591250",
|
||||
"gsd-core/references/debugger-repro-hardening.md": "fdf55a6cee9b1792",
|
||||
"gsd-core/references/debugger-sbfl.md": "a7d0cd5940d6d2cd",
|
||||
|
||||
1
tests/fixtures/install-tree/antigravity.json
vendored
1
tests/fixtures/install-tree/antigravity.json
vendored
@@ -63,6 +63,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/augment.json
vendored
1
tests/fixtures/install-tree/augment.json
vendored
@@ -134,6 +134,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
@@ -133,6 +133,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/claude.json
vendored
1
tests/fixtures/install-tree/claude.json
vendored
@@ -62,6 +62,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/cline.json
vendored
1
tests/fixtures/install-tree/cline.json
vendored
@@ -66,6 +66,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/codebuddy.json
vendored
1
tests/fixtures/install-tree/codebuddy.json
vendored
@@ -134,6 +134,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/codex.json
vendored
1
tests/fixtures/install-tree/codex.json
vendored
@@ -169,6 +169,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/copilot.json
vendored
1
tests/fixtures/install-tree/copilot.json
vendored
@@ -64,6 +64,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/cursor.json
vendored
1
tests/fixtures/install-tree/cursor.json
vendored
@@ -134,6 +134,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/hermes.json
vendored
1
tests/fixtures/install-tree/hermes.json
vendored
@@ -63,6 +63,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/kilo.json
vendored
1
tests/fixtures/install-tree/kilo.json
vendored
@@ -134,6 +134,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/kimi.json
vendored
1
tests/fixtures/install-tree/kimi.json
vendored
@@ -127,6 +127,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/opencode.json
vendored
1
tests/fixtures/install-tree/opencode.json
vendored
@@ -134,6 +134,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/pi.json
vendored
1
tests/fixtures/install-tree/pi.json
vendored
@@ -30,6 +30,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/qwen.json
vendored
1
tests/fixtures/install-tree/qwen.json
vendored
@@ -63,6 +63,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/trae.json
vendored
1
tests/fixtures/install-tree/trae.json
vendored
@@ -63,6 +63,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/windsurf.json
vendored
1
tests/fixtures/install-tree/windsurf.json
vendored
@@ -63,6 +63,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
1
tests/fixtures/install-tree/zcode.json
vendored
1
tests/fixtures/install-tree/zcode.json
vendored
@@ -134,6 +134,7 @@
|
||||
"gsd-core/references/debugger-bug-taxonomy.md",
|
||||
"gsd-core/references/debugger-fix-acceptance.md",
|
||||
"gsd-core/references/debugger-philosophy.md",
|
||||
"gsd-core/references/debugger-prevention.md",
|
||||
"gsd-core/references/debugger-rca-branching.md",
|
||||
"gsd-core/references/debugger-repro-hardening.md",
|
||||
"gsd-core/references/debugger-sbfl.md",
|
||||
|
||||
Reference in New Issue
Block a user