diff --git a/docs/credential-lane-designs/coulomb-recovery-api.json b/docs/credential-lane-designs/coulomb-recovery-api.json index 61fafa3..7abbceb 100644 --- a/docs/credential-lane-designs/coulomb-recovery-api.json +++ b/docs/credential-lane-designs/coulomb-recovery-api.json @@ -43,29 +43,29 @@ }, "native_application_recovery_verified": true, "protected_recovered_point": { - "captured_at": "2026-10-29T21:22:46Z", - "primary_object_key": "platform-pg/application-archives/coulomb-social/2026/10/29/20261029T212246Z-fd128164c7bb22a3a6c42acf.tar.age", - "primary_version_id": "1793309020705518", - "ciphertext_sha256": "acbf92eda5074761bb6d00170e6e459e787359afcd377f2f18324ba17496510a", + "captured_at": "2026-10-31T07:13:52Z", + "primary_object_key": "platform-pg/application-archives/coulomb-social/2026/10/31/20261031T071352Z-abf5997f01a14d9cb05e4bba.tar.age", + "primary_version_id": "1793430889823443", + "ciphertext_sha256": "840e633047fddd88c6e6a1a3d6909d9af1ad80eaba8c90f83d8e81188dfc17a4", "protected_kit": { - "automatic_expiry": false, - "bucket": "railiance-coulomb-social-recovery", - "bytes": 277585920, - "object_key": "kits/db05c8f3b5587dc1fc09a5352c317dd3357527dbe72366ab7ca1041db578c834/recovery-kit.tar", - "project_id": "06d107bc-9d84-4672-b2a0-95701cc0c07f", "schema": "platform.coulomb-protected-recovery-kit.v1", - "sha256": "db05c8f3b5587dc1fc09a5352c317dd3357527dbe72366ab7ca1041db578c834", - "version_id": "1793309971213507" + "project_id": "06d107bc-9d84-4672-b2a0-95701cc0c07f", + "bucket": "railiance-coulomb-social-recovery", + "object_key": "kits/4166eb8ba97f7bd79e912c2efaee2622fcd472b05ed80070ccf7e6728fec5bd6/recovery-kit.tar", + "version_id": "1793432303941465", + "sha256": "4166eb8ba97f7bd79e912c2efaee2622fcd472b05ed80070ccf7e6728fec5bd6", + "bytes": 276019200, + "automatic_expiry": false }, - "recovery_seconds": 30.232, - "proof": "docs/evidence/2026-10-29-coulomb-provider-kit-recovery.json", + "recovery_seconds": 46.692, + "proof": "docs/evidence/2026-10-31-coulomb-provider-kit-post-date-recovery.json", "protected_recovery_proof": { "project_id": "06d107bc-9d84-4672-b2a0-95701cc0c07f", "bucket": "railiance-coulomb-social-recovery", - "object_key": "kits/receipts/a77477cac53086b83ad2cb512973ae0d1dfecba028a29a92e06a1bcfe5287f29/recovery-proof.json", - "version_id": "1793310476676486", - "sha256": "a77477cac53086b83ad2cb512973ae0d1dfecba028a29a92e06a1bcfe5287f29", - "bytes": 4237, + "object_key": "kits/receipts/b93e3003627581eb510086ba207bf283085d88cb9b3dfd0e74ffa8ebf02c39f0/recovery-proof.json", + "version_id": "1793432409572654", + "sha256": "b93e3003627581eb510086ba207bf283085d88cb9b3dfd0e74ffa8ebf02c39f0", + "bytes": 4365, "independent_readback_verified": true, "automatic_expiry": false } diff --git a/docs/credential-lane-designs/coulomb-recovery-api.md b/docs/credential-lane-designs/coulomb-recovery-api.md index 81255d1..23b2d91 100644 --- a/docs/credential-lane-designs/coulomb-recovery-api.md +++ b/docs/credential-lane-designs/coulomb-recovery-api.md @@ -67,3 +67,18 @@ application_recovery_drill.py previews without effects and executes only with directory outside Git. It never restores production. Retention/copy disposition, monitoring and scheduled activation remain open; this receipt closes only the consumer's first-paired-recovery task. + +2026-10-31 corrected-date protected recovery refresh: the 07:13:52Z point is now +independently retained in kit4166eb8b/version1793432303941465 (276,019,200bytes) +and recovered using only the provider kit plus separate age escrow. All2098members, +13tables/114rows/sequences,86files and40owner renders/40outsider denials pass in +46.692s. The matching captured image is51281946; this point predates the revision19 +image update but includes the verified source-date correction. Current image522bcd7f +has separate same-store export/view proof. The successful recovery proof is itself +protected and independently read back at version1793432409572654. The fresh drill's +temporary identity file was removed; pre-existing custody and historical copies +remain untouched. No production restore, new grants, expiry or timer activation. +Public API coordinates now identify this verified point; the former pointer still +named October29 and was stale. Historical kits/proofs remain retained. Receipt: +docs/evidence/2026-10-31-coulomb-provider-kit-post-date-recovery.json. Existing +retention/capacity/monitoring/copy-disposition obligations remain open. diff --git a/docs/evidence/2026-10-31-coulomb-provider-kit-post-date-recovery.json b/docs/evidence/2026-10-31-coulomb-provider-kit-post-date-recovery.json new file mode 100644 index 0000000..319e442 --- /dev/null +++ b/docs/evidence/2026-10-31-coulomb-provider-kit-post-date-recovery.json @@ -0,0 +1,117 @@ +{ + "schema": "platform.coulomb-provider-kit-recovery.v1", + "status": "application_restored_verified", + "started_at": "2026-10-31T07:39:13.861634+00:00", + "completed_at": "2026-10-31T07:40:07.620278+00:00", + "stages_seconds": { + "provider_kit_retrieval": 18.124, + "all_kit_member_hashes_and_extraction": 4.717, + "provider_age_escrow_retrieval": 0.501, + "application_image_load": 2.432, + "postgres_image_load": 3.177, + "decrypt_and_validate_pair": 0.131, + "isolated_database_content_restore": 7.451, + "packaged_app_views_and_permissions": 9.607 + }, + "recovery_seconds": 46.692, + "protected_kit": { + "schema": "platform.coulomb-protected-recovery-kit.v1", + "project_id": "06d107bc-9d84-4672-b2a0-95701cc0c07f", + "bucket": "railiance-coulomb-social-recovery", + "object_key": "kits/4166eb8ba97f7bd79e912c2efaee2622fcd472b05ed80070ccf7e6728fec5bd6/recovery-kit.tar", + "version_id": "1793432303941465", + "sha256": "4166eb8ba97f7bd79e912c2efaee2622fcd472b05ed80070ccf7e6728fec5bd6", + "bytes": 276019200, + "automatic_expiry": false + }, + "kit_members_verified": 2098, + "application": "coulomb-social", + "captured_at": "2026-10-31T07:13:52Z", + "application_restore_verified": true, + "application_data_images_and_recovery_tools_from_provider_kit": true, + "bootstrap_api_client_preinstalled": true, + "age_identity_from_separate_provider_escrow": true, + "original_node_or_plaintext_used": false, + "personal_session_used": false, + "registry_pulls_performed": false, + "fresh_docker_daemon": false, + "operator_account_recovery_time_included": false, + "real_browser_journey_verified": false, + "unpack": { + "status": "decrypted_pair_verified", + "version_id": "1793430889823443", + "encrypted_sha256": "840e633047fddd88c6e6a1a3d6909d9af1ad80eaba8c90f83d8e81188dfc17a4", + "captured_at": "2026-10-31T07:13:52Z", + "database_sha256": "498a11e221dcdef38075d23ef89a26f213316c6164addb70d47bfcb98a1999a7", + "content_sha256": "644db8f09684bd4a79c126a01a329904351c30bb340295b29c8bb0ca71092dfe", + "application_restore_verified": false + }, + "restore": { + "status": "restored_verified", + "database_tables": 13, + "database_rows": 114, + "database_rows_and_sequences_match": true, + "content_files": 86, + "content_hashes_match": true, + "network_internal": true, + "published_ports": 0, + "postgres_image_id": "sha256:ff23cdce56cac62ada6f66013e1a50864c0abbe79d132d40b6e05bd80f378a70", + "elapsed_seconds": 7.35, + "content_was_empty": false, + "database_container": "csoc-recovery-20261031073947", + "network": "csoc-recovery-20261031073947-net" + }, + "application_checks": { + "status": "isolated_application_recovery_verified", + "recovered_spaces_with_content": 1, + "actual_pages_rendered_through_view": 40, + "restored_owner_access_verified": true, + "synthetic_viewer_reads": 1, + "synthetic_viewer_mutation_denials": 1, + "same_tenant_ungranted_page_denials": 40, + "fixture_transaction_rolled_back": true, + "production_access": false, + "external_identity_provider_used": false, + "real_browser_journey_verified": false, + "content_files_unchanged": 86, + "packaged_application_image": "sha256:512819463a1902b43a615beee14be7bf97e6a05e016385082b9380692ad1a8cd", + "database_restore": { + "status": "restored_verified", + "database_tables": 13, + "database_rows": 114, + "database_rows_and_sequences_match": true, + "content_files": 86, + "content_hashes_match": true, + "network_internal": true, + "published_ports": 0, + "postgres_image_id": "sha256:ff23cdce56cac62ada6f66013e1a50864c0abbe79d132d40b6e05bd80f378a70", + "elapsed_seconds": 7.35, + "content_was_empty": false, + "database_container": "csoc-recovery-20261031073947", + "network": "csoc-recovery-20261031073947-net", + "restored_directory": "/home/worsch/.config/railiance-platform/coulomb-social-recovery/drill-20261031T071352Z/provider-only-recovery/csoc-recovery-20261031073947-fkl67w71" + } + }, + "timers_activated": false, + "object_key": "platform-pg/application-archives/coulomb-social/2026/10/31/20261031T071352Z-abf5997f01a14d9cb05e4bba.tar.age", + "version_id": "1793430889823443", + "ciphertext_sha256": "840e633047fddd88c6e6a1a3d6909d9af1ad80eaba8c90f83d8e81188dfc17a4", + "ciphertext_bytes": 2181848, + "image": "forgejo.coulomb.social/coulomb/coulomb-social@sha256:512819463a1902b43a615beee14be7bf97e6a05e016385082b9380692ad1a8cd", + "age_recipient": "age1qm30jk8q0cezey652dk2dhcr3d9vs528v6lg8mavl6d4q3e3vgnqmrmyy3", + "database_sha256": "498a11e221dcdef38075d23ef89a26f213316c6164addb70d47bfcb98a1999a7", + "content_sha256": "644db8f09684bd4a79c126a01a329904351c30bb340295b29c8bb0ca71092dfe", + "protected_recovery_proof": { + "project_id": "06d107bc-9d84-4672-b2a0-95701cc0c07f", + "bucket": "railiance-coulomb-social-recovery", + "object_key": "kits/receipts/b93e3003627581eb510086ba207bf283085d88cb9b3dfd0e74ffa8ebf02c39f0/recovery-proof.json", + "version_id": "1793432409572654", + "sha256": "b93e3003627581eb510086ba207bf283085d88cb9b3dfd0e74ffa8ebf02c39f0", + "bytes": 4365, + "independent_readback_verified": true, + "automatic_expiry": false + }, + "temporary_drill_identity_removed": true, + "restore_work_root_override": "protected provider-only recovery directory", + "driver_sha256": "68415a3165f6f137919fc06dbbcc09c8ec025500e86c8649d3b1c0ce9d884028" +} diff --git a/workplans/RPF-WP-0053-coulomb-paired-backup-admission.md b/workplans/RPF-WP-0053-coulomb-paired-backup-admission.md index c3398bb..22d62e0 100644 --- a/workplans/RPF-WP-0053-coulomb-paired-backup-admission.md +++ b/workplans/RPF-WP-0053-coulomb-paired-backup-admission.md @@ -8,7 +8,7 @@ status: active owner: codex topic_slug: coulomb-social created: "2026-10-07" -updated: "2026-10-29" +updated: "2026-10-31" state_hub_workstream_id: "cb55e474-c7a5-5c6f-bd72-ce65f853e3e3" --- @@ -433,3 +433,18 @@ is done. Owner T02 retention/capacity/copy disposition and T03/T04 scheduled and monitored operation remain open. Preserve isolated recovery fixtures for the pending actual-data storage-migration rehearsal; do not treat their copies as another independent offsite location or delete historical plaintext pairs. + +2026-10-31 corrected-date protected recovery refresh: the 07:13:52Z point is now +independently retained in kit4166eb8b/version1793432303941465 (276,019,200bytes) +and recovered using only the provider kit plus separate age escrow. All2098members, +13tables/114rows/sequences,86files and40owner renders/40outsider denials pass in +46.692s. The matching captured image is51281946; this point predates the revision19 +image update but includes the verified source-date correction. Current image522bcd7f +has separate same-store export/view proof. The successful recovery proof is itself +protected and independently read back at version1793432409572654. The fresh drill's +temporary identity file was removed; pre-existing custody and historical copies +remain untouched. No production restore, new grants, expiry or timer activation. +Public API coordinates now identify this verified point; the former pointer still +named October29 and was stale. Historical kits/proofs remain retained. Receipt: +docs/evidence/2026-10-31-coulomb-provider-kit-post-date-recovery.json. Existing +retention/capacity/monitoring/copy-disposition obligations remain open.