bmad-method 6.11.1-next.17 → 6.11.1-next.19
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/agents/bmad-agent-analyst/customize.toml +1 -3
- package/src/bmm-skills/agents/bmad-agent-architect/customize.toml +1 -3
- package/src/bmm-skills/agents/bmad-agent-dev/customize.toml +1 -3
- package/src/bmm-skills/agents/bmad-agent-pm/customize.toml +1 -3
- package/src/bmm-skills/agents/bmad-agent-ux-designer/customize.toml +1 -3
- package/src/bmm-skills/plan/bmad-architecture/SKILL.md +1 -1
- package/src/bmm-skills/plan/bmad-architecture/customize.toml +5 -6
- package/src/bmm-skills/plan/bmad-create-epics-and-stories/customize.toml +1 -3
- package/src/bmm-skills/plan/bmad-prd/customize.toml +5 -6
- package/src/bmm-skills/plan/bmad-prfaq/customize.toml +1 -3
- package/src/bmm-skills/plan/bmad-product-brief/customize.toml +5 -6
- package/src/bmm-skills/plan/bmad-spec/customize.toml +5 -5
- package/src/bmm-skills/plan/bmad-sprint-planning/customize.toml +1 -3
- 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/plan/bmad-ux/customize.toml +1 -3
- package/src/bmm-skills/ship/bmad-build/customize.toml +1 -3
- package/src/bmm-skills/ship/bmad-build-auto/customize.toml +1 -3
- package/src/bmm-skills/ship/bmad-checkpoint-preview/customize.toml +1 -3
- package/src/bmm-skills/ship/bmad-code-review/customize.toml +3 -3
- package/src/bmm-skills/ship/bmad-code-review/references/claims-check.md +14 -0
- package/src/bmm-skills/ship/bmad-code-review/review-prompts/edge-case-hunter.md +24 -2
- package/src/bmm-skills/ship/bmad-code-review/steps/step-01-gather-context.md +6 -3
- package/src/bmm-skills/ship/bmad-code-review/steps/step-02-review.md +1 -1
- package/src/bmm-skills/ship/bmad-correct-course/customize.toml +1 -3
- package/src/bmm-skills/ship/bmad-qa-generate-e2e-tests/customize.toml +1 -3
- package/src/bmm-skills/ship/bmad-retrospective/customize.toml +1 -3
- 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/bmm-skills/v6-shims/bmad-create-architecture/customize.toml +1 -3
- package/src/bmm-skills/v6-shims/bmad-create-prd/customize.toml +1 -3
- package/src/bmm-skills/v6-shims/bmad-create-story/SKILL.md +1 -1
- package/src/bmm-skills/v6-shims/bmad-create-story/customize.toml +1 -3
- package/src/bmm-skills/v6-shims/bmad-dev-story/customize.toml +1 -6
- package/src/bmm-skills/v6-shims/bmad-edit-prd/customize.toml +1 -3
- package/src/bmm-skills/v6-shims/bmad-sprint-status/customize.toml +1 -3
- package/src/bmm-skills/v6-shims/bmad-validate-prd/customize.toml +1 -3
- package/src/core-skills/bmad-brainstorming/customize.toml +5 -6
- package/src/core-skills/bmad-forge-idea/customize.toml +5 -6
- package/src/core-skills/bmad-party-mode/customize.toml +4 -4
- package/src/core-skills/bmad-review/customize.toml +1 -1
- 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
|
@@ -35,9 +35,7 @@ activation_steps_append = []
|
|
|
35
35
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
36
36
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
37
37
|
|
|
38
|
-
persistent_facts = [
|
|
39
|
-
"file:{project-root}/**/project-context.md",
|
|
40
|
-
]
|
|
38
|
+
persistent_facts = []
|
|
41
39
|
|
|
42
40
|
role = "Help the user ideate research and analyze before committing to a project in the BMad Method analysis phase."
|
|
43
41
|
identity = "Channels Michael Porter's strategic rigor and Barbara Minto's Pyramid Principle discipline."
|
|
@@ -35,9 +35,7 @@ activation_steps_append = []
|
|
|
35
35
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
36
36
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
37
37
|
|
|
38
|
-
persistent_facts = [
|
|
39
|
-
"file:{project-root}/**/project-context.md",
|
|
40
|
-
]
|
|
38
|
+
persistent_facts = []
|
|
41
39
|
|
|
42
40
|
role = "Convert the PRD and UX into technical architecture decisions that keep implementation on track during the BMad Method solutioning phase."
|
|
43
41
|
identity = "Channels Martin Fowler's pragmatism and Werner Vogels's cloud-scale realism."
|
|
@@ -35,9 +35,7 @@ activation_steps_append = []
|
|
|
35
35
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
36
36
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
37
37
|
|
|
38
|
-
persistent_facts = [
|
|
39
|
-
"file:{project-root}/**/project-context.md",
|
|
40
|
-
]
|
|
38
|
+
persistent_facts = []
|
|
41
39
|
|
|
42
40
|
role = "Implement approved stories with test-first discipline and ship working, verified code during the BMad Method implementation phase."
|
|
43
41
|
identity = "Disciplined in Kent Beck's TDD and the Pragmatic Programmer's precision."
|
|
@@ -35,9 +35,7 @@ activation_steps_append = []
|
|
|
35
35
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
36
36
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
37
37
|
|
|
38
|
-
persistent_facts = [
|
|
39
|
-
"file:{project-root}/**/project-context.md",
|
|
40
|
-
]
|
|
38
|
+
persistent_facts = []
|
|
41
39
|
|
|
42
40
|
role = "Translate product vision into a validated PRD, epics, and stories that development can execute during the BMad Method planning phase."
|
|
43
41
|
identity = "Thinks like Marty Cagan and Teresa Torres. Writes with Bezos's six-pager discipline."
|
|
@@ -35,9 +35,7 @@ activation_steps_append = []
|
|
|
35
35
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
36
36
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
37
37
|
|
|
38
|
-
persistent_facts = [
|
|
39
|
-
"file:{project-root}/**/project-context.md",
|
|
40
|
-
]
|
|
38
|
+
persistent_facts = []
|
|
41
39
|
|
|
42
40
|
role = "Turn user needs and the PRD into UX design specifications that inform architecture and implementation during the BMad Method planning phase."
|
|
43
41
|
identity = "Grounded in Don Norman's human-centered design and Alan Cooper's persona discipline."
|
|
@@ -50,7 +50,7 @@ Writes go through the shared script (don't read the file back except on resume):
|
|
|
50
50
|
|
|
51
51
|
**Forwarded activation:** if a caller invoked you with a stated intent and pre-resolved customization fields, honor them verbatim — skip your own intent inference, use the supplied values for those named fields, and resolve only the remaining fields from your own `customize.toml`.
|
|
52
52
|
|
|
53
|
-
1. Resolve customization: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow` (on failure read `{skill-root}/customize.toml`, use defaults). Run `{workflow.activation_steps_prepend}`, then `{workflow.activation_steps_append}`. Hold `{workflow.persistent_facts}` as standing context —
|
|
53
|
+
1. Resolve customization: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow` (on failure read `{skill-root}/customize.toml`, use defaults). Run `{workflow.activation_steps_prepend}`, then `{workflow.activation_steps_append}`. Hold `{workflow.persistent_facts}` as standing context — empty unless the user opted in — and consult `{workflow.external_sources}` on demand.
|
|
54
54
|
2. Resolve config: `uv run {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root}` (merges `_bmad/config.toml`, `_bmad/config.user.toml`, and the `_bmad/custom/` overrides). From the merged JSON resolve `{user_name}`, `{communication_language}`, `{document_output_language}`, `{project_name}` (under `core`), `{planning_artifacts}` (under `modules.bmm`), and `{date}`; missing keys take neutral defaults, never block.
|
|
55
55
|
3. Headless (no interactive user) → follow `references/headless.md` for the whole run. Otherwise greet `{user_name}` in `{communication_language}`. Detect the intent from the conversation and input — **create** (the default), **update** an existing spine, or **validate** one (see those sections). If the real ask is requirements / UX / a capability contract / epic breakdown / an agent, invoke the `bmad-prd`, `bmad-ux`, `bmad-spec`, `bmad-create-epics-and-stories`, or `bmad-workflow-builder` (if the BMad Builder module is installed) skill instead.
|
|
56
56
|
4. If a run folder for this target already exists under `{workflow.spine_output_path}`, offer to resume from its memlog rather than restart.
|
|
@@ -24,14 +24,13 @@ activation_steps_append = []
|
|
|
24
24
|
# Each entry is either a literal sentence, a skill prefixed with `skill:`, or a `file:`-prefixed
|
|
25
25
|
# path/glob whose contents are loaded as facts.
|
|
26
26
|
#
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
27
|
+
# Empty by default. Repo-wide context belongs in AGENTS.md (see bmad-project-context), which every
|
|
28
|
+
# skill already sees; use this for context only this skill needs, loaded on demand rather than
|
|
29
|
+
# carried as constant memory. Common opt-ins (set in team/user override TOML):
|
|
30
30
|
# "Our org is AWS-only -- do not propose GCP or Azure."
|
|
31
31
|
# "file:{project-root}/docs/engineering-standards.md"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
]
|
|
32
|
+
# "file:{project-root}/**/project-context.md" # if you keep a project-context.md
|
|
33
|
+
persistent_facts = []
|
|
35
34
|
|
|
36
35
|
# Executed when the workflow completes (after the spine is final and the user has been told).
|
|
37
36
|
# String scalar (single instruction) or array of instructions executed in order. Empty for none.
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed when the workflow reaches Step 4 (Final Validation) and the
|
|
38
36
|
# user confirms [C] Complete — after the epics.md is saved and bmad-help is invoked.
|
|
@@ -24,14 +24,13 @@ activation_steps_append = []
|
|
|
24
24
|
# Each entry is either a literal sentence, a skill prefixed with `skill:`, or a `file:`-prefixed path/glob
|
|
25
25
|
# whose contents are loaded as facts.
|
|
26
26
|
#
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
27
|
+
# Empty by default. Repo-wide context belongs in AGENTS.md (see bmad-project-context), which every
|
|
28
|
+
# skill already sees; use this for context only this skill needs, loaded on demand rather than
|
|
29
|
+
# carried as constant memory. Common opt-ins (set in team/user override TOML):
|
|
30
|
+
# "file:{project-root}/**/project-context.md" # if you keep a project-context.md
|
|
30
31
|
# "skill:acme-co:terms-and-conditions" # a skill that contains some relevant info
|
|
31
32
|
# "Investor PRDs must include a market sizing section." # generic agent instruction
|
|
32
|
-
persistent_facts = [
|
|
33
|
-
"file:{project-root}/**/project-context.md",
|
|
34
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
35
34
|
|
|
36
35
|
# Executed when the workflow completes (after the user has been told the
|
|
37
36
|
# PRD is ready). Accepts either a string scalar (single instruction)
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed when the workflow reaches its terminal stage (Stage 5: The Verdict),
|
|
38
36
|
# after the PRFAQ and distillate have been delivered. Override wins. Leave empty for
|
|
@@ -24,14 +24,13 @@ activation_steps_append = []
|
|
|
24
24
|
# Each entry is either a literal sentence, a skill prefixed with `skill:`, or a `file:`-prefixed path/glob
|
|
25
25
|
# whose contents are loaded as facts.
|
|
26
26
|
#
|
|
27
|
-
#
|
|
28
|
-
#
|
|
29
|
-
#
|
|
27
|
+
# Empty by default. Repo-wide context belongs in AGENTS.md (see bmad-project-context), which every
|
|
28
|
+
# skill already sees; use this for context only this skill needs, loaded on demand rather than
|
|
29
|
+
# carried as constant memory. Common opt-ins (set in team/user override TOML):
|
|
30
|
+
# "file:{project-root}/**/project-context.md" # if you keep a project-context.md
|
|
30
31
|
# "skill:acme-co:terms-and-conditions" # a skill that contains some relevant info
|
|
31
32
|
# "Elvis has left the building" # generic agent instruction
|
|
32
|
-
persistent_facts = [
|
|
33
|
-
"file:{project-root}/**/project-context.md",
|
|
34
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
35
34
|
|
|
36
35
|
# Executed when the workflow completes (after the user has been told the
|
|
37
36
|
# brief is ready). Accepts either a string scalar (single instruction)
|
|
@@ -20,11 +20,11 @@ activation_steps_append = []
|
|
|
20
20
|
# Persistent facts the workflow keeps in mind for the whole run.
|
|
21
21
|
# Each entry is either a literal sentence, a skill prefixed with `skill:`,
|
|
22
22
|
# or a `file:`-prefixed path/glob whose contents are loaded as facts.
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
]
|
|
23
|
+
# Empty by default. Repo-wide context belongs in AGENTS.md (see bmad-project-context),
|
|
24
|
+
# which every skill already sees; use this for context only this skill needs, loaded on
|
|
25
|
+
# demand rather than carried as constant memory. Add a `file:` entry in team/user TOML to
|
|
26
|
+
# opt in (e.g. `file:{project-root}/**/project-context.md` if you keep one).
|
|
27
|
+
persistent_facts = []
|
|
28
28
|
|
|
29
29
|
# Executed when the workflow completes. Scalar or array of instructions.
|
|
30
30
|
on_complete = ""
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed when the workflow reaches its final step,
|
|
38
36
|
# after sprint-status.yaml is generated and validated. Override wins.
|
package/src/bmm-skills/plan/bmad-sprint-planning/scripts/__pycache__/sprint_plan.cpython-311.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
@@ -14,9 +14,7 @@ activation_steps_append = []
|
|
|
14
14
|
|
|
15
15
|
# Persistent facts loaded at activation and kept in mind for the run.
|
|
16
16
|
# Entries: literal sentence, `skill:NAME`, or `file:PATH` (glob ok).
|
|
17
|
-
persistent_facts = [
|
|
18
|
-
"file:{project-root}/**/project-context.md",
|
|
19
|
-
]
|
|
17
|
+
persistent_facts = []
|
|
20
18
|
|
|
21
19
|
# Runs at workflow completion. String or array of instructions.
|
|
22
20
|
on_complete = ""
|
|
@@ -24,9 +24,7 @@ activation_steps_append = []
|
|
|
24
24
|
# Entries are literal text or file references prefixed with "file:".
|
|
25
25
|
# File entries may use globs and are loaded during activation.
|
|
26
26
|
|
|
27
|
-
persistent_facts = [
|
|
28
|
-
"file:{project-root}/**/project-context.md",
|
|
29
|
-
]
|
|
27
|
+
persistent_facts = []
|
|
30
28
|
|
|
31
29
|
# Instruction run after Build completes.
|
|
32
30
|
# Empty means no extra completion behavior.
|
|
@@ -24,9 +24,7 @@ activation_steps_append = []
|
|
|
24
24
|
# Entries are literal text or file references prefixed with "file:".
|
|
25
25
|
# File entries may use globs and are loaded during activation.
|
|
26
26
|
|
|
27
|
-
persistent_facts = [
|
|
28
|
-
"file:{project-root}/**/project-context.md",
|
|
29
|
-
]
|
|
27
|
+
persistent_facts = []
|
|
30
28
|
|
|
31
29
|
# Instruction run by HALT after writing the terminal result.
|
|
32
30
|
# Empty means no extra terminal behavior.
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed when the workflow reaches its final step,
|
|
38
36
|
# after the review decision (approve/rework/discuss) is made. Override wins.
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed when the workflow reaches its final step,
|
|
38
36
|
# after review findings are presented and sprint status is synced. Override wins.
|
|
@@ -74,6 +72,8 @@ Launch a context-free subagent with this prompt:
|
|
|
74
72
|
|
|
75
73
|
Read `{skill-root}/review-prompts/edge-case-hunter.md` completely and follow it as your review instructions.
|
|
76
74
|
|
|
75
|
+
claims_file (leave unread until your instructions call for it): {claims_file}
|
|
76
|
+
|
|
77
77
|
Review content:
|
|
78
78
|
|
|
79
79
|
{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:
|
|
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. **
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed when the workflow reaches Step 6 (Workflow Completion),
|
|
38
36
|
# after the Sprint Change Proposal is finalized and handoff is confirmed. Override wins.
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed when the workflow reaches Step 5 (Create Summary),
|
|
38
36
|
# after all tests pass and the summary document is saved. Override wins.
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed at the end of Phase 5 (Close), after the retrospective
|
|
38
36
|
# document is saved and sprint-status is updated. Override wins.
|
package/src/bmm-skills/ship/bmad-retrospective/scripts/__pycache__/sprint_status.cpython-311.pyc
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed when the workflow reaches Step 8 (Architecture Completion & Handoff),
|
|
38
36
|
# after the architecture document frontmatter is updated and next-steps guidance is given.
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed when the workflow reaches Step 12 (Workflow Completion),
|
|
38
36
|
# after the PRD is finalized and workflow status is updated. Override wins.
|
|
@@ -257,7 +257,7 @@ Activation is complete. If `activation_steps_prepend` or `activation_steps_appen
|
|
|
257
257
|
|
|
258
258
|
<!-- Load all available content through discovery protocol -->
|
|
259
259
|
<action>Read fully and follow `./discover-inputs.md` to load all input files</action>
|
|
260
|
-
<note>Available content: {epics_content}, {prd_content}, {architecture_content}, {ux_content}, plus
|
|
260
|
+
<note>Available content: {epics_content}, {prd_content}, {architecture_content}, {ux_content}, plus any facts loaded during activation via `persistent_facts` (empty unless the user opted in).</note>
|
|
261
261
|
|
|
262
262
|
<!-- Analyze epics file for story foundation -->
|
|
263
263
|
<action>From {epics_content}, extract Epic {{epic_num}} complete context:</action> **EPIC ANALYSIS:** - Epic
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed when the workflow reaches Step 6 (Update sprint status and finalize),
|
|
38
36
|
# after the story file is saved and sprint-status.yaml is updated. Override wins.
|
|
@@ -30,12 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
"Never add epic or story references as inline code comments (e.g. # Epic: X, # Story: PROJ-42).",
|
|
36
|
-
"Code comments explain why, not what — no AI workflow metadata, planning refs, or story tracking in source code.",
|
|
37
|
-
"Generated code must be production-ready: clean, minimal, and free of AI-generated noise.",
|
|
38
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
39
34
|
|
|
40
35
|
# Scalar: executed when the workflow reaches its final step,
|
|
41
36
|
# after the story implementation is complete and status is updated. Override wins.
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed when the workflow reaches Step E-4 (Complete & Validate) and the
|
|
38
36
|
# user exits via [S] Summary or [X] Exit — not on [V] Validate (which chains to
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed when the workflow reaches its final step,
|
|
38
36
|
# after sprint status is summarized and risks are surfaced. Override wins.
|
|
@@ -30,9 +30,7 @@ activation_steps_append = []
|
|
|
30
30
|
# - a file reference prefixed with `file:`, e.g. "file:{project-root}/docs/standards.md"
|
|
31
31
|
# (glob patterns are supported; the file's contents are loaded and treated as facts).
|
|
32
32
|
|
|
33
|
-
persistent_facts = [
|
|
34
|
-
"file:{project-root}/**/project-context.md",
|
|
35
|
-
]
|
|
33
|
+
persistent_facts = []
|
|
36
34
|
|
|
37
35
|
# Scalar: executed when the workflow reaches Step 13 (Validation Report Complete) and
|
|
38
36
|
# the user exits via [X] Exit — not on [E] Use Edit Workflow (which chains to
|
|
@@ -22,12 +22,11 @@ activation_steps_append = []
|
|
|
22
22
|
# Persistent facts the facilitator keeps in mind for the whole session
|
|
23
23
|
# (domain constraints, house rules, stylistic guardrails). Each entry is a
|
|
24
24
|
# literal sentence, a skill prefixed with `skill:`, or a `file:`-prefixed
|
|
25
|
-
# path/glob whose contents are loaded as facts.
|
|
26
|
-
#
|
|
27
|
-
#
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
]
|
|
25
|
+
# path/glob whose contents are loaded as facts. Empty by default — repo-wide context
|
|
26
|
+
# belongs in AGENTS.md (see bmad-project-context), which every skill already sees. Use
|
|
27
|
+
# this for context only the facilitator needs, loaded on demand rather than carried as
|
|
28
|
+
# constant memory (e.g. `file:{project-root}/**/project-context.md` if you keep one).
|
|
29
|
+
persistent_facts = []
|
|
31
30
|
|
|
32
31
|
# The technique library loaded on demand during the session. Swap the path in
|
|
33
32
|
# team/user TOML to ship a different or extended catalog of creative methods.
|
|
@@ -20,12 +20,11 @@ activation_steps_append = []
|
|
|
20
20
|
# Persistent facts the interrogator keeps in mind for the whole session
|
|
21
21
|
# (domain constraints, house rules, what's off the table). Each entry is a
|
|
22
22
|
# literal sentence, a skill prefixed with `skill:`, or a `file:`-prefixed
|
|
23
|
-
# path/glob whose contents are loaded as facts.
|
|
24
|
-
#
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
]
|
|
23
|
+
# path/glob whose contents are loaded as facts. Empty by default — repo-wide context
|
|
24
|
+
# belongs in AGENTS.md (see bmad-project-context), which every skill already sees. Use
|
|
25
|
+
# this for context only the forge needs, loaded on demand rather than carried as constant
|
|
26
|
+
# memory (e.g. `file:{project-root}/**/project-context.md` if you keep one).
|
|
27
|
+
persistent_facts = []
|
|
29
28
|
|
|
30
29
|
# Executed when the session completes. Scalar or array of instructions. Empty for none.
|
|
31
30
|
on_complete = []
|
|
@@ -22,10 +22,10 @@ activation_steps_append = []
|
|
|
22
22
|
# Persistent facts the orchestrator keeps in mind for the whole session
|
|
23
23
|
# (house rules, running gags, topics to avoid). Each entry is a literal
|
|
24
24
|
# sentence, a `skill:`-prefixed reference, or a `file:`-prefixed path/glob whose
|
|
25
|
-
# contents load as facts.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
]
|
|
25
|
+
# contents load as facts. Empty by default — repo-wide context belongs in AGENTS.md
|
|
26
|
+
# (see bmad-project-context), which every skill already sees. Use this for context only
|
|
27
|
+
# the party needs, loaded on demand rather than carried as constant memory.
|
|
28
|
+
persistent_facts = []
|
|
29
29
|
|
|
30
30
|
# Which party loads when the user just says "party mode" with no override.
|
|
31
31
|
# Empty = the installed BMAD agents — exactly the default behavior of a plain
|
|
@@ -23,7 +23,7 @@ activation_steps_append = []
|
|
|
23
23
|
# prefixed `file:` are paths or globs whose contents load as facts; all others
|
|
24
24
|
# are literal facts. The shipped entry is a project-wide glob — set it to []
|
|
25
25
|
# if you don't want every review scanning for it.
|
|
26
|
-
persistent_facts = [
|
|
26
|
+
persistent_facts = []
|
|
27
27
|
|
|
28
28
|
# Standing review directives applied on every run alongside each lens's own
|
|
29
29
|
# method. Each entry is a literal sentence or a `file:`-prefixed path/glob
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|