Findings Ledger — Air-Gap Provenance Extensions (LEDGER-AIRGAP-56/57/58)

Scope: How ledger events capture mirror bundle provenance, staleness metrics, evidence snapshots, and sealed-mode timeline events for air-gapped deployments.

1. Requirements recap

2. Schema additions

EntityFieldTypeNotes
ledger_events.event_bodyairgap.bundleobject{ "bundleId", "merkleRoot", "timeAnchor", "sourceRegion", "importedAt", "importOperator" } recorded on import events.
ledger_events.event_bodyairgap.evidenceSnapshotobject{ "bundleUri", "dsseDigest", "expiresAt" } for findings evidence bundles.
ledger_projectionairgap.stalenessSecondsintegerAge of newest data feeding the finding projection.
ledger_projectionairgap.bundleIdstringLast bundle influencing the projection row.
timeline_events (new view)airgapImpactobjectMaterials needed for LEDGER-AIRGAP-58-001 timeline feed (finding counts, severity deltas).

Canonical JSON must sort object keys (bundleId, importOperator, …) to keep hashes deterministic.

3. Import workflow

  1. Mirror bundle validation: AirGap controller verifies bundle signature/manifest before ingest; saves metadata for ledger enrichment.
  2. Event enrichment: The importer populates airgap.bundle fields on each event produced from the bundle. bundleId equals manifest digest (SHA-256). merkleRoot is the bundle’s manifest Merkle root; timeAnchor is the authoritative timestamp from the bundle.
  3. Anchoring: Merkle batching includes bundle metadata; anchor references in ledger_merkle_roots.anchor_reference use format airgap::<bundleId> when not externally anchored.
  4. Projection staleness: Projector updates airgap.stalenessSeconds comparing current time with bundle.timeAnchor per artifact scope; CLI + Console read the value to display freshness indicators.
  5. API surface: POST /internal/ledger/airgap-import records bundle provenance (returns ledgerEventId, chainId, sequence) and persists the same metadata into airgap_imports for audit.

4. Staleness enforcement

5. Evidence snapshots

6. Timeline events (LEDGER-AIRGAP-58-001)

7. Offline kit considerations


Draft 2025-11-13 for LEDGER-AIRGAP-56/57/58 planning.