Repository navigation
feat(provenance): sign and verify witnessed Exhibit B records - #174
Conversation
|
Caution Review failedThe pull request is closed. Summary
Merge Risk:
|
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
…g verification (#175) Follow up #174's SonarCloud findings without weakening the signed-record contract. Required nullable fields now have an explicit wire type, so deleting parent-hash, platform or signature still fails deserialization. Split per-record and witness verification into focused functions, and move filesystem/cryptographic work off the async executor with spawn_blocking. Also replace the example's wildcard import, use the direct OsStr method reference, correct the registry comment, and reject private-key destinations by inspecting canonical filesystem ancestors rather than relying on a successful Git invocation. Validation: Linux workspace tests pass (295 backend + seven protocol/property tests, two existing doc examples ignored); Windows protocol tests and Clippy with warnings denied pass. Missing nullable fields are regression-tested. The wire format and TLA+ model are unchanged. Draft while the hosted quality gate is checked. Continues #173's completion.




Git blame and Co-Authored-By trailers can be forged. Add a separate Exhibit B protocol crate with RFC 8785 canonical records, SHA3-256 content/parent hashes, ML-DSA-65 signatures, approved public-key bindings, annual rotation windows and independent witness attestations. The new provenance_verify_records IPC command returns verified, claimed or invalid per record; git attribution explicitly remains claimed.
Include an offline signing helper, key-registry onboarding/rotation policy, mutation/property tests, and a bounded TLA+ signature/chain model. The crate is a default workspace member so the existing Rust CI runs its tests. No production keys or historical signatures are invented.
Validation: Linux cargo test --workspace --locked: 295 backend tests plus seven protocol/property tests pass; two existing doc examples ignored. Protocol tests and Clippy with warnings denied pass on Windows. cargo fmt --all -- --check and git diff --check pass. TLC checked 68,096 distinct states without an invariant violation; the receipt, model hash and assumptions are in docs/PROVENANCE-EXHIBIT-B.adoc.
Limits: trust requires independently approved contributor keys and witnesses. The symbolic model assumes cryptographic binding and is not an implementation proof. Tail-truncation detection needs a separately trusted checkpoint; recording every action is not claimed.
Closes #173.