bmad-method 6.8.1-next.9 → 6.9.1-next.0
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/.claude-plugin/marketplace.json +9 -3
- package/package.json +10 -4
- package/src/bmm-skills/1-analysis/bmad-prfaq/SKILL.md +2 -2
- package/src/bmm-skills/1-analysis/bmad-product-brief/SKILL.md +8 -8
- package/src/bmm-skills/2-plan-workflows/bmad-prd/SKILL.md +7 -7
- package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/headless-schemas.md +2 -2
- package/src/bmm-skills/2-plan-workflows/bmad-prd/customize.toml +1 -1
- package/src/bmm-skills/2-plan-workflows/bmad-prd/references/headless.md +1 -1
- package/src/bmm-skills/2-plan-workflows/bmad-prd/references/validate.md +1 -1
- package/src/bmm-skills/2-plan-workflows/bmad-ux/SKILL.md +8 -8
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-directions.md +1 -1
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/headless-schemas.md +2 -2
- package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/key-screens.md +4 -4
- package/src/bmm-skills/2-plan-workflows/bmad-ux/customize.toml +1 -1
- package/src/bmm-skills/2-plan-workflows/bmad-ux/references/creative-tools.md +1 -1
- package/src/bmm-skills/2-plan-workflows/bmad-ux/references/headless.md +1 -1
- package/src/bmm-skills/2-plan-workflows/bmad-ux/references/validate.md +2 -2
- package/src/bmm-skills/3-solutioning/bmad-agent-architect/customize.toml +2 -2
- package/src/bmm-skills/3-solutioning/bmad-architecture/SKILL.md +85 -0
- package/src/bmm-skills/3-solutioning/bmad-architecture/assets/spine-template.md +79 -0
- package/src/bmm-skills/3-solutioning/bmad-architecture/customize.toml +100 -0
- package/src/bmm-skills/3-solutioning/bmad-architecture/references/headless.md +26 -0
- package/src/bmm-skills/3-solutioning/bmad-architecture/references/reviewer-gate.md +13 -0
- package/src/bmm-skills/3-solutioning/bmad-architecture/scripts/lint_spine.py +257 -0
- package/src/bmm-skills/3-solutioning/bmad-architecture/scripts/tests/test_lint_spine.py +270 -0
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/SKILL.md +16 -60
- package/src/bmm-skills/4-implementation/bmad-dev-auto/SKILL.md +101 -0
- package/src/bmm-skills/4-implementation/bmad-dev-auto/compile-epic-context.md +62 -0
- package/src/bmm-skills/4-implementation/bmad-dev-auto/customize.toml +33 -0
- package/src/bmm-skills/4-implementation/bmad-dev-auto/spec-template.md +90 -0
- package/src/bmm-skills/4-implementation/bmad-dev-auto/step-01-clarify-and-route.md +66 -0
- package/src/bmm-skills/4-implementation/bmad-dev-auto/step-02-plan.md +32 -0
- package/src/bmm-skills/4-implementation/bmad-dev-auto/step-03-implement.md +38 -0
- package/src/bmm-skills/4-implementation/bmad-dev-auto/step-04-review.md +61 -0
- package/src/bmm-skills/4-implementation/bmad-retrospective/SKILL.md +15 -0
- package/src/bmm-skills/4-implementation/bmad-sprint-planning/SKILL.md +20 -1
- package/src/bmm-skills/4-implementation/bmad-sprint-planning/checklist.md +2 -1
- package/src/bmm-skills/4-implementation/bmad-sprint-planning/sprint-status-template.yaml +13 -0
- package/src/bmm-skills/4-implementation/bmad-sprint-status/SKILL.md +13 -0
- package/src/bmm-skills/module-help.csv +2 -2
- package/src/core-skills/bmad-brainstorming/SKILL.md +8 -10
- package/src/core-skills/bmad-brainstorming/references/converge.md +1 -1
- package/src/core-skills/bmad-brainstorming/references/finalize.md +1 -1
- package/src/core-skills/bmad-brainstorming/references/headless.md +4 -4
- package/src/core-skills/bmad-brainstorming/references/in-chat-techniques.md +1 -1
- package/src/core-skills/bmad-brainstorming/references/mode-autonomous.md +1 -1
- package/src/core-skills/bmad-brainstorming/scripts/tests/test_brain.py +2 -2
- package/src/core-skills/bmad-customize/scripts/tests/test_list_customizable_skills.py +1 -1
- package/src/core-skills/bmad-forge-idea/SKILL.md +79 -0
- package/src/core-skills/bmad-forge-idea/customize.toml +42 -0
- package/src/core-skills/bmad-forge-idea/scripts/resolve_personas.py +270 -0
- package/src/core-skills/bmad-forge-idea/scripts/tests/test_resolve_personas.py +138 -0
- package/src/core-skills/bmad-party-mode/SKILL.md +39 -56
- package/src/core-skills/bmad-party-mode/customize.toml +175 -0
- package/src/core-skills/bmad-party-mode/references/create-party.md +70 -0
- package/src/core-skills/bmad-party-mode/references/mode-agent-team.md +11 -0
- package/src/core-skills/bmad-party-mode/references/mode-auto.md +13 -0
- package/src/core-skills/bmad-party-mode/references/mode-subagent.md +19 -0
- package/src/core-skills/bmad-party-mode/references/party-memory.md +51 -0
- package/src/core-skills/bmad-party-mode/scripts/resolve_party.py +272 -0
- package/src/core-skills/bmad-party-mode/scripts/tests/test-resolve_party.py +146 -0
- package/src/core-skills/bmad-spec/SKILL.md +5 -3
- package/src/core-skills/bmad-spec/assets/spec-template.md +3 -3
- package/src/core-skills/module-help.csv +1 -0
- package/src/scripts/resolve_config.py +8 -6
- package/src/scripts/resolve_customization.py +8 -6
- package/tools/installer/commands/install.js +3 -0
- package/tools/installer/core/installer.js +3 -0
- package/tools/installer/core/uv-check.js +97 -0
- package/tools/installer/core/wsl-node-check.js +109 -0
- package/tools/installer/ide/platform-codes.yaml +7 -0
- package/tools/installer/install-messages.yaml +4 -0
- package/tools/installer/ui.js +10 -9
- package/evals/bmm-skills/bmad-product-brief/evals.json +0 -237
- package/evals/bmm-skills/bmad-product-brief/files/branfield-memo.md +0 -46
- package/evals/bmm-skills/bmad-product-brief/files/forkbird-brief/addendum.md +0 -40
- package/evals/bmm-skills/bmad-product-brief/files/forkbird-brief/brief.md +0 -56
- package/evals/bmm-skills/bmad-product-brief/files/forkbird-brief/decision-log.md +0 -27
- package/evals/bmm-skills/bmad-product-brief/files/meridian-mobility-report.md +0 -116
- package/evals/bmm-skills/bmad-product-brief/files/mossridge-brief/addendum.md +0 -41
- package/evals/bmm-skills/bmad-product-brief/files/mossridge-brief/brief.md +0 -57
- package/evals/bmm-skills/bmad-product-brief/files/mossridge-brief/decision-log.md +0 -29
- package/evals/bmm-skills/bmad-product-brief/files/pantry-bridge-interviews.md +0 -90
- package/evals/bmm-skills/bmad-product-brief/files/q2-brainstorm.md +0 -101
- package/evals/bmm-skills/bmad-product-brief/triggers.json +0 -18
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/architecture-decision-template.md +0 -12
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/data/domain-complexity.csv +0 -13
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/data/project-types.csv +0 -7
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/steps/step-01-init.md +0 -153
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/steps/step-01b-continue.md +0 -173
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/steps/step-02-context.md +0 -224
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/steps/step-03-starter.md +0 -329
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/steps/step-04-decisions.md +0 -318
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/steps/step-05-patterns.md +0 -359
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/steps/step-06-structure.md +0 -379
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/steps/step-07-validation.md +0 -361
- package/src/bmm-skills/3-solutioning/bmad-create-architecture/steps/step-08-complete.md +0 -82
- package/src/core-skills/bmad-brainstorming/scripts/memlog.py +0 -202
- package/src/core-skills/bmad-brainstorming/scripts/tests/test_memlog.py +0 -265
- package/tools/installer/core/python-check.js +0 -199
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
deferred_work_file: '{implementation_artifacts}/deferred-work.md'
|
|
3
|
+
spec_file: '' # set at runtime for both routes before leaving this step
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Step 1: Clarify and Route
|
|
7
|
+
|
|
8
|
+
## RULES
|
|
9
|
+
|
|
10
|
+
- YOU MUST ALWAYS SPEAK OUTPUT in your Agent communication style with the config `{communication_language}`
|
|
11
|
+
- Treat the invocation intent as workflow input, not as a substitute for step-02 investigation and spec generation.
|
|
12
|
+
- **EARLY EXIT** means: stop this step immediately, then read and follow the target file. Return here only if a later step explicitly says to loop back.
|
|
13
|
+
|
|
14
|
+
## Intent check (do this first)
|
|
15
|
+
|
|
16
|
+
Use the invocation prompt as the intent.
|
|
17
|
+
|
|
18
|
+
If the invocation prompt explicitly points to an existing spec file with recognized `status` frontmatter, set `spec_file`, then **EARLY EXIT** to the appropriate step:
|
|
19
|
+
- `draft` → `./step-02-plan.md`
|
|
20
|
+
- `ready-for-dev` or `in-progress` → `./step-03-implement.md`
|
|
21
|
+
- `in-review` → `./step-04-review.md`
|
|
22
|
+
- `blocked` → HALT with status `blocked` and blocking condition `blocked spec supplied`.
|
|
23
|
+
- `done` → ingest as context and proceed to INSTRUCTIONS — do not resume.
|
|
24
|
+
|
|
25
|
+
Otherwise, treat the invocation prompt as starting intent. This may be a story ID, ticket ID, file path, short description, or longer free-form intent. Do not infer workflow state from non-spec files.
|
|
26
|
+
If the invocation prompt does not contain enough intent to identify what to implement, HALT with status `blocked` and blocking condition `unclear intent`.
|
|
27
|
+
|
|
28
|
+
## INSTRUCTIONS
|
|
29
|
+
|
|
30
|
+
1. Load context.
|
|
31
|
+
- List files in `{planning_artifacts}` and `{implementation_artifacts}`.
|
|
32
|
+
- If the invocation prompt points to an unformatted spec or intent file, ingest that file. Do not scan for unrelated intent files.
|
|
33
|
+
- **Determine context strategy.** Using the intent and the artifact listing, infer whether the current work is a story from an epic. Do not rely on filename patterns or regex — reason about the intent, the listing, and any epics file content together.
|
|
34
|
+
|
|
35
|
+
**A) Epic story path** — if the intent is clearly an epic story:
|
|
36
|
+
|
|
37
|
+
1. Identify the epic number `{epic_num}` and (if present) the story number `{story_num}`. If you can't identify an epic number, use path B.
|
|
38
|
+
|
|
39
|
+
2. **Check for a valid cached epic context.** Look for `{implementation_artifacts}/epic-<N>-context.md` (where `<N>` is the epic number). A file is **valid** when it exists, is non-empty, starts with `# Epic <N> Context:` (with the correct epic number), and no file in `{planning_artifacts}` is newer.
|
|
40
|
+
- **If valid:** load it as the primary planning context. Do not load raw planning docs (PRD, architecture, UX, etc.).
|
|
41
|
+
- **If missing, empty, or invalid:** compile it in the next bullet.
|
|
42
|
+
|
|
43
|
+
3. **Compile epic context if needed.** If no valid cached epic context was loaded, produce `{implementation_artifacts}/epic-<N>-context.md` by spawning a subagent with `./compile-epic-context.md` as its prompt. Pass it the epic number, the epics file path, the `{planning_artifacts}` directory, and the output path `{implementation_artifacts}/epic-<N>-context.md`.
|
|
44
|
+
|
|
45
|
+
4. **Verify if compiled.** If epic context was compiled, verify the output file exists, is non-empty, and starts with `# Epic <N> Context:`. If valid, load it. If verification fails, HALT with status `blocked` and blocking condition `context compilation verification failed`.
|
|
46
|
+
|
|
47
|
+
5. **Previous story continuity.** Regardless of which context source succeeded above, scan `{implementation_artifacts}` for specs from the same epic with `status: done` and a lower story number. Load the most recent one (highest story number below current). Extract its **Code Map**, **Design Notes**, **Spec Change Log**, and **task list** as continuity context for step-02 planning. If no `done` spec is found but an `in-review` spec exists for the same epic with a lower story number, HALT with status `blocked` and blocking condition `missing previous-story continuity decision`.
|
|
48
|
+
|
|
49
|
+
**B) Freeform path** — if the intent is not an epic story:
|
|
50
|
+
- Planning artifacts are the output of BMAD phases 1-3. Typical files include:
|
|
51
|
+
- **PRD** (`*prd*`) — product requirements and success criteria
|
|
52
|
+
- **Architecture** (`*architecture*`) — technical design decisions and constraints
|
|
53
|
+
- **UX/Design** (`*ux*`) — user experience and interaction design
|
|
54
|
+
- **Epics** (`*epic*`) — feature breakdown into implementable stories
|
|
55
|
+
- **Product Brief** (`*brief*`) — project vision and scope
|
|
56
|
+
- Scan the listing for files matching these patterns. If any look relevant to the current intent, load them selectively — you don't need all of them, but you need the right constraints and requirements rather than guessing from code alone.
|
|
57
|
+
2. Resolve intent from the invocation prompt and loaded artifacts. Do not fantasize or leave open questions. If the intent cannot be resolved, HALT with status `blocked` and the unresolved questions as blocking condition.
|
|
58
|
+
3. Version control sanity check. Is the working tree clean? Does the current branch make sense for this intent — considering its name and recent history? If the tree is dirty or the branch is an obvious mismatch, HALT with status `blocked` and that condition as blocking condition. If version control is unavailable, skip this check.
|
|
59
|
+
4. Multi-goal warning. If the intent appears to contain multiple independently shippable goals, carry `multiple-goals` forward so step-02 can add it to `{spec_file}` frontmatter `warnings`. Do not split or block.
|
|
60
|
+
5. Route:
|
|
61
|
+
|
|
62
|
+
Derive a valid kebab-case slug from the clarified intent. If the intent references a tracking identifier (story number, issue number, ticket ID), lead the slug with it (e.g. `3-2-digest-delivery`, `gh-47-fix-auth`). If `{implementation_artifacts}/spec-{slug}.md` already exists: if its status is `draft`, treat it as the same work and resume it (set `spec_file` to that path, **EARLY EXIT** → `./step-02-plan.md`); otherwise append `-2`, `-3`, etc. Set `spec_file` = `{implementation_artifacts}/spec-{slug}.md`.
|
|
63
|
+
|
|
64
|
+
## NEXT
|
|
65
|
+
|
|
66
|
+
Read fully and follow `./step-02-plan.md`
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
deferred_work_file: '{implementation_artifacts}/deferred-work.md'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Step 2: Plan
|
|
6
|
+
|
|
7
|
+
## RULES
|
|
8
|
+
|
|
9
|
+
- YOU MUST ALWAYS SPEAK OUTPUT in your Agent communication style with the config `{communication_language}`
|
|
10
|
+
- No human interaction: do not ask questions or wait for approval in this step.
|
|
11
|
+
|
|
12
|
+
## INSTRUCTIONS
|
|
13
|
+
|
|
14
|
+
1. Draft resume check. If `{spec_file}` exists with `status: draft`, read it and capture the verbatim `<intent-contract>...</intent-contract>` block as `preserved_intent_contract`. Otherwise `preserved_intent_contract` is empty.
|
|
15
|
+
2. Investigate codebase. _Use subagents for deep exploration. To prevent context snowballing, instruct subagents to give you distilled summaries only._
|
|
16
|
+
3. Read `./spec-template.md` fully. Fill it out based on the intent and investigation. If `{preserved_intent_contract}` is non-empty, substitute it for the `<intent-contract>` block in your filled spec before writing. Write the result to `{spec_file}`.
|
|
17
|
+
4. Self-review against READY FOR DEVELOPMENT standard.
|
|
18
|
+
5. If intent gaps exist, do not fantasize and do not leave open questions. HALT with status `blocked`, blocking condition `intent gaps`, and include the unanswered questions and evidence gathered.
|
|
19
|
+
6. Warning check. If step-01 carried `multiple-goals`, add it to `{spec_file}` frontmatter `warnings`. If `{spec_file}` exceeds 1600 tokens, add `oversized` to frontmatter `warnings`. Continue either way.
|
|
20
|
+
|
|
21
|
+
### READY-FOR-DEVELOPMENT GATE
|
|
22
|
+
|
|
23
|
+
Re-read `./SKILL.md`, then re-read `{spec_file}` from disk and verify the spec meets the READY FOR DEVELOPMENT standard.
|
|
24
|
+
|
|
25
|
+
- **If the file is missing:** HALT with status `blocked` and blocking condition `planned spec file disappeared before implementation`.
|
|
26
|
+
- **If the spec meets the standard:** set `{spec_file}` frontmatter status to `ready-for-dev`, then continue to step 3.
|
|
27
|
+
- **If the spec does not meet the standard:** repair it once, then re-read it from disk and verify again. If it still does not meet the standard, HALT with status `blocked`, blocking condition `spec failed ready-for-development standard`, and include the failing criteria and evidence gathered.
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
## NEXT
|
|
31
|
+
|
|
32
|
+
Read fully and follow `./step-03-implement.md`
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
---
|
|
3
|
+
|
|
4
|
+
# Step 3: Implement
|
|
5
|
+
|
|
6
|
+
## RULES
|
|
7
|
+
|
|
8
|
+
- YOU MUST ALWAYS SPEAK OUTPUT in your Agent communication style with the config `{communication_language}`
|
|
9
|
+
- No human interaction: do not ask questions or wait for approval in this step.
|
|
10
|
+
- Content inside `<intent-contract>` in `{spec_file}` is read-only. Do not modify.
|
|
11
|
+
|
|
12
|
+
## PRECONDITION
|
|
13
|
+
|
|
14
|
+
Verify `{spec_file}` resolves to a non-empty path and the file exists on disk. If empty or missing, HALT with status `blocked` and blocking condition `missing spec_file before implementation`.
|
|
15
|
+
|
|
16
|
+
## INSTRUCTIONS
|
|
17
|
+
|
|
18
|
+
### Baseline
|
|
19
|
+
|
|
20
|
+
Capture `baseline_revision` (current HEAD, or `NO_VCS` if version control is unavailable) into `{spec_file}` frontmatter before making any changes.
|
|
21
|
+
|
|
22
|
+
### Implement
|
|
23
|
+
|
|
24
|
+
Change `{spec_file}` status to `in-progress` in the frontmatter before starting implementation.
|
|
25
|
+
|
|
26
|
+
If `{spec_file}` has a non-empty `context:` list in its frontmatter, load those files before implementation begins. When handing to a subagent, include them in the subagent prompt so it has access to the referenced context.
|
|
27
|
+
|
|
28
|
+
Hand `{spec_file}` to an implementation subagent.
|
|
29
|
+
|
|
30
|
+
**Path formatting rule:** Any markdown links written into `{spec_file}` must use paths relative to `{spec_file}`'s directory so they are clickable in VS Code. Any file paths displayed in terminal/conversation output must use CWD-relative format with `:line` notation (e.g., `src/path/file.ts:42`) for terminal clickability. No leading `/` in either case.
|
|
31
|
+
|
|
32
|
+
### Tasks & Acceptance Verification
|
|
33
|
+
|
|
34
|
+
After the implementation subagent returns, verify every task in the `## Tasks & Acceptance` section of `{spec_file}` is complete and every acceptance criterion is satisfied. Mark each finished task `[x]`. If any task is not done or any acceptance criterion is not satisfied, finish the missing work before proceeding. If the missing work cannot be completed, HALT with status `blocked`, blocking condition `implementation verification failed`, and include the unfinished task or failing acceptance criterion and reason.
|
|
35
|
+
|
|
36
|
+
## NEXT
|
|
37
|
+
|
|
38
|
+
Read fully and follow `./step-04-review.md`
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
deferred_work_file: '{implementation_artifacts}/deferred-work.md'
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Step 4: Review
|
|
6
|
+
|
|
7
|
+
## RULES
|
|
8
|
+
|
|
9
|
+
- YOU MUST ALWAYS SPEAK OUTPUT in your Agent communication style with the config `{communication_language}`
|
|
10
|
+
- No human interaction: do not ask questions or wait for approval in this step.
|
|
11
|
+
- Review subagents get no prior session context.
|
|
12
|
+
- All review subagents must run at the same model capability as the current session.
|
|
13
|
+
|
|
14
|
+
## INSTRUCTIONS
|
|
15
|
+
|
|
16
|
+
Change `{spec_file}` status to `in-review` in the frontmatter before continuing.
|
|
17
|
+
|
|
18
|
+
### Construct Diff
|
|
19
|
+
|
|
20
|
+
Read `{baseline_revision}` from `{spec_file}` frontmatter. If `{baseline_revision}` is missing or `NO_VCS`, use best effort to determine what changed. Otherwise, construct `{diff_output}` covering all changes — tracked and untracked — since `{baseline_revision}`.
|
|
21
|
+
|
|
22
|
+
Do NOT `git add` anything — this is read-only inspection.
|
|
23
|
+
|
|
24
|
+
### Review
|
|
25
|
+
|
|
26
|
+
Launch two subagents without prior session context.
|
|
27
|
+
|
|
28
|
+
- **Blind hunter** — receives inline `{diff_output}` only. No spec, no context docs, no project access. Invoke via the `bmad-review-adversarial-general` skill.
|
|
29
|
+
- **Edge case hunter** — receives `{diff_output}` and read access to the project. Invoke via the `bmad-review-edge-case-hunter` skill.
|
|
30
|
+
|
|
31
|
+
### Classify
|
|
32
|
+
|
|
33
|
+
1. Deduplicate all review findings.
|
|
34
|
+
2. Classify each finding. The first three categories are **this story's problem** — caused or exposed by the current change. The last two are **not this story's problem**.
|
|
35
|
+
- **intent_gap** — caused by the change; cannot be resolved from the spec because the captured intent is incomplete. Do not infer intent unless there is exactly one possible reading.
|
|
36
|
+
- **bad_spec** — caused by the change, including direct deviations from spec. The spec should have been clear enough to prevent it. When in doubt between bad_spec and patch, prefer bad_spec — a spec-level fix is more likely to produce coherent code.
|
|
37
|
+
- **patch** — caused by the change; trivially fixable without human input. Just part of the diff.
|
|
38
|
+
- **defer** — pre-existing issue not caused by this story, surfaced incidentally by the review. Collect for later focused attention.
|
|
39
|
+
- **reject** — noise. Drop silently. When unsure between defer and reject, prefer reject — only defer findings you are confident are real.
|
|
40
|
+
3. Process findings in cascading order. If intent_gap exists, lower findings are moot; follow the intent_gap branch below. If bad_spec exists, lower findings are moot since code will be re-derived. If neither exists, process patch and defer normally. Before each bad_spec loopback, read `{spec_file}` frontmatter `review_loop_iteration` (missing means `0`), increment it by 1, and write it back. If it exceeds 5, HALT with status `blocked` and blocking condition `review repair loop exceeded 5 iterations`.
|
|
41
|
+
- **intent_gap** — Root cause is inside `<intent-contract>`. Revert code changes. HALT with status `blocked`, blocking condition `intent gap in intent contract`, and include the intent-gap findings.
|
|
42
|
+
- **bad_spec** — Root cause is outside `<intent-contract>`. Do not modify content inside `<intent-contract>`. Before reverting code: extract KEEP instructions for positive preservation (what worked well and must survive re-derivation). Revert code changes. Read the `## Spec Change Log` in `{spec_file}` and strictly respect all logged constraints when amending the sections outside `<intent-contract>` that contain the root cause. Append a new change-log entry recording: the triggering finding, what was amended, the known-bad state avoided, and the KEEP instructions. Read fully and follow `./step-03-implement.md` to re-derive the code, then this step will run again.
|
|
43
|
+
- **patch** — Auto-fix. These are the only findings that survive loopbacks.
|
|
44
|
+
- **defer** — Append one new entry to `{deferred_work_file}` using this format. Do not modify existing entries or look for duplicates.
|
|
45
|
+
```markdown
|
|
46
|
+
- source_spec: `{spec_file}`
|
|
47
|
+
summary: <one sentence>
|
|
48
|
+
evidence: <why this is real>
|
|
49
|
+
```
|
|
50
|
+
- **reject** — Drop silently.
|
|
51
|
+
|
|
52
|
+
## Finalize
|
|
53
|
+
|
|
54
|
+
Prepare `Auto Run Result` details:
|
|
55
|
+
- Summary of implemented change
|
|
56
|
+
- Files changed with one-line descriptions
|
|
57
|
+
- Review findings breakdown: patches applied, items deferred, items rejected
|
|
58
|
+
- Verification performed, including command outcomes or manual inspection notes
|
|
59
|
+
- Any residual risks
|
|
60
|
+
|
|
61
|
+
HALT with status `done`.
|
|
@@ -350,6 +350,7 @@ Amelia (Developer): "I found our retrospectives from Epic {{prev_epic_num}}. Let
|
|
|
350
350
|
|
|
351
351
|
**Action Item Follow-Through:**
|
|
352
352
|
- For each action item from Epic {{prev_epic_num}} retro, check if it was completed
|
|
353
|
+
- Cross-check the action_items section in {sprint_status_file} (if present) for Epic {{prev_epic_num}} entries and their current status
|
|
353
354
|
- Look for evidence in current epic's story records
|
|
354
355
|
- Mark each action item: ✅ Completed, ⏳ In Progress, ❌ Not Addressed
|
|
355
356
|
|
|
@@ -1403,6 +1404,19 @@ Amelia (Developer): "See you all when prep work is done. Meeting adjourned!"
|
|
|
1403
1404
|
<action>Find development_status key "epic-{{epic_number}}-retrospective"</action>
|
|
1404
1405
|
<action>Verify current status (typically "optional" or "pending")</action>
|
|
1405
1406
|
<action>Update development_status["epic-{{epic_number}}-retrospective"] = "done"</action>
|
|
1407
|
+
<action>Append each Epic {{epic_number}} action item to the action_items section, creating the section after development_status if missing. One entry per item:</action>
|
|
1408
|
+
|
|
1409
|
+
```yaml
|
|
1410
|
+
action_items:
|
|
1411
|
+
- epic: {{epic_number}}
|
|
1412
|
+
action: "{{action_description}}"
|
|
1413
|
+
owner: "{{owner}}"
|
|
1414
|
+
status: open
|
|
1415
|
+
```
|
|
1416
|
+
|
|
1417
|
+
<action>Quote action and owner values so punctuation (e.g., "#") cannot break YAML parsing</action>
|
|
1418
|
+
|
|
1419
|
+
<action>Update Epic {{prev_epic_num}} action_items entries based on Step 4 follow-through: ✅ Completed → done, ⏳ In Progress → in-progress, ❌ Not Addressed → keep existing status (do not modify)</action>
|
|
1406
1420
|
<action>Update last_updated field to current date</action>
|
|
1407
1421
|
<action>Save file, preserving ALL comments and structure including STATUS DEFINITIONS</action>
|
|
1408
1422
|
|
|
@@ -1412,6 +1426,7 @@ Amelia (Developer): "See you all when prep work is done. Meeting adjourned!"
|
|
|
1412
1426
|
|
|
1413
1427
|
Retrospective key: epic-{{epic_number}}-retrospective
|
|
1414
1428
|
Status: {{previous_status}} → done
|
|
1429
|
+
Action items recorded: {{action_count}}
|
|
1415
1430
|
</output>
|
|
1416
1431
|
</check>
|
|
1417
1432
|
|
|
@@ -151,6 +151,7 @@ development_status:
|
|
|
151
151
|
|
|
152
152
|
- If existing `{status_file}` exists and has more advanced status, preserve it
|
|
153
153
|
- Never downgrade status (e.g., don't change `done` to `ready-for-dev`)
|
|
154
|
+
- If existing `{status_file}` has an `action_items` section, carry it over unchanged
|
|
154
155
|
|
|
155
156
|
**Status Flow Reference:**
|
|
156
157
|
|
|
@@ -194,12 +195,18 @@ development_status:
|
|
|
194
195
|
# - optional: Can be completed but not required
|
|
195
196
|
# - done: Retrospective has been completed
|
|
196
197
|
#
|
|
198
|
+
# Action Item Status:
|
|
199
|
+
# - open: Committed during a retrospective, not yet addressed
|
|
200
|
+
# - in-progress: Actively being worked on
|
|
201
|
+
# - done: Completed
|
|
202
|
+
#
|
|
197
203
|
# WORKFLOW NOTES:
|
|
198
204
|
# ===============
|
|
199
205
|
# - Epic transitions to 'in-progress' automatically when first story is created
|
|
200
206
|
# - Stories can be worked in parallel if team capacity allows
|
|
201
207
|
# - Developer typically creates next story after previous one is 'done' to incorporate learnings
|
|
202
208
|
# - Dev moves story to 'review', then runs code-review (fresh context, different LLM recommended)
|
|
209
|
+
# - Retrospective appends its action items to action_items; sprint-status surfaces open ones
|
|
203
210
|
|
|
204
211
|
generated: { date }
|
|
205
212
|
last_updated: { date }
|
|
@@ -215,6 +222,7 @@ development_status:
|
|
|
215
222
|
<action>Write the complete sprint status YAML to {status_file}</action>
|
|
216
223
|
<action>CRITICAL: Metadata appears TWICE - once as comments (#) for documentation, once as YAML key:value fields for parsing</action>
|
|
217
224
|
<action>Ensure all items are ordered: epic, its stories, its retrospective, next epic...</action>
|
|
225
|
+
<action>If the existing file had an action_items section, write it back unchanged after development_status</action>
|
|
218
226
|
</step>
|
|
219
227
|
|
|
220
228
|
<step n="5" goal="Validate and report">
|
|
@@ -223,7 +231,8 @@ development_status:
|
|
|
223
231
|
- [ ] Every epic in epic files appears in {status_file}
|
|
224
232
|
- [ ] Every story in epic files appears in {status_file}
|
|
225
233
|
- [ ] Every epic has a corresponding retrospective entry
|
|
226
|
-
- [ ] No items in {status_file} that don't exist in epic files
|
|
234
|
+
- [ ] No development_status items in {status_file} that don't exist in epic files
|
|
235
|
+
- [ ] action_items section (if it existed) carried over unchanged
|
|
227
236
|
- [ ] All status values are legal (match state machine definitions)
|
|
228
237
|
- [ ] File is valid YAML syntax
|
|
229
238
|
|
|
@@ -291,6 +300,16 @@ optional ↔ done
|
|
|
291
300
|
- **optional**: Ready to be conducted but not required
|
|
292
301
|
- **done**: Finished
|
|
293
302
|
|
|
303
|
+
**Action Item Status:**
|
|
304
|
+
|
|
305
|
+
```
|
|
306
|
+
open → in-progress → done
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
- **open**: Committed during a retrospective, not yet addressed
|
|
310
|
+
- **in-progress**: Actively being worked on
|
|
311
|
+
- **done**: Completed
|
|
312
|
+
|
|
294
313
|
### Guidelines
|
|
295
314
|
|
|
296
315
|
1. **Epic Activation**: Mark epic as `in-progress` when starting work on its first story
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
- [ ] Every epic found in epic\*.md files appears in sprint-status.yaml
|
|
8
8
|
- [ ] Every story found in epic\*.md files appears in sprint-status.yaml
|
|
9
9
|
- [ ] Every epic has a corresponding retrospective entry
|
|
10
|
-
- [ ] No items in sprint-status.yaml that don't exist in epic files
|
|
10
|
+
- [ ] No development_status items in sprint-status.yaml that don't exist in epic files
|
|
11
|
+
- [ ] action_items section (if it existed) carried over unchanged
|
|
11
12
|
|
|
12
13
|
### Parsing Verification
|
|
13
14
|
|
|
@@ -26,11 +26,17 @@
|
|
|
26
26
|
# - optional: Can be completed but not required
|
|
27
27
|
# - done: Retrospective has been completed
|
|
28
28
|
#
|
|
29
|
+
# Action Item Status:
|
|
30
|
+
# - open: Committed during a retrospective, not yet addressed
|
|
31
|
+
# - in-progress: Actively being worked on
|
|
32
|
+
# - done: Completed
|
|
33
|
+
#
|
|
29
34
|
# WORKFLOW NOTES:
|
|
30
35
|
# ===============
|
|
31
36
|
# - Mark epic as 'in-progress' when starting work on its first story
|
|
32
37
|
# - Developer typically creates next story ONLY after previous one is 'done' to incorporate learnings
|
|
33
38
|
# - Dev moves story to 'review', then Dev runs code-review (fresh context, ideally different LLM)
|
|
39
|
+
# - Retrospective appends its action items to action_items; sprint-status surfaces open ones
|
|
34
40
|
|
|
35
41
|
# EXAMPLE STRUCTURE (your actual epics/stories will replace these):
|
|
36
42
|
|
|
@@ -54,3 +60,10 @@ development_status:
|
|
|
54
60
|
2-2-chat-interface: backlog
|
|
55
61
|
2-3-llm-integration: backlog
|
|
56
62
|
epic-2-retrospective: optional
|
|
63
|
+
|
|
64
|
+
# Action items committed during retrospectives (section created by the retrospective workflow)
|
|
65
|
+
action_items:
|
|
66
|
+
- epic: 1
|
|
67
|
+
action: "Add error-handling review to the code review checklist"
|
|
68
|
+
owner: "Charlie"
|
|
69
|
+
status: open
|
|
@@ -112,12 +112,14 @@ Run `/bmad:bmm:workflows:sprint-planning` to generate it, then rerun sprint-stat
|
|
|
112
112
|
<action>Map legacy epic status "contexted" → "in-progress"</action>
|
|
113
113
|
<action>Count epic statuses: backlog, in-progress, done</action>
|
|
114
114
|
<action>Count retrospective statuses: optional, done</action>
|
|
115
|
+
<action>Parse action_items list if present. Set open_action_items = entries with status "open" or "in-progress"</action>
|
|
115
116
|
|
|
116
117
|
<action>Validate all statuses against known values:</action>
|
|
117
118
|
|
|
118
119
|
- Valid story statuses: backlog, ready-for-dev, in-progress, review, done, drafted (legacy)
|
|
119
120
|
- Valid epic statuses: backlog, in-progress, done, contexted (legacy)
|
|
120
121
|
- Valid retrospective statuses: optional, done
|
|
122
|
+
- Valid action item statuses: open, in-progress, done
|
|
121
123
|
|
|
122
124
|
<check if="any status is unrecognized">
|
|
123
125
|
<output>
|
|
@@ -132,6 +134,7 @@ Run `/bmad:bmm:workflows:sprint-planning` to generate it, then rerun sprint-stat
|
|
|
132
134
|
- Stories: backlog, ready-for-dev, in-progress, review, done
|
|
133
135
|
- Epics: backlog, in-progress, done
|
|
134
136
|
- Retrospectives: optional, done
|
|
137
|
+
- Action items: open, in-progress, done
|
|
135
138
|
</output>
|
|
136
139
|
<ask>How should these be corrected?
|
|
137
140
|
{{#each invalid_entries}}
|
|
@@ -181,6 +184,14 @@ Enter corrections (e.g., "1=in-progress, 2=backlog") or "skip" to continue witho
|
|
|
181
184
|
|
|
182
185
|
**Next Recommendation:** /bmad:bmm:workflows:{{next_workflow_id}} ({{next_story_id}})
|
|
183
186
|
|
|
187
|
+
{{#if open_action_items}}
|
|
188
|
+
**Open Action Items:**
|
|
189
|
+
{{#each open_action_items}}
|
|
190
|
+
|
|
191
|
+
- {{action}} — {{status}} (epic {{epic}}, owner: {{owner}})
|
|
192
|
+
{{/each}}
|
|
193
|
+
{{/if}}
|
|
194
|
+
|
|
184
195
|
{{#if risks}}
|
|
185
196
|
**Risks:**
|
|
186
197
|
{{#each risks}}
|
|
@@ -243,6 +254,7 @@ If the command targets a story, set `story_key={{next_story_id}}` when prompted.
|
|
|
243
254
|
<template-output>epic_backlog = {{epic_backlog}}</template-output>
|
|
244
255
|
<template-output>epic_in_progress = {{epic_in_progress}}</template-output>
|
|
245
256
|
<template-output>epic_done = {{epic_done}}</template-output>
|
|
257
|
+
<template-output>open_action_items = {{open_action_items}}</template-output>
|
|
246
258
|
<template-output>risks = {{risks}}</template-output>
|
|
247
259
|
<action>Return to caller</action>
|
|
248
260
|
</step>
|
|
@@ -283,6 +295,7 @@ If the command targets a story, set `story_key={{next_story_id}}` when prompted.
|
|
|
283
295
|
- Stories: backlog, ready-for-dev, in-progress, review, done (legacy: drafted)
|
|
284
296
|
- Epics: backlog, in-progress, done (legacy: contexted)
|
|
285
297
|
- Retrospectives: optional, done
|
|
298
|
+
- Action items (if present): open, in-progress, done
|
|
286
299
|
<check if="any invalid status found">
|
|
287
300
|
<template-output>is_valid = false</template-output>
|
|
288
301
|
<template-output>error = "Invalid status values: {{invalid_entries}}"</template-output>
|
|
@@ -17,8 +17,8 @@ BMad Method,bmad-product-brief,Create Brief,CB,An expert guided experience to na
|
|
|
17
17
|
BMad Method,bmad-prfaq,PRFAQ Challenge,WB,Working Backwards guided experience to forge and stress-test your product concept to ensure you have a great product that users will love and need through the PRFAQ gauntlet to determine feasibility and alignment with user needs. alternative to product brief.,,-H,1-analysis,,,false,planning_artifacts,prfaq document
|
|
18
18
|
BMad Method,bmad-prd,Create Edit and Review PRD,PRD,"Facilitated PRD workflow — create a new PRD via coached discovery, update an existing one against a change signal, or validate a finished PRD against a checklist with an HTML findings report.",,,2-planning,bmad-product-brief,,true,planning_artifacts,prd
|
|
19
19
|
BMad Method,bmad-ux,Create UX,CU,"Guidance through realizing the plan for your UX, strongly recommended if a UI is a primary piece of the proposed project.",,,2-planning,bmad-prd,,false,planning_artifacts,ux design
|
|
20
|
-
BMad Method,bmad-
|
|
21
|
-
BMad Method,bmad-create-epics-and-stories,Create Epics and Stories,CE,,,,3-solutioning,bmad-
|
|
20
|
+
BMad Method,bmad-architecture,Architecture,CA,Offer once requirements exist (a PRD or spec; plus UX if present) and the user is ready to move from what to how. Also offer any time independently-built parts risk diverging. Produces the architecture spine: the invariants that keep features epics and stories consistent. Comes before epics and stories and scales from a quick spine to a full architecture (brownfield: ratifies the existing codebase).,,,3-solutioning,,,true,planning_artifacts,architecture
|
|
21
|
+
BMad Method,bmad-create-epics-and-stories,Create Epics and Stories,CE,,,,3-solutioning,bmad-architecture,,true,planning_artifacts,epics and stories
|
|
22
22
|
BMad Method,bmad-check-implementation-readiness,Check Implementation Readiness,IR,Ensure PRD UX Architecture and Epics Stories are aligned.,,,3-solutioning,bmad-create-epics-and-stories,,true,planning_artifacts,readiness report
|
|
23
23
|
BMad Method,bmad-sprint-planning,Sprint Planning,SP,Kicks off implementation by producing a plan the implementation agents will follow in sequence for every story.,,,4-implementation,,,true,implementation_artifacts,sprint status
|
|
24
24
|
BMad Method,bmad-sprint-status,Sprint Status,SS,Anytime: Summarize sprint status and route to next workflow.,,,4-implementation,bmad-sprint-planning,,false,,
|
|
@@ -18,7 +18,7 @@ The session runs in one of three stances, chosen by the user — set explicitly
|
|
|
18
18
|
|
|
19
19
|
## On Activation
|
|
20
20
|
|
|
21
|
-
1. Resolve customization: `
|
|
21
|
+
1. Resolve customization: `uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --key workflow`. On failure, use a subagent to read `{skill-root}/customize.toml` directly with defaults.
|
|
22
22
|
2. Run each `{workflow.activation_steps_prepend}` entry. Treat each `{workflow.persistent_facts}` entry as foundational context (`file:`-prefixed entries are paths/globs under `{project-root}` — load their contents; others are facts verbatim).
|
|
23
23
|
3. Load `{project-root}/_bmad/core/config.yaml` (and `config.user.yaml` if present); resolve `{user_name}`, `{communication_language}`, `{document_output_language}`, `{output_folder}`, `{project_name}`, `{date}`. Missing → neutral defaults; never block.
|
|
24
24
|
4. **If launched headless** (a machine signal, not a human asking for output — `references/headless.md` lists them): load `references/headless.md` and follow it for the whole run. It is the *only* context where you generate ideas yourself; never load it otherwise.
|
|
@@ -34,21 +34,19 @@ These fight your defaults, in every mode; hold them deliberately. The stance you
|
|
|
34
34
|
- **Keep shifting the creative domain** — every 5–10 turns (or ~10 ideas when you're generating), usually by moving to the next technique.
|
|
35
35
|
- **One prompt per message while in dialogue (Facilitator, Creative Partner); no multiple-choice menus.** Don't stack questions into a wall or hand a menu that invites lazy picking — both pull the user out of generating. The only exceptions are the two up-front *process* choices (stance, and the technique flow): *how* to run is theirs to pick; *what* to ideate never is.
|
|
36
36
|
|
|
37
|
-
**The memlog** is the session's memory: the single source every output builds from, and the file a resume reloads. Whatever isn't in it is gone. Log every idea, decision, question, and bit of user direction — anything you'd regret losing if the window closed — one line each, the gist in the user's meaning, in time order; never edit or reorder. Skip your prompts and small talk. All writes
|
|
37
|
+
**The memlog** is the session's memory: the single source every output builds from, and the file a resume reloads. Whatever isn't in it is gone. Log every idea, decision, question, and bit of user direction — anything you'd regret losing if the window closed — one line each, the gist in the user's meaning, in time order; never edit or reorder. Skip your prompts and small talk. All writes to memlog are atomic and use the script `memlog.py` invoked as follows:
|
|
38
38
|
|
|
39
|
-
- `memlog.py init --workspace {doc_workspace} --field topic="<topic>" --field goal="<goal>" --field mode="<facilitator|partner|autonomous>"` — create it once topic, goal, and stance are known.
|
|
40
|
-
- `memlog.py append --workspace {doc_workspace} --type <kind> --text "<one-line gist>"` — log one entry. `--type` ∈ `idea`/`insight`/`question`/`decision`/`direction`/`technique` (a switch: `--text "started <name>"`); omit for a plain note. Add `--by user`/`--by coach` to mark authorship — **required in Creative Partner mode** (renders `(idea by user)`); skip it otherwise.
|
|
41
|
-
- `memlog.py set --workspace {doc_workspace} --key status --value complete` — flip status at wrap-up.
|
|
42
|
-
|
|
43
|
-
(Each is `python3 {skill-root}/scripts/memlog.py …`.)
|
|
39
|
+
- `uv run {project-root}/_bmad/scripts/memlog.py init --workspace {doc_workspace} --field topic="<topic>" --field goal="<goal>" --field mode="<facilitator|partner|autonomous>"` — create it once topic, goal, and stance are known.
|
|
40
|
+
- `uv run {project-root}/_bmad/scripts/memlog.py append --workspace {doc_workspace} --type <kind> --text "<one-line gist>"` — log one entry. `--type` ∈ `idea`/`insight`/`question`/`decision`/`direction`/`technique` (a switch: `--text "started <name>"`); omit for a plain note. Add `--by user`/`--by coach` to mark authorship — **required in Creative Partner mode** (renders `(idea by user)`); skip it otherwise.
|
|
41
|
+
- `uv run {project-root}/_bmad/scripts/memlog.py set --workspace {doc_workspace} --key status --value complete` — flip status at wrap-up.
|
|
44
42
|
|
|
45
43
|
## Run a Session
|
|
46
44
|
|
|
47
|
-
Open with one compound question
|
|
45
|
+
Open with one compound question what are we brainstorming, and what's the goal or why behind it (along with asking if there are any inputs or special requests). The why shapes technique choice and synthesis (*kids' iPhone apps to build with your own kids* vs. *to win market share* point different ways). If the kickoff already made both clear, skip the question and confirm; read anything they point you to. Derive a kebab-case `{topic_slug}` and bind `{doc_workspace} = {workflow.output_dir}/{workflow.output_folder_name}/`.
|
|
48
46
|
|
|
49
47
|
Now set the **stance** and the **technique batch** in one step — the composer page does both, so make it the default.
|
|
50
48
|
|
|
51
|
-
**The composer page (primary).** The file is `{skill-root}/assets/brain-selector.html`. With a customized catalog (overridden `{workflow.brain_methods}` or any `{workflow.additional_techniques}`), regenerate it first: `
|
|
49
|
+
**The composer page (primary).** The file is `{skill-root}/assets/brain-selector.html`. With a customized catalog (overridden `{workflow.brain_methods}` or any `{workflow.additional_techniques}`), regenerate it first: `uv run {skill-root}/scripts/brain.py --file {workflow.brain_methods} [--extra {doc_workspace}/extra-techniques.json] html --out {doc_workspace}/brain-selector.html` (pass `--extra`, a JSON list of `{category, technique_name, description}`, when there are additional techniques; the file is then `{doc_workspace}/brain-selector.html`). Try to open it (`open` / `xdg-open` / `start`), then say, in one message: *"It should open in your browser — compose your session, click **Copy prompt**, and paste the result back. If it didn't open, open `<path>` yourself, or say 'let's do it in chat'."* You can't see their browser, so never claim it opened.
|
|
52
50
|
|
|
53
51
|
Read the pasted block: the **`Facilitation mode:`** line → the stance; the **listed techniques** (full category/name/description, some tagged `(random pick)`) → run them as given, no `list`/`show` needed; **`invent N`** / **`you choose N`** → see `## Choosing Techniques`.
|
|
54
52
|
|
|
@@ -63,7 +61,7 @@ For **Facilitator** and **Creative Partner**. (In **Ideate for me** you pick and
|
|
|
63
61
|
Most sessions arrive with a batch already composed on the page — run it as given (each technique's full text is in the paste; no `list`/`show` needed). Two parts of a paste delegate back to you:
|
|
64
62
|
|
|
65
63
|
- **`invent N`** (Inventive Flow) — invent N brand-new techniques on the fly. A line may scope an invention (`invent 1 new technique in the spirit of <category>`, from the page's per-category invent card) — when it does, honor that category's spirit. Announce the order, log each one's name + description, and offer to save a keeper to `{workflow.additional_techniques}` at wrap-up.
|
|
66
|
-
- **`you choose N`** (Facilitator Chosen) — pick N techniques fitting the goal, `{workflow.favorite_techniques}` first; confirm exact names with a scoped `
|
|
64
|
+
- **`you choose N`** (Facilitator Chosen) — pick N techniques fitting the goal, `{workflow.favorite_techniques}` first; confirm exact names with a scoped `uv run {skill-root}/scripts/brain.py --file {workflow.brain_methods} list --category <cat>`. Never pull the library whole into context.
|
|
67
65
|
|
|
68
66
|
If they didn't use the page, load `references/in-chat-techniques.md` and pick the batch in chat (**3–4 is the sweet spot**).
|
|
69
67
|
|
|
@@ -17,7 +17,7 @@ Pick by what the decision needs:
|
|
|
17
17
|
- **PMI (Plus / Minus / Interesting)** — when one strong candidate needs pressure-testing before commitment: list its pluses, minuses, and the merely-interesting, then judge.
|
|
18
18
|
- **MoSCoW** — when scoping a build: sort into Must / Should / Could / Won't-this-time.
|
|
19
19
|
|
|
20
|
-
Log the surviving directions and the reasoning with `
|
|
20
|
+
Log the surviving directions and the reasoning with `uv run {project-root}/_bmad/scripts/memlog.py append --workspace {doc_workspace} --type decision --text "<one-line gist>"` (use `--by` in Creative Partner mode). Two or three convergence moves chained is fine (e.g. cluster → score the clusters); more than that is usually over-processing.
|
|
21
21
|
|
|
22
22
|
## Then finalize
|
|
23
23
|
|
|
@@ -9,7 +9,7 @@ In Facilitator mode this is the one place your own creative contribution is welc
|
|
|
9
9
|
1. **Hand them the mirror first.** Reflect a vivid sampling of *their* ideas back — deliberately include the odd, random, or buried ones from earlier, not just the recent obvious ones (in Creative Partner mode the `(... by user)` tags tell you which were theirs). Ask what they see now: conclusions, synergies, themes, the few that actually matter. Let them connect first; their own pattern-recognition is the point.
|
|
10
10
|
2. **Then add the connections they would miss.** Lean in creatively — not new raw ideas, but the non-obvious links: this idea from technique one quietly solves that tension from technique four; these three are one idea wearing three hats; this wildcard is the real breakthrough.
|
|
11
11
|
|
|
12
|
-
Record the insights and chosen directions with `memlog.py append --type insight`. **Then run `
|
|
12
|
+
Record the insights and chosen directions with `uv run {project-root}/_bmad/scripts/memlog.py append --workspace {doc_workspace} --type insight --text "<insights + chosen directions>"`. **Then run `uv run {project-root}/_bmad/scripts/memlog.py set --workspace {doc_workspace} --key status --value complete`** — the session is done and must stop being offered for resume. Do this even if the user declines every artifact below.
|
|
13
13
|
|
|
14
14
|
## Artifacts
|
|
15
15
|
|
|
@@ -14,7 +14,7 @@ When in doubt, you are interactive — a present human asking you to "brainstorm
|
|
|
14
14
|
|
|
15
15
|
## The inversion
|
|
16
16
|
|
|
17
|
-
There is no user to draw ideas out of, so you become the brainstormer. Run a real divergent session against the supplied topic: discover techniques with `
|
|
17
|
+
There is no user to draw ideas out of, so you become the brainstormer. Run a real divergent session against the supplied topic: discover techniques with `uv run {skill-root}/scripts/brain.py --file {workflow.brain_methods} list --all` (the whole catalog is fine here — you are generating, not pacing a user; add `show "<name>"` for a technique's full method on demand), plus any `{workflow.additional_techniques}`, preferring `{workflow.favorite_techniques}` where they fit; work them, and **shift the creative domain every ~10 ideas** exactly as the interactive Stance demands — technical, then experiential, then business, then failure modes, then wildcards. Push past the obvious; the same quantity ambition (aim past 100) and anti-clustering discipline apply. The only thing that changes is that the ideas are now yours to generate. This relaxation is scoped entirely to this file — it never applies to interactive sessions.
|
|
18
18
|
|
|
19
19
|
## Inputs the caller is expected to provide
|
|
20
20
|
|
|
@@ -29,9 +29,9 @@ Free-form structured payload in the first message; provide what applies:
|
|
|
29
29
|
|
|
30
30
|
## Run
|
|
31
31
|
|
|
32
|
-
1. Bind `{doc_workspace}` and create the memlog with `
|
|
33
|
-
2. Run the divergent session per **The inversion**, capturing each idea with `memlog.py append --workspace {doc_workspace} --type idea --text "<idea>"` as it lands, and marking each technique switch with `memlog.py append --type technique --text "started <name>"`.
|
|
34
|
-
3. Synthesize: surface the conclusions, connections, and the few directions that matter; record them with `memlog.py append --type insight`, then run `memlog.py set --workspace {doc_workspace} --key status --value complete`.
|
|
32
|
+
1. Bind `{doc_workspace}` and create the memlog with `uv run {project-root}/_bmad/scripts/memlog.py init --workspace {doc_workspace} --field topic="<topic>" [--field goal="<goal>"]`. It remains the canonical source every artifact derives from.
|
|
33
|
+
2. Run the divergent session per **The inversion**, capturing each idea with `uv run {project-root}/_bmad/scripts/memlog.py append --workspace {doc_workspace} --type idea --text "<idea>"` as it lands, and marking each technique switch with `uv run {project-root}/_bmad/scripts/memlog.py append --workspace {doc_workspace} --type technique --text "started <name>"`.
|
|
34
|
+
3. Synthesize: surface the conclusions, connections, and the few directions that matter; record them with `uv run {project-root}/_bmad/scripts/memlog.py append --workspace {doc_workspace} --type insight --text "<insights>"`, then run `uv run {project-root}/_bmad/scripts/memlog.py set --workspace {doc_workspace} --key status --value complete`.
|
|
35
35
|
4. Produce the requested artifacts from the log — `brainstorm.html` (the imaginative, self-contained, no-template report) and/or the succinct `brainstorm-intent.md` — the same artifacts `references/finalize.md` describes, delegating each to a subagent that reads the log as its sole source. (Headless produces the `artifacts` payload directly; it does not ask, unlike the interactive opt-in.)
|
|
36
36
|
5. Execute each entry in `{workflow.external_handoffs}` (capture returned URLs/IDs into the JSON `external_handoffs` array; skip and flag unavailable tools — local files always exist). Then run `{workflow.on_complete}` if non-empty.
|
|
37
37
|
|
|
@@ -7,7 +7,7 @@ Loaded only when the user won't use the composer page (no browser, headless, or
|
|
|
7
7
|
- **Category** — the user names 1–n categories; `random --category` draws the batch from them. No listing needed.
|
|
8
8
|
- **Inventive Flow** — invent at least 3 techniques, announce the order before the first, touch no script. Log each one's name + description so you can offer to save a keeper to `{workflow.additional_techniques}` (via `bmad-customize`) at wrap-up.
|
|
9
9
|
|
|
10
|
-
The library is large — never pull it whole into context. The only way in is the helper, always passing `--file {workflow.brain_methods}`. Subcommands of `
|
|
10
|
+
The library is large — never pull it whole into context. The only way in is the helper, always passing `--file {workflow.brain_methods}`. Subcommands of `uv run {skill-root}/scripts/brain.py --file {workflow.brain_methods}`:
|
|
11
11
|
|
|
12
12
|
- `categories` — names + counts; the cheap survey map.
|
|
13
13
|
- `list --category X [--category Y]` — the index (name + gist) for those categories. Bare `list` is refused by the script.
|
|
@@ -5,6 +5,6 @@ The user handed you the topic and wants to see what you come up with on your own
|
|
|
5
5
|
- **Run a real divergent session yourself.** Pick and run techniques on your own (use `brain.py` as in `## Choosing Techniques`, but *you* choose — no menu for the user), capturing each idea to the memlog with `--type idea --by coach`, marking each technique switch with a `technique` entry, shifting the creative domain every ~10 ideas, aiming past 100. Push past the obvious.
|
|
6
6
|
- **Don't pepper the user with questions** — this is your run. One quick confirm of topic and goal up front is plenty.
|
|
7
7
|
- **When it's mined out, synthesize and produce the keepsake.** Go to `## Wrap-Up` (`references/finalize.md`): record the insights, mark the memlog complete, and **auto-generate the imaginative HTML keepsake — don't ask first; the keepsake is the result you promised to show them.** Offer the other artifacts (intent doc, etc.) after.
|
|
8
|
-
- **Then, because a human is here, offer to keep going together.** They may want to push an idea further or react to what you found — if so, switch into **Facilitator** or **Creative Partner** (load that frame), **record the switch in the memlog** so a resume restores the new stance — `
|
|
8
|
+
- **Then, because a human is here, offer to keep going together.** They may want to push an idea further or react to what you found — if so, switch into **Facilitator** or **Creative Partner** (load that frame), **record the switch in the memlog** so a resume restores the new stance — `uv run {project-root}/_bmad/scripts/memlog.py set --workspace {doc_workspace} --key mode --value <facilitator|partner>` — and continue from the same memlog.
|
|
9
9
|
|
|
10
10
|
This is the interactive sibling of headless mode (`references/headless.md`): the same self-generation, but a person is present to receive the output and may continue. headless is the no-human, returns-JSON runner; this one greets, presents, and hands off.
|
|
@@ -207,11 +207,11 @@ def test_unknown_category_style_uses_fallback_glyph():
|
|
|
207
207
|
|
|
208
208
|
def test_shipped_selector_is_in_sync_with_catalog():
|
|
209
209
|
# foolproofing: if someone edits brain-methods.csv they must regenerate the page.
|
|
210
|
-
# Regenerate with:
|
|
210
|
+
# Regenerate with: uv run brain.py html --out assets/brain-selector.html
|
|
211
211
|
asset = brain.DEFAULT_FILE.parent / "brain-selector.html"
|
|
212
212
|
assert asset.is_file(), "missing assets/brain-selector.html — generate it"
|
|
213
213
|
expected = brain.html_doc(brain.load(brain.DEFAULT_FILE))
|
|
214
214
|
assert asset.read_text(encoding="utf-8") == expected, (
|
|
215
215
|
"assets/brain-selector.html is stale; regenerate: "
|
|
216
|
-
"
|
|
216
|
+
"uv run brain.py html --out assets/brain-selector.html"
|
|
217
217
|
)
|
|
@@ -13,7 +13,7 @@ Exercises the scanner against a synthesized install tree:
|
|
|
13
13
|
- malformed TOML (surfaces as an error without aborting)
|
|
14
14
|
- multiple skills roots (e.g. project-local + user-global mix)
|
|
15
15
|
|
|
16
|
-
Run:
|
|
16
|
+
Run: uv run scripts/tests/test_list_customizable_skills.py
|
|
17
17
|
"""
|
|
18
18
|
|
|
19
19
|
from __future__ import annotations
|