src/bmm-skills/ship/bmad-code-review/steps/step-02-review.md
{communication_language}The review layers are {workflow.review_layers}, resolved during activation.
For each layer in {workflow.review_layers}:
instruction empty or missing → drop the layer silently (an override disabled it).when condition present and not satisfied by the current context ({review_mode}, {spec_file}) → drop the layer and tell the user, e.g. "Acceptance Auditor skipped — no spec file provided."If no layer is active, HALT with status blocked and blocking condition no active review layers.
Execute all active layers in parallel wherever their execution methods allow: expand {skill-root} in each layer's instruction to this skill's absolute installed directory, then substitute the runtime placeholders ({diff_output}, {spec_file}). For an instruction that launches a reviewer subagent, launch that child with the prompt text after placeholder substitution; do not load the reviewer instruction file yourself. For any other customized instruction, execute it as written. Do not leave {skill-root} unresolved in a child prompt. If a layer's instruction requires subagents and subagents are not available, for each such layer write under {implementation_artifacts} the exact child prompt from that layer's instruction after placeholder substitution (not a path-only pointer), then HALT. Ask the user to run each in a separate session (ideally a different LLM) and paste back the findings. When findings are pasted, treat them as those layers' findings and resume from this point. This is the only allowed parent-side read of a reviewer instruction file.
Layer failure handling: If any layer fails, times out, or returns empty results, append the layer's name to {failed_layers} (comma-separated) and proceed with findings from the remaining layers.
Collect all findings from the completed layers, keeping track of each finding's originating layer id.
Read fully and follow ./step-03-triage.md