一键导入
review-beads
Use when beads are created (/beads completed), user says "review beads", "check beads", "bead review", or before starting /execute.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use when beads are created (/beads completed), user says "review beads", "check beads", "bead review", or before starting /execute.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Use when the plan is approved, user says "create beads", "beads for...", or plan documents exist.
Use when design is approved, user says "write the plan", "plan this", "create plan for...", or a design document exists.
Use when a plan is complete (/plan finished), user says "review the plan", "check the plan", or before running /beads on a new plan.
Use when beads exist and are ready for implementation. Triggers on "execute", "start implementation", "run beads", or when ready beads exist in the tracker.
Use after /execute completes, user says "review execution", "verify beads", or before creating a PR for executed work.
Use when starting a business feature that needs requirements, when user says "write requirements", "create PRD", "define user stories", or after brainstorm/discovery approval.
| name | review-beads |
| description | Use when beads are created (/beads completed), user says "review beads", "check beads", "bead review", or before starting /execute. |
| argument-hint | [feature-name] or [epic-id] |
Philosophy: "If I hand this bead to an agent with no other context, will it build the software correctly?" Every finding must pass a second filter: "Am I sure this is actually wrong, or does it just look different from what I expected?" False positives erode trust faster than missed defects.
Duration targets: BRIEF ~15-20 minutes (single entity, <15 beads), STANDARD ~30-60 minutes (typical module, 15-60 beads), COMPREHENSIVE ~60-120 minutes (multi-module or full platform). Most time is Phase 3 (granularity decomposition) and Phase 4 (bead-by-bead deep review).
Beads are the contract between planning and execution. A defective bead produces defective code — and the executing agent has no way to know, because the bead IS its source of truth. Upstream docs (PRD, design, architecture) encode decisions that took hours to reach. If beads don't faithfully carry those decisions forward, the entire pipeline from requirements to code breaks silently. This review catches the break before it costs implementation time.
Run this skill when:
/beads completed)/execute on a new set of beadsDo NOT use for:
/review)/review-plan)/review-prd)/review-design)At every PAUSE point in this skill, call the AskUserQuestion tool to present structured options to the user. Do not present options as plain markdown text — use the tool. The YAML blocks at each PAUSE point show the exact parameters to pass.
For pattern details and examples: ../_shared/references/stage-gates.md
Fallback: Only if
AskUserQuestionis not available as a tool (check your tool list), fall back to presenting options as markdown text and waiting for freeform response.
Before starting any review, load these shared reference files:
../_shared/references/converge-mode.md../_shared/references/review-finding-taxonomy.mdThese define the CONVERGE mode behavior, MECHANICAL vs DECISION classification, authority hierarchy, PRE_EXISTING severity rules, and finding quality standards shared across all review skills. Skill-specific CONVERGE behavior (wave definitions, authority hierarchy overrides) is documented inline below.
| Mode | When | Scope |
|---|---|---|
| BRIEF | Single entity/feature, <15 beads | Skip batch execution section, abbreviated matrices |
| STANDARD | Typical module, 15-60 beads | Full review, single reviewer |
| COMPREHENSIVE | Multi-module, 60+ beads, or critical path | Full review + batch execution across modules |
| CONVERGE | Fix all issues until 0 FAILs | Selected depth + auto-fix loop |
When the user says "converge", "fix all issues", or selects CONVERGE mode, run the autoresearch convergence loop. CONVERGE can be combined with any review depth:
CONVERGE alone → uses STANDARD depthCONVERGE + COMPREHENSIVE → uses COMPREHENSIVE depthCONVERGE changes to the normal review flow:
The loop:
Authority hierarchy for mechanical fixes:
ADRs > Pattern docs > Architecture docs > Design (api-surface, data-model) > PRD (FRs, UCs, ACs) > Plan (overview, sub-plans) > Beads
Dependency minimization is intentional. When CONVERGE encounters a dependency graph that doesn't match the pattern decomposition tables' full ordering (e.g., Contracts has no edge to EF Config, Validators have no edge to Commands), verify compile-time necessity before adding edges. The /beads skill's Step 1.4b explicitly prunes pattern-sequence edges to compile-order edges for multi-agent parallelism. Adding unnecessary dependency edges to match the pattern table's logical sequence is itself a WRONG_DEPENDENCY finding — it serializes work that should be parallel.
Same-session detection: If beads were generated in the current conversation, flag as same-session. Increase spot-checks to 5 minimum. Phase 2 confidence is LOW.
Non-greenfield bead review: If the plan's Implementation Status shows >70% "Exists":
Do NOT delegate finding generation to Explore agents. Agents cannot call br show to read actual bead text — they guess at content and produce 80%+ false positive rates. Generate findings in the main context where br show is available. Use agents only for loading upstream docs (PRD, design, ADRs), not for reviewing bead content.
Verification Mode Phase 3 shortcut: For >90% exists, skip the greenfield decomposition tables (entity × bead types). Instead: verify bead count matches plan task count, check for over-combined tasks against grouping rules. The plan already determined appropriate granularity.
Non-CRUD granularity method: For infrastructure/shell modules (no entities to CRUD), count expected beads from: services, guards, interceptors, initializers, layout components, utility components. Map these to bead expectations instead of entity decomposition tables.
Compact report for 0-FAIL results: When Round 1 produces 0 FAILs, use the compact format by default. The full report template (FR matrix, UC matrix, stage gate analysis) is only needed when there are unresolved FAILs or DECISION items.
False positive log: Include a ## False Positives Dismissed section in the review report documenting which findings were dismissed and why. This makes review quality auditable and helps calibrate future reviews.
Auto-downgrade: COMPREHENSIVE on a single module automatically uses STANDARD depth regardless of bead count. Batch execution sections only apply to multi-module reviews. Apply this downgrade BEFORE document loading begins.
Verification Module fast path (>90% exists, any bead count): Skip Phase 2 (FR/UC coverage inherited from plan) and Phase 3 (greenfield decomposition tables irrelevant). Go straight to Phase 4 (bead-by-bead) + Phase 5 (cross-bead consistency). Use compact report by default. The bead count threshold (was ≤10) is removed — what matters is that >90% of design elements exist, not how many beads there are.
Wave 1 only for non-greenfield (>70% exists): Load bead file + design API surfaces first. Only load PRD/UCs/mockups if Wave 1 reveals coverage gaps. This cuts document loading by ~60% for modification-only bead sets.
Category applicability by bead type: Not all 11 categories apply to all bead types:
br is the single source of truth. The /beads skill writes full structured descriptions (Objective through Verification) directly into each br record via br update {id} --description. Hive's BeadsAdapter reads br show --json and passes bead.Description directly to executing agents. When reviewing, read bead content from br show {id} --json — this is the authoritative record. beads.md, if it exists, is a derived export and may be stale. When CONVERGE fixes a bead, update br directly with br update {id} --description "{corrected content}" — do not edit beads.md first.
Token budget: COMPREHENSIVE reviews with 50+ beads read 30-60 documents. Models with <200K context may need two-pass approach.
Report: For quick convergences (≤3 rounds, ≤10 findings), use compact format:
{N} findings → {N} fixed in {N} rounds. {N} decisions escalated. WARNs: {N}.
These standards are non-negotiable. Every finding must meet ALL of them:
br show <bead-id>) before writing any finding — do not flag based on cached/stale readsbr show <bead-id> --json .description contains the full structured content; verify br dep list <bead-id> for dependency findings/beads skill)WRONG_DEPENDENCY when the missing edge would cause a compilation failure or runtime error during execution. The /beads skill's Step 1.4b explicitly prunes pattern-sequence edges to compile-order edges.br dep add edges — the /beads skill distinguishes hard gates (dependency edges) from soft checkpoints (advisory notes). A UC verify gate or module completion gate without wired dependencies is intentional, not an ORPHANED_GATE.UPSTREAM_DOC and list separately; these are not bead defectsWhen reviewing beads, verify against sources in this order (highest trust first):
If a bead contradicts a higher-trust source, the bead is wrong. If a plan contradicts the design, cite the design, not the plan. If a PRD and design disagree, the design is authoritative — it represents the refined technical decision derived from the PRD.
Every finding has a class (what's wrong) and a severity (FAIL or WARN):
| Class | Meaning | Default Severity |
|---|---|---|
MISSING_BEAD | Required bead does not exist | FAIL |
WRONG_CONTENT | Bead exists but description is incorrect | FAIL |
WRONG_DEPENDENCY | Dependency wiring is incorrect | FAIL |
EMPTY_GATE | Gate bead has no scope or verification commands | FAIL |
ORPHANED_GATE | Gate bead exists but nothing depends on it | WARN |
WRONG_TYPE | Bead type is incorrect | WARN |
GRANULARITY | Bead is too coarse or too fine | WARN |
STALE_REF | Context reference points to wrong/missing file | FAIL (MECHANICAL — auto-fixable) |
CROSS_MODULE | Cross-module dependency not wired | FAIL |
UPSTREAM_DOC | Issue is in the upstream doc, not the bead | WARN (not a bead defect — note separately) |
DESCRIPTION_DRIFT | br description is empty or stub (missing structured content) | FAIL (agents get no objective) |
Severity model alignment: This skill uses FAIL/WARN for finding classification (matching review-prd, review-design, review-plan). FAIL = blocks /execute. WARN = quality improvement, doesn't block.
Report severity mapping: The review report uses a four-tier severity (CRITICAL/HIGH/MEDIUM/LOW) as a refinement of FAIL/WARN for prioritizing remediation:
| Report Severity | Finding Class | Meaning |
|---|---|---|
| CRITICAL | FAIL | Build won't compile, data wrong, security vulnerable, Must-Have FR missing |
| HIGH | FAIL | Agent will guess wrong — incorrect results caught only at review/test time |
| MEDIUM | WARN | Agent likely succeeds but may be confused or produce suboptimal output |
| LOW | WARN | Cosmetic or minor quality issues, no execution impact |
CONVERGE auto-fixes all FAILs (CRITICAL + HIGH). WARNs (MEDIUM + LOW) are listed but not auto-fixed unless trivial.
Every finding gets a severity. Calibrate carefully — inflation kills trust.
The build won't compile, data will be wrong, security is vulnerable, a Must-Have FR is violated, or a required bead is missing entirely. An agent executing the bead set will produce broken software.
Examples:
An agent will guess wrong. The bead provides enough information to execute, but the execution will produce incorrect results that won't be caught until review or testing.
Examples:
commands pattern but should be queriesAn agent would likely succeed but could be confused, leading to suboptimal implementation or wasted time asking questions.
Examples:
Cosmetic or minor quality issues that don't affect execution.
Examples:
ID format note: Examples throughout this skill use bd-001, bd-006, etc. as illustrative placeholders. br assigns its own IDs. Always use the actual IDs from br list --json — do not construct IDs manually.
Load every upstream document before reviewing any bead (except in CONVERGE mode with >70% exists — use progressive loading per Wave 1 guidance above). Do not start reviewing beads until source material is loaded.
Step 1.1 — Identify the feature and bead set:
br list --status open --json # or filter by epic
br dep tree <epic-id> # dependency visualization
Record: epic ID, bead count, feature name.
Step 1.1b — Verify br descriptions are populated (HARD STOP):
Before loading ANY upstream documents, verify every bead has a populated description.
Important: br list --json may not include full description text (some versions return summaries only). If the script below reports all OK but you suspect descriptions are missing, verify with br show {id} --json for individual beads — the .description field in br show is always the full content.
br list --status open --json | python3 -c "
import sys, json
beads = json.load(sys.stdin)
empty = [b for b in beads if not b.get('description','').strip()]
if empty:
print(f'HARD STOP: {len(empty)} of {len(beads)} beads have empty descriptions.')
print('Cannot review — agents would receive no objective.')
for b in empty:
print(f' {b[\"id\"]}: {b[\"title\"][:60]}')
print()
print('Resolution: re-run /beads, or for each empty bead:')
print(' br update {id} --description \"{full structured content}\"')
sys.exit(1)
else:
print(f'OK: all {len(beads)} beads have populated descriptions')
"
If ANY bead has an empty description, STOP immediately. Do NOT proceed to Phase 2, do NOT load upstream documents, do NOT build coverage matrices. The entire review is wasted effort if bead descriptions are missing — report the count, list the empty beads, and tell the user to re-run /beads or manually populate descriptions.
Step 1.2 — Load upstream documents:
Read ALL of the following that exist (use the project's doc structure):
| Document | Path Pattern | Purpose |
|---|---|---|
| PRD | docs/prd/{feature}/prd.md | FR definitions, acceptance criteria, priorities |
| Design — API surface | docs/designs/{feature}/**/api-surface.md | Endpoints, shapes, HTTP methods, error responses |
| Design — Data model | docs/designs/{feature}/**/data-model.md | Entities, properties, constraints, relationships |
| Design — UI mockup | docs/designs/{feature}/**/ui-mockup.md | Screens, components, interactions, states |
| Design — Test plan | docs/designs/{feature}/**/test-plan.md | Test scenarios, coverage matrix |
| Design — Overview | docs/designs/{feature}/design.md | Problem statement, constraints, chosen approach |
| Use cases | docs/use-cases/UC-*.md | Actor workflows, extension flows, error conditions |
| Plan overview | docs/plans/{feature}/overview.md | Task summary, dependency graph, FR coverage |
| Sub-plans | docs/plans/{feature}/[0-9]*.md | Per-task intent, scope, criteria |
| Pattern docs | docs/patterns/**/*.md | Pattern keys referenced by beads |
| ADRs | docs/adr/*.md | Architectural decisions |
| Architecture docs | docs/architecture/*.md | Multi-tenancy, auth, CQRS context |
| Learnings | docs/learnings/*.md | Past gotchas and corrections |
Step 1.3 — Build the source index:
For each document loaded, record what it provides:
## Source Index
| Source | Key Content | Trust Level |
|--------|------------|-------------|
| PRD | 12 FRs (8 Must, 3 Should, 1 Could), 2 NFRs | 2 (high) |
| API Surface | 14 endpoints across 3 entities | 3 (design) |
| Data Model | 3 entities, 2 enums, 5 relationships | 3 (design) |
| UI Mockup | 2 list pages, 2 capture pages, 1 embedded list | 3 (design) |
| ADR-0004 | Enums over string constants | 1 (highest) |
| ADR-0005 | EnumDTO/NamedDTO for UI binding | 1 (highest) |
Step 2.1 — Build FR Coverage Matrix:
For each FR in the PRD, identify which bead(s) implement it. Check bead descriptions for ## Implements sections and FR tags.
Acceptance criteria depth check: For each Must-Have FR, read the PRD's Given/When/Then acceptance criteria. Verify each criterion maps to at least one bead's success criteria. An FR is "Full" only if ALL acceptance criteria are addressed. If 2 of 4 criteria are missing from any bead, the FR is "Partial" — flag as FAIL.
## FR Coverage Matrix
| FR ID | Priority | Description | Bead(s) | Coverage |
|-------|----------|-------------|---------|----------|
| FR-ROLE-CREATE | Must | Create new role | bd-006 (SaveCommand), bd-012 (Save Endpoint) | Full |
| FR-ROLE-LIST | Must | List roles with grid | bd-009 (GridQuery), bd-014 (Grid Endpoint), bd-020 (List Page) | Full |
| FR-ROLE-DELETE | Must | Delete role | — | MISSING |
| FR-ROLE-ASSIGN | Should | Assign role to user | bd-008 (Lifecycle) | Partial — no UI bead |
Coverage statuses:
Step 2.2 — Build UC Coverage Matrix:
For each use case, trace the main scenario steps and extension/alternative flows to beads.
## UC Coverage Matrix
| UC ID | Step/Flow | Description | Bead(s) | Coverage |
|-------|-----------|-------------|---------|----------|
| UC-001 | Main.1 | Admin navigates to roles list | bd-020 (List Page), bd-022 (Routing) | Full |
| UC-001 | Main.2 | Admin clicks "New Role" | bd-021 (Capture Page) | Full |
| UC-001 | Main.3 | Admin fills form and saves | bd-006 (SaveCommand), bd-012 (Save Endpoint) | Full |
| UC-001 | Ext.3a | Duplicate name error | bd-011 (Validators) | Full |
| UC-001 | Ext.3b | Server error during save | — | MISSING — no error handling bead |
| UC-001 | Alt.1 | Admin cancels without saving | bd-021 (Capture Page) | Implicit in canDeactivate |
Step 2.3 — Flag gaps:
Any Must-Have FR with coverage status MISSING or Partial is a CRITICAL finding of class MISSING_BEAD. Any UC main scenario step with MISSING coverage is HIGH.
This is the most important phase. Count the expected beads from the design documents, then compare against actual beads. Mismatches reveal missing beads, over-combined beads, or unnecessary beads.
Step 3.1 — Count expected beads from design:
Read the design docs and derive what the bead set SHOULD contain.
From data model (per entity):
| Design Artifact | Expected Bead | Condition |
|---|---|---|
| Entity definition | {Entity} Entity + Enums | Always |
| Entity with relationships/indexes | {Entity} EF Configuration | Always |
| Entity exposed via API | {Entity} Contracts | Always |
| Entity with create/update | {Entity} EntityMapper | Has save endpoint |
| Entity returned via API | {Entity} DTOMapper | Has get/grid endpoint |
| Entity with create/update | {Entity} SaveCommand | Has save endpoint |
| Entity with delete | {Entity} DeleteCommand | Has delete endpoint |
| Entity with lifecycle states | {Entity} Lifecycle Commands | Has enable/disable/suspend |
| Entity with get-by-id | {Entity} GetQuery | Has get endpoint |
| Entity with grid/list | {Entity} GridQuery + QueryParameters | Has grid endpoint |
| Entity as dropdown source | {Entity} LookupQuery | Has lookup endpoint |
From API surface (per entity):
| Design Artifact | Expected Bead | Condition |
|---|---|---|
| Save endpoint | {Entity} Save Endpoint | Always with save |
| Get endpoint | {Entity} Get Endpoint | Always with get |
| Grid endpoint | {Entity} Grid Endpoint | Always with grid |
| Delete endpoint | {Entity} Delete Endpoint | Always with delete |
| Lookup endpoint | {Entity} Lookup Endpoint | Has lookup |
| Lifecycle endpoints | {Entity} Lifecycle Endpoints | Has lifecycle |
| Any endpoint | {Entity} Validators | Always |
| All of the above | {Entity} Service Registration | Always (last backend bead) |
From UI mockup (per feature):
| Design Artifact | Expected Bead | Condition |
|---|---|---|
| TypeScript interfaces | {Feature} Models + Enums | Always |
| HTTP service | {Feature} Feature Service | Always |
| List/grid page | {Feature} List Page | Has list page |
| Capture/form page | {Feature} Capture Page | Has capture page |
| Component state | {Feature} Capture State | Has capture with complex state |
| Embedded child grid | {Feature} Embedded List | Has child entities |
| Route definitions | {Feature} Routing | Always |
From stage gate rules (test/verify gates only — no /review or /simplify gates):
| Boundary | Expected Gates | Count |
|---|---|---|
| Per feature backend | test (integration tests) | 1 |
| Per feature frontend | test (UI tests) | 1 |
| Per use case | verify (UC scenario) | 1 |
| Module | verify (module complete) | 1 |
Step 3.2 — Derive expected bead count:
## Expected Bead Count Derivation
### Entities: {list}
| Entity | Backend Beads | Condition Notes |
|--------|--------------|-----------------|
| Role | 17 (full CRUD + lookup + lifecycle) | All endpoints in API surface |
| Permission | 11 (CRUD, no lifecycle, no lookup) | No lifecycle states in data model |
| Entitlement | 8 (read-only + grid) | No save/delete in API surface |
### Frontend Features: {list}
| Feature | Frontend Beads | Condition Notes |
|---------|---------------|-----------------|
| {Feature} | 5 (models, service, list, capture, routing) | Full UI |
| Permissions | 4 (models, service, list, routing) | No capture page |
### Stage Gates
| Level | Count |
|-------|-------|
| Feature ({N}) × 6 | {N×6} |
| Use Case ({N}) × 2 | {N×2} |
| Module × 2 | 2 |
### Tests
| Type | Count |
|------|-------|
| Integration tests ({N} features) | {N} |
| UI tests ({N} features) | {N} |
### Total Expected: {sum}
### Total Actual: {bead count from br}
### Delta: {difference}
Step 3.3 — Identify decomposition mismatches:
For each delta, determine whether it's:
MISSING_BEAD) — expected bead doesn't existGRANULARITY) — expected bead is merged into a larger bead/beads skillStep 3.4 — Write decomposition specs for splits:
For each GRANULARITY finding that recommends splitting, provide a concrete decomposition:
### Decomposition: bd-005 "Role Mappers" → 2 beads
**Current bead:** Combines EntityMapper and DTOMapper
**Violation:** EntityMapper (DTO→Entity) and DTOMapper (Entity→DTO) are opposite data flows — never combine per bead size heuristic
**Split into:**
1. `{Entity} EntityMapper` — Pattern: `entity-mapper`, depends on: Entity + Contracts beads
2. `{Entity} DTOMapper` — Pattern: `dto-mapper`, depends on: Entity + Contracts beads
**Dependencies to rewire:**
- SaveCommand should depend on EntityMapper (not the combined bead)
- GetQuery should depend on DTOMapper (not the combined bead)
Step 3.5 — Finding verification:
Before recording any finding from this phase, re-read the bead via br show <bead-id>. Verify:
br dep list)For each bead, review against all 11 categories. Not every category applies to every bead — skip inapplicable checks.
API surface alignment:
Data model alignment:
UI mockup alignment:
ADR checklist — verify each applicable ADR:
| ADR | Check | Applies To |
|---|---|---|
| Enums over strings (ADR-0004) | Status/kind/mode fields use enums, not string constants | Entity, Contracts, EF Config beads |
| EnumDTO/NamedDTO (ADR-0005) | Dropdown-bindable fields use EnumDTO/NamedDTO | Contracts, DTOMapper beads |
| Entity mapper result | SaveCommand uses EntityMapperResult, not OneOf | SaveCommand beads |
| Separate requests superseded | SaveRequest inherits DTO, Guid.Empty for create | Contracts beads |
| PascalCase columns | EF config uses PascalCase column naming | EF Config beads |
| IEntityTypeConfiguration | EF config uses IEntityTypeConfiguration, not extension methods | EF Config beads |
| POST for GridList | Grid endpoint uses POST, not GET | Grid Endpoint beads |
Multi-tenancy & RLS:
Authorization:
CQRS:
IdentityEndpoint)ExecuteDeleteAsync, dependency checks, explicit transactionNamedDTO[] for dropdown bindingAdd{Feature}Services() in a central registration pointChangeDetectorRef, no NgZone.run)as const objects, not TypeScript enumsdotnet test --filter, ng test)Gate policy: /review and /simplify gate beads between implementation beads are prohibited (they treat preparatory code as "dead code" and delete it). Only test and verify gates are allowed. If /review or /simplify gates are found, classify as DECISION (not FAIL) — the user chooses whether to remove them. Older beads sets may have been generated before this policy; removal is the recommended resolution but not automatic.
/review or /simplify gate beads between sequential implementation beads — flag as DECISION if found between impl beads that build on each other (dangerous — may delete preparatory code). Gates at phase boundaries before test beads are defensible and may be kept — note as observation, not DECISION.br dep add edge) rather than a hard gate## Context to Load section with specific file paths(create) / (modify) / (delete) suffix. Globs are specific enough to avoid overlapping reservations between parallel beads. No two parallel beads (no dependency edge) should modify the same file.br show {id} --json .description field contains the full structured bead content (not empty, not a pointer stub). This is the execution contract read by hive's BeadsAdapter — empty means agents get no objective.br dep list matches bead's ## Depends OnBackend granularity rules — one bead per:
Frontend granularity rules — one bead per:
Never combine (automatic GRANULARITY finding if violated):
Grouping exceptions (acceptable combinations):
After reviewing individual beads, check cross-cutting concerns:
Dependency graph integrity:
br dep cycles)br ready --json that at least one implementation bead (not just the epic) appears as ready. If zero implementation beads are ready, the dependency direction is reversed. Common error: br dep add bd-impl bd-epic makes impl blocked BY the epic instead of epic depending on the last gate.verify({module}): module complete gate (last bead)/review or /simplify gate beads exist between implementation beads (these break future beads by deleting preparatory code)Naming consistency:
Pattern reference consistency:
commands pattern)Gate wiring:
Step 6.1 — Write the review report:
Write to docs/reviews/review-beads-{feature}-{date}.md.
# Bead Review: {Feature Name}
> **Date:** {date}
> **Reviewer:** /review-beads skill v1.0
> **Beads reviewed:** {count} ({impl} implementation + {gates} gates + {tests} tests)
> **Upstream docs loaded:** {count}
## Executive Summary
**Verdict:** {PASS | PASS WITH FINDINGS | FAIL — MUST REMEDIATE}
| Severity | Count |
|----------|-------|
| CRITICAL | {N} |
| HIGH | {N} |
| MEDIUM | {N} |
| LOW | {N} |
| UPSTREAM_DOC | {N} |
{1-3 sentence summary of the most important issues}
## FR Coverage Matrix
{From Phase 2, Step 2.1}
## UC Coverage Matrix
{From Phase 2, Step 2.2}
## Granularity Decomposition
### Expected Bead Count Derivation
{From Phase 3, Step 3.2}
### Decomposition Specs
{From Phase 3, Step 3.4 — for each recommended split}
## Findings
### CRITICAL ({N})
#### C{N}. {Title}
| Field | Value |
|-------|-------|
| **Bead** | `{bead-id}: {title}` |
| **Class** | {finding class} |
| **Category** | {review category number and name} |
| **Defect** | "{quoted text from bead or description of omission}" |
| **Source** | {upstream doc path and section} |
| **Impact** | {what goes wrong during execution} |
| **Fix** | {concrete resolution} |
### HIGH ({N})
{Same format}
### MEDIUM ({N})
{Same format, abbreviated — no Source field}
### LOW ({N})
{One-line each: bead-id, class, issue, fix}
### UPSTREAM_DOC ({N})
{Issues in upstream docs, not bead defects. Listed for awareness.}
| Doc | Issue | Suggested Fix |
|-----|-------|---------------|
## Stage Gate Analysis
| Level | Expected | Actual | Status |
|-------|----------|--------|--------|
| Feature ({N}) × 6 | {expected} | {actual} | {OK / MISSING / EXTRA} |
| Use Case ({N}) × 2 | {expected} | {actual} | {OK / MISSING} |
| Module × 2 | {expected} | {actual} | {OK / MISSING} |
Gate wiring issues: {list or "None"}
Cadence violations: {list or "None — max {N} impl beads between gates"}
## Recommended Actions
### Immediate (block /execute)
1. {action} — fixes C{N}, C{N}
2. {action} — fixes C{N}
### Before first gate
1. {action} — fixes H{N}, H{N}
### Can fix during execution
1. {action} — fixes M{N}
## Post-Decomposition Bead Inventory
{Updated bead list reflecting all recommended splits and additions}
| # | Bead ID | Title | Type | Status |
|---|---------|-------|------|--------|
| 1 | bd-001 | {title} | impl | OK |
| 2 | bd-002 | {title} | impl | SPLIT → bd-002a, bd-002b |
| 3 | — | {new bead title} | impl | NEW (MISSING_BEAD fix) |
| 4 | bd-003 | {title} | gate | EMPTY — needs scope |
Step 6.2 — Present executive summary to user:
Read only the executive summary (~30 lines) from the report. Present it with the verdict.
PAUSE: Present findings and collect user decision.
Present the executive summary as formatted markdown, then:
AskUserQuestion:
question: "How should we handle the bead review findings?"
header: "Findings"
multiSelect: false
options:
- label: "Fix all (Recommended)"
description: "Remediate all CRITICAL and HIGH findings before /execute"
- label: "Fix critical only"
description: "Remediate CRITICAL findings only, accept HIGH as risk"
- label: "Review specifics"
description: "Walk me through the findings — I'll decide per-finding"
- label: "Approved as-is"
description: "Accept beads without changes. Findings are acceptable risk."
- label: "Back to /beads"
description: "Findings reveal structural issues. Regenerate beads."
If "Review specifics": use Guided Review (Pattern 5) to walk through findings by severity, starting with CRITICAL. For each finding, present the full detail and ask approve/reject/modify.
If "Fix all" or "Fix critical only": proceed to remediation — update bead descriptions directly in br via br update {id} --description "{corrected content}", add missing beads via br create + br update --description (atomic per bead), rewire dependencies via br dep add/remove. br is the single source of truth. If beads.md exists, it is now stale — regenerate from br or note the drift.
For reviewing beads across multiple modules, use parallel agents with these rules:
# Launch workers (example using Task tool)
# Worker 1: /review-beads roles-module
# Worker 2: /review-beads permissions-module
# Worker 3: /review-beads entitlements-module
/beadsAfter all workers complete, produce a cross-module summary:
## Cross-Module Bead Review Summary
| Module | Beads | Critical | High | Medium | Low | Verdict |
|--------|-------|----------|------|--------|-----|---------|
| {Module A} | 30 | 0 | 2 | 5 | 3 | PASS WITH FINDINGS |
| Permissions | 22 | 1 | 1 | 3 | 1 | FAIL |
| {Module B} | 15 | 0 | 0 | 2 | 4 | PASS |
### Cross-Module Issues
{Issues that span modules — shared contracts, dependency ordering, etc.}
### Remediation Priority
1. {Module}: {critical finding} — blocks all downstream
2. {Module}: {high finding} — blocks frontend
Rubber-Stamp Review — Marking all beads as "OK" without verifying against upstream docs. The entire value of this skill is adversarial verification. If the review finds zero issues on a non-trivial bead set, something was missed — re-examine the granularity decomposition.
Flagging Style Over Substance — Reporting findings about bead description formatting, section ordering, or wording preferences. These don't affect execution. Focus on content that would cause an agent to produce wrong code.
Plan-Trust Over Design-Trust — Verifying beads against the plan instead of the design. Plans are derived from designs and may have drifted. When plan and design disagree, the design is authoritative (see Trust Hierarchy).
Cached-Read Findings — Writing a finding based on what you remember the bead says without re-reading it. Beads get updated during CONVERGE. Always br show --json before writing a finding.
Missing Granularity Analysis — Reviewing bead content without first counting expected beads from the design. Granularity decomposition (Phase 3) is the highest-signal phase — it catches missing beads and over-combined beads that content review alone misses.
Inflated Severity — Rating cosmetic issues as HIGH or missing FR tags as CRITICAL. Severity inflation causes users to ignore findings. Use the calibration examples strictly.
| Signal | Meaning | Next Action |
|---|---|---|
| "fix all" / "fix critical" | Remediate findings | Update beads, then re-verify |
| "approved" / "approved as-is" | Accept beads | Proceed to /execute |
| "back to /beads" | Structural issues | Return to /beads for regeneration |
| "review specifics" | Per-finding triage | Guided review walkthrough |
When approved: "Bead review complete. Run /execute to start implementation."
Skill Version: 2.14 — Version History