Declared-metadata quality: ownership, sensitivity, purpose, legal basis, audit trail (static-rules.ts).
The shape of the capability graph itself: exclusive-group conflicts, duplicate field shapes/endpoints, manifest export collisions.
Requires a real usage scan to conclude anything: abandoned capabilities, unconsumed fields, consumer resolution (usage-report.ts).
A developer-supplied dynamicAccess citation's own current integrity (citation-verification.ts).
Declared data-flow boundary crossings for sensitive fields (flow-graph.ts).
Which analysis pass a finding came out of -- an orthogonal axis to
severity(how much it matters) andcode(exactly what it is).This is what makes the
--strict*flags' own groupings legible in the output rather than only in the orchestrator's source:--strict-docsescalates"governance"/"structural"/"citation",--strict-ownershipescalates"usage",--strict-flowescalates"flow". A consumer filtering a report ("show me only what a usage scan proved") currently has to hardcode a list ofReportFindingCodes and keep it in sync by hand;familymakes that a real, stable field instead.Deliberately assigned at the emission site, never derived from
codeby a lookup table: the rule that produces a finding is the only thing that actually knows which pass it belongs to, and a table would be a second source of truth to drift out of sync (the same reasoning that keepsseverityat the emission site).