6410732943
Phase 3 previously said only "smallest possible reproducer" — a passive property an agent can satisfy by name while still asserting against the full reproducing fixture. Sharpen it into an explicit two-step discipline: minimize the trigger (delta-reduce until one more cut makes the symptom vanish) and make the fixture autonomous (inline input, no shared fixtures/DB seeds/clocks/server boots unless the bug is genuinely at that integration boundary). - Iron Law gains: an un-minimized repro is not a RED test - Phase 3 rewritten with explicit Minimize + Autonomous steps - 3 rationalization rows + 4 red flags for the "full fixture reproduces deterministically, ship it" failure mode - SKILL.md overview/handoff mirrored at orchestrator altitude Baseline (writing-skills RED-first): 6 subagent runs showed the old wording usually steered right but relied on agent instinct; GREEN: 2 runs under the targeted full-fixture pressure now reduce to the minimal trigger and cite the contract verbatim. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
100 lines
3.8 KiB
Markdown
100 lines
3.8 KiB
Markdown
---
|
|
name: debug
|
|
description: Use when a bug surfaces — failing test, segfault, wrong stdout, panic, or any observable misbehaviour. Bug fixes are RED-first TDD; no fix is attempted before the failing test exists in the working tree. Mandatory for any bug, including ones that look trivial.
|
|
---
|
|
|
|
# debug — RED-first bug diagnoser
|
|
|
|
> **Violating the letter of these rules is violating the spirit.**
|
|
|
|
## Overview
|
|
|
|
Bugs are diagnosed and fixed by a two-stage handoff: this
|
|
skill produces the RED test and the cause analysis; the
|
|
`implement` skill then drives the fix to GREEN. Skipping the
|
|
RED stage — even for "trivial" bugs — produces fixes that don't
|
|
stick and tests that don't exist to catch the next regression.
|
|
|
|
The substantive process — root cause investigation → pattern
|
|
analysis → minimal, autonomous RED test → handoff, plus the
|
|
Phase 4.5 architecture-question trigger after three failed
|
|
hypotheses — lives in `agents/debugger.md`. The RED stage is
|
|
not "any failing test": Phase 3 reduces the reproducer to the
|
|
smallest autonomous trigger before the test counts. That file is the single source of truth
|
|
for the discipline; this skill file only governs trigger,
|
|
dispatch, and handoff.
|
|
|
|
## When to Use / Skipping
|
|
|
|
Trigger this skill on:
|
|
|
|
- a failing run of the project's test command (configured under
|
|
`commands.test` in the profile)
|
|
- wrong stdout from running a project artefact
|
|
- a segfault from a built binary
|
|
- a panic / unhandled exception in the toolchain
|
|
- a structured diagnostic from `bencher` or `architect` that
|
|
names a concrete misbehaviour
|
|
|
|
**Never skipped.** A bug without a regression test is a code
|
|
change, not a fix. Ad-hoc judgement that a bug is "too small
|
|
for TDD" is the exact failure mode this skill exists to prevent.
|
|
|
|
## The Iron Law
|
|
|
|
```
|
|
NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST
|
|
NO FIX WITHOUT A FAILING TEST FIRST
|
|
```
|
|
|
|
Both clauses are non-negotiable.
|
|
|
|
## Dispatch
|
|
|
|
Dispatch `debugger` with:
|
|
|
|
| Carrier field | Content |
|
|
|---------------|---------|
|
|
| `symptom` | Exact error message, stack trace, wrong output, or repro command |
|
|
| `repro_known` | One-line repro if known, otherwise the agent finds one |
|
|
| `recent_iter` | Iteration that last touched the suspected area (often `git log` tail) |
|
|
|
|
The agent writes the RED test to the working tree (uncommitted)
|
|
and reports the handoff carrier for `implement` mini-mode. The
|
|
agent does NOT commit anything, and does NOT write the fix —
|
|
splitting RED (this skill) and GREEN (`implement` mini-mode)
|
|
across two dispatches keeps the diagnosis honest. The
|
|
orchestrator decides whether to commit the RED test as a
|
|
separate audit-trail commit before dispatching `implement`
|
|
mini-mode, or to hand the dirty working tree directly to
|
|
mini-mode (the mini-mode orchestrator's Phase-0 clean-tree
|
|
check will refuse the latter — so for an audit-trail-preserving
|
|
flow the orchestrator commits the RED test first; for a
|
|
streamlined-fix flow the orchestrator commits the combined
|
|
RED+GREEN at the end of mini-mode).
|
|
|
|
## Handoff Contract
|
|
|
|
`debug` produces, for `implement` mini-mode:
|
|
|
|
| Field | Content |
|
|
|-------|---------|
|
|
| `red_test_path` | absolute path to the failing test file — minimal and autonomous (Phase 3) |
|
|
| `cause_summary` | 1-2 sentences naming the file + function + why |
|
|
| `constraint` | `"minimal fix, no surrounding cleanup"` |
|
|
|
|
Anything else (broader refactor, doc rewrite, new feature) is
|
|
OUT of scope for the bug-fix iteration and gets queued for a
|
|
separate one.
|
|
|
|
## Cross-references
|
|
|
|
- **Agent dispatched:** `agents/debugger.md` — carries the
|
|
four-phase process, the Phase 4.5 escalation rule, the
|
|
Common Rationalisations table, and the Red Flags list. The
|
|
orchestrator does not execute these phases directly.
|
|
- **Hand-off target:** `../implement/SKILL.md` — runs the
|
|
GREEN side after the orchestrator has decided whether to
|
|
commit the RED test separately or as part of the final fix
|
|
commit.
|