bmad-method 6.11.1-next.17 → 6.11.1-next.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "bmad-method",
4
- "version": "6.11.1-next.17",
4
+ "version": "6.11.1-next.18",
5
5
  "description": "Breakthrough Method of Agile AI-driven Development",
6
6
  "keywords": [
7
7
  "agile",
@@ -74,6 +74,8 @@ Launch a context-free subagent with this prompt:
74
74
 
75
75
  Read `{skill-root}/review-prompts/edge-case-hunter.md` completely and follow it as your review instructions.
76
76
 
77
+ claims_file (leave unread until your instructions call for it): {claims_file}
78
+
77
79
  Review content:
78
80
 
79
81
  {diff_output}
@@ -0,0 +1,14 @@
1
+ # Claims Check
2
+
3
+ Final pass for the Edge Case Hunter — runs only when the message that launched you named a claims file. Read that file now, for the first time; the path tracing is finished and the claims cannot steer it retroactively.
4
+
5
+ The file holds the change's own narrative — commit messages and any stated description. The narrative is the author's testimony, not evidence: a claim repeated in a code comment is still the same claim, not confirmation. Extract each checkable claim — what the change does, what it preserves, ordering, arithmetic, and parity with existing code ("exactly as X does") — then try to falsify each one against the code you have already traced. Where your trace is not enough to decide, read the code that decides it: the compared-to function, the actual callee, the state the claim assumes.
6
+
7
+ Append one finding per falsified claim to the same JSON array, with the four standard fields plus:
8
+
9
+ - `kind`: `"claim"`
10
+ - `confidence`: `"high"`, `"medium"`, or `"low"`
11
+
12
+ For a claim finding the standard fields read as: `location` = where the code contradicts the claim; `trigger_condition` = the claim, quoted or tightly paraphrased; `guard_snippet` = what the code actually does; `potential_consequence` = what goes wrong for someone who believed the claim.
13
+
14
+ Verified claims produce nothing. Add nothing if nothing is falsified.
@@ -5,10 +5,12 @@ When a diff is provided, scan only the diff hunks and list boundaries that are d
5
5
  When no diff is provided (full file or function), treat the entire provided content as the scope.
6
6
  Ignore the rest of the codebase unless the provided content explicitly references external functions.
7
7
  A brief secondary deletion check runs as Step 4 when the diff removes code.
8
+ A claims check runs as Step 5 when the launch message names a claims file.
8
9
 
9
10
  **Inputs:**
10
11
  - **content** — Content to review: diff, full file, or function
11
12
  - **also_consider** (optional) — Areas to keep in mind during review alongside normal edge-case analysis
13
+ - **claims_file** (optional) — Path to the change's stated narrative. Do NOT read it before Step 5: the path tracing in Steps 2–3 must finish before the narrative is seen.
12
14
 
13
15
  **MANDATORY: Execute steps in the Execution section IN EXACT ORDER. DO NOT skip steps or change the sequence. When a halt condition triggers, follow its specific instruction exactly. Each action within a step is a REQUIRED action to complete that step.**
14
16
 
@@ -42,7 +44,11 @@ A brief secondary deletion check runs as Step 4 when the diff removes code.
42
44
 
43
45
  If the diff removed or replaced meaningful code (ignore pure renames and whitespace): load `references/deletion-check.md` and follow it.
44
46
 
45
- ### Step 5: Present Findings
47
+ ### Step 5: Claims Check
48
+
49
+ If the launch message provided a `claims_file` path and the file exists and is non-empty: load `references/claims-check.md` and follow it.
50
+
51
+ ### Step 6: Present Findings
46
52
 
47
53
  Output all findings as a single JSON array following the Output Format specification exactly.
48
54
 
@@ -60,7 +66,7 @@ Return ONLY a valid JSON array of objects. Each edge-case finding contains exact
60
66
  }]
