review-feedback-schema
Schema for tracking code review outcomes to enable feedback-driven skill improvement. Use when logging review results or analyzing review quality.
git clone --depth 1 https://github.com/existential-birds/beagle /tmp/review-feedback-schema && cp -r /tmp/review-feedback-schema/plugins/beagle-core/skills/review-feedback-schema ~/.claude/skills/review-feedback-schemaSKILL.md
# Review Feedback Schema
## Purpose
Structured format for logging code review outcomes. This data enables:
1. Identifying rules that produce false positives
2. Tracking skill accuracy over time
3. Automated skill improvement via pattern analysis
## Schema
```csv
date,file,line,rule_source,category,severity,issue,verdict,rationale
```
| Field | Type | Description | Example Values |
|-------|------|-------------|----------------|
| `date` | ISO date | When review occurred | `2025-12-23` |
| `file` | path | Relative file path | `amelia/agents/developer.py` |
| `line` | string | Line number(s) | `128`, `190-191` |
| `rule_source` | string | Skill and rule that triggered issue | `python-code-review/common-mistakes:unused-variables`, `pydantic-ai-common-pitfalls:tool-decorator` |
| `category` | enum | Issue taxonomy | `type-safety`, `async`, `error-handling`, `style`, `patterns`, `testing`, `security` |
| `severity` | enum | As flagged by reviewer | `critical`, `major`, `minor` |
| `issue` | string | Brief description | `Return type list[Any] loses type safety` |
| `verdict` | enum | Human decision | `ACCEPT`, `REJECT`, `DEFER`, `ACKNOWLEDGE` |
| `rationale` | string | Why verdict was chosen | `pydantic-ai docs explicitly support this pattern` |
## Gates (feedback log rows)
Run **in order** before appending a row. Do not skip ahead while a gate fails.
1. **Evidence bound to code**
- **Pass when:** `file` is a repo-relative path that exists (or existed at review time), and `line` identifies line number(s) you actually opened—not only a paraphrased summary.
2. **Rule source attributable**
- **Pass when:** `rule_source` matches `skill-name[/section]:rule-id` (see [Rule Source Format](#rule-source-format)). If the trigger is unknown, set a best-effort source and state the gap in `rationale` instead of inventing a rule id.
3. **Verdict backed by artifact**
- **Pass when:** For `REJECT`, `rationale` cites something checkable (command + output, doc URL, or quoted code). For `ACCEPT`, it states the fix or points to the change. For `DEFER`/`ACKNOWLEDGE`, it names a tracker, timeline, or documented intent per [Verdict Types](#verdict-types).
4. **Row shape valid**
- **Pass when:** The line has nine comma-separated fields matching the header row; fields that contain commas or newlines are CSV-quoted so a standard parser preserves columns.
## Verdict Types
| Verdict | Meaning | Action |
|---------|---------|--------|
| `ACCEPT` | Issue is valid, will fix | Code change made |
| `REJECT` | Issue is invalid/wrong | No change; may improve skill |
| `DEFER` | Valid but not fixing now | Tracked for later |
| `ACKNOWLEDGE` | Valid but intentional | Document why it's intentional |
### When to Use Each
**ACCEPT**: The reviewer correctly identified a real issue.
```csv
2025-12-27,amelia/agents/developer.py,128,python-code-review:type-safety,type-safety,major,Return type list[Any] loses type safety,ACCEPT,Changed to list[AgentMessage]
```
**REJECT**: The reviewer was wrong - the code is correct.
```csv
2025-12-23,amelia/drivers/api/openai.py,102,python-code-review:line-length,style,minor,Line too long (104 > 100),REJECT,ruff check passes - no E501 violation exists
```
**DEFER**: Valid issue but out of scope for current work.
```csv
2025-12-22,api/handlers.py,45,fastapi-code-review:error-handling,error-handling,minor,Missing specific exception type,DEFER,Refactoring planned for Q1
```
**ACKNOWLEDGE**: Intentional design decision.
```csv
2025-12-21,core/cache.py,89,python-code-review:optimization,patterns,minor,Using dict instead of dataclass,ACKNOWLEDGE,Performance-critical path - intentional
```
## Rule Source Format
Format: `skill-name/section:rule-id` or `skill-name:rule-id`
Examples:
- `python-code-review/common-mistakes:unused-variables`
- `pydantic-ai-common-pitfalls:tool-decorator`
- `fastapi-code-review:dependency-injection`
- `pytest-code-review:fixture-scope`
Use the skill folder name and identify the specific rule or section that triggered the issue.
## Category Taxonomy
| Category | Description | Examples |
|----------|-------------|----------|
| `type-safety` | Type annotation issues | Missing types, incorrect types, `Any` usage |
| `async` | Async/await issues | Blocking in async, missing await |
| `error-handling` | Exception handling | Bare except, missing error handling |
| `style` | Code style/formatting | Line length, naming conventions |
| `patterns` | Design patterns | Anti-patterns, framework misuse |
| `testing` | Test quality | Missing coverage, flaky tests |
| `security` | Security issues | Injection, secrets exposure |
## Writing Good Rationales
### For ACCEPT
Explain what you fixed:
- "Changed Exception to (FileNotFoundError, OSError)"
- "Fixed using model_copy(update={...})"
- "Removed unused Any import"
### For REJECT
Explain why the issue is invalid:
- "ruff check passes - no E501 violation exists" (linter authoritative)
- "pydantic-ai docs explicitly support this pattern" (framework idiom)
- "Intentional optimization documented in code comment" (documented decision)
### For DEFER
Explain when/why it will be addressed:
- "Tracked in issue #123"
- "Refactoring planned for Q1"
- "Blocked on dependency upgrade"
### For ACKNOWLEDGE
Explain why it's intentional:
- "Performance-critical path per project conventions (e.g. AGENTS.md or CLAUDE.md)"
- "Legacy API compatibility requirement"
- "Matches upstream library pattern"
## Example Log
```csv
date,file,line,rule_source,category,severity,issue,verdict,rationale
2025-12-20,tests/integration/test_cli_flows.py,407,pytest-code-review:parametrization,testing,minor,Unused extra_args parameter in parametrization,ACCEPT,Fixed - removed dead parameter
2025-12-20,tests/integration/test_cli_flows.py,237-242,pytest-code-review:coverage,testing,major,Missing review --local in git repo error test,REJECT,Not applicable - review uses different error path
2025-12-21,amelia/server/orchestrator/service.py,1702,pythtag and push a release after the release PR is merged
create a release PR (auto-detects previous tag)
Guides architectural decisions for Deep Agents applications. Use when deciding between Deep Agents vs alternatives, choosing backend strategies, designing subagent systems, or selecting middleware approaches.
Reviews Deep Agents code for bugs, anti-patterns, and improvements. Use when reviewing code that uses create_deep_agent, backends, subagents, middleware, or human-in-the-loop patterns. Catches common configuration and usage mistakes.
Implements agents using Deep Agents. Use when building agents with create_deep_agent, configuring backends, defining subagents, adding middleware, or setting up human-in-the-loop workflows.
Guides architectural decisions for LangGraph applications. Use when deciding between LangGraph vs alternatives, choosing state management strategies, designing multi-agent systems, or selecting persistence and streaming approaches.
Reviews LangGraph code for bugs, anti-patterns, and improvements. Use when reviewing code that uses StateGraph, nodes, edges, checkpointing, or other LangGraph features. Catches common mistakes in state management, graph structure, and async patterns.
Implements stateful agent graphs using LangGraph. Use when building graphs, adding nodes/edges, defining state schemas, implementing checkpointing, handling interrupts, or creating multi-agent systems with LangGraph.