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

82 lines
3.7 KiB
Markdown

# 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`.