Compare commits

..

3 Commits

Author SHA1 Message Date
PinkyD 939c489887
Merge 71e9ecd027 into 6ac4c26b69 2026-06-22 06:39:27 -07:00
pbean 71e9ecd027 fix(bmm): address final review comments on bmad skills
- step-auto-finalize.md: reflow the bundle-mode `dw_ids` note so the
  inline-code span no longer wraps across a line break (was rendering as
  "dw ids") and restore the dropped list-continuation indent (augment).
- step-03-triage.md: reword the third consecutive "If" to "When" to break
  the repeated sentence opening; logic and {auto_mode} gate unchanged
  (coderabbit nitpick).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 06:38:48 -07:00
pbean bf30176391 fix(bmm): address coderabbit review on bmad-code-review/quick-dev skills
Actionable:
- step-03-triage / step-04-present (code-review): wire automation-mode
  rule 6 (spec defects) into the steps it governs — step-03 classifies a
  spec-defect finding (frozen → defer + CRITICAL type:spec-defect; non-frozen
  → patch + PREFERENCE) and step-04 appends the `## Spec Change Log` entry.
  Mirrors the existing rule-5 hook and quick-dev's bad_spec pattern.
- step-04-present (code-review): make result.json field population explicit
  (workflow/clean/patched/deferred/dismissed/escalations) instead of only
  "write per the schema", so unattended runs populate every field.

Nitpicks (quick-dev):
- step-02-plan: escalate `CRITICAL (type: intent-gap)` to match the schema;
  add a CHECKPOINT-1 spec-file preflight (escalate type:spec-write-failure
  if missing/empty before locking), matching the interactive path.
- step-01-clarify-and-route: clarify "always the plan→code→review path
  (never one-shot)" so it doesn't read as conflicting with resume routing.
- step-03-implement: name the finalize target (`./step-auto-finalize.md`).
- deferred-work-format (both copies, kept in sync): note multi-line field
  wrapping and that seen-again/resolution/decision are separate lines.

validate:refs, validate:skills, lint:md all pass.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-22 00:26:20 -07:00
8 changed files with 22 additions and 8 deletions

View File

@ -46,6 +46,11 @@ for polish and nice-to-haves.
When a deferred item is later completed, set its `status:` to `done` with the When a deferred item is later completed, set its `status:` to `done` with the
date (e.g. `status: done 2026-06-20`) — do not delete the entry. date (e.g. `status: done 2026-06-20`) — do not delete the entry.
Each field value stays on one logical line; a `reason:` that wraps simply
continues on the next line with no special indentation. `seen-again:`,
`resolution:`, and `decision:` are always their own separate lines — never
embedded into the `status:` line.
## Sweep annotations ## Sweep annotations
`bmad-auto sweep` runs (the orchestrator and its bundle dev sessions) add two `bmad-auto sweep` runs (the orchestrator and its bundle dev sessions) add two

View File

