docs: preserve reviewed NetKingdom session artifacts
Some checks failed
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 2s
Reject generated-only commits / generated-commit-guard (push) Has been cancelled

This commit is contained in:
codex 2026-11-01 22:37:53 +01:00
parent 3ca8bb63a2
commit 5f86a2f1f9
50 changed files with 3251 additions and 0 deletions

View file

@ -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
}

View file

@ -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}

View file

@ -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"
}

View file

@ -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"
}

View file

@ -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"
}

View file

@ -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
}

View file

@ -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"
}

View file

@ -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
}

View file

@ -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
}
]
}

View file

@ -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."
}

View file

@ -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"
}

View file

@ -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"
}

View file

@ -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
}

View file

@ -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<requested100 stops early under server page cap; sameproposalR2 fix/testing in progress. Initial owned-only endpoint concern corrected after model implementation trace; /user/repos includes collaborator/team grants."
},
"mason": {
"patch": "owner-assembly/mason-r2/owner.patch",
"patch_sha256": "c412d12ade1ed2d8eac235dda7eec222c66ee7f0ce512feaf47f7b13d63a6884",
"revision": 2,
"spec_sha256": "59a7334eb58135790547fab0a8c8e8debb94cc7acaae88d30654c9ae887d6732",
"r1_preserved": "owner-assembly/mason-r1"
},
"reuse": {
"patch": "owner-assembly/reuse-r1/review/reuse-owner-preparation-r1.patch",
"patch_sha256": "da9634481ce80658dfce815d3539ba023234938dc76163dfd93d7677be95ed51",
"federation_source_sha256": "dbaa40f25cc0f090143578cd1c7068cb2cb00960fafd17d5239bf8a5bac514dd",
"suite": {
"passed": 227,
"failed": 0,
"fixture": "task-owned nested checkout with60 local indexes and39 anonymous caches; no live credential verification",
"prior_failures_preserved": true
},
"owner_review": "baseline changes_requested; prepared candidate requires integration and fixedimage runtime verification"
},
"crosscheck": "Mason and reuse allowlists semantically match exactly14 consented pinned metadata URLs; policy difference is explanatory CCR comment only. Native code unchanged across reuse evidence refinement, finalpatch hash supersedes old preparation patch hash.",
"pending_workers": [
"/root/platform_reader_owner",
"/root/apps_reader_owner",
"/root/forge_reader_owner"
],
"remaining": [
"Owner primary identifier collision recheck and patch integration",
"Forgejo target API/Q1-Q3 review and runtime metadata evidence",
"Apps fixedimage/configuration/rollout review and existingauthenticatedsource inventory/migration",
"Exact founder credential and deployment approval",
"Native seven index+entry fetch receipts",
"Seven registrations and fresh all70 exactonce hosted audit"
],
"current_execution_ready": false
}

View file

@ -0,0 +1,20 @@
{
"created_at": "2026-10-14T22:36:00.392667+00:00",
"proposal": "docs/assessments/netkingdom-2026-10-14/private-reader-provisioning-preparation-r1.json",
"proposal_sha256": "7819eb51d249f5c7aff4df9fb520afcfb76603b05a4104439499102b6c20af99",
"evidence_file_hashes_verified": true,
"messages": [
{
"to_agent": "railiance-platform",
"id": "836a8502-69fd-400a-afcf-c8b04bc38d53"
},
{
"to_agent": "ops-mason",
"id": "c0c6762d-3088-4981-8022-f3c24a03986e"
},
{
"to_agent": "reuse-surface",
"id": "5b8acc6c-d3b1-4d40-9207-ff7dd2ef12f3"
}
]
}

View file

@ -0,0 +1,78 @@
{
"id": "CUST81-PRIVATE-READER-PUBLICATION-STATE-R1",
"checked_at": "2026-10-14T23:44:45.219608+00:00",
"owner_sources": [
{
"repo": "reuse-surface",
"status": "published_and_projected",
"receipt": "owner-assembly/reuse-source-publication-r1.json",
"sha256": "c41b3834d0ac9ca4ad296093aad7bd92c1a6efb99301c9654a73ac061a9db332"
},
{
"repo": "railiance-platform",
"status": "published_and_projected",
"receipt": "owner-assembly/platform-source-publication-r1.json",
"sha256": "39b3bf6dc72fddd885feb908965e2eb960315153ecf79306bd8c6a59f5091931"
},
{
"repo": "railiance-forge",
"status": "published_and_projected",
"receipt": "owner-assembly/forge-source-publication-r1.json",
"sha256": "bb235abf31e6f51ce96e5c84c6f2b22b1f451a79f040a90a7265d996d6e9ec67"
},
{
"repo": "railiance-apps",
"status": "published_and_projected",
"source_commit": "4e8e0f5",
"binding_commit": "6a8a54d",
"blocked_blob": "f65ad72630b051430358e8e9916b137059ae762e",
"file": "docs/assessments/cust81-private-reader/preparation-manifest-r2.json",
"reason": "Forgejo pre-receive secret scanner finding; classification pending; no bypass",
"published_commit": "05f654e20f7ea68471e586d7892e25441c65875d",
"remedy": "Verified manifest hashes qualified sha256:<hex>; 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
}
}

View file

@ -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"
]
}

View file

@ -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."
}

View file

@ -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."
}

View file

@ -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"
}

View file

@ -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: <actual UTC timestamp>
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: <actual ready reuse-surface pod>
pod_uid: <actual UID>
kube_api_server: <actual checked railiance01 kubeconfig server URL>
```
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 <actual-approved-execution-receipt> --rollout-proof <actual-rollout-proof> --native-proof <actual-native-fetch-receipt> --kubeconfig <owner-approved-railiance01-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.

View file

@ -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)

View file

@ -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"
}

View file

@ -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"
}
}

View file

@ -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."
}

View file

@ -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"
}

View file

@ -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"
}
}

View file

@ -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"
}

View file

@ -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"
}
}
]

View file

@ -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: <actual UTC timestamp>
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: <actual ready reuse-surface pod>
pod_uid: <actual UID>
kube_api_server: <actual checked railiance01 kubeconfig server URL>
```
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 <actual-approved-execution-receipt> --rollout-proof <actual-rollout-proof> --native-proof <actual-native-fetch-receipt> --kubeconfig <owner-approved-railiance01-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.

View file

@ -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
}

View file

@ -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)

View file

@ -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()

View file

@ -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
}

View file

@ -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
}

View file

@ -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
}

View file

@ -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"
}
]
}

View file

@ -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."
}

View file

@ -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"
}

View file

@ -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
}

View file

@ -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"
}

View file

@ -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
}

View file

@ -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

View file

@ -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"
]
}
}

View file

@ -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`.

View file

@ -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.

View file

@ -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.

View file

@ -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."
}

View file

@ -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
}

View file

@ -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
}