5.2 KiB
5.2 KiB
description
| description |
|---|
| Apply the remediation from a bug assessment and record what was changed |
Fix Bug
Apply the remediation that was proposed by __SPECKIT_COMMAND_BUG_ASSESS__ and record the changes in a fix report at .specify/bugs/<slug>/fix.md. This command is only valid after an assessment exists for the given slug.
User Input
$ARGUMENTS
The user input should identify the bug to fix. Accept any of:
slug=<bug-slug>or--slug <bug-slug>or just 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__, the slug it reported is the working slug. Reuse it without re-prompting. Confirm it by checking that.specify/bugs/<slug>/assessment.mdexists; if it does not, fall through. - Single candidate on disk — list
.specify/bugs/*/assessment.md. If exactly one matchingassessment.mdis found, use the slug from its parent directory. - Disambiguate:
- Interactive mode: ask the user which bug to fix 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. If it does not, stop and instruct the user to run__SPECKIT_COMMAND_BUG_ASSESS__first.- If
BUG_DIR/fix.mdalready exists, ask the user whether to overwrite it before continuing (interactive mode) or refuse (automated mode). - Read
BUG_DIR/assessment.mdin full. Treat its Proposed Remediation, Files likely to change, Tests to add or update, and Risks & Considerations sections as the contract for this command.
Execution
-
Confirm the plan
- Restate, in 3–6 bullets, what you are about to change and where, based on the assessment.
- If the assessment's verdict is
invalid, stop — there is nothing to fix. Tell the user and exit. - If the verdict is
likely valid, needs reproductionand there are unresolved[NEEDS CLARIFICATION]items, flag them and ask the user whether to proceed in interactive mode, or stop in automated mode.
-
Apply the remediation
- Make the code changes described by the preferred remediation. Stay within the files listed by the assessment unless newly discovered evidence requires expanding scope (in which case, log the expansion explicitly in the report).
- Add or update the tests called out in the assessment so the bug cannot regress silently.
- Keep the change minimal — do not refactor unrelated code, do not introduce dependencies that the assessment did not call for.
- If you discover the assessment was wrong (the proposed fix does not work, the root cause is elsewhere), STOP modifying code, document the new finding in the fix report under Deviations from Assessment, and recommend re-running
__SPECKIT_COMMAND_BUG_ASSESS__.
-
Run local checks
- If the project has obvious test commands (e.g.,
pytest,npm test,cargo test), run the tests that exercise the changed paths. Capture pass/fail and key output. - Do not run destructive or network-dependent suites without the user's consent.
- If the project has obvious test commands (e.g.,
-
Write the fix report
Write to
BUG_DIR/fix.mdusing this structure:# Bug Fix: <short title> - **Slug**: <BUG_SLUG> - **Fixed**: <ISO 8601 date> - **Assessment**: ./assessment.md - **Status**: applied | partial | not-applied ## Summary <One or two sentences describing what was changed and why.> ## Changes | File | Change | Notes | |------|--------|-------| | `path/to/file.py` | <added / modified / removed> | <short note> | | `path/to/test_file.py` | added test | <short note> | ## Diff Highlights (optional) <Short, illustrative snippets of the most important hunks — not a full diff dump.> ## Tests Added or Updated - `path/to/test_file.py::test_name` — <what it pins down> ## Local Verification - Commands run: `<command>` → <result, brief> - Manual checks: <what was verified by hand, if anything> ## Deviations from Assessment <Empty if none. Otherwise, list any places where the actual fix departed from the proposed remediation and why.> ## Follow-ups - <suggested cleanup, monitoring, doc update, etc.> -
Report back with:
- The slug and
BUG_DIR/fix.mdpath. - The status (
applied,partial,not-applied). - The next suggested step:
__SPECKIT_COMMAND_BUG_TEST__ slug=<BUG_SLUG>.
- The slug and
Guardrails
- Never modify files outside the project workspace.
- Never edit
assessment.md— it is the contract you are working against. Record disagreements infix.mdunder Deviations from Assessment. - Never delete files unless the assessment explicitly required it.
- Never overwrite an existing
fix.mdwithout confirmation.