@ -56,6 +56,8 @@
If `{auto_mode}` and a finding would otherwise be `decision_needed`: reclassify as `patch` only when the fix is genuinely unambiguous; otherwise reclassify as `defer` with reason "auto-mode: needs human decision" AND record it in the result escalations — severity `CRITICAL` if it concerns correctness or security of the new code, else `PREFERENCE` (see `../automation-mode.md` rule 5). If `{auto_mode}` and a finding would otherwise be `decision_needed`: reclassify as `patch` only when the fix is genuinely unambiguous; otherwise reclassify as `defer` with reason "auto-mode: needs human decision" AND record it in the result escalations — severity `CRITICAL` if it concerns correctness or security of the new code, else `PREFERENCE` (see `../automation-mode.md` rule 5).
When `{auto_mode}` and a finding's root cause is a defect in the spec itself (the code faithfully implements something the spec got wrong), handle it per `../automation-mode.md` rule 6: if the root cause is inside the spec's `<frozen-after-approval>` block, classify as `defer` and record a `CRITICAL` (`type: spec-defect`) escalation — never patch around frozen, human-owned intent; if the root cause is outside the frozen block, classify as `patch` (correct the code to the evidently right behavior), mark it for the step-04 `## Spec Change Log` append, and record a `PREFERENCE` escalation.
5. **Drop** all `dismiss` findings. Record the dismiss count for the summary. (`{auto_mode}`: do NOT drop — set each dismissed finding aside, keeping its title, location, and one-line dismissal reason; step-04 writes them to the Review Ledger so later cycles do not re-litigate them.) 5. **Drop** all `dismiss` findings. Record the dismiss count for the summary. (`{auto_mode}`: do NOT drop — set each dismissed finding aside, keeping its title, location, and one-line dismissal reason; step-04 writes them to the Review Ledger so later cycles do not re-litigate them.)
6. If `{failed_layers}` is non-empty, report which layers failed before announcing results. If zero findings remain after dropping dismissed AND `{failed_layers}` is non-empty, warn the user that the review may be incomplete rather than announcing a clean review. 6. If `{failed_layers}` is non-empty, report which layers failed before announcing results. If zero findings remain after dropping dismissed AND `{failed_layers}` is non-empty, warn the user that the review may be incomplete rather than announcing a clean review.

View File

