5.4 KiB
5.4 KiB
description
| description |
|---|
| Validate that a previously fixed bug is resolved and record the verification report |
Test Bug Fix
Validate that the fix recorded by __SPECKIT_COMMAND_BUG_FIX__ actually resolves the bug described by __SPECKIT_COMMAND_BUG_ASSESS__. The output is a verification report at .specify/bugs/<slug>/test.md.
User Input
$ARGUMENTS
The user input should identify the bug to validate. Accept any of:
slug=<bug-slug>or--slug <bug-slug>or a bare slug-like token.- A path that contains the slug (e.g.
.specify/bugs/login-timeout/). - Nothing — fall back to context (see below).
Slug Resolution
Resolve BUG_SLUG in this order, stopping at the first match:
- Explicit user input — a slug passed in
$ARGUMENTS(any of the forms above). - Conversation context — if the current session has just run
__SPECKIT_COMMAND_BUG_ASSESS__or__SPECKIT_COMMAND_BUG_FIX__, the slug it reported is the working slug. Reuse it without re-prompting. Confirm it by checking that.specify/bugs/<slug>/fix.mdexists; if it does not, fall through. - Single candidate on disk — list
.specify/bugs/*/fix.md. If exactly one bug has afix.md, use it. - Disambiguate:
- Interactive mode: ask the user which bug to validate and list the candidates.
- Automated mode: stop with an error listing the candidates. Do not guess.
Once resolved, set BUG_SLUG and BUG_DIR = .specify/bugs/<BUG_SLUG>, and briefly state in your reply which resolution path was used (explicit / from context / single candidate / asked).
Prerequisites
BUG_DIR/assessment.mdMUST exist.BUG_DIR/fix.mdMUST exist. If not, stop and instruct the user to run__SPECKIT_COMMAND_BUG_FIX__first.- If
BUG_DIR/test.mdalready exists, ask the user whether to overwrite it (interactive mode) or refuse (automated mode). - Read both
assessment.mdandfix.mdin full so you know:- The original symptom and reproduction steps (from
assessment.md). - The actual code changes and tests added (from
fix.md).
- The original symptom and reproduction steps (from
Execution
-
Plan the validation
- Decide which checks prove the bug is gone:
- Re-run the reproduction steps from the assessment (or their automated equivalent).
- Run the tests added or updated in the fix.
- Run any broader regression suite that touches the changed files.
- Decide which checks prove nothing was broken:
- Existing test suites for the changed modules.
- Lint / type-check if the project uses them.
- Decide which checks prove the bug is gone:
-
Run the checks
- Execute each planned check. Capture command, exit status, and a short excerpt of relevant output (last few lines, or the failing assertion).
- If a check is destructive, network-dependent, or expensive, skip it and record it as
skippedwith a reason; do not run it without explicit user consent. - If you cannot run a check at all (missing tooling, no test framework configured), record it as
not-runwith a reason instead of fabricating a result.
-
Judge the outcome
- Mark the fix as:
- verified — all critical checks pass and the original symptom no longer reproduces.
- partial — the original symptom is gone but unrelated regressions appeared, or some checks are inconclusive.
- failed — the symptom still reproduces or the regression suite is broken by the fix.
- Do not over-claim. If reproduction was not actually performed (e.g., the bug required a production environment), say so explicitly.
- Mark the fix as:
-
Write the verification report
Write to
BUG_DIR/test.mdusing this structure:# Bug Verification: <short title> - **Slug**: <BUG_SLUG> - **Tested**: <ISO 8601 date> - **Assessment**: ./assessment.md - **Fix**: ./fix.md - **Result**: verified | partial | failed ## Summary <One or two sentences: does the bug reproduce, did the fix hold, were any regressions found.> ## Checks Performed | Check | Command / Action | Result | Notes | |-------|------------------|--------|-------| | Reproduction (post-fix) | <command or manual steps> | pass / fail / skipped / not-run | <short note> | | New / updated tests | `<command>` | pass / fail | <short note> | | Regression suite | `<command>` | pass / fail / skipped | <short note> | | Lint / type-check | `<command>` | pass / fail / skipped | <short note> | ## Output Excerpts <Short snippets of relevant output (e.g., final summary line of a test run, the failing assertion). Keep it tight — no full logs.> ## Residual Risks - <known limitation, environment not covered, etc.> ## Recommendation <One paragraph. Examples:> - "Close the bug — verified end-to-end." - "Hold — reproduction inconclusive; needs verification in staging." - "Reopen — symptom still reproduces; rerun `__SPECKIT_COMMAND_BUG_ASSESS__`." -
Report back with:
- The slug and
BUG_DIR/test.mdpath. - The result (
verified,partial,failed). - If the result is
failed, recommend re-running__SPECKIT_COMMAND_BUG_ASSESS__with the new evidence captured intest.md.
- The slug and
Guardrails
- This command MUST NOT modify source code. It only runs checks and writes inside
.specify/bugs/<slug>/. - Never overwrite an existing
test.mdwithout confirmation. - Never mark a fix as
verifiedbased on tests alone if the original assessment listed a reproduction that you did not actually exercise — downgrade topartialand say so.