Skip to content

v1.3.0 — Audit durability and signed snapshot checkpoints

Latest

Choose a tag to compare

@github-actions github-actions released this 17 Oct 14:03
· 2 commits to main since this release
2c10ace

Audit durability and snapshot verification

  • Durable audit acknowledgement: opt into audit.durable: true to wait for JSONL sync or SQLite FULL synchronous commit, including with async batching.
  • Explicit v2 verification: mcp-audit verify <artifact> --require-integrity-v2 requires valid Integrity v2 on every entry and rejects an empty artifact.
  • Signed snapshot checkpoints: mcp-audit checkpoint <artifact> --output <new-file> creates a signed ordered digest and count. verify --checkpoint <trusted-file> detects removed, duplicated, reordered or changed records relative to that expected snapshot.
  • More reliable storage recovery: SQLite uses WAL with per-connection busy timeouts and transaction cleanup; failed JSONL batches restore their original offset; terminal finalization preserves signed record identity while resolving uncertain writes. Audit recovery never repeats an MCP tool call.

Upgrade and compatibility

audit.durable defaults to false. Enable it explicitly when you need storage acknowledgement and account for disk latency/backpressure. Default verification continues to accept historical legacy signatures; strict v2/checkpoint policy is opt-in. Integrity v2 canonicalizes JSON; legacy signatures retain their byte-sensitive payload semantics. Audit fields, legacy/v2 signing payloads, metric names and labels, dashboard API shapes and JSON-RPC codes are preserved.

SQLite now uses WAL. Use a persistent local filesystem and WAL-aware backup procedures; copying only a live database file can omit committed WAL records. JSONL requires one writer per path. See the v1.3 migration guide.

Guarantees and limits

The proxy continues forwarding traffic after audit failure. A crash before storage acknowledgement or a persistent disk failure can leave missing evidence: this release does not add a persistent replay queue or promise unconditional exactly-once storage. Filesystem and device guarantees still apply. Windows directory/rename metadata and newly created ancestor directories are outside the documented power-loss barrier.

Create checkpoints from closed/quiescent artifacts and retain the expected checkpoint/version in a separately controlled location. Replacing both with an older valid pair defeats freshness; a holder of the HMAC secret can forge evidence. A checkpoint covers one whole artifact, not every event that may never have reached storage. See the checkpoint format and trust model.

Validation

Go 1.26.9: build, vet, race-enabled tests, atomic coverage (79.6% overall), full-binary HTTP/stdio integration with JSONL/SQLite, three shuffled regression runs, and a short integrity fuzz campaign passed. Fault injection covers partial writes, sync failure, busy commit recovery, ambiguous signed acknowledgements and concurrent shutdown. Linux/Windows amd64 cross-builds passed; native Windows runtime and actual power-loss testing were not performed.

Implementation and synchronized release documentation: #103, #104, #105.