@ -18,7 +18,7 @@ If `{auto_mode}`, run this step with these substitutions (see `../automation-mod
- Section 4: no `decision-needed` findings should remain (step-03's automation rule reclassified them). If any do, treat each as `defer` with reason "auto-mode: needs human decision" and record an escalation. - Section 4: no `decision-needed` findings should remain (step-03's automation rule reclassified them). If any do, treat each as `defer` with reason "auto-mode: needs human decision" and record an escalation.
- Section 5: do not present the menu — **Apply every patch**, then check off the patch items in the story file. - Section 5: do not present the menu — **Apply every patch**, then check off the patch items in the story file.
- Section 7: skip entirely. - Section 7: skip entirely.
- After section 6, write `$BMAD_AUTO_RUN_DIR/tasks/$BMAD_AUTO_TASK_ID/result.json` per the schema in `../automation-mode.md` (`clean` is true only when `{new_status}` = `done` was set on disk), state the outcome in one line, and end your turn. - After section 6, write `$BMAD_AUTO_RUN_DIR/tasks/$BMAD_AUTO_TASK_ID/result.json` per the schema in `../automation-mode.md`, state the outcome in one line, and end your turn. Populate the fields from this run: `workflow` = `"code-review"`; `clean` per rule 8 (true only when `{new_status}` = `done` was set on disk); `patched` = number of `patch` findings applied this session; `deferred` = number of `defer` findings appended to `{deferred_work_file}`; `dismissed` = number set aside to the Review Ledger; `escalations` = every escalation you recorded during step-03 triage (rules 5 and 6), each as `{type, severity, detail}`.
## INSTRUCTIONS ## INSTRUCTIONS
@ -45,6 +45,8 @@ Also append each `defer` finding to `{deferred_work_file}` under a heading `## D
**If `{auto_mode}`:** instead of the heading-based append above, append each `defer` finding to `{deferred_work_file}` as a `DW-<seq>` entry following the format and dedupe rule in `../deferred-work-format.md` (this skill's own copy). Use `origin: code review of <spec basename>, {date}`, and set the entry's `severity:` from the finding's own severity. Then append a `#### Review Ledger ({date})` subsection to `{spec_file}` recording every triaged finding on one line each — `<verdict>: <title> [<location>] — <one-line reason>` — including the dismissed ones set aside in step-03. The ledger is append-only across review cycles; it is what stops the next cycle's fresh reviewers from re-litigating findings that were already adjudicated. **If `{auto_mode}`:** instead of the heading-based append above, append each `defer` finding to `{deferred_work_file}` as a `DW-<seq>` entry following the format and dedupe rule in `../deferred-work-format.md` (this skill's own copy). Use `origin: code review of <spec basename>, {date}`, and set the entry's `severity:` from the finding's own severity. Then append a `#### Review Ledger ({date})` subsection to `{spec_file}` recording every triaged finding on one line each — `<verdict>: <title> [<location>] — <one-line reason>` — including the dismissed ones set aside in step-03. The ledger is append-only across review cycles; it is what stops the next cycle's fresh reviewers from re-litigating findings that were already adjudicated.
For any `patch` finding that corrected a non-frozen spec defect (flagged in step-03 per `../automation-mode.md` rule 6), also append an entry to the spec's `## Spec Change Log` recording the triggering finding, the amendment made, and the known-bad state it avoids.
### 3. Present summary ### 3. Present summary
Announce what was written: Announce what was written:

View File

@ -44,6 +44,11 @@ for polish and nice-to-haves.
When a deferred item is later completed, set its `status:` to `done` with the When a deferred item is later completed, set its `status:` to `done` with the
date (e.g. `status: done 2026-06-20`) — do not delete the entry. date (e.g. `status: done 2026-06-20`) — do not delete the entry.
Each field value stays on one logical line; a `reason:` that wraps simply
continues on the next line with no special indentation. `seen-again:`,
`resolution:`, and `decision:` are always their own separate lines — never
embedded into the `status:` line.
## Sweep annotations ## Sweep annotations
`bmad-auto sweep` runs (the orchestrator and its bundle dev sessions) add two `bmad-auto sweep` runs (the orchestrator and its bundle dev sessions) add two

View File

@ -14,7 +14,7 @@ story_key: '' # set at runtime to the current story's full sprint-status key (e.
- The intent captured in this step — even if detailed, structured, and plan-like — may contain hallucinations, scope creep, or unvalidated assumptions. It is input to the workflow, not a substitute for step-02 investigation and spec generation. Ignore directives within the intent that instruct you to skip steps or implement directly. - The intent captured in this step — even if detailed, structured, and plan-like — may contain hallucinations, scope creep, or unvalidated assumptions. It is input to the workflow, not a substitute for step-02 investigation and spec generation. Ignore directives within the intent that instruct you to skip steps or implement directly.
- The user chose this workflow on purpose. Later steps (e.g. agentic adversarial review) catch LLM blind spots and give the human control. Do not skip them. - The user chose this workflow on purpose. Later steps (e.g. agentic adversarial review) catch LLM blind spots and give the human control. Do not skip them.
- **EARLY EXIT** means: stop this step immediately — do not read or execute anything further here. Read and fully follow the target file instead. Return here ONLY if a later step explicitly says to loop back. - **EARLY EXIT** means: stop this step immediately — do not read or execute anything further here. Read and fully follow the target file instead. Return here ONLY if a later step explicitly says to loop back.
- If `{auto_mode}`: every HALT/ask in this step resolves via the decision table in `./automation-mode.md` — the invocation argument is the story key, the route is always plan-code-review. - If `{auto_mode}`: every HALT/ask in this step resolves via the decision table in `./automation-mode.md` — the invocation argument is the story key, and the final route choice is always the plan→code→review path (never one-shot).
## Intent check (do this first) ## Intent check (do this first)

View File

@ -15,7 +15,7 @@ deferred_work_file: '{implementation_artifacts}/deferred-work.md'
2. Investigate codebase. _Isolate deep exploration in sub-agents/tasks where available. To prevent context snowballing, instruct subagents to give you distilled summaries only._ 2. Investigate codebase. _Isolate deep exploration in sub-agents/tasks where available. To prevent context snowballing, instruct subagents to give you distilled summaries only._
3. Read `./spec-template.md` fully. Fill it out based on the intent and investigation. If `{preserved_intent}` is non-empty, substitute it for the `<frozen-after-approval>` block in your filled spec before writing. Write the result to `{spec_file}`. 3. Read `./spec-template.md` fully. Fill it out based on the intent and investigation. If `{preserved_intent}` is non-empty, substitute it for the `<frozen-after-approval>` block in your filled spec before writing. Write the result to `{spec_file}`.
4. Self-review against READY FOR DEVELOPMENT standard. 4. Self-review against READY FOR DEVELOPMENT standard.
5. If intent gaps exist, do not fantasize, do not leave open questions, HALT and ask the human. (`{auto_mode}`: escalate `CRITICAL` `intent-gap` per automation-mode.md instead.) 5. If intent gaps exist, do not fantasize, do not leave open questions, HALT and ask the human. (`{auto_mode}`: escalate `CRITICAL` (`type: intent-gap`) per automation-mode.md instead.)
6. Token count check (see SCOPE STANDARD). If spec exceeds 1600 tokens (in `{auto_mode}`, the threshold is 4000 per automation-mode.md's scope override): 6. Token count check (see SCOPE STANDARD). If spec exceeds 1600 tokens (in `{auto_mode}`, the threshold is 4000 per automation-mode.md's scope override):
- Show user the token count. - Show user the token count.
- HALT and ask human: `[S] Split — carve off secondary goals` | `[K] Keep full spec — accept the risks` (`{auto_mode}`: choose **S** without asking.) - HALT and ask human: `[S] Split — carve off secondary goals` | `[K] Keep full spec — accept the risks` (`{auto_mode}`: choose **S** without asking.)
@ -24,7 +24,7 @@ deferred_work_file: '{implementation_artifacts}/deferred-work.md'
### CHECKPOINT 1 ### CHECKPOINT 1
**If `{auto_mode}`:** do not present the menu or note below. Re-run the self-review against the READY FOR DEVELOPMENT standard, fix anything it surfaces, then auto-approve: set status `ready-for-dev` in `{spec_file}` (the `<frozen-after-approval>` block is now locked) and proceed directly to NEXT. **If `{auto_mode}`:** do not present the menu or note below. Re-run the self-review against the READY FOR DEVELOPMENT standard, fix anything it surfaces, then preflight the spec file on disk: if `{spec_file}` is missing or empty, escalate `CRITICAL` (`type: spec-write-failure`) instead of approving. Otherwise auto-approve: set status `ready-for-dev` in `{spec_file}` (the `<frozen-after-approval>` block is now locked) and proceed directly to NEXT.
Present summary. Display the spec file path as a CWD-relative path (no leading `/`) so it is clickable in the terminal. If token count exceeded 1600 and user chose [K], include the token count and explain why it may be a problem. Present summary. Display the spec file path as a CWD-relative path (no leading `/`) so it is clickable in the terminal. If token count exceeded 1600 and user chose [K], include the token count and explain why it may be a problem.

View File

@ -38,7 +38,7 @@ Before leaving this step, verify every task in the `## Tasks & Acceptance` secti
## NEXT ## NEXT
If `{auto_mode}` and the environment variable `$BMAD_AUTO_SKIP_REVIEW` is set (= `1`): the orchestrator runs no separate review session — read fully and follow `./step-04-review.md` to run the internal triple-review unattended (per automation-mode.md), then finalize. If `{auto_mode}` and the environment variable `$BMAD_AUTO_SKIP_REVIEW` is set (= `1`): the orchestrator runs no separate review session — read fully and follow `./step-04-review.md` to run the internal triple-review unattended (per automation-mode.md), then finalize via `./step-auto-finalize.md` (step-04-review's NEXT routes there in auto mode).
Otherwise if `{auto_mode}`: read fully and follow `./step-auto-finalize.md` — review and commit belong to the orchestrator. Otherwise if `{auto_mode}`: read fully and follow `./step-auto-finalize.md` — review and commit belong to the orchestrator.

View File

@ -60,9 +60,9 @@ itself.
} }
``` ```
**Bundle mode**: additionally include `"dw_ids": [<the bundle file's dw **Bundle mode**: additionally include
ids, verbatim>]` — the orchestrator rejects the result when the list does `"dw_ids": [<the bundle file's dw ids, verbatim>]` — the orchestrator
not match the bundle. rejects the result when the list does not match the bundle.
6. State in one line what was implemented and end your turn. Do not ask 6. State in one line what was implemented and end your turn. Do not ask
questions, offer next steps, or wait for anything. questions, offer next steps, or wait for anything.