audit-core/audit_core
tegwick 2f7f475e85 AUDIT-WP-0009-T01 — derive tamper_evidence from live attestation state
The Postgres backend returned tamper_evidence=True as a constant while
docs/integrity.md permits the claim only when a live external chain-head
attestation exists. The one attestation on record is 2026-08-16 and no job
renews it, so audit-core was telling every sender it had a property whose
precondition was unverified — the §9.6 defect it twice corrected in
gate-house's doctrine, turned inward.

evaluate_tamper_evidence() derives the flag from the chain report and the
mounted attestation, distinguishing seven states. Absence, staleness,
mismatch, an undated or unreadable attestation, a chain break, and an
unwalkable chain all degrade the claim rather than leave it standing.
Unreadable is treated as absent on purpose: a malformed file must not hold
up a claim a missing file would drop.

The freshness window is 168h against an intended daily cadence — seven
cadences, so a handful of missed runs degrade the claim rather than a single
one flapping it. Window and cadence are one contract in docs/integrity.md.

Production /readyz will now report tamper_evidence: false until
AUDIT-WP-0009-T02 schedules attestation. The claim was already false; it now
says so.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0185wifnLzCxjEY2MT1XbK7L

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 713962@bnt-lap001
Assistant-Session: 2718d99d-d3ff-478f-83a2-3a30f01a02fc
2026-09-06 20:34:22 +02:00
..
__init__.py Implement AUDIT-WP-0006 honest operational custody. 2026-08-16 00:24:33 +02:00
__main__.py Add mock file audit backend 2026-06-01 23:44:03 +02:00
cli.py Implement AUDIT-WP-0007 hash-chain integrity. 2026-08-16 01:18:30 +02:00
credentials.py Read mounted DB credentials from a Kubernetes snapshot 2026-08-13 12:25:32 +02:00
ingestion.py Scope the read path by tenant (AUDIT-WP-0008-T04). 2026-08-17 22:05:52 +02:00
integrity.py AUDIT-WP-0009-T01 — derive tamper_evidence from live attestation state 2026-09-06 20:34:22 +02:00
interface.py Implement AUDIT-WP-0007 hash-chain integrity. 2026-08-16 01:18:30 +02:00
migrate_store.py Establish pre-production record disposition and add the migration tool 2026-08-10 17:31:18 +02:00
mock_file_backend.py Moved audit forward somewhat 2026-07-04 00:39:03 +02:00
postgres_backend.py AUDIT-WP-0009-T01 — derive tamper_evidence from live attestation state 2026-09-06 20:34:22 +02:00
redaction.py Redact secret-shaped fields by default, countable per field path 2026-08-10 16:02:22 +02:00
senders.py feat(AUDIT-WP-0008): enforce temporary sender expiry 2026-08-22 11:59:26 +02:00
sqlite_backend.py Implement AUDIT-WP-0007 hash-chain integrity. 2026-08-16 01:18:30 +02:00