com um clique
review-sprint
Validate sprint implementation against acceptance criteria
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Menu
Validate sprint implementation against acceptance criteria
Instalar com Codex ou Claude Copie este prompt, cole no Codex, Claude ou outro assistente e deixe que ele revise a página da skill e instale para você.
Baseado na classificação ocupacional SOC
Bridgebuilder — Autonomous PR Review
Triage a bug report through structured phases and create micro-sprint
Launch PRD discovery with codebase grounding and context ingestion
Execute sprint tasks with production-quality code and tests
Security and quality audit of application codebase
Autonomous agent execution mode
| name | review-sprint |
| description | Validate sprint implementation against acceptance criteria |
| role | review |
| allowed-tools | Read, Grep, Glob, WebFetch, Bash(git diff *), Bash(git log *) |
| disallowed-tools | ["Write","Edit","NotebookEdit"] |
| capabilities | {"schema_version":1,"read_files":true,"search_code":true,"write_files":false,"execute_commands":{"allowed":[{"command":"git","args":["diff","*"]},{"command":"git","args":["log","*"]}],"deny_raw_shell":true},"web_access":true,"user_interaction":false,"agent_spawn":false,"task_management":false} |
| cost-profile | moderate |
| parallel_threshold | 3000 |
| timeout_minutes | 60 |
| zones | {"system":{"path":".claude","permission":"none"},"state":{"paths":["grimoires/loa",".beads"],"permission":"read-write"},"app":{"paths":["src","lib","app"],"permission":"read"}} |
| inputs | [{"path":"grimoires/loa/known-failures.md","why":"Context-Intake Discipline — read first"},{"path":".claude/loa/CLAUDE.loa.md","why":"review/audit gate rules + NEVER/ALWAYS constraints"}] |
<input_guardrails>
Skip this section entirely when .loa.config.yaml has guardrails.input.enabled: false or env
LOA_GUARDRAILS_ENABLED=false.
Otherwise: write the user's invocation prompt/args to a temp file (Write tool), then run
.claude/scripts/guardrails-orchestrator.sh --skill reviewing-code --mode ${LOA_RUN_MODE:-interactive} --file <temp-file>
| Outcome | Action |
|---|---|
JSON action: "BLOCK" | HALT; report the script's reason to the user |
JSON action: "PROCEED" or "WARN" | Continue (logging is handled by the script) |
| Script missing, non-zero exit, or unparseable output | Continue — fail-open, preserving pre-cycle-119 semantics |
Never pass prompt text as a bash argv (quote-blindness FP class) — always via --file.
</input_guardrails>
<adversarial_protocol>
You are not a rubber stamp. You are a rival.
Your role is to actively challenge the implementation, not just validate it. The engineer's goal is to ship; your goal is to find what's wrong. This tension produces quality.
Before approving ANY sprint, you MUST identify:
If you cannot identify these minimums after thorough review, document WHY the implementation is so obviously correct that no concerns exist. This is rare.
| Category | Question to Ask |
|---|---|
| Hidden Assumptions | "What would break if [X] changed?" |
| Edge Cases | "What happens when [input] is [extreme value]?" |
| Failure Modes | "How does this fail? Is failure visible?" |
| Future Maintenance | "Will the next engineer understand this in 6 months?" |
| Security Surface | "What can an attacker do with this?" |
| Performance Cliffs | "At what scale does this break?" |
In your feedback, include a dedicated section:
## Adversarial Analysis
### Concerns Identified (minimum 3)
1. [Concern with file:line reference]
2. [Concern with file:line reference]
3. [Concern with file:line reference]
### Assumptions Challenged (minimum 1)
- **Assumption**: [What the engineer assumed]
- **Risk if wrong**: [What breaks]
- **Recommendation**: [Make explicit OR validate]
### Alternatives Not Considered (minimum 1)
- **Alternative**: [Different approach]
- **Tradeoff**: [Why it might be better/worse]
- **Verdict**: [Should reconsider OR current approach is justified because X]
You MAY approve even with concerns if:
Document approved-with-concerns as:
All good (with noted concerns)
Concerns documented but non-blocking. See Adversarial Analysis above.
If you identify ≥3 blocking concerns that the engineer cannot reasonably address in one iteration, escalate to human review rather than entering an extended feedback loop. </adversarial_protocol>
<zone_constraints>
This skill operates under Managed Scaffolding:
| Zone | Permission | Notes |
|---|---|---|
.claude/ | NONE | System zone - never suggest edits |
grimoires/loa/, .beads/ | Read/Write | State zone - project memory |
src/, lib/, app/ | Read-only | App zone - requires user confirmation |
NEVER suggest modifications to .claude/. Direct users to .claude/overrides/ or .loa.config.yaml.
</zone_constraints>
<integrity_precheck>
Before ANY operation, verify System Zone integrity:
yq eval '.integrity_enforcement' .loa.config.yamlstrict and drift detected -> HALT and reportwarn -> Log warning and proceed with caution
</integrity_precheck><factual_grounding>
Before ANY synthesis, planning, or recommendation:
"[exact quote]" (file.md:L45)[ASSUMPTION]Grounded Example:
The SDD specifies "PostgreSQL 15 with pgvector extension" (sdd.md:L123)
Ungrounded Example:
[ASSUMPTION] The database likely needs connection pooling
</factual_grounding>
<context_discipline>
Follow .claude/protocols/tool-result-clearing.md. Thresholds: single result >2K tokens /
accumulated >5K / full file >3K / session total >15K → extract findings (≤10 files, ≤20 words
each, with file:line) to grimoires/loa/NOTES.md, then reason from the synthesis, not raw dumps.
Session start: read NOTES.md "Session Continuity". Session end / pre-compaction: update it
(decisions → Decision Log, discovered issues → Technical Debt).
</context_discipline>
<trajectory_logging>
Log each significant step to grimoires/loa/a2a/trajectory/{agent}-{date}.jsonl:
{"timestamp": "...", "agent": "...", "action": "...", "reasoning": "...", "grounding": {...}}
</trajectory_logging>
<kernel_framework>
Review sprint implementation for completeness, quality, security. Either approve (write "All good" + update sprint.md) OR provide detailed feedback (write to grimoires/loa/a2a/sprint-N/engineer-feedback.md).
grimoires/loa/a2a/sprint-N/reviewer.md (engineer's report), implementation code, test filesgrimoires/loa/prd.md, grimoires/loa/sdd.md, grimoires/loa/sprint.md (acceptance criteria)grimoires/loa/a2a/sprint-N/engineer-feedback.md (YOUR previous feedback—verify addressed)grimoires/loa/a2a/integration-context.md (if exists) for review context sources, documentation requirements## AC Verification section in reviewer.md (cycle-057, Issue #475).
Return CHANGES_REQUIRED automatically when:
## AC Verification section is missing entirely✗ Not met without a scope-split to a follow-up sprint task⏸ [ACCEPTED-DEFERRED] without a matching Decision Log entry in grimoires/loa/NOTES.mdMet claim is vague ("implemented in src/", "done", "yes") — demand file:line + specific symbolApproval criteria (ALL must be true):
## AC Verification section is present and complete — every AC from sprint.md walked verbatim✓ Met or valid ⏸ [ACCEPTED-DEFERRED])If approved: Write "All good" to engineer-feedback.md + update sprint.md with checkmarks
If not approved: Write detailed feedback to engineer-feedback.md with file:line references
<uncertainty_protocol>
<grounding_requirements> Before reviewing:
grimoires/loa/a2a/integration-context.md (if exists) for org contextgrimoires/loa/prd.md for business requirementsgrimoires/loa/sdd.md for architecture expectationsgrimoires/loa/sprint.md for acceptance criteriagrimoires/loa/a2a/sprint-N/reviewer.md for implementation reportgrimoires/loa/a2a/sprint-N/engineer-feedback.md (if exists) for previous feedback.claude/scripts/qmd-context-query.sh exists and qmd_context.enabled is not false in .loa.config.yaml:
.claude/scripts/qmd-context-query.sh --query "<changed_files> <sprint_goal>" --scope grimoires --budget 1500 --format text<citation_requirements>
Assess context size to determine if parallel splitting is needed:
wc -l grimoires/loa/prd.md grimoires/loa/sdd.md grimoires/loa/sprint.md grimoires/loa/a2a/sprint-N/reviewer.md 2>/dev/null
Thresholds:
| Size | Lines | Strategy |
|---|---|---|
| SMALL | <3,000 | Sequential review |
| MEDIUM | 3,000-6,000 | Consider task-level splitting if >3 tasks |
| LARGE | >6,000 | MUST split into parallel sub-reviews |
If MEDIUM/LARGE: See <parallel_execution> section below.
If SMALL: Proceed to Phase 0.
Check if grimoires/loa/a2a/integration-context.md exists:
If EXISTS, read for:
If MISSING, proceed with standard workflow.
Read ALL context documents in order:
grimoires/loa/a2a/integration-context.md (if exists)grimoires/loa/prd.md - Business goals and user needsgrimoires/loa/sdd.md - Architecture and patternsgrimoires/loa/sprint.md - Tasks and acceptance criteriagrimoires/loa/a2a/sprint-N/reviewer.md - Engineer's reportgrimoires/loa/a2a/sprint-N/engineer-feedback.md (CRITICAL if exists) - Your previous feedbackReview actual implementation:
resources/REFERENCE.md §Security)The implementer's self-check must equal CI's fast gate, not just lint + tests. When the project configures them, verify the implementer ran (and re-run if in doubt):
ruff format --check, prettier --check,
gofmt -l, …), andmypy, tsc --noEmit, pyright, …).Flag an unrun or failing check as feedback with the same weight as a lint/test
failure, e.g. "FAST-GATE: mypy not run — a type error in src/x.py:N would fail
CI" or "FAST-GATE: ruff format --check flags 3 just-written files". Tool-agnostic
— detect from pyproject.toml / package.json / the CI workflows.
Verify implementation follows the four principles:
| Principle | Check | Fail Condition |
|---|---|---|
| Think Before Coding | Assumptions documented in reviewer.md | Silent assumptions, missing clarifications |
| Simplicity First | Minimal code, no speculative features | Unused abstractions, "just in case" code |
| Surgical Changes | Diff only includes requested changes | Unrelated formatting, drive-by improvements |
| Goal-Driven | Clear success criteria, tests verify them | Vague tests, untestable outcomes |
Flag violations as feedback:
MANDATORY when enabled. Runs if flatline_protocol.code_review.enabled: true in .loa.config.yaml. Skipping this phase triggers a PreToolUse:Write gate block at COMPLETED marker write time (see .claude/hooks/safety/adversarial-review-gate.sh). Emergency override only via LOA_ADVERSARIAL_REVIEW_ENFORCE=false — document in sprint notes.
Objective: Invoke a cross-model dissenter to catch reviewer blind spots before the final decision.
Steps:
git diff main...HEAD > /tmp/adversarial-diff.txtfindings=$(.claude/scripts/adversarial-review.sh \
--type review \
--sprint-id "$sprint_id" \
--diff-file /tmp/adversarial-diff.txt \
--context-file "$reviewer_concerns_file" \
--json)
findings array is empty or invocation failed: log and continue to Phase 3Failure must produce a record. If adversarial-review.sh fails (timeout, API error, budget exceeded), write grimoires/loa/a2a/{sprint_id}/adversarial-review.json with {"findings": [], "metadata": {"status": "failed", "reason": "..."}} BEFORE proceeding. Do NOT silently skip — the gate hook has no way to distinguish "not attempted" from "attempted and failed", and the distinction matters for audit trail.
Parameter Derivation:
| Script Parameter | SKILL Derivation |
|---|---|
--sprint-id | From SKILL invocation args, resolved via ledger |
--diff-file | git diff main...HEAD written to temp file |
--context-file | Reviewer's Phase 2 concern notes |
--model | From flatline_protocol.code_review.model config |
--budget | From flatline_protocol.code_review.budget_cents config |
--timeout | From flatline_protocol.code_review.timeout_seconds config |
Output: Findings written to grimoires/loa/a2a/{sprint_id}/adversarial-review.json
Failure mode: If adversarial review is unavailable (timeout, API error, budget exceeded), proceed with single-model assessment and log warning. No DEGRADED marker for review (only audit).
If engineer-feedback.md exists:
Outcome 1: Approve (All Good)
engineer-feedback.mdsprint.md with checkmarks on completed tasksOutcome 2: Request Changes
engineer-feedback.mdsprint.mdOutcome 3: Partial Approval — Decision Table
| Condition | Verdict |
|---|---|
| Any blocking concern (Adversarial Analysis) OR any critical/high finding | CHANGES_REQUIRED |
| Zero blocking concerns + only medium/low accumulation | Reviewer judgment — document the rationale in Overall Assessment |
Adversarial concerns (see <adversarial_protocol>) MUST each carry a file:line reference —
a concern without one is not admissible toward the minimum-3 requirement.
Use template from resources/templates/review-feedback.md.
Key sections:
LOA-VERDICT trailer: append as the LAST line of engineer-feedback.md (nothing after it):
<!-- LOA-VERDICT {"gate":"review","verdict":"APPROVED|CHANGES_REQUIRED","counts":{"critical":N,"high":N,"medium":N,"low":N},"sprint_id":"sprint-N","ts":"<ISO8601>"} -->
Prose and trailer MUST agree: approved files have first line exactly All good and MUST NOT
contain a ## Changes Required, ## Findings, or ## Issues heading. ONE-WAY rule:
counts.critical + counts.high > 0 forces verdict: CHANGES_REQUIRED; zero critical/high does
NOT force APPROVED (Outcome 3 judgment still applies).
MUST self-check before finishing: run
.claude/scripts/verdict-derive.sh --file grimoires/loa/a2a/sprint-{N}/engineer-feedback.md --gate review
and resolve any reported inconsistency before reporting completion to the user.
<parallel_execution>
For each task with code changes, spawn parallel Explore agent:
Task(
subagent_type="Explore",
prompt="Review Sprint {X} Task {Y.Z} ({Task Name}):
**Acceptance Criteria:**
{Copy from sprint.md}
**Files to Review:**
{List from reviewer.md}
**Check for:**
1. All acceptance criteria met
2. Code quality and best practices
3. Security issues
4. Test coverage
5. Architecture alignment
**Return:** Verdict (PASS/FAIL) with specific issues (file:line) or confirmation"
)
After parallel reviews complete:
<output_format>
See resources/templates/review-feedback.md for full structure.
If Approved:
All good
Sprint {N} has been reviewed and approved. All acceptance criteria met.
If Changes Required: Use detailed feedback template with:
<success_criteria>
<documentation_verification>
MANDATORY: Before approving any sprint, verify documentation coherence.
Check for documentation-coherence report:
ls grimoires/loa/a2a/subagent-reports/documentation-coherence-*.md 2>/dev/null
If report exists, verify status is not ACTION_REQUIRED
If no report exists, run /validate docs or manually verify documentation
| Item | Blocking? | How to Check |
|---|---|---|
| CHANGELOG entry for each task | YES | Search CHANGELOG.md for task keywords |
| CLAUDE.md for new commands/skills | YES | Grep CLAUDE.md for command name |
| Security code has comments | YES | Review auth/validation code |
| README for user-facing features | No | Check README mentions |
| Code comments for complex logic | No | Review complex functions |
| SDD for architecture changes | No | Compare with SDD structure |
ACTION_REQUIRED statusSee resources/REFERENCE.md §Documentation Verification for the PASS/FAIL approval-language templates.
</documentation_verification>
<subagent_report_check>
Before approving any sprint, check for validation reports in grimoires/loa/a2a/subagent-reports/:
| Report | Path Pattern | Blocking Verdicts |
|---|---|---|
| Architecture | architecture-validation-*.md | CRITICAL_VIOLATION |
| Security | security-scan-*.md | CRITICAL, HIGH |
| Test Adequacy | test-adequacy-*.md | INSUFFICIENT |
| Goal Validation | goal-validation-*.md | GOAL_BLOCKED |
ls grimoires/loa/a2a/subagent-reports/DO NOT APPROVE if any of these verdicts exist:
| Subagent | Verdict | Action Required |
|---|---|---|
| architecture-validator | CRITICAL_VIOLATION | Fix architecture issues first |
| security-scanner | CRITICAL | Fix security vulnerability immediately |
| security-scanner | HIGH | Fix security issue before merge |
| test-adequacy-reviewer | INSUFFICIENT | Add missing tests |
These verdicts are informational—use reviewer discretion:
| Subagent | Verdict | Recommendation |
|---|---|---|
| architecture-validator | DRIFT_DETECTED | Note in feedback, may proceed |
| security-scanner | MEDIUM | Recommend fix, may proceed |
| security-scanner | LOW | Optional fix |
| test-adequacy-reviewer | WEAK | Note gaps, may proceed |
If no subagent reports exist:
/validate was not run (optional step)/validate in feedbackSee resources/REFERENCE.md §Subagent Report Check for the grep commands that surface blocking verdicts; if any match, block approval until issues are resolved.
</subagent_report_check>
Red Flags (immediate feedback required):
<complexity_review>
Check code for excessive complexity during every review. These are blocking issues.
See resources/REFERENCE.md §Complexity for the per-dimension threshold tables (Function Complexity, Code Duplication, Dependencies, Naming Quality, Dead Code).
During Phase 2 (Code Review), add complexity checks:
## Complexity Analysis
### Functions Reviewed
- `{func1}()`: OK (25 lines, 3 params, nesting 2)
- `{func2}()`: **ISSUE** (67 lines - too long)
### Duplication Found
- None detected / {description of duplicates}
### Dependency Issues
- None detected / {description of issues}
### Naming Issues
- None detected / {list of naming concerns}
### Dead Code
- None detected / {list of dead code}
BLOCK approval if:
3 duplicate code blocks
Note in feedback but allow:
Tag each over-engineering finding so the engineer gets a crisp delete-list
(reuse the existing SIMPLICITY: feedback template):
| Tag | Meaning | Example finding |
|---|---|---|
delete | Needn't exist (YAGNI) | SIMPLICITY[delete]: unused config layer — remove |
stdlib | Reinvents the standard library | SIMPLICITY[stdlib]: hand-rolled debounce — use stdlib |
native | Reinvents a native platform feature | SIMPLICITY[native]: custom date widget — native input |
yagni | Speculative flexibility/abstraction | SIMPLICITY[yagni]: generic iface for one caller — inline |
shrink | Correct but larger than needed | SIMPLICITY[shrink]: 40 lines that fit in 5 |
A loa:shortcut: marker that names a ceiling with no upgrade trigger is a
SIMPLICITY[shrink] finding — the deferred work rots without a trigger.
End an over-engineering pass with the only metric that matters:
net: -<N> lines possible. If nothing should be cut, say Lean already. Ship.
and stop. Never flag the one required acceptance-check behind non-trivial logic
(the smallest runnable check) for deletion — that is the YAGNI minimum, not bloat.
</complexity_review>
<beads_workflow>
When beads_rust (br) is installed, use it to record review feedback:
br sync --import-only # Import latest state from JSONL
# Add review comment to task
br comments add <task-id> "REVIEW: [feedback summary]"
# Mark task status based on review outcome
br label add <task-id> review-approved # If approved
br label add <task-id> needs-revision # If changes required
| Label | Meaning | When to Apply |
|---|---|---|
needs-review | Awaiting review | Before review |
review-approved | Passed review | After "All good" |
needs-revision | Changes requested | After feedback |
br sync --flush-only # Export SQLite → JSONL before commit
Protocol Reference: See .claude/protocols/beads-integration.md
</beads_workflow>
<visual_communication>
See resources/REFERENCE.md §Visual Communication — Mermaid diagram standards, when to include diagrams, output format, and theme configuration for review feedback. Diagram inclusion is optional; use when visual explanation helps.
</visual_communication>
<retrospective_postlude>
After main skill logic completes, if .loa.config.yaml invisible_retrospective.enabled: true
(and not disabled for this skill under invisible_retrospective.skills), silently run the
learning-signal scan per .claude/skills/continuous-learning/SKILL.md and its
resources/RETROSPECTIVE.md (quality gates, sanitization, trajectory logging). Recursion guard:
never when the active skill is continuous-learning itself.
</retrospective_postlude>