/team-review — 여러 전문가가 한꺼번에 검토하기#
| 항목 | 내용 |
|---|---|
| 실행 명령 | /cc-product:team-review |
한마디로#
문서 하나를 PM·아키텍트·개발자 같은 여러 전문가가 동시에 검토하게 하는 기능입니다.
한 명이 차례로 읽으면 1530분 걸릴 검토를, 여러 명이 한꺼번에 나눠 보면 510분 만에 끝내는 셈이에요.
누가·언제 쓰나요#
- BMAD 문서(PRD, 아키텍처 문서, 스프린트 계획, 기술 명세 등)를 여러 관점에서 꼼꼼히 점검받고 싶을 때
- "이 기획서, 빠진 건 없을까? 기술적으로 무리는 없을까? 바로 개발 들어가도 될까?"를 한 번에 확인하고 싶을 때
👉 단, 동시에 검토하는 건 Agent Teams라는 실험 기능이 켜져 있을 때만 됩니다. 꺼져 있어도 멈추지 않고 한 명씩 차례로 검토하는 방식(/cc-product:review)으로 내려가
같은 결과물을 만듭니다 — 결과는 같고 시간만 더 걸립니다.
무엇을 해주나요#
검토가 끝나면 .bmad/reviews/ 폴더에 결과 파일들이 만들어집니다.
-
전문가별 개별 검토 파일 — 예:
...-review-pm.md,...-review-architect.md,...-review-developer.md(관점마다 한 개) - 통합 검토 요약 —
...-review-integrated.md(여기서부터 읽으면 됩니다)
통합 요약에는 전문가들의 종합 판정(통과 / 조건부 통과 / 수정 필요), 반드시 고쳐야 할 문제·고치면 좋은 문제·참고할 점, 모두가 인정한 강점, 우선순위별 개선 권고가 한눈에 정리됩니다.
종합 판정은 느낌으로 적지 않고 정해진 규칙으로 계산합니다 — 누구든 '반드시 고쳐야 할 문제(Critical)'를 하나라도 올렸거나 한 명이라도 '수정 필요'를 냈으면 전체가
수정 필요, 전원이 통과면 통과, 나머지는 조건부 통과입니다.
그리고 검토자 중 한 명이라도 빠졌으면(실패·지연·인원 상한으로 제외) 아무리 좋아도 통과는 나오지 않고 조건부 통과가 상한입니다. 그래서 요약 맨 위에
검토자 보고: 2/3 (Developer: 실패 — 제외)처럼 몇 명이 실제로 보고했는지를 함께 적습니다. 아무도 보고하지 못했으면 종합 판정을 아예 내지 않습니다.
어떻게 쓰나요#
# 검토할 문서 경로를 함께 넘깁니다
/team-review .bmad/prd-myapp.md
문서 경로를 빼고 그냥 /team-review만 실행하면 "어떤 문서를 검토할까요?"라고 물어봅니다.
문서 종류(PRD / 아키텍처 / 스프린트 계획 / 기술 명세)는 파일 이름이나 내용을 보고 자동으로 판별하며, 애매하면 직접 물어봅니다.
안에서 무슨 일이 벌어지나요#
- 준비 점검 — Agent Teams 실험 기능이 켜져 있는지 확인하고(꺼져 있으면 순차 방식으로 내려갑니다), 검토할 문서를 읽어 종류를 판별합니다.
- 검토자 배정 — 문서 종류에 맞는 전문가 관점(PM·아키텍트·개발자·스크럼 마스터)을 자동으로 골라 인원을 확정하고(상한을 넘는 관점은 '나중에 볼 목록'에 적어 둡니다) 검토 계획을 보여주고 진행 여부를 묻습니다.
- 동시 검토 — 전문가들이 각자 정해진 체크리스트로 문서를 동시에 검토하고, 서로 겹치지 않는 별도 파일에 결과를 적습니다(원본 문서는 절대 건드리지 않습니다).
- 진행 상황 표시 — 몇 명이 끝났는지 정해진 간격으로 보여줍니다. 무한 대기는 없습니다 — 전체 대기 상한이 있고, 오래 아무 변화가 없는 검토자는 지연(STALLED) 으로 확정해 인원에서 빼고 넘어가며, 끝난 검토는 필요한 항목이 다 들어갔는지 확인합니다.
- 통합 정리 — 검토자 전원이 끝나거나 탈락한 뒤에 모아서, 종합 판정과 우선순위별 문제·강점을 하나의 요약 문서로 만들고, 다음에 할 일을 안내합니다.
⚙️ 상세 옵션·실행 명세 (개발자 / AI 에이전트용)
Workflow Overview#
Goal: Review a document from multiple expert perspectives in parallel
Phase: Any (works across all phases)
Agent: Team Lead
Inputs: Document path, document type (auto-detected or user-specified)
Output: Individual review files + integrated review summary
Duration: 5-10 minutes (parallel vs 15-30 min sequential review)
When to use: When you want comprehensive multi-perspective review of a BMAD document
Prerequisite: Agent Teams preferred (CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1); when unavailable this workflow reroutes to the sequential route, it does not stop (Pre-Flight step 3)
Substrate: Agent Teams — unchanged. Read-only reviewers, one output file per perspective, disjoint paths: this is one of the few genuinely safe fan-outs in the repo, so it is not migrated to the Workflow substrate — that would buy schema enforcement only, and a second substrate here buys drift risk for no correctness change. The substrate row, its branch prohibition, the width: / own: / tier: fan-out obligations, and the gate tri-state are defined once in plugins/cc-dev/rules/orchestration-graph.md → "Substrate Selection — 6행 매트릭스", "Fan-out Obligations", "Gate Contract — verdict 는 tri-state 다"; they are not restated here. Per-loop values live at each loop's own site below.
Pre-Flight#
- Load context per
helpers.md#Combined-Config-Load - Check Agent Teams per
helpers.md#Check-Agent-Teams-Available - If teams_available = false — reroute to the sequential route, do not stop:
Falling back is the declared default behaviour of every substrate — same result, only slower
(
plugins/cc-dev/skills/agent-teams/SKILL.md→ "Fallback Principle", restated as a fan-out obligation inplugins/cc-dev/rules/orchestration-graph.md→ "Fan-out Obligations"). An unavailable substrate is a speed problem, not a reason to abandon the review.- Output:
⚠ Agent Teams not available — running the same panel sequentially. Agent Teams is an experimental feature that requires: CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1 Sequential route (same perspectives, same output paths, same consensus rule; ~15-30 min instead of 5-10): /cc-product:review --persona {persona} " {document_path} 검토 " ← once per perspective - Continue with Part 1 — perspective selection and the
width:cap are substrate-independent — then run the panel one perspective at a time, mapping PM →product-manager, Architect →architect, Developer →flutter-developer(orbackend-developerfor server-side documents), Scrum Master →scrum-master. Invoke/cc-product:reviewonce per persona; never--persona a,b, which fans out again on a substrate that was just declared unavailable (introduce no new parallelism here). - Each sequential run writes the same
.bmad/reviews/{doc_name}-review-{perspective}.md, so Part 3's per-reviewer accounting and Part 4's consensus rule apply unchanged. A persona whose run is skipped or errors is a MISSING reviewer, exactly as in the parallel route. - Record
Substrate: sequential fallback (Agent Teams unavailable)in the integrated summary. - Stop only if the user declines the sequential route — and then report which perspectives were never run instead of emitting a consensus over an unrun panel.
- Output:
- Read target document:
- Accept document path as argument (e.g.,
/team-review .bmad/prd-myapp.md) - If no argument: ask user for document path
- Accept document path as argument (e.g.,
- Detect document type from filename or content:
prd-*or content has "Product Requirements" → PRDarchitecture-*or content has "Architecture" → Architecturesprint-plan-*or content has "Sprint" → Sprint Plantech-spec-*or content has "Technical Specification" → Tech Spec- Other → ask user for document type
- Load max_teammates from config
agent_teams.max_teammates(default: 3). This is thewidth:budget for Part 1's panel, not a decoration — today it is loaded and never applied, so the panel width is decided by the perspective tables alone.width:obligations (a cap, plus a deferred log for whatever the cap postponed — no silent truncation) are defined inplugins/cc-dev/rules/orchestration-graph.md→ "Fan-out Obligations".
Part 1: Select Review Perspectives#
Auto-select reviewers based on document type:
PRD (Product Requirements Document):
| Reviewer | Perspective | Focus |
|---|---|---|
| PM | Requirements Completeness | User stories coverage, acceptance criteria quality, scope clarity |
| Architect | Technical Feasibility | Implementation complexity, technology fit, scalability concerns |
| Developer | Implementation Clarity | Enough detail to code from, ambiguities, missing edge cases |
Architecture Document:
| Reviewer | Perspective | Focus |
|---|---|---|
| PM | Requirements Coverage | All PRD requirements addressed, traceability |
| Architect | Technical Quality | Security, scalability, maintainability, patterns |
| Developer | Developer Experience | API clarity, integration complexity, testing strategy |
Sprint Plan:
| Reviewer | Perspective | Focus |
|---|---|---|
| Scrum Master | Story Quality | INVEST criteria, sizing accuracy, dependency completeness |
| Architect | Technical Depth | Technical notes accuracy, architecture alignment |
| PM | Scope Alignment | PRD coverage, priority correctness, MVP boundaries |
Tech Spec:
| Reviewer | Perspective | Focus |
|---|---|---|
| Architect | Architecture Alignment | Consistency with architecture doc, pattern compliance |
| Developer | Implementation Detail | Code examples clarity, API contracts, error handling |
| PM | Requirements Traceability | All requirements addressed, acceptance criteria mapping |
Fix the panel — width: = min(selected perspectives, max_teammates):
panel= the perspectives selected above, in table order.reporting_target = len(panel), and that number is what Part 3 prints and Part 4's consensus rule measures against. The panel is fixed here and never grows during Part 3.- If
len(selected) > max_teammates: keep the firstmax_teammatesin table order and write the remainder to a deferred log —.bmad/reviews/{doc_name}-review-deferred.md, one entry per perspective with the reason (width: cap {max_teammates}) and the command that runs it later (/cc-product:review --persona {persona}). Dropping a perspective silently is prohibited (plugins/cc-dev/rules/orchestration-graph.md→ "Fan-out Obligations"). - A deferred perspective is a missing reviewer for Part 4: the panel was capped, not completed,
so
Passis not reachable for that run (consensus rule row 3). - Never raise
width:abovemax_teammatesto "fit everyone in" — the cap is the budget.
Display plan:
Review Plan for: {document_path}
Document Type: {type}
Panel: {reporting_target} reviewers (width cap: {max_teammates})
Deferred: {none | perspective list → .bmad/reviews/{doc_name}-review-deferred.md}
Reviewer 1 ({perspective}):
Focus: {focus_description}
Output: .bmad/reviews/{doc_name}-review-{perspective}.md
Reviewer 2 ({perspective}):
Focus: {focus_description}
Output: .bmad/reviews/{doc_name}-review-{perspective}.md
Reviewer 3 ({perspective}):
Focus: {focus_description}
Output: .bmad/reviews/{doc_name}-review-{perspective}.md
Proceed? (y/n)Wait for user confirmation.
If config.agent_teams.auto_approve_plans = true, skip confirmation.
Part 2: Spawn Reviewers#
Step 1: Ensure review output directory exists:
Create .bmad/reviews/ directory if not existsStep 2: Create shared task list per helpers.md#Create-Team-Task-List:
For each reviewer:
TaskCreate:
subject: " Reviewer ({perspective}): Review {document_name} "
description: Document content, review focus, checklist, output path
activeForm: " Reviewing {document_name} as {perspective} "Step 3: Spawn teammates per helpers.md#Spawn-BMAD-Teammate:
For each reviewer in panel (exactly reporting_target spawns — no more, no fewer):
- role: "reviewer"
- effort_tier:
standard— mandatory, never left unset. The teammate returns findings and its own per-perspective assessment; the Lead composes the consensus verdict (Part 4), so no teammate's verdict gates the pipeline by itself andfrontieris not warranted. Every agent-spawning node must declaretier:(plugins/cc-dev/rules/orchestration-graph.md→ "Fan-out Obligations"):unset = silent inherit, which at width 3 is a 3× multiplier, not a default. Tier → model mapping:plugins/cc-dev/skills/agent-teams/SKILL.md→ "Effort Routing Convention". - context:
- document_path: full path to document
- document_type: detected type
- review_perspective: PM / Architect / Developer / Scrum Master
- review_focus: specific focus areas for this perspective
- review_checklist: perspective-specific checklist items
- review_output_path:
.bmad/reviews/{doc_name}-review-{perspective}.md
Review checklists by perspective:
PM Review Checklist:
- All user personas identified and addressed
- User stories follow correct format (As a... I want... So that...)
- Acceptance criteria are specific, measurable, testable
- Scope is clearly defined (in-scope and out-of-scope)
- Priority levels are assigned and justified
- Dependencies are identified
- Success metrics defined
Architect Review Checklist:
- Technology choices are justified
- Security considerations addressed
- Scalability approach defined
- Data model is appropriate
- API design follows best practices
- Error handling strategy defined
- Performance requirements addressed
- Integration points documented
Developer Review Checklist:
- Enough detail to begin implementation
- No ambiguous requirements
- Edge cases identified
- Testing strategy clear
- API contracts fully specified
- Database migrations clear
- Third-party integrations documented
- No conflicting requirements
Scrum Master Review Checklist:
- Stories follow INVEST criteria
- Story points are reasonable (no >8 point stories)
- Dependencies clearly mapped
- Sprint capacity is realistic
- Priority order makes sense
- Acceptance criteria are testable
- Definition of Done is clear
Part 3: Monitor & Collect Reviews#
Monitor reviewer progress — bounded. "everyone finished" is not the only exit.
Poll task status (every
interval, not continuously):Call TaskList Display: {reporting}/{reporting_target} reviewers reporting · elapsed {t} / cap 20mreportingcounts only reviewers whose output file passed step 2. It is not the count of tasks marked completed.On reviewer completion — verify before counting it (tri-state):
reporting← the review document exists atreview_output_pathand contains all required sections (Overall Assessment, Strengths, Issues, Recommendations) and its Overall Assessment parses to one ofPass | Conditional Pass | Fail.- Missing file, missing section, or an unparseable assessment ⇒
undetermined, andundeterminedis not a pass (plugins/cc-dev/rules/orchestration-graph.md→ "Gate Contract — verdict 는 tri-state 다"). Mark that reviewerINCOMPLETE, exclude it fromreporting, and record it durably in.bmad/reviews/{doc_name}-review-deferred.md. A completed task with an empty review file must never be read as "nothing to fix" (fail-open typenothing-to-check pass, same document → "이름 붙은 fail-open 5형").
On reviewer failure or stall:
- Failure ⇒ mark
FAILED; no activity (task status, output file mtime, file size) forstallWindow⇒ markSTALLED. Both are terminal and both are excluded fromreporting. - Record every exclusion durably in
.bmad/reviews/{doc_name}-review-deferred.md(perspective, terminal state, reported blocker, the/cc-product:review --persona {persona}command that re-runs it). Console output is not durable. - Continue monitoring the remaining reviewers — one reviewer must not halt the panel — but
reporting_targetstays fixed, so the shrunken panel is visible to Part 4's consensus rule instead of silently becoming the whole panel.
- Failure ⇒ mark
Display progress (the panel size is asserted, never assumed):
Review Progress (poll #6, t+3m / cap 20m): Reviewers reporting: 2/3 (Developer: FAILED — excluded) PM Review: ✓ Complete Assessment: Conditional Pass (2 issues) Output: .bmad/reviews/{doc_name}-review-pm.md Architect Review: ✓ Complete Assessment: Pass (1 minor issue) Output: .bmad/reviews/{doc_name}-review-architect.md Developer Review: ⛔ FAILED — excluded from consensus Recorded: .bmad/reviews/{doc_name}-review-deferred.md Re-run: /cc-product:review --persona flutter-developer
Loop contract L-TR-poll (team-review.progress-poll) — 7 fields per
plugins/cc-dev/rules/orchestration-graph.md → "Loop Contract — 필수 7 필드". Values live here, not
there.
inv: reporting_target is fixed at Part 1 and unchanged for the whole poll · a reviewer
already marked FAILED | STALLED | INCOMPLETE is never counted as pending again ·
reviewers write only their own review_output_path; the Lead writes the deferred log
prog: remainingWallClock = cap - elapsed, strictly decreasing every poll ·
pendingReviewers is non-increasing (no reviewer is ever spawned mid-poll)
no-prog: if one reviewer ' s task status, output file mtime and size are all unchanged
for stallWindow, stop spending budget on that wait and settle it as STALLED
term: pendingReviewers == 0 — every reviewer is reporting | INCOMPLETE | FAILED | STALLED
(all four terminal). " repeat until the reviews look good " is not a term:
budget: interval 30s · per-reviewer stallWindow 5 min · run-wide wall-clock cap 20 min
(= the 5-10 min stated Duration × 2; sizing SoT
plugins/cc-dev/skills/job-timeout-budget/SKILL.md)
no outer re-entry: re-running the command is a new run with a fresh budget
exhaust: at the cap, mark every still-pending reviewer STALLED, exclude them from reporting,
record them in the deferred log, and hand the reduced panel to Part 4 — where a
reduced panel caps the consensus at Conditional Pass (row 3) and reporting == 0
emits NO consensus (row 0). Never wait silently, never count an unfinished review.
Escalation ladder: plugins/cc-dev/agents/sequential-workflow.md
" Stall Budget — 3-Rung Ladder " (do not invent a new one)
resume: the review files on disk are the position — on re-entry the Lead re-derives progress by
globbing .bmad/reviews/{doc_name}-review-*.md and re-running step 2 on each, plus
TaskList and the deferred log. An in-session counter is not state (it does not survive
/clear). Re-deriving is idempotent; already-excluded reviewers are not revived.
log: one line per poll: " poll#6 (t+3m): reporting 2/3 · pending 0 · failed 1 " +
a durable entry in .bmad/reviews/{doc_name}-review-deferred.md for every reviewer
dropped, with its terminal state and re-run commandIf the wait is delegated to helpers.md#Collect-Team-Results (contract L-CTR — the same barrier),
call it with this site's values (poll_interval 30s, wall_clock_cap 20 min); the helper takes
them as input, so no second set of numbers exists. Delegation does not move the accounting —
reporting (step 2), the exclusions (step 3) and the panel line stay with the Lead, because a
delegated loop is still this loop (plugins/cc-dev/rules/orchestration-graph.md → "Loop Contract —
필수 7 필드", 위임된 루프도 루프다).
Part 4: Integrated Review Summary#
Barrier — nothing in this Part runs until L-TR-poll terminates, i.e. every reviewer in the
panel is reporting | INCOMPLETE | FAILED | STALLED. mode:barrier, because: the consensus
verdict is a cross-item comparison over the whole panel — one computed while a reviewer is still
writing expires the moment it is produced (the justification requirement for any barrier is in
plugins/cc-dev/rules/orchestration-graph.md → "barrier(= mode:barrier)가 정당한 자리").
Terminating is not the same as succeeding: the barrier closing with reporting < reporting_target
is normal, and the consensus rule below is what makes that visible.
Read all review documents that passed Part 3 step 2 (
reportingset only)Build integrated summary:
# Integrated Review: {document_name}
**Document:** {document_path}
**Type:** {document_type}
**Reviewed:** {date}
**Reviewers reporting:** {reporting}/{reporting_target} (excluded: none | {perspective}: {FAILED/STALLED/INCOMPLETE/DEFERRED}, ...)
**Substrate:** {Agent Teams | sequential fallback (Agent Teams unavailable)}
---
## Overall Assessment
| Reviewer | Assessment | Critical | Major | Minor |
|----------|-----------|----------|-------|-------|
| PM | {Pass/Conditional/Fail} | {count} | {count} | {count} |
| Architect | {Pass/Conditional/Fail} | {count} | {count} | {count} |
| Developer | MISSING ({FAILED/STALLED/INCOMPLETE/DEFERRED}) | — | — | — |
Every panel member gets a row. A MISSING row is never omitted and its counts stay `—`, never `0`
(a missing review is not a clean review).
**Consensus:** {Pass / Conditional Pass / Needs Revision} ← computed by the rule below, not written freehand
**Consensus ceiling:** {none | Conditional Pass — panel incomplete ({reporting}/{reporting_target})}
---
## Critical Issues (Must Fix)
1. [{Reviewer}] {Issue description}
- Impact: {why this matters}
- Suggestion: {how to fix}
---
## Major Issues (Should Fix)
1. [{Reviewer}] {Issue description}
- Suggestion: {how to fix}
---
## Minor Issues (Consider)
1. [{Reviewer}] {Issue description}
---
## Strengths (Consensus)
- {Strength noted by multiple reviewers}
- {Another shared strength}
---
## Recommendations
### High Priority
- {Recommendation from critical/major issues}
### Medium Priority
- {Recommendation from major/minor issues}
### Low Priority
- {Nice-to-have improvements}
---
## Individual Reviews
- PM: .bmad/reviews/{doc_name}-review-pm.md
- Architect: .bmad/reviews/{doc_name}-review-architect.md
- Developer: MISSING — .bmad/reviews/{doc_name}-review-deferred.md (re-run: /cc-product:review --persona flutter-developer)Compute the consensus verdict — precedence table, first match wins.
Consensusis derived, never free-written. Same shape ascommands/plan-technical-review.md→ Phase 3 "최종 판정 기준" (conditions in precedence order, one verdict out), applied to the panel instead of to three fixed axes.# Condition (evaluated top-down, first match wins) Consensus 0 reporting == 0— no review passed Part 3 step 2NOT COMPUTED — emit no verdict; report the empty panel and the re-run commands 1 Any reporting reviewer raised ≥1 Critical issue Needs Revision 2 Any reporting reviewer's own Overall Assessment is Fail Needs Revision 3 reporting < reporting_target— any panel member is FAILED / STALLED / INCOMPLETE / DEFERREDConditional Pass — this is a ceiling: Passis unreachable this run4 reporting == reporting_targetand every assessment is PassPass 5 Otherwise (Major/Minor issues only, or a Conditional Pass among them) Conditional Pass - Row order is load-bearing. Rows 1-2 precede row 3 so a missing reviewer can never mask a
Critical raised by someone who did report; row 3 precedes row 4 so a shrunken panel can never
reach
Pass. Row 4 is the only path toPass, and it requires the panel to be complete. undeterminedis not a pass (plugins/cc-dev/rules/orchestration-graph.md→ "Gate Contract — verdict 는 tri-state 다"): an unparseable or absent assessment was already excluded fromreportingin Part 3 step 2, so it lands on row 3, not on row 4.- Row 0 and row 3 exist because "note the failure and continue" used to let a 3-reviewer panel
shrink to 1 — or to 0 — and still emit a consensus, which is the
empty-set pass/nothing-to-check passpair inplugins/cc-dev/rules/orchestration-graph.md→ "이름 붙은 fail-open 5형". - Record the matched row number in the integrated summary
(
Consensus: Conditional Pass (rule 3 — panel 2/3)) so the verdict is auditable.
- Row order is load-bearing. Rows 1-2 precede row 3 so a missing reviewer can never mask a
Critical raised by someone who did report; row 3 precedes row 4 so a shrunken panel can never
reach
Save integrated summary:
- Path:
.bmad/reviews/{doc_name}-review-integrated.md
- Path:
Display summary to user:
✓ Team Review Complete! Document: {document_path} Reviewers reporting: 2/3 (Developer: FAILED — excluded) Consensus: Conditional Pass (rule 3 — panel incomplete, Pass unreachable this run) Issues Found: Critical: {count} Major: {count} Minor: {count} Strengths: {count} consensus strengths identified Review Files: .bmad/reviews/{doc_name}-review-pm.md .bmad/reviews/{doc_name}-review-architect.md .bmad/reviews/{doc_name}-review-deferred.md ← excluded/deferred reviewers + re-run commands .bmad/reviews/{doc_name}-review-integrated.md ← Start here Next Steps: 1. Read integrated review: .bmad/reviews/{doc_name}-review-integrated.md 2. Address critical issues first 3. Recover the missing perspectives (lifts the Conditional Pass ceiling): /cc-product:review --persona flutter-developer " {document_path} 검토 " 4. Revise document and re-review if needed
Helper References#
- Load config:
helpers.md#Combined-Config-Load - Check Agent Teams:
helpers.md#Check-Agent-Teams-Available - Spawn teammate:
helpers.md#Spawn-BMAD-Teammate - Create team tasks:
helpers.md#Create-Team-Task-List - Collect results:
helpers.md#Collect-Team-Results(barrier contractL-CTR; call it with this file'spoll_interval/wall_clock_cap) - Notation, loop contract (7 fields), gate tri-state, substrate matrix, fan-out obligations:
plugins/cc-dev/rules/orchestration-graph.md— cited here, never restated. Per-loop values (L-TR-poll) live at the loop's own site in Part 3. - Sequential route / Fallback Principle /
tier:→ model mapping:plugins/cc-dev/skills/agent-teams/SKILL.md budget:number sizing:plugins/cc-dev/skills/job-timeout-budget/SKILL.md- Stall ladder for
exhaust::plugins/cc-dev/agents/sequential-workflow.md
Notes for LLMs#
- ALWAYS check Agent Teams availability first (Pre-Flight step 2-3)
- If teams are not available, reroute to the sequential route (
/cc-product:review, one persona per invocation) and report it — do NOT stop. Same perspectives, same output paths, same consensus rule; only slower (plugins/cc-dev/skills/agent-teams/SKILL.md→ "Fallback Principle") - Every spawn declares
effort_tier: standard(Part 2 step 3). Unset = silent inherit = areporting_target× multiplier, never a default - The panel is fixed in Part 1 at
width: min(selected, max_teammates); capped perspectives go to.bmad/reviews/{doc_name}-review-deferred.md. Never truncate silently, never widen the panel later - Each reviewer writes to a UNIQUE file path — no conflicts possible
- Reviewers must NOT modify the document being reviewed
- Sprint-status.yaml is NOT modified by this workflow
- Document type detection drives reviewer perspective selection
- Integrated summary should highlight cross-reviewer consensus and conflicts
- The poll is bounded (
L-TR-poll): interval 30s, stallWindow 5 min, cap 20 min. At the cap, pending reviewers become STALLED and are excluded — never wait silently - If a reviewer fails, stalls, or returns an incomplete/unparseable review: exclude it from
reporting, keepreporting_targetfixed, record it durably in the deferred log, and printReviewers reporting: {reporting}/{reporting_target}next to every consensus. A shrunken panel must be asserted, not assumed - Consensus is computed by the Part 4 precedence table, never free-written. Any Critical or any
Fail ⇒ Needs Revision; a missing reviewer caps the run at Conditional Pass (
Passunreachable);reporting == 0⇒ NOT COMPUTED. Record the matched row number - Review output directory (
.bmad/reviews/) is created if it doesn't exist
Remember: Multi-perspective review catches issues that single-perspective review misses. The PM sees requirement gaps, the Architect sees technical risks, and the Developer sees implementation ambiguities. Together they provide comprehensive quality assurance.