diff --git a/docs/assessments/netkingdom-2026-10-14/owner-assembly/reuse-source-publication-r1.json b/docs/assessments/netkingdom-2026-10-14/owner-assembly/reuse-source-publication-r1.json new file mode 100644 index 00000000..b9b5ebbc --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/owner-assembly/reuse-source-publication-r1.json @@ -0,0 +1,31 @@ +{ + "id": "REUSE-WP-0025-SOURCE-PUBLICATION-R1", + "checked_at": "2026-10-14T23:27:10.376089+00:00", + "source_commit": "b181240b35394127868f1e3d962991b2fbbc4a64", + "published_head": "d36fc463bc3d4752ec87a176ac900eb3b4be1cc8", + "route": "/home/worsch/repo-manager/.venv/bin/rmgr sync --path /home/worsch/reuse-surface --push --no-queue", + "projection": { + "status": "applied", + "instance_role": "primary", + "instance_label": "railiance01", + "expected_commit": "d36fc463bc3d4752ec87a176ac900eb3b4be1cc8", + "derived_commit": "d36fc463bc3d4752ec87a176ac900eb3b4be1cc8", + "workplan_uuid": "23c7bcf5-5f5d-524f-a06e-be5247ae1a98" + }, + "forge_main_verified": true, + "working_tree_clean": true, + "only_reviewed_files_committed": true, + "native_sha256": "dbaa40f25cc0f090143578cd1c7068cb2cb00960fafd17d5239bf8a5bac514dd", + "helper_sha256": "c67a284091cc4dd62dca56658a14b8ea1357e2b3df1518120da4c51e0ee8d85c", + "workflow_review": "push triggers image build/publish and tests/smoke only; scheduled recompose separate; no deployment step", + "ci_observation": { + "status": "unavailable_anonymously", + "http_status": 404, + "run_handle": null + }, + "credentials_read": false, + "credentials_provisioned": false, + "production_deployed": false, + "progress_id": "38616f5e-daa0-4103-9253-bca0df567428", + "inbox_read_status": 200 +} diff --git a/docs/assessments/netkingdom-2026-10-14/phase-a-authorized-execution-r1.jsonl b/docs/assessments/netkingdom-2026-10-14/phase-a-authorized-execution-r1.jsonl new file mode 100644 index 00000000..13617e84 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/phase-a-authorized-execution-r1.jsonl @@ -0,0 +1,11 @@ +{"approval_decision": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", "at": "2026-10-15T00:15:52.175419+00:00", "operation": "node_preparation_1", "outcome": "intent", "proposal_sha256": "704a9c932202fc14456652ea4dfdb3acb8b1db0ab3bbf5fff50e92b2c517c380", "raw_output_discarded": true} +{"approval_decision": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", "at": "2026-10-15T00:15:53.165944+00:00", "exit_code": 0, "operation": "node_preparation_1", "outcome": "observed_success", "proposal_sha256": "704a9c932202fc14456652ea4dfdb3acb8b1db0ab3bbf5fff50e92b2c517c380", "raw_output_discarded": true} +{"approval_decision": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", "at": "2026-10-15T00:15:53.168489+00:00", "operation": "node_preparation_2", "outcome": "intent", "proposal_sha256": "704a9c932202fc14456652ea4dfdb3acb8b1db0ab3bbf5fff50e92b2c517c380", "raw_output_discarded": true} +{"approval_decision": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", "at": "2026-10-15T00:15:53.847483+00:00", "exit_code": 0, "operation": "node_preparation_2", "outcome": "observed_success", "proposal_sha256": "704a9c932202fc14456652ea4dfdb3acb8b1db0ab3bbf5fff50e92b2c517c380", "raw_output_discarded": true} +{"approval_decision": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", "at": "2026-10-15T00:15:53.850437+00:00", "operation": "verify_remote_archive", "outcome": "intent", "proposal_sha256": "704a9c932202fc14456652ea4dfdb3acb8b1db0ab3bbf5fff50e92b2c517c380", "raw_output_discarded": true} +{"approval_decision": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", "at": "2026-10-15T00:15:54.409245+00:00", "exit_code": 0, "operation": "verify_remote_archive", "outcome": "observed_success", "proposal_sha256": "704a9c932202fc14456652ea4dfdb3acb8b1db0ab3bbf5fff50e92b2c517c380", "raw_output_discarded": true} +{"approval_decision": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", "at": "2026-10-15T00:15:54.411742+00:00", "operation": "node_preparation_3", "outcome": "intent", "proposal_sha256": "704a9c932202fc14456652ea4dfdb3acb8b1db0ab3bbf5fff50e92b2c517c380", "raw_output_discarded": true} +{"approval_decision": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", "at": "2026-10-15T00:15:55.022552+00:00", "exit_code": 0, "operation": "node_preparation_3", "outcome": "observed_success", "proposal_sha256": "704a9c932202fc14456652ea4dfdb3acb8b1db0ab3bbf5fff50e92b2c517c380", "raw_output_discarded": true} +{"approval_decision": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", "at": "2026-10-15T00:15:55.025293+00:00", "operation": "helm_phase_a_upgrade", "outcome": "intent", "proposal_sha256": "704a9c932202fc14456652ea4dfdb3acb8b1db0ab3bbf5fff50e92b2c517c380", "raw_output_discarded": true} +{"approval_decision": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", "at": "2026-10-15T00:16:12.690614+00:00", "exit_code": 0, "operation": "helm_phase_a_upgrade", "outcome": "observed_success", "proposal_sha256": "704a9c932202fc14456652ea4dfdb3acb8b1db0ab3bbf5fff50e92b2c517c380", "raw_output_discarded": true} +{"approval_decision": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", "at": "2026-10-15T00:16:12.693060+00:00", "operation": "phase_a", "outcome": "helm_observed_success_runtime_verification_pending", "proposal_sha256": "704a9c932202fc14456652ea4dfdb3acb8b1db0ab3bbf5fff50e92b2c517c380", "raw_output_discarded": true} diff --git a/docs/assessments/netkingdom-2026-10-14/phase-a-authorized-preflight-r1.json b/docs/assessments/netkingdom-2026-10-14/phase-a-authorized-preflight-r1.json new file mode 100644 index 00000000..192ca263 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/phase-a-authorized-preflight-r1.json @@ -0,0 +1,18 @@ +{ + "id": "CUST81-PHASE-A-AUTHORIZED-PREFLIGHT-R1", + "checked_at": "2026-10-15T00:09:05.529738+00:00", + "approval_decision": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", + "live_mutation": false, + "status": "verified", + "raw_output_discarded": true, + "stage": "complete", + "target_node_ip": "92.205.62.239", + "allocated_cpu_m": 3560, + "allocated_memory_mi": 9728, + "current_api_pod": "reuse-surface-54fb694b9-tv59j", + "authenticated_registrations": 0, + "reader_available": false, + "helm_revision": 10, + "server_dryrun": "passed", + "source_archive_sha256": "15ea3812ed036960c5dc4c31596016da905567569f34225b50c4765e9683a227" +} diff --git a/docs/assessments/netkingdom-2026-10-14/phase-a-fresh-client-diff-r2.json b/docs/assessments/netkingdom-2026-10-14/phase-a-fresh-client-diff-r2.json new file mode 100644 index 00000000..001de5b3 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/phase-a-fresh-client-diff-r2.json @@ -0,0 +1,11 @@ +{ + "checked_at": "2026-10-15T00:12:55.687986+00:00", + "exit_code": 1, + "raw_output_discarded": true, + "diff_objects": [ + "apps.v1.Deployment.default.reuse-surface" + ], + "changed_lines": [], + "status": "stopped_diff_review", + "failure_type": "AssertionError" +} diff --git a/docs/assessments/netkingdom-2026-10-14/phase-a-fresh-client-diff-r3.json b/docs/assessments/netkingdom-2026-10-14/phase-a-fresh-client-diff-r3.json new file mode 100644 index 00000000..851a5ee9 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/phase-a-fresh-client-diff-r3.json @@ -0,0 +1,39 @@ +{ + "checked_at": "2026-10-15T00:14:58.574107+00:00", + "namespace": "reuse", + "kubeconfig": "/home/worsch/.kube/config-railiance01", + "server_dryrun": "passed", + "exit_code": 1, + "raw_output_discarded": true, + "diff_objects": [ + "apps.v1.Deployment.reuse.reuse-surface" + ], + "changed_lines": [ + { + "sign": "-", + "kind": "expected_generation_increment" + }, + { + "sign": "+", + "kind": "expected_generation_increment" + }, + { + "sign": "+", + "kind": "exact_allowlist_name" + }, + { + "sign": "+", + "kind": "exact_14_url_allowlist" + }, + { + "sign": "-", + "kind": "exact_image" + }, + { + "sign": "+", + "kind": "exact_image" + } + ], + "prior_failure": "phase-a-fresh-client-diff-r2.json defaultnamespace rejected beforeapply; originalownerpreflight correctlyusedreuse", + "status": "verified_only_exact_image_allowlist_and_generation" +} diff --git a/docs/assessments/netkingdom-2026-10-14/phase-a-fresh-diff-diagnostic-r1.json b/docs/assessments/netkingdom-2026-10-14/phase-a-fresh-diff-diagnostic-r1.json new file mode 100644 index 00000000..de5a52c7 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/phase-a-fresh-diff-diagnostic-r1.json @@ -0,0 +1,14 @@ +{ + "exit_code": 1, + "receipt_present": false, + "error_categories": { + "not found": false, + "Permission denied": false, + "SyntaxError": false, + "Traceback": false, + "ValueError": false, + "not enough values": false, + "too many values": false + }, + "raw_output_discarded": true +} diff --git a/docs/assessments/netkingdom-2026-10-14/phase-a-runtime-verification-r1.json b/docs/assessments/netkingdom-2026-10-14/phase-a-runtime-verification-r1.json new file mode 100644 index 00000000..b0fe6750 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/phase-a-runtime-verification-r1.json @@ -0,0 +1,43 @@ +{ + "id": "CUST81-PHASE-A-RUNTIME-VERIFICATION-R1", + "checked_at": "2026-10-15T00:17:31.282702+00:00", + "approval_decision": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", + "status": "verified", + "raw_output_discarded": true, + "reader_delivered": false, + "stage": "complete", + "pod": "reuse-surface-7d9bcb97b7-drgkn", + "pod_uid": "cdd856a2-d833-466a-97c6-14a6e7f3b639", + "deployment_image": "forgejo.coulomb.social/coulomb/reuse-surface@sha256:2364b7e7859daccf9340a063654e2b09eed1bc27e0adf7b23cbb4b30135a7db0", + "runtime_image_id": "forgejo.coulomb.social/coulomb/reuse-surface@sha256:2364b7e7859daccf9340a063654e2b09eed1bc27e0adf7b23cbb4b30135a7db0", + "ready": true, + "actual_native_proof": { + "native_source_sha256": "dbaa40f25cc0f090143578cd1c7068cb2cb00960fafd17d5239bf8a5bac514dd", + "native_helper_sha256": "c67a284091cc4dd62dca56658a14b8ea1357e2b3df1518120da4c51e0ee8d85c", + "exact_reader_allowlist_verified": true, + "reader_present": false, + "routing_refusals_before_credential_lookup": [ + true, + true, + true + ], + "same_and_cross_origin_redirect_refusals": [ + true, + true + ], + "authenticated_registration_count": 0 + }, + "public_reviewed_capabilities": 63, + "missing_private_capabilities": [ + "capability.railiance.openbao-package", + "capability.railiance.policy-publication-package", + "capability.railiance.postgres-isolation-recovery", + "capability.railiance.sbom-runtime-package", + "capability.railiance.telemetry-package", + "capability.railiance.tenant-engine-package", + "capability.railiance.user-engine-package" + ], + "duplicates": [], + "composed_at": "2026-10-15T00:17:38+00:00", + "health": "ok" +} diff --git a/docs/assessments/netkingdom-2026-10-14/phase-a-source-archive-r1.json b/docs/assessments/netkingdom-2026-10-14/phase-a-source-archive-r1.json new file mode 100644 index 00000000..d46a3018 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/phase-a-source-archive-r1.json @@ -0,0 +1,10 @@ +{ + "id": "CUST81-PHASE-A-SOURCE-ARCHIVE-R1", + "path": "/tmp/cust81-apps-05f654e.tar.gz", + "source_commit": "05f654e20f7ea68471e586d7892e25441c65875d", + "sha256": "15ea3812ed036960c5dc4c31596016da905567569f34225b50c4765e9683a227", + "bytes": 6822, + "entries": 24, + "unsafe_paths_or_links": false, + "live_transfer_executed": false +} diff --git a/docs/assessments/netkingdom-2026-10-14/post-custody-approved-artifact-verification-r1.json b/docs/assessments/netkingdom-2026-10-14/post-custody-approved-artifact-verification-r1.json new file mode 100644 index 00000000..f45d96d5 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/post-custody-approved-artifact-verification-r1.json @@ -0,0 +1,241 @@ +{ + "checked_at": "2026-10-15T03:07:25.665661+00:00", + "proposal_sha256": "704a9c932202fc14456652ea4dfdb3acb8b1db0ab3bbf5fff50e92b2c517c380", + "all_within_approved_artifacts_and_transition": true, + "artifacts": [ + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/private-source-disclosure-proposal-r1.json", + "sha256": "46ac4fe49a08054cc215aade2fbaf3b36ee334520997857ed84f530b52da9d35", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/private-source-owner-consent-r1.json", + "sha256": "4a4602ad926e3af855d6ddba4731430d33e4a7432c507ba0a5193b9f43056b52", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/private-reader-provisioning-preparation-r1.json", + "sha256": "7819eb51d249f5c7aff4df9fb520afcfb76603b05a4104439499102b6c20af99", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/hardened-reader-image-publication-r1.json", + "sha256": "f4ba7eff3d34dd732876b6dbba619f8c901ce9c2519b6d660101330f935a6c14", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/hub-private-registration-plan-r1.json", + "sha256": "ec0964addcc95a2f0509d70bb58c10006a3d00e1d2479d8678d3b7c6a15602b7", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/register_private_hub_r1.py", + "sha256": "de431eb2942d469eaad0e7e167ebfb98a717c6fa2a92b7cd987333d764792113", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/register_public_hub.py", + "sha256": "c6a5f08e01af3a5c4b1d6557859f4400eaba0d7eb0bb1976f45bba6bc5a05fda", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/attended_private_registration.py", + "sha256": "56806b127b6a926361ef82c2b53732ef71fb385bcc0b918ae4e4d815015e6966", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/private-registration-execution-contract-r1.md", + "sha256": "0e2b98f7de6f2079eebb8772d9e564b1506ad5703bf981b7ea3196aed8a4cd62", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/private-registration-preparation-owner-review-r2.json", + "sha256": "67f158e49eca4e6d62797c1b35dc6115251b7b6e459498783d35748873f8075a", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/attended-private-registration-owner-review-r1.json", + "sha256": "0d52bf1c4dd0d82cdfeb017b2722482a941a872fe2d7cb7eb5cfb5ec9081afc2", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/warden-browser-opener-r1/cmd.exe", + "sha256": "4b91a4dc635e464143bfe1f484eccb2456ccd992326ac7a126b53d0a9a3c7f96", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/warden-browser-opener-r1/xdg-open", + "sha256": "4b91a4dc635e464143bfe1f484eccb2456ccd992326ac7a126b53d0a9a3c7f96", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/warden-browser-opener-r1/validation.json", + "sha256": "9cbd8be4d9acfc19241e70bcda5df93eb2eacc83cb00771a5543022acc4ed474", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/phase-a-source-archive-r1.json", + "sha256": "11798ba996513ef6c6ce86f0e6542c327dc0ea51fd00ea3846a320f686b8148d", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/reuse-database-recovery-preflight-r2.json", + "sha256": "c27c99cae46e7f1f0fb26fca91fdaec860d241966177432b3d55d391d10de84e", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/owner-assembly/apps-phase-a-current/exact-execution-proposal-r1.json", + "sha256": "c1dba0a6f77f4c6e76334e62ab0d23652c93dbf37234c0596e779313d7397ab2", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/owner-assembly/apps-phase-a-current/server-preflight-r1.json", + "sha256": "3ebaaab10c6e2e8469059ee5f05103cdd096c7f73167ad8251db04e9af754d93", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/owner-assembly/apps-phase-a-current/semantic-diff-r1.json", + "sha256": "9f453a3b106b2f78ba64040aa6ab42f1ad0d4de3924bec080ee6d6459ed6554d", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/owner-assembly/apps-phase-a-current/helm-recovery-revision-r1.json", + "sha256": "e71e335f0867688adb8ecdb60cb149809af7dba3992655790ab6ec2bed52896b", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-platform/credential-change-requests/CCR-2026-0046-reuse-surface-forgejo-source-read.yaml", + "sha256": "23039fae6137e7bdd71de0ed3278596b1ed60ae636018eb4bfcc83e53c4ada02", + "unchanged": false, + "approved_conditional_transition": true + }, + { + "path": "/home/worsch/railiance-platform/scripts/apply-reuse-surface-reader-custody.py", + "sha256": "934b421c357e154f6508ab4b7c30f1aadfea2bf9a2f187d83968928d5eecad42", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-platform/scripts/provision-reuse-surface-forgejo-source.py", + "sha256": "abf60a754596baa1610d23b1fd367385b0222ac8aeaebba0f2cfb7ec4c62055b", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-platform/scripts/revoke-reuse-surface-forgejo-source.py", + "sha256": "f78d1b26fbff93c6cc481a896d9fb9b9ce93049b8b3267fa41a64bc57dadb162", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-platform/openbao/policies/workload-kv-read-reuse-surface-runtime-eso.hcl", + "sha256": "6320f6c2d262d924ea16291d301d5f9eeb7efdb6ce7ea141c1a41d277d86b01b", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-platform/docs/proposals/2026-10-15-reuse-private-reader/bootstrap-contract.json", + "sha256": "2bb72671e0a5f230497ab8ef2967a20ee68d1f2cf081f07c84f6db3442e18d8b", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-platform/docs/proposals/2026-10-15-reuse-private-reader/conditional-approved-ccr-state-candidate-r1.json", + "sha256": "178dd2aeddf3544438d584fa16e3ceb1a541a357d4dff5b8b4b0e95db2f357ac", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-platform/docs/proposals/2026-10-15-reuse-private-reader/attended-custody-handoff-r1.json", + "sha256": "1247ad5aa73289a26a48e999b870ce2d60abb409132783e14456ea318689acff", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-platform/docs/proposals/2026-10-15-reuse-private-reader/platform-attended-runner-review-r1.json", + "sha256": "2406b70ed5a0fe755fe967d3568fabffc84396bb5509c55417aa6900dbb9a4d9", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-apps/docs/assessments/cust81-private-reader/phase-b-r1/phase-b-execution-proposal-r1.json", + "sha256": "13f19158e09b0693a64ff400ecbc3e5ec09d28673731e87733d1e2fad9bd3222", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-apps/docs/assessments/cust81-private-reader/phase-b-r1/apps-owner-phase-b-review.md", + "sha256": "496c842f4a284d6b2904c027dfd1e8aab85567f19fa74a228f27c4cc578ce026", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-apps/docs/assessments/cust81-private-reader/phase-b-r1/manifest.json", + "sha256": "52ec35f1e150c1e2aca21bc138b523bf74423dd391e62daca8182d1b8924ed34", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-apps/docs/assessments/cust81-private-reader/phase-b-r1/native_runtime_proof_stdin.py", + "sha256": "1edc317e8563a120b62a6830eebb2875c144b45c57a491eb7da849095c5d1933", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-apps/docs/assessments/cust81-private-reader/phase-b-r1/eso-preflight-r1.json", + "sha256": "e39f07427af80fd036e6eec21202efe194fff2db67b8523bb07052e1388d8fab", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-apps/docs/assessments/cust81-private-reader/phase-b-r1/native-proof-wrapper-local-checks-r1.json", + "sha256": "c5fcee128f7b4653ecfc0c455aab57a7efa8f6a9de382af69d447d8065091bab", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-apps/docs/assessments/cust81-private-reader/reuse-surface-runtime-externalsecret.r1.yaml", + "sha256": "adfb34c0ee4d01bc602f57cd2320f1658465fb8f8660978828fffa05a5b604b5", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/railiance-forge/docs/proposals/cust81-private-reader/forge-owner-attended-runner-review-r3.json", + "sha256": "e4a17ee59fb1691f7b99a09d2473178740721aad0c1394cae79b503118c97040", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/reuse-surface/docs/assessments/cust81-private-reader/candidate-owner-review-r1.json", + "sha256": "853cb3b721d83ba5aeb0847111cc47f8094b733f870059cca9834b2c1a5a6219", + "unchanged": true, + "approved_conditional_transition": false + }, + { + "path": "/home/worsch/reuse-surface/docs/assessments/cust81-private-reader/ccr0046-consumer-owner-review-r2.json", + "sha256": "f476605eb55fb329ef3cea8c091ff5f43eae79c18df0912c8cd76a8f7af568a6", + "unchanged": true, + "approved_conditional_transition": false + } + ] +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-reader-current-artifact-inventory-r1.json b/docs/assessments/netkingdom-2026-10-14/private-reader-current-artifact-inventory-r1.json new file mode 100644 index 00000000..23b6070e --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-reader-current-artifact-inventory-r1.json @@ -0,0 +1,84 @@ +{ + "id": "CUST81-PRIVATE-READER-ARTIFACT-INVENTORY-R1", + "checked_at": "2026-10-14T23:45:56.662965+00:00", + "artifacts": [ + { + "repo": "reuse-surface", + "path": "reuse_surface/federation.py", + "sha256": "dbaa40f25cc0f090143578cd1c7068cb2cb00960fafd17d5239bf8a5bac514dd" + }, + { + "repo": "reuse-surface", + "path": "reuse_surface/private_source_verify.py", + "sha256": "c67a284091cc4dd62dca56658a14b8ea1357e2b3df1518120da4c51e0ee8d85c" + }, + { + "repo": "reuse-surface", + "path": "docs/assessments/cust81-private-reader/runtime-auth-source-allowlist-r1.json", + "sha256": "e1948c537e206b30fc72b9e4732a3f600d92e131813e6f7ecfd4bfbb18c27286" + }, + { + "repo": "reuse-surface", + "path": "docs/assessments/cust81-private-reader/candidate-owner-review-r1.json", + "sha256": "853cb3b721d83ba5aeb0847111cc47f8094b733f870059cca9834b2c1a5a6219" + }, + { + "repo": "reuse-surface", + "path": "docs/assessments/cust81-private-reader/ccr0046-consumer-owner-review-r2.json", + "sha256": "f476605eb55fb329ef3cea8c091ff5f43eae79c18df0912c8cd76a8f7af568a6" + }, + { + "repo": "railiance-platform", + "path": "credential-change-requests/CCR-2026-0046-reuse-surface-forgejo-source-read.yaml", + "sha256": "90522912fb78fed72e625382fb7114a0e9aafe76d59e36bffecab83c5bb7d643" + }, + { + "repo": "railiance-platform", + "path": "scripts/provision-reuse-surface-forgejo-source.py", + "sha256": "abf60a754596baa1610d23b1fd367385b0222ac8aeaebba0f2cfb7ec4c62055b" + }, + { + "repo": "railiance-platform", + "path": "scripts/revoke-reuse-surface-forgejo-source.py", + "sha256": "f78d1b26fbff93c6cc481a896d9fb9b9ce93049b8b3267fa41a64bc57dadb162" + }, + { + "repo": "railiance-platform", + "path": "openbao/policies/workload-kv-read-reuse-surface-runtime-eso.hcl", + "sha256": "6320f6c2d262d924ea16291d301d5f9eeb7efdb6ce7ea141c1a41d277d86b01b" + }, + { + "repo": "railiance-platform", + "path": "docs/proposals/2026-10-15-reuse-private-reader/bootstrap-contract.json", + "sha256": "2bb72671e0a5f230497ab8ef2967a20ee68d1f2cf081f07c84f6db3442e18d8b" + }, + { + "repo": "railiance-platform", + "path": "docs/proposals/2026-10-15-reuse-private-reader/platform-owner-review-r2.json", + "sha256": "a25c765bfddc114f3a70947142ad702515635ee36d5f24e2f6e2505661e49fe7" + }, + { + "repo": "railiance-forge", + "path": "docs/proposals/cust81-private-reader/forge-owner-review-r2.json", + "sha256": "30d9233f9e0514f5f2b1ff4ca9c4fc0a7c1aa56679d3fcc9b452bc1f4ad007a1" + }, + { + "repo": "railiance-apps", + "path": "docs/assessments/cust81-private-reader/phase-a-local-image-r1/phase-a-values.proposed.yaml", + "sha256": "35284857ec987fc7a929f5c2eecdb44c7d3367f7835904692947de09918ab8f1" + }, + { + "repo": "railiance-apps", + "path": "docs/assessments/cust81-private-reader/phase-a-local-image-r1/phase-a-full-chart.proposed.yaml", + "sha256": "36c20c3e16757d3e888a3db02853032b33e791aa04a6055fe001121254345b81" + }, + { + "repo": "railiance-apps", + "path": "docs/assessments/cust81-private-reader/owner-review-receipt-r2.json", + "sha256": "4f8db5c84e16c33ca3f228604f2ae6225fa2a5ffcd2dbcbd03201eb1302d7c8e" + } + ], + "live_authority": false, + "metadata_consent": "private-source-owner-consent-r1.json", + "scope": "Exact preparation artifact bytes; owner reviews approve preparation only; not an execution approval." +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-reader-execution-amendment-decision-r2.json b/docs/assessments/netkingdom-2026-10-14/private-reader-execution-amendment-decision-r2.json new file mode 100644 index 00000000..702d559c --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-reader-execution-amendment-decision-r2.json @@ -0,0 +1,11 @@ +{ + "proposal_id": "CUST81-PRIVATE-READER-EXECUTION-R1", + "proposal_revision": 2, + "proposal_sha256": "c8fa74ad6648af1c884a4c607e100097f917761af5d3a6e0c5e8ce9a53b809dc", + "decision": "approved", + "decided_by": "Bernd Worsch", + "decided_at": "2026-10-15T03:23:56.611534+00:00", + "decision_ref": "9f496e68-655e-4e08-aa57-c822cf731124", + "user_statement": "Approve this exact revision 2", + "corrected_helper_sha256": "1ec34b8cded859845dc29cedf55ff02fa4881bd4d6a3a264879efd5b3e706c88" +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-reader-execution-preparation-validation-r1.json b/docs/assessments/netkingdom-2026-10-14/private-reader-execution-preparation-validation-r1.json new file mode 100644 index 00000000..99241a2d --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-reader-execution-preparation-validation-r1.json @@ -0,0 +1,30 @@ +{ + "id": "CUST81-PRIVATE-READER-EXECUTION-PREPARATION-VALIDATION-R1", + "checked_at": "2026-10-15T00:06:15.159687+00:00", + "proposal_id": "CUST81-PRIVATE-READER-EXECUTION-R1", + "proposal_revision": 1, + "proposal_sha256": "704a9c932202fc14456652ea4dfdb3acb8b1db0ab3bbf5fff50e92b2c517c380", + "exact_prepared_artifacts_verified": 39, + "root_independent_private_helper_and_transport_tests": { + "passed": 25, + "command": "python3 -m unittest discover -s docs/assessments/netkingdom-2026-10-14 -p 'test_*private*.py' -q", + "live_requests": false + }, + "independent_Forge_platform_tests": { + "passed": 45, + "runner_boundary_cases": 17, + "receipt": "owner-assembly/forge-owner-attended-runner-review-r3.json" + }, + "approval_request": "Presented to founder; no approval response received or inferred", + "live_changes_executed": false, + "reader_provisioned": false, + "hosted_verified_previous": 63, + "hosted_required": 70, + "root_consistency_session": 19705, + "root_consistency_status": "terminal_pass_with_warnings", + "progress_id": "d5ad6b9b-7c1b-4a26-aa33-cbd1f5ea71c2", + "root_consistency_errors": 0, + "root_consistency_assessment_failures": 0, + "root_consistency_warning_count": 8, + "root_consistency_generated_commit_guard": "rejected; no bypass" +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-reader-owner-assembly-receipt.json b/docs/assessments/netkingdom-2026-10-14/private-reader-owner-assembly-receipt.json new file mode 100644 index 00000000..08401202 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-reader-owner-assembly-receipt.json @@ -0,0 +1,40 @@ +{ + "recorded_at": "2026-10-14T22:40:25.363703+00:00", + "previous_turn_classification": "progress: concrete reader preparation and exact seven-registration plan delivered", + "current_turn_classification": "progress: independent owner preparation workers actually started in isolated checkouts; native authenticated redirect defect identified", + "workers": [ + { + "agent": "/root/platform_reader_owner", + "repo": "railiance-platform", + "checkout": "/tmp/cust81-platform-reader-owner", + "base_commit": "748fe6c7dbe4e0a22bed6feaba957f7c64dc3114", + "authority": "supervised local preparation only; live credentials and deployment not approved", + "owner_review": "only own repo role; existing AGENTS and INTENT loaded by assigned worker" + }, + { + "agent": "/root/mason_reader_owner", + "repo": "ops-mason", + "checkout": "/tmp/cust81-mason-reader-owner", + "base_commit": "92907919cdef6f644607e431eb61e0bdb10f1214", + "authority": "supervised local preparation only; live credentials and deployment not approved", + "owner_review": "only own repo role; existing AGENTS and INTENT loaded by assigned worker" + }, + { + "agent": "/root/reuse_reader_owner", + "repo": "reuse-surface", + "checkout": "/tmp/cust81-reuse-reader-owner", + "base_commit": "03cd049773478e9de7e38035a49deaa82772a357", + "authority": "supervised local preparation only; live credentials and deployment not approved", + "owner_review": "only own repo role; existing AGENTS and INTENT loaded by assigned worker" + } + ], + "tamq_observed": { + "service": false, + "endpoints": [], + "leases": 0 + }, + "owner_ccr_allocations": "provisional; check collisions before integration", + "native_authentication_gate": "Authenticated native fetch follows redirects with Authorization; reuse-owner patch/testing required and verified fixed-image delivery BEFORE new reader credential delivery", + "live_mutation": false, + "credential_access": false +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-reader-owner-assembly-validation.json b/docs/assessments/netkingdom-2026-10-14/private-reader-owner-assembly-validation.json new file mode 100644 index 00000000..588b12f7 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-reader-owner-assembly-validation.json @@ -0,0 +1,48 @@ +{ + "recorded_at": "2026-10-14T22:48:51.723055+00:00", + "status": "local owner preparations validated; not credential or rollout approved", + "classification": "progress", + "platform": { + "patch": "owner-assembly/platform-r1/owner.patch", + "patch_sha256": "a94547b419b87e38dc178b02d1d31af61cc11a71e3734052a190167668db8e30", + "targeted_tests": 17, + "root_repeat": "passed", + "provisional_ccr": "CCR-2026-0046", + "provisional_workplan": "RPF-WP-0058", + "independent_forge_review": "Confirmed R1 pagination flaw: len; original unpublished commits retained; normal scanner and rmgr accepted revised source; semanticdiff review pending.", + "receipt": "owner-assembly/apps-phase-a-current/source-publication-r3.json", + "sha256": "f1107a0265aa405d30943aac8b0f2ae5fe6cd6cce4cea56f5cd85abb6dedd239" + }, + { + "repo": "ops-mason", + "status": "local_source_commit_projection_refused", + "source_commit": "b67b57a0228b2ea2ae012d39320c8d81dac4daa1", + "reason": "Historical ADHOC-2026-10-11-T03 UUID identity decision required; no writes/push or legacy bypass" + } + ], + "image_publication": "hardened-reader-image-publication-r1.json", + "metadata_consent": "private-source-owner-consent-r1.json", + "live_rollout_executed": false, + "reader_provisioned": false, + "hosted_reviewed_capabilities": 63, + "required_capabilities": 70, + "mason_publication_disposition": "Draft retained locally; unrelated historical identity repair cannot be safely limited to client because receiving projection would allocate an identity. It is not a prerequisite for published platform/consumer/apps/Forge execution handoff.", + "progress_id": "a4863a58-2884-42fa-97b3-7d75d08656ea", + "root_consistency": { + "status": "pass_with_warnings", + "automation_errors": 0, + "assessment_failures": 0, + "warnings": 7, + "generated_memory_commit_guard": "rejected; no bypass", + "task_description_synced": true + }, + "database_recovery_preflight": "reuse-database-recovery-preflight-r2.json", + "phase_a_readiness": { + "server_dryrun": "passed_all_10_objects", + "semantic_diff": "image_and_exact_14_URL_allowlist_only_plus_generation_increment", + "helm_recovery_revision": 10, + "execution_proposal": "owner-assembly/apps-phase-a-current/exact-execution-proposal-r1.json", + "executed": false + }, + "attended_runner_review": { + "revision": 2, + "status": "changes_requested", + "receipt": "owner-assembly/forge-owner-attended-runner-review-r2.json", + "confirmed_gaps": [ + "mutable policy filepath after approval check", + "idempotent path missing subsequent policy verification" + ], + "refinement_worker": "/root/platform_reader_owner", + "executed": false + } +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-reader-source-integration-r1.json b/docs/assessments/netkingdom-2026-10-14/private-reader-source-integration-r1.json new file mode 100644 index 00000000..e1f5614d --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-reader-source-integration-r1.json @@ -0,0 +1,139 @@ +{ + "checked_at": "2026-10-14T23:22:45.113941+00:00", + "status": "reviewed_preparation_integrated_into_source_worktrees", + "verification": { + "railiance-platform": [ + { + "path": "credential-change-requests/CCR-2026-0046-reuse-surface-forgejo-source-read.yaml", + "matches_reviewed": true + }, + { + "path": "openbao/policies/workload-kv-read-reuse-surface-runtime-eso.hcl", + "matches_reviewed": true + }, + { + "path": "scripts/provision-reuse-surface-forgejo-source.py", + "matches_reviewed": true + }, + { + "path": "scripts/revoke-reuse-surface-forgejo-source.py", + "matches_reviewed": true + }, + { + "path": "tests/test_reuse_surface_forgejo_source_provision.py", + "matches_reviewed": true + }, + { + "path": "tests/test_reuse_surface_forgejo_source_recovery.py", + "matches_reviewed": true + }, + { + "path": "workplans/RPF-WP-0058-reuse-private-source-reader.md", + "matches_reviewed": true + }, + { + "path": "docs/proposals/2026-10-15-reuse-private-reader/bootstrap-contract.json", + "matches_reviewed": true + }, + { + "path": "docs/proposals/2026-10-15-reuse-private-reader/apps-externalsecret-data-item.draft.yaml", + "matches_reviewed": true + }, + { + "path": "docs/proposals/2026-10-15-reuse-private-reader/README.md", + "matches_reviewed": true + }, + { + "path": "docs/proposals/2026-10-15-reuse-private-reader/platform-owner-review-r1.json", + "matches_reviewed": true + }, + { + "path": "docs/proposals/2026-10-15-reuse-private-reader/platform-owner-review-r2.json", + "matches_reviewed": true + } + ], + "railiance-apps": [ + { + "path": "charts/reuse-surface/templates/_helpers.tpl", + "matches_reviewed": true + }, + { + "path": "charts/reuse-surface/templates/deployment.yaml", + "matches_reviewed": true + }, + { + "path": "charts/reuse-surface/values.schema.json", + "matches_reviewed": true + }, + { + "path": "charts/reuse-surface/values.yaml", + "matches_reviewed": true + }, + { + "path": "docs/assessments/cust81-private-reader/apps-owner-review-r2.md", + "matches_reviewed": true + }, + { + "path": "docs/assessments/cust81-private-reader/local-verification-r2.json", + "matches_reviewed": true + }, + { + "path": "docs/assessments/cust81-private-reader/private-reader-values.r1.yaml", + "matches_reviewed": true + }, + { + "path": "docs/assessments/cust81-private-reader/reuse-surface-runtime-externalsecret.r1.yaml", + "matches_reviewed": true + }, + { + "path": "docs/assessments/cust81-private-reader/runtime-auth-source-allowlist-r1.json", + "matches_reviewed": true + }, + { + "path": "docs/assessments/cust81-private-reader/supervision-preparation-r1.json", + "matches_reviewed": true + }, + { + "path": "docs/assessments/cust81-private-reader/verify_preparation.py", + "matches_reviewed": true + }, + { + "path": "scripts/reuse_authenticated_source_inventory.py", + "matches_reviewed": true + }, + { + "path": "workplans/RAPPS-WP-0017-reuse-private-reader-release.md", + "matches_reviewed": true + } + ], + "reuse-surface": [ + { + "path": "reuse_surface/federation.py", + "matches_reviewed": true + }, + { + "path": "reuse_surface/private_source_verify.py", + "matches_reviewed": true + } + ] + }, + "live_changes": false, + "credentials_provisioned": false, + "source_commits_published": false, + "founder_credential_or_rollout_approval": false, + "existing_disclosure_consent": "private-source-owner-consent-r1.json", + "local_image": "hardened-reader-local-image-r1.json", + "auth_source_inventory": "live-authenticated-source-inventory-r1.json", + "runtime_metadata": [ + "reuse-release-runtime-metadata-r1.json", + "reuse-release-owner-eso-metadata-r1.json", + "live-native-federation-source-r1.json" + ], + "pending": [ + "Owner source commit/projection receipts", + "Registry publication of exact localimage with verified digest", + "Exact founder credential/rollout disposition", + "Scoped OpenBao installed-claims preflight before proposed admission", + "Native private fetch/registration/all70 hosted proof" + ] +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-execution-approval-r1.json b/docs/assessments/netkingdom-2026-10-14/private-registration-execution-approval-r1.json new file mode 100644 index 00000000..cbf8b292 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-execution-approval-r1.json @@ -0,0 +1,21 @@ +{ + "id": "CUST81-PRIVATE-REGISTRATION-EXECUTION-R1", + "decision": "approved", + "decided_by": "Bernd Worsch", + "decision_ref": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", + "action": "register_exact_seven_private_sources", + "writer_route": "reuse-surface-hub-write-token", + "approved_artifacts": { + "register_private_hub_r1.py": "de431eb2942d469eaad0e7e167ebfb98a717c6fa2a92b7cd987333d764792113", + "hub-private-registration-plan-r1.json": "ec0964addcc95a2f0509d70bb58c10006a3d00e1d2479d8678d3b7c6a15602b7", + "register_public_hub.py": "c6a5f08e01af3a5c4b1d6557859f4400eaba0d7eb0bb1976f45bba6bc5a05fda", + "private-source-disclosure-proposal-r1.json": "46ac4fe49a08054cc215aade2fbaf3b36ee334520997857ed84f530b52da9d35", + "private-source-owner-consent-r1.json": "4a4602ad926e3af855d6ddba4731430d33e4a7432c507ba0a5193b9f43056b52", + "hardened-reader-image-publication-r1.json": "f4ba7eff3d34dd732876b6dbba619f8c901ce9c2519b6d660101330f935a6c14", + "phase-b-runtime-verification-r1.json": "538d6054bc2390d204e18d5592e691d4b16ebe078a4f437b07f363c327efdb12", + "private-native-fetch-verification-r1.json": "25019751ec111ffd35a43839911676c20d85396df57aa1a9e0d8cf2076f199af" + }, + "derived_at": "2026-10-15T03:13:56.961583+00:00", + "authority_proposal_sha256": "704a9c932202fc14456652ea4dfdb3acb8b1db0ab3bbf5fff50e92b2c517c380", + "derivation": "Existing exact founder decision explicitly authorizes six prepared artifact hashes and two fresh actual successful same-pod proof hashes." +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-execution-approval-r2-retry1.json b/docs/assessments/netkingdom-2026-10-14/private-registration-execution-approval-r2-retry1.json new file mode 100644 index 00000000..902efa0c --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-execution-approval-r2-retry1.json @@ -0,0 +1,24 @@ +{ + "id": "CUST81-PRIVATE-REGISTRATION-EXECUTION-R1", + "decision": "approved", + "decided_by": "Bernd Worsch", + "decision_ref": "9f496e68-655e-4e08-aa57-c822cf731124", + "action": "register_exact_seven_private_sources", + "writer_route": "reuse-surface-hub-write-token", + "approved_artifacts": { + "register_private_hub_r1.py": "de431eb2942d469eaad0e7e167ebfb98a717c6fa2a92b7cd987333d764792113", + "hub-private-registration-plan-r1.json": "ec0964addcc95a2f0509d70bb58c10006a3d00e1d2479d8678d3b7c6a15602b7", + "register_public_hub.py": "c6a5f08e01af3a5c4b1d6557859f4400eaba0d7eb0bb1976f45bba6bc5a05fda", + "private-source-disclosure-proposal-r1.json": "46ac4fe49a08054cc215aade2fbaf3b36ee334520997857ed84f530b52da9d35", + "private-source-owner-consent-r1.json": "4a4602ad926e3af855d6ddba4731430d33e4a7432c507ba0a5193b9f43056b52", + "hardened-reader-image-publication-r1.json": "f4ba7eff3d34dd732876b6dbba619f8c901ce9c2519b6d660101330f935a6c14", + "phase-b-runtime-verification-r1.json": "e84fe21628d4debf7c43acc0bade9eb5524324fe5ef9b440e075303cbfa2f899", + "private-native-fetch-verification-r1.json": "2c014c59263ef619336163e39ea62b3076f7e84ad4ae8d2b5e4bcb5d3042f1f9" + }, + "derived_at": "2026-10-15T03:27:37.352800+00:00", + "authority_proposal_revision": 2, + "authority_proposal_sha256": "c8fa74ad6648af1c884a4c607e100097f917761af5d3a6e0c5e8ce9a53b809dc", + "original_decision_ref": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", + "attended_transport_sha256": "1ec34b8cded859845dc29cedf55ff02fa4881bd4d6a3a264879efd5b3e706c88", + "retry_reason": "Previousattempt refused groupclaims beforetoken/registration; founder ready with namedmemberaccount. Sameapprovedexecutable/scope." +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-execution-approval-r2.json b/docs/assessments/netkingdom-2026-10-14/private-registration-execution-approval-r2.json new file mode 100644 index 00000000..2909da82 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-execution-approval-r2.json @@ -0,0 +1,23 @@ +{ + "id": "CUST81-PRIVATE-REGISTRATION-EXECUTION-R1", + "decision": "approved", + "decided_by": "Bernd Worsch", + "decision_ref": "9f496e68-655e-4e08-aa57-c822cf731124", + "action": "register_exact_seven_private_sources", + "writer_route": "reuse-surface-hub-write-token", + "approved_artifacts": { + "register_private_hub_r1.py": "de431eb2942d469eaad0e7e167ebfb98a717c6fa2a92b7cd987333d764792113", + "hub-private-registration-plan-r1.json": "ec0964addcc95a2f0509d70bb58c10006a3d00e1d2479d8678d3b7c6a15602b7", + "register_public_hub.py": "c6a5f08e01af3a5c4b1d6557859f4400eaba0d7eb0bb1976f45bba6bc5a05fda", + "private-source-disclosure-proposal-r1.json": "46ac4fe49a08054cc215aade2fbaf3b36ee334520997857ed84f530b52da9d35", + "private-source-owner-consent-r1.json": "4a4602ad926e3af855d6ddba4731430d33e4a7432c507ba0a5193b9f43056b52", + "hardened-reader-image-publication-r1.json": "f4ba7eff3d34dd732876b6dbba619f8c901ce9c2519b6d660101330f935a6c14", + "phase-b-runtime-verification-r1.json": "53e2ad9296a2c4bc1b7f83b2865e0385856517535f2e6b54dd916a0856f4598a", + "private-native-fetch-verification-r1.json": "f5059a872b63e84dd3b4540e0a4de1323bfff91045de8ec367bfae2de707e729" + }, + "derived_at": "2026-10-15T03:24:34.439350+00:00", + "authority_proposal_revision": 2, + "authority_proposal_sha256": "c8fa74ad6648af1c884a4c607e100097f917761af5d3a6e0c5e8ce9a53b809dc", + "original_decision_ref": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", + "attended_transport_sha256": "1ec34b8cded859845dc29cedf55ff02fa4881bd4d6a3a264879efd5b3e706c88" +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-execution-contract-r1.md b/docs/assessments/netkingdom-2026-10-14/private-registration-execution-contract-r1.md new file mode 100644 index 00000000..261bd697 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-execution-contract-r1.md @@ -0,0 +1,143 @@ +# Exact seven-source private registration preparation (revision 2) + +Prepared only; no credential read, pod execution, registration, or founder +execution approval is performed by this preparation. + +`register_private_hub_r1.py` SHA256 +`de431eb2942d469eaad0e7e167ebfb98a717c6fa2a92b7cd987333d764792113` +uses `hub-private-registration-plan-r1.json` SHA256 +`ec0964addcc95a2f0509d70bb58c10006a3d00e1d2479d8678d3b7c6a15602b7`. +The plan contains exactly the seven consented private sources, immutable Forgejo +raw API URLs, `domain: infotech`, `enabled: true`, `required: false`, +`auth_env: REUSE_SURFACE_FORGEJO_SOURCE_READ_TOKEN` and +`auth_header: Authorization`. No extra fields, source, method or endpoint is allowed. + +## Exact external approval gate + +The root requesting agent must first obtain the founder's external exact execution +decision under the existing supervised approval process. This helper does not +authenticate the human actor or turn a self-authored JSON file into authority. +The external approved revision receipt must contain: + +- `id: CUST81-PRIVATE-REGISTRATION-EXECUTION-R1` +- `decision: approved`, `decided_by: Bernd Worsch`, and the actual nonempty + `decision_ref` to that external resolved decision. +- `action: register_exact_seven_private_sources` +- `writer_route: reuse-surface-hub-write-token` +- `approved_artifacts`: an exact basename-to-SHA256 object for this helper, the + private plan, unchanged `register_public_hub.py`, unchanged disclosure proposal, + unchanged owner consent, the exact published OCI image receipt, and the exact + supplied rollout/native proof files. + Duplicate basenames, missing/extra files and changed digests fail closed. + +Do not create or label this execution receipt approved until the external human +decision actually authorizes these exact artifacts and recording fields. Any +future conditional-proof recording must be covered by that decision. Approval +is separate from recorded metadata disclosure consent and the owner preparation +review below. + +## Runtime proof contracts + +Both proof timestamps must be timezone-aware and no older than 600 seconds, with +at most 30 seconds of future clock tolerance. Freshness is checked before network +observation, after complete preflight and before each POST. + +The owner-produced actual rollout proof must supply: + +```text +checked_at: +status: verified +image_digest: sha256:2364b7e7859daccf9340a063654e2b09eed1bc27e0adf7b23cbb4b30135a7db0 +native_source_sha256: dbaa40f25cc0f090143578cd1c7068cb2cb00960fafd17d5239bf8a5bac514dd +native_helper_sha256: c67a284091cc4dd62dca56658a14b8ea1357e2b3df1518120da4c51e0ee8d85c +namespace: reuse +container: reuse-surface +ready: true +exact_reader_allowlist_verified: true +deployment_image: forgejo.coulomb.social/coulomb/reuse-surface@sha256:2364b7e7859daccf9340a063654e2b09eed1bc27e0adf7b23cbb4b30135a7db0 +oci_parent_membership_verified: true +oci_publication_sha256: f4ba7eff3d34dd732876b6dbba619f8c901ce9c2519b6d660101330f935a6c14 +pod: +pod_uid: +kube_api_server: +``` + +The actual `private_source_verify` receipt must contain its native ID, exact +preparation/disclosure/consent SHA256, `all_verified: true`, `cache_used: false`, +and exactly seven unique rows matching every consented commit, index SHA256 and +entry SHA256. Local fake receipts and their `transport` labels are rejected. +The root's actual suppressed pod-execution wrapper must attach `hub_runtime` +with exactly `pod`, `pod_uid`, `image_digest`, `native_source_sha256` and +`native_helper_sha256` matching the rollout proof and constants above. This binds +the otherwise standard native receipt to the actual same hardened hub instance. +This wrapper records verified execution metadata; it must not invent provenance. + +## Full-field readback and resume + +Public GET responses omit `auth_env`. Before writes and after the batch, the +helper therefore checks the explicit kubeconfig server, obtains only the approved +pod UID/container readiness/image ID through a narrow JSONPath, and executes +read-only SQLite metadata projection inside that same ready hardened pod. It +selects only these seven planned repositories and these seven fields: +`repo,url,domain,enabled,required,auth_env,auth_header`. It never selects a full +registration payload, environment values, Secrets or annotations. Each projected +value is bounded at the SQL boundary; oversized values become NULL and fail +exact comparison. Raw stdout/stderr are captured and discarded after validation; +untrusted metadata is never copied into receipts. + +Revision2 also reads only the Deployment template container image and Pod +container image fields. Both specifications must use the exact approved repository +and OCI parent digest above. Runtime image ID may use that exact parent or its +verified Linux/amd64 child +`sha256:1a69354af2bc87d4baaecc4b02e13fda468efd3746024f440cc6d138beeee2ab` +under the same exact repository, optionally prefixed by `docker-pullable://`. +The published OCI parent manifest is hash-bound and independently checked for this +child's membership, platform and absence of attestation annotations. Arbitrary +repositories, tags, unlisted digests, bare runtime digests and attestation digest +`sha256:6bf7cd034a08da96734032b6d79f52cf5f51006480928ec2d790c9d7993024cb` +are refused. No arbitrary suffix match is used. + +The full preflight reconciles public membership against SQL membership and checks +all existing bodies before the first POST. Exact existing registrations are +skipped. Any conflict, mismatched pod, wrong cluster, unknown outcome or failed +postwrite verification halts without retry. The inherited public helper's +readback validator checks **all seven submitted fields**, including hidden +`auth_env`, against the fresh SQL projection. + +One process lock prevents concurrent batch execution. Mode0600, no-follow, +fsynced append-only receipts retain write intent and terminal outcomes. The HTTP +opener disables proxies and all redirects, targets only the fixed hub, bounds +response bodies at 2 MiB, and never prints raw errors or responses. Only the writer +`REUSE_SURFACE_TOKEN` is accessed for POST; the source-reader credential is never +looked up. Kubectl receives a minimal environment without the writer token. + +## Exact command after separate approval and verified proofs + +```sh +warden access reuse-surface-hub-write-token --exec --field REUSE_SURFACE_TOKEN -- python3 /home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/register_private_hub_r1.py --apply --approval --rollout-proof --native-proof --kubeconfig +``` + +No source token, login token or credential value belongs in these arguments. +Run only through the existing attended writer route; no fallback credential is +supported. Omitting `--apply` performs proof checks and public/full SQL read-only +preflight, not an offline-only dry run. Unit tests provide offline validation. + +## Preparation validation + +`python3 -m unittest discover -s docs/assessments/netkingdom-2026-10-14 -p test_register_private_hub_r1.py -q` +passes 14 tests using only fake transport and task-owned SQLite fixtures. Tests +cover exact scope/fields, stale/invalid/fake native proofs, artifact tampering, +late existing conflicts, unknown POST outcome without retry, complete create and +idempotent resume, full SQL read-only projection, wrong-cluster refusal, +same fixed target with redirect exfiltration refusal, and symlink-safe receipts. +Additional OCI tests prove valid parent/child runtime IDs work and arbitrary +repository, unlisted child, attestation, tag and non-parent specification fail. +No live execution or approval is implied. Final registration success still needs +the independent fresh 70-capability hosted audit. + +The original helper, tests, contract, plan and owner review remain under +`private-registration-history/r1/`. Its index-only runtime check incorrectly +rejected the published image's valid Linux/amd64 child; the suffix comparison also +did not enforce the repository. This is a preparation refinement of the same +registration proposal, with the original defect and review retained, not a new +execution trial or an inferred runtime success. diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-history/approved-attended-r1/attended_private_registration.py b/docs/assessments/netkingdom-2026-10-14/private-registration-history/approved-attended-r1/attended_private_registration.py new file mode 100644 index 00000000..8a3aef19 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-history/approved-attended-r1/attended_private_registration.py @@ -0,0 +1,245 @@ +"""Attend the dedicated writer role, register seven approved sources, self-revoke. + +No token persistence, raw child/error output, admin authority or browser reuse. +Preapproval and fresh actual-runtime proofs must pass before any login attempt. +""" +from pathlib import Path +import argparse +import hashlib +import importlib.util +import json +import os +import stat +import subprocess +import sys +import tempfile +import threading +import uuid +from datetime import datetime, timezone + +import yaml + +OUT = Path(__file__).resolve().parent +ROLE = 'reuse-surface-hub-writer-workload-kv-read' +POLICY = 'workload-kv-read-reuse-surface-runtime' +ENTITY = 'c204099b-cb94-363f-e207-5ff4d4aa6e94' +HASHES = { + 'register_private_hub_r1.py': 'de431eb2942d469eaad0e7e167ebfb98a717c6fa2a92b7cd987333d764792113', + 'hub-private-registration-plan-r1.json': 'ec0964addcc95a2f0509d70bb58c10006a3d00e1d2479d8678d3b7c6a15602b7', +} +MASON = Path('/home/worsch/ops-mason/src/ops_mason/attended_login.py') +MASON_SHA = '43f80ce86dbc32fcdb9f67d479f43077094ace66a618bde68ed858aa2f3e6e12' +BROWSER = OUT / 'warden-browser-opener-r1' / 'cmd.exe' +BROWSER_SHA = '4b91a4dc635e464143bfe1f484eccb2456ccd992326ac7a126b53d0a9a3c7f96' +MAX_BYTES = 65536 + + +def module(path, name, expected): + if hashlib.sha256(path.read_bytes()).hexdigest() != expected: + raise ValueError('reviewed_input_changed') + spec = importlib.util.spec_from_file_location(name, path) + if spec is None: + from importlib.machinery import SourceFileLoader + spec = importlib.util.spec_from_loader(name, SourceFileLoader(name, str(path))) + result = importlib.util.module_from_spec(spec) + spec.loader.exec_module(result) + return result + + +def prepare(args): + for name, expected in HASHES.items(): + if hashlib.sha256((OUT / name).read_bytes()).hexdigest() != expected: + raise ValueError('reviewed_input_changed') + helper = module(OUT / 'register_private_hub_r1.py', 'cust81_private_helper', HASHES['register_private_hub_r1.py']) + paths = [OUT / 'register_private_hub_r1.py', helper.PLAN, helper.PUBLIC, + helper.DISCLOSURE, helper.CONSENT, helper.IMAGE_PUBLICATION, args.rollout_proof, args.native_proof] + helper.public_tools() + helper.gates(helper.load(helper.PLAN), helper.load(args.approval), + helper.load(args.rollout_proof), helper.load(args.native_proof), paths) + if not args.kubeconfig.is_file(): + raise ValueError('kubeconfig_unavailable') + mason = module(MASON, 'cust81_mason_attended_contract', MASON_SHA) + browser = module(BROWSER, 'cust81_private_browser_adapter', BROWSER_SHA) + return helper, mason, browser + + +def append(path, event): + fd = os.open(path, os.O_WRONLY | os.O_CREAT | os.O_APPEND | os.O_NOFOLLOW, 0o600) + try: + info = os.fstat(fd) + if (not stat.S_ISREG(info.st_mode) or info.st_uid != os.getuid() + or stat.S_IMODE(info.st_mode) != 0o600): + raise ValueError('journal_custody') + data = memoryview((json.dumps(event, sort_keys=True) + '\n').encode()) + while data: + count = os.write(fd, data) + if not count: + raise OSError('journal_write') + data = data[count:] + os.fsync(fd) + finally: + os.close(fd) + + +def verify_caller(raw): + if len(raw) > MAX_BYTES: + raise ValueError('lookup_size') + data = json.loads(raw)['data'] + ttl = data.get('ttl') + if (data.get('policies') != [POLICY] or data.get('identity_policies') not in (None, []) + or data.get('entity_id') != ENTITY or type(ttl) is not int + or not 0 < ttl <= 1800): + raise ValueError('scoped_caller_mismatch') + + +def extract_token(raw, matcher): + # Extract for self-revocation even if surrounding login output is invalid. + if len(raw) > MAX_BYTES: + return '' + found = matcher.findall(raw) + return found[0] if len(found) == 1 else '' + + +def child_args(args): + return ['warden', 'access', 'reuse-surface-hub-write-token', '--exec', '--field', + 'REUSE_SURFACE_TOKEN', '--', 'python3', str(OUT / 'register_private_hub_r1.py'), + '--apply', '--approval', str(args.approval), '--rollout-proof', str(args.rollout_proof), + '--native-proof', str(args.native_proof), '--kubeconfig', str(args.kubeconfig)] + + +def execute(args, helper, mason, browser, record): + env = os.environ.copy() + for key in ('BAO_TOKEN', 'VAULT_TOKEN', 'BAO_LOG_LEVEL', 'VAULT_LOG_LEVEL', + 'BAO_LOG_FORMAT', 'VAULT_LOG_FORMAT', 'REUSE_SURFACE_TOKEN'): + env.pop(key, None) + env['BAO_ADDR'] = env['VAULT_ADDR'] = 'http://127.0.0.1:18200' + attempt = {'attempt_id': str(uuid.uuid4()), 'at': datetime.now(timezone.utc).isoformat(), + 'proposal_id': 'CUST81-PRIVATE-REGISTRATION-EXECUTION-R1', 'revision': 1, + 'approval_sha256': hashlib.sha256(args.approval.read_bytes()).hexdigest(), + 'login': False, 'warden_exit': None, 'revoked': None, 'outcome': 'started'} + record(attempt.copy()) # Establish durable audit before any login. + token = '' + result_code = 1 + proc = None + timer = None + with tempfile.TemporaryDirectory(prefix='cust81-private-warden-state-') as state: + config = yaml.safe_load(Path('/home/worsch/.config/warden/warden.yaml').read_text()) + if not isinstance(config, dict): + raise ValueError('warden_config_shape') + config['state_dir'] = state + config_path = Path(state) / 'warden.yaml' + fd = os.open(config_path, os.O_WRONLY | os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW, 0o600) + with os.fdopen(fd, 'w') as stream: + stream.write(yaml.safe_dump(config, sort_keys=False)) + stream.flush() + os.fsync(stream.fileno()) + env['WARDEN_CONFIG'] = str(config_path) + try: + # token-only does not store; explicit no-store guards helper persistence. + proc = subprocess.Popen(['bao', *mason.login_args('netkingdom', ROLE), '-no-store'], + env=env, stdin=subprocess.DEVNULL, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, text=True) + timer = threading.Timer(150, proc.kill) + timer.start() + failures = [] + browser_opened = [] + def pump(): + while True: + line = proc.stderr.readline(MAX_BYTES + 1) + if not line: + break + if len(line) > MAX_BYTES: + failures.append('login_stream_size') + proc.kill() + break + kind = mason.classify_login_line(line) + if kind == 'url': + try: + if browser_opened: + raise ValueError('duplicate_browser_request') + browser_opened.append(True) + url = browser.parse_args('xdg-open', [line.strip()]) + browser.launch(url) + print('Firefox opened in a fresh private profile; complete member login and MFA.', flush=True) + except Exception: + failures.append('browser_unavailable') + proc.kill() + break + elif kind == 'error': + # Raw error text never reaches receipts, stdout or exceptions. + if not failures: + failures.append('login_error') + reader = threading.Thread(target=pump, daemon=True) + reader.start() + raw = proc.stdout.read(MAX_BYTES + 1).strip() + token = extract_token(raw, mason.TOKEN_RE) + if len(raw) > MAX_BYTES: + proc.kill() + proc.wait(timeout=155) + timer.cancel() + reader.join(timeout=5) + if proc.returncode or mason.TOKEN_RE.fullmatch(raw) is None or failures or reader.is_alive(): + attempt['outcome'] = 'login_refused' + else: + attempt['login'] = True + env['BAO_TOKEN'] = token + lookup = subprocess.run(['bao', 'token', 'lookup', '-format=json'], env=env, + capture_output=True, text=True, timeout=30) + if lookup.returncode: + raise ValueError('lookup_failed') + verify_caller(lookup.stdout) + attempt['entity_id'] = ENTITY + # Recheck proof freshness and exact artifact approval after OIDC. + paths = [OUT / 'register_private_hub_r1.py', helper.PLAN, helper.PUBLIC, + helper.DISCLOSURE, helper.CONSENT, helper.IMAGE_PUBLICATION, args.rollout_proof, args.native_proof] + helper.gates(helper.load(helper.PLAN), helper.load(args.approval), + helper.load(args.rollout_proof), helper.load(args.native_proof), paths) + print('Dedicated caller verified; registering the seven approved sources.', flush=True) + result = subprocess.run(child_args(args), env=env, capture_output=True, timeout=600) + attempt['warden_exit'] = result.returncode + result_code = result.returncode + attempt['outcome'] = 'writer_returned' + except Exception: + attempt['outcome'] = 'stopped_inspect_receipts_before_retry' + result_code = 1 + finally: + if timer: + timer.cancel() + if proc and proc.poll() is None: + proc.kill() + proc.wait(timeout=10) + if token: + env['BAO_TOKEN'] = token + try: + revoked = subprocess.run(['bao', 'token', 'revoke', '-self'], env=env, + capture_output=True, timeout=30) + attempt['revoked'] = revoked.returncode == 0 + except Exception: + attempt['revoked'] = False + env.pop('BAO_TOKEN', None) + token = '' + if attempt['revoked'] is not True: + result_code = 1 + print('Scoped session revocation confirmed: ' + str(attempt['revoked']), flush=True) + attempt['finished_at'] = datetime.now(timezone.utc).isoformat() + record(attempt) + return result_code + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--apply', action='store_true', required=True) + for name in ('approval', 'rollout-proof', 'native-proof', 'kubeconfig'): + parser.add_argument('--' + name, type=Path, required=True) + args = parser.parse_args() + helper, mason, browser = prepare(args) + return execute(args, helper, mason, browser, + lambda event: append(OUT / 'attended-private-registration-receipts.jsonl', event)) + + +if __name__ == '__main__': + try: + sys.exit(main()) + except Exception: + print('Attended private registration refused; inspect bounded receipts.', file=sys.stderr) + sys.exit(1) diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-163dc2a3/phase-b-runtime-verification-r1.json b/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-163dc2a3/phase-b-runtime-verification-r1.json new file mode 100644 index 00000000..6fa42054 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-163dc2a3/phase-b-runtime-verification-r1.json @@ -0,0 +1,23 @@ +{ + "id": "CUST81-PHASE-B-RUNTIME-VERIFICATION-R1", + "checked_at": "2026-10-15T03:27:23.995511+00:00", + "status": "verified", + "image_digest": "sha256:2364b7e7859daccf9340a063654e2b09eed1bc27e0adf7b23cbb4b30135a7db0", + "native_source_sha256": "dbaa40f25cc0f090143578cd1c7068cb2cb00960fafd17d5239bf8a5bac514dd", + "native_helper_sha256": "c67a284091cc4dd62dca56658a14b8ea1357e2b3df1518120da4c51e0ee8d85c", + "namespace": "reuse", + "container": "reuse-surface", + "exact_reader_allowlist_verified": true, + "oci_parent_membership_verified": true, + "oci_publication_sha256": "f4ba7eff3d34dd732876b6dbba619f8c901ce9c2519b6d660101330f935a6c14", + "kube_api_server": "https://127.0.0.1:16444", + "approval_decision": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", + "target_node_ip": "92.205.62.239", + "reader_key_present": true, + "raw_values_discarded": true, + "pod": "reuse-surface-77c8c476f4-qs8mf", + "pod_uid": "4693401c-c97f-422f-a7d3-af8d0411ef5d", + "ready": true, + "deployment_image": "forgejo.coulomb.social/coulomb/reuse-surface@sha256:2364b7e7859daccf9340a063654e2b09eed1bc27e0adf7b23cbb4b30135a7db0", + "runtime_image_id": "forgejo.coulomb.social/coulomb/reuse-surface@sha256:2364b7e7859daccf9340a063654e2b09eed1bc27e0adf7b23cbb4b30135a7db0" +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-163dc2a3/private-native-fetch-verification-r1.json b/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-163dc2a3/private-native-fetch-verification-r1.json new file mode 100644 index 00000000..8c8fd2a2 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-163dc2a3/private-native-fetch-verification-r1.json @@ -0,0 +1,82 @@ +{ + "all_verified": true, + "cache_used": false, + "checked_at": "2026-10-15T03:27:23.946883+00:00", + "consent_sha256": "4a4602ad926e3af855d6ddba4731430d33e4a7432c507ba0a5193b9f43056b52", + "disclosure_sha256": "46ac4fe49a08054cc215aade2fbaf3b36ee334520997857ed84f530b52da9d35", + "id": "CUST81-PRIVATE-NATIVE-FETCH-RECEIPT-R1", + "proposal_sha256": "7819eb51d249f5c7aff4df9fb520afcfb76603b05a4104439499102b6c20af99", + "sources": [ + { + "commit": "35672be138036c8433a5ac5de91e068c03c2b124", + "entry_sha256": [ + "9de890da536c34ac2b50576e2c4a9c03792c8a07545d2a0566ace68ac10a293e" + ], + "index_sha256": "044efa3d02b90e1872f2516c581159d388a8080a689f76fcd78bb4d048d6ee64", + "repo": "rapp-openbao", + "verified": true + }, + { + "commit": "088b78ac03b0cebeec34a69aae3569eb7ec2f9c3", + "entry_sha256": [ + "21415ed5e89dcf8bd2df0c8bc99b07d2c87173809c37fa2582de6d336918a126" + ], + "index_sha256": "e68bdedf61eee9ca2026f46a2434ce384c26234616e74f7a5d08a06c75b3bb00", + "repo": "rapp-policy-nexus", + "verified": true + }, + { + "commit": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5", + "entry_sha256": [ + "64503872abb24bb28f291264e860ab094c6abb721fbfe90b47258ad13b77af44" + ], + "index_sha256": "d939333eed9d85172e006f526c445fbe2602a721d53f7c0d14bc68286ae08776", + "repo": "rapp-postgres", + "verified": true + }, + { + "commit": "adbedd349e8df97be43a1f57db7095af45ff29d1", + "entry_sha256": [ + "1a15e37bd3d19c4c89ef25803667937f549ade1cd27bedfa85132ac48ffe3f48" + ], + "index_sha256": "d2ee0f193d2198bf8f16ce64c90ae7664e59a2bc307ad711426af3fd47deb057", + "repo": "rapp-sbom-nexus", + "verified": true + }, + { + "commit": "f158307e24b86bab88a1af4830ff6b4f85afdeb5", + "entry_sha256": [ + "a67dbf6905223c04b1c003d5f967841038743c8c1479812f5cf0bb55ad6cee77" + ], + "index_sha256": "ee8801f143ed5cf064205710a61c2bb24efc6ea8585d5786d6b679426ec4c1d4", + "repo": "rapp-telemetry", + "verified": true + }, + { + "commit": "9bdc86572728783a5ed94266f04f7b12d414c557", + "entry_sha256": [ + "e7cf0485cfdb6f497281638d81f908b5c2fe1053125c6ef28130504909d1d49e" + ], + "index_sha256": "d8e9c1282350b5d2fd4f4d69712aa7a5fbcd2367bb1a7fad1b6eb16a97e5d732", + "repo": "rapp-tenant-engine", + "verified": true + }, + { + "commit": "f35108f9e1b8702fb6c526fe42b2fec5ca032738", + "entry_sha256": [ + "84ec4fdce99134c88c110104cac93bdea36cffb5ba34e046b9ad161fb860dce2" + ], + "index_sha256": "95b4ed2d0b189f6847b1c0899f740d1da46933a8f40491e1a02f2d4e57c819fc", + "repo": "rapp-user-engine", + "verified": true + } + ], + "transport": "actual_native_hub_authenticated_fetch", + "hub_runtime": { + "pod": "reuse-surface-77c8c476f4-qs8mf", + "pod_uid": "4693401c-c97f-422f-a7d3-af8d0411ef5d", + "image_digest": "sha256:2364b7e7859daccf9340a063654e2b09eed1bc27e0adf7b23cbb4b30135a7db0", + "native_source_sha256": "dbaa40f25cc0f090143578cd1c7068cb2cb00960fafd17d5239bf8a5bac514dd", + "native_helper_sha256": "c67a284091cc4dd62dca56658a14b8ea1357e2b3df1518120da4c51e0ee8d85c" + } +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-163dc2a3/private-registration-execution-approval-r2-retry1.json b/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-163dc2a3/private-registration-execution-approval-r2-retry1.json new file mode 100644 index 00000000..902efa0c --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-163dc2a3/private-registration-execution-approval-r2-retry1.json @@ -0,0 +1,24 @@ +{ + "id": "CUST81-PRIVATE-REGISTRATION-EXECUTION-R1", + "decision": "approved", + "decided_by": "Bernd Worsch", + "decision_ref": "9f496e68-655e-4e08-aa57-c822cf731124", + "action": "register_exact_seven_private_sources", + "writer_route": "reuse-surface-hub-write-token", + "approved_artifacts": { + "register_private_hub_r1.py": "de431eb2942d469eaad0e7e167ebfb98a717c6fa2a92b7cd987333d764792113", + "hub-private-registration-plan-r1.json": "ec0964addcc95a2f0509d70bb58c10006a3d00e1d2479d8678d3b7c6a15602b7", + "register_public_hub.py": "c6a5f08e01af3a5c4b1d6557859f4400eaba0d7eb0bb1976f45bba6bc5a05fda", + "private-source-disclosure-proposal-r1.json": "46ac4fe49a08054cc215aade2fbaf3b36ee334520997857ed84f530b52da9d35", + "private-source-owner-consent-r1.json": "4a4602ad926e3af855d6ddba4731430d33e4a7432c507ba0a5193b9f43056b52", + "hardened-reader-image-publication-r1.json": "f4ba7eff3d34dd732876b6dbba619f8c901ce9c2519b6d660101330f935a6c14", + "phase-b-runtime-verification-r1.json": "e84fe21628d4debf7c43acc0bade9eb5524324fe5ef9b440e075303cbfa2f899", + "private-native-fetch-verification-r1.json": "2c014c59263ef619336163e39ea62b3076f7e84ad4ae8d2b5e4bcb5d3042f1f9" + }, + "derived_at": "2026-10-15T03:27:37.352800+00:00", + "authority_proposal_revision": 2, + "authority_proposal_sha256": "c8fa74ad6648af1c884a4c607e100097f917761af5d3a6e0c5e8ce9a53b809dc", + "original_decision_ref": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", + "attended_transport_sha256": "1ec34b8cded859845dc29cedf55ff02fa4881bd4d6a3a264879efd5b3e706c88", + "retry_reason": "Previousattempt refused groupclaims beforetoken/registration; founder ready with namedmemberaccount. Sameapprovedexecutable/scope." +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-c6d3a395/phase-b-runtime-verification-r1.json b/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-c6d3a395/phase-b-runtime-verification-r1.json new file mode 100644 index 00000000..b4df0f3c --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-c6d3a395/phase-b-runtime-verification-r1.json @@ -0,0 +1,23 @@ +{ + "id": "CUST81-PHASE-B-RUNTIME-VERIFICATION-R1", + "checked_at": "2026-10-15T03:24:09.952182+00:00", + "status": "verified", + "image_digest": "sha256:2364b7e7859daccf9340a063654e2b09eed1bc27e0adf7b23cbb4b30135a7db0", + "native_source_sha256": "dbaa40f25cc0f090143578cd1c7068cb2cb00960fafd17d5239bf8a5bac514dd", + "native_helper_sha256": "c67a284091cc4dd62dca56658a14b8ea1357e2b3df1518120da4c51e0ee8d85c", + "namespace": "reuse", + "container": "reuse-surface", + "exact_reader_allowlist_verified": true, + "oci_parent_membership_verified": true, + "oci_publication_sha256": "f4ba7eff3d34dd732876b6dbba619f8c901ce9c2519b6d660101330f935a6c14", + "kube_api_server": "https://127.0.0.1:16444", + "approval_decision": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", + "target_node_ip": "92.205.62.239", + "reader_key_present": true, + "raw_values_discarded": true, + "pod": "reuse-surface-77c8c476f4-qs8mf", + "pod_uid": "4693401c-c97f-422f-a7d3-af8d0411ef5d", + "ready": true, + "deployment_image": "forgejo.coulomb.social/coulomb/reuse-surface@sha256:2364b7e7859daccf9340a063654e2b09eed1bc27e0adf7b23cbb4b30135a7db0", + "runtime_image_id": "forgejo.coulomb.social/coulomb/reuse-surface@sha256:2364b7e7859daccf9340a063654e2b09eed1bc27e0adf7b23cbb4b30135a7db0" +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-c6d3a395/private-native-fetch-verification-r1.json b/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-c6d3a395/private-native-fetch-verification-r1.json new file mode 100644 index 00000000..05b059ad --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-c6d3a395/private-native-fetch-verification-r1.json @@ -0,0 +1,82 @@ +{ + "all_verified": true, + "cache_used": false, + "checked_at": "2026-10-15T03:24:11.348613+00:00", + "consent_sha256": "4a4602ad926e3af855d6ddba4731430d33e4a7432c507ba0a5193b9f43056b52", + "disclosure_sha256": "46ac4fe49a08054cc215aade2fbaf3b36ee334520997857ed84f530b52da9d35", + "id": "CUST81-PRIVATE-NATIVE-FETCH-RECEIPT-R1", + "proposal_sha256": "7819eb51d249f5c7aff4df9fb520afcfb76603b05a4104439499102b6c20af99", + "sources": [ + { + "commit": "35672be138036c8433a5ac5de91e068c03c2b124", + "entry_sha256": [ + "9de890da536c34ac2b50576e2c4a9c03792c8a07545d2a0566ace68ac10a293e" + ], + "index_sha256": "044efa3d02b90e1872f2516c581159d388a8080a689f76fcd78bb4d048d6ee64", + "repo": "rapp-openbao", + "verified": true + }, + { + "commit": "088b78ac03b0cebeec34a69aae3569eb7ec2f9c3", + "entry_sha256": [ + "21415ed5e89dcf8bd2df0c8bc99b07d2c87173809c37fa2582de6d336918a126" + ], + "index_sha256": "e68bdedf61eee9ca2026f46a2434ce384c26234616e74f7a5d08a06c75b3bb00", + "repo": "rapp-policy-nexus", + "verified": true + }, + { + "commit": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5", + "entry_sha256": [ + "64503872abb24bb28f291264e860ab094c6abb721fbfe90b47258ad13b77af44" + ], + "index_sha256": "d939333eed9d85172e006f526c445fbe2602a721d53f7c0d14bc68286ae08776", + "repo": "rapp-postgres", + "verified": true + }, + { + "commit": "adbedd349e8df97be43a1f57db7095af45ff29d1", + "entry_sha256": [ + "1a15e37bd3d19c4c89ef25803667937f549ade1cd27bedfa85132ac48ffe3f48" + ], + "index_sha256": "d2ee0f193d2198bf8f16ce64c90ae7664e59a2bc307ad711426af3fd47deb057", + "repo": "rapp-sbom-nexus", + "verified": true + }, + { + "commit": "f158307e24b86bab88a1af4830ff6b4f85afdeb5", + "entry_sha256": [ + "a67dbf6905223c04b1c003d5f967841038743c8c1479812f5cf0bb55ad6cee77" + ], + "index_sha256": "ee8801f143ed5cf064205710a61c2bb24efc6ea8585d5786d6b679426ec4c1d4", + "repo": "rapp-telemetry", + "verified": true + }, + { + "commit": "9bdc86572728783a5ed94266f04f7b12d414c557", + "entry_sha256": [ + "e7cf0485cfdb6f497281638d81f908b5c2fe1053125c6ef28130504909d1d49e" + ], + "index_sha256": "d8e9c1282350b5d2fd4f4d69712aa7a5fbcd2367bb1a7fad1b6eb16a97e5d732", + "repo": "rapp-tenant-engine", + "verified": true + }, + { + "commit": "f35108f9e1b8702fb6c526fe42b2fec5ca032738", + "entry_sha256": [ + "84ec4fdce99134c88c110104cac93bdea36cffb5ba34e046b9ad161fb860dce2" + ], + "index_sha256": "95b4ed2d0b189f6847b1c0899f740d1da46933a8f40491e1a02f2d4e57c819fc", + "repo": "rapp-user-engine", + "verified": true + } + ], + "transport": "actual_native_hub_authenticated_fetch", + "hub_runtime": { + "pod": "reuse-surface-77c8c476f4-qs8mf", + "pod_uid": "4693401c-c97f-422f-a7d3-af8d0411ef5d", + "image_digest": "sha256:2364b7e7859daccf9340a063654e2b09eed1bc27e0adf7b23cbb4b30135a7db0", + "native_source_sha256": "dbaa40f25cc0f090143578cd1c7068cb2cb00960fafd17d5239bf8a5bac514dd", + "native_helper_sha256": "c67a284091cc4dd62dca56658a14b8ea1357e2b3df1518120da4c51e0ee8d85c" + } +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-c6d3a395/private-registration-execution-approval-r2.json b/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-c6d3a395/private-registration-execution-approval-r2.json new file mode 100644 index 00000000..2909da82 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-history/attempt-c6d3a395/private-registration-execution-approval-r2.json @@ -0,0 +1,23 @@ +{ + "id": "CUST81-PRIVATE-REGISTRATION-EXECUTION-R1", + "decision": "approved", + "decided_by": "Bernd Worsch", + "decision_ref": "9f496e68-655e-4e08-aa57-c822cf731124", + "action": "register_exact_seven_private_sources", + "writer_route": "reuse-surface-hub-write-token", + "approved_artifacts": { + "register_private_hub_r1.py": "de431eb2942d469eaad0e7e167ebfb98a717c6fa2a92b7cd987333d764792113", + "hub-private-registration-plan-r1.json": "ec0964addcc95a2f0509d70bb58c10006a3d00e1d2479d8678d3b7c6a15602b7", + "register_public_hub.py": "c6a5f08e01af3a5c4b1d6557859f4400eaba0d7eb0bb1976f45bba6bc5a05fda", + "private-source-disclosure-proposal-r1.json": "46ac4fe49a08054cc215aade2fbaf3b36ee334520997857ed84f530b52da9d35", + "private-source-owner-consent-r1.json": "4a4602ad926e3af855d6ddba4731430d33e4a7432c507ba0a5193b9f43056b52", + "hardened-reader-image-publication-r1.json": "f4ba7eff3d34dd732876b6dbba619f8c901ce9c2519b6d660101330f935a6c14", + "phase-b-runtime-verification-r1.json": "53e2ad9296a2c4bc1b7f83b2865e0385856517535f2e6b54dd916a0856f4598a", + "private-native-fetch-verification-r1.json": "f5059a872b63e84dd3b4540e0a4de1323bfff91045de8ec367bfae2de707e729" + }, + "derived_at": "2026-10-15T03:24:34.439350+00:00", + "authority_proposal_revision": 2, + "authority_proposal_sha256": "c8fa74ad6648af1c884a4c607e100097f917761af5d3a6e0c5e8ce9a53b809dc", + "original_decision_ref": "9833715e-a22a-45c0-ab6c-881f0f4f1a0e", + "attended_transport_sha256": "1ec34b8cded859845dc29cedf55ff02fa4881bd4d6a3a264879efd5b3e706c88" +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-history/r1/hub-private-registration-plan-r1.json b/docs/assessments/netkingdom-2026-10-14/private-registration-history/r1/hub-private-registration-plan-r1.json new file mode 100644 index 00000000..59690f87 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-history/r1/hub-private-registration-plan-r1.json @@ -0,0 +1,93 @@ +[ + { + "method": "POST", + "path": "/v1/repos", + "body": { + "repo": "rapp-openbao", + "url": "https://forgejo.coulomb.social/api/v1/repos/coulomb/rapp-openbao/raw/registry/indexes/capabilities.yaml?ref=35672be138036c8433a5ac5de91e068c03c2b124", + "domain": "infotech", + "enabled": true, + "required": false, + "auth_env": "REUSE_SURFACE_FORGEJO_SOURCE_READ_TOKEN", + "auth_header": "Authorization" + } + }, + { + "method": "POST", + "path": "/v1/repos", + "body": { + "repo": "rapp-policy-nexus", + "url": "https://forgejo.coulomb.social/api/v1/repos/coulomb/rapp-policy-nexus/raw/registry/indexes/capabilities.yaml?ref=088b78ac03b0cebeec34a69aae3569eb7ec2f9c3", + "domain": "infotech", + "enabled": true, + "required": false, + "auth_env": "REUSE_SURFACE_FORGEJO_SOURCE_READ_TOKEN", + "auth_header": "Authorization" + } + }, + { + "method": "POST", + "path": "/v1/repos", + "body": { + "repo": "rapp-postgres", + "url": "https://forgejo.coulomb.social/api/v1/repos/coulomb/rapp-postgres/raw/registry/indexes/capabilities.yaml?ref=a9f569c96d74aa384ac8d3ac4aa960e4061550b5", + "domain": "infotech", + "enabled": true, + "required": false, + "auth_env": "REUSE_SURFACE_FORGEJO_SOURCE_READ_TOKEN", + "auth_header": "Authorization" + } + }, + { + "method": "POST", + "path": "/v1/repos", + "body": { + "repo": "rapp-sbom-nexus", + "url": "https://forgejo.coulomb.social/api/v1/repos/coulomb/rapp-sbom-nexus/raw/registry/indexes/capabilities.yaml?ref=adbedd349e8df97be43a1f57db7095af45ff29d1", + "domain": "infotech", + "enabled": true, + "required": false, + "auth_env": "REUSE_SURFACE_FORGEJO_SOURCE_READ_TOKEN", + "auth_header": "Authorization" + } + }, + { + "method": "POST", + "path": "/v1/repos", + "body": { + "repo": "rapp-telemetry", + "url": "https://forgejo.coulomb.social/api/v1/repos/coulomb/rapp-telemetry/raw/registry/indexes/capabilities.yaml?ref=f158307e24b86bab88a1af4830ff6b4f85afdeb5", + "domain": "infotech", + "enabled": true, + "required": false, + "auth_env": "REUSE_SURFACE_FORGEJO_SOURCE_READ_TOKEN", + "auth_header": "Authorization" + } + }, + { + "method": "POST", + "path": "/v1/repos", + "body": { + "repo": "rapp-tenant-engine", + "url": "https://forgejo.coulomb.social/api/v1/repos/coulomb/rapp-tenant-engine/raw/registry/indexes/capabilities.yaml?ref=9bdc86572728783a5ed94266f04f7b12d414c557", + "domain": "infotech", + "enabled": true, + "required": false, + "auth_env": "REUSE_SURFACE_FORGEJO_SOURCE_READ_TOKEN", + "auth_header": "Authorization" + } + }, + { + "method": "POST", + "path": "/v1/repos", + "body": { + "repo": "rapp-user-engine", + "url": "https://forgejo.coulomb.social/api/v1/repos/coulomb/rapp-user-engine/raw/registry/indexes/capabilities.yaml?ref=f35108f9e1b8702fb6c526fe42b2fec5ca032738", + "domain": "infotech", + "enabled": true, + "required": false, + "auth_env": "REUSE_SURFACE_FORGEJO_SOURCE_READ_TOKEN", + "auth_header": "Authorization" + } + } +] diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-history/r1/private-registration-execution-contract-r1.md b/docs/assessments/netkingdom-2026-10-14/private-registration-history/r1/private-registration-execution-contract-r1.md new file mode 100644 index 00000000..45dafd49 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-history/r1/private-registration-execution-contract-r1.md @@ -0,0 +1,118 @@ +# Exact seven-source private registration preparation + +Prepared only; no credential read, pod execution, registration, or founder +execution approval is performed by this preparation. + +`register_private_hub_r1.py` SHA256 +`31058fdc9257ce7f15f7cd273dfab1a0c856bb37e1f90bc6ef3a112eb1de163d` +uses `hub-private-registration-plan-r1.json` SHA256 +`ec0964addcc95a2f0509d70bb58c10006a3d00e1d2479d8678d3b7c6a15602b7`. +The plan contains exactly the seven consented private sources, immutable Forgejo +raw API URLs, `domain: infotech`, `enabled: true`, `required: false`, +`auth_env: REUSE_SURFACE_FORGEJO_SOURCE_READ_TOKEN` and +`auth_header: Authorization`. No extra fields, source, method or endpoint is allowed. + +## Exact external approval gate + +The root requesting agent must first obtain the founder's external exact execution +decision under the existing supervised approval process. This helper does not +authenticate the human actor or turn a self-authored JSON file into authority. +The external approved revision receipt must contain: + +- `id: CUST81-PRIVATE-REGISTRATION-EXECUTION-R1` +- `decision: approved`, `decided_by: Bernd Worsch`, and the actual nonempty + `decision_ref` to that external resolved decision. +- `action: register_exact_seven_private_sources` +- `writer_route: reuse-surface-hub-write-token` +- `approved_artifacts`: an exact basename-to-SHA256 object for this helper, the + private plan, unchanged `register_public_hub.py`, unchanged disclosure proposal, + unchanged owner consent, and the exact supplied rollout/native proof files. + Duplicate basenames, missing/extra files and changed digests fail closed. + +Do not create or label this execution receipt approved until the external human +decision actually authorizes these exact artifacts and recording fields. Any +future conditional-proof recording must be covered by that decision. Approval +is separate from recorded metadata disclosure consent and the owner preparation +review below. + +## Runtime proof contracts + +Both proof timestamps must be timezone-aware and no older than 600 seconds, with +at most 30 seconds of future clock tolerance. Freshness is checked before network +observation, after complete preflight and before each POST. + +The owner-produced actual rollout proof must supply: + +```text +checked_at: +status: verified +image_digest: sha256:2364b7e7859daccf9340a063654e2b09eed1bc27e0adf7b23cbb4b30135a7db0 +native_source_sha256: dbaa40f25cc0f090143578cd1c7068cb2cb00960fafd17d5239bf8a5bac514dd +native_helper_sha256: c67a284091cc4dd62dca56658a14b8ea1357e2b3df1518120da4c51e0ee8d85c +namespace: reuse +container: reuse-surface +ready: true +exact_reader_allowlist_verified: true +pod: +pod_uid: +kube_api_server: +``` + +The actual `private_source_verify` receipt must contain its native ID, exact +preparation/disclosure/consent SHA256, `all_verified: true`, `cache_used: false`, +and exactly seven unique rows matching every consented commit, index SHA256 and +entry SHA256. Local fake receipts and their `transport` labels are rejected. +The root's actual suppressed pod-execution wrapper must attach `hub_runtime` +with exactly `pod`, `pod_uid`, `image_digest`, `native_source_sha256` and +`native_helper_sha256` matching the rollout proof and constants above. This binds +the otherwise standard native receipt to the actual same hardened hub instance. +This wrapper records verified execution metadata; it must not invent provenance. + +## Full-field readback and resume + +Public GET responses omit `auth_env`. Before writes and after the batch, the +helper therefore checks the explicit kubeconfig server, obtains only the approved +pod UID/container readiness/image ID through a narrow JSONPath, and executes +read-only SQLite metadata projection inside that same ready hardened pod. It +selects only these seven planned repositories and these seven fields: +`repo,url,domain,enabled,required,auth_env,auth_header`. It never selects a full +registration payload, environment values, Secrets or annotations. Each projected +value is bounded at the SQL boundary; oversized values become NULL and fail +exact comparison. Raw stdout/stderr are captured and discarded after validation; +untrusted metadata is never copied into receipts. + +The full preflight reconciles public membership against SQL membership and checks +all existing bodies before the first POST. Exact existing registrations are +skipped. Any conflict, mismatched pod, wrong cluster, unknown outcome or failed +postwrite verification halts without retry. The inherited public helper's +readback validator checks **all seven submitted fields**, including hidden +`auth_env`, against the fresh SQL projection. + +One process lock prevents concurrent batch execution. Mode0600, no-follow, +fsynced append-only receipts retain write intent and terminal outcomes. The HTTP +opener disables proxies and all redirects, targets only the fixed hub, bounds +response bodies at 2 MiB, and never prints raw errors or responses. Only the writer +`REUSE_SURFACE_TOKEN` is accessed for POST; the source-reader credential is never +looked up. Kubectl receives a minimal environment without the writer token. + +## Exact command after separate approval and verified proofs + +```sh +warden access reuse-surface-hub-write-token --exec --field REUSE_SURFACE_TOKEN -- python3 /home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/register_private_hub_r1.py --apply --approval --rollout-proof --native-proof --kubeconfig +``` + +No source token, login token or credential value belongs in these arguments. +Run only through the existing attended writer route; no fallback credential is +supported. Omitting `--apply` performs proof checks and public/full SQL read-only +preflight, not an offline-only dry run. Unit tests provide offline validation. + +## Preparation validation + +`python3 -m unittest discover -s docs/assessments/netkingdom-2026-10-14 -p test_register_private_hub_r1.py -q` +passes 11 tests using only fake transport and task-owned SQLite fixtures. Tests +cover exact scope/fields, stale/invalid/fake native proofs, artifact tampering, +late existing conflicts, unknown POST outcome without retry, complete create and +idempotent resume, full SQL read-only projection, wrong-cluster refusal, +same fixed target with redirect exfiltration refusal, and symlink-safe receipts. +No live execution or approval is implied. Final registration success still needs +the independent fresh 70-capability hosted audit. diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-history/r1/private-registration-preparation-owner-review-r1.json b/docs/assessments/netkingdom-2026-10-14/private-registration-history/r1/private-registration-preparation-owner-review-r1.json new file mode 100644 index 00000000..926ab100 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-history/r1/private-registration-preparation-owner-review-r1.json @@ -0,0 +1,21 @@ +{ + "id": "REUSE-WP-0025-PRIVATE-REGISTRATION-PREPARATION-REVIEW-R1", + "reviewed_at": "2026-10-14T23:54:13.660377+00:00", + "reviewer": "reuse-surface-owner (agent reuse-surface, codex)", + "decision": "approved", + "comment": "REUSE-WP-0025-T02; INTENT.md Registry First and Consumer Experience Matters. Exact seven immutable consented source registrations and all seven fields are guarded by external exact founder execution approval, fresh actual hardened same-pod native fetch receipts, and full read-only SQLite field proof. No cached fallback, credential vending, source token lookup or implicit owner/founder execution grant. Eleven offline tests pass. Approved only as preparation integration; native capability hosting completion still requires separately authorized execution and exact70 fresh audit.", + "artifacts": { + "register_private_hub_r1.py": "31058fdc9257ce7f15f7cd273dfab1a0c856bb37e1f90bc6ef3a112eb1de163d", + "hub-private-registration-plan-r1.json": "ec0964addcc95a2f0509d70bb58c10006a3d00e1d2479d8678d3b7c6a15602b7", + "test_register_private_hub_r1.py": "713821f9e1e7c3b9de26daad854e17ff01c7ec73262cd02f9cfb91a8a7c4a531", + "private-registration-execution-contract-r1.md": "0e706c3d7147569100d84503c82a35b0c97f5492dc4b457bb34920d5592adbfa" + }, + "validation": { + "command": "python3 -m unittest discover -s docs/assessments/netkingdom-2026-10-14 -p test_register_private_hub_r1.py -q", + "passed": 11, + "live_execution": false + }, + "execution_approval_recorded": false, + "credentials_read": false, + "runtime_or_registrations_changed": false +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-history/r1/register_private_hub_r1.py b/docs/assessments/netkingdom-2026-10-14/private-registration-history/r1/register_private_hub_r1.py new file mode 100644 index 00000000..237217b4 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-history/r1/register_private_hub_r1.py @@ -0,0 +1,318 @@ +"""Bounded seven-source admission after exact external founder approval. + +No import-time actions, source-token lookup, retries, credential acquisition or +rollout. Writer token is injected through the existing Warden route. Full-field +readback uses read-only SQLite metadata in an explicitly approved ready pod. +""" +from __future__ import annotations + +import argparse +import fcntl +import hashlib +import importlib.util +import json +import os +import re +import shutil +import sqlite3 +import stat +import subprocess +import sys +import urllib.request +import uuid +from datetime import datetime, timezone +from pathlib import Path + +OUT = Path(__file__).resolve().parent +BASE = "https://reuse.coulomb.social" +PLAN = OUT / "hub-private-registration-plan-r1.json" +PUBLIC = OUT / "register_public_hub.py" +PUBLIC_SHA = "c6a5f08e01af3a5c4b1d6557859f4400eaba0d7eb0bb1976f45bba6bc5a05fda" +DISCLOSURE = OUT / "private-source-disclosure-proposal-r1.json" +CONSENT = OUT / "private-source-owner-consent-r1.json" +DISCLOSURE_SHA = "46ac4fe49a08054cc215aade2fbaf3b36ee334520997857ed84f530b52da9d35" +CONSENT_SHA = "4a4602ad926e3af855d6ddba4731430d33e4a7432c507ba0a5193b9f43056b52" +PREPARATION_SHA = "7819eb51d249f5c7aff4df9fb520afcfb76603b05a4104439499102b6c20af99" +IMAGE = "sha256:2364b7e7859daccf9340a063654e2b09eed1bc27e0adf7b23cbb4b30135a7db0" +SOURCE_SHA = "dbaa40f25cc0f090143578cd1c7068cb2cb00960fafd17d5239bf8a5bac514dd" +NATIVE_HELPER_SHA = "c67a284091cc4dd62dca56658a14b8ea1357e2b3df1518120da4c51e0ee8d85c" +REPOS = frozenset({"rapp-openbao", "rapp-policy-nexus", "rapp-postgres", "rapp-sbom-nexus", "rapp-telemetry", "rapp-tenant-engine", "rapp-user-engine"}) +FIELDS = ("repo", "url", "domain", "enabled", "required", "auth_env", "auth_header") +MAX_BYTES = 2 * 1024 * 1024 +MAX_AGE = 600 + + +def digest(path): + return hashlib.sha256(Path(path).read_bytes()).hexdigest() + + +def load(path): + raw = Path(path).read_bytes() + if len(raw) > MAX_BYTES: + raise ValueError("artifact_size") + return json.loads(raw) + + +def public_tools(): + if digest(PUBLIC) != PUBLIC_SHA: + raise ValueError("public_helper_changed") + spec = importlib.util.spec_from_file_location("cust81_public_reconcile", PUBLIC) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + +def fresh(value, now): + stamp = datetime.fromisoformat(value) + if stamp.tzinfo is None or not -30 <= (now - stamp).total_seconds() <= MAX_AGE: + raise ValueError("stale_proof") + + +def validate_plan(plan, disclosure): + sources = disclosure["sources"] + expected = [{"method": "POST", "path": "/v1/repos", "body": { + "repo": row["repo"], + "url": f"https://forgejo.coulomb.social/api/v1/repos/coulomb/{row['repo']}/raw/registry/indexes/capabilities.yaml?ref={row['commit']}", + "domain": "infotech", "enabled": True, "required": False, + "auth_env": "REUSE_SURFACE_FORGEJO_SOURCE_READ_TOKEN", "auth_header": "Authorization", + }} for row in sources] + if len(plan) != 7 or {a["body"]["repo"] for a in plan} != REPOS or plan != expected: + raise ValueError("private_plan_scope") + if any(type(a["body"]["enabled"]) is not bool or type(a["body"]["required"]) is not bool for a in plan): + raise ValueError("boolean_fields") + + +def gates(plan, approval, rollout, native, paths, now=None): + now = now or datetime.now(timezone.utc) + if digest(DISCLOSURE) != DISCLOSURE_SHA or digest(CONSENT) != CONSENT_SHA: + raise ValueError("consent_packet_changed") + disclosure = load(DISCLOSURE) + consent = load(CONSENT) + validate_plan(plan, disclosure) + if consent["consent_status"] != "approved" or consent["proposal_sha256"] != DISCLOSURE_SHA: + raise ValueError("consent_missing") + artifacts = {Path(path).name: digest(path) for path in paths} + if len(artifacts) != len(paths) or approval.get("approved_artifacts") != artifacts: + raise ValueError("exact_artifact_approval_missing") + if ( + approval.get("id") != "CUST81-PRIVATE-REGISTRATION-EXECUTION-R1" + or approval.get("decision") != "approved" + or approval.get("decided_by") != "Bernd Worsch" + or not approval.get("decision_ref") + or approval.get("action") != "register_exact_seven_private_sources" + or approval.get("writer_route") != "reuse-surface-hub-write-token" + ): + raise ValueError("founder_execution_approval_missing") + fresh(rollout["checked_at"], now) + fresh(native["checked_at"], now) + if ( + rollout.get("status") != "verified" + or rollout.get("image_digest") != IMAGE + or rollout.get("native_source_sha256") != SOURCE_SHA + or rollout.get("native_helper_sha256") != NATIVE_HELPER_SHA + or rollout.get("namespace") != "reuse" + or rollout.get("container") != "reuse-surface" + or rollout.get("ready") is not True + or rollout.get("exact_reader_allowlist_verified") is not True + or not re.fullmatch(r"reuse-surface-[a-z0-9-]{1,100}", rollout.get("pod", "")) + or not re.fullmatch(r"[a-zA-Z0-9-]{1,80}", rollout.get("pod_uid", "")) + or not re.fullmatch(r"https://[a-zA-Z0-9.:-]{1,180}", rollout.get("kube_api_server", "")) + ): + raise ValueError("hardened_rollout_unverified") + if ( + native.get("id") != "CUST81-PRIVATE-NATIVE-FETCH-RECEIPT-R1" + or native.get("all_verified") is not True + or native.get("cache_used") is not False + or native.get("disclosure_sha256") != DISCLOSURE_SHA + or native.get("consent_sha256") != CONSENT_SHA + or native.get("proposal_sha256") != PREPARATION_SHA + or native.get("transport") not in (None, "actual_native_hub_authenticated_fetch") + or native.get("hub_runtime") != { + "pod": rollout["pod"], "pod_uid": rollout["pod_uid"], + "image_digest": IMAGE, "native_source_sha256": SOURCE_SHA, + "native_helper_sha256": NATIVE_HELPER_SHA, + } + ): + raise ValueError("actual_native_fetch_unverified") + rows = native.get("sources", []) + if len(rows) != 7 or {r.get("repo") for r in rows} != REPOS: + raise ValueError("native_source_scope") + by_repo = {r["repo"]: r for r in rows} + for source in disclosure["sources"]: + row = by_repo[source["repo"]] + files = {f["path"]: f["sha256"] for f in source["files"]} + if ( + row.get("verified") is not True + or row.get("commit") != source["commit"] + or row.get("index_sha256") != files["registry/indexes/capabilities.yaml"] + or row.get("entry_sha256") != [f["sha256"] for f in source["files"] if f["path"].endswith(".md")] + or row.get("error") + ): + raise ValueError("native_consented_hash_mismatch") + + +def sqlite_rows(db_path): + """Only exact seven repo fields; never select the payload or env values.""" + columns = sql_columns() + with sqlite3.connect("file:" + db_path + "?mode=ro", uri=True) as db: + return db.execute("SELECT repo," + columns + " FROM registrations WHERE repo IN (" + ",".join("?" for _ in REPOS) + ")", sorted(REPOS)).fetchall() + + +def sanitize_sql_rows(rows, plan): + expected = {a["body"]["repo"]: a["body"] for a in plan} + result = {} + if not isinstance(rows, list) or len(rows) > 7: + raise ValueError("sql_readback_scope") + for raw in rows: + if not isinstance(raw, (list, tuple)) or len(raw) != len(FIELDS): + raise ValueError("sql_readback_shape") + repo = raw[0] + if repo not in expected or repo in result: + raise ValueError("sql_readback_duplicate_or_foreign") + values = dict(zip(FIELDS, raw)) + # SQLite json_extract represents JSON booleans as integer 0/1. + if type(values["enabled"]) is not int or type(values["required"]) is not int or values["enabled"] not in (0, 1) or values["required"] not in (0, 1): + raise ValueError("sql_boolean_shape") + values["enabled"] = bool(values["enabled"]) + values["required"] = bool(values["required"]) + if values != expected[repo]: + raise ValueError("sql_body_conflict") + # Return only planned whitelisted values, never untrusted row content. + result[repo] = dict(expected[repo]) + return result + + +def pod_code(): + columns = sql_columns() + sql = "SELECT repo," + columns + " FROM registrations WHERE repo IN (" + ",".join("?" for _ in REPOS) + ")" + return "import json,sqlite3\nwith sqlite3.connect('file:/data/reuse.db?mode=ro',uri=True) as db:\n rows=db.execute(" + repr(sql) + "," + repr(sorted(REPOS)) + ").fetchall()\n print(json.dumps(rows))\n" + + +def sql_columns(): + # Bound metadata at the database boundary. Oversized/unexpected values become + # NULL and fail exact comparison; never truncate into an apparently valid row. + columns = [] + for name in FIELDS[1:]: + expression = "json_extract(payload, '$." + name + "')" + columns.append("CASE WHEN length(CAST(" + expression + " AS TEXT)) <= 2048 THEN " + expression + " ELSE NULL END") + return ",".join(columns) + + +def bounded_process(argv): + # No writer token or arbitrary runtime credential inherited by kubectl. + proc = subprocess.run(argv, capture_output=True, timeout=35, env={"PATH": os.defpath, "LANG": "C.UTF-8"}) + if proc.returncode or len(proc.stdout) > MAX_BYTES or len(proc.stderr) > MAX_BYTES: + raise RuntimeError("pod_observation_unavailable") + return proc.stdout + + +def full_readback(kubeconfig, rollout, plan): + executable = shutil.which("kubectl") + if not executable: + raise RuntimeError("kubectl_missing") + prefix = [executable, "--kubeconfig", str(kubeconfig)] + server = bounded_process(prefix + ["config", "view", "--minify", "-o", "jsonpath={.clusters[0].cluster.server}"]).decode() + if server != rollout["kube_api_server"]: + raise ValueError("wrong_cluster") + selector = 'jsonpath={"{\\"uid\\":\\""}{.metadata.uid}{"\\",\\"ready\\":\\""}{.status.containerStatuses[?(@.name=="reuse-surface")].ready}{"\\",\\"imageID\\":\\""}{.status.containerStatuses[?(@.name=="reuse-surface")].imageID}{"\\"}"}' + metadata = json.loads(bounded_process(prefix + ["-n", "reuse", "get", "pod", rollout["pod"], "-o", selector])) + if metadata.get("uid") != rollout["pod_uid"] or metadata.get("ready") != "true" or not metadata.get("imageID", "").endswith("@" + IMAGE): + raise ValueError("ready_hardened_pod_unverified") + raw = bounded_process(prefix + ["-n", "reuse", "exec", rollout["pod"], "-c", "reuse-surface", "--", "python3", "-c", pod_code()]) + return sanitize_sql_rows(json.loads(raw), plan) + + +def append(path, event): + data = (json.dumps(event, sort_keys=True) + "\n").encode() + fd = os.open(path, os.O_WRONLY | os.O_CREAT | os.O_APPEND | os.O_NOFOLLOW, 0o600) + try: + info = os.fstat(fd) + if info.st_uid != os.getuid() or stat.S_IMODE(info.st_mode) != 0o600: + raise ValueError("receipt_custody") + view = memoryview(data) + while view: + view = view[os.write(fd, view):] + os.fsync(fd) + finally: + os.close(fd) + + +def http_request(opener, method, path, body=None): + if (method, path) not in (("GET", "/v1/repos"), ("POST", "/v1/repos")): + raise ValueError("hub_route_not_permitted") + headers = {"Accept": "application/json"} + data = None + if method == "POST": + token = os.environ.get("REUSE_SURFACE_TOKEN") + if not token: + raise ValueError("writer_route_token_missing") + headers.update({"Authorization": "Bearer " + token, "Content-Type": "application/json"}) + data = json.dumps(body).encode() + request = urllib.request.Request(BASE + path, data=data, headers=headers, method=method) + with opener.open(request, timeout=55) as response: + content = response.read(MAX_BYTES + 1) + if len(content) > MAX_BYTES: + raise ValueError("hub_response_too_large") + return response.status, json.loads(content) if content else None + + +def run(plan, tools, request, sql, record, apply, plan_sha, authorize=lambda: None): + status, listing = request("GET", "/v1/repos") + if status != 200 or not isinstance(listing, dict) or not isinstance(listing.get("repos"), list): + raise ValueError("invalid_public_listing") + public = {r["repo"]: r for r in listing["repos"]} + if len(public) != len(listing["repos"]): + raise ValueError("public_duplicate") + existing = sql() + for action in plan: + repo = action["body"]["repo"] + if (repo in public) != (repo in existing): + raise ValueError("public_sql_inventory_race") + if repo in existing and not tools.body_matches(action["body"], existing[repo]): + raise ValueError("existing_full_body_conflict") + attempt = str(uuid.uuid4()) + authorize() + def post(body): + authorize() # Proof freshness may expire during preflight/batch. + return request("POST", "/v1/repos", body)[0] + tools.reconcile(plan, existing, post, record, apply=apply, plan_sha256=plan_sha, attempt_id=attempt) + if apply: + actual = sql() + tools.validate_readback(plan, list(actual.values())) + record({"attempt_id": attempt, "at": datetime.now(timezone.utc).isoformat(), "outcome": "full_sql_readback_verified", "repo_count": 7, "plan_sha256": plan_sha}) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--apply", action="store_true") + for name in ("approval", "rollout-proof", "native-proof", "kubeconfig"): + parser.add_argument("--" + name, type=Path, required=True) + args = parser.parse_args() + tools = public_tools() + plan = load(PLAN) + rollout, native = load(args.rollout_proof), load(args.native_proof) + paths = [Path(__file__).resolve(), PLAN, PUBLIC, DISCLOSURE, CONSENT, args.rollout_proof, args.native_proof] + gates(plan, load(args.approval), rollout, native, paths) + lock = os.open(OUT / "hub-private-registration-r1.lock", os.O_RDWR | os.O_CREAT | os.O_NOFOLLOW, 0o600) + try: + if os.fstat(lock).st_uid != os.getuid() or stat.S_IMODE(os.fstat(lock).st_mode) != 0o600: + raise ValueError("lock_custody") + fcntl.flock(lock, fcntl.LOCK_EX | fcntl.LOCK_NB) + opener = urllib.request.build_opener(urllib.request.ProxyHandler({}), tools.NoRedirect()) + record = lambda event: append(OUT / "hub-private-registration-r1-receipts.jsonl", event) + record({"at": datetime.now(timezone.utc).isoformat(), "outcome": "gates_verified", "apply": args.apply, "approval_sha256": digest(args.approval)}) + run(plan, tools, lambda *a: http_request(opener, *a), lambda: full_readback(args.kubeconfig, rollout, plan), record, args.apply, digest(PLAN), lambda: gates(plan, load(args.approval), rollout, native, paths)) + return 0 + except Exception: + append(OUT / "hub-private-registration-r1-receipts.jsonl", {"at": datetime.now(timezone.utc).isoformat(), "outcome": "stopped_reconcile_before_retry"}) + raise + finally: + os.close(lock) + + +if __name__ == "__main__": + try: + raise SystemExit(main()) + except Exception: + print("private registration refused; inspect bounded receipts", file=sys.stderr) + raise SystemExit(1) diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-history/r1/test_register_private_hub_r1.py b/docs/assessments/netkingdom-2026-10-14/private-registration-history/r1/test_register_private_hub_r1.py new file mode 100644 index 00000000..160d6d08 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-history/r1/test_register_private_hub_r1.py @@ -0,0 +1,177 @@ +import copy +import importlib.util +import io +import json +import os +import sqlite3 +import tempfile +import unittest +from datetime import datetime, timedelta, timezone +from email.message import Message +from pathlib import Path +from unittest.mock import patch +from urllib.error import HTTPError +from urllib.request import HTTPSHandler, build_opener +from urllib.response import addinfourl + +HERE = Path(__file__).resolve().parent +spec = importlib.util.spec_from_file_location("private_admission", HERE / "register_private_hub_r1.py") +m = importlib.util.module_from_spec(spec) +spec.loader.exec_module(m) + + +class PrivateAdmissionSafety(unittest.TestCase): + def setUp(self): + self.tmp = tempfile.TemporaryDirectory() + self.addCleanup(self.tmp.cleanup) + self.plan = m.load(m.PLAN) + self.disclosure = m.load(m.DISCLOSURE) + self.tools = m.public_tools() + now = datetime.now(timezone.utc).isoformat() + self.rollout = {"checked_at": now, "status": "verified", "image_digest": m.IMAGE, + "native_source_sha256": m.SOURCE_SHA, "native_helper_sha256": m.NATIVE_HELPER_SHA, + "namespace": "reuse", "container": "reuse-surface", "ready": True, + "exact_reader_allowlist_verified": True, "pod": "reuse-surface-fixture", + "pod_uid": "fixture-uid", "kube_api_server": "https://127.0.0.1:6443"} + self.native = {"id": "CUST81-PRIVATE-NATIVE-FETCH-RECEIPT-R1", "checked_at": now, + "all_verified": True, "cache_used": False, "disclosure_sha256": m.DISCLOSURE_SHA, + "consent_sha256": m.CONSENT_SHA, "proposal_sha256": m.PREPARATION_SHA, "sources": [{"repo": row["repo"], "commit": row["commit"], + "index_sha256": row["files"][0]["sha256"], "entry_sha256": [f["sha256"] for f in row["files"] if f["path"].endswith(".md")], "verified": True} for row in self.disclosure["sources"]]} + self.native["hub_runtime"] = {"pod": self.rollout["pod"], "pod_uid": self.rollout["pod_uid"], + "image_digest": m.IMAGE, "native_source_sha256": m.SOURCE_SHA, "native_helper_sha256": m.NATIVE_HELPER_SHA} + self.rollout_path = Path(self.tmp.name) / "fake-rollout.json" + self.native_path = Path(self.tmp.name) / "fake-native.json" + self.rollout_path.write_text(json.dumps(self.rollout)) + self.native_path.write_text(json.dumps(self.native)) + self.paths = [Path(m.__file__), m.PLAN, m.PUBLIC, m.DISCLOSURE, m.CONSENT, self.rollout_path, self.native_path] + # In-memory approval fixture never written as an executable approval. + self.approval = {"id": "CUST81-PRIVATE-REGISTRATION-EXECUTION-R1", "decision": "approved", + "decided_by": "Bernd Worsch", "decision_ref": "fixture-only-no-authority", + "action": "register_exact_seven_private_sources", "writer_route": "reuse-surface-hub-write-token", + "approved_artifacts": {p.name: m.digest(p) for p in self.paths}} + + def test_exact_plan_and_bound_proofs(self): + m.gates(self.plan, self.approval, self.rollout, self.native, self.paths) + + def test_scope_and_fields_mutations_rejected(self): + for key, value in [("url", "https://attacker.invalid/"), ("auth_env", "REUSE_SURFACE_TOKEN"), ("required", 0), ("domain", "other"), ("repo", "outside")]: + changed = copy.deepcopy(self.plan) + changed[-1]["body"][key] = value + with self.subTest(key=key), self.assertRaises(ValueError): + m.validate_plan(changed, self.disclosure) + with self.assertRaises(ValueError): + m.validate_plan(self.plan[:-1] + [self.plan[0]], self.disclosure) + + def test_invalid_native_or_rollout_proof_prevents_writes(self): + mutations = [("native", "cache_used", True), ("native", "all_verified", False), + ("native", "transport", "fake-only"), ("rollout", "image_digest", "sha256:wrong"), + ("rollout", "native_source_sha256", "wrong"), ("rollout", "ready", False), + ("native", "checked_at", (datetime.now(timezone.utc)-timedelta(hours=1)).isoformat())] + for target, key, value in mutations: + native, rollout = copy.deepcopy(self.native), copy.deepcopy(self.rollout) + (native if target == "native" else rollout)[key] = value + requests = [] + def authorize(): + m.gates(self.plan, self.approval, rollout, native, self.paths) + with self.subTest(target=target, key=key), self.assertRaises(ValueError): + m.run(self.plan, self.tools, lambda *a: (requests.append(a) or (200, {"repos": []})), lambda: {}, lambda e: None, True, "fixture", authorize) + self.assertFalse(any(r[0] == "POST" for r in requests)) + changed = copy.deepcopy(self.native) + changed["sources"][-1]["entry_sha256"] = ["0"*64] + with self.assertRaises(ValueError): + m.gates(self.plan, self.approval, self.rollout, changed, self.paths) + + def test_artifact_change_rejects_approval(self): + self.native_path.write_text(self.native_path.read_text() + " ") + with self.assertRaises(ValueError): + m.gates(self.plan, self.approval, self.rollout, self.native, self.paths) + + def test_late_existing_conflict_prevents_entire_batch(self): + repo = self.plan[-1]["body"]["repo"] + wrong = dict(self.plan[-1]["body"], auth_env="WRONG_ENV") + requests = [] + with self.assertRaises(ValueError): + m.run(self.plan, self.tools, lambda *a: (requests.append(a) or (200, {"repos": [wrong]})), lambda: {repo: wrong}, lambda e: None, True, "fixture") + self.assertFalse(any(r[0] == "POST" for r in requests)) + + def test_uncertain_post_stops_without_retry(self): + calls, events = [], [] + def request(method, path, body=None): + calls.append(method) + if method == "POST": + raise TimeoutError("fixture-writer-secret must not be emitted") + return 200, {"repos": []} + with self.assertRaises(RuntimeError): + m.run(self.plan, self.tools, request, lambda: {}, events.append, True, "fixture") + self.assertEqual(calls, ["GET", "POST"]) + self.assertEqual([e["outcome"] for e in events], ["post_intent", "transport_unknown"]) + self.assertNotIn("fixture-writer-secret", json.dumps(events)) + + def test_all_seven_posted_then_full_field_sql_readback(self): + stored, events, calls = {}, [], [] + def request(method, path, body=None): + calls.append(method) + if method == "POST": + stored[body["repo"]] = dict(body) + return 201, {} + return 200, {"repos": list(stored.values())} + m.run(self.plan, self.tools, request, lambda: dict(stored), events.append, True, "fixture") + self.assertEqual(calls.count("POST"), 7) + self.assertEqual(events[-1]["outcome"], "full_sql_readback_verified") + before = len(calls) + m.run(self.plan, self.tools, request, lambda: dict(stored), events.append, True, "fixture") + self.assertEqual(calls[before:], ["GET"]) + + def test_readonly_sql_projects_only_seven_fields_and_repositories(self): + db = Path(self.tmp.name) / "fixture.db" + with sqlite3.connect(db) as connection: + connection.execute("CREATE TABLE registrations(repo TEXT PRIMARY KEY,payload TEXT)") + for action in self.plan: + body = dict(action["body"], source_token="fixture-secret-not-readable") + connection.execute("INSERT INTO registrations VALUES(?,?)", (body["repo"], json.dumps(body))) + connection.execute("INSERT INTO registrations VALUES(?,?)", ("outside", '{"source_token":"outside-secret"}')) + rows = m.sqlite_rows(str(db)) + self.assertEqual(len(rows), 7) + sanitized = m.sanitize_sql_rows(rows, self.plan) + self.assertNotIn("secret", json.dumps(sanitized)) + self.assertEqual(set(sanitized), m.REPOS) + changed = list(rows[0]); changed[3] = 2 + with self.assertRaises(ValueError): + m.sanitize_sql_rows([changed], self.plan) + + def test_pod_transport_checks_cluster_ready_uid_and_image_before_sql(self): + rows = [[a["body"][k] if k not in ("enabled","required") else int(a["body"][k]) for k in m.FIELDS] for a in self.plan] + values = [self.rollout["kube_api_server"].encode(), json.dumps({"uid": "fixture-uid", "ready": "true", "imageID": "containerd://repo@"+m.IMAGE}).encode(), json.dumps(rows).encode()] + calls=[] + with patch.object(m.shutil, "which", return_value="/usr/bin/kubectl"), patch.object(m, "bounded_process", side_effect=lambda argv: (calls.append(argv) or values[len(calls)-1])): + self.assertEqual(len(m.full_readback("fixture-kubeconfig",self.rollout,self.plan)),7) + self.assertIn("mode=ro", calls[-1][-1]) + self.assertNotIn("SELECT payload", calls[-1][-1]) + calls=[] + with patch.object(m.shutil,"which",return_value="/usr/bin/kubectl"), patch.object(m,"bounded_process",side_effect=lambda argv: (calls.append(argv) or b"https://wrong-cluster:6443")), self.assertRaises(ValueError): + m.full_readback("fixture-kubeconfig",self.rollout,self.plan) + self.assertEqual(len(calls),1) + + def test_writer_redirect_never_replays_token(self): + calls=[] + class FakeHTTPS(HTTPSHandler): + def https_open(self, request): + calls.append(request.full_url) + headers=Message(); headers["Location"]="https://attacker.invalid/exfil" + response=addinfourl(io.BytesIO(b""),headers,request.full_url,302) + response.msg="Found" + return response + opener=build_opener(FakeHTTPS(),self.tools.NoRedirect()) + with patch.dict(os.environ,{"REUSE_SURFACE_TOKEN":"fixture-writer-token"}), self.assertRaises(HTTPError): + m.http_request(opener,"POST","/v1/repos",self.plan[0]["body"]) + self.assertEqual(calls,[m.BASE+"/v1/repos"]) + + def test_durable_receipt_refuses_symlink(self): + original=Path(self.tmp.name)/"original"; original.write_text("untouched") + link=Path(self.tmp.name)/"receipt"; link.symlink_to(original) + with self.assertRaises(OSError):m.append(link,{"outcome":"fixture"}) + self.assertEqual(original.read_text(),"untouched") + + +if __name__ == "__main__": + unittest.main() diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-preparation-owner-review-r1.json b/docs/assessments/netkingdom-2026-10-14/private-registration-preparation-owner-review-r1.json new file mode 100644 index 00000000..926ab100 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-preparation-owner-review-r1.json @@ -0,0 +1,21 @@ +{ + "id": "REUSE-WP-0025-PRIVATE-REGISTRATION-PREPARATION-REVIEW-R1", + "reviewed_at": "2026-10-14T23:54:13.660377+00:00", + "reviewer": "reuse-surface-owner (agent reuse-surface, codex)", + "decision": "approved", + "comment": "REUSE-WP-0025-T02; INTENT.md Registry First and Consumer Experience Matters. Exact seven immutable consented source registrations and all seven fields are guarded by external exact founder execution approval, fresh actual hardened same-pod native fetch receipts, and full read-only SQLite field proof. No cached fallback, credential vending, source token lookup or implicit owner/founder execution grant. Eleven offline tests pass. Approved only as preparation integration; native capability hosting completion still requires separately authorized execution and exact70 fresh audit.", + "artifacts": { + "register_private_hub_r1.py": "31058fdc9257ce7f15f7cd273dfab1a0c856bb37e1f90bc6ef3a112eb1de163d", + "hub-private-registration-plan-r1.json": "ec0964addcc95a2f0509d70bb58c10006a3d00e1d2479d8678d3b7c6a15602b7", + "test_register_private_hub_r1.py": "713821f9e1e7c3b9de26daad854e17ff01c7ec73262cd02f9cfb91a8a7c4a531", + "private-registration-execution-contract-r1.md": "0e706c3d7147569100d84503c82a35b0c97f5492dc4b457bb34920d5592adbfa" + }, + "validation": { + "command": "python3 -m unittest discover -s docs/assessments/netkingdom-2026-10-14 -p test_register_private_hub_r1.py -q", + "passed": 11, + "live_execution": false + }, + "execution_approval_recorded": false, + "credentials_read": false, + "runtime_or_registrations_changed": false +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-registration-preparation-owner-review-r2.json b/docs/assessments/netkingdom-2026-10-14/private-registration-preparation-owner-review-r2.json new file mode 100644 index 00000000..a439e870 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-registration-preparation-owner-review-r2.json @@ -0,0 +1,30 @@ +{ + "id": "REUSE-WP-0025-PRIVATE-REGISTRATION-PREPARATION-REVIEW-R2", + "revision": 2, + "same_proposal": true, + "reviewed_at": "2026-10-15T00:00:08.334002+00:00", + "reviewer": "reuse-surface-owner (agent reuse-surface, codex)", + "decision": "approved", + "comment": "REUSE-WP-0025-T02; INTENT.md Consumer Experience Matters and Registry First. Root identified R1 runtime check accepting only parent digest and suffix-matching arbitrary repositories. R2 requires actual Deployment and Pod image specifications at exact approved repo OCI parent2364, accepts runtime only that same repo at parent2364 or independently verified non-attestation Linux/amd64 child1a693, and binds publication manifest membership plus rollout proof. The exact seven metadata plan, approval gate, same-pod native source/helper hashes, bounded full-field SQLite and no-retry custody remain unchanged. Fourteen offline tests pass. Approved as preparation refinement only; no founder execution go or runtime success is inferred.", + "artifacts": { + "register_private_hub_r1.py": "de431eb2942d469eaad0e7e167ebfb98a717c6fa2a92b7cd987333d764792113", + "hub-private-registration-plan-r1.json": "ec0964addcc95a2f0509d70bb58c10006a3d00e1d2479d8678d3b7c6a15602b7", + "test_register_private_hub_r1.py": "ef4846823a0168dcb40d4b958ecac83ee0e7c90313004322e0eb3fa5204c4fab", + "private-registration-execution-contract-r1.md": "0e2b98f7de6f2079eebb8772d9e564b1506ad5703bf981b7ea3196aed8a4cd62", + "hardened-reader-image-publication-r1.json": "f4ba7eff3d34dd732876b6dbba619f8c901ce9c2519b6d660101330f935a6c14" + }, + "preserved_r1": { + "path": "private-registration-history/r1", + "helper_sha256": "31058fdc9257ce7f15f7cd273dfab1a0c856bb37e1f90bc6ef3a112eb1de163d", + "review_sha256": "a16a1e499c4b58d69f6095e0564ca73fb2157a4c9e18f22cb6cf6ef4665e50ff", + "confirmed_defect": "Valid OCI child rejected; suffix check lacked exact repository binding.", + "live_execution": false + }, + "validation": { + "command": "python3 -m unittest discover -s docs/assessments/netkingdom-2026-10-14 -p test_register_private_hub_r1.py -q", + "passed": 14, + "live_execution": false + }, + "credentials_or_native_consumer_changed": false, + "execution_approval_recorded": false +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-source-consented-revision-preflight.json b/docs/assessments/netkingdom-2026-10-14/private-source-consented-revision-preflight.json new file mode 100644 index 00000000..098e350c --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-source-consented-revision-preflight.json @@ -0,0 +1,134 @@ +{ + "checked_at": "2026-10-14T22:34:23.499101+00:00", + "proposal_sha256": "46ac4fe49a08054cc215aade2fbaf3b36ee334520997857ed84f530b52da9d35", + "results": [ + { + "repo": "rapp-openbao", + "files": [ + { + "path": "registry/indexes/capabilities.yaml", + "sha256": "044efa3d02b90e1872f2516c581159d388a8080a689f76fcd78bb4d048d6ee64", + "matches_approved": true + }, + { + "path": "registry/capabilities/capability.railiance.openbao-package.md", + "sha256": "9de890da536c34ac2b50576e2c4a9c03792c8a07545d2a0566ace68ac10a293e", + "matches_approved": true + } + ], + "remote_main": "35672be138036c8433a5ac5de91e068c03c2b124", + "approved_commit_still_main": true, + "remote_lookup_ok": true + }, + { + "repo": "rapp-policy-nexus", + "files": [ + { + "path": "registry/indexes/capabilities.yaml", + "sha256": "e68bdedf61eee9ca2026f46a2434ce384c26234616e74f7a5d08a06c75b3bb00", + "matches_approved": true + }, + { + "path": "registry/capabilities/capability.railiance.policy-publication-package.md", + "sha256": "21415ed5e89dcf8bd2df0c8bc99b07d2c87173809c37fa2582de6d336918a126", + "matches_approved": true + } + ], + "remote_main": "088b78ac03b0cebeec34a69aae3569eb7ec2f9c3", + "approved_commit_still_main": true, + "remote_lookup_ok": true + }, + { + "repo": "rapp-postgres", + "files": [ + { + "path": "registry/indexes/capabilities.yaml", + "sha256": "d939333eed9d85172e006f526c445fbe2602a721d53f7c0d14bc68286ae08776", + "matches_approved": true + }, + { + "path": "registry/capabilities/capability.railiance.postgres-isolation-recovery.md", + "sha256": "64503872abb24bb28f291264e860ab094c6abb721fbfe90b47258ad13b77af44", + "matches_approved": true + } + ], + "remote_main": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5", + "approved_commit_still_main": true, + "remote_lookup_ok": true + }, + { + "repo": "rapp-sbom-nexus", + "files": [ + { + "path": "registry/indexes/capabilities.yaml", + "sha256": "d2ee0f193d2198bf8f16ce64c90ae7664e59a2bc307ad711426af3fd47deb057", + "matches_approved": true + }, + { + "path": "registry/capabilities/capability.railiance.sbom-runtime-package.md", + "sha256": "1a15e37bd3d19c4c89ef25803667937f549ade1cd27bedfa85132ac48ffe3f48", + "matches_approved": true + } + ], + "remote_main": "adbedd349e8df97be43a1f57db7095af45ff29d1", + "approved_commit_still_main": true, + "remote_lookup_ok": true + }, + { + "repo": "rapp-telemetry", + "files": [ + { + "path": "registry/indexes/capabilities.yaml", + "sha256": "ee8801f143ed5cf064205710a61c2bb24efc6ea8585d5786d6b679426ec4c1d4", + "matches_approved": true + }, + { + "path": "registry/capabilities/capability.railiance.telemetry-package.md", + "sha256": "a67dbf6905223c04b1c003d5f967841038743c8c1479812f5cf0bb55ad6cee77", + "matches_approved": true + } + ], + "remote_main": "f158307e24b86bab88a1af4830ff6b4f85afdeb5", + "approved_commit_still_main": true, + "remote_lookup_ok": true + }, + { + "repo": "rapp-tenant-engine", + "files": [ + { + "path": "registry/indexes/capabilities.yaml", + "sha256": "d8e9c1282350b5d2fd4f4d69712aa7a5fbcd2367bb1a7fad1b6eb16a97e5d732", + "matches_approved": true + }, + { + "path": "registry/capabilities/capability.railiance.tenant-engine-package.md", + "sha256": "e7cf0485cfdb6f497281638d81f908b5c2fe1053125c6ef28130504909d1d49e", + "matches_approved": true + } + ], + "remote_main": "9bdc86572728783a5ed94266f04f7b12d414c557", + "approved_commit_still_main": true, + "remote_lookup_ok": true + }, + { + "repo": "rapp-user-engine", + "files": [ + { + "path": "registry/indexes/capabilities.yaml", + "sha256": "95b4ed2d0b189f6847b1c0899f740d1da46933a8f40491e1a02f2d4e57c819fc", + "matches_approved": true + }, + { + "path": "registry/capabilities/capability.railiance.user-engine-package.md", + "sha256": "84ec4fdce99134c88c110104cac93bdea36cffb5ba34e046b9ad161fb860dce2", + "matches_approved": true + } + ], + "remote_main": "f35108f9e1b8702fb6c526fe42b2fec5ca032738", + "approved_commit_still_main": true, + "remote_lookup_ok": true + } + ], + "all_local_files_match_consent": true, + "all_approved_commits_still_main": true +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-source-review-handoff-receipts.json b/docs/assessments/netkingdom-2026-10-14/private-source-review-handoff-receipts.json new file mode 100644 index 00000000..c72ebe39 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-source-review-handoff-receipts.json @@ -0,0 +1,45 @@ +{ + "proposal_sha256": "46ac4fe49a08054cc215aade2fbaf3b36ee334520997857ed84f530b52da9d35", + "messages": [ + { + "to_agent": "rapp-openbao", + "id": "4b1e3bc2-61a2-40b2-990f-cb1b4554734f", + "created_at": "2026-10-14T22:23:07.471433Z" + }, + { + "to_agent": "rapp-policy-nexus", + "id": "d2d152a2-5509-4f73-90ef-9e11c041ee85", + "created_at": "2026-10-14T22:23:07.443447Z" + }, + { + "to_agent": "rapp-postgres", + "id": "f56fe3b7-aeec-4e9e-917c-4e51c166b961", + "created_at": "2026-10-14T22:23:07.465226Z" + }, + { + "to_agent": "rapp-sbom-nexus", + "id": "69619f7c-d22c-4a23-88c8-4580953183f2", + "created_at": "2026-10-14T22:23:16.983779Z" + }, + { + "to_agent": "rapp-telemetry", + "id": "408ba02e-8725-49ee-bde3-1ea3648fd320", + "created_at": "2026-10-14T22:23:19.319117Z" + }, + { + "to_agent": "rapp-tenant-engine", + "id": "d6e5295b-ce4f-4082-9ede-d4b57e6e4d2d", + "created_at": "2026-10-14T22:23:19.342195Z" + }, + { + "to_agent": "rapp-user-engine", + "id": "c76ef8ce-0c04-404d-88a2-2c95583dea8f", + "created_at": "2026-10-14T22:23:29.754128Z" + }, + { + "to_agent": "railiance-platform", + "id": "82e12e69-8139-415c-b0c6-753a44341862", + "created_at": "2026-10-14T22:23:32.162121Z" + } + ] +} diff --git a/docs/assessments/netkingdom-2026-10-14/private-writer-r2-no-store-warning-source-review-r1.json b/docs/assessments/netkingdom-2026-10-14/private-writer-r2-no-store-warning-source-review-r1.json new file mode 100644 index 00000000..5e3a5393 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/private-writer-r2-no-store-warning-source-review-r1.json @@ -0,0 +1,26 @@ +{ + "id": "CUST81-WARDEN-R2-WRITER-LOGIN-SOURCE-DIAGNOSIS-R1", + "checked_at": "2026-10-15T03:26:45.176908+00:00", + "attempt_id": "c6d3a395", + "executed_transport_sha256": "1ec34b8cded859845dc29cedf55ff02fa4881bd4d6a3a264879efd5b3e706c88", + "source": "https://raw.githubusercontent.com/openbao/openbao/v2.5.5/command/login.go", + "hypothesis": "Explicit no-store with token-only emits an extra benign no-store warning rejected by Mason classifier", + "finding": "refuted_by_source", + "source_evidence": [ + "159-161: token-only sets no-store and token output field.", + "324-329: no-store warning is guarded by NOT token-only; it cannot run for the approved argv.", + "338-339: token field output returns before table-format success prose.", + "232-260: authentication errors or additional native MFA branches are distinct conditions; their presence in this discarded attempt is not established." + ], + "synthetic_expected_prompt_classifications": [ + "instruction", + "url", + "instruction", + "instruction" + ], + "actual_failure_cause": "unknown; original process exit/status/raw output were not retained by approved helper", + "actual_raw_login_read": false, + "login_or_credential_action_performed": false, + "executable_change_needed_from_this_hypothesis": false, + "next_evidence": "Founder final browser page and separately sanitized server-event correlation if needed; no speculative allowlist expansion." +} diff --git a/docs/assessments/netkingdom-2026-10-14/reuse-database-recovery-preflight-r1.json b/docs/assessments/netkingdom-2026-10-14/reuse-database-recovery-preflight-r1.json new file mode 100644 index 00000000..cbd83ace --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/reuse-database-recovery-preflight-r1.json @@ -0,0 +1,8 @@ +{ + "id": "CUST81-REUSE-DB-RECOVERY-PREFLIGHT-R1", + "checked_at": "2026-10-14T23:48:37.513221+00:00", + "status": "preflight_failed_no_live_mutation", + "raw_output_discarded": true, + "live_mutation": false, + "failure_type": "AssertionError" +} diff --git a/docs/assessments/netkingdom-2026-10-14/reuse-database-recovery-preflight-r2.json b/docs/assessments/netkingdom-2026-10-14/reuse-database-recovery-preflight-r2.json new file mode 100644 index 00000000..ac9e02c7 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/reuse-database-recovery-preflight-r2.json @@ -0,0 +1,17 @@ +{ + "id": "CUST81-REUSE-DB-RECOVERY-PREFLIGHT-R2", + "checked_at": "2026-10-14T23:49:06.694838+00:00", + "status": "snapshot_captured_integrity_verified", + "raw_output_discarded": true, + "live_mutation": false, + "prior_attempt": "reuse-database-recovery-preflight-r1.json", + "refinement": "Select ready API component only; name selector also includes landing pod.", + "stage": "complete", + "pod": "reuse-surface-54fb694b9-tv59j", + "snapshot_path": "/tmp/cust81-reuse-db-recovery-r2.sqlite", + "snapshot_bytes": 69632, + "snapshot_sha256": "101c9f446861956b657b8ca85006bf6ee2841ccf0c52c548912cea101dc7f8f2", + "mode": "0600", + "snapshot_content_emitted": false, + "restore_executed": false +} diff --git a/docs/assessments/netkingdom-2026-10-14/reuse-release-owner-eso-metadata-r1.json b/docs/assessments/netkingdom-2026-10-14/reuse-release-owner-eso-metadata-r1.json new file mode 100644 index 00000000..a87047f4 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/reuse-release-owner-eso-metadata-r1.json @@ -0,0 +1,59 @@ +{ + "checked_at": "2026-10-14T23:16:34.969493+00:00", + "read_only": true, + "raw_output_discarded": true, + "release_owner_metadata": { + "managed_by": "Helm", + "helm_release": "reuse", + "helm_namespace": "reuse", + "argo_tracking_present": false + }, + "eso_store": { + "name": "openbao-reuse", + "kubernetes_auth": { + "mountPath": "kubernetes", + "role": "reuse-surface-runtime-eso", + "serviceAccountRef": { + "audiences": [ + "openbao" + ], + "name": "reuse-surface-eso", + "namespace": "reuse" + } + }, + "conditions": [ + { + "namespaces": [ + "reuse" + ] + } + ], + "ready": [ + "True" + ] + }, + "external_secret": { + "name": "reuse-surface-runtime", + "target_name": "reuse-surface-env", + "store": { + "kind": "ClusterSecretStore", + "name": "openbao-reuse" + }, + "data_refs": [ + { + "secretKey": "REUSE_SURFACE_TOKEN", + "key": "workloads/reuse/reuse-surface/runtime-secrets", + "property": "REUSE_SURFACE_TOKEN" + }, + { + "secretKey": "REUSE_SURFACE_FORGEJO_WEBHOOK_SECRET", + "key": "workloads/reuse/reuse-surface/runtime-secrets", + "property": "REUSE_SURFACE_FORGEJO_WEBHOOK_SECRET" + } + ], + "ready": [ + "True" + ] + }, + "status": "metadata_verified" +} diff --git a/docs/assessments/netkingdom-2026-10-14/reuse-release-runtime-metadata-r1.json b/docs/assessments/netkingdom-2026-10-14/reuse-release-runtime-metadata-r1.json new file mode 100644 index 00000000..e024df35 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/reuse-release-runtime-metadata-r1.json @@ -0,0 +1,43 @@ +{ + "checked_at": "2026-10-14T23:02:40.655232+00:00", + "target_node_ip": "92.205.62.239", + "read_only": true, + "raw_output_discarded": true, + "current_pod": { + "name": "reuse-surface-54fb694b9-tv59j", + "node": "239.62.205.92.host.secureserver.net", + "containers": [ + { + "name": "reuse-surface", + "requests": { + "cpu": "100m", + "memory": "256Mi" + } + } + ], + "image_ids": [ + "forgejo.coulomb.social/coulomb/reuse-surface@sha256:2c1514cb3f5e1297ffeeac912ba36a70f8a2591588a5a4643bc58293e97132de" + ], + "pvc_claims": [ + "reuse-surface-data" + ] + }, + "pvcs": [ + { + "name": "reuse-surface-data", + "phase": "Bound", + "access_modes": [ + "ReadWriteOnce" + ], + "capacity": { + "storage": "1Gi" + } + } + ], + "allocated_resource_summary": [ + "cpu 3560m (89%) 37300m (932%)", + "memory 9728Mi (60%) 33986Mi (212%)" + ], + "status": "metadata_verified", + "live_change_performed": false +} diff --git a/docs/assessments/netkingdom-2026-10-14/run_attended_reader_custody_r1.sh b/docs/assessments/netkingdom-2026-10-14/run_attended_reader_custody_r1.sh new file mode 100755 index 00000000..5c18b7f4 --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/run_attended_reader_custody_r1.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -eu +# Check Windows interoperability before creating an attended OIDC request. +# Only a fixed exit status is requested; no credential or browser URL is used. +if ! timeout 10s powershell.exe -NoProfile -NonInteractive -Command 'exit 0' >/dev/null 2>&1; then + printf '%s\n' 'Windows browser interoperability is unavailable in this shell. Run this script in a separate Ubuntu/WSL terminal outside Codex.' >&2 + exit 78 +fi +exec env PATH="/home/worsch/the-custodian/docs/assessments/netkingdom-2026-10-14/warden-browser-opener-r1:$PATH" \ + BAO_ADDR=http://127.0.0.1:18200 VAULT_ADDR=http://127.0.0.1:18200 \ + warden access openbao-platform-admin-login --exec -- \ + python3 /home/worsch/railiance-platform/scripts/apply-reuse-surface-reader-custody.py \ + --execute --approval /tmp/cust81-approved-custody-r1.json \ + --receipt /tmp/cust81-policy-custody-r1.jsonl \ + --bootstrap-receipt /tmp/cust81-forge-reader-r1.jsonl diff --git a/docs/assessments/netkingdom-2026-10-14/warden-attended-dependency-repair-publication-r1.json b/docs/assessments/netkingdom-2026-10-14/warden-attended-dependency-repair-publication-r1.json new file mode 100644 index 00000000..7eee297c --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/warden-attended-dependency-repair-publication-r1.json @@ -0,0 +1,81 @@ +{ + "id": "CUST81-WARDEN-ATTENDED-REPAIR-PUBLICATION-R1", + "status": "source_published_projected_installed_verified", + "checked_at": "2026-10-15T02:27:45.930366+00:00", + "commit": "d2cd3fa9405f0766eef67a8b0e897239d8817fb7", + "publication": { + "command": "uv run --project /home/worsch/repo-manager rmgr sync --path . --push", + "exit": 0, + "status": "applied", + "instance_role": "primary", + "instance_label": "railiance01", + "expected_commit": "d2cd3fa9405f0766eef67a8b0e897239d8817fb7", + "derived_commit": "d2cd3fa9405f0766eef67a8b0e897239d8817fb7", + "ahead": 0, + "behind": 0, + "independent_origin_main": "d2cd3fa9405f0766eef67a8b0e897239d8817fb7" + }, + "patch_sha256": "4fb3ba8e400ee360d74d9e94352120082c5c15e548aa23e75a531cb81722b35d", + "install": { + "command": "make install-memory", + "exit": 0, + "preserved_phase_memory": true, + "existing_warden_interpreter": "/home/worsch/.local/share/uv/tools/ops-warden/bin/python3", + "actual_import_path": "/home/worsch/.local/share/uv/tools/ops-warden/lib/python3.12/site-packages/warden/proxy.py", + "module_sha256": "69649bcf8979e4ed7f9104e927b458827a355c4846143367f4cd49c8b89b96da", + "canonical_source_sha256": "69649bcf8979e4ed7f9104e927b458827a355c4846143367f4cd49c8b89b96da", + "matches": true + }, + "verification": { + "focused_proxy_tests_passed": 84, + "ruff": "passed", + "diff_check": "passed", + "whole_suite": "unverified; terminal handle39705 missing, lastobserved sixfailures; no passclaim", + "bounded_firstfailure": { + "status": "terminal", + "exit": 1, + "failed_test_nodes": [ + "tests/test_access.py::test_access_advisory_output" + ], + "raw_output_discarded": true, + "checked_at": "2026-10-15T02:26:14.392407+00:00" + }, + "baseline_comparison": { + "baseline_commit": "1baeb0821cb6304464fab78932d8c6501f8c4cc6", + "changed_module_restored_from_base": true, + "test_node": "tests/test_access.py::test_access_advisory_output", + "exit": 1, + "same_failure": true, + "trace_test_lines": [ + "124" + ], + "cause_categories": { + "AssertionError": true, + "PermissionError": false, + "Read-only file system": true, + "OperationalError": false + }, + "raw_output_discarded": true + } + }, + "original_failure_cause": "unproven", + "prior_revocation": "unconfirmed; no private helper read", + "strict_output_allowlist_changed": false, + "bound_execution_artifacts_changed": false, + "login_or_credentials_or_production_changes": false, + "required_consistency_check": { + "command": "statehub fix-consistency", + "handle": 60825, + "exit": 0, + "result": "PASS with warnings", + "automation_errors": 0, + "assessment_failures": 0, + "warnings": 8, + "bindings_synced": "51/51", + "generated_only_commit_guard": "rejected generated-only writeback commit; guard not bypassed", + "generated_outputs_preserved": [ + ".custodian-brief.md", + "WORK-RECORDS.md" + ] + } +} diff --git a/docs/assessments/netkingdom-2026-10-14/warden-attended-dependency-repair-r1.patch b/docs/assessments/netkingdom-2026-10-14/warden-attended-dependency-repair-r1.patch new file mode 100644 index 00000000..c914b16d --- /dev/null +++ b/docs/assessments/netkingdom-2026-10-14/warden-attended-dependency-repair-r1.patch @@ -0,0 +1,269 @@ +diff --git a/docs/evidence/2026-10-15-cust81-attended-dependency-repair-r1.json b/docs/evidence/2026-10-15-cust81-attended-dependency-repair-r1.json +new file mode 100644 +index 0000000..aa49ca2 +--- /dev/null ++++ b/docs/evidence/2026-10-15-cust81-attended-dependency-repair-r1.json +@@ -0,0 +1,78 @@ ++{ ++ "id": "WARDEN-CUST81-ATTENDED-DEPENDENCY-REPAIR-R1", ++ "revision": 1, ++ "status": "source_preparation_verified_not_live", ++ "reviewed_at": "2026-10-15T02:18:02.246091+00:00", ++ "base_commit": "1baeb0821cb6304464fab78932d8c6501f8c4cc6", ++ "scope": "Existing WARDEN-WP-0036 contained attended login; CUST-WP-0081-T02 dependency. No credential scope or live change approval expansion.", ++ "failed_attempts": [ ++ { ++ "at": "2026-10-15T02:07:41.774194+00:00", ++ "exit_code": 10, ++ "outcome": "login_failed" ++ }, ++ { ++ "at": "2026-10-15T02:10:58.943441+00:00", ++ "exit_code": 10, ++ "outcome": "login_failed" ++ } ++ ], ++ "browser_evidence": { ++ "profile_count": 2, ++ "initialization_mtimes_utc": [ ++ "2026-10-15T02:08:19.576345+00:00", ++ "2026-10-15T02:09:28.109549+00:00" ++ ], ++ "prefs_file_presence_only": true, ++ "profile_contents_read": false ++ }, ++ "cleanup_evidence": { ++ "custody_receipt_exists": false, ++ "bootstrap_receipt_exists": false, ++ "new_session_directory_present": false, ++ "preexisting_session_directory_mtime": "2026-10-14T22:41:38.098938+00:00", ++ "private_helper_read": false, ++ "server_revocation": "unconfirmed" ++ }, ++ "findings": [ ++ "The reviewed owner child never ran: Warden exit10 and absent child receipts.", ++ "Actual failure cause is unknown because captured login bytes were discarded. A 121-second duration is consistent with the Bao callback timeout, not proof.", ++ "Bao 2.5.5 internal helper uses .vault-token; Warden helper name is correct.", ++ "Standard flag parsing stops at auth data, but Bao setupEnv scans global format across argv. Trailing -format=json already chooses JSON output. Moving before role is defensive argv normalization, not a proven timeout fix.", ++ "Warden recovery matcher omitted s. tokens supported by this estate. This fix affects only existing in-memory emergency self-revocation after helper persistence failure." ++ ], ++ "changes": [ ++ "Insert synthesized -format=json immediately after bao login, before auth data.", ++ "Recognize s. in existing recovery-token matcher; preserve exact revoke-self-only use.", ++ "Expose only fixed diagnostic categories, numeric returncode, helper-present and output-shape booleans. Captured content is never surfaced." ++ ], ++ "strict_output_allowlist_unchanged": true, ++ "focused_tests": { ++ "passed": 84, ++ "command": "python -m pytest -q tests/test_proxy.py", ++ "ruff": "passed" ++ }, ++ "preserved_fixture_failures": [ ++ "Initial task fixture omitted registry:50failed31passed; fixed by copying public registry.", ++ "Whole-suite attempt omitted scripts:5 collection errors; actual owner full suite required after integration." ++ ], ++ "knowledge_orientation": { ++ "package_version": "0.2.6", ++ "digest": "8d1d6a9d4d07fec7b619618de7dfe2be2254c1790f85f4198c7fe19db9751c02", ++ "status": "withheld; reviewed current NetKingdom SECURITY-COMPANION, gate-house INTENT, ops-warden AGENTS/INTENT and current Custodian environment source directly" ++ }, ++ "source_references": [ ++ "https://raw.githubusercontent.com/openbao/openbao/v2.5.5/command/main.go", ++ "https://raw.githubusercontent.com/openbao/openbao/v2.5.5/command/base.go", ++ "https://raw.githubusercontent.com/openbao/openbao/v2.5.5/command/login.go", ++ "https://raw.githubusercontent.com/openbao/openbao/v2.5.5/command/token/helper_internal.go" ++ ], ++ "no_login_or_credentials": true, ++ "whole_suite": { ++ "status": "unverified_terminal_output_unavailable", ++ "handle": 39705, ++ "last_observed": "54 percent with six failures; no terminal result consumed by owner worker", ++ "terminal_handle_after_user_abort": "root poll reported Unknown process id", ++ "claim": "No full-suite pass is claimed; 84 focused proxy tests and Ruff passed." ++ } ++} +diff --git a/src/warden/proxy.py b/src/warden/proxy.py +index 1747487..b4eca41 100644 +--- a/src/warden/proxy.py ++++ b/src/warden/proxy.py +@@ -41,7 +41,7 @@ from typing import List, Optional + from warden.routing.models import RouteEntry + + _PLACEHOLDER = re.compile(r"<[^>]+>") +-_OPENBAO_TOKEN = re.compile(rb"\b(?:hvs|hvb|hvr)\.[A-Za-z0-9_-]{8,}\b") ++_OPENBAO_TOKEN = re.compile(rb"\b(?:hvs|hvb|hvr|s)\.[A-Za-z0-9_-]{8,}\b") + _ATTENDED_LOGIN_ROOT = ".warden-attended-login" + _TOKEN_HELPER_NAME = ".vault-token" + +@@ -544,7 +544,7 @@ def proxy_attended_login_exec( + + login_argv = list(resolved.argv) + if not any(arg == "-format" or arg.startswith("-format=") for arg in login_argv): +- login_argv.append("-format=json") ++ login_argv.insert(2, "-format=json") + + try: + try: +@@ -569,9 +569,27 @@ def proxy_attended_login_exec( + "" if output_allowed + else " (login client produced non-allowlisted output)" + ) ++ # Fixed categories and booleans only; captured bytes stay discarded. ++ if login.returncode != 0: ++ if b"timed out waiting for response from provider" in login_output: ++ category = "callback_timeout" ++ elif b"Error handling callback" in login_output: ++ category = "callback_error" ++ elif b"Error authenticating:" in login_output: ++ category = "authentication_error" ++ else: ++ category = "unknown_client_failure" ++ elif not helper_valid: ++ category = "helper_persistence_missing" ++ else: ++ category = "output_shape_rejected" + raise AttendedLoginError( + "attended login failed closed before command handoff" +- f"{reason}; any possible issued session was contained and {status}", ++ f"{reason}; category={category}, client_exit={login.returncode}, " ++ f"helper_present={helper_valid}, " ++ f"stdout_allowed={_login_stdout_allowed(_stream_bytes(login.stdout))}, " ++ f"stderr_allowed={_login_stderr_allowed(_stream_bytes(login.stderr))}; " ++ f"any possible issued session was contained and {status}", + exit_code=10, outcome="login_failed", + ) + +diff --git a/tests/test_proxy.py b/tests/test_proxy.py +index 35cbcee..3078bbf 100644 +--- a/tests/test_proxy.py ++++ b/tests/test_proxy.py +@@ -446,7 +446,7 @@ def test_attended_login_persistence_failure_revokes_and_cleans(monkeypatch, tmp_ + child_argv=["should-not-run"], + ) + assert calls == [ +- ["bao", "login", "-no-print", "-format=json"], ++ ["bao", "login", "-format=json", "-no-print"], + ["bao", "token", "revoke", "-self"], + ] + assert not (tmp_path / ".warden-attended-login").exists() +@@ -716,7 +716,7 @@ def test_attended_login_non_allowlisted_output_direct_raises_value_free( + assert (exc.value.exit_code, exc.value.outcome) == (10, "login_failed") + assert _LOGIN_SENTINEL not in str(exc.value) + assert calls == [ +- ["bao", "login", "-no-print", "-format=json"], ++ ["bao", "login", "-format=json", "-no-print"], + ["bao", "token", "revoke", "-self"], + ] + +@@ -948,3 +948,49 @@ def test_access_agent_high_risk_fingerprint_allowed(tmp_path, monkeypatch): + ) + assert r.exit_code == 0, r.output + assert "should-not-appear" not in r.output ++ ++ ++def test_attended_json_format_precedes_auth_data(monkeypatch, tmp_path): ++ monkeypatch.setattr(Path, "home", lambda: tmp_path) ++ calls = [] ++ def run(argv, **kwargs): ++ calls.append(argv) ++ return subprocess.CompletedProcess(argv, 1, b"", b"") ++ monkeypatch.setattr("warden.proxy.subprocess.run", run) ++ with pytest.raises(AttendedLoginError): ++ proxy_attended_login_exec( ++ ResolvedFetch(argv=["bao", "login", "-no-print", "-method=oidc", "role=platform-admin"]), ++ child_argv=["must-not-run"], ++ ) ++ assert calls[0].index("-format=json") < calls[0].index("role=platform-admin") ++ ++ ++@pytest.mark.parametrize("shape", ["s", "hvs", "hvb", "hvr"]) ++def test_contained_recovery_supports_openbao_token_shapes(monkeypatch, shape): ++ from warden.proxy import _revoke_contained ++ calls = [] ++ sentinel = shape + ".FAKE_RECOVERY_SENTINEL_12345678" ++ def run(argv, **kwargs): ++ calls.append((argv, dict(kwargs["env"]))) ++ return subprocess.CompletedProcess(argv, 1 if len(calls) == 1 else 0, b"", b"") ++ monkeypatch.setattr("warden.proxy.subprocess.run", run) ++ assert _revoke_contained("bao", env={}, possible_output=sentinel.encode()) ++ assert calls[1][1]["BAO_TOKEN"] == sentinel ++ assert all(sentinel not in " ".join(argv) for argv, _ in calls) ++ ++ ++@pytest.mark.parametrize("prefix,category", [ ++ ("timed out waiting for response from provider", "callback_timeout"), ++ ("Error handling callback", "callback_error"), ++ ("Error authenticating:", "authentication_error"), ++ ("unrecognized backend error", "unknown_client_failure"), ++]) ++def test_attended_failure_is_fixed_category_without_client_bytes(monkeypatch, tmp_path, prefix, category): ++ monkeypatch.setattr(Path, "home", lambda: tmp_path) ++ sentinel = "SECRET_CLIENT_OUTPUT_SENTINEL" ++ def run(argv, **kwargs): ++ return subprocess.CompletedProcess(argv, 1, b"", (prefix + " " + sentinel).encode()) ++ monkeypatch.setattr("warden.proxy.subprocess.run", run) ++ with pytest.raises(AttendedLoginError, match="category=" + category) as exc: ++ proxy_attended_login_exec(ResolvedFetch(argv=["bao", "login", "-no-print"]), child_argv=["must-not-run"]) ++ assert sentinel not in str(exc.value) +diff --git a/wiki/playbooks/openbao-platform-admin-login.md b/wiki/playbooks/openbao-platform-admin-login.md +index fbe547b..0cd809d 100644 +--- a/wiki/playbooks/openbao-platform-admin-login.md ++++ b/wiki/playbooks/openbao-platform-admin-login.md +@@ -89,3 +89,22 @@ messages; it should write only approved, value-free evidence to its own receipt. + - Human identity and MFA provider: key-cape / Keycloak + - Database-engine procedure owner: `rapp-postgres` + - Routing decision and founder-act surface: WARDEN-WP-0029 ++ ++## 2026-10-15 contained failure diagnostics ++ ++A failed login now reports only fixed categories (`callback_timeout`, ++`callback_error`, `authentication_error`, `unknown_client_failure`, ++`helper_persistence_missing`, `output_shape_rejected`), the numeric client exit ++code, helper-present and allowed-output booleans. These are observations, not ++authorization or proof of an issued session. The original captured bytes remain ++discarded, and the existing strict output allowlist is unchanged. ++ ++Synthesized JSON-format flags precede positional auth data. OpenBao 2.5.5 also ++scans global format flags across argv; this normalization is not a proven fix ++for the October 15 timeout. Emergency self-revocation recognizes the estate's ++`s.` service-token shape as well as `hvs.`, `hvb.` and `hvr.`. Recovery still uses ++a value only in memory for `bao token revoke -self`, never a new handoff. ++ ++The two CUST81 failed attempts remain failed and revocation-unconfirmed. Fresh ++Firefox profiles prove browser initialization, not callback completion. Source ++receipt: `docs/evidence/2026-10-15-cust81-attended-dependency-repair-r1.json`. +diff --git a/workplans/WARDEN-WP-0036-attended-login-openbao-output.md b/workplans/WARDEN-WP-0036-attended-login-openbao-output.md +index 84b1440..452eb41 100644 +--- a/workplans/WARDEN-WP-0036-attended-login-openbao-output.md ++++ b/workplans/WARDEN-WP-0036-attended-login-openbao-output.md +@@ -8,7 +8,7 @@ status: finished + owner: codex + topic_slug: attended-login-openbao-output + created: "2026-09-01" +-updated: "2026-10-14" ++updated: "2026-10-15" + state_hub_workstream_id: "d844c96e-152d-53fa-bff6-e072125ef66c" + --- + +@@ -111,3 +111,21 @@ Tightened the same day after an independent re-review (containment gap): stdout + the stderr OIDC prompt must start at the first byte (no leading whitespace; + trailing newlines remain fine). The fail-closed and hand-off tests now run through + the CLI and assert sentinel absence from both `access-audit.log` and `audit.jsonl`. ++ ++### 2026-10-15 CUST81 dependency correction (existing T01/T02) ++ ++Prepared source correction after the two CUST81 attended platform-admin attempts ++failed before child handoff. The strict login-output allowlist remains unchanged. ++Synthesized format flags now precede auth data; the recovery-only matcher handles ++OpenBao `s.` tokens; failure messages expose only fixed categories, client exit ++code and helper/output-shape booleans. No credential bytes or URLs are surfaced. ++ ++Do not attribute the observed 121-second failure to the argv order: Bao 2.5.5 ++scans global format throughout argv. Actual callback/auth failure remains unknown. ++Browser profile initialization was verified from metadata only; server revocation ++remains unconfirmed and the failed attempts are retained. No login, admin token ++read, policy application or provisioning was performed by this correction. ++ ++Source verification is distinct from live verification. The already-approved ++CUST81 execution scope and its open attended gate remain with CUST-WP-0081-T02. ++Owner evidence: `docs/evidence/2026-10-15-cust81-attended-dependency-repair-r1.json`. diff --git a/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md.proposed b/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md.proposed new file mode 100644 index 00000000..6de8ab25 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md.proposed @@ -0,0 +1,95 @@ +--- +id: RCLUSTER-WP-0017 +type: workplan +title: "Review NetKingdom signer runtime and node-local storage readiness" +domain: financials +repo: railiance-cluster +status: proposed +owner: codex +topic_slug: railiance +created: "2026-10-16" +updated: "2026-10-16" +flavor: implementation +related: + - CUST-WP-0080 + - FLEX-WP-0024 + - RPF-WP-0035 + - RCLUSTER-WP-0014 + - RAIL-BS-WP-0014 +--- + +# RCLUSTER-WP-0017 — NetKingdom runtime/storage review + +This proposed record is limited to railiance-cluster INTENT: verified healthy +runtime, scheduling headroom, admission/storage constraints and node-local +failure-domain facts for the retained flex-auth signer successor. It does not +own the Access workload, chart, Helm values or release; Platform OpenBao/ESO or +ArgoCD Applications; Enablement ArgoCD installation; Secrets public trust; or +founder approval. It neither reopens completed capacity work nor duplicates +Access implementation. Current single-node storage remains a single failure +domain; ThreePhoenix/Longhorn is not a prerequisite or current capability. + +Origin: CUST-WP-0080 request for independent runtime/storage review of +CCR-2026-0050 and the Access signer rollout. Custodian-side read-only preparation +is historical input, not a prior formal owner disposition. The conflated legacy +cluster-gitops-owner role cannot be accepted by this repo; review the precise +successor source role independently. Founder human approval and distinct owner +reviews remain necessary before every live action. + +## Review exact runtime and storage source boundary + +```task +id: RCLUSTER-WP-0017-T01 +status: todo +priority: high +``` + +Read exact successor source/CCR/rollout/custody revisions against this repo's +INTENT; record a formal runtime/storage-only review under delegated-owner-review +canon once this work record exists in the ownrepo checkout. Authenticate the +actual Platform Applications and Access release responsibilities. Retain source +hashes and current metadata evidence, and keep changes requested visible. A +role rename alone does not supply native acceptance or another owner's assent. + +Preparation evidence: Custodian +`docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/`. +Those observations are dated and must be refreshed at the actual native window. +No formal review or native result is backfilled from this preparation. + +## Review the bounded native preflight and storage action + +```task +id: RCLUSTER-WP-0017-T02 +status: todo +priority: high +``` + +Given actual exact successor owner dispositions and window, independently review +cluster identity, node health/requested/observed headroom, quota/LimitRange, +local-path behavior, admission-defaulted stopped projection and exclusion +checks. Access owns workload stop/start and release rollback; Platform owns any +Application writer freeze. Require exact caller/source/image/fence/expiry pins, +Ready120seconds, recovery decision600seconds, founder abort ownership and +explicit local-storage/outage/loss disposition. This task prepares review and +records unresolved gates; it does not grant execute authority. + +## Verify the approved runtime and storage result + +```task +id: RCLUSTER-WP-0017-T03 +status: todo +priority: high +``` + +Only after separately approved native action, verify the actual bound1Gi PVC +UID, PV UID/name/claimRef/capacity/node affinity and exact Retain readback; +refresh node health/headroom and non-overlap observations. Any runtime/storage +mutation must have its own exact founder approval and scoped executor. The +future bound PV cannot be selected or mutated in advance. Retain is not backup, +node-loss protection or a filesystem quota. Preserve unknown outcomes and the +original evidence; do not reset cursor/outbox, delete PVC/PV or remint custody. + +If native action is not approved, keep this task open with its concrete +unresolved gates. Do not imply rollout/custody/trust acceptance. Complete this +workplan only after source review, bounded preflight disposition and actual +approved runtime/storage result are evidenced, or explicit scope cancellation. diff --git a/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/README.md b/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/README.md new file mode 100644 index 00000000..6c9ec6a4 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/README.md @@ -0,0 +1,51 @@ +# Cluster runtime and storage review R1 + +Reviewer assignment: railiance-cluster only. Existing coordination work CUST-WP-0080-T03/T04; Access implementation FLEX-WP-0024-T06; Platform custody RPF-WP-0035-T12. No new workplan or work acceptance is created. + +Disposition: informal runtime/storage preparation assessed with the conditions below. This is not a formal owner review under delegated-owner-review canon: no suitable open ownrepo work item exists yet. A proposed normal RCLUSTER-WP-0017 draft accompanies this preparation for coordinator review; it has not been written to railiance-cluster and supplies no current owner work reference. Native admission withheld. This is not a cluster/GitOps combined assent, a completed scope-bound approval, founder approval or permission to execute. The proposed signer successor remains separate from canonical local package d52f811/tree d4fbad7 and its frozen extraction2b/current05a baseline. Image84 ordinary CI402 success supports provenance only. + +## Authority boundary + +railiance-cluster INTENT says “Runtime, Not Workloads” and excludes shared stateful platform services and workload ownership. This role can assess node health, scheduling, baseline admission/storage and runtime constraints. It cannot own Access release values, producer/consumer behavior, OpenBao policy/role/ESO delivery, public trust or GitOps Application dispositions. + +Per Custodian environment orientation §7, railiance-platform owns ArgoCD Applications; railiance-enablement owns ArgoCD installation. Access owns its workload/chart/release. Thus the current required `cluster-gitops-owner` slot in CCR0050 and native admission is too broad for this assignment. A reviewed successor may identify a `cluster-runtime-storage-owner` slot, with Platform separately and explicitly covering its actual Applications/freeze scope inside its existing disposition and Access covering its release/workload scope. Enablement is needed if install/controller configuration changes. Such a source/interface amendment needs exact independent review; neither this document nor a renamed string satisfies frozen R1/P2's combined requirement. Do not manufacture another owner's assent. + +The identified Custodian Codex assignment remains supervised with no authority grant. Source preparation and authorized reads do not promote it. Founder approval must bind exact executed source/action, scope, outage/storage/cost/risk, expiry and rollback; prior implementation authorization does not establish custody approval. + +## Current observations + +Metadata-only workstation Kubernetes reads verified node92.205.62.239 and kube-system UIDa553c742-0115-43d4-99a4-a5ca56fe0786 at18:01:45UTC on16October2026. SSH read-only history/filesystem reads followed routing lookup; raw errors were suppressed. No Secret API object, raw Helm values, pod environment, credentials or logs were requested. Full selected observations are in runtime-observation.json and prechange-resources.json. + +* Helm release flex-auth-secrets-engine in flex-auth: revision4 deployed, chartflex-auth-0.2.0/app0.1.0; revisions1–3 superseded. Revision4 is an observation, not an executable rollback authorization or complete allowlisted values capture. +* Deployment UIDf83a5f5c-7dd7-4aac-bc02-d447e423e6ae, generation4/observed4, one desired/Ready/available pod, Helm ownership, RollingUpdate with25% surge/unavailable. Image is immutable05a03a8790c2210c48ea92391441c77ddf640d0cd32f5ec09838f5393171fcbd. Requests25m/32Mi; limits300m/192Mi. +* Four owned ReplicaSets were selected by ownerReference UID; one has one replica, three zero. The one signer-SA pod is Running, not terminating. This is expressly not a stopped fence. No HPA exists in flex-auth at observation time. +* No ResourceQuota, LimitRange or PVC exists in flex-auth. This establishes no namespace-enforced storage quota at that time; it is neither unlimited physical capacity nor an allocation approval. local-path UIDdb77292f-e67a-4032-95b4-a88d3321185b uses rancher.io/local-path, Delete, WaitForFirstConsumer. +* Node healthy/Ready, pressure flags false. At18:02UTC: CPU requested3580m/4000m leaves420m requestable; memory requested9760Mi; usage2129m CPU/8933Mi memory. CPU limits37500m and memory limits34242Mi are overcommitted. Free bytes on the filesystem containing /var/lib/rancher/k3s/storage:125827354624. These snapshots must be refreshed at the actual window and do not reserve headroom. +* Ten ArgoCD Applications were listed, none destination flex-auth and none status-resource referencing the signer Deployment. The informed-decision Application references two flex-auth NetworkPolicies, and shows OutOfSync. Listed Applications have no automated sync block. No direct signer Application adoption was observed; absence of status refs/labels does not prove no manual Helm, CI, hooks, external automation or future adoption writer exists. Platform must authenticate actual controller/writer scope; do not freeze or modify unrelated Applications on this evidence. + +## Exact source review and needed successor + +Reviewed the rollout-r1 activation/stopped/retained render and diff, manifest, projection and proposed exclusive window; native-adapter-r2 and native-packet-p2 documentation/pins; source CCR0050; target architecture/implementation and environment instructions. Input SHA256s are retained in review.json. This review remains tied to those bytes. + +Rollout R1 proposes Recreate, single writer, immutable09a83b273740133518cc7e7915fb211381e06545d347d2dd1974042525ac981f image, seed directory read-only0440 UID/GID/fsGroup65532, unchanged25m/32Mi requests,64MiB process ceiling,1Gi RWO local-path PVC/Helmkeep. These are suitable source constraints for further native preparation. RWO and Recreate alone do not prove single-process exclusion. Source rendering is not admission defaulting, server dry-run, live diff or a held fence. + +R1 chart rejects outbox replicaCount other than1; stopped YAML is derived after rendering. Installing activation values then scaling risks a signer starting before custody/trust and is unacceptable for the proposed order. A proposed Access successor allowing only numeric integer replicas0 or1 when outbox is enabled can make maintenance representable through the normal Helm path. Its exact implementation, numeric type handling and renders require independent review. Do not approve a future patch by assumption. Reject booleans, strings, fractional values, negative values and values greater than1; `int` coercion alone does not establish this. Require0/1 accepted render cases, invalid inputs refused, Recreate retained, and identical candidate pod-template projection across stopped/ready states. The reviewed actual native stopped projection must equal the selected source projection after admission/defaulting; any mismatch requires explicit reconciliation and review. + +Changing chart/source, admission owner slots, window shape or source pins requires a successor rollout and completed successor scope/P2 pins. Keep frozen R1/P2 and counterexamples unchanged. CCR0050 is still proposed with bound_claims_confirmed=false and empty evidence/review comments; its data-read grants document-level access despite one projected private field. Read-lane, one-use custody writer, public admission and deployment/storage approvals remain distinct. Runtime review supplies none of those grants. + +## Required exclusive window and minimum native preflight + +1. Collect independently authenticated Access, Platform, Secrets, runtime/storage and founder dispositions for exact completed successor bytes. Resolve the actual GitOps/controller scope as above. Pin absolute start/end/expiry, exact approved source/image/projection/trust/CCR hashes, named executor, founder abort owner, Ready timeout120seconds and recovery-decision bound600seconds. Native cost/risk loss ceiling remains unapproved; preparation costs EUR0 incremental infrastructure. +2. Reverify cluster/node/backend identity and exact Deployment UID/release revision/current allowlisted values. Refresh health, allocated and actual resource use, free storage, quota/limits and StorageClass metadata. Review exact client-side diff and server dry-run through a sanitizer which suppresses object/error dumps; never run these against unfiltered Secret manifests. Record admission mutations and resolve them before custody. Confirm immutable image pull/runtime availability without starting a signer. +3. Access authenticates affected protected-consumer acceptance is stopped before template/custody changes. Access freezes manual Helm/CI/release actors; Platform authenticates and freezes any actual Application/GitOps writer under its authority, recording exact identity, prior state, no in-flight operation, expiry and restoration criteria. No broad ArgoCD shutdown is inferred. Check namespace workloads, jobs and autoscalers for any signer-SA/seed use or second signer; any unknown writer or unaccounted pod holds the fence closed. +4. Through separately approved exact maintenance Helm path, install candidate template at replicas0. Observe Deployment generation caught up and zero desired/status replicas, all UID-owned ReplicaSets spec/status0, and no live or terminating UID-owned, signer-SA or seed-mount pods. Labels alone are insufficient. Hold the same exclusive window across custody/delivery/public admission; repeat exact native projection/fence immediately before CAS. Current running state fails this gate. +5. Before PVC create, explicitly approve1Gi local-path request and storage risk. WaitForFirstConsumer requires the reviewed binding/start step with protected consumers still fenced. Capture actual PVC UID, PV name/UID, claimRef UID, capacity and node affinity; have the authorized runtime/storage executor set and verify this exact PV Retain before durable acceptance. Do not predict identifiers or patch arbitrary claim-selected PVs. Helmkeep does not protect manual deletion or undo Delete reclaim;1Gi request is not a hard filesystem quota, backup or off-node recovery guarantee.64MiB process enforcement still needs native proof. +6. Platform owns separately approved read-lane/native binding, attended exact-source CAS0 ceremony, public receipt and delivery readback; Secrets independently admits public trust/verifier/caller. The child120second absolute bound, founder identity and five authenticated dispositions remain gates. No post-login extension, CAS retry/remint or private-key observation is permitted. Only after custody/trust/delivery gates and binding/Retain proof may the exact separately approved replica1 start proceed, with consumers still fenced until native signed ALLOW/DENY, caller negatives, durable restart/sequence/cursor and storage failure proofs pass. + +## Abort and rollback retained + +Founder aborts. Missing identity/owner approval, competing writer, insufficient headroom, quota/binding/Retain uncertainty, projection drift, surviving/terminating signer pod, child timeout, ambiguous CAS/readback/receipt fsync, Ready beyond120seconds or recovery decision beyond600seconds keeps acceptance fenced. Preserve original unknown receipt and logs/cursor/PVC; do not retry CAS0, remint, reset evidence or restore seed. + +Access stops candidate and verifies every relevant pod gone and lock released. Preserve bound volume and originals. Helm revision4 is now a captured prechange candidate, but restoring it requires exact allowlisted image/config and outbox-format compatibility review; no rollback command is authorized here. Old05a unsigned availability cannot satisfy signed consumer. If format/exclusion is uncertain, remain unavailable. Restore each competing controller only when its recorded owner restoration criteria are met. Compromise requires public trust withdrawal and separately approved forward-only successor, never old-seed restoration. No uninstall, PVC/PV deletion or policy/trust weakening. + +No native mutation, stop, PVC creation, controller freeze, policy/grant change, credential access, founder disposition or other-owner approval occurred in this review. diff --git a/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/formal-review-progress-receipt.json b/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/formal-review-progress-receipt.json new file mode 100644 index 00000000..17f40546 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/formal-review-progress-receipt.json @@ -0,0 +1,7 @@ +{ + "posted": true, + "id": "5500bf8c-1a99-4c54-9293-a3028c1ec42d", + "workplan_id": "f383557d-c8a8-553e-adcd-9f82ff9c2929", + "task_id": "6ee408cd-c055-532d-bc80-f64c9bdf143b", + "summary": "RCLUSTER-WP-0017-T01 fresh own-checkout formal source reviews approve only exact PlatformR5 owner-boundary manifest78003b1b and Access rolloutR2 manifest5be7a7f4 runtime/storage preparation. Independent exact archive Helm renders/projection checks pass; WFFC no-wait maintenance and conditional stopped-revision rollback captured. Cumulative ownrepo evidence/AGENTS-prefix patch prepared for coordinator; canonical untouched, task source scope still awaits successor custody packet. No native/CCR/founder/other-owner assent." +} diff --git a/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/formal-source-integration.json b/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/formal-source-integration.json new file mode 100644 index 00000000..9726e12d --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/formal-source-integration.json @@ -0,0 +1,25 @@ +{ + "commit": "2c98c637950164779d89a0b4eda194cbfd82b283", + "repo": "railiance-cluster", + "files_sha256": { + "AGENTS.md": "sha256:5cc7808a6d0e5cdebc7b3f13a0d7dce9cee5441ed6de4703b67cf3fe1800d45b", + "workplans/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md": "sha256:bd925a81a111f79022a1d510edf5395ca90e45c78c32b237195e50d65a4494ee" + }, + "patch_sha256": "sha256:e9f9ab901512af08d502b20f2ad996295d59e426edbbfae4284c76602bd14681", + "observed_at": "2026-10-16T18:37:53.804219+00:00", + "source_review_completed": true, + "native_preflight_accepted": false, + "native_action": false, + "published": true, + "normal_sync": { + "session_id": 92747, + "exit_code": 0, + "bindings": "22/22", + "assessment_fail": 0, + "automation_error": 0, + "warn": 44, + "info": 8, + "generated_only_commit_refused": true + }, + "committed_hashes_verified": true +} diff --git a/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/helm-maintenance-semantics.json b/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/helm-maintenance-semantics.json new file mode 100644 index 00000000..f02edbd3 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/helm-maintenance-semantics.json @@ -0,0 +1,17 @@ +{ + "checked_at": "2026-10-16T18:30:14.773749+00:00", + "source": "installed helm upgrade --help", + "relevant_lines": [ + "--atomic if set, upgrade process rolls back changes made in case of failed upgrade. The --wait flag will be set automatically if --atomic is used", + "--cleanup-on-fail allow deletion of new resources created in this upgrade when upgrade fails", + "--force force resource updates through a replacement strategy", + "--no-hooks disable pre/post upgrade hooks", + "--reset-then-reuse-values when upgrading, reset the values to the ones built into the chart, apply the last release's values and merge in any overrides from the command line via --set and -f. If '--reset-values' or '--reuse-values' is specified, this is ignored", + "--reset-values when upgrading, reset the values to the ones built into the chart", + "--reuse-values when upgrading, reuse the last release's values and merge in any overrides from the command line via --set and -f. If '--reset-values' is specified, this is ignored", + "--wait if set, will wait until all Pods, PVCs, Services, and minimum number of Pods of a Deployment, StatefulSet, or ReplicaSet are in a ready state before marking the release as successful. It will wait for as long as --timeout", + "--wait-for-jobs if set and --wait enabled, will wait until all Jobs have been completed before marking the release as successful. It will wait for as long as --timeout" + ], + "inference": "A WaitForFirstConsumer claim can remain Pending at replicas0. --wait can time out; --atomic implies --wait and may rollback a maintenance upgrade to the running predecessor, violating the desired fence. Stopped maintenance must have reviewed non-atomic no-wait and no-hooks/reset-values semantics, with explicit failclosed manual recovery; success is not native fence proof.", + "native_execution": false +}