diff --git a/docs/evidence/2026-10-03-platform-root-custody-delivery.md b/docs/evidence/2026-10-03-platform-root-custody-delivery.md index 8052cb2..4fd74d3 100644 --- a/docs/evidence/2026-10-03-platform-root-custody-delivery.md +++ b/docs/evidence/2026-10-03-platform-root-custody-delivery.md @@ -106,3 +106,36 @@ backup-discovery tool output. No values are retained here. The finish helper compares that grant with the current lane in memory; if current, it reports a safe incident status and stops before upload for coordinated existing owner credential cutover, preserving consumers. No uninformed rotation is performed. + +## Completed live reader/audit and remote source retention proof + +Consumer owner confirmed fresh authenticated revision-1 empty read/no grant, +actual pod restart retains baseline, wrong audience JWT denied, metadata LIST, +sibling GET and exact-path POST all denied403. Injected transport failure and +same-revision mutation preserve the trusted baseline and return no grant. These +failure tests do not claim a disruptive live OpenBao outage. Receipt: +2026-10-03-root-custody-reader-acceptance.json. + +Safe bounded-tail lookup of the current audit PVC correlated exact consumer +read and login request IDs with both request and response events, no errors. +No raw audit records were emitted. Receipt: +2026-10-03-root-custody-audit-correlation.json. Whole-file grep was abandoned +because the audit file is about6.68GB; the successful query bounded its tail to +64MiB. This proves event correlation, not an audit archival/rotation policy. + +A fresh remote Forgejo clone retrieved source commit +`a252447058105eed0931d34f1a906f39ce7c2e5e` and both independent publisher +baseline/history recovery files matched byte-for-byte. The clone was removed. +Receipt: 2026-10-03-root-custody-source-backup-readback.json. Source retrieval +proves remote retention independent of workstation state, but does not prove +that a new Nextcloud/Scaleway Forgejo archive generation contains that commit. + +The only remaining bounded execution for RPF-WP-0049-T05 is the attended finish +helper: current authenticated owner baseline check plus encrypted retained +history upload/download/decryption through the current governed provider lane. +This directly establishes the small custody-history provider recovery artifact +without generating a multi-gigabyte full Forgejo dump. Existing go-forward +approval applies; operator OIDC/MFA remains execution-only. Fresh receipt must +show success. If the exposed historical local grant matches the current lane, +coordinated existing credential recovery is required before provider proof; +there is no automatic credential rotation or root authority change. diff --git a/docs/evidence/2026-10-03-root-custody-audit-correlation.json b/docs/evidence/2026-10-03-root-custody-audit-correlation.json new file mode 100644 index 0000000..51b1df2 --- /dev/null +++ b/docs/evidence/2026-10-03-root-custody-audit-correlation.json @@ -0,0 +1,19 @@ +{ + "audit_tail_max_bytes": 67108864, + "login": { + "error_absent": true, + "request_event_found": true, + "request_id": "29a2fac4-8108-7ca5-d0a6-682c4a31f48d", + "response_event_found": true + }, + "ok": true, + "raw_logs_emitted": false, + "read": { + "error_absent": true, + "request_event_found": true, + "request_id": "91cd7235-9cfe-06c3-57a6-64a013d1cfcb", + "response_event_found": true + }, + "scope": "read-only-current-owner-audit-correlation", + "transport_succeeded": true +} diff --git a/docs/evidence/2026-10-03-root-custody-reader-acceptance.json b/docs/evidence/2026-10-03-root-custody-reader-acceptance.json new file mode 100644 index 0000000..6caad37 --- /dev/null +++ b/docs/evidence/2026-10-03-root-custody-reader-acceptance.json @@ -0,0 +1,33 @@ +{ + "actual_grant": false, + "baseline_initially_absent": false, + "baseline_receipt_matched": true, + "baseline_survives_actual_pod_restart": true, + "capability_probe_read_at": "2026-10-03T18:30:58.194568+00:00", + "capability_probe_read_digest_matched": true, + "custody_write_denied": true, + "custody_write_denied_http_status": 403, + "empty_no_grant_document": true, + "empty_record_returns_no_grant": true, + "existing_baseline_receipt_matched": true, + "failure_preserves_baseline": true, + "fixture_service_serializes_live_empty_root_grant_null": true, + "fresh_authenticated_owner_read": true, + "hub_private_route_acceptance_claimed": false, + "injected_read_failure_returns_no_grant": true, + "metadata_list_denied": true, + "metadata_list_denied_http_status": 403, + "ok": true, + "other_tenant_returns_no_grant": true, + "owner_read_clock_aware": true, + "read_request_id": "91cd7235-9cfe-06c3-57a6-64a013d1cfcb", + "reader_login_request_id": "29a2fac4-8108-7ca5-d0a6-682c4a31f48d", + "reconnect_preserves_baseline": true, + "record_id_matched": true, + "record_revision": 1, + "runtime_enabled": true, + "same_revision_mutation_preserves_baseline": true, + "sibling_read_denied": true, + "sibling_read_denied_http_status": 403, + "wrong_audience_login_denied": true +} diff --git a/docs/evidence/2026-10-03-root-custody-source-backup-readback.json b/docs/evidence/2026-10-03-root-custody-source-backup-readback.json new file mode 100644 index 0000000..635971b --- /dev/null +++ b/docs/evidence/2026-10-03-root-custody-source-backup-readback.json @@ -0,0 +1,10 @@ +{ + "expected_commit": "a252447058105eed0931d34f1a906f39ce7c2e5e", + "history_file_count": 2, + "history_files_readback_match": true, + "ok": true, + "provider_archive_generation_verified": false, + "retrieved_commit": "a252447058105eed0931d34f1a906f39ce7c2e5e", + "scope": "fresh-owner-forgejo-git-retrieval", + "temporary_clone_removed": true +} diff --git a/workplans/RPF-WP-0049-platform-root-custody-record-delivery.md b/workplans/RPF-WP-0049-platform-root-custody-record-delivery.md index 225c4d3..512c299 100644 --- a/workplans/RPF-WP-0049-platform-root-custody-record-delivery.md +++ b/workplans/RPF-WP-0049-platform-root-custody-record-delivery.md @@ -103,7 +103,8 @@ id: RPF-WP-0049-T05 status: wait priority: high depends_on: [RPF-WP-0049-T04] -blocking_reason: "Admission and empty publication receipts verified; workload success/denial/outage/audit correlation, current live retained-baseline restore-check and established receipt-holder backup coverage/provider readback remain. Actual disposable native-Raft rollback/restore and local holder copy/restore proof passed. No new generic approval gate." +needs_human: true +blocking_reason: "Admission, empty publication, live reader/denials/restart, audit correlation, native isolated Raft restore and remote Git history readback are verified. Only attended finish helper current owner baseline check plus governed encrypted history provider roundtrip receipt remains; existing approval persists." state_hub_task_id: "871e3236-61c0-58a1-a307-399cd662be6b" ``` @@ -171,3 +172,21 @@ snapshot or live admin login used. Evidence: docs/evidence/2026-10-03-root-custody-isolated-raft-recovery.json. Current live restore-check and established backup coverage/provider readback remain separate evidence requirements, not new generic approvals. + +## Live reader/audit and remote history receipts verified — 2026-10-03 + +Stored sanitized owner consumer reader/denial/restart and bounded64MiB audit +correlation receipts under docs/evidence. Wrong-audience JWT and read token +metadata-list/sibling-read/exact-write all denied; source empty/no-grant and +actual restart retention verified. Failure receipt uses injected transport +failure, not a disruptive production outage. Audit read/login exact IDs each +have request+response records and no errors, with no raw log emitted. + +Remote source retrieval at a252447 independently restored the non-authoritative +publisher baseline/history copy byte-for-byte; provider archive generation is +not claimed. Native isolated recovery and local scratch holder restore already +passed. T05 remains wait only for the concrete attended finish helper's current +owner baseline and direct governed history provider roundtrip receipt. No new +generic approval, storage service or credential is requested. If the historical +exposed grant matches current lane, existing coordinated owner incident flow +must resolve it before backup proof; authority remains no-grant meanwhile.