Spec beads review
Stress-test beads for coverage, granularity, dependency correctness, and actionability using adversarial agent teams. Use this after spec-beads-generate when the beads workspace is populated.From its SKILL.md
npx -y skills add mwarger/forge --skill spec-beads-reviewAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
10.3 KB, as published. Nobody here has run it
Use this after spec-beads-generate has emitted beads-manifest.json and
created all beads via br.
Purpose
Find every remaining gap in the bead decomposition that could cause an engineer to make a judgment call the beads should have made for them. The full attack surface: missing spec claim coverage, wrong granularity, dependency errors, vague acceptance criteria, missing TDD test sketches.
Agent team allocation
Use agent teams (TeamCreate) as the primary organizing mechanism. The team
persists across all rounds for context continuity.
Required agents
Coverage agent — checks every spec claim and acceptance criterion against
beads-manifest.json. Flags anything not traced to a bead, or traced to a
bead that does not actually address it. Primary input:
unmapped_claims and unmapped_acceptance_criteria arrays.
Granularity agent — evaluates each bead: too coarse (multiple unrelated concerns, would need decomposition during implementation)? Too fine (trivially small, noise)? Proposes splits or merges.
Dependency agent — uses bv --robot-suggest for cycle detection,
bv --robot-graph for structure analysis, bv --robot-insights for graph
health. Checks for missing edges (bead A clearly depends on bead B but no dep
exists) and false edges.
Actionability agent — plays literal implementer for each bead. Evaluates:
- could I implement this without asking questions?
- does it have clear acceptance criteria?
- can I write a failing test first? If the bead does not describe observable behavior or a verifiable outcome, it is not TDD-ready — flag it
- are test boundaries clear? Does the bead specify enough about inputs, outputs, and side effects to know what to assert against?
- beads that are inherently non-testable-first (pure refactors with no
behavior change, infrastructure setup) get annotated as
test-first: n/awith rationale
TDD test sketches
The actionability agent produces pseudocode test sketches per bead, specifying both the scenario and the test type. Choose the most appropriate type per bead from: unit, property, integration, contract, e2e.
A pure data transformation gets property tests. A boundary interaction gets contract or integration tests. A user-facing flow gets e2e. If the agent cannot write meaningful test sketches for a bead, that is itself a finding — the bead's acceptance criteria are too vague.
Test sketches are embedded in the bead description by default. Use
br comments add only when the description would exceed a reasonable length.
Evidence sources
Agents must use br and bv --robot-* commands as evidence sources:
br list --label forge:<subject>— list beads for this specbr show <id>— read bead detailsbr dep list <id>— check dependenciesbr dep tree <id>— visualize dependency treebr dep cycles— detect cyclesbv --robot-suggest— duplicates, dependency issues, label problems, cyclesbv --robot-graph— dependency graph structurebv --robot-insights— graph analysis and health metricsbv --robot-plan— dependency-respecting execution order
Round structure
Every round MUST spawn the full agent team — all four agents (coverage, granularity, dependency, actionability). Do not spawn a subset, even if earlier findings were narrow. Do not predict convergence — run the round and observe the results. The point of subsequent rounds is to verify fixes did not introduce new issues and to catch things the previous round missed.
Each round:
- all agents evaluate the current bead set independently
- agents use
brqueries andbv --robot-*commands as evidence - findings collected, deduplicated, and classified:
- critical — missing spec claim coverage, dependency cycle, bead with multiple valid interpretations → escalate to user
- high — granularity problem, missing dependency edge, vague acceptance criteria → escalate to user
- resolvable — answer is unambiguous from spec, codebase, or bv analysis → auto-resolve, log decision, flag for user visibility
- resolutions applied:
br create(new beads)br update(fix descriptions)br dep add/br dep remove(rewire)br delete(merge or remove)
beads-manifest.jsonupdated with any changes- next round begins on the updated bead set
Convergence
- minimum: 2 rounds if round 1 produces findings. If round 1 produces zero material findings from all agents, 1 round is sufficient.
- maximum: 5 rounds (safety cap)
- exit: a round where ALL agents — all four — independently report zero material findings
- bias: toward running another round if any agent is uncertain. The cap is a safety valve, not a target.
- "material" defined broadly: anything that could cause an engineer to make a judgment call the beads should have made for them
Cap behavior
Hitting the cap (5 rounds without convergence) is NOT an acceptable exit. It triggers a decomposition signal:
- emit
beads_review_status = decomposition_requiredas structured input to the orchestrator - emit
beads-decomposition-proposal.mdexplaining what is tangled and why
Decomposition can mean one of two things:
- the implementation plan's workstreams are too tangled — the beads cannot be cleanly separated because the plan itself has unclear boundaries. Escalate back to the user with a proposal to revise the implementation plan.
- the spec has gaps the beads review exposed — the act of decomposing
into concrete work units revealed ambiguity that the spec adversarial
review missed. Emit
beads-escalation.jsonlisting finding IDs, affected spec sections, and reopened blockers. The orchestrator passes this tospec-loopfor a targeted re-entry round.
The user decides next steps based on the decomposition proposal.
Finding structure
Each finding must include:
finding_id— stable identifierround— which review roundagent_role— coverage, granularity, dependency, or actionabilityseverity— critical, high, or resolvablebead_id— which bead (or null for cross-cutting findings)description— what the problem isevidence— what the agent observed (bv output, br query result, spec text, or codebase evidence)resolution— how it was resolved (user answer, auto-resolve, or pending)resolution_source— user, bv_analysis, codebase, or auto
Outputs
Emit as structured input to the orchestrator (do not write these directly):
beads-review-log.md— all findings across all rounds with resolutions and provenancebeads-review-round-N.json— structured findings per round- updated
beads-manifest.json - structured beads review fields for
manifest.json:beads_review_rounds_completedbeads_review_status(converged|decomposition_required)beads_coverage_score
On decomposition:
beads-decomposition-proposal.mdbeads-escalation.json(on back-transition to spec-loop)
Epilogue bead exemptions
Epilogue beads (labeled epilogue) are meta-beads for post-implementation
quality and learning. They require different treatment from each agent:
- Coverage agent: skip epilogue beads entirely. They have no spec claims
or acceptance criteria to verify —
spec_claimsandacceptance_criteriaare intentionally empty. - Granularity agent: skip epilogue beads. Their scope is fixed by definition and not subject to split/merge proposals.
- Dependency agent: verify each epilogue bead depends on ALL implementation
beads. Flag any implementation bead missing from an epilogue bead's
dependency list. The Agent Guidance Review bead must also depend on the
Learnings Retrospective bead. Disregard
bvwarnings about high fan-in on epilogue beads — this is expected and intentional. - Actionability agent: evaluate epilogue beads for clarity of description
and acceptance criteria, but mark
test_first: n/awith rationale "epilogue meta-task". Do not require TDD test sketches — these are review/analysis tasks, not code-producing tasks.
Epilogue beads are listed in the epilogue_beads array of
beads-manifest.json, not in the beads array. The unmapped_claims and
unmapped_acceptance_criteria arrays do not apply to them.
Follow-up beads created by epilogues
Epilogue beads may create epilogue-followup labeled beads in the same epic
to address their findings. Follow-up beads ARE subject to the normal review
rules — they are implementation beads, not epilogue beads.
Hard rule: every follow-up bead MUST use --parent <epic-id> when
created. A follow-up bead without a parent is an orphan invisible to
br ready in the epic context. The dependency agent's checklist must include:
verify every epilogue-followup bead is a child of the same epic (check via
br show <followup-id> — parent field must equal the epic ID).
The dependency agent should also verify follow-up beads are wired correctly
(each depends on the bead whose code it addresses). Follow-up beads appear in
the followup_beads array of beads-manifest.json.
Hard rules
- This skill does not write canon. It emits proposals. The orchestrator reduces.
- Use
brandbvCLI commands as evidence sources. Do not read.beadsdatabase files directly. - Zero material findings means zero. "Probably fine" is not zero.
- The cap is a decomposition signal, not an acceptable exit.
beads_review_statushas exactly two values:convergedordecomposition_required. No middle ground. The field is absent until the review phase exits.- Agent teams are the required organizing mechanism. Do not use ad-hoc agent spawning.
- Every bead must have a
test_firstannotation and test sketches (unlesstest-first: n/awith rationale). Missing test sketches is a finding. - Never predict convergence. Never skip a round because you believe it will converge. Spawn all agents, collect their findings, and only then determine whether findings are zero. "I'm confident round N will converge" is not a substitute for running round N.