Record content recovery release preparation and backup ordering
Some checks failed
Use-case regression gate / usecase-regressions (push) Has been cancelled
Some checks failed
Use-case regression gate / usecase-regressions (push) Has been cancelled
Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a18e2d-f513-7742-b8e7-12af0b744ff3
This commit is contained in:
parent
4e9a1c62ee
commit
a786a8050d
10 changed files with 455 additions and 2 deletions
|
|
@ -0,0 +1,65 @@
|
||||||
|
{
|
||||||
|
"schema": "coulomb.packaged-content-lifecycle-recovery.v1",
|
||||||
|
"status": "packaged_recovered_client_export_and_views_verified",
|
||||||
|
"source": "f306dbfa2604e4815523667740be2925c333b84e",
|
||||||
|
"image_id": "sha256:d3f2f5bb90f0ba79f4e1d8098d2eb06f8940b8789e5ecb851914bbab364597ec",
|
||||||
|
"restore_receipt_sha256": "966d6640e42e2f4940c66d1cd5c8a802cd950de0305572f3c8b720ee3d81ae2b",
|
||||||
|
"client_export": {
|
||||||
|
"status": "recovered_client_export_verified",
|
||||||
|
"schema": "coulomb.client-dataset-export.v1",
|
||||||
|
"content_files": 85,
|
||||||
|
"records": {
|
||||||
|
"members.user": 1,
|
||||||
|
"members.member": 1,
|
||||||
|
"spaces.space": 1,
|
||||||
|
"spaces.spacemembership": 1
|
||||||
|
},
|
||||||
|
"admin_events": 0,
|
||||||
|
"archive_sha256": "e364a61570e0083e729a3f314eb707c57347200438bd98170c77b8f7fcc2b337",
|
||||||
|
"offboarding_complete": false,
|
||||||
|
"all_source_tables_compared": 13,
|
||||||
|
"all_source_files_compared": 86,
|
||||||
|
"archive_member_hashes_verified": true,
|
||||||
|
"selected_client_content_complete_locally": true,
|
||||||
|
"source_sql_and_content_unchanged": true,
|
||||||
|
"external_bindings_require_review": 0,
|
||||||
|
"sessions_and_credentials_excluded": true
|
||||||
|
},
|
||||||
|
"candidate_application": {
|
||||||
|
"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
|
||||||
|
},
|
||||||
|
"previous_image_application": {
|
||||||
|
"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
|
||||||
|
},
|
||||||
|
"source_content_files_unchanged": 86,
|
||||||
|
"all_tables_unchanged_after_both_view_checks": true,
|
||||||
|
"application_source_overlay": false,
|
||||||
|
"export_archive_removed": true,
|
||||||
|
"network_internal": true,
|
||||||
|
"published_ports": 0,
|
||||||
|
"production_access": false,
|
||||||
|
"production_restore": false,
|
||||||
|
"post_date_correction_data_claimed": true,
|
||||||
|
"retained_point_captured_at": "2026-10-31T07:13:52Z",
|
||||||
|
"driver_sha256": "92b66225e5f9bdf03d0a0999b613370c42341a2ceef468f1743fb4301884cb25"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
/tmp/csoc-content-release-observation-20261031.py: 1065625ee5b0736ae68a5230684f0effcb2c92cf0f814154ee86450b5a8fda4a
|
||||||
|
/tmp/csoc-content-row-drift-20261031.py: 49c8f0b8a92524205e2b190bbefec76d9cc38d966c4d20ffa7391e85ff17bf0e
|
||||||
|
/tmp/csoc-packaged-lifecycle-recovery-20261031.py: 92b66225e5f9bdf03d0a0999b613370c42341a2ceef468f1743fb4301884cb25
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"proposal_digest": "sha256:c9c3231620721ef3ea9b2bf22fc6c62fe3ed8efb91386cf7ec96acc6959dae08",
|
||||||
|
"execution_started": false,
|
||||||
|
"status": "release_refused_or_failed",
|
||||||
|
"failure_type": "Refused",
|
||||||
|
"failure_reason": "inactive_backup_installation_required_before_image_release"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,79 @@
|
||||||
|
{
|
||||||
|
"schema": "coulomb.content-release-preparation.v1",
|
||||||
|
"prepared_at": "2026-10-31T12:16:52.085864+00:00",
|
||||||
|
"status": "prepared_waiting_for_inactive_backup_installation",
|
||||||
|
"proposal_digest": "sha256:c9c3231620721ef3ea9b2bf22fc6c62fe3ed8efb91386cf7ec96acc6959dae08",
|
||||||
|
"capsule_members": 20,
|
||||||
|
"owner_task": "RAPPS-WP-0015-T07",
|
||||||
|
"owner_task_id": "8f448934-bdfe-539f-8cab-a739ec752491",
|
||||||
|
"consumer_task": "CSOC-WP-0013-T05",
|
||||||
|
"baseline_revision": 19,
|
||||||
|
"current_business_rows": 93,
|
||||||
|
"candidate_image": "forgejo.coulomb.social/coulomb/coulomb-social@sha256:d3f2f5bb90f0ba79f4e1d8098d2eb06f8940b8789e5ecb851914bbab364597ec",
|
||||||
|
"prerequisite_installation_digest": "sha256:8f442bf0ebed8bbf3b7f227b52081df52613f3f5f6874c4a59511cfc2ba06d42",
|
||||||
|
"ordering": [
|
||||||
|
"historical custody repair",
|
||||||
|
"recurring alert route",
|
||||||
|
"inactive backup-source installation",
|
||||||
|
"content image preflight and supervised release",
|
||||||
|
"native recurring proof and schedule activation"
|
||||||
|
],
|
||||||
|
"controller_tests": {
|
||||||
|
"tests": 40,
|
||||||
|
"failures": 0,
|
||||||
|
"errors": 0,
|
||||||
|
"skipped": 0
|
||||||
|
},
|
||||||
|
"helm_lint": "passed",
|
||||||
|
"image_only_local_render_difference": true,
|
||||||
|
"candidate_image_only_server_preview_verified": true,
|
||||||
|
"native_full_preflight": "refused_expected_missing_installation",
|
||||||
|
"full_preflight_passed": false,
|
||||||
|
"historical_custody_packet_digest_unchanged": true,
|
||||||
|
"inactive_installer_packet_digest_unchanged": true,
|
||||||
|
"release_executed": false,
|
||||||
|
"fresh_backup_created_by_preparation": false,
|
||||||
|
"production_data_restored": false,
|
||||||
|
"timers_activated": false,
|
||||||
|
"new_resources_committed": 0,
|
||||||
|
"cost_risk_review": {
|
||||||
|
"additional_infrastructure_reservations": 0,
|
||||||
|
"new_backup_objects": 1,
|
||||||
|
"encrypted_file_limit_bytes": 1073741824,
|
||||||
|
"incremental_provider_cost_eur": null,
|
||||||
|
"autopilot_budget_claimed": false,
|
||||||
|
"risks": [
|
||||||
|
"Brief application pause for paired capture and Recreate image rollout.",
|
||||||
|
"Rollback restores previous image/helper without rolling back productive data.",
|
||||||
|
"Uncertain or changed baseline refuses; inspect durable receipt before retry."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"repo": "railiance-apps",
|
||||||
|
"path": "tools/coulomb-image-release.py",
|
||||||
|
"sha256": "4cefb7b4ce7fb7eece1cd78ce3c1712a2b5cc2f9c81acfed06e3c6ac7c4abad3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "railiance-apps",
|
||||||
|
"path": "tools/coulomb_image_release_node.py",
|
||||||
|
"sha256": "5547b3809f34178e48404cd1590f665729b062b4333f561e2da81b56d435dece"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "railiance-apps",
|
||||||
|
"path": "tests/test_coulomb_image_release.py",
|
||||||
|
"sha256": "dc9cd51bd0698b46c5e2a4f2f0fb8f89eceed722a92bd7b03f7278ed77a497d4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"repo": "railiance-apps",
|
||||||
|
"path": "release/coulomb-content-lifecycle-f306dbf.json",
|
||||||
|
"sha256": "1bcd840aee2a93130838b7430de279c56dd7aecbce4244765a85be9d0a7130e2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"native_no_attempt_readback": {
|
||||||
|
"release_journal_exists": false,
|
||||||
|
"release_receipt_exists": false
|
||||||
|
},
|
||||||
|
"sequencing_decision_id": "de5a4528-0864-4769-b9d0-2f658b0310c6",
|
||||||
|
"owner_controller_commit": "9c748846413c6db3f13ae3e55627fe3f6ad89194"
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,90 @@
|
||||||
|
{
|
||||||
|
"schema": "coulomb.reviewed-image-release.v1",
|
||||||
|
"proposal_id": "CSOC-CONTENT-LIFECYCLE-20261031",
|
||||||
|
"scope": "ADMINISTER @ realm:kubernetes/railiance01; supervised founder execution only",
|
||||||
|
"operation": "image_only_existing_migration_0003",
|
||||||
|
"cluster_uid": "a553c742-0115-43d4-99a4-a5ca56fe0786",
|
||||||
|
"baseline_revision": 19,
|
||||||
|
"baseline_helm_manifest_sha256": "93cb277abd1aea0657be482e458dcfb268fe0bfbd45d90aa1faedcc7f5bce499",
|
||||||
|
"candidate_render_sha256": "1606725273089b83689850ad1c25d1834faa15e00c8cf8aa24e1053273af71bc",
|
||||||
|
"deployment_uid": "2dbe661a-d232-4477-bbd1-833813077fbe",
|
||||||
|
"pvc_uid": "9888abeb-9d52-4c70-a23d-b5494780d9c3",
|
||||||
|
"baseline_spec_sha256": "42e091e52d5dae3c1f986e4898c62057fa80846adfce049a75d8fbd4681180ea",
|
||||||
|
"candidate_spec_sha256": "c65cb691bab7054ae25de58cdb75933d383621ec4e049d2daa1b1bf52dce0bba",
|
||||||
|
"old_image": "forgejo.coulomb.social/coulomb/coulomb-social@sha256:522bcd7fce92436765a60c1e4afa2598f3cc40913352153ff1c4319a99ca92ed",
|
||||||
|
"candidate_image": "forgejo.coulomb.social/coulomb/coulomb-social@sha256:d3f2f5bb90f0ba79f4e1d8098d2eb06f8940b8789e5ecb851914bbab364597ec",
|
||||||
|
"product_source": "f306dbfa2604e4815523667740be2925c333b84e",
|
||||||
|
"expected_data": {
|
||||||
|
"business_tables": 12,
|
||||||
|
"migration_rows_sha256": "43471516387c0e2a3d35971033ed6af330e2963efe4da93293d97633825d04af",
|
||||||
|
"business_rows": 93,
|
||||||
|
"business_rows_sha256": "7953b37b02b80d89ca6869dab6b2b0b996541de20ca0dd1b294a5f25572fb2ca",
|
||||||
|
"content_files": 86,
|
||||||
|
"content_files_sha256": "ed535246f4e8f46fcd7ce01f936127996aff873c6936b297f7272194b594aeda",
|
||||||
|
"global_slug_constraint": true,
|
||||||
|
"tenant_slug_constraint": true,
|
||||||
|
"migration_0003_applied": true,
|
||||||
|
"duplicate_slug_groups": 0
|
||||||
|
},
|
||||||
|
"public_recipient": "age1qm30jk8q0cezey652dk2dhcr3d9vs528v6lg8mavl6d4q3e3vgnqmrmyy3",
|
||||||
|
"installed_helper_hashes": {
|
||||||
|
"/opt/coulomb-social-backup/paired-backup.py": "d161c742d1a6a182460a57d0a1719591ab58fc94006f55169ad3d74442a93630",
|
||||||
|
"/opt/coulomb-social-backup/snapshot-content-and-db.py": "dcc8dd2a3989f279597595f9260b31b24fcc9b6dc787f04c17ef0491c53d830d",
|
||||||
|
"/opt/coulomb-social-backup/mirror-paired-backup.py": "9ceb26d9083af016c4b787907e4dce7bdf437c782fb2d15eb28d9e334e6e431c",
|
||||||
|
"/opt/coulomb-social-backup/check-paired-backup-health.py": "2d40ec6e4c59ea7fe1d46065d197b9a87ca6811f023cc6f3e20e4184a3490566",
|
||||||
|
"/opt/coulomb-social-backup/backup_capacity.py": "cb699a79e67b129239b5aa5d6f3b0d4ffaa9773a8b073227ad17fdecb5b9d893",
|
||||||
|
"/opt/railiance-platform/scripts/application_recovery_identities.py": "20f56255ed6eeec4aafe33f142bc3ee03f623d4957a7b0cabb741d340f15f79d",
|
||||||
|
"/opt/railiance-platform/scripts/application_recovery_mirror.py": "d48ab95e89b9eeae36269d853ebe4c44c22e1f57d4e14224f03d0b9aeeb34178",
|
||||||
|
"/opt/railiance-platform/scripts/application_recovery_resources.py": "ab70ec341e738272730eb0daf76840d0bca807caeb3c4e4c2357f162fbed4498",
|
||||||
|
"/opt/railiance-platform/scripts/primary_application_archive.py": "a3f0a61e869a6012edb4b5288be14e3b0c4a9a1273b090320ab146d12e5aa94d",
|
||||||
|
"/opt/coulomb-social-backup/backup_alerts.py": "07522437d4276b92f0a44149adc6c9e81bb18dbe59ce0f1f9e58a48347700d0e",
|
||||||
|
"/opt/coulomb-social-backup/notify-backup-alert.py": "0bd53bc5ad22d8bcb0326fb18a17737744b06416fe785dad077308e45f051d5a",
|
||||||
|
"/opt/coulomb-social-backup/observe-backup-alerts.py": "17caf4fa65283242f618b039ff1d018801c9890ea2a9178912cbdd4b50ee2664"
|
||||||
|
},
|
||||||
|
"clipboard_static_sha256": "347eabe0c8d93bf439df02b5a08a7ea71004600e6ff4e8a42cecbee52a9f0413",
|
||||||
|
"fresh_backup_before_helm": true,
|
||||||
|
"requires_dataset_equality_before_and_after": true,
|
||||||
|
"node_request_percent_limit": 90,
|
||||||
|
"helm_atomic_timeout_seconds": 300,
|
||||||
|
"rollback": "Restore Helm revision19/image522bcd7f and verified snapshot pin; preserve all post-capture data. No production data restore or schema downgrade.",
|
||||||
|
"approval_status": "prepared_not_admitted",
|
||||||
|
"recovery_rehearsal_scope": "Retained independently recovered 2026-10-31T07:13:52Z point; candidate and previous image preserve all 13 source tables and 86 files. Live observation now has93 business rows versus92 in that point; exact fresh paired backup/readback is required before Helm. Independent restore of the new point remains consumer follow-through. Read-only drift comparison confines differences to sessions and user/member login timestamps; all content and migration history match the retained point.",
|
||||||
|
"rehearsal_evidence_sha256": {
|
||||||
|
"content-lifecycle-candidate-build-2026-10-31.json": "83ad2ec41c85f8bb5087a250fdb91126ed92f12351cdc72b353c6f0e1a26452b",
|
||||||
|
"content-lifecycle-candidate-provenance-2026-10-31.json": "35ed909e0a2fa5c57cea1fcc4fbebb877eae559ca9dc753c3da00f84806d7b73",
|
||||||
|
"content-lifecycle-candidate-tests-2026-10-31.json": "27a75cfee6bbda41f377b73d6a6c7ecde0c54806c113f1be5223dd2f2cf39b3b",
|
||||||
|
"content-lifecycle-baseline-tests-2026-10-31.json": "de14e4e10337990ccec1c483f7d943bdc7e11b03aa813aff47d00a9b38a07b65",
|
||||||
|
"content-lifecycle-candidate-recovery-2026-10-31.json": "8d15172e5e330d01f153336e67f6bffb4363d571530c31ea05db872ca10807a9",
|
||||||
|
"content-lifecycle-validation-2026-10-31.json": "cbb093af470588ca6e8eb3ec5bc1ccee0be537ab37a46625b6ac267c17343d99",
|
||||||
|
"content-lifecycle-release-target-2026-10-31.json": "e9b50be3c8284c5a9ae96d75b800cbc4090580fa811c2ecd098d73ce8cbee74e",
|
||||||
|
"content-lifecycle-release-row-drift-2026-10-31.json": "b10f65bf55e900199ae6037767f32e8901aaccb6f7f3a86461f13dd02ec8efce"
|
||||||
|
},
|
||||||
|
"new_resources_committed": 0,
|
||||||
|
"autopilot_or_eur_budget_claimed": false,
|
||||||
|
"values_file": "release/content-lifecycle-values.yaml",
|
||||||
|
"snapshot_file": "release/content-lifecycle-snapshot.py",
|
||||||
|
"evidence_directory": "release/content-lifecycle-evidence",
|
||||||
|
"prerequisite_installation_digest": "sha256:8f442bf0ebed8bbf3b7f227b52081df52613f3f5f6874c4a59511cfc2ba06d42",
|
||||||
|
"requires_inactive_backup_units": true,
|
||||||
|
"files": {
|
||||||
|
"tools/coulomb-image-release.py": "4cefb7b4ce7fb7eece1cd78ce3c1712a2b5cc2f9c81acfed06e3c6ac7c4abad3",
|
||||||
|
"tools/coulomb_image_release_node.py": "5547b3809f34178e48404cd1590f665729b062b4333f561e2da81b56d435dece",
|
||||||
|
"tools/coulomb_image_probe.py": "7d241b288992fbbc961b42a1311f7d0938b0c899c0675b7db92653c5ace6014f",
|
||||||
|
"release/content-lifecycle-values.yaml": "daa302f96bddb889c7fe4aa95b740e9f5184d2ac463cd2403431b3e94db86528",
|
||||||
|
"release/content-lifecycle-snapshot.py": "c1508043f473d2762723acda04944a36f5346e7641fbe6fdf21a91acd3921a54",
|
||||||
|
"charts/coulomb-social/Chart.yaml": "663d6c23c57457a03bc376ebafb8107ee7f150e150f4d4fb6a3a949fb21006aa",
|
||||||
|
"charts/coulomb-social/templates/_helpers.tpl": "65379818d484959e7221d3f538b59ffd6b8b7d3c9493250e47520576aee1fc68",
|
||||||
|
"charts/coulomb-social/templates/content-pvc.yaml": "5c4ddcaee2b3dcdf17da061b1a7a2cb1e0398d2f56f4ef31790cfaaf648b0fee",
|
||||||
|
"charts/coulomb-social/templates/deployment.yaml": "f90b7517959ec8785f578f917fec222287931e4f8a27f6f9e8fc0a28385f7df8",
|
||||||
|
"charts/coulomb-social/templates/service.yaml": "78ce0ec6990c5ad57703c7a8d5d2c88c8eb9302d325cb2ba9d2df34e5f90ebdd",
|
||||||
|
"charts/coulomb-social/values.yaml": "af48d133f7fe45f0d762b40878f306ef48262f6cbbca61808ffac5dd9fc9d241",
|
||||||
|
"release/content-lifecycle-evidence/content-lifecycle-baseline-tests-2026-10-31.json": "de14e4e10337990ccec1c483f7d943bdc7e11b03aa813aff47d00a9b38a07b65",
|
||||||
|
"release/content-lifecycle-evidence/content-lifecycle-candidate-build-2026-10-31.json": "83ad2ec41c85f8bb5087a250fdb91126ed92f12351cdc72b353c6f0e1a26452b",
|
||||||
|
"release/content-lifecycle-evidence/content-lifecycle-candidate-provenance-2026-10-31.json": "35ed909e0a2fa5c57cea1fcc4fbebb877eae559ca9dc753c3da00f84806d7b73",
|
||||||
|
"release/content-lifecycle-evidence/content-lifecycle-candidate-recovery-2026-10-31.json": "8d15172e5e330d01f153336e67f6bffb4363d571530c31ea05db872ca10807a9",
|
||||||
|
"release/content-lifecycle-evidence/content-lifecycle-candidate-tests-2026-10-31.json": "27a75cfee6bbda41f377b73d6a6c7ecde0c54806c113f1be5223dd2f2cf39b3b",
|
||||||
|
"release/content-lifecycle-evidence/content-lifecycle-release-row-drift-2026-10-31.json": "b10f65bf55e900199ae6037767f32e8901aaccb6f7f3a86461f13dd02ec8efce",
|
||||||
|
"release/content-lifecycle-evidence/content-lifecycle-release-target-2026-10-31.json": "e9b50be3c8284c5a9ae96d75b800cbc4090580fa811c2ecd098d73ce8cbee74e",
|
||||||
|
"release/content-lifecycle-evidence/content-lifecycle-validation-2026-10-31.json": "cbb093af470588ca6e8eb3ec5bc1ccee0be537ab37a46625b6ac267c17343d99"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
{
|
||||||
|
"changed_columns": {
|
||||||
|
"django_session": [
|
||||||
|
"session_key",
|
||||||
|
"session_data",
|
||||||
|
"expire_date"
|
||||||
|
],
|
||||||
|
"members_member": [
|
||||||
|
"updated_at",
|
||||||
|
"last_login_at"
|
||||||
|
],
|
||||||
|
"members_user": [
|
||||||
|
"last_login"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"file_changes": [],
|
||||||
|
"retained_fingerprint": {
|
||||||
|
"business_tables": 12,
|
||||||
|
"migration_rows_sha256": "43471516387c0e2a3d35971033ed6af330e2963efe4da93293d97633825d04af",
|
||||||
|
"business_rows": 92,
|
||||||
|
"business_rows_sha256": "6243955479f7861fcdcd79b62f7f1e9f9a27c05a17bd2c17b792ebc98b2fa7b6",
|
||||||
|
"content_files": 86,
|
||||||
|
"content_files_sha256": "ed535246f4e8f46fcd7ce01f936127996aff873c6936b297f7272194b594aeda",
|
||||||
|
"global_slug_constraint": true,
|
||||||
|
"tenant_slug_constraint": true,
|
||||||
|
"migration_0003_applied": true,
|
||||||
|
"duplicate_slug_groups": 0
|
||||||
|
},
|
||||||
|
"schema": "coulomb.content-release-row-drift.v1",
|
||||||
|
"changed_tables": [
|
||||||
|
{
|
||||||
|
"table": "django_session",
|
||||||
|
"retained_rows": 42,
|
||||||
|
"current_rows": 43,
|
||||||
|
"retained_sha256": "c958e33ec782f9f2fd1b3cceba4a64da0038fde51050f25905ae42de91ca6dde",
|
||||||
|
"current_sha256": "594e246ef6297d9be9b6e8d9eda076a5b2ab36afb9263606b719f64f51293ba6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"table": "members_member",
|
||||||
|
"retained_rows": 1,
|
||||||
|
"current_rows": 1,
|
||||||
|
"retained_sha256": "4d465d2b9d1e6311e505f861f2ed4b67763a545a965f9a7d0c586a3d07e3e9a3",
|
||||||
|
"current_sha256": "ab82b3f2c5e49f8634c598c9642894747f4b6fcff0f5230ac27f41939feb8640"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"table": "members_user",
|
||||||
|
"retained_rows": 1,
|
||||||
|
"current_rows": 1,
|
||||||
|
"retained_sha256": "81ccb3a40191e910a68c101896df518a588c00231728934c4c900577f8ae4f12",
|
||||||
|
"current_sha256": "0fc7a71b4b80a71fbedce527bbd2cae3858cf6a062e5714fc231be13ff987256"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"all_other_business_tables_equal": true,
|
||||||
|
"migration_history_equal": true,
|
||||||
|
"content_equal": true,
|
||||||
|
"retained_point": "2026-10-31T07:13:52Z",
|
||||||
|
"current_business_rows": 93,
|
||||||
|
"current_business_rows_sha256": "7953b37b02b80d89ca6869dab6b2b0b996541de20ca0dd1b294a5f25572fb2ca",
|
||||||
|
"private_row_values_printed": false,
|
||||||
|
"production_changes": false
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
{
|
||||||
|
"schema": "coulomb.content-release-target-observation.v1",
|
||||||
|
"observed_at": "2026-10-31T12:07:24.322343+00:00",
|
||||||
|
"cluster_uid": "a553c742-0115-43d4-99a4-a5ca56fe0786",
|
||||||
|
"deployment_uid": "2dbe661a-d232-4477-bbd1-833813077fbe",
|
||||||
|
"pvc_uid": "9888abeb-9d52-4c70-a23d-b5494780d9c3",
|
||||||
|
"baseline_revision": 19,
|
||||||
|
"baseline_helm_manifest_sha256": "93cb277abd1aea0657be482e458dcfb268fe0bfbd45d90aa1faedcc7f5bce499",
|
||||||
|
"baseline_spec_sha256": "42e091e52d5dae3c1f986e4898c62057fa80846adfce049a75d8fbd4681180ea",
|
||||||
|
"candidate_spec_sha256": "c65cb691bab7054ae25de58cdb75933d383621ec4e049d2daa1b1bf52dce0bba",
|
||||||
|
"old_image": "forgejo.coulomb.social/coulomb/coulomb-social@sha256:522bcd7fce92436765a60c1e4afa2598f3cc40913352153ff1c4319a99ca92ed",
|
||||||
|
"candidate_image": "forgejo.coulomb.social/coulomb/coulomb-social@sha256:d3f2f5bb90f0ba79f4e1d8098d2eb06f8940b8789e5ecb851914bbab364597ec",
|
||||||
|
"sole_ready_pvc_writer": true,
|
||||||
|
"existing_unmanaged_metadata_preserved": true,
|
||||||
|
"candidate_image_only_server_preview_verified": true,
|
||||||
|
"data": {
|
||||||
|
"business_tables": 12,
|
||||||
|
"migration_rows_sha256": "43471516387c0e2a3d35971033ed6af330e2963efe4da93293d97633825d04af",
|
||||||
|
"business_rows": 93,
|
||||||
|
"business_rows_sha256": "7953b37b02b80d89ca6869dab6b2b0b996541de20ca0dd1b294a5f25572fb2ca",
|
||||||
|
"content_files": 86,
|
||||||
|
"content_files_sha256": "ed535246f4e8f46fcd7ce01f936127996aff873c6936b297f7272194b594aeda",
|
||||||
|
"global_slug_constraint": true,
|
||||||
|
"tenant_slug_constraint": true,
|
||||||
|
"migration_0003_applied": true,
|
||||||
|
"duplicate_slug_groups": 0,
|
||||||
|
"actual_owner_pages_rendered": 40,
|
||||||
|
"unsaved_outsider_page_denials": 40,
|
||||||
|
"production_identity_or_grant_created": false
|
||||||
|
},
|
||||||
|
"matches_verified_revision19_data": false,
|
||||||
|
"installed_helper_sha256": {
|
||||||
|
"/opt/coulomb-social-backup/paired-backup.py": "43e119acb6a4933b4e144c349a091e074e1a91ab61dbe15a65c8264c1d47661a",
|
||||||
|
"/opt/coulomb-social-backup/snapshot-content-and-db.py": "dcc8dd2a3989f279597595f9260b31b24fcc9b6dc787f04c17ef0491c53d830d",
|
||||||
|
"/opt/railiance-platform/scripts/primary_application_archive.py": "a3f0a61e869a6012edb4b5288be14e3b0c4a9a1273b090320ab146d12e5aa94d"
|
||||||
|
},
|
||||||
|
"timers": {
|
||||||
|
"coulomb-social-paired-backup.timer": {
|
||||||
|
"LoadState": "not-found",
|
||||||
|
"ActiveState": "inactive",
|
||||||
|
"UnitFileState": ""
|
||||||
|
},
|
||||||
|
"coulomb-social-backup-freshness.timer": {
|
||||||
|
"LoadState": "not-found",
|
||||||
|
"ActiveState": "inactive",
|
||||||
|
"UnitFileState": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"prerequisites": {
|
||||||
|
"custody": {
|
||||||
|
"exists": false
|
||||||
|
},
|
||||||
|
"installation": {
|
||||||
|
"exists": false
|
||||||
|
},
|
||||||
|
"route": {
|
||||||
|
"exists": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"production_data_modified": false,
|
||||||
|
"release_executed": false
|
||||||
|
}
|
||||||
|
|
@ -80,3 +80,59 @@ symlinks. Existing retention/incoming-address permission tests remain required.
|
||||||
Evidence: `../release/content-lifecycle-validation-2026-10-31.json`. This is source
|
Evidence: `../release/content-lifecycle-validation-2026-10-31.json`. This is source
|
||||||
and isolated-fixture evidence; the fix still needs release delivery and productive
|
and isolated-fixture evidence; the fix still needs release delivery and productive
|
||||||
review. Do not kill or mutate the productive application to perform this review.
|
review. Do not kill or mutate the productive application to perform this review.
|
||||||
|
|
||||||
|
## Prepared lifecycle image release — follows inactive backup installation
|
||||||
|
|
||||||
|
The owner packet is `railiance-apps/release/coulomb-content-lifecycle-f306dbf.json`,
|
||||||
|
proposal `sha256:c9c3231620721ef3ea9b2bf22fc6c62fe3ed8efb91386cf7ec96acc6959dae08`.
|
||||||
|
It upgrades the verified revision19/image522bcd7f to candidate d3f2f5bb, with no new
|
||||||
|
migration, resource, authorization grant or content rewrite. The only packaged
|
||||||
|
application change is attachment journal ordering/durability in pageops.py.
|
||||||
|
|
||||||
|
**Current full preflight refuses the missing inactive-installation receipt.**
|
||||||
|
The order is: existing historical custody repairfa2763d1 and recurring route4d848106,
|
||||||
|
then inactive source installation8f442bf0, then this image release, then native
|
||||||
|
recurring-backup proof and schedule activation. The installer pins the current
|
||||||
|
snapshot helper; deploying this image first would invalidate its reviewed preimage.
|
||||||
|
The image controller enforces the completed installer receipt and inactive/disabled
|
||||||
|
backup units before creating an execution journal. Do not bypass that dependency.
|
||||||
|
|
||||||
|
After the existing prerequisites have their independently verified returns, run
|
||||||
|
this read-only check from the workstation:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 /home/worsch/railiance-apps/tools/coulomb-image-release.py \
|
||||||
|
--plan /home/worsch/railiance-apps/release/coulomb-content-lifecycle-f306dbf.json \
|
||||||
|
--preflight \
|
||||||
|
--expect-digest sha256:c9c3231620721ef3ea9b2bf22fc6c62fe3ed8efb91386cf7ec96acc6959dae08
|
||||||
|
```
|
||||||
|
|
||||||
|
Only a `live_release_preflight_verified` return at that exact digest makes the
|
||||||
|
packet ready for attended execution. A changed baseline needs a revised review.
|
||||||
|
The founder execution command then replaces `--preflight` with `--execute`; its
|
||||||
|
terminal prompt requires `DEPLOY` followed by that full digest. The supervision
|
||||||
|
rule is recorded in the-custodian/docs/agent-autonomy-decision.md: “The supervisor
|
||||||
|
approves that proposal or performs it through the privileged execution path.”
|
||||||
|
This release has not been executed or approved through the retention-policy answer.
|
||||||
|
|
||||||
|
Execution creates a fresh immutable paired primary backup/readback before Helm,
|
||||||
|
checks the current complete data and migration fingerprints, performs an atomic
|
||||||
|
image-only upgrade, verifies owner/outsider/public endpoints and refreshes the
|
||||||
|
snapshot image pin. A failure restores revision19 and the recognized previous pin
|
||||||
|
without restoring old data or downgrading schema. Inspect the durable receipt
|
||||||
|
before any retry. Expected receipt status is `image_candidate_deployed_verified`
|
||||||
|
under `/var/lib/coulomb-social-backup/releases/c9c3231620721ef3ea9b2bf22fc6c62fe3ed8efb91386cf7ec96acc6959dae08/receipt.json`.
|
||||||
|
|
||||||
|
The current observation binds93business rows/86files. The retained07:13 recovery
|
||||||
|
point has92business rows: the differences are sessions and login timestamps, with
|
||||||
|
identical content and migration history. Candidate/rollback rehearsals preserve
|
||||||
|
all13tables/86files, verify85export files and40owner/40outsider views on that point.
|
||||||
|
They do not establish recovery of the newer session; independent retrieval/restore
|
||||||
|
of the fresh execution point remains part of the release return.
|
||||||
|
|
||||||
|
There are no new infrastructure reservations. The action adds one encrypted
|
||||||
|
primary backup object and temporary local scratch under the admitted capacity
|
||||||
|
bounds. Incremental provider cost is unpriced; no EUR autopilot budget is claimed.
|
||||||
|
Application writes pause during paired capture and the Recreate rollout. Evidence:
|
||||||
|
`../release/content-lifecycle-release-preparation-2026-10-31.json`, its proposal,
|
||||||
|
native target/preflight/row-drift receipts, and the candidate recovery receipt.
|
||||||
|
|
|
||||||
|
|
@ -647,6 +647,12 @@ Then obtain the attended return and independently verify installed hashes and
|
||||||
disabled units. Review: docs/release/backup-source-installation-execution-review-2026-10-31.md;
|
disabled units. Review: docs/release/backup-source-installation-execution-review-2026-10-31.md;
|
||||||
source/gate evidence: backup-supervised-installer-validation-2026-10-31.json.
|
source/gate evidence: backup-supervised-installer-validation-2026-10-31.json.
|
||||||
|
|
||||||
|
The later content image release (RAPPS-WP-0015-T07, packetc9c32316) must follow
|
||||||
|
this installation: it refreshes the snapshot image pin that this reviewed bundle
|
||||||
|
currently fixes atdcc8dd2a. Both existing packet digests are preserved. Technical
|
||||||
|
sequencing decision: de5a4528-0864-4769-b9d0-2f658b0310c6; this is not image
|
||||||
|
execution approval.
|
||||||
|
|
||||||
Preparation is complete; task status is now wait for the T04 custody/profile
|
Preparation is complete; task status is now wait for the T04 custody/profile
|
||||||
return and T07 attended route. The exact eight-entry custody repair has a passing
|
return and T07 attended route. The exact eight-entry custody repair has a passing
|
||||||
native preflight but has not executed. Installation and independent postflight
|
native preflight but has not executed. Installation and independent postflight
|
||||||
|
|
@ -659,10 +665,15 @@ neither task represents a currently running native job.
|
||||||
id: CSOC-WP-0012-T09
|
id: CSOC-WP-0012-T09
|
||||||
status: todo
|
status: todo
|
||||||
priority: high
|
priority: high
|
||||||
|
depends_on:
|
||||||
|
- CSOC-WP-0012-T04
|
||||||
|
- CSOC-WP-0012-T07
|
||||||
|
- CSOC-WP-0012-T08
|
||||||
|
- RAPPS-WP-0015-T07
|
||||||
state_hub_task_id: "c30bc200-6e0c-5651-b53a-be7a6f3dd207"
|
state_hub_task_id: "c30bc200-6e0c-5651-b53a-be7a6f3dd207"
|
||||||
```
|
```
|
||||||
|
|
||||||
After T07/T08 and applicable T04 operating admission, prove a native paired service capture, exact primary/mirror receipt, independent retrieval, received failed/pending/stale events in both channels, retry and restart continuity, and outside-producer failure detection. Retain correlated receipts without claiming an Alertmanager handoff is recipient delivery. Simulated source tests and the one-off email cannot close this task.
|
After T07/T08, applicable T04 operating admission and RAPPS-WP-0015-T07 content image delivery, prove a native paired service capture, exact primary/mirror receipt, independent retrieval, received failed/pending/stale events in both channels, retry and restart continuity, and outside-producer failure detection. Retain correlated receipts without claiming an Alertmanager handoff is recipient delivery. Simulated source tests and the one-off email cannot close this task.
|
||||||
|
|
||||||
## T10 — Activate and observe the approved recurring schedule
|
## T10 — Activate and observe the approved recurring schedule
|
||||||
|
|
||||||
|
|
@ -670,10 +681,16 @@ After T07/T08 and applicable T04 operating admission, prove a native paired serv
|
||||||
id: CSOC-WP-0012-T10
|
id: CSOC-WP-0012-T10
|
||||||
status: todo
|
status: todo
|
||||||
priority: high
|
priority: high
|
||||||
|
depends_on:
|
||||||
|
- CSOC-WP-0012-T04
|
||||||
|
- CSOC-WP-0012-T07
|
||||||
|
- CSOC-WP-0012-T08
|
||||||
|
- RAPPS-WP-0015-T07
|
||||||
|
- CSOC-WP-0012-T09
|
||||||
state_hub_task_id: "009c9b51-32d4-5a35-a771-7cff0059c042"
|
state_hub_task_id: "009c9b51-32d4-5a35-a771-7cff0059c042"
|
||||||
```
|
```
|
||||||
|
|
||||||
After T04 and T07–T09, activate the already approved 03:15 UTC schedule with five-minute jitter, RPO24h/stale26h and attended RTO60min target. Verify native timer/service state and subsequent scheduled capture/freshness evidence. Record measured recovery limits; cached-image rehearsal is not cold-start recovery. Do not ask the user to approve the schedule again. Close on observed operation, not merely enabling a timer.
|
After T04, T07–T09 and RAPPS-WP-0015-T07, activate the already approved 03:15 UTC schedule with five-minute jitter, RPO24h/stale26h and attended RTO60min target. Verify native timer/service state and subsequent scheduled capture/freshness evidence. Record measured recovery limits; cached-image rehearsal is not cold-start recovery. Do not ask the user to approve the schedule again. Close on observed operation, not merely enabling a timer.
|
||||||
|
|
||||||
## T11 — Close service registration, provenance, cost and smoke evidence
|
## T11 — Close service registration, provenance, cost and smoke evidence
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -229,6 +229,19 @@ new exact release preparation/execution return. T05 remains progress until that
|
||||||
return and productive acceptance; policy acceptance is settled and no live purge
|
return and productive acceptance; policy acceptance is settled and no live purge
|
||||||
is authorized. No production image or release pin changed during this work.
|
is authorized. No production image or release pin changed during this work.
|
||||||
|
|
||||||
|
Exact owner image packetc9c32316 is now prepared and RAPPS-WP-0015-T07 waits on
|
||||||
|
WP-0012-T08. Its40controller cases pass; the separate values/snapshot paths retain
|
||||||
|
historical capsules. Current native image preview is image-only at revision19.
|
||||||
|
Candidate and rollback images preserve the retained13tables/86files and render40
|
||||||
|
owner pages/deny40outsiders. Live93-row baseline includes a new session and login
|
||||||
|
timestamps since the92-row retained point; content/migrations match. The execution
|
||||||
|
must capture a new exact paired point before Helm. Native full preflight refuses
|
||||||
|
missing installation8f442bf0 before creating an execution journal. Existing backup
|
||||||
|
packets retain their digests; image delivery follows inactive installation and
|
||||||
|
precedes native recurring-service acceptance/activation. Details and later commands
|
||||||
|
are in docs/usecases/sharing-portability-review.md. No image release or productive
|
||||||
|
acceptance has occurred; T05 remains progress.
|
||||||
|
|
||||||
## Completion
|
## Completion
|
||||||
|
|
||||||
Finish when every task above has its stated evidence and acceptance, or hand off any newly discovered residual to a live work record first. Cross-owner dependencies remain their existing canonical records.
|
Finish when every task above has its stated evidence and acceptance, or hand off any newly discovered residual to a live work record first. Cross-owner dependencies remain their existing canonical records.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue