Files
magnus919_agent-skills/bmad/references/classification.md
T
Magnus HedemarkandGitHub e10508b034 feat(bmad): add BMad control-plane protocol skill (#400)
* feat(bmad): add BMad control-plane protocol skill

New standalone methodology skill that lets any agent run the BMad method
(Breakthrough Method of Agile AI-Driven Development) as a harness-agnostic
control-plane protocol: five-field intent contracts, direct/bounded/initiative
classification, review-as-triage, failure routing by layer, and autonomy gating
with machine-readable spec status.

- SKILL.md protocol core with progressive disclosure + When not to use
- README.md human-facing install guide
- 9 references: protocol, classification, spec, lifecycle, project-context,
  review-and-failure-routing, autonomy, party-mode, adoption
- 4 templates: SPEC, INTENT, STORY, REVIEW
- scripts/check-spec.py + 16 tests (stdlib, deterministic spec validation)
- evals/evals.json: 9 output-quality cases
- Routing seams from bmad to adjacent skills and back from
  spec-driven-development, product-shaping, implementation-planning, neckbeard
- Catalog updates: root README, skill-triggers, marketplace/plugin/llms.txt

Closes #399

* fix(bmad): address droid-review findings

- check-spec.py: skip headings inside fenced/indented code blocks so a spec
  cannot PASS on section text that only appears in a code sample
- check-spec.py: catch UnicodeDecodeError on non-UTF-8 files and report FAIL
  instead of crashing
- STORY.md template: add created key for resumability/traceability parity
- SPEC.md template: split in-progress and in-review status bullets
- add 2 regression tests (heading-in-fence, non-UTF-8)

* fix(bmad): address droid-review round 2

- check-spec.py: read specs with utf-8-sig so a UTF-8 BOM cannot silently
  disable the frontmatter status check
- check-spec.py: handle standard YAML inline comments after status values
  (status: draft  # pending review) without a false FAIL
- references/protocol.md: make lifecycle phrasing consistent with
  lifecycle.md — four phases plus a learning closeout
- add 2 regression tests (BOM, inline comment)

* fix(bmad): tolerate trailing whitespace on frontmatter delimiters

A spec whose --- delimiter lines carry trailing spaces or tabs would silently
disable the status check and let an invalid status PASS. Relax the delimiter
pattern and add a regression test.

* fix(bmad): ignore inline comments in quoted status values

* fix(bmad): tolerate leading blank lines before frontmatter

* fix(bmad): fail closed on unparseable frontmatter, matching fence markers

Address droid-review round 5 and 6 findings as a single closed class:
- Fail closed when a file opens with a --- delimiter that cannot be parsed,
  so no whitespace/frontmatter permutation can silently disable the status
  check (previously: unparseable frontmatter was treated as 'no status'
  warning, letting an invalid status PASS).
- Track fence opener markers in collect_headings so a mismatched fence no
  longer closes a code block early (false-PASS on missing sections) and an
  unclosed fence no longer swallows real headings.
- Accept empty well-formed frontmatter (---\n---) and closing delimiters
  without a trailing newline.
- STORY.md template: parent-spec points at the sibling SPEC.md.
- README: status vocabulary is not a strict linear chain; blocked is a
  resumable routing signal.

Whitespace/frontmatter mutation sweep: 9 formatting variants x valid/invalid
status all verdict correctly; malformed delimiters fail closed. 29 tests.
2026-08-24 08:05:43 -04:00

3.7 KiB

Work Classification: Route to the Smallest Safe Path

The first decision in every BMad-style run. The goal is never to maximize ceremony — it is to spend the minimum process that keeps the work safe. Classify, then choose.

The three classes

Class Shape Blast radius Process
Direct Goal clear, change local, existing patterns well established Small Minimal clarification, then implement. No contract file needed.
Bounded Coherent change, some choices to make, spans a few files/modules Medium Five-field intent contract (or lightweight spec), short plan, implement, review.
Initiative Cross-component, multi-story, high-risk, or strategically uncertain Large / durable Analysis → planning → solutioning → implementation → learning. Intent contract plus architecture plus stories.

Direct-work tests

Use the direct path when all of these hold:

  • The goal is clear to the requester and to the agent after one pass.
  • The change is local to one area with established patterns.
  • No major product or architectural choices are involved.
  • Acceptance can be expressed with focused tests or simple observations.
  • The blast radius is small enough that a wrong guess is cheap to undo.

A typo fix, a documented one-file bug, a rename following an existing convention — all direct. Forcing a planning ceremony onto these is exactly the overhead BMad rejects.

Bounded-work tests

Use the bounded path when:

  • The change is coherent but spans enough surface that assumptions matter.
  • Several reasonable approaches exist and the choice affects the result.
  • The work will be reviewed by another agent or a human checkpoint.
  • The work may be resumed later or delegated — a written contract earns its keep.

The contract can be five bullets in conversation for the smallest bounded work; write it to a file when the work outlives one session or crosses an agent boundary.

Initiative tests

Use the full path when any of these hold:

  • Several components or systems must coordinate.
  • The problem statement is still uncertain.
  • Meaningful UX, security, privacy, data, or operational choices exist.
  • Multiple stories may be implemented by different agents.
  • The work will create durable architectural consequences.
  • The human needs a written contract for later review or delegation.
  • You cannot state a coherent intent contract after one pass.

Initiative work from a vague chat request is an explicit stop condition: do not implement it directly. Compress intent, get approval, then decompose.

The one-question rule

  • Inspect the repository, artifacts, config, and tests before asking anything.
  • Ask at most one high-leverage question at a time.
  • When a choice is needed, provide a recommended answer and the trade-off.
  • Keep questions about choices, not facts you could retrieve.

Stop conditions

Stop and report instead of proceeding when:

  • The intent contract cannot be stated coherently.
  • The request is initiative-scale and no contract has been approved.
  • The repository state is unsafe to modify (uncommitted work you did not create, a shared checkout in use, a dirty tree you cannot restore).
  • Acceptance cannot be expressed observably.
  • Required capability or credentials are missing.
  • A destructive or irreversible action was not explicitly authorized.

Routing a tripped loop

If work keeps failing or expanding, do not extend the boundary mid-loop. Route back to classification:

  • Failure because scope was unclear → re-compress intent (bounded contract).
  • Failure because the problem was unvalidated → route to product-discovery.
  • Failure because the bet was never shaped → route to product-shaping.
  • Failure because the delivery flow has its own gates → route to neckbeard.