Classification
Problem
The audit ecosystem already emits useful evidence from several independent paths:
- normalized static findings and cross-tool clusters;
- FP-judge overlays;
- runtime correlation;
- LeakFixMine/SZZ historical verdicts;
- future 007 action and gate outcomes.
Today these artifacts are consumed as snapshots. A finding can be fixed, suppressed, runtime-confirmed, reopened or made obsolete, but a single mutable status cannot explain how that state was reached or allow later evidence to revise it honestly.
Goal
Add an append-only Finding Evidence Ledger and a deterministic state reducer.
The ledger stores observations and decisions. Current state is derived from events; it is not edited in place as unexplained truth.
Event model
Initial event vocabulary should cover at least:
FindingEmitted
FindingPersisted
FindingMoved
FindingDisappeared
FindingReappeared
ReviewerConfirmed
ReviewerRejected
JudgeVerdictRecorded
SuppressionAdded
SuppressionRemoved
AnalyzerConfigChanged
AnalyzerVersionChanged
CodeChangedNearby
FixCommitLinked
TestAdded
RuntimeConfirmed
HistoricalFixConfirmed
FindingReopened
ArtifactProvenanceRejected
Names may change during design review, but the semantic distinctions must survive. In particular:
- disappearance is not automatically a fix;
- suppression is not disappearance;
- file deletion is not proof of a true positive;
- config/tool changes are not code fixes;
- stale or digest-mismatched evidence is rejected visibly.
Storage contract
Use one stdlib-only SQLite store for the ledger spine unless measurement proves otherwise.
Suggested logical tables:
finding_patterns
finding_occurrences
finding_lineages
evidence_events
dispositions
actions
artifact_provenance
reducer_snapshots # optional cache, always reproducible from events
Requirements:
- foreign keys enabled on every connection;
- append-only event identity and idempotent ingestion;
- schema versioning and explicit migrations;
- stable artifact digests;
- deterministic ordering/reduction;
- no
INSERT OR REPLACE behavior that deletes parent identity and dependent evidence;
- resumable ingestion.
Provenance
Every event must identify:
event_id
schema_version
source_kind
source_artifact
source_digest
observed_at
producer/tool + version
source_commit/run identity
pattern_id / occurrence_id / lineage_id as applicable
A parser successfully reading JSON is not proof that the evidence is current or authentic. Digest mismatch, unknown schema or broken provenance must become explicit rejected-evidence records/coverage output.
Deterministic reducer
The reducer derives a state vocabulary such as:
Candidate
Corroborated
Verified
Rejected
Suppressed
FixCandidate
FixedCorroborated
Obsolete
Reopened
Inconclusive
Exact names are reviewable. Required behavior:
- reducer is pure over ordered events;
- rerunning it produces byte-stable normalized state;
- late evidence may legitimately change a derived state;
- conflicting evidence remains represented, not overwritten;
- manual disposition remains distinguishable from machine observation;
unknown/inconclusive is a first-class result.
Initial adapters
Build thin adapters for artifacts that already exist; do not build new detectors here:
- normalized
findings.json;
fp-verdicts.json with generated_from verification;
- existing runtime findings/correlation artifact;
- LeakFixMine verdict export or a documented placeholder seam if the cross-repo adapter lands in OwnAudit separately.
Adapters normalize evidence into the ledger. They do not invent a parallel report pipeline.
Required controls
- Same artifact ingested twice → no duplicate events.
- Stale FP overlay digest → rejected, never merged.
- Static candidate + independent runtime confirmation → derived corroborated/verified state.
- Finding disappears only after analyzer configuration changes → not
Fixed.
- Finding disappears after targeted code change but no corroboration →
FixCandidate, not verified truth.
- Later regression/reappearance →
Reopened while preserving prior history.
- Conflicting human and judge verdicts → both evidence records retained; disposition policy is explicit.
- Broken provenance → visible finding/coverage result.
- Full replay from events matches any cached reducer snapshot.
Acceptance
Non-goals
- No ML ranker, probability or conformal prediction.
- No automatic suppression, deletion or merge blocking.
- No new analyzer rules.
- No 007 enforcement behavior.
- No audit lift-out in the same PR.
- No attempt to absorb LeakFixMine's specialized corpus database into this schema.
Classification
Own.NET/audit/until the planned audit lift-outProblem
The audit ecosystem already emits useful evidence from several independent paths:
Today these artifacts are consumed as snapshots. A finding can be
fixed,suppressed,runtime-confirmed,reopenedormade obsolete, but a single mutablestatuscannot explain how that state was reached or allow later evidence to revise it honestly.Goal
Add an append-only Finding Evidence Ledger and a deterministic state reducer.
The ledger stores observations and decisions. Current state is derived from events; it is not edited in place as unexplained truth.
Event model
Initial event vocabulary should cover at least:
Names may change during design review, but the semantic distinctions must survive. In particular:
Storage contract
Use one stdlib-only SQLite store for the ledger spine unless measurement proves otherwise.
Suggested logical tables:
Requirements:
INSERT OR REPLACEbehavior that deletes parent identity and dependent evidence;Provenance
Every event must identify:
A parser successfully reading JSON is not proof that the evidence is current or authentic. Digest mismatch, unknown schema or broken provenance must become explicit rejected-evidence records/coverage output.
Deterministic reducer
The reducer derives a state vocabulary such as:
Exact names are reviewable. Required behavior:
unknown/inconclusiveis a first-class result.Initial adapters
Build thin adapters for artifacts that already exist; do not build new detectors here:
findings.json;fp-verdicts.jsonwithgenerated_fromverification;Adapters normalize evidence into the ledger. They do not invent a parallel report pipeline.
Required controls
Fixed.FixCandidate, not verified truth.Reopenedwhile preserving prior history.Acceptance
Non-goals