mirror of
https://github.com/bmad-code-org/BMAD-METHOD.git
synced 2026-09-19 08:11:52 +08:00
project-context-v2
2032 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
6ac4c26b69 | chore(release): v6.9.0 [skip ci] v6.9.0 | ||
|
|
d570e70caf | docs: draft v6.9.0 changelog (#2496) | ||
|
|
02739932bc |
feat(installer): check for uv and standardize messaging on uv run (#2495)
Replace the standalone python3 environment check with a uv check, since uv is becoming the de facto standard for running BMad's Python scripts (`uv run <script>`) and uv provisions the interpreter itself. Installer: - Remove tools/installer/core/python-check.js and its wiring in ui.js - Add tools/installer/core/uv-check.js: warn-don't-block, no ack prompt (the migration is in progress, so a missing uv never blocks install). Missing uv warns and points the user at setup, preferring "ask your agent to set up uv" - Add a uv heads-up to the install intro (install-messages.yaml) and a uv tip line to the final "BMAD is ready" summary box - Swap test Suite 46 from python-check to uv-check coverage Docs and script comments (no functional skill invocations changed): - resolve_config.py / resolve_customization.py docstrings: drop the "No uv ... plain python3 is sufficient" claims; frame uv run as the standard, python3 as the transition fallback; examples use uv run - customize-bmad.md (en/fr/vi-vn): same reframing; example commands use uv run - Update uv run hints in brain.py / list_customizable test comments |
||
|
|
005ef1104a |
feat(core): add bmad-forge-idea skill + docs (#2492)
* feat(core): add bmad-forge-idea skill
Domain-agnostic idea-forging skill for BMad core. Takes a half-formed idea
and pressure-tests it in conversation until it hardens, proves out, or dies
cheaply — the quality of thinking is the product, not an artifact. One
question at a time with an always-on anti-sycophancy stance; two opt-in gears
(adversarial attack; a persona room resolved from the installed roster,
voiced by default and spawned when a branch needs independent minds); a
memlog as durable, resumable residue. Honest exits (hardened / killed /
clearer); optional brief distilled from the memlog that can feed bmad-spec or
bmad-quick-dev. Interactive and socratic; no headless mode.
Registered in core-skills/module-help.csv (menu code FI).
* Add forge-idea documentation and finalize skill scripts/conventions
Docs (Diátaxis):
- New explanation/forge-idea.md and how-to/pressure-test-an-idea.md
- core-tools.md: catalog entry + item section for bmad-forge-idea
- workflow-map.md and getting-started.md: Phase 1 (Analysis) listing
- De-collide the "forge" verb from bmad-prfaq positioning across docs
Skill:
- forge-idea SKILL.md: add term-sharpening axis, operationalize the
existing-project ground-truth rule, and add graceful degradation
- bmad-prfaq: description de-collision; Stage 1 now redirects upstream
to bmad-forge-idea for an unsound idea
- Unbundle the core memlog.py copy (skill references the core script at
{project-root}/_bmad/scripts); keep skill-local resolve_personas.py + tests
- customize.toml: comment refresh; on_complete as array
* Fix review findings: resolve_personas crash + doc accuracy
- resolve_parties: resolve token once + coerce non-strings (fixes KeyError
on mixed-case members and TypeError on unhashable members)
- Guard malformed party-mode config shapes so discovery stays best-effort
- _brief: pass through model/capabilities; register: no name-lookup hijack
- 5 new regression tests (case-insensitivity, malformed input, rename collision)
- Docs: correct bmad-review-adversarial-general name, bmad-prfaq handoff,
recursive resume glob, broken table row, and Produces filenames across
forge-idea/brainstorming/product-brief/architecture rows
|
||
|
|
db2270c7ea |
fix(deps): resolve Dependabot security alerts via astro 6 upgrade (#2493)
Clears all 11 open Dependabot alerts on main: - astro 5.18.1 -> 6.4.6, @astrojs/starlight 0.37.5 -> 0.40.0, @astrojs/sitemap 3.6.0 -> 3.7.3 (8 XSS/SSRF advisories) - esbuild pinned to 0.28.1 via override (astro/vite cap at ^0.27; fixes dev-server arbitrary file read on Windows) - markdown-it -> 14.2.0 via override (smartquotes ReDoS) - brace-expansion (under glob) -> 5.0.6 (range DoS) Astro 6 migration for the docs site: - content config moved to src/content.config.ts with loaders - sidebar autogenerate groups wrapped in items[] (Starlight v0.39) - 404 page uses render(entry) instead of entry.render() Verified: docs:build produces an identical page set vs the pre-upgrade baseline; sidebar validation and format checks pass. |
||
|
|
e600181ab8 |
feat(installer): add hermes-agent tool target (#2489)
Co-authored-by: bigblackcoder <llewis@sovrlabs.com> Co-authored-by: Brian <bmadcode@gmail.com> |
||
|
|
cd8ac7e9aa |
bmm: standardize memlog usage across skills (#2483)
* bmm: standardize memlog usage across skills
- Point all memlog writes at the canonical core script (uv {project-root}/_bmad/scripts/memlog.py) in bmad-spec, bmad-brainstorming, and bmad-architecture; drop the python3/{skill-root} invocations and remove the bundled memlog.py copy from bmad-brainstorming.
- Migrate bmad-prd, bmad-ux, and bmad-product-brief off the hand-authored decision-log.md onto the memlog standard: .memlog.md written only via memlog.py (init/append), distilled-toward not authored, no lifecycle status; rename the headless decision_log JSON key to memlog.
- Fix bmad-spec capability rendering: nested bullets so intent/success break onto their own lines instead of collapsing into one blob.
- Update EN + FR docs (getting-started, workflow-map, core-tools) to reference .memlog.md.
- Remove the bmad-product-brief eval suite (to be replaced with a new format).
* bmm: invoke scripts with 'uv run' instead of python3/bare uv
Bare 'uv {path}.py' does not execute (uv treats the path as a subcommand and errors); only 'uv run {path}' runs the script. Fixes the broken bare-uv memlog form shipped earlier in this branch and converts python3 script calls to 'uv run' across the 6 touched skills (memlog.py, resolve_customization.py, brain.py, lint_spine.py). Inline 'python3 -c' one-liners and .py shebangs are left as-is.
* bmm: address PR review on memlog standardization
- Delete orphaned bmad-brainstorming/scripts/tests/test_memlog.py: it
imported the bundled memlog.py removed in this PR (ModuleNotFoundError on
collection) and its unique tests asserted the now-removed status-lifecycle
behavior. The canonical src/scripts/tests/test_memlog.py is the corrected
superset, so no coverage is lost.
- Make runnable memlog command examples self-contained with the full
'uv run {project-root}/_bmad/scripts/memlog.py ... --workspace {doc_workspace}'
form across bmad-brainstorming (converge/finalize/headless), bmad-prd, and
bmad-ux. Terse checklist back-references left short by design.
- bmad-product-brief Update: init .memlog.md if missing (legacy/pre-standard
briefs), matching bmad-prd and bmad-ux; fix the --type override invocation.
|
||
|
|
b0b1796227 |
feat(party-mode): persistent per-party memory (#2484)
* feat(party-mode): add persistent per-party memory
Each party now keeps a succinct, append-only memlog (the memlog standard)
under {memory_dir}/<party>/, so a room remembers prior sessions and opens
in character carrying them forward.
- Memory accrues live: capture memorable beats as they land, with a floor
so an abandoned session still leaves a trace; wrap-up is a top-up.
- Read distills via a reader subagent that returns only current standing
state (latest dynamic per pair, open threads, recent callbacks) so the
raw log never enters the party context.
- Writes are silent and fail safe: a missing or erroring memlog.py is
skipped without breaking the fiction.
- New customize knobs: party_memory (on by default) and memory_dir.
Keyed per party (group id, or `installed` for the default room); ad-hoc
casts stay ephemeral. On-disk compaction is left to a future memlog.py pass.
* refactor(party-mode): standard structure, per-group memory, keep on-the-fly cast
- Restructure SKILL.md to the standard skill shape (intro -> Conventions ->
On Activation -> content); consolidate all performance rules into one
"Keep It Feeling Like a Party" section. SKILL.md ~500 tokens lighter.
- Per-group `memory` flag: global party_memory now governs only the default
room; resolve_party.py resolves memory_enabled per active roster (default
room -> party_memory, named group -> own flag), with tests.
- On-the-fly characters are captured as memlog entries during a session; at
wrap-up the room offers to save them into the party via bmad-customize.
- Memory mechanics consolidated into references/party-memory.md; SKILL.md
step 5 just routes to it.
- Docs updated.
* docs(party-mode): fix open-cast lock-down claim and python3->uv run in create-party
|
||
|
|
9d5739d992 |
Party Mode: configurable custom parties, run modes, and a rewritten explainer (#2479)
* Add configurable parties to bmad-party-mode
Party mode gains a customize.toml config surface and a guided
authoring flow, while the out-of-the-box default room is unchanged.
- customize.toml: party_members (custom personas), party_groups
(named rooms with an optional freeform `scene`), default_party,
and party_mode (auto/session/subagent/agent-team). Universal
hooks wired (activation steps, persistent_facts, on_complete).
- Roster model: collective = installed agents + custom members
(the pool, summonable by name). Default room stays installed-only
so customs never crowd it. Groups curate subsets; open-cast groups
(no members) are cast from the scene on the fly.
- scripts/resolve_party.py: lazy roster resolver (installed-only
default, group menu by name, one group's detail on demand,
alias/override merge) + unit tests.
- references/create-party.md: create/edit parties, distill personas
from data for focus groups, persist ad-hoc casts; writes overrides
via bmad-customize.
- Ships a "Code Review Crew" group (5 adversarial review lenses),
available via --party but absent from the default room.
* Rework party-mode modes + rewrite the docs explainer
Skill:
- How It Runs is now a compact router; one mode active per session,
runtime --mode wins over the customize default, all degrade to session
- Default mode is `session`; `auto`/`subagent`/`agent-team` carved to
references/mode-*.md, loaded only when that mode is active
- Add references/mode-auto.md (spawn-vs-voice rubric), mode-subagent.md,
mode-agent-team.md
- resolve_party.py fallback default auto -> session
- customize.toml: party_mode default session; trim duplicated mode gloss
- Trim restated script-contract prose; collapse "Following the User's Lead";
add scene/persona-binding and web-search rules; offer an HTML keepsake
at wrap-up
Docs:
- Full rewrite of docs/explanation/party-mode.md: the four modes, custom
parties (personas, scenes, shapes), the shipped Code Review Crew as one
example beside the module-based default, launch examples, party ideas,
and the multi-group bonus tip
* Keep party energy up and route the keepsake to a config output dir
- SKILL.md: add "Keep It Feeling Like a Party" guidance so the room stays
fun and engaging and doesn't drift into Q&A or a report
- Keepsake now writes to {workflow.output_dir}; step 2 resolves
{output_folder} and {date}
- customize.toml: add output_dir = {output_folder}/party-mode, overridable
in team/user TOML (matches the bmad-brainstorming output pattern)
|
||
|
|
606ad6063b |
fix: update Claude marketplace metadata (#2457)
* fix: update marketplace metadata * fix: update marketplace metadata * fix: include architecture skill in marketplace |
||
|
|
cfafc89cf6 |
feat(skills): track retrospective action items in sprint-status (#2465)
Retrospective Step 12 appends agreed action items to a new action_items section in sprint-status.yaml and updates the previous epic's entries from the Step 4 follow-through. Sprint-status parses the section, validates its statuses, and surfaces open items in the summary and data mode. Sprint-planning preserves the section when regenerating the file. |
||
|
|
07d34fb43a | fix: adjust nav height for dual announcement banners (#2473) | ||
|
|
5bcc235cdb | fix(installer): guard WSL installs from Windows Node (#2470) | ||
|
|
2417f0048d |
bmad-architecture: lean directives, breadth coverage, redesigned spine template (#2475)
* bmad-architecture: breadth coverage + lean directives; reviewer reports to subfolder
- Inline forward-readiness (inherit upstream silently; thin input -> suggest bmad-spec or hybrid-capture) and brownfield (ratify, don't re-tell) directives in place of a standalone spine-checklist
- Use {workflow.persistent_facts} instead of hardcoded project-context.md
- Reviewer gate writes per-reviewer reports to reviews/ subfolder so the deliverable folder stays clean
- Require breadth coverage at distill and in the gate rubric: every altitude-owned dimension decided/deferred/open, flagging the operational/environmental envelope a domain-focused draft skips
- Trim repeated directives and human-facing justification prose
* Redesign spine template and move stack pinning to a body table
Rework spine-template.md so it stops forcing fixed structure: guidance
moves into single-line HTML comments (stripped at distill), the always-two
diagrams and empty-mermaid render bugs are gone, and the structural-seed
framing opens up so the operational/environmental envelope isn't skipped.
Stack moves from nested frontmatter into a ## Stack | Name | Version | table.
lint_spine.py drops the frontmatter dep check for find_unpinned_stack, which
parses the Stack table and flags real-name/blank-version rows while skipping
{token} skeletons. Tests reworked to match; 24 passing.
SKILL.md Finalize tightened to act-then-strip template comments and sweep
altitude-owned breadth.
* Harden find_unpinned_stack: blank fences, locate columns, looser heading
Address PR review (CodeRabbit + Augment): find_unpinned_stack scanned raw
body, so pipe-rows or ## headings inside a fenced block could be misread as
live Stack content and misreport version_pin. Now blanks fences first, like
find_placeholders and find_ad_issues, honoring the linter's fences-are-non-live
contract.
Also locate both Name and Version columns from the header (a reordered table
now pairs name to version correctly) and match the heading on a word boundary
(## Stack & Versions still counts). Add regression tests for fenced rows,
fenced headings, renamed heading, and reordered columns (28 passing).
Reword stale 'unpinned deps' / 'unpinned dependency versions' to 'unpinned
Stack versions' to match the body-table model.
|
||
|
|
242dc6ef75 |
bmad-architecture part 1: replace bmad-create-architecture with a lean spine skill (#2467)
* Rework solutioning architecture skill into bmad-architecture (spine) - Rename canonical skill bmad-tech-plan -> bmad-architecture; output is ARCHITECTURE-SPINE.md - Convert bmad-create-architecture to a deprecated husk forwarding to bmad-architecture (create intent); strip steps/data/template - Finalize: spine is the default, then offers fuller renderings + a self-contained HTML view; doc_standards polish applies to prose docs only - Reviewer Gate: add adversarial divergence-hunter, on by default at high/regulated/cross-team stakes - Fix references in module-help.csv, bmad-prd, bmad-ux, bmad-agent-architect; reword help entry for when-to-offer - bmad-spec: flag recognized-but-unaddressed domain implications as open_questions * bmad-architecture: extract Finalize/reviewer-menu to references, add grade_spine script - Move the Finalize sequence out of SKILL.md into references/finalize.md - Make references/validate.md own the canonical reviewer menu and prompts - Add scripts/grade_spine.py (+ tests) so validation grade is computed deterministically instead of derived by hand - Tighten SKILL.md spine/memlog framing * bmad-architecture: outcome-driven rewrite + spawned reviewer gate Re-express SKILL.md as goals/outcomes rather than procedure: intent is read from the input (raw idea, large doc, codebase, feature slice, existing spine) instead of a Create/Update/Validate x mode matrix. Restore the counter-default coaching invariants that over-compression had stripped — Guided is the default, load-bearing calls are shown with alternatives and the user chooses, recommend a known starter when the stack is open, investigate brownfield before deciding. Adopt the bmad-prd/product-brief shape: a dedicated Reviewer Gate that always spawns finalize_reviewers as parallel subagents against the spine (lint floor first; ad-hoc lenses scaled to rigor/altitude/criticality), and a numbered Finalize that calls it. Headless runs the full gate non-interactively. Reframe the structural seed as the living source of truth for shape (code owns detail; evolve on shape change; memlog keeps history). Fix template mermaid (C4 -> flowchart, valid one-attr-per-line erDiagram). Ship two default finalize_reviewers (currency/reality check, adversarial divergence hunter). Remove grade_spine.py and the inlined discovery/inputs/validate/finalize refs. * bmad-architecture: review fixes — shared memlog, epic altitude, lint hardening Pre-PR review fixes for the new architecture-spine skill: - Adopt the shared canonical memlog (#2462); drop the vendored copy and the status-flag lifecycle in favor of `event` entries - Wire epic-altitude inheritance: parent-spine load+bind, Inherited Invariants template section, epic-scoped run folder, parent-contradiction lens; state that per-story detail is deferred to bmad-create-story - Add the Update intent; honor a forwarded-activation handoff from the deprecated bmad-create-architecture shim - Rename modes to Coaching path / Fast path (suite-consistent with prd/brief) and sequence the offer as an activation step - Fix the brownfield project-context.md default path ({output_folder} no-op) - lint_spine: line-exact frontmatter, fence-blanking (AD-in-fence + accurate line numbers), map-form key_deps, AD-0 fix; soften template-token severity; add 8 tests - Carve the Reviewer Gate to references/ to stay under the SKILL.md token budget - Template: entities-only ERD, scale-down guidance, softened seed framing; gitignore .memlog.md * bmad-architecture: address PR review (augment + coderabbit) - REF-03: use canonical "invoke the `skill` skill" language for all cross-skill references in SKILL.md (was "route to / offer / hand to / Next:") - lint_spine: scan frontmatter for unfilled template tokens / TBD (paradigm, scope, date were uncatchable in the body-only pass) - lint_spine: guard read_text() so a bad-encoding/unreadable spine returns error JSON and exit 0, honoring the documented contract - reviewer-gate: resolve the "always run" vs "may skip" ambiguity — the gate scales/skips by stakes, but finalize_reviewers always run once it does - tests: +3 (frontmatter token, frontmatter TBD, unreadable spine); use next() * bmad-architecture: align finalize-reviewers wording + headless blocked output - customize.toml: reword finalize_reviewers comment to match reviewer-gate.md — the gate is stakes-gated, but its reviewers always run once it does (coderabbit) - headless.md: state explicitly that a blocked run omits spine/memlog/companions, matching the "omit keys for artifacts not produced" contract (coderabbit) * bmad-architecture: ask deliverable purpose up front, offer presentable renderings, lead next-steps with bmad-spec |
||
|
|
560a2e3a6f |
feat: installer detects Python version and warns when 3.11+ (tomllib) is missing (#2466)
* feat: installer detects Python version and warns when 3.11+ (tomllib) is missing Several BMAD features need Python at runtime: memlog (3.8+) and the TOML config resolution scripts (3.11+ for stdlib tomllib). Users install into varied environments (Linux, Windows, WSL, Docker) where Python may be missing or too old, and previously only found out via runtime errors. The installer now probes PATH at startup (py -3 / python3 / python) and classifies the result: 3.11+ passes silently with a success line; 3.8-3.10 or missing/too-old Python gets a warning naming exactly which features degrade, plus per-platform install hints. The warning requires an explicit ack — continue (fix later, no reinstall needed) or quit and re-run after installing Python. Warn-don't-block: most of BMAD works without Python, so the install is never refused. In --yes mode the warning logs and continues without prompting. * fix: align Python check with runtime truth (python3) and harden edge cases Review fixes for the installer Python check: - Probe python3 first on all platforms: every runtime call site invokes a literal python3, so only that command vouches for BMAD features. Python found via py/python now gets an explicit mismatch warning instead of a false "all BMAD features supported". - Treat closed/piped stdin as non-interactive (in addition to --yes) so scripted installs no longer silently exit 0 via clack's cancel path. - Retry probes with shell:true on win32 EINVAL (CVE-2024-27980 hardening rejects .bat/.cmd shims like pyenv-win's without a shell). - Add Suite 46 branch tests for checkPythonEnvironment with stubbed detection, prompts, and process.exit. |
||
|
|
fbb48ed711 |
fix: remove empty skill-group dirs left in _bmad after install (#2461)
* fix: remove empty skill-group dirs left in _bmad after install Skill cleanup removed each skill's own directory but never pruned the now-empty grouping folders above it (e.g. _bmad/bmm/1-analysis), leaving empty dirs behind after every install. Walk up from each removed skill dir and drop empty parents, stopping at the bmad root. * fix: harden empty-parent pruning boundary and cleanup Use a path-boundary check instead of a string prefix so sibling dirs (e.g. _bmad2) can't match the bmad root, and make the walk best-effort so a dir that vanishes or fills in mid-walk never aborts the install. Move the test fixture cleanup into finally so failures don't leak temp dirs. --------- Co-authored-by: Brian <bmadcode@gmail.com> |
||
|
|
b9431d6d99 |
Shared canonical memlog script (src/scripts/memlog.py) + bmad-spec as first consumer (#2462)
* bmad-spec: make the memlog canonical, SPEC.md a derived view Replace the bespoke .decision-log.md with the shared memlog script (_bmad/scripts/memlog.py, same location as resolve_customization.py). The append-only memlog becomes the single source of truth; SPEC.md and spec-authored companions are re-derived from it (plus cited sources for raw content) on each run instead of hand-patched. This makes bmad-spec the sole writer of the spec and lets the surrounding steps (PRD, UX, architecture, epics) feed one spec in any order without merge drift. - New "Memory and derivation" section: memlog canonical, SPEC.md a projection, single-writer rule, append/init via the shared script, no status field (terminal moments are event entries). - Operation reads the prior memlog (not the rendered SPEC.md) as the authority on decisions and capability IDs on update. - Conflict-surfacing: live sources/companions that disagree on a field are raised to the user, resolution logged as a new entry. - Rename .decision-log.md -> .memlog.md across SKILL.md and assets. * core: add shared canonical memlog.py in src/scripts Single source-of-truth memlog: append-only, chronological working-memory log for skills. Installs to _bmad/scripts/memlog.py via the existing src/scripts sync (beside resolve_customization.py), so any skill can call it at runtime — bmad-spec is the first consumer. Merges the neutral API (--workspace, free-form --type/--by, generic set) with crash-safe fsync atomic writes. No lifecycle status by design: a memory log records completion as an event entry, never a frontmatter flag. Also accepts --path for callers that hold the file path directly. 30 tests. * bmad-spec: include event in memlog --type list The documented append --type set omitted event while the next line requires --type event for terminal moments. Align the list. * Fix memlog Python floor and exclude tests from install - memlog.py: add 'from __future__ import annotations' so PEP 585/604 hints stay lazy; the script runs on Python 3.8+ instead of crashing below 3.10. Correct the requires-python header to >=3.8. - installer.js: filter tests/, __pycache__/, .pytest_cache/, and *.pyc out of _installSharedScripts so dev-only files never ship to users. |
||
|
|
fdd65dc3d9 |
fix(skills): pass diff output inline to the blind-hunter reviewer (#2463)
The Blind Hunter subagent intentionally has no tool access, but the
review steps never said how {diff_output} should be delivered. Orchestrators
typically wrote the diff to a temp file and asked the agent to read it,
which silently fails (0 tool calls), and the 10-finding requirement then
pushes the agent to hallucinate findings against code it never saw.
State explicitly that the diff is passed inline in the subagent prompt,
in both bmad-code-review step 2 and bmad-quick-dev step 4.
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
|
||
|
|
397b2a5c87 |
feat: add CodeWhale as supported installer platform (#2459)
CodeWhale uses .codewhale/skills/ (project) and ~/.codewhale/skills/ (global) for skill directories, matching the existing config-driven installer pattern. - platform-codes.yaml: codewhale entry after codex - test: Test 12b validates install target and setup |
||
|
|
072d0a7458 |
fix(skills): renumber retrospective workflow steps (#2448)
Co-authored-by: Brian <bmadcode@gmail.com> |
||
|
|
717a84f2e8 |
docs(fr): sync French docs with latest English source + fix non-ASCII anchor validation (#2408)
* docs(fr): translation of install-custom-modules Reference commit |
||
|
|
faffffedbb | docs: update planning workflow diagram (#2444) | ||
|
|
b178f27c01 | fix(bmad-create-epics-and-stories): discover bmad-ux spine outputs (#2446) | ||
|
|
c9d9316e97 |
fix: clarify quick dev subagent use (#2450)
* fix: clarify quick dev subagent use * fix: clarify subagent use in more workflows |
||
|
|
feab3d5e4e |
bmad-brainstorming: facilitation modes, append-only memlog, and a visual session composer (#2445)
* Initial draft: brainstorming improved
* bmad-brainstorming: apply quality-analysis fixes
- Add ## Overview heading (prose was already present)
- Fix resume scan to glob output_dir/*/session.md (per-session subfolders);
handle multiple in-progress sessions
- Anchor brain_methods to {skill-root} and always pass --file to brain.py
(--file before subcommand); drop the unreliable conditional
- Log decisions, dismissed E3 false positive, verified tests (15 passed)
* bmad-brainstorming: memlog session memory + facilitation refinements
Replace the running-log concept with a generic, append-only memlog
(scripts/memlog.py): a flat, chronological, write-only session memory any
skill can reuse. Entries land at the end in the order they happen; --type
tags the kind (idea/insight/question/decision/technique); nothing is
grouped, reordered, or rewritten. The file is .memlog.md, read only on resume.
- scripts/memlog.py (init/append/set) + test_memlog.py (20 tests)
- SKILL.md: reordered into framing + flow; lean Memlog framing; batch
technique model (Facilitator Chosen / Browse / Category / Inventive Flow);
Progressive removed; facilitation stance preserved
- references/finalize.md: two-move synthesis + opt-in artifacts, each derived
from the memlog via subagent
- references/headless.md, customize.toml: memlog wiring + per-topic folders
* bmad-brainstorming: gate technique-flow choice and stop full-catalog dumps
- brain.py: `list` now requires --category or --all; a bare `list` is refused so the full ~100-technique catalog can no longer flood context. --all is the deliberate full-dump escape hatch.
- SKILL.md: technique-flow selection is now a hard gate (present the four ways, wait for the user's pick) instead of a soft default that got skipped; Stance "no multiple-choice" rule scoped to generation, with an explicit carve-out for that one process menu.
- headless.md: use `list --all` deliberately, passing --file.
- customize.toml: fix stale "progressive flows" wording to match the four real flows.
- test_brain.py: regression tests for the list guard (bare refused, --all dumps all).
* bmad-brainstorming: remove .decision-log.md build-time artifact
The workflow-builder writes .decision-log.md to track its own build session; it is a build-time artifact, not part of the shipped skill, so it should not be committed to the project.
* bmad-brainstorming: facilitation modes, attributed memlog, and the selection composer
- Three facilitation modes chosen up front (Facilitator / Creative Partner / Ideate for me), each a loaded frame; SKILL.md routes mode + technique selection primarily through the selection page, with the in-chat menus as fallback.
- memlog: optional --by user|coach attribution (required in Creative Partner) so authorship stays visible in the log.
- brain.py: generates a self-contained "browse all" selection page (brain-selector.html) - a session composer with facilitation mode, a hand-picked + Random + Invent + AI-picks technique strategy, category toggle-chips and a category-aware filter, and a copy-to-clipboard prompt with a paste-back banner. Category-tinted cards, 13 crafted category icons, and a hand-assigned icon for each of the 100 techniques. `html` writes to a file (never dumps the catalog into context); a snapshot test keeps the shipped page in sync with the CSV.
- Drop the now-unused Six Thinking Hats detail file; the catalog needs no detail files.
- finalize.md: synthesis is mode-aware and the "hand them the mirror" step reads the by-attribution tags.
* bmad-brainstorming: fix code-review findings
memlog.py
- Parse frontmatter by the first line that is exactly `---`, so a `---` inside a
topic/goal value no longer truncates the block, drops `status`, and breaks resume
forever. Neutralize newlines in field values on render too.
brain.py (selector page + CLI)
- Composer: category toggles now define session scope; the text filter is a pure
browse aid. checked() and the random pool both key off scope (offCats), so hidden
cards are never silently copied and a stray filter term can't starve a random draw.
- Clipboard: only show the "Copied!" banner when the copy actually succeeds; on
failure show a warning and a prefilled prompt() so the text is never lost.
- category_style: fall back to the neutral glyph instead of KeyError if the hue/glyph
dicts ever desync.
- random: clamp -n so a negative/oversized value returns cleanly instead of crashing.
- --extra: merge a JSON overlay of additional_techniques into every command, so the
browse page and category draws include custom techniques/categories as advertised.
docs
- SKILL.md: fix dangling `## Choosing Your Mode` anchor and the "Copy selection"
button label; document --extra in the regen instructions.
- mode-autonomous.md: persist the mode flip when handing off from autonomous, so a
resume restores the new stance.
- finalize.md: grammar/typo fixes (CodeRabbit).
tests
- Regression tests for the memlog `---` fix, --extra merge, negative -n, and the
category fallback; regenerated the snapshot-tested selection page. Renamed the
shadowing `type`/`l` locals flagged by CodeRabbit. 52 passing.
* bmad-brainstorming: composer header polish + dark mode
- Center header content (.hwrap) so it aligns with the card column on wide screens.
- Replace the text filter with jump-nav: category chips smooth-scroll to their
section (offset for the sticky header); drop the category exclude-toggle, so
Random/AI draw from the whole catalog.
- Fix narrow-screen crowding between the chips and the Copy prompt button.
- Move Copy prompt to the end of the Techniques row, anchored to the Total readout.
- Add a per-mode hint line that explains the selected facilitation stance.
- Dark mode: refactor all colors to CSS variables + a dark palette, with a header
toggle (☾/☀) that defaults to system preference and persists in localStorage; an
inline head script applies the theme before first paint to avoid a flash. Category
hues are lifted toward white on dark surfaces to stay legible.
Regenerated the snapshot-tested selection page; SKILL.md wording updated (chips are
jump-nav, not a filter). 52 Python tests passing.
* bmad-brainstorming: condense SKILL.md, extract resume + in-chat technique frames
- Rewrite SKILL.md: consolidate framing, merge session setup into Run a
Session, descriptive (non-imperative) Overview true across all 3 stances
(~2,790 -> ~2,070 tokens)
- Extract Resuming to references/resume.md (loads only on resume)
- Extract in-chat technique selection to references/in-chat-techniques.md
(loads only when the composer page is declined)
- Add HTML-open recovery guidance to the composer-page step
- Ideate-for-me now auto-produces the HTML keepsake (finalize.md +
mode-autonomous.md) instead of asking first
* Enhance bmad-brainstorming: goal facet, proven grouping, convergence, icon sidecar
Catalog (brain-methods.csv -> 108 methods):
- Add provenance / good_for / audience columns (additive, backward-compatible)
- Add 8 researched classic methods: How Might We, Job to Be Done, Empathy Map,
Backcasting, TRIZ Contradiction, Fishbone Diagram, Build on What Works, Scenario Cross
Selector page (brain.py generator):
- "Proven & Professional" lead group (29 named methods, cross-category)
- Super-group ordering (Structured/Creative/Wild/Introspective) replacing alphabetical
- "Great for" goal filter driven by good_for tags
- Per-category "Invent a ... technique" cards reusing the invent flow
Convergence:
- New references/converge.md (diverge -> converge -> finalize); wired into SKILL.md
Maintainability:
- Extract category + technique icons to assets/brain-icons.json; brain.py loads the
sidecar, with logic and fallbacks staying in code (8 new icons added, full coverage)
Docs:
- Add analysis/ (catalog-analysis.md + method-matrix.csv): the 4-axis review behind these changes
All 52 tests pass.
|
||
|
|
fae7015226 |
Redesign party-mode skill as conversation-first, subagents opt-in (#2441)
Reframes the party-mode skill around outcomes instead of a rigid subagent script, addressing issue #2280. - Voicing the room is the default; subagents become opt-in (--subagents) for rounds that genuinely need independent thinking. - Removes the lossy 400-word context cap and the 'Do NOT use tools' constraint that drove subagents to fabricate on grounded questions. - Adds a 'What Good Feels Like' bar: short in-character turns, real drama over consensus, brevity by default. - Adds orchestrator weaving so independently-produced turns read as one conversation without altering what any persona actually argued. - Slims SKILL.md from 128 to 75 lines. |
||
|
|
e74dd8040d |
docs: refresh skill metadata references (#2439)
* docs: refresh skill metadata references * docs: link BMad customization guide |
||
|
|
3bcd6c3cce | chore(release): v6.8.0 [skip ci] v6.8.0 | ||
|
|
62c836ee61 | docs(changelog): v6.8.0 release notes (#2427) | ||
|
|
db744d405f |
fix: support nested group paths in SSH Git URLs (#2379)
Co-authored-by: Brian <bmadcode@gmail.com> |
||
|
|
7b31b1accd |
feat: expand advanced elicitation methods with 19 new techniques (#2062)
Adds 19 new elicitation methods across 7 categories including a new 'framing' category. All existing 50 methods preserved. Entries sorted alphabetically by category then method name. New methods added: - advanced: Chain-of-Thought Scaffolding, Few-Shot Exemplar Priming - collaboration: Six Thinking Hats, Delphi Method - core: Second-Order Thinking, Inversion Analysis, Problem Decomposition, Analogy Mapping, Steelmanning - creative: Constraint Injection, Morphological Analysis - framing (new): Abstraction Laddering, Reframe the Question, Stakeholder Lens Rotation - learning: Deliberate Practice Loop - research: Source Triangulation - risk: Assumption Audit, Cascading Failure Simulation - technical: Boundary & Edge Case Sweep Closes #2061 Co-authored-by: Brian <bmadcode@gmail.com> Co-authored-by: Alex Verkhovsky <alexey.verkhovsky@gmail.com> |
||
|
|
9c291b7ca9 |
fix: resolve default branch explicitly when updating shallow-cloned custom modules (#2332)
With shallow clones (--depth 1), `origin/HEAD` becomes stale after the initial clone. The update path used `git reset --hard origin/HEAD` which never picked up new commits pushed to the default branch. Resolve the default branch name via `git symbolic-ref refs/remotes/origin/HEAD`, then fetch and reset against `origin/<branch>` explicitly. Falls back to `main` if origin/HEAD is not set. Co-authored-by: Brian <bmadcode@gmail.com> |
||
|
|
fea431fd2e |
fix(installer): read config.toml on re-run so user_name (and other user-scoped answers) are preserved as defaults (#2411)
loadExistingConfig only read from legacy _bmad/<module>/config.yaml files, but the installer writes user-scoped answers (user_name, communication_language, etc.) to _bmad/config.user.toml. On every subsequent reinstall those values were not loaded back, so the user got re-prompted instead of seeing their prior answers as defaults. Adds parseCentralToml — a lightweight line scanner matching the installer's own TOML output format — and updates loadExistingConfig to read config.toml and config.user.toml first (merging both into the same section buckets). Legacy per-module config.yaml files are kept as a fallback for pre-v6 installations. Co-authored-by: RobertOcsko <robert.ocsko@;seon.io> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Brian <bmadcode@gmail.com> |
||
|
|
9a2fba97a3 |
fix: capture dev story baseline commits (#2403)
Co-authored-by: Brian <bmadcode@gmail.com> |
||
|
|
065003fc95 |
Fix stale custom-source redeploys on quick-update (#2399)
* fix(installer): refresh custom-source cache on quick-update and persist channel marker * fix(installer): persist real next ref and atomically dedupe custom refresh * fix(installer): preserve custom-source cache when remote unreachable When git fetch fails against an existing custom-module cache, cloneRepo previously wiped the cache and attempted a fresh clone, which then also failed for the same reason (network down, repo deleted/moved, auth revoked) — leaving the user with no usable cache. With the new quick-update refresh path calling cloneRepo for every cached custom module, this turned transient remote outages into cache loss on every quick-update. - cloneRepo: on fetch failure with an existing cache, keep the previous clone and surface a warning via prompts.log.warn instead of removing the cache. The downstream metadata write uses the existing HEAD. - _refreshRepoCacheOnce: update the comment to reflect that the common "remote unreachable but cache exists" case is now handled inside cloneRepo; warn on the remaining unrecoverable failures so they aren't silent. Tests: 349 passed, 0 failed. --------- Co-authored-by: Brian Madison <bmadcode@gmail.com> |
||
|
|
7729ad461d |
docs: route all web-bundles install traffic to bmadcode.com/web-bundles (#2425)
Make bmadcode.com/web-bundles/ the single supported install path. The site keeps install steps current as Gemini and ChatGPT evolve, always points at the newest tagged release, and turns one signup into the notification channel for new bundles. - README.md: drop direct-folder install reference, point to the site - web-bundles/README.md: lead with Install (site), reframe folder as source for the shelf rather than install target - docs/explanation/web-bundles.md: replace the per-bundle INSTRUCTIONS.md steer with the site, replace the dead how-to link - docs/how-to/use-web-bundles.md: rewrite as a short pointer to the site (kept the file so existing inbound links resolve), retain prerequisites, persona customization, and build-your-own sections |
||
|
|
2b76d03316 |
feat(web-bundles): release packager + manifest for bmadcode.com/web-bundles/ (#2424)
* feat(web-bundles): add release packager + bundle manifest
Adds the infrastructure for shipping web bundles as downloadable ZIPs
attached to a GitHub Release, consumed by the upcoming
bmadcode.com/web-bundles/ page.
- web-bundles/bundles.json — manifest with persona, tagline, description,
accent color, motif key, knowledge files, and feature flags
(web-browsing, deep-research, stitch integration) for each of the 6
bundles. Top-level releaseTag and downloadUrlPattern so the
consuming page can construct download URLs without hardcoding.
- tools/bundle-web-bundles.js — packager that zips each bundle dir into
dist/web-bundles/{slug}.zip and prints the gh release create command.
Zero dependencies; uses system zip.
- .gitignore — exclude dist/web-bundles/ build artifacts.
The web-bundles-v1.0.0 release on GitHub is currently in draft state
with the 6 zips attached; it'll be published in coordination with the
Ghost site page going live.
* fix(web-bundles): single-source release tag, sharper bundle copy
- Remove downloadUrlPattern from bundles.json — the consuming page
derives the URL from releaseTag, so version bumps now touch one
field instead of two.
- product-brief-coach: drop "one-page" (briefs are whatever length
the product earns).
- brainstorming-coach: real numbers — 60 techniques across 10
categories — with concrete examples (SCAMPER, Drunk History
Retelling, Nature's Solutions, Six Thinking Hats, etc.) so the
card actually communicates the surprising breadth.
* fix(web-bundles): harden release script per PR review
- Verify the zip CLI is on PATH up front with a clear install
hint, instead of crashing mid-zip with an opaque execSync error.
- Wrap JSON.parse in try/catch; validate the manifest shape (bundles
array non-empty, releaseTag present, slug present per entry) before
trying to package, so config errors fail with a targeted message.
- Catch zip failures per-bundle and surface the failing slug.
- Refuse to print the gh release command when zero bundles were
packaged (would otherwise mislead the user into creating an empty
release).
- Derive --title from manifest.releaseTag so the printed command can
never drift from the actual tag (was previously hardcoded
"Web Bundles v1" while the tag had moved to v1.0.0).
- Remove the stale `web-bundles-v1` example from the file header.
Addresses augmentcode bot review comments on PR #2424.
* docs(web-bundles): rewrite copy to actually sell what each bundle does
The JSON drives the bmadcode.com/web-bundles/ page; previous copy
was generic and undersold the actual capabilities. Rewrote each
tagline + description to lead with concrete, differentiating facts
pulled directly from each bundle's SKILL.md:
- Brainstorming Coach: 60 techniques across 10 categories with
specific names (SCAMPER, Drunk History Retelling, Nature's
Solutions, Shadow Work Mining, Superposition Collapse); calls
out the 4 routes (browse, recommend, random, progressive) and
the ~100-idea quantity-unlocks-quality target.
- Product Brief Coach: names the three intent modes (Create /
Update / Validate) and the two working paths (Fast / Coaching);
surfaces the [ASSUMPTION] tag system and the Addendum.
- PRFAQ Coach: details the 4 stages (Ignition / Press Release /
Customer FAQ / Internal FAQ + Verdict), the 9 press release
sections, the weasel-word list ("best-in-class", "seamless"),
and that it adapts for commercial, internal, OSS, community.
- PRD Coach: spells out the two entry points (Vision+Features
vs Journey-led), named-protagonist journeys, glossary
discipline, stable ID system (FR-1..N, SM-C1..N), and the
7-dimension validation rubric.
- UX Coach: leads with the two-spine contract (DESIGN.md +
EXPERIENCE.md), Don Norman framing, named-protagonist
journeys, surface closure as the test, and Stitch integration.
- Market & Industry Research: leads with Deep Research as the
engine, names Porter and Christensen as anchors, lists the 6
deliverable sections, and frames the deliverable as synthesis
not a research dump.
* fix(web-bundles): security hardening + strict bundle validation
Two issues raised by coderabbit on the latest commit:
1. Shell injection surface: execSync was building the zip command
with a template literal that interpolated bundle.slug from JSON.
Even with our controlled inputs, a slug with shell metacharacters
would break quoting. Switched to execFileSync with an argument
array (no shell) and added a strict ^[a-z0-9][a-z0-9-]*$ slug
regex enforced before any FS or zip call.
2. Missing bundle directories were [SKIP]-warned but the script
still printed the release command, allowing an incomplete release
to ship cleanly. Now treated as fatal: any missing or invalid slug
blocks the printed gh command and exits non-zero with the offending
slugs listed.
web-bundles-v1.0.0
|
||
|
|
cede485217 |
feat(docs): Add sidebar order validator for doc frontmatter (#2409)
* feat(docs): add sidebar order validator
Adds tools/validate-sidebar-order.js to validate sidebar.order values
in YAML frontmatter across English and translated docs.
Checks for duplicate orders, gaps in sequence, and missing order fields.
For translations, also warns on order drift from English counterparts.
Wired into the quality script as docs:validate-sidebar.
* fix(validate-sidebar): tighten language detection and drift guard, add docstrings
* fix(validate-sidebar): replace subdirectory heuristic with locale pattern matching
detectLanguageDirs() previously classified any top-level docs/ directory
containing subdirectories as a translation language. This was too broad —
if an English section ever gained nested subfolders it would be silently
excluded from validation.
Replaced with a BCP 47 locale-code regex (/^[a-z]{2}(?:-[a-zA-Z]{2})?$/)
that matches known patterns (cs, fr, vi-vn, zh-cn) and won't falsely
classify content sections like explanation/ or reference/.
* fix(validate-sidebar): guard drift check against undefined order values
extractSidebarOrder() returns { hasSidebar: false } when no sidebar block
exists, leaving order as undefined rather than null. The drift check only
guarded against null, allowing undefined values to emit noisy warnings
like "Order drift: ... order undefined".
Changed the guard to typeof === 'number' which correctly excludes both
undefined and null without relying on a specific sentinel value.
* chore(validate-sidebar): add JSDoc docstrings to all functions
Adds @param and @returns annotations to extractSidebarOrder,
detectLanguageDirs, getEnglishSections, checkDirectory,
checkTranslationDrift, and relativePath.
* fix(validate-sidebar): add to pre-commit hook
* refactor(validate-sidebar): harden parsing and edge-case handling
Refactor to main() wrapper with pure return-based APIs, single directory
scan, and shared reporting. Harden frontmatter parsing (anchored delimiter,
direct-child-only order extraction, flow mapping support) and validation
(Infinity/zero guard, gap flood cap, multi-segment locales, graceful ENOENT).
* docs: fix sidebar.order duplicates and gaps across all locales
Resolves all validator errors flagged by the new
tools/validate-sidebar-order.js check.
English (docs/{explanation,how-to,reference}/):
- Renumbered to remove duplicates; established reading order
for new explanation pages added since orders were last set.
Translations (cs, fr, vi-vn, zh-cn):
- Mirrored English structural ordering where files exist, then
compacted to 1..N within each directory to eliminate gaps
caused by missing translation files.
Non-blocking drift warnings remain where translation directories
have fewer files than English; these are expected per the
validator's design.
---------
Co-authored-by: Brian Madison <bmadcode@gmail.com>
|
||
|
|
436845493f |
fix(skills): strengthen activation guardrails to prevent LLM short-circuiting (#2398)
* fix(skills): strengthen activation guardrails for all workflow skills
Add explicit "Activation is complete" boundary markers that require
confirming activation_steps_prepend and activation_steps_append were
fully executed before beginning the main workflow.
Previously, the guardrail was either missing (bmad-product-brief,
bmad-prd, bmad-investigate) or too weak ("Begin the workflow below").
LLM agents would short-circuit complex activation sequences (INCLUDE →
READ → RUN → CHECK → FILTER → CD) by guessing variables instead of
executing steps in order, causing append steps and on_complete hooks
to be silently skipped.
The new guardrail explicitly names both prepend and append steps,
requiring confirmation before proceeding. This prevents agents from
starting the main workflow in parallel with activation.
23 skills updated: bmad-product-brief, bmad-prd, bmad-prfaq,
bmad-investigate, bmad-create-story, bmad-dev-story,
bmad-quick-dev, bmad-code-review, bmad-correct-course,
bmad-sprint-planning, bmad-sprint-status, bmad-retrospective,
bmad-qa-generate-e2e-tests, bmad-checkpoint-preview,
bmad-check-implementation-readiness, bmad-create-architecture,
bmad-create-epics-and-stories, bmad-generate-project-context,
bmad-create-ux-design, bmad-document-project, bmad-market-research,
bmad-technical-research, bmad-domain-research.
* fix(skills): extend activation gate to agent + new skills, refine placement
- bmad-product-brief / bmad-prd: pull activation_steps_append out of
the numbered list so the sentinel reads as a paragraph break, not
as the next list item.
- bmad-investigate: move the sentinel above Step 7 (routing) — Step 7
is workflow routing, not activation; the gate must fire first.
- bmad-agent-{analyst,tech-writer,pm,ux-designer,architect,dev}: add
the same gate between Step 7 (append) and Step 8 (menu dispatch).
Persona skills had the same short-circuit risk but no sentinel.
- bmad-ux, bmad-spec: new skills introduced on main after this branch
forked; apply the same gate so the pattern stays consistent.
- removals.txt: register bmad-create-ux-design as renamed to bmad-ux.
---------
Co-authored-by: Brian Madison <bmadcode@gmail.com>
|
||
|
|
1a5df418b3 |
fix: keep brainstorming idea flow collaborative (#2402)
Co-authored-by: Brian <bmadcode@gmail.com> |
||
|
|
bfecb6ee95 |
fix(bmm-skills): define project_context in dev-story, sprint-planning, sprint-status (#2422)
Co-authored-by: Brian <bmadcode@gmail.com> |
||
|
|
d659a03d53 |
docs(web-bundles): fix install framing and add update/customize guidance (#2423)
- Drop "one-click install" framing in README and explanation page; setup is multi-step but consistent across the shelf. - Drop "two files (sometimes three)" claim; honestly name SKILL.md, INSTRUCTIONS.md, and any required data files (templates, CSVs, validation checklists). - Add explicit setup pattern in README (create Gem/GPT, upload knowledge, paste instructions, save). - Add "Updating and customizing" section to the explanation page covering re-upload-the-attachments updates and the rule of thumb that custom changes belong in the pasted instructions block, not the knowledge files, so future updates don't clobber team customizations. |
||
|
|
3bc2ad30a3 |
feat(web-bundles): bring back V4 web bundles for V6 (#2421)
* feat(web-bundles): bring back V4 web bundles for V6 Restores the V4 web bundle pattern for V6. BMad planning skills are repackaged as one-click installs for Google Gemini Gems and ChatGPT Custom GPTs, so users can run analysis and planning conversations in flat-rate web LLM subscriptions instead of metered IDE tokens. Current shelf (6 bundles): brainstorming, product brief, PRFAQ, PRD, UX, market and industry research. Each bundle ships a SKILL.md protocol, an INSTRUCTIONS.md with a default persona and a contrasting swap example, and any required data files. New in this commit: - Market & Industry Research bundle merging market and domain research with Porter and Christensen anchors, Mary persona inherited from the BMad analyst agent, Geoffrey Moore swap example, Deep Research mode integrated as the default research path - web-bundles/README.md folder index listing all 6 bundles - README.md section announcing the V6 web bundle shelf - docs/explanation/web-bundles.md concept page (what, why, when) - docs/how-to/use-web-bundles.md install steps for Gemini Gems and ChatGPT Custom GPTs * docs(web-bundles): unindent admonition closer in use-web-bundles.md The :::note[Prerequisites] closer was indented under the last bullet, which can prevent the admonition from closing and break Starlight rendering for the rest of the page. Flush left now. |
||
|
|
189c2b85eb |
docs(en): add bmad-investigate / IN trigger to agent tables (#2410)
The forensic investigation feature (commit
|
||
|
|
f28d04a92a |
fix: write customization JSON as UTF-8 (#2414)
Co-authored-by: cyphercodes <cyphercodes@users.noreply.github.com> Co-authored-by: Brian <bmadcode@gmail.com> |
||
|
|
aa6dece05d |
feat(bmad-spec): introduce Spec kernel distiller skill (#2417)
* feat(bmad-spec): add Spec kernel distiller skill
New 2-plan-workflows skill that distills any intent input (brain dump,
PRD, transcript, brief) into a spec.md carrying the five-field kernel:
Problem, Capabilities, Constraints, Non-goals, Success signal. Headless
callers receive JSON; interactive runs close conversationally with the
spec path and gap-coverage invitations.
Includes:
- SKILL.md with activation contract and conventions
- customize.toml exposing template path, output path, run-folder pattern
- assets/spec-template.md (five-field skeleton)
- assets/headless-schemas.md (JSON IO contracts)
* remove brain-dump fallback config from bmad-spec customize.toml
* refactor(bmad-spec): companions+sources model, routing tilt, flat output path
- Collapse `related:` into `companions:`; companion paths may point inside the spec folder (spec-authored) or outside it (adopted from an upstream skill), distinguished implicitly by path
- `sources:` reserved for fully-absorbed inputs; downstream does NOT read these
- Soften mutation contract: bmad-spec owns SPEC.md and spec-authored companions; adopted companions belong to their originating skill
- Add "when to spawn a companion" tilt: multi-item catalogs, tables, diagrams (always), editorial voice rules; sub-bullets in a kernel field signal it has outgrown the kernel
- Fix Spec Law rule 7 and Pass 2: load-bearing content lands in SPEC.md or a companion, not the decision log (the log records wrapper-drops only)
- Flatten output path to `{planning_artifacts}/specs/spec-{slug}-{date}/`, mirroring `prds/` and `ux-designs/`; drop `spec_folder_name` (no longer used)
- Extract Load-bearing definition into its own section above Spec Law
* chore(core): retire bmad-distillator, promote bmad-spec to core
- Delete bmad-distillator/ and all registry + doc references (superseded by bmad-spec; no skill or workflow in any BMad module invoked it)
- Add bmad-distillator to removals.txt so installer cleans it from existing IDE skill directories on update
- Move bmad-spec from bmm-skills/2-plan-workflows/ to core-skills/ (universal scope: game design, research hypotheses, editorial briefs, policy, business plans, not just software)
- Register bmad-spec in core module-help.csv and bmad-pro-skills marketplace plugin
- Drop bmad-distillator section from core-tools.md (en, vi-vn, cs, fr, zh-cn) and vi-vn dev guide; renumber subsequent sections
* refactor(bmad-spec): add lean-prose discipline + generalize help text
- Add Spec Law rule 8: lean prose. Every sentence carries load-bearing content; cut decoration, hedges, backstory, throat-clearing. Applies to SPEC.md, companions, and decision log.
- Update Self-Validate Pass 1 to enforce rules 1-6 and 8 (rule 7 stays in Pass 2)
- Prime the operation up-front: write lean from the first pass, every sentence must earn its place
- Note in Companions section that companions follow the same lean discipline
- Generalize core module-help.csv entry: domain-agnostic framing (software, game design, research, editorial, policy, business, anything intent-bearing); call out succinct, no-fluff and "locks the WHAT before the HOW" as the value props
* fix(bmad-spec): address PR review findings (CodeRabbit + Augment)
- headless-schemas.md: rewrite spec_path examples to point at the spec folder (not a file), rename source_artifact to sources[] array, add companions[] array, update verdict from "six rules" to "eight rules", disambiguate reason requirement (only when status=blocked)
- SKILL.md activation: fix config path from {project-root}/_bmad/config.yaml to {project-root}/_bmad/core/config.yaml (matches other BMM skills)
- customize.toml + SKILL.md Workspace: drop {date} from default run_folder_pattern (spec-{slug}); same slug = same folder = trivial in-place update, no glob-and-pick-most-recent needed. Override available for users who want dated history.
- spec-template.md: rename "## Success signals" (plural) to "## Success signal" (singular) to match SKILL.md kernel naming
- SKILL.md Frontmatter conventions: fix adopted-companion example path from _bmad-output/ux-designs/foo-ux/DESIGN.md to ../../ux-designs/ux-foo-bar-2026-05-23/DESIGN.md (matches actual flat-output convention)
- SKILL.md Spec Law: fix double-period typo in rule 2 ((stack, conventions)..)
- SKILL.md Overview: fix awkward "bloat with expansive line item details the kernel" phrasing; drop software-flavored downstream consumer list since bmad-spec is now a core skill serving any domain
* fix(bmad-spec): drop {planning_artifacts} dependency; output to {output_folder}/specs
bmad-spec is a core skill but its default path used {planning_artifacts}, a bmm-module variable. Core-only installs (no bmm) would fail at activation when the resolver tried to expand the path.
Land specs directly under {output_folder}/specs/spec-{slug}/ instead. Works in any install regardless of installed modules, and aligns with the long-term BMad direction of grouping artifacts as siblings under {output_folder}/<type>/ rather than nested under planning vs implementation parents.
In bmm installs, adopted-companion paths from spec to UX/PRD pick up one extra .. (e.g., ../planning-artifacts/ux-designs/<run>/DESIGN.md) since the spec folder is now one level up from planning-artifacts. Examples in SKILL.md and headless-schemas.md updated. module-help.csv output-location updated and stale -{date} fragment removed.
* docs(bmad-spec): add reference docs, trim headless schema, tighten defaults
- Add full bmad-spec entry to docs/reference/core-tools.md and table-row
stubs to cs/fr/vi-vn/zh-cn (full translation pending).
- Strip headless-schemas.md to a minimal {status, files} success response
and {status, error_code, reason} blocked response. Drop spec_path,
capabilities, verdict, decision_log_path — all derivable from the files
themselves.
- Narrow customize.toml persistent_facts default from recursive glob to
single {project-root}/project-context.md; document override path.
- Drop unused {doc_workspace} convention line from SKILL.md.
- Clarify Self-Validate verdict handling for interactive vs headless.
- Document missing_slug error code in SKILL.md + headless schema.
|
||
|
|
ee47e30cf6 |
refactor(bmad-ux): spine-based UX skill (DESIGN.md + EXPERIENCE.md) (#2413)
* refactor(bmad-ux): replace bmad-create-ux-design with lean spine-based bmad-ux
* refactor(bmad-ux): adopt DESIGN.md spec, split into two-file spine, align prd/brief
DESIGN.md (visual identity per the Google Labs spec) and EXPERIENCE.md
(behavior, flow, IA) replace the single design.md spine. EXPERIENCE.md
cross-references DESIGN.md tokens via the spec's {path.to.token} syntax.
Example suite restructure
- 3 DESIGN.md examples: editorial (Stitch source / Linen & Logic), calm
native mobile (Quill), shadcn-on-Tailwind web SaaS (Drift)
- 2 paired EXPERIENCE.md examples (Quill, Drift); Linen & Logic unpaired
to model the Stitch handoff scenario
- Replaces the prior 2-example combined spine set
Discovery additions (outcome-driven, one line each)
- Source scan: glob {planning_artifacts}/ for candidates, parent never reads
- Form-factor: resolve before IA closes; journeys often derive it
- Surface closure: every stated need has a surface, every surface a journey
- Named-protagonist journeys (Mary, not "the user")
- Design handoff working mode (extensible producer registry, default: Stitch)
PRD and brief alignment with same insights
- bmad-prd: dropped standalone Primary Persona section from template;
renamed "Personas + Journeys" entry to "Journey-led"; named-protagonist
rule on UJs; form-factor probe; validation checklist updated
- bmad-product-brief: form-factor surfaced in Discovery topics
Quality scan fixes
- Added ## Overview heading; renamed ## Activation to ## On Activation
- Replaced ../ paths in example assets with {planning_artifacts}/
- Sources section compressed (abstract delta-only rule)
- Working mode aligned to "Fast path" / "Coaching path" BMad-wide convention
New
- references/design-md-spec.md: working summary of the spec for the LLM
- customize.toml: design_md_examples, experience_md_examples,
design_handoffs registries
- .prettierignore: ignore .analysis/ quality-scan artifacts repo-wide
* refactor(bmad-ux): activation parity with prd/brief, opt-in reviewer gate, no headline grade
- Restructure On Activation as numbered six-step list mirroring bmad-prd
and bmad-product-brief, restoring the explicit key-resolution list that
earlier crammed-paragraph form had dropped (planning_artifacts and
friends were silently unresolved at Create).
- Make Reviewer Gate opt-in and lens-selectable. At Finalize, ask before
spending tokens on parallel reviewer subagents; at Validate intent,
skip that question but still confirm lens picks. Stops the auto-run
WCAG audit on hobby-stakes work.
- Drop the overall validation grade. Per-category verdicts and severity
counts already say what is true; a single headline grade conflated
design rigor with release readiness and led "POOR" pills landing on
reports whose own bodies described the work as strong. Removed from
references/validate.md (ladder rule + markdown twin), HTML template
(grade pill div + CSS vars + classes).
- Trim creative-tools.md: drop the Custom entries section. Runtime
prompt files should only carry what the LLM needs to act in this
moment; how-to-extend-via-TOML is setup-time human documentation
already covered by customize.toml comments.
* fix(bmad-ux): align validation report template with 8-category rubric
Template placeholders referenced 'Decision-readiness' and 'seven dimensions'
from the prior rubric. Replace with TEMPLATE_CATEGORY_NAME and inline the
eight canonical categories from references/validate.md so the synthesis pass
names them verbatim.
* fix(validate-skills): remove stale WF-01/WF-02 rules
WF-01/WF-02 were originally scoped to workflow.md files (now mostly gone)
but had been generalized to flag name/description in any non-SKILL.md
markdown. That over-captured legitimate spec files — e.g. DESIGN.md
examples in bmad-ux/assets/ that carry name/description per the Google
Labs DESIGN.md spec.
Step files are already covered by STEP-06. Rule count: 14 → 12.
* fix(bmad-ux): address PR review followups
- validation-report-template.html: severity badge class is badge-sev-*,
not sev-* (the comment misled the synthesis pass).
- Sweep dangling bmad-create-ux-design references: module-help.csv,
bmad-agent-ux-designer/customize.toml, bmad-prd/SKILL.md handoff list,
workflow-map.md (en + 4 translations), getting-started.md (en + 4
translations). Workflow-map output column updated to DESIGN.md +
EXPERIENCE.md.
- references/validate.md: Markdown capitalized as a proper noun.
|
||
|
|
1da6bf80df | chore(release): v6.7.1 [skip ci] v6.7.1 | ||
|
|
b4f47e1f05 |
docs(changelog): add v6.7.1 entry for installer stale-module fix (#2393)
Documents the fix landed in #2391 and the manual step required for users who installed the experimental BMad Automator module under its previous `baut` code. |