Audit & Evidence Generation
This page defines the audit record, hash chaining, and trace linkage required to satisfy INV-5.
Spec Drift Warning
Changes to implementation that violate invariant mappings invalidate compliance with v1.0. Implementations MUST preserve invariant-to-component, invariant-to-artifact, and invariant-to-verification-step mapping.
Compliance Assertion
- • Satisfies INV-5 by requiring attributable records for approvals, denials, and execution outcomes.
Non-Compliance Results In
- • Missing denial records are non-compliant.
- • Broken hash chaining or missing trace linkage invalidates compliance evidence.
Audit Record Contract
Invariant Mapping: INV-5
Every request MUST produce an attributable audit record, including denials.
- • Each audit record MUST contain record_id, timestamp, identity, decision, request_hash, trace_id, and data_hash.
- • Execution records MUST include approval_id and execution outcome.
- • Denial records MUST include a denial decision code.
Hash Chaining & Trace Linkage
Invariant Mapping: INV-5
- • Audit records MUST be linked by previous_hash or equivalent tamper-evident ordering field.
- • All records for a request MUST share the same trace_id.
- • All records for a request MUST share the same request_hash.
Required Evidence Exports
Invariant Mapping: INV-5
- • Implementations MUST support export of request, approval envelope, execution trace, and audit chain.
- • Exports MUST preserve field values used during verification.
- • Exports MUST be sufficient to confirm denials as well as approvals.
Compliance Evidence
- • Sample audit chain export with hash continuity.
- • Sample denial record proving denied requests are logged.
- • Verification output confirming trace_id and request_hash linkage.
Verification Linkage
INV-5
Artifact: audit-chain-001.json
Check: Hash continuity and trace linkage validate
Verification step: verify.sh: INV-5
INV-5
Artifact: audit-chain-001.json
Check: Request hash and approval_id correlate with execution trace
Verification step: verification walkthrough: Step 6