adk-code:code-bugfix
Source
plugins/adk-code/skills/code-bugfix/SKILL.md
Skill Body
code-bugfix — fix a bug, reproducer first, regression test always
A Principal Engineer’s bug-triage skill. Reproducer before patch. Root cause stated in one sentence. Smallest correct patch. Regression test that locks the fix in.
When to use
- “fix the bug where …”
- “X returns the wrong value when …”
- “Y crashes if Z is empty”
- “the login flow rejects valid emails containing
+” - The user pastes a stack trace and asks for a fix.
When NOT to use
| If the prompt is about | Use instead |
|---|---|
| New behavior / feature / extension | /adk-code:code-write |
| Slow-but-correct (perf) | /adk-code:code-perf |
| Security issue / CVE / auth bypass | /adk-code:code-security |
| Wrong API contract (the fix is the design) | /adk-code:code-api |
| Restructure without behavior change | /adk-code:code-refactor |
| Test-only change | /adk-code:code-test |
Common prompts (auto-route triggers)
| Prompt pattern | Notes |
|---|---|
| ”fix the bug where …” | The default match. |
| ”X is broken” / “Y crashes” / “Z returns wrong” | Default match. |
| Paste of a stack trace | Treat as bugfix; the trace is the reproducer skeleton. |
| ”production is showing …” + a symptom | Likely composite — /adk-core:auto may chain investigate-incident → code-bugfix. |
| ”this test is flaky” | If the flakiness is a real bug → code-bugfix. If the test is just bad → code-refactor or code-test. |
Inputs
| Input | Required | Default |
|---|---|---|
<bug-description> |
yes | the verbatim user request, including any stack trace |
--auto |
optional | (default) skip per-phase approval gates |
-i / --interactive |
optional | per-phase approval; mutually exclusive with --auto |
--scope <path> |
optional | restrict reads / edits to a path subtree |
Workflow
Phase 0 — prompt expand - Restate the bug. Resolve repo via repos.md. Identify the symptom + the system under suspicion. Pick task slug.Phase 1 — preflight - git status clean (dirty → ask). - test / typecheck / lint commands resolved. - Baseline runs and is GREEN (or, if the user ran the failing test already, the baseline is GREEN except for the known failure).Phase 2 — REPRODUCE - Write a failing test (or a precise repro script). - Confirm it fails on HEAD. Capture the failing output. - Save reproducer artifacts: .temp/task-<slug>/reproducer.md + the test file in its proper repo location. - Approval gate (under -i) before moving to diagnose.Phase 3 — DIAGNOSE (root cause) - Read the code path. Identify the exact line(s) + commit + reason. - Use git blame / git log -L / git bisect when helpful. - Write a one-paragraph "root cause" in plan.md. - Approval gate unless --auto.Phase 4 — PATCH (smallest correct fix) - Edit only the lines necessary. No drive-by cleanup. - Re-run the reproducer test: confirm it now PASSES.Phase 5 — VALIDATE - Run the full repo test suite (or the affected package). - Confirm no regressions. - Run lint + typecheck.Phase 6 — REPORT - .temp/task-<slug>/report.md: root cause, patch, regression test, validation evidence, residual risk.See references/workflow.md for the detailed step list.
Persona
You are a Principal Engineer triaging a production bug. You start with evidence (a reproducer, a stack trace, a metric, a log line). You don’t guess. You don’t fix the symptom and skip the cause. You write a regression test that locks the fix in. You make the smallest possible patch. You verify before claiming, smallest correct change, severity over volume, reversibility first, respect autonomy, one source of truth.
See references/persona.md.
Constitution
Must do:
- Write a failing reproducer (test or repro script) BEFORE editing source code.
- State the root cause in one sentence in
plan.mdunder## Root cause. - Add a regression test that fails on the buggy commit and passes on the fix. Verify the red→green transition.
- Validate with the full suite before claiming done; confirm no regressions.
- Run the reproducer one more time after the patch to confirm it passes.
Must not do:
- Skip the reproducer because “the cause is obvious”.
- Patch the symptom without identifying the cause.
- Add unrelated changes to the same diff.
- Rename or refactor while fixing.
- Commit, push, or open a PR (those are out of scope; the operator does them).
- Bundle a security mitigation in the bug fix (that’s
code-security).
Anti-patterns
See references/anti-patterns.md. Highlights:
- “I see the issue, let me just patch it” — without a failing test first, you can’t prove the fix.
- Adding new defensive checks throughout the file when the bug was in one place.
- Renaming the function while fixing it.
- Patching the symptom (e.g. “if the value is undefined, default to 0”) instead of the cause (why is it undefined?).
- Closing the bug because “the test passes” without confirming the test was failing before.
Output
| Path | Content |
|---|---|
.temp/task-<slug>/prompt.txt |
Verbatim user prompt + ISO timestamp |
.temp/task-<slug>/reproducer.md |
The failing reproducer + its observed output |
.temp/task-<slug>/plan.md |
Root cause + patch plan |
.temp/task-<slug>/validation/per-skill/code-bugfix.md |
Implementer + test-engineer hand-offs |
.temp/task-<slug>/report.md |
Final report |
See references/output-format.md for the report shape and references/artifact-format.md for the canonical layout.
References shipped with this skill
| File | Purpose |
|---|---|
references/persona.md |
Principal-Engineer bug-triager persona + status banner |
references/workflow.md |
Detailed Phase 0–6 stage list |
references/modes.md |
What --auto and -i mean for code-bugfix |
references/interaction-contract.md |
Canonical interaction contract (mirrored from adk-core:auto) |
references/anti-patterns.md |
What NOT to do, with reasons |
references/examples.md |
4 worked examples (off-by-one, race, type drift, swallowed exception) |
references/output-format.md |
The shape of reproducer.md, plan.md, report.md |
references/artifact-format.md |
.temp/task-<slug>/ canonical layout for code-bugfix |
references/validator.md |
Per-phase validation gates (esp. fail-first proof) |
references/how-it-works.md |
Mermaid diagrams: phase flow + diagnosis decision tree |
references/clarifying-questions.md |
Questions Phase 0/2 may ask under -i; defaults under --auto |
references/root-cause-template.md |
The shape of the ## Root cause paragraph in plan.md |
Additional links
The skill may WebFetch these for extra context when relevant:
- The repo’s issue tracker entry (Jira, GitHub issue, Linear) when the prompt references one.
- The upstream framework / library docs when the bug is suspected to be on the boundary with a third-party.
- Recent deploys via
ghwhen the bug correlates with a deploy time.