name: vyper-audit-report description: >- JSON-first report synthesizer for Vyper >=0.4.0 audits. Merges canonical findings, compliance, and toolchain summaries with deterministic gate status and standards coverage sections. Triggers: audit report, findings synthesis, release security report.
Vyper Audit Report v3
You produce release-quality reports from canonical artifacts.
Inputs
Accepted args (key=value):
findings=<path>compliance=<path>audit_context=<path>tool_findings=<path>tool_validation=<path>gate_status=<path>output_dir=<path>strict=<true|false>
Rules:
- Unknown key => abort.
- Duplicate key => abort.
Defaults:
strict=truefindings={output_dir}/findings.jsoncompliance={output_dir}/compliance.jsonaudit_context={output_dir}/audit-context.jsontool_findings={output_dir}/tool-findings.jsontool_validation={output_dir}/tool-validation.jsongate_status={output_dir}/gate-status.json
Required References
references/schemas/finding.schema.jsonreferences/schemas/audit-report.schema.jsonreferences/schemas/tool-findings.schema.jsonreferences/schemas/tool-validation.schema.jsonreferences/rule-id-migration-map.jsonreferences/report-template.mdreferences/rationalizations-to-reject.md
Strict mode: missing required references => abort.
Phase 1: Load Canonical Inputs
Required:
findings.jsoncompliance.json
Optional but preferred:
audit-context.jsontool-findings.jsontool-validation.jsongate-status.json
Validation:
- Validate every loaded JSON against schema.
- Schema failure in required input => abort.
Warning propagation:
- Preserve upstream
warnings[]from all loaded artifacts.
Phase 2: Normalize Core Findings
Normalize into canonical finding objects with required fields:
finding_idrule_idseveritystatuscontractfunctionspanconfidenceevidencerecommendationsource
Canonical statuses only:
NEW|RECURRING|REGRESSION|ACKNOWLEDGED|RESOLVED|INCOMPLETE
Phase 3: Merge + Dedup
Merge vulnerability + compliance findings.
Dedup key:
(rule_id, contract, function, normalized_sink_or_state_target, span)
Rules:
- Never dedup across different contracts.
- Preserve cross-contract recurrence in systemic section.
- Keep traceability metadata.
Phase 4: Delta Analysis with Migration Support
Delta match order:
- Exact canonical
rule_id+ location overlap. - Alias mapping from
rule-id-migration-map.json. - Location overlap + similarity fallback.
No prior findings:
- Current findings default
NEW.
Phase 5: Severity Calibration + Validation
Calibration sequence:
- Cross-contract systemic amplification (reporting only).
- Hot-path sensitivity adjustments.
- Edge-case caps with rationale.
- Mock caps (informational only).
- Documented-risk handling (
ACKNOWLEDGEDwithout silent downgrade).
Critical/High findings:
- Require independent validation record.
UNVERIFIEDin C/H path =>INCOMPLETE.
Phase 6: Tool and Standards Summaries
Do not merge tool findings into canonical findings[].
Use summary-only policy:
tool_coverage_summaryfromtool-findings.json+tool-validation.jsonstandards_coverage_summaryfromcompliance.jsonandgate-status.json
WARN semantics:
- Non-blocking in summaries unless explicit blocker code exists in gate status.
- Treat Mythril/Echidna adapter limitations as warning context unless explicit blocker status exists.
Phase 7: Output
Write canonical:
{output_dir}/audit-report.json
Write render:
{output_dir}/audit-report.md{output_dir}/action-items.md
Validate audit-report.json against schema.
Schema failure => abort.
Required report sections:
- executive summary
- warnings summary
- severity distribution
- findings by severity
- systemic patterns
- feature risk summary
- delta analysis
- spec coverage
- tool coverage summary
- standards coverage summary
- compiler version assessment
- action items
- critical/high validation summary
Error Handling
- Missing required input => abort.
- Invalid status/ID taxonomy in required input => abort in strict mode.
- Missing optional tool artifacts => emit neutral summary object, not error.
Anti-Patterns
- Do not inject tool findings directly into canonical findings array.
- Do not bypass C/H validation.
- Do not treat WARN as BLOCKED without explicit blocker status.