61
67
  ```
62
68
 
63
- No extra text, no explanations, no markdown wrapping. An empty array `[]` is valid when nothing is found. Deletion findings from Step 4, if any, go in the same array with the extra fields defined in `references/deletion-check.md`.
69
+ No extra text, no explanations, no markdown wrapping. An empty array `[]` is valid when nothing is found. Deletion findings from Step 4 and claim findings from Step 5, if any, go in the same array with the extra fields defined in `references/deletion-check.md` and `references/claims-check.md`.
64
70
 
65
71
 
66
72
  ## HALT CONDITIONS
@@ -82,6 +88,22 @@ For a deletion finding the standard fields read as: `location` = the removed ite
82
88
 
83
89
  Add nothing if nothing qualifies.
84
90
  </reference>
91
+ <reference path="references/claims-check.md">
92
+ # Claims Check
93
+
94
+ Final pass for the Edge Case Hunter — runs only when the message that launched you named a claims file. Read that file now, for the first time; the path tracing is finished and the claims cannot steer it retroactively.
95
+
96
+ The file holds the change's own narrative — commit messages and any stated description. The narrative is the author's testimony, not evidence: a claim repeated in a code comment is still the same claim, not confirmation. Extract each checkable claim — what the change does, what it preserves, ordering, arithmetic, and parity with existing code ("exactly as X does") — then try to falsify each one against the code you have already traced. Where your trace is not enough to decide, read the code that decides it: the compared-to function, the actual callee, the state the claim assumes.
97
+
98
+ Append one finding per falsified claim to the same JSON array, with the four standard fields plus:
99
+
100
+ - `kind`: `"claim"`
101
+ - `confidence`: `"high"`, `"medium"`, or `"low"`
102
+
103
+ For a claim finding the standard fields read as: `location` = where the code contradicts the claim; `trigger_condition` = the claim, quoted or tightly paraphrased; `guard_snippet` = what the code actually does; `potential_consequence` = what goes wrong for someone who believed the claim.
104
+
105
+ Verified claims produce nothing. Add nothing if nothing is falsified.
106
+ </reference>
85
107
 
86
108
  ## CONTENT SOURCE
87
109
 
@@ -1,5 +1,6 @@
1
1
  ---
2
2
  diff_output: '' # set at runtime
3
+ claims_file: '' # set at runtime (path or empty)
3
4
  spec_file: '' # set at runtime (path or empty)
4
5
  review_mode: '' # set at runtime: "full" or "no-spec"
5
6
  story_key: '' # set at runtime when discovered from sprint status
@@ -66,7 +67,9 @@ story_key: '' # set at runtime when discovered from sprint status
66
67
  - For **file list**: validate each path exists in the working tree. Construct `{diff_output}` by running `git diff HEAD -- <path1> <path2> ...`. If any paths are untracked (new files not yet staged), use `git diff --no-index /dev/null <path>` to include them. If the diff is empty (files have no uncommitted changes and are not untracked), ask the user whether to review the full file contents or to specify a different baseline.
67
68
  - After constructing `{diff_output}`, verify it is non-empty regardless of source type. If empty, HALT and tell the user there is nothing to review.
68
69
 
69
- 4. **Set the spec context.**
70
+ 4. **Stage the claims file.** Collect the change's own narrative: for a branch diff or commit range, the commit messages it covers (`git log <base>..<head>`); for other sources, whatever description of the change the user or conversation supplied. Write it verbatim to a file in the system temp directory and set `{claims_file}` to its path. If there is no narrative, set `{claims_file}` = `''`. Do not analyze or summarize the narrative — it is input for one review layer, staged as a file precisely so the other layers never see it.
71
+
72
+ 5. **Set the spec context.**
70
73
  - If the triggering request or recent conversation **explicitly** states there is no spec (e.g. "no spec", "without a spec", "no-spec"): set `{review_mode}` = `"no-spec"` and clear `{spec_file}` (set it to `''`). Do **not** ask for a spec. Do **not** infer no-spec mode merely because the invocation omitted a spec path.
71
74
  - Else if `{spec_file}` is already set (from Tier 1 or Tier 2): verify the file exists and is readable, then set `{review_mode}` = `"full"`.
72
75
  - Else (neither a spec path nor an explicit no-spec declaration is present): ask the user to choose:
@@ -75,9 +78,9 @@ story_key: '' # set at runtime when discovered from sprint status
75
78
  - If the user provides a path: set `{spec_file}` to that path, verify the file exists and is readable, then set `{review_mode}` = `"full"`.
76
79
  - If the user explicitly chooses to continue without a spec: set `{review_mode}` = `"no-spec"`.
77
80
 
78
- 5. If `{review_mode}` = `"full"` and the file at `{spec_file}` has a `context` field in its frontmatter listing additional docs, load each referenced document. Warn the user about any docs that cannot be found.
81
+ 6. If `{review_mode}` = `"full"` and the file at `{spec_file}` has a `context` field in its frontmatter listing additional docs, load each referenced document. Warn the user about any docs that cannot be found.
79
82
 
80
- 6. Sanity check: if `{diff_output}` exceeds approximately 3000 lines, warn the user and offer to chunk the review by file group.
83
+ 7. Sanity check: if `{diff_output}` exceeds approximately 3000 lines, warn the user and offer to chunk the review by file group.
81
84
  - If the user opts to chunk: agree on the first group, narrow `{diff_output}` accordingly, and list the remaining groups for the user to note for follow-up runs.
82
85
  - If the user declines: proceed as-is with the full diff.
83
86
 
@@ -21,7 +21,7 @@ failed_layers: '' # set at runtime: comma-separated list of layers that failed o
21
21
 
22
22
  If no layer is active, HALT with status `blocked` and blocking condition `no active review layers`.
23
23
 
24
- 3. Announce skipped layers first, then launch every active layer before handling any layer's result. Try running all active layers simultaneously: expand `{skill-root}` in each layer's `instruction` to this skill's absolute installed directory, then substitute the runtime placeholders (`{diff_output}`, `{spec_file}`). For an instruction that launches a reviewer subagent, launch that child with the prompt text after placeholder substitution; do not load the reviewer instruction file yourself. For any other customized instruction, execute it as written. Do not leave `{skill-root}` unresolved in a child prompt. If a layer's instruction requires subagents and subagents are not available, for each such layer write under `{implementation_artifacts}` the exact child prompt from that layer's instruction after placeholder substitution (not a path-only pointer), then HALT. Ask the user to run each in a separate session (ideally a different LLM) and paste back the findings. When findings are pasted, treat them as those layers' findings and resume from this point. This is the only allowed parent-side read of a reviewer instruction file.
24
+ 3. Announce skipped layers first, then launch every active layer before handling any layer's result. Try running all active layers simultaneously: expand `{skill-root}` in each layer's `instruction` to this skill's absolute installed directory, then substitute the runtime placeholders (`{diff_output}`, `{claims_file}`, `{spec_file}`). For an instruction that launches a reviewer subagent, launch that child with the prompt text after placeholder substitution; do not load the reviewer instruction file yourself. For any other customized instruction, execute it as written. Do not leave `{skill-root}` unresolved in a child prompt. If a layer's instruction requires subagents and subagents are not available, for each such layer write under `{implementation_artifacts}` the exact child prompt from that layer's instruction after placeholder substitution (not a path-only pointer), then HALT. Ask the user to run each in a separate session (ideally a different LLM) and paste back the findings. When findings are pasted, treat them as those layers' findings and resume from this point. This is the only allowed parent-side read of a reviewer instruction file.
25
25
 
26
26
  4. **Layer failure handling**: If any layer fails, times out, or returns empty results, append the layer's `name` to `{failed_layers}` (comma-separated) and proceed with findings from the remaining layers.
27
27