Structured format for logging code review outcomes. This data enables:
csv
date,file,line,rule_source,category,severity,issue,verdict,rationale
FieldTypeDescriptionExample ValuesdateISO dateWhen review occurred2025-12-23``filepathRelative file pathamelia/agents/developer.py``linestringLine number(s)128, 190-191``rule_sourcestringSkill and rule that triggered issuepython-code-review/common-mistakes:unused-variables, pydantic-ai-common-pitfalls:tool-decorator``categoryenumIssue taxonomytype-safety, async, error-handling, style, patterns, testing, security``severityenumAs flagged by reviewercritical, major, minor``issuestringBrief descriptionReturn type list[Any] loses type safety``verdictenumHuman decisionACCEPT, REJECT, DEFER, ACKNOWLEDGE``rationalestringWhy verdict was chosenpydantic-ai docs explicitly support this pattern
Run in order before appending a row. Do not skip ahead while a gate fails.
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.rule_source matches skill-name[/section]:rule-id (see 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.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.VerdictMeaningActionACCEPTIssue is valid, will fixCode change madeREJECTIssue is invalid/wrongNo change; may improve skillDEFERValid but not fixing nowTracked for laterACKNOWLEDGEValid but intentionalDocument why it's intentional
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
Format: skill-name/section:rule-id or skill-name:rule-id
Examples:
python-code-review/common-mistakes:unused-variablespydantic-ai-common-pitfalls:tool-decoratorfastapi-code-review:dependency-injectionpytest-code-review:fixture-scopeUse the skill folder name and identify the specific rule or section that triggered the issue.
CategoryDescriptionExamplestype-safetyType annotation issuesMissing types, incorrect types, Any usageasyncAsync/await issuesBlocking in async, missing awaiterror-handlingException handlingBare except, missing error handlingstyleCode style/formattingLine length, naming conventionspatternsDesign patternsAnti-patterns, framework misusetestingTest qualityMissing coverage, flaky testssecuritySecurity issuesInjection, secrets exposure
Explain what you fixed:
Explain why the issue is invalid:
Explain when/why it will be addressed:
Explain why it's intentional:
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,python-code-review:immutability,patterns,critical,Direct mutation of frozen ExecutionState,ACCEPT,Fixed using model_copy(update={...})
2025-12-23,amelia/drivers/api/tools.py,48-53,pydantic-ai-common-pitfalls:tool-decorator,patterns,major,Misleading RunContext pattern - should use decorators,REJECT,pydantic-ai docs explicitly support passing raw functions with RunContext to Agent(tools=[])
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
2025-12-27,amelia/core/orchestrator.py,190-191,python-code-review:exception-handling,error-handling,major,Generic exception handling in get_code_changes_for_review,ACCEPT,Changed Exception to (FileNotFoundError OSError)
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] and removed unused Any import
Before reporting ANY finding, reviewers MUST verify:
PatternRoot CausePrevention"Unused variable"Variable used elsewhereSearch all references"Missing validation"Framework validatesCheck Pydantic/Zod/etc."Type assertion"Actually annotationConfirm as vs :"Memory leak"Cleanup existsCheck effect returns"Wrong syntax"New framework versionVerify against current docs"Style issue"Preference not ruleBoth approaches valid
If you're about to flag any of these, double-check:
Reference: review-verification-protocol for full verification workflow.
See the review-skill-improver skill for the full analysis workflow.
PatternSkill Improvement"linter passes" rejectionsAdd linter verification step before flagging style issues"docs support this" rejectionsAdd exception for documented framework patterns"intentional" rejectionsAdd codebase context check before flagging"wrong code path" rejectionsAdd code tracing step before claiming gaps