bmad-method 6.11.1-next.19 → 6.11.1-next.20
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 +1 -1
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/__pycache__/sprint_plan.cpython-311.pyc +0 -0
- package/src/bmm-skills/plan/bmad-sprint-planning/scripts/tests/__pycache__/test_sprint_plan.cpython-311-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/ship/bmad-code-review/customize.toml +7 -13
- package/src/bmm-skills/ship/bmad-code-review/review-prompts/edge-case-hunter.md +5 -5
- package/src/bmm-skills/ship/bmad-code-review/review-prompts/verification-gap.md +1 -1
- package/src/bmm-skills/ship/bmad-code-review/steps/step-01-gather-context.md +13 -12
- package/src/bmm-skills/ship/bmad-code-review/steps/step-02-review.md +1 -1
- package/src/bmm-skills/ship/bmad-retrospective/scripts/__pycache__/sprint_status.cpython-311.pyc +0 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/__pycache__/test_git_evidence.cpython-311-pytest-9.1.1.pyc +0 -0
- package/src/bmm-skills/ship/bmad-retrospective/scripts/tests/__pycache__/test_sprint_status.cpython-311-pytest-9.1.1.pyc +0 -0
- package/src/scripts/__pycache__/config_utils.cpython-311.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_config_utils.cpython-311.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_resolve_config.cpython-311.pyc +0 -0
- package/src/scripts/tests/__pycache__/test_resolve_customization.cpython-311.pyc +0 -0
package/package.json
CHANGED
package/src/bmm-skills/plan/bmad-sprint-planning/scripts/__pycache__/sprint_plan.cpython-311.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
@@ -40,8 +40,9 @@ on_complete = ""
|
|
|
40
40
|
|
|
41
41
|
# Review layers for the review step. `instruction` is the layer's whole
|
|
42
42
|
# execution recipe — subagents by default, but an override may run anything
|
|
43
|
-
# (e.g. an external reviewer via bash). {
|
|
44
|
-
# substituted at run time
|
|
43
|
+
# (e.g. an external reviewer via bash). {diff_file} and {spec_file} are
|
|
44
|
+
# substituted at run time; both are paths, and {diff_file} is the unified
|
|
45
|
+
# diff file the layer reads. `when` (optional) gates a layer; empty
|
|
45
46
|
# `instruction` disables it.
|
|
46
47
|
|
|
47
48
|
[[workflow.review_layers]]
|
|
@@ -57,8 +58,7 @@ Output a Markdown list of findings only — no severity, priority, or ranking.
|
|
|
57
58
|
If the content is empty, stop and say so.
|
|
58
59
|
If you have zero findings, re-check and keep thinking; do not stop with an empty list.
|
|
59
60
|
|
|
60
|
-
CONTENT:
|
|
61
|
-
{diff_output}
|
|
61
|
+
CONTENT: the unified diff at `{diff_file}`. Read that file — it is the content under review.
|
|
62
62
|
|
|
63
63
|
Do not invoke any skill, and do not spawn subagents of your own — you are the reviewer. Return your findings as text in your final message; do not route them through any findings-reporting tool the host may offer.
|
|
64
64
|
|
|
@@ -74,9 +74,7 @@ Read `{skill-root}/review-prompts/edge-case-hunter.md` completely and follow it
|
|
|
74
74
|
|
|
75
75
|
claims_file (leave unread until your instructions call for it): {claims_file}
|
|
76
76
|
|
|
77
|
-
Review content:
|
|
78
|
-
|
|
79
|
-
{diff_output}
|
|
77
|
+
Review content: the unified diff at `{diff_file}`. Read that file — it is the content under review.
|
|
80
78
|
|
|
81
79
|
Do not invoke any skill, and do not spawn subagents of your own — you are the reviewer. If the instruction file is unreadable, report that exact failure and stop. Return your findings as text in your final message; do not route them through any findings-reporting tool the host may offer.
|
|
82
80
|
|
|
@@ -90,9 +88,7 @@ Launch a context-free subagent with this prompt:
|
|
|
90
88
|
|
|
91
89
|
Read `{skill-root}/review-prompts/verification-gap.md` completely and follow it as your review instructions.
|
|
92
90
|
|
|
93
|
-
Review content:
|
|
94
|
-
|
|
95
|
-
{diff_output}
|
|
91
|
+
Review content: the unified diff at `{diff_file}`. Read that file — it is the content under review.
|
|
96
92
|
|
|
97
93
|
Do not invoke any skill, and do not spawn subagents of your own — you are the reviewer. If the instruction file is unreadable, report that exact failure and stop. Return your findings as text in your final message; do not route them through any findings-reporting tool the host may offer.
|
|
98
94
|
|
|
@@ -107,9 +103,7 @@ Launch a subagent with this prompt:
|
|
|
107
103
|
|
|
108
104
|
You are an Acceptance Auditor. Review the provided diff against `{spec_file}` and any loaded context docs. Check for: violations of acceptance criteria, deviations from spec intent, missing implementation of specified behavior, contradictions between spec constraints and actual code. Output findings as a Markdown list. Each finding: one-line title, which AC/constraint it violates, and evidence from the diff.
|
|
109
105
|
|
|
110
|
-
Diff:
|
|
111
|
-
|
|
112
|
-
{diff_output}
|
|
106
|
+
Diff: the unified diff at `{diff_file}`. Read that file — it is the content under review.
|
|
113
107
|
|
|
114
108
|
Do not invoke any skill, and do not spawn subagents of your own — you are the reviewer. Return your findings as text in your final message; do not route them through any findings-reporting tool the host may offer.
|
|
115
109
|
|
|
@@ -8,7 +8,7 @@ A brief secondary deletion check runs as Step 4 when the diff removes code.
|
|
|
8
8
|
A claims check runs as Step 5 when the launch message names a claims file.
|
|
9
9
|
|
|
10
10
|
**Inputs:**
|
|
11
|
-
- **content** — Content to review: diff, full file, or function
|
|
11
|
+
- **content** — Content to review, or a path to read it from: diff, full file, or function
|
|
12
12
|
- **also_consider** (optional) — Areas to keep in mind during review alongside normal edge-case analysis
|
|
13
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.
|
|
14
14
|
|
|
@@ -21,8 +21,8 @@ A claims check runs as Step 5 when the launch message names a claims file.
|
|
|
21
21
|
|
|
22
22
|
### Step 1: Receive Content
|
|
23
23
|
|
|
24
|
-
-
|
|
25
|
-
- If content is empty, or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
|
|
24
|
+
- Take the content to review from the parent message that launched you — inline, or by reading the file it points to (never from this instruction file)
|
|
25
|
+
- If no content is supplied, or it is empty, unreadable, or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
|
|
26
26
|
- Identify content type (diff, full file, or function) to determine scope rules
|
|
27
27
|
|
|
28
28
|
### Step 2: Exhaustive Path Analysis
|
|
@@ -71,7 +71,7 @@ No extra text, no explanations, no markdown wrapping. An empty array `[]` is val
|
|
|
71
71
|
|
|
72
72
|
## HALT CONDITIONS
|
|
73
73
|
|
|
74
|
-
- If content is empty or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
|
|
74
|
+
- If no content is supplied, or it is empty, unreadable, or cannot be decoded as text, return `[{"location":"N/A","trigger_condition":"Input empty or undecodable","guard_snippet":"Provide valid content to review","potential_consequence":"Review skipped — no analysis performed"}]` and stop
|
|
75
75
|
<reference path="references/deletion-check.md">
|
|
76
76
|
# Deletion Check
|
|
77
77
|
|
|
@@ -107,4 +107,4 @@ Verified claims produce nothing. Add nothing if nothing is falsified.
|
|
|
107
107
|
|
|
108
108
|
## CONTENT SOURCE
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
"Review content:" in the message that launched you gives the content itself or a path to read it from. Read the file when it is a path; either way that is the content under review, and this instruction file never is.
|
|
@@ -110,4 +110,4 @@ When you find no verification gaps and no other findings, output exactly this si
|
|
|
110
110
|
|
|
111
111
|
## CONTENT SOURCE
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
"Review content:" in the message that launched you gives the content itself or a path to read it from. Read the file when it is a path; either way that is the content under review, and this instruction file never is. If no content is supplied, or it is empty or unreadable, stop with exactly: `No verification gaps found.`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
diff_file: '' # set at runtime: path to the diff file
|
|
3
3
|
claims_file: '' # set at runtime (path or empty)
|
|
4
4
|
spec_file: '' # set at runtime (path or empty)
|
|
5
5
|
review_mode: '' # set at runtime: "full" or "no-spec"
|
|
@@ -12,7 +12,7 @@ story_key: '' # set at runtime when discovered from sprint status
|
|
|
12
12
|
|
|
13
13
|
- YOU MUST ALWAYS SPEAK OUTPUT in your Agent communication style with the config `{communication_language}`
|
|
14
14
|
- The prompt that triggered this workflow IS the intent — not a hint.
|
|
15
|
-
-
|
|
15
|
+
- Writing `{diff_file}` and creating its directory is the only change this step may make. Otherwise it is read-only.
|
|
16
16
|
|
|
17
17
|
## INSTRUCTIONS
|
|
18
18
|
|
|
@@ -58,14 +58,15 @@ story_key: '' # set at runtime when discovered from sprint status
|
|
|
58
58
|
- **Specific commit range** (ask for the range)
|
|
59
59
|
- **Provided diff or file list** (user pastes or provides a path)
|
|
60
60
|
|
|
61
|
-
3.
|
|
62
|
-
- For **staged changes only**: run `git diff --cached`.
|
|
63
|
-
- For **uncommitted changes** (staged + unstaged): run `git diff HEAD`.
|
|
64
|
-
- For **branch diff**: verify the base branch exists
|
|
65
|
-
- For **commit range**: verify the range resolves
|
|
66
|
-
- For **provided diff**: validate the content is non-empty and parseable as a unified diff. If it is not parseable, HALT and ask the user to provide a valid diff.
|
|
67
|
-
- For **file list**: validate each path exists in the working tree.
|
|
68
|
-
- After
|
|
61
|
+
3. Write the diff for the chosen source to `{diff_file}` = `{implementation_artifacts}/code-review.diff`, creating `{implementation_artifacts}` first if it does not exist. The review layers read that file; the diff text is never pasted into their prompts.
|
|
62
|
+
- For **staged changes only**: run `git diff --cached > {diff_file}`.
|
|
63
|
+
- For **uncommitted changes** (staged + unstaged): run `git diff HEAD > {diff_file}`.
|
|
64
|
+
- For **branch diff**: verify the base branch exists, then run `git diff <base-branch>...HEAD > {diff_file}`. If it does not exist, HALT and ask the user for a valid branch.
|
|
65
|
+
- For **commit range**: verify the range resolves, then run `git diff <range> > {diff_file}`. If it does not resolve, HALT and ask the user for a valid range.
|
|
66
|
+
- For **provided diff**: validate the content is non-empty and parseable as a unified diff. If it is not parseable, HALT and ask the user to provide a valid diff. Write the validated diff to `{diff_file}`.
|
|
67
|
+
- For **file list**: validate each path exists in the working tree. Run `git diff HEAD -- <path1> <path2> ... > {diff_file}`. If any paths are untracked (new files not yet staged), append them with `git diff --no-index /dev/null <path> >> {diff_file}`. 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.
|
|
68
|
+
- After writing `{diff_file}`, verify it is non-empty regardless of source type. If empty, HALT and tell the user there is nothing to review.
|
|
69
|
+
- Read `{diff_file}` yourself whenever you need the diff for your own context — triage and presentation later in this workflow.
|
|
69
70
|
|
|
70
71
|
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
|
|
|
@@ -80,8 +81,8 @@ story_key: '' # set at runtime when discovered from sprint status
|
|
|
80
81
|
|
|
81
82
|
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.
|
|
82
83
|
|
|
83
|
-
7. Sanity check: if `{
|
|
84
|
-
- If the user opts to chunk: agree on the first group,
|
|
84
|
+
7. Sanity check: if `wc -l {diff_file}` exceeds approximately 3000 lines, warn the user and offer to chunk the review by file group.
|
|
85
|
+
- If the user opts to chunk: agree on the first group, rebuild `{diff_file}` narrowed to that group, and list the remaining groups for the user to note for follow-up runs.
|
|
85
86
|
- If the user declines: proceed as-is with the full diff.
|
|
86
87
|
|
|
87
88
|
### CHECKPOINT
|
|
@@ -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 (`{
|
|
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_file}`, `{claims_file}`, `{spec_file}`). `{diff_file}` is a path: substitute the path itself and let the layer read the file — a launch prompt never carries diff text. 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, and resolve `{diff_file}` to an absolute path — the child's working directory is not yours. If a layer's instruction requires subagents and subagents are not available, for each such layer write under `{implementation_artifacts}` that layer's child prompt with everything after its content label replaced by the contents of `{diff_file}` (not a path-only pointer) — that session may not share this filesystem, so its prompt must be self-contained. 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
|
|
package/src/bmm-skills/ship/bmad-retrospective/scripts/__pycache__/sprint_status.cpython-311.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|