schemas/finding-submission.schema.json.
The CLI assigns the finding id, computes the deduplication fingerprint, redacts
secret-shaped material, normalizes the category, and records verification state.
Required fields
affected
route and file feed the deduplication fingerprint after normalization, so
/orders/12 and /orders/13 collapse to one location.
evidence[]
Optional fields
Rejection and adjustment rules
Rejections — the submission is not stored, and exit code is2:
- any extra top-level field, including
id; - a secret value anywhere in the payload that survives redaction;
- missing evidence;
- any schema constraint above.
severity: "critical"withverification: "needs_review"becomeshigh, because an unvalidated finding is a lead;missing_security_header,verbose_error_message, andoutdated_dependency_no_known_exploit_pathare capped atmediumunless at least one piece of evidence has kindruntimeoridentity_differential.
The submission result
Submitting the same root cause again with new evidence is not a duplicate — it becomes
corroboration on the original finding.
Worked example
Related schemas
Every schema inschemas/ is language-neutral JSON Schema, and
packages/contracts generates its runtime validators from them — so a drift between the
schema and the validator is a lint failure, not a surprise at runtime.