Record reviewed case source evidence (13/13)
Some checks failed
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Reject generated-only commits / generated-commit-guard (push) Has been cancelled

This commit is contained in:
codex 2026-10-17 22:36:49 +02:00
parent e9dc1a0f90
commit 0c21cf1b69
16 changed files with 1954 additions and 0 deletions

View file

@ -0,0 +1,14 @@
{
"workplan_id": "e31f3f9d-0748-5137-b0a3-7b3ca46a66eb",
"id": "be95b020-5ce9-423b-a859-47b36c6d6247",
"topic_id": null,
"task_id": "200bf500-5084-5ae7-be26-3033fe1f296e",
"decision_id": null,
"event_type": "note",
"summary": "Published net-kingdom342a6f25 and befb0bc68cd25b625804fce559476eefd702521d; normal allocator source/primary readback verifies35NK48 tasks, all31 original UUID/status bindings unchanged. Added T32done independent agent-mint guard regression, T33done exact proposed issuer-template reference only, T34progress real Apps inverse backend missing, T35done byte-bound valid synthetic catalog fixtures. Canonical guarded current-kernel tests31passed/53subtests; unresolved Apps sessions correctly refuse. Parameters, seven descriptors, canonical1.1/default and1.2 unchanged;1.3 remains proposed, regenerated artifact byte-identical. Corrected inverse prototype requires fresh authenticated inverse session, but actual durable journal/all-release-writer exclusion/session backend absent under existing AppsT05; no owner assent or native acceptance. Existing T16/T06 and all16target native gates remain open. Evidence: dated nk48-current-source-publication-r3/verified-task-bindings.json and nk48-r5-f3-implementation-r2.",
"detail": null,
"author": "codex",
"session_id": null,
"created_at": "2026-10-17T20:02:37.226055Z",
"workstream_id": "e31f3f9d-0748-5137-b0a3-7b3ca46a66eb"
}

View file

@ -0,0 +1,14 @@
{
"workplan_id": null,
"id": "baafd842-a280-4bc1-8857-a1da0f4e9b62",
"topic_id": null,
"task_id": null,
"decision_id": null,
"event_type": "note",
"summary": "Platform source-only coordinator completion: published104ed90f42a9a86bf9fda343b49b65a85c9ee4b9 with proposed fixed issuer ClusterSecretStore openbao-keycape-{client_id}-issuer restricted to sso, exact ESO template, pure metadata helper and8passing tests. Independent source review accepts exact source fit, not formal owner assent, installed ESO compatibility, grant/custody or native authority. NK proposed1.3 now pins exact template digest; no parameters or descriptors changed. Actual RPF-1.3-T4 deliver/remove/authenticated provenance/session capabilities remain unimplemented; that label exists only in owner-review JSON, so no fabricated Platform task/workplan is used for this progress event. No live or credential action; source and unrelated staged brief/WORK edits preserved. Evidence: dated nk48-r5-f2-publication-r1 and nk48-issuer-reference-integration-r1.",
"detail": null,
"author": "codex",
"session_id": null,
"created_at": "2026-10-17T20:02:37.369532Z",
"workstream_id": null
}

View file

@ -0,0 +1,937 @@
{
"exit_code": 1,
"commit": "d68d131e32c523fcf989fa0e7ad44b60b33c6067",
"base": "d68d131e32c523fcf989fa0e7ad44b60b33c6067",
"files": [
{
"path": "docs/changes/netkingdom-target-2026-10-17/key39-infra-finalization-r1/finalization-recheck-progress.json",
"sha256": "a8a2142632f0bf5adc0148542c71b68a9a95e6b98730f5f3b825d6ca945f2d69"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/key39-infra-finalization-r1/finalization-recheck.json",
"sha256": "de18dc982213742c86d9b1e21af778a587275d84da128f76d8768204d3f6fee4"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r1/apply_prepare.py",
"sha256": "b294e6339e8c9af9ba911667646dd0ab52e75cf798de93238d84d1057c8a9e70"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r1/candidate.patch",
"sha256": "df69fb2ec9f1e1cf0dd94194e3c046c995ed8a7deabf65a8e9bec34662adb501"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r1/preparation.json",
"sha256": "c6fc0d7393fc40607ee8157ad2c1f92c73549fb8b52abedc517aac27c9137370"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r1/publication-inputs.json",
"sha256": "d9bf5555013aa9e399037672c80a72af23c6815db03088bee3db4c8583197146"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r1/run_validation.py",
"sha256": "16236aa55a774f8ea6d66da4ee17f7737c6d1b013d844ca9b9759e02b615af51"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r1/task-T35.md",
"sha256": "7d14d261ffbab2a930c4a3ff962cec786060cad6177280773cf1c0b0f006127f"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r1/validation-child.py",
"sha256": "6bd4e3cda22e65f90bbb4006b403270405947293be2ae8bf8fdade0abed61f45"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r1/validation-guard.py",
"sha256": "13611f4de25dc7d01348905c4b365a0ffbb95fd93a61c75c8faf38d705c54f50"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r1/workplan.candidate.md",
"sha256": "3bce122c5b83d9044b142fc2cabc48de5558ab0d65dc0223a8ed0325f219e981"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r1/workplan.preimage.md",
"sha256": "f92962c5aa21aade0fc2f6b4f8d9a95932fe85b107413cdd2824b6ebe72c36d9"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/apply_prepare.py",
"sha256": "b294e6339e8c9af9ba911667646dd0ab52e75cf798de93238d84d1057c8a9e70"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/candidate.patch",
"sha256": "df69fb2ec9f1e1cf0dd94194e3c046c995ed8a7deabf65a8e9bec34662adb501"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/canonical-validation.json",
"sha256": "12748c25e4177a7e8e38edce9e53ae683c6f4b4369314a5db0d7e2cc1659fc29"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/identifier-assignment.json",
"sha256": "1f78bf76592aea84c50dbb3b7181d703b41abdb60937833db30632395cf06673"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/identifier-preview.json",
"sha256": "5f28c6fa85de2e9bafbbd5f567c8c755aabfb3fdf4224cac05c1762910ccd512"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/preparation.json",
"sha256": "c6fc0d7393fc40607ee8157ad2c1f92c73549fb8b52abedc517aac27c9137370"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/publication-inputs.allocated.json",
"sha256": "33dac5218d7b54756b05fea6e1ea885dfc45634896fa3a45b543f9a46dc7afe9"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/publication-inputs.json",
"sha256": "0820bbf9c40eda750e2fc374b43745a0ca82c076c9467f1f3e5c26350dd8db9f"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/revision-refresh.json",
"sha256": "a5b341694aaeb84ef8cc7b76eeff3ba7a97f7cc24eb1e2158d3e85ed901c5667"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/run_validation.py",
"sha256": "16236aa55a774f8ea6d66da4ee17f7737c6d1b013d844ca9b9759e02b615af51"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/task-T35.md",
"sha256": "7d14d261ffbab2a930c4a3ff962cec786060cad6177280773cf1c0b0f006127f"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/validation-child.py",
"sha256": "6bd4e3cda22e65f90bbb4006b403270405947293be2ae8bf8fdade0abed61f45"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/validation-guard.py",
"sha256": "13611f4de25dc7d01348905c4b365a0ffbb95fd93a61c75c8faf38d705c54f50"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/workplan.allocated.md",
"sha256": "53f9e5826bd7e34287d59f46089ee50c31598ba1a56bcf6d3249525f7e23bb9b"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/workplan.candidate.md",
"sha256": "3bce122c5b83d9044b142fc2cabc48de5558ab0d65dc0223a8ed0325f219e981"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-publication-r2/workplan.preimage.md",
"sha256": "f92962c5aa21aade0fc2f6b4f8d9a95932fe85b107413cdd2824b6ebe72c36d9"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-update-r1/candidate.patch",
"sha256": "df69fb2ec9f1e1cf0dd94194e3c046c995ed8a7deabf65a8e9bec34662adb501"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-update-r1/edit.py",
"sha256": "da1fef62073b92b59307e9f52115fa4fa784b260b5202db9d28fc62938982040"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-update-r1/implementation-r1.json",
"sha256": "be1e23dc29be795fb9cdd96172d288a83338c2c0f0cef45d6f29f974d83857df"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-update-r1/run.py",
"sha256": "8ad707bd9bb509e4b27503c284cee8aff3a7205882ca87febdace0a050c5f749"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-catalog-fixture-update-r1/test_runner.py",
"sha256": "d6f4e8f0f5c34557bf678543ae2c69202dc321f1226c2e1a2d462b2d81efc9c5"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-current-source-publication-r3/canonical-validation.json",
"sha256": "0e3cf1ad47f8aa486e8a6704563dfb548a59b7c19f1c7c639e0599a1cc026cb9"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-current-source-publication-r3/consistency.json",
"sha256": "b76e4abfa87880dedb40f3bc87caed622237678c8745a26d34f4a70cb06ed242"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-current-source-publication-r3/consistency.stderr.txt",
"sha256": "f4a6aa1609a13600a0b97cbb08bbc03b3e247b619ff37912d37f7e109ce798ba"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-current-source-publication-r3/projection.json",
"sha256": "454680e758b154d8439cd9d458e9fb8b29dbff4fc501eaf2ea9b6b3c5147b057"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-current-source-publication-r3/projection.stderr.txt",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-current-source-publication-r3/publication-commit.json",
"sha256": "0e51461bb6934d3bf68d9c49023b0f2d7f10f451137cfe6e36a9c1000aa0972a"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-current-source-publication-r3/publication-inputs.final.json",
"sha256": "8885f9a3561d5a48dc1cde11a86b374d65d5d81f32b8ef684e73a22bd0200c1c"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-current-source-publication-r3/publication-inputs.json",
"sha256": "a0dcaecd1af428c4bfe6176d77d4595f260f351b4ddb61766141f6e8ba5db62c"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-current-source-publication-r3/run_validation.py",
"sha256": "16236aa55a774f8ea6d66da4ee17f7737c6d1b013d844ca9b9759e02b615af51"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-current-source-publication-r3/validation-child.py",
"sha256": "6bd4e3cda22e65f90bbb4006b403270405947293be2ae8bf8fdade0abed61f45"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-current-source-publication-r3/validation-guard.py",
"sha256": "13611f4de25dc7d01348905c4b365a0ffbb95fd93a61c75c8faf38d705c54f50"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-current-source-publication-r3/validation-inputs-refresh.json",
"sha256": "7c359c9c05b1d5737166b59686eb765e4ba2e34497290a921704e0becdceb4a3"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-current-source-publication-r3/verified-task-bindings.json",
"sha256": "610ef9e256a8be8ada2af16d71675af53aecd9340436140936f93b1432fd1c43"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-issuer-reference-integration-r1/apply.py",
"sha256": "98285ff57389e37fa1f5d8d0f1b3fcbea9c7fad7927e6ee29fb890c4696e3877"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-issuer-reference-integration-r1/composition-regenerated.json",
"sha256": "773daa1df72cc7cf6a6d8aa082208181ca2438cdecc9179b1bc5b1c3a09099c2"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-issuer-reference-integration-r1/initial-syntax-failure.py.txt",
"sha256": "2f9d6e97df945195225573e976b4d809c784d51a59bc1611db8ad0b9fff92fd3"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-issuer-reference-integration-r1/type.preimage.yaml",
"sha256": "e75fe94110ef9fb7fb18072fe2856941b33507c99cb406d36576046481485d0a"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-issuer-reference-integration-r1/verification.json",
"sha256": "9092dc8d772155b1a68fb23095b45233727d718eb8e255dd6894a518bd50f01c"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-issuer-reference-integration-r1/workplan.preimage.md",
"sha256": "53f9e5826bd7e34287d59f46089ee50c31598ba1a56bcf6d3249525f7e23bb9b"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/README.md",
"sha256": "78a4dbef0088f18db2b9c1dbe701b3e8a2c20516ae6d2039420a82b8d6b1fe66"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/canonical-application.json",
"sha256": "f3e08764dac6d407beb33b22afe9c154efd761c4f12f6b3d4941fc6b9076a233"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/canonical-net-kingdom-status-after.txt",
"sha256": "354b3dd65c711df0855c22ba053a4ca295d5491941c5a64c1157a0b7d43cf4cb"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/canonical-validation.json",
"sha256": "232416ea6fc095e868ec0f2af34a6b9c44885561b98cba2576ff72a49fc71bb4"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/implementation.json",
"sha256": "33d51784fe3ab7d9307292a265b0e684a8bc2fc77564ba58099833e41c849306"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/manifest.json",
"sha256": "9e137321abde7c2997f30a4ae7978883879c194a4c70c80ebf64d1972ecd66d5"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/preimage-frozen.txt",
"sha256": "63dd3d754896c0e8578d82f98ae6f8e460a6ac43f3937a95fa61f65f8aa4accf"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/preimage-mutant.txt",
"sha256": "6c823ed279c355a34169d7753817256890d56fe4a1996ea59aa01fb19e5a5e1f"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/reproduce-scratch-checks.py",
"sha256": "8f0b01e606c03b3b27b178df60eab664a758df6fa3f9b1bc62ef8b58122c2cd8"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/scratch-kernel-mutation.patch",
"sha256": "dd12c63bd331b8f127149c402077e49fc66d62a452f48044486f58e79e0e29f7"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/scratch.json",
"sha256": "7e329154c5c60528d9f4387f0bbc9cfb4167c79decd49b14497e67d59e21e469"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/successor-frozen.txt",
"sha256": "275324dcf33eb852eb467832ff18fe9dd09f09d64d6ac37b43bf01766ea745d3"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/successor-mutant.txt",
"sha256": "9f03083de5863b3855e533b94671cfbab6fd0dd565e0a0b8c385d51d9510d97c"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/test-admit-1-3-agent-mint-coverage.patch",
"sha256": "5bc1da176836eea65195cfe5fae965284c1f38809a502a0be58c231b60111a75"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/test-results.json",
"sha256": "2aab986ed96fb9fa683992051ffe6ec7b2a9327d816542b908dcc66f9dd8df23"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/test_admit_1_3_type.after.py",
"sha256": "c512ba00513d066fd1ca8af08fd6bf106fbd7a132981b1dcc5af80a745ab03f0"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f1-implementation-r1/test_admit_1_3_type.before.py",
"sha256": "f4f6a35cfbada462c939fe357e51fa5d03efc9d20c17a511f224c1359ca0faa5"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/OWNER-REVIEW.md",
"sha256": "7983fd841f09bc7584047426912c33d568c97b4c1126776f99aac42b34d2b742"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/canonical-source-readonly-state.json",
"sha256": "129d6926bb996e510ab4b41d30e738096b53b71de1fb2dd470fe0ac94848cbec"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/focused-tests.json",
"sha256": "8de5862a8d752dce0b3b96a9275e42952a99415a18d3f67c06bf9f5b6008d0e3"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/focused-tests.txt",
"sha256": "aab46c51d87198ad4be6dd3078f61286e2faf1ef4d76fa14298698388f78ab24"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/manifest.json",
"sha256": "754531fbef468bc0e432bd26d4dbed992294c34d57e23fe7c3b7f829f7a24ba4"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/netkingdom-entry-point.conditional.patch",
"sha256": "6784a21fbd10bd62712be2e0f4929034601c94629aa74ccaa2e93fc815eecd61"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/platform-candidate/docs/keycape-issuer-eso-contract.md",
"sha256": "7f59e59b17c58252982931ac61fe50dd7a07340add6c437fe48af36971eafe68"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/platform-candidate/manifests/templates/keycape-issuer-eso.yaml",
"sha256": "e17498bd8a4c820041a4105e4efe9c60c6a50953db8f621ff54887080065c743"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/platform-candidate/scripts/keycape_issuer_eso.py",
"sha256": "21c5797280c2a7825dbda8ac970d34a0cdef4c6458f68bce0b1c12407f122a87"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/platform-candidate/tests/test_keycape_issuer_eso.py",
"sha256": "223d4c5b349062b9f93e6af79e8d5feda44377ba41a11726f6f2b762691e8308"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/platform.candidate.patch",
"sha256": "a490df7dee41e15351da8d2906e1342edebb533984befe3d9ae74d952dbb091b"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/review.json",
"sha256": "d99db9ab4f326308cde464129bbbb7573434e500fd03c130a37a590bac3643a4"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/source-pins.json",
"sha256": "6e896b6196a0aca01ddaf433b4d14cc041fc0296c5dd6404c3a698b941b61bd8"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/structural-and-patch-checks.json",
"sha256": "a3dc4cd405c412d4369986cc6736cd2d9eed02d4b86d95d62d5a9914106fdb14"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/type.before.yaml",
"sha256": "e75fe94110ef9fb7fb18072fe2856941b33507c99cb406d36576046481485d0a"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/type.candidate.yaml",
"sha256": "ef02ddae3167bdd1558193a5f6db0379fb8cc84207531706d5ef35caabc3684f"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/README.md",
"sha256": "522392bd35d2e0b22fd097509361d1476200a361c2ced22603d43e5758aa691d"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/canonical-validation.json",
"sha256": "2f81d70761b154b042d09321cb3b04e0d30d5f9ce79be05503870d245423bbf5"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/consistency.json",
"sha256": "1543d1dcd86706889463e3d0915d1a9aa02b72c3861400a010df44ed4c9b392a"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/consistency.stderr.txt",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/integrate_platform.py",
"sha256": "ef8a1647e54013c0c6f2c11c8f74ef43fc97ceaca99e8f8caa89ee16ff80efba"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/integration-checks.json",
"sha256": "0ab8b058414dde1be9c7fd6ee2cb3f246e4deef2036d17472e846fae23bba4b9"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/manifest.json",
"sha256": "c52692fb154cd46f1bfa62e7a0cda73241716b1024d992449e24e87e18750bbb"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/netkingdom-entry-point.conditional.patch",
"sha256": "6784a21fbd10bd62712be2e0f4929034601c94629aa74ccaa2e93fc815eecd61"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/packet-hashes.json",
"sha256": "4b5643c09d5e76bf1b034b16e3ddc204a5a83319d5317391b26d836d44529dc7"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/platform-source/docs/keycape-issuer-eso-contract.md",
"sha256": "7f59e59b17c58252982931ac61fe50dd7a07340add6c437fe48af36971eafe68"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/platform-source/manifests/templates/keycape-issuer-eso.yaml",
"sha256": "e17498bd8a4c820041a4105e4efe9c60c6a50953db8f621ff54887080065c743"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/platform-source/scripts/keycape_issuer_eso.py",
"sha256": "21c5797280c2a7825dbda8ac970d34a0cdef4c6458f68bce0b1c12407f122a87"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/platform-source/tests/test_keycape_issuer_eso.py",
"sha256": "223d4c5b349062b9f93e6af79e8d5feda44377ba41a11726f6f2b762691e8308"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/progress-paragraph.md",
"sha256": "151199597ba37225e5d46922ae90453f7338c5602ff81b3d870b579278bef2d4"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/projection.json",
"sha256": "b52dee68c6dd1d6c6fe6cb412a372f919af53fdab39c116d070ded6f2067af0b"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/projection.stderr.txt",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/publication-commit.json",
"sha256": "4d7bfca9479f4fbf57a9ce3b9f737749f47d9e1ecae3afb07897cd16b43e4645"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/publication-inputs.json",
"sha256": "fb2893c6a95566849b30aa8ab61bf5f2d24a6ccf61e2242b6bff8a2e05b0004e"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-review-r1/REVIEW.md",
"sha256": "508afd5695eda998cf651874c00bcaa14725afd7a52b54a5c27854b0bfc44978"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-review-r1/evidence.json",
"sha256": "7fa36069248ba9c3bb6a57da0a940a35ac6d6a293a4edd653fa54e19a3f71d9e"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-review-r1/focused-tests.txt",
"sha256": "fd09c39d8434d0a9ed746dcddd0acd11657d67541c59ab632ef36be1f9cc7ec2"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-review-r1/reproduce.py",
"sha256": "61633872de8244db3bc94e32d406479605eceef1f2c6f415164e1b6c0680068b"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-review-r1/review.json",
"sha256": "99b78098a6eb257b2e58c22b076d43c687cc2708560bba46b82f50129d72aecb"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/README.md",
"sha256": "bff0eb23ce4920da6058bf71a3dace209baca69a97c94bd9db4f765f71044eb2"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/candidate-validation.json",
"sha256": "17ed30550f7330beb49b5f866c634e78fbcbf98088fcc3e0ce92faa7b9042524"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/failure_inverse_omitted.txt",
"sha256": "543906e345b1b5daa28f0f3cfc620b3e06253cfb65c3a861586630dc63b57608"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/focused-tests-before-admission-binding.json",
"sha256": "c11b15e97b3da1c9b4819fec539b17823f98f4e6f39ece9bc5c8422325ddbc8e"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/focused-tests-before-admission-binding.txt",
"sha256": "9fb7e13b0e58942d2dc1921fd303ad372b1385841e3df88f5a23365a4a4b95bf"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/focused-tests.json",
"sha256": "8b1f7ecf75fedee9c03d1421efc6a6e9dd89eb99da70df5e8e4d47027b5fe331"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/focused-tests.txt",
"sha256": "99ddd55245e57dd9047793bd206158c66b723a7fe79cc8e7b785f8183f1e4654"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/implementation.json",
"sha256": "fce244e7a8bd1f1b9911c632de4831de291f358375183ff7959dc5615560f6d0"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/manifest.json",
"sha256": "5a6c08e13422cd2d21d5df5d9dce41685a6cf1cf1cdcd3a64f807806602f1dfd"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/negative-controls.json",
"sha256": "d13a0cf8b22abef1cba502b3fd3fd10c9f40955a3ffa8fee473d6189bfb25783"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/net-kingdom-unchanged-owner-status.txt",
"sha256": "354b3dd65c711df0855c22ba053a4ca295d5491941c5a64c1157a0b7d43cf4cb"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/owner-contract-candidate.md",
"sha256": "dfdc6573df76647790aabb26e4b228b04047dffd032fc33821024f8bbc9ba941"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/owner_configuration_contract.py",
"sha256": "62752f518b78fa7713bdb4d47e68decbf3aa89ecbc7950549ffdc3d08e01c554"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/post_revision_guard_removed.txt",
"sha256": "e9e4a134ece9095af5dbf790858b6e3ed44ae9388dde98cbb9a25b4183a16f50"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/railiance-apps-unchanged-owner-status.txt",
"sha256": "251b0eb219198e4ad334a76e0b39f23848242354105e97f3f61701168817cdd3"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/test_owner_configuration_contract.py",
"sha256": "51482fc5bad6af5c52d736ded7e7031291b18bc4949b9ff43d7dea78f3a8ad94"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/type-owner-configuration-inverse.candidate.patch",
"sha256": "6e23967d768759fc10203bcc25d81cb32c3d9222ed6fcb4a510a7cfe90e579bf"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/type.before.yaml",
"sha256": "e75fe94110ef9fb7fb18072fe2856941b33507c99cb406d36576046481485d0a"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r1/type.candidate.yaml",
"sha256": "739c927ab494f4e0f6618e6e55394dd8dc4b720db428cd4973f7a81524e1ecd9"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/README.md",
"sha256": "168b80f6cc0d50650a484d24696022cac8a4cf8279c2fb4da0c112cfbf10fd08"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/candidate-validation.json",
"sha256": "200132ab91899f6cfb2782b19ff59c72056f05197690cecdda708ccbdd343edc"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/focused-tests.json",
"sha256": "2f48369c3d00f9a43989486882519ee5c09d4eb1f5be599a92b06ca0d7cc8581"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/focused-tests.txt",
"sha256": "436459ced69db381f44a0f14d2ebcf00a4067f596a9881cfdcca7146c237d3a1"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/fresh-inverse-session.candidate.patch",
"sha256": "0b4a466c23cdeeb34789ab79c3d7cdc4a186495a910e23bc6491a29b5ff9cff8"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/fresh-session-guard-omitted.txt",
"sha256": "f47357c3303b026dcd9edcce564725a1c7d0d77969dd2857a6f1c008f169c1e1"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/implementation.json",
"sha256": "8517713a130f23cb38c597d333f65ec27700f347c16dca617e988f1cbc948abf"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/manifest.json",
"sha256": "14058734b40a0394a5d26b5063ba60ea343b1ad3ad47b789b9e640637c4e8c4b"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/negative-controls.json",
"sha256": "8f96396f3d342f505d1dc6ac235a7f37a7c2481d51d100125f05b26619d3d314"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/owner-backend-next.md",
"sha256": "6243d7a70868224cb89fd30818c23ac379f37b6576e4947e444ef5057d06aea8"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/owner-contract-candidate.md",
"sha256": "4f9b91a2389acbc52558347a794da02faa6de4fb189373a11feeac10ae7e7c4f"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/owner-source-inventory.json",
"sha256": "4510ce7b2f9eb9f4695ef4c57bba888c3839d3adcc397f4b4024be0fa71767bb"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/owner_configuration_contract.py",
"sha256": "2cd04432cf3681afc126736f7daacfab46630441aeb223b3e222d6951d24ce2e"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/test_owner_configuration_contract.py",
"sha256": "0f4246fea95bd3139c604da8712e6f6ac08976dd34d73e56ba83663ecba42761"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/type-owner-configuration-inverse.candidate.patch",
"sha256": "949ef6d3e0acc574e1d69c251d6d09e3da636bc73d043dec1c5677f30de29947"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/type.before.yaml",
"sha256": "e75fe94110ef9fb7fb18072fe2856941b33507c99cb406d36576046481485d0a"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-implementation-r2/type.candidate.yaml",
"sha256": "6e744be190c4f047e609bef7670ff987fe1606b4d7dac3f740f164bebc205a13"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-review-r1/README.md",
"sha256": "659ce8da07ef4f16077b9b2fcf5e89c5c1ed177603f589acf344e57b12ace18f"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-review-r1/fresh-inverse-session.candidate.patch",
"sha256": "0b4a466c23cdeeb34789ab79c3d7cdc4a186495a910e23bc6491a29b5ff9cff8"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-review-r1/original-authority-tests.txt",
"sha256": "6c5326d4a189509e823110e748a2e6baed9a8b809b15bc0aa61cc247f2a8df35"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-review-r1/patched-authority-tests.txt",
"sha256": "2d5029651d5d31355683da0f774a17eb418355714ae42af60b6a7b901b65676e"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-review-r1/review.json",
"sha256": "8199a9937c1091de5101c9a3c6bb0bcc3742677e0b5830e1b6a0b00c06fe85e1"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f3-review-r1/test_inverse_authority.py",
"sha256": "4c83407535dd37e571f293a9cc6b47d787b02b925402741d52c70a5532d76e1c"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-source-followthrough-r1/apply_prepare.py",
"sha256": "e759865139078a6ea7509fa80c8521d81446a3f6fc236550628df3d1b14a9e50"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-source-followthrough-r1/consistency.json",
"sha256": "6eae09358f008c873345b417f33e606a70a862786a29cca1e870ed7f48a232b3"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-source-followthrough-r1/consistency.stderr.txt",
"sha256": "f4a6aa1609a13600a0b97cbb08bbc03b3e247b619ff37912d37f7e109ce798ba"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-source-followthrough-r1/identifier-assignment.json",
"sha256": "50c3ef9b95557fd01af751a84ee99e17b868fc128f4101c268cee8157f8b72b2"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-source-followthrough-r1/identifier-preview.json",
"sha256": "5f3bda9eeccf3dd639c2d0bd2315ff1c71e79de021200c53e136559ad658d67e"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-source-followthrough-r1/preimage.json",
"sha256": "93a300b5e744764221671b4a3534aad0bdf511b7b4b45643dd8c3b1e357b541f"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-source-followthrough-r1/projection.json",
"sha256": "11cf3e0838f914a2aab970950dbe0d7f32846c11fc7b593791957d3f8381b497"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-source-followthrough-r1/projection.stderr.txt",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-source-followthrough-r1/publication-commit.json",
"sha256": "b692f5d2487bcf5f9a8d6db09bc6b0d4fe4a69ae39a6bf79184a26e32ef5f44a"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-source-followthrough-r1/publication-inputs.json",
"sha256": "ebb1f954932140654291c0d9ddd6fcd8448e0edabb1dd194e82bd7633d2a71ea"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-source-followthrough-r1/workplan.allocated.md",
"sha256": "f92962c5aa21aade0fc2f6b4f8d9a95932fe85b107413cdd2824b6ebe72c36d9"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-source-followthrough-r1/workplan.candidate.md",
"sha256": "f1e5245f565da2cc35b5e2d0adfcad42325c64205525d3f96171e604d8935708"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-source-followthrough-r1/workplan.preimage.md",
"sha256": "1502f1f474856172d969489cab8c0642d9456d93d326f6660df3772a4716d30b"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/source-corrections-publication-r1/owner-source-state.json",
"sha256": "c9d3d3ae1372007b35526d592d3a7ea2d2bc6374d34840ef02fdda9535973785"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/source-corrections-publication-r1/prepare.py",
"sha256": "749703026767ccb196c01ac8b4c9fafbcdbd564d20ae73b468e297a114f073d6"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-fixes-r1/candidate.patch",
"sha256": "1a3530a1e469fc03c2c29f1b66fa3ba1904e56bf2abcfb242c7a2ed015fb3e74"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-fixes-r1/candidate/src/warden/case_run.py",
"sha256": "1bc73e30ac718fd75bbaff2a739495fc051aeaec73802ac71f0583cb2d53ab0a"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-fixes-r1/candidate/src/warden/case_type.py",
"sha256": "7b659b8d682863cd28df24025be4b10dd7ca3df724350a22d360c6af9615bca7"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-fixes-r1/candidate/src/warden/routing/models.py",
"sha256": "b85372b2572a49af62e9534f26a33963b894633c7cd43dd2a28416b8959cba3e"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-fixes-r1/candidate/tests/test_case_1_3_integration.py",
"sha256": "4862c5a004075eb18733d354bee7dda3f55e04a6ee8ecb44b76166347c121158"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-fixes-r1/candidate/tests/test_case_admission_modes.py",
"sha256": "9110d6b6286cf0f85268d4970d1fd403250da3f04351d70b1fd2d9d7a93e2d89"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-fixes-r1/candidate/tests/test_case_attended_boundary.py",
"sha256": "4615e653f06144305ea1a84e98bc6260e16ed41ef9e5db2d0f162ef9f723ef2d"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-fixes-r1/evidence/run.py",
"sha256": "19746062528f63909a268e8d97e801c9d116d57e5a1c0e148b2a22ec0ecd0f8f"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-fixes-r1/evidence/sitecustomize.py",
"sha256": "ffaa62732340efd8d40bb54a3c4499cb62a89896e5ee825c8fe7b5d2bf93db22"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-fixes-r1/implementation-r1.json",
"sha256": "b9ee843bba417c82ad77ac8a221cf64dd5088aa640528524b2e0ef0c129d3184"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-fixes-r1/test-isolation-proposal.patch",
"sha256": "0f6c46303ec24f337e4190ec84773ccefb4833241233b4b7d56bd1927eba838c"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-review-r2/integration_runner.py",
"sha256": "d77da107d67ec827f19e0c46045a2802081a62283c3bdb5bfec35feabb454234"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-review-r2/kernel-review-r2.json",
"sha256": "9002efdac67f451ef4fc59c02056c8e3ed23de57677ee9974d7477614960e515"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-review-r2/reviewer-probes.py",
"sha256": "e52025893ca0755b3a62e2585cf2f16002a5b705f7cfb0582b05435d3b9e336a"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-review-r2/run-baseline.py",
"sha256": "02e2a409cd23fb52f518c202c923877fdcc381f708b4e8d77bad04e034b46e73"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-review-r2/run.py",
"sha256": "c6f931ba4ff9b0ef42627030a016dd7ebe3f353b3024f1c40b80df890aefe59f"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-review-r2/setup.py",
"sha256": "fcdeb50a196ce5afda6243b9fb51584af58ba5d55e75a4caed017f742d560500"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-1.3-kernel-review-r2/sitecustomize.py",
"sha256": "6b7cec873fa1fca6767b77f514bec499adb5e1e7745dbc8eddf36771917ad4f4"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-kernel-source-integration-r1/commit.json",
"sha256": "16883619d6ae1433b30c61ea2fbb8ada44f4423d1102a9390867efa580d15de2"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-kernel-source-integration-r1/consistency-preimage.json",
"sha256": "9c8d006e95c32bbd689c16a5ee575e3d54c46b327d5f2f47a697570480d8e9fb"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-kernel-source-integration-r1/consistency.json",
"sha256": "8032a9d073c6334bc7136ca88a2878b2525f552c4e25266884d45456f4152fb6"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-kernel-source-integration-r1/consistency.stderr.txt",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-kernel-source-integration-r1/focused-tests.txt",
"sha256": "a25e2b6355475168ff5a9dba6deec605584711d5c63de8ddc3da4644c93f6a5e"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-kernel-source-integration-r1/integrate.py",
"sha256": "8eab2d72e67a9af5230d7978d9533d964b8162a85a7fc053a210da05b3a5219d"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-kernel-source-integration-r1/integration.json",
"sha256": "0781a745e9bcb4e052c80818a71695a1c91672345c7cfd7628fb0a56a7075d82"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-kernel-source-integration-r1/normal-sync.json",
"sha256": "00a81cede4636a8adcbb2315a3a79c69d472accbab83f5d99cbb51a5ffa48653"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-kernel-source-integration-r1/normal-sync.stderr.txt",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-kernel-source-integration-r1/publish.py",
"sha256": "c632d670d3b53efbf7a1b5c2c29402e3e5d57cce3a40f119e672153e3fe21189"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-kernel-source-integration-r1/verification.json",
"sha256": "f6d9efb1f3118a80945465b08ba17e26b76ab14d017e7fba56ab3e911767b2ac"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-kernel-source-integration-r1/workplan.preimage.md",
"sha256": "721a90b2ed8c896257c34a1451eb642cb8824c8263e37c483fb61b36adc54088"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-integration-r1/commit.json",
"sha256": "7bf38dbd9c4b6c59f6b1b45e86abeba8bff2a7a0e847da85f7e7e6f422a99186"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-integration-r1/consistency.json",
"sha256": "b70a0b6356d42b173b9d11af7c0f4df6850e4c3bc186dee69a7348f2d66e62bc"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-integration-r1/consistency.stderr.txt",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-integration-r1/full-unit-result.json",
"sha256": "9f9460f8b0f06e5f5668e554a059300ed5b40fbb1ea0ffc3e1092fe0ac11a4f0"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-integration-r1/integrate.py",
"sha256": "333d24d6f01d6d23b571e02846d71938ae8b78fee63aefbe90d7a7c1888cf7e1"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-integration-r1/integration.json",
"sha256": "663628195799e298e47e01cf9067fddc0f21a1c06967d11266c2fdc8a9e68bf0"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-integration-r1/prepare_publication.py",
"sha256": "5a22d66b1986c5b17414ea5d70dbd42bda1f69c24941bc80a6aeca86c79d4795"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-integration-r1/projection.json",
"sha256": "1d63a42ddbe4055fb70035948f3e2dea2dd167498bad87282f095ecfcdb32a89"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-integration-r1/projection.stderr.txt",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-integration-r1/publication-commit.json",
"sha256": "ced6545c22193dd4d8dc272bf16603a9ed9cf0973e21c94a97ede68f289dc423"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-integration-r1/publication-inputs.json",
"sha256": "bc2f8fd65e7517849f52c888baf89f7f160b20027a946d3aacbf1e5c5aa5102f"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-integration-r1/root-disposition.json",
"sha256": "190780394f6b062be7483c40da28ab1d28a6a29794fb88dc2e77264faa60b9f7"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/README.md",
"sha256": "7322316db3fdd7107efe82d42166a25dd494161f8062aaa833b4497392fd04bb"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/candidate.patch",
"sha256": "1fe65076ce7e633be304fc779bf2c87b7ee1e4e460de55ca74355b5842d036f5"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/candidate/Makefile",
"sha256": "8cf08ec680ed6bd323a1ce8475ade731dbeebcd64ffd43ecd169308f8a727940"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/candidate/docs/development/safe-unit-tests.md",
"sha256": "b157c3e6956a41dcd9fc3912d0c7d09a664f11f08f0f8a8e4cae57fac9747cf7"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/candidate/scripts/run_unit_tests.py",
"sha256": "8157e44df298fa4c47c6c08b2dc68e3ac945c4beb3f47a251a7afbbc55eb1bd2"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/candidate/tests/fixtures/workload-coverage/provenance.json",
"sha256": "a4a203c1bd7bc5b8039d1b2525bea65dbae288a3f552969e4218cd5abda96990"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/candidate/tests/fixtures/workload-coverage/rapp-core-hub/declarations/rapp.yaml",
"sha256": "9ce902da0c77809f1094a634244652835b162f59682e9fa6923d8c8aa4ed4a3c"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/candidate/tests/fixtures/workload-coverage/rapp-issue-core/declarations/rapp.yaml",
"sha256": "a1956deecf2f0fbca44549e5ea5e8f1c4b74ebf91a9482c64c982491af0d923b"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/candidate/tests/fixtures/workload-coverage/rapp-qonto/declarations/rapp.yaml",
"sha256": "15aa9809e8d6a120c516be5ce9adfb72c00382140c171e791083ad117f503b3f"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/candidate/tests/test_case_plan.py",
"sha256": "944bc2a725ca1b7a10f4516c3ceed65f99627057dd15a859da4f8ffb3d97e71f"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/candidate/tests/test_case_type.py",
"sha256": "5a217a172e7e2ffbea66f1beee9a1c18bf5e97f9fb25b83cb96b6ba976cbb2a5"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/candidate/tests/test_layer_conformance.py",
"sha256": "3edf0a0d49c3560278a564c477834335cfaf5243341cb9345f0d4bf8994db56c"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/candidate/tests/test_safe_unit_runner.py",
"sha256": "6b623d18879e7564dd11447c16d3ec9f80321a25a525fcd0306b6a903a68031a"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/candidate/tests/test_workload_join.py",
"sha256": "1828908a5cd1f0bc13ca367dbd1245221c52d1ac60789c9e3bd51dd36cb8beb9"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/candidate/tests/unit_isolation_probe.py",
"sha256": "726d3e01ae21c1379588e1f08459449908cc8a75ffea1b337c33a1a888c66f59"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/candidate/workplans/WARDEN-WP-0044-security-case-follow-through.md",
"sha256": "074bfcf2f7841e78bcd404bf573982d244b00f2f500e198b7fe80fea660de991"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/implementation.json",
"sha256": "8033b323178e1d3b031a45466687fe05479627e99559d9de7b3baef52ab8671f"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1/packet-hashes.json",
"sha256": "1567ff1ad558fdb464818bb555dab79152477c85113f89874daa3049029733a8"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-review-r1/review-r1.json",
"sha256": "6cb7e3d1af81ffbf9bd4908841ae5c4772a96c909965f077e5ffd8dc57f0b8b4"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-review-r1/reviewer-correction.patch",
"sha256": "9407289f8da41ed6fff367baf566ad30f5510a2627c14e0ac0cf971bf9b465c9"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-review-r1/reviewer-probes.py",
"sha256": "0b49fc2ad7aeeca0cabb0961b06d8cdc85ae5109f36bf81e4245e55127357574"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-review-r1/run.py",
"sha256": "f7fc81b8acbcd0712ee5f79a16b27aa1cdd0af11db761f9e94fba8b91e51ec8a"
},
{
"path": "docs/netkingdom-target-implementation.md",
"sha256": "8452750de483b79a2cbb09b192d18cf6dc421ad736dd06c738af0727c3d74854"
},
{
"path": "docs/netkingdom-target-security-architecture.md",
"sha256": "ec2079be18c7cdb8a1e4fdbd22131c08c83721d7a1bf18b4802bc5e229520f35"
},
{
"path": "workplans/CUST-WP-0080-netkingdom-security-blueprint-and-gap-closure.md",
"sha256": "2f4adf4348346e31c4581754352f0d3329231af75333b988d2dc336d4f4b8a35"
}
],
"stdout": "",
"stderr": "{\"blocked_blob_ids\": [\"187aa2fedbd42b96194059f30aedc99353ebf64b\", \"3e6e3ae1861a9dcce8916a85dbd30ec99d097a58\", \"b23adafc5a1f891f55dfcfd4aa8314074e10f392\"], \"scanned_blobs\": 199, \"scanner_sha256\": \"88f91962aa2f93ac6ab281d553b9e125f5197bbbce38f9f2437f7299c32e5509\", \"scanner_version\": \"8.30.1\", \"scope\": \"changed-staged-blobs\", \"status\": \"blocked\"}\n"
}

View file

@ -0,0 +1,17 @@
[
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/manifest.json",
"oid": "187aa2fedbd42b96194059f30aedc99353ebf64b",
"stage": "0"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/packet-hashes.json",
"oid": "3e6e3ae1861a9dcce8916a85dbd30ec99d097a58",
"stage": "0"
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-review-r1/evidence.json",
"oid": "b23adafc5a1f891f55dfcfd4aa8314074e10f392",
"stage": "0"
}
]

View file

@ -0,0 +1,14 @@
{
"workplan_id": "f7e81013-6868-5d99-8528-ba75a442eca9",
"id": "df65784e-68c7-424a-a134-9acceb2fa084",
"topic_id": null,
"task_id": "bcbf6c91-2c04-5c16-ae8c-5d6c06fd6b89",
"decision_id": null,
"event_type": "note",
"summary": "Published reviewed mode-aware case kernel and corrected ordinary safe unit-test entry in ops-warden b593c879831378db7dc62adfabdfedf2d44ddd38 (kernel implementation ae7bc73, normal allocator-only historical UUID commit 922c26d retained). Cached attended run/rollback/reconcile recheck caller/session and the authenticated catalog snapshot before writes/callbacks. Original kernel review and unknown ambient lookup remain preserved. Original safe-runner candidate rejected for O_TRUNC and unchecked projection hashes; minimal reviewed corrections accepted by root and full ordinary make test passes785 with4 deselected under synthetic parent token/HOME/Python/pytest controls. Trusted-test accident guard only; directpytest/native/non-open/preopened-descriptor limits explicit. No production src/catalog/parameter pin changes from test runner, no draft promotion, credential or native action. All4WP44 task bindings/statuses unchanged; T03 progress, native first case remains open. Evidence: dated warden-kernel-source-integration-r1 and warden-safe-unit-integration-r1.",
"detail": null,
"author": "codex",
"session_id": null,
"created_at": "2026-10-17T20:02:37.087423Z",
"workstream_id": "f7e81013-6868-5d99-8528-ba75a442eca9"
}

View file

@ -0,0 +1,32 @@
{
"schema": "custodian.public-digest-publication-derivation.v1",
"scanner_rejection_retained": "../source-corrections-publication-r1/publication-commit.json",
"diagnosis": "All values in the three scanner-blocked metadata documents are public file/archive/commit hashes or non-secret metadata. Every SHA256 verified against its exact public source artifact before conversion.",
"verified_public_artifacts": 43,
"representation": "Bare 64-hex public digest values become explicit sha256:<hex>; no credential encoded, no scanner policy/config/ignore/allowlist change.",
"exact_original_reconstruction": "Load JSON, remove sha256: from each value matching that exact 64-hex scheme, serialize with json.dumps(indent=2)+newline. Verified byte-identical for all three originals. Historical input pins still refer to those exact reconstructable original bytes.",
"retained_local_original_directory": "/tmp/custodian-original-public-digest-metadata-awy5nzfr",
"rows": [
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-implementation-r1/manifest.json",
"original_sha256": "sha256:754531fbef468bc0e432bd26d4dbed992294c34d57e23fe7c3b7f829f7a24ba4",
"published_sha256": "sha256:cfbc40890f94302764b7b6302a90ea07e975d1eadad91b9dd9642c45a5b13717",
"exact_original_reconstruction_verified": true,
"executable_and_template_input_bytes_changed": false
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-publication-r1/packet-hashes.json",
"original_sha256": "sha256:4b5643c09d5e76bf1b034b16e3ddc204a5a83319d5317391b26d836d44529dc7",
"published_sha256": "sha256:057f7cf2a6ea98ddd5963cf2608cd8d7a43847048e77aa2c2a571e7f3a3c53d2",
"exact_original_reconstruction_verified": true,
"executable_and_template_input_bytes_changed": false
},
{
"path": "docs/changes/netkingdom-target-2026-10-17/nk48-r5-f2-review-r1/evidence.json",
"original_sha256": "sha256:7fa36069248ba9c3bb6a57da0a940a35ac6d6a293a4edd653fa54e19a3f71d9e",
"published_sha256": "sha256:cc8cf37c1d4f56dfb16233b31e293c158d68cd4c49a1ab1b730205cb325531b6",
"exact_original_reconstruction_verified": true,
"executable_and_template_input_bytes_changed": false
}
]
}

View file

@ -0,0 +1,378 @@
---
id: WARDEN-WP-0044
type: workplan
title: "Follow through on KnownSecurityCases along their type's route"
domain: infotech
repo: ops-warden
status: active
flavor: implementation
owner: claude-code
topic_slug: netkingdom
created: "2026-10-08"
updated: "2026-10-11"
depends_on: []
related_repos:
- net-kingdom
- ops-mason
- key-cape
- railiance-platform
state_hub_workstream_id: "f7e81013-6868-5d99-8528-ba75a442eca9"
---
# WARDEN-WP-0044 — Follow through on KnownSecurityCases along their type's route
## Why
NetKingdom is introducing SecurityCaseTypes (net-kingdom `NK-WP-0048`, canon
`security-case-types_v0.1`, proposed). Once a case of an implemented type is
accepted and ops-mason has materialized its structure (`MASON-WP-0010`),
ops-warden carries out the remaining steps. These are the owners' declared entry
points, run on the authentication path the type defines, followed by the type's
verification.
Today ops-warden routes needs and, for `exec_capable` lanes, proxies fetches as
the caller. It does not yet know about cases, and each new integration ends with
a founder running a hand-written script (for example the proposed KEY-WP-0038-T02
rollout). This plan gives ops-warden the follow-through role, without widening
what it may do: each step still runs under its owner's entry point and the
caller's identity.
## Tasks
```task
id: WARDEN-WP-0044-T01
status: done
depends_on: [NK-WP-0048-T03]
priority: high
state_hub_task_id: "ef0920fc-418e-52cb-acff-9a5c0c728bf5"
```
### T01 — Define the type's follow-through section
Propose the `follow_through` part of the SecurityCaseType schema together with
net-kingdom. For each step it names the owner entry point, `warden_executes`,
the auth method and lane, whether an attended human login is unavoidable (with
the type's justification), and the verification command. Write it for the first
type, `oidc-browser-relying-party`, covering key-cape client registration,
custody minting and LLDAP group membership.
2026-10-08: NK-WP-0048-T03/T04 landed with a drafted section. Review is in
`history/2026-10-08-oidc-rp-follow-through-review.md`. It requires three
changes before T02: a per-step `lane`, a narrow `warden_executes`, and
`value_handling`. It also lists four refinements. This task is done when
net-kingdom acknowledges the review (NK-WP-0048-T05).
2026-10-09: R4 was withdrawn in favour of ops-mason's per-case
`{consuming_service}-keycape-client`, with the entry body templated in the type
(R4′, see the addendum in the review).
2026-10-09: the revised 1.0 type and canon now carry R1–R3, R4′, R5–R7.
`warden case check-type <type.yaml>` (`src/warden/case_type.py`, tests in
`tests/test_case_type.py`) checks a type's follow-through mechanically: the
live type is schema-conformant, with one attended session
(`key-cape-oidc-login`). It is not yet plannable, because two lanes are not
in the catalog: `identity-provisioner-groups` (net-kingdom) and
`keycape-client-secret-generate` (railiance-platform). These gate T02, not
T01. T01 still closes on net-kingdom's acknowledgement (NK-WP-0048-T05).
2026-10-09: ops-warden cannot add `identity-provisioner-groups` as the type
declares it. The provisioner accepts only user-engine's runtime token and
admits only user-engine pods, so no caller-identity path exists. R8 (review
addendum) asks net-kingdom either to move `ensure-groups` into the existing
attended session (recommended) or to give the provisioner an operator
credential. `keycape-client-secret-generate` needs a generate-in-custody entry
point from railiance-platform, and the broker does not have one yet. Both were
sent to their owners.
2026-10-09: done. net-kingdom took R8 option 1, so `ensure-groups` runs attended
in the `register-client` session and `identity-provisioner-groups` is dropped
(net-kingdom `0e86f95`). The founder acknowledged the type with memo r4 (hub
decision `e418263e`, NK-WP-0048-T05 done).
```task
id: WARDEN-WP-0044-T02
status: done
depends_on: [WARDEN-WP-0044-T01]
priority: high
state_hub_task_id: "5f68c991-f490-58f8-a121-92f74073d272"
```
### T02 — Plan a case run
`warden case plan <case.yaml>` checks that the case is accepted and materialized,
resolves each step to its catalog entry and entry point, and prints the run:
which steps warden executes, which run as the attended caller, what the
verification is. No secret values; no execution.
Tests: refuse an unaccepted or unmaterialized case; refuse a step whose catalog
entry is missing or not reviewed; show attended steps explicitly.
2026-10-09: done. `warden case plan <case.yaml> [--type] [--json]`
(`src/warden/case_plan.py`, 14 tests in `tests/test_case_plan.py`). It refuses:
- a case that is not `materialized`, or has no acceptance record
- a type that is mismatched or not acknowledged
- any `case check-type` finding, including a missing or unreviewed lane
- undeclared, type-fixed or secret-sensitivity parameters
- a placeholder the case does not set, or an unsupported `when`
It fills type defaults (`issuer`), evaluates `<param> == <value>` conditions,
renders owner, entry point, auth and ready_check, groups attended steps per
lane, and lists the applicable verification.
The live Forgejo case is correctly refused: it is `accepted`, not
materialized. A materialized copy, with a stand-in lane for
`keycape-client-secret-generate`, renders six steps: two attended steps plus
`register-client` in one `key-cape-oidc-login` session, one warden step
(`mint-secret`), and two owner steps. Seven checks follow.
Observation for net-kingdom (not blocking): `bind-env` runs before
`register-client`, in type order. Its entry carries a literal
`KEYCAPE_<CLIENT_ID>_CLIENT_SECRET`, which is not a `{param}` placeholder, so it
reaches the plan unrendered.
2026-10-09 follow-up:
- **Format specs.** `_render` supports net-kingdom's `{param:env}` spec (upper
case, `-` as `_`, the same as `keycape-client.py env_name`) and refuses any
other spec or `!conversion`.
- **Case reference.** The plan prints `case-ref: <case_id>@sha256:<hex>` over the
case file's exact bytes. This is the reference proposed to railiance-platform
for `credential.py generate --case-ref` (RPF-WP-0054-T01); the broker
re-derives it from the file.
- 18 tests now.
```task
id: WARDEN-WP-0044-T03
status: progress
depends_on: [WARDEN-WP-0044-T02, MASON-WP-0010-T03]
blocking_reason: "Local durable execution kernel and injected failure harness implemented. Native acceptance still requires authenticated owner machine descriptors/adapters, actual Forgejo materialization receipt, contained session integration, ordered verification and first native run."
priority: high
state_hub_task_id: "bcbf6c91-2c04-5c16-ae8c-5d6c06fd6b89"
```
### T03 — Run and verify a case
`warden case run <case.yaml>` executes the plan. Owner entry points run through
the existing proxy as the caller; steps that need an attended login use the
existing contained login envelope (silent command, session revoked afterwards),
grouped into as few attended sessions as possible. Then it runs the type's
verification and writes a receipt without values. `warden case rollback`
reverses exactly this case's steps.
Acceptance: the Forgejo reference case (NK-WP-0048-T06) reaches `live` through
this path, with no case-specific script.
2026-10-17: original-intent lookup/context interface for NK-WP-0048-T15, source
and synthetic tests only. `src/warden/case_run.py`: `Executor.run` writes an
`OriginalIntent` (schema `warden.case.original-intent.v1`: the dispatched run
Invocation — attempt, step, owner, target, actor, principal, lane, all six pins,
tenant, realm — plus admitted adapter source) in the same SQLite transaction as
the pre-dispatch journal row. `Journal.original_intent(binding, current, source)`
returns it after restart and refuses on a missing record or any
pins/source/step/owner/target/actor/principal/lane/tenant/realm mismatch, before any
journal write, so the step stays uncertain. An adapter's
`reconcile_original(ReconcileContext(original, attempt))` receives the original
intent separately from the new reconcile attempt. This is Warden's record of what
it dispatched, not owner created-only provenance. Current Executor.admit leaves
tenant/realm empty; the reserved coordinates establish no admitted provenance.
Owner descriptors/adapters, contained session integration, Forgejo
materialization and the native run remain open.
2026-10-17 source consistency follow-through: retained the additive intents table
and reconcile_original callback and fixed four reproduced local defects: original
actor mismatch, payload/SQL attempt-ID mismatch, orphan intent without its
matching original running receipt, and arbitrary nonmetadata values accepted by
the original-intent serializer. Exact bounded field validation, duplicate-free
bounded decode and save-time intent/invocation/running-state equality now preserve
the original receipt linkage before owner lookup. No new context store, native
verifier, trust root, adapter activation or authority migration was introduced.
The actual canonical focused kernel and new consistency suite passes 54 checks;
owner-installed Ruff check/format passes. The existing generated-data/synthetic
owner fixture and a distinct interpreter prove source correspondence/refusal,
not independent native custody or creation. Earlier comparison probes and failed
preparation are retained. Current caller and fresh session/grant revocation checks
remain required; original owner payload/revocation, exact native readback and
created-only provenance still need independent authenticated owner admission.
No JSON/SQL context, unknown tenant/realm, changed run-sheet or legacy missing
intent supplies recovery, replay or undo authority. T03 remains progress and all
native acceptance gates/statuses/dependencies/UUIDs remain unchanged. Evidence:
Custodian original-context-compare-r2 and original-context-owner-followthrough-r3
under docs/changes/netkingdom-target-2026-10-17/; publication/projection is separate.
Agreed with railiance-platform (RPF-WP-0054-T01, 2026-10-09):
- `mint-secret` runs `credential.py generate --grant keycape/client-secret-generate
--client-id <id> --case-ref <case-ref> --case-file <case.yaml>` as the caller's
child process. The broker re-derives the case-ref and checks status and
client_id.
- warden refuses that step when `WARDEN_AGENT_ID` is set.
2026-10-10: railiance-platform implemented the command (RPF-WP-0054-T03). It is
catalogued as draft `keycape-client-secret-generate`, with `exec_owner`
railiance-platform and `exec_capable: false`. `warden case check-type` now
reports the lane as LANE-UNREVIEWED rather than LANE-MISSING. Before it can be
activated:
- the founder binds the issuer policy to the operator OIDC role
- key-cape confirms the secret format
- the RPF-WP-0054-T05 probe passes
2026-10-10 (later):
- **Broker lane.** The issuer role is bound (CCR-2026-0043) and the T05 probe
passed (railiance-platform `21b8af3`). Only key-cape's format confirmation is
left. The playbook now includes the issuer-role login, a 15m token with
unlimited uses that `warden case run` must group with the attended session.
- **Env spec.** net-kingdom adopted `{client_id:env}` as a 1.0 patch
(`9a9b8e3`). The plan renders `KEYCAPE_FORGEJO_CLIENT_SECRET`.
- **Forgejo case.** Rendered and built by ops-mason. It is not yet
`materialized`: MASON-WP-0010-T03 waits on the railiance-platform CCRs and
their founder apply.
2026-10-10: `keycape-client-secret-generate` activated on railiance-platform's
go-ahead (message 20973a9c) after key-cape confirmed the format (4e0213b3).
`warden case check-type` on the live type now reports `plannable=True`. The
only thing T03 still waits on is the Forgejo case reaching `materialized`
(MASON-WP-0010-T03).
2026-10-10: net-kingdom moved the type to 1.1 (`e2174ce`) and re-pinned the
Forgejo case. 1.1 adds the verification `consumer-enforces-groups` and requires
the hand-over to enforce `access_groups`. `check-type` on 1.1 reports
`plannable=True`, and a materialized copy renders six steps and the new check.
The case-ref digest covers the whole case file, including `status`, so it
changes when the case becomes `materialized`. `warden case run` therefore takes
it from the file at run time, and the broker re-derives it from the same file.
```task
id: WARDEN-WP-0044-T04
status: wait
depends_on: [WARDEN-WP-0044-T03]
blocking_reason: "Catalog integration follows a proven run."
priority: medium
state_hub_task_id: "4a0fa4a7-5ca9-518a-ab92-a79a5e2cf93e"
```
### T04 — Catalog entries from types
Let a type contribute reviewed catalog entries once, so that every case of that
type routes without a new catalog edit. Cases add parameter values, not routes.
`warden route find` should be able to answer "which SecurityCaseType covers this
need?" before anyone builds by hand.
2026-10-10 consolidation source prototype (not an accepted owner adapter API):
`src/warden/case_receipt_state.py` provides a pure immutable receipt reducer,
with exact case/type/adapter/catalog/acceptance/run-sheet pins, running intent
before dispatch, uncertain recovery after a lost result, no success replay,
explicit retry-safe failed-before-change retry and created-only reverse undo.
It executes nothing and accepts no command output. The caller must durably
persist running before any future side effect; storage/authenticated owner
receipts/live adapters are not implemented. Focused offline tests cover changed
pins, lost receipts, retry/refusal, uncertain rollback and shared-object
preservation. Source proposal: `docs/security-case-execution-proposal.md`.
T03 remains open: typed owner execution/receipt contracts require review, the
Forgejo structural materialization needs owner receipts, and CLI dispatch,
contained sessions, native verification and provenance remain unimplemented.
There is a circularity to resolve with net-kingdom/ops-mason: materialization
cannot require mint-secret if mint-secret is itself a follow-through step whose
planning requires materialized. No case status is changed by this prototype.
2026-10-11: the exact execution-design memo version1 has confirmed native human
acceptance (approval e46b149b-ec3c-4b3b-98a7-dcb4934448ca). The approved proposal
bytes remain unchanged. `src/warden/case_run.py` now implements a closed v1 local
execution seam, independent admission/evidence callbacks, private transactional
SQLite receipt storage, process locking, running-before-dispatch, crash recovery
to uncertainty, explicit safe retry, separately required broker-grant and parent-session revocation
proofs, native owner reconciliation and created-only
reverse rollback. Thirty-seven kernel tests and fourteen reducer tests pass;
ruff checks pass. See `docs/security-case-execution-kernel-v1.md` for exact scope
and receipt provenance. No installed native adapter or live CLI execution is
claimed. Current prose types stay plan-only; acknowledged descriptor/type machine
seams and authenticated owner/caller receipts are still required. T03 progresses
for implementation but cannot finish before ordered native Forgejo acceptance.
2026-10-16 source preparation (isolated checkout; no native acceptance):
T03's browser parameter mismatch now has a producer-validator-backed projection
in `case_inputs.py`, explicitly configured on the real Executor. Exact 1.1/1.2
parameter definitions and all four reviewed producer modules are pinned; full case
validation admits reviewed security-sensitive metadata while unknown/fixed/secret
inputs and type/producer drift refuse. Only the reviewed descriptor target
reaches the owner callback; no parameter journal payload is added. Actual
Executor/producer tests cover positive versions and refusal/containment paths.
Acknowledged machine descriptors, authenticated owner evidence, real Forgejo
materialization and contained native sessions remain mandatory and unimplemented;
T03 stays progress, T04 stays wait. No type or case status changed.
2026-10-16 producer source refresh: independently reviewed NetKingdom
`015694ee414c802dc2ef1fa0120dfed610086e69` optional descriptor-map repair.
Only the validator/evidence source pins change; exact parameter and transitive
source identity remain enforced. Actual canonical producer, Executor and reducer
suite passes 87 checks, including 14 new malformed-map integration cases; all
four missing/changed modules still refuse. Review:
`docs/reviews/2026-10-16-browser-producer-pin-refresh.md`. No adapter attestation,
native acceptance, credential use or privileged dispatch. T03 remains progress.
## T03 source correction and safe-test follow-through — 2026-10-17
The reviewed KERNEL-2/3 source now authenticates and parses the actual catalog
snapshot, checks lane owner/risk/delegation, and resolves each type step's Warden,
attended or owner dispatch mode. Four proposed attended-change lanes remain
DRAFT; no lane is promoted and PARAMETER_PINS still contains only 1.1/1.2.
Independent review KR1-F1/F2 found cached attended run/rollback/reconcile could
lose the human/runtime boundary, and actual admission lacked the planner's
establishing-login checks. The exact successor retains the mode and authenticated
catalog bytes and repeats caller/session, agent marker and attended-lane checks
before any journal write or callback on all three operations. Planner and executor
share active/reviewed login/session-lane validation. Two unresolved Apps session
lanes correctly remain refused. Integration tests now explicitly disclose all
fixture authority substitutions; they establish no owner or native authority.
The new 19-test regression matrix reproduces 13 failures on its predecessor and
passes on the candidate. A fresh independent reviewer adds changed-authority and
catalog-snapshot probes: 90 focused checks and six guarded integration checks
pass; the combined predecessor comparison has 22 expected failures. Author's
isolated full suite passes 765 with four integration-marked tests deselected.
Evidence: Custodian warden-1.3-kernel-fixes-r1 and warden-1.3-kernel-review-r2
under docs/changes/netkingdom-target-2026-10-17. Original unsuccessful review,
invalid setup attempts and unknown ambient-lookup outcome are retained.
A separate reviewed test-only fix stubs ambient OpenBao identity in access CLI
unit tests and adds a synthetic sentinel regression which fails before any
subprocess can launch on the predecessor; 26 access/helper checks pass. The real
production helper is unchanged. The first old review's unisolated launches may
have invoked ambient `bao token lookup`; remote reach/success remain unknown,
with no secret displayed. This patch does not erase that adverse outcome.
Explicit remaining safe-test work is retained in this live T03 scope, owned by
ops-warden: replace or wrap the ordinary unit-test entry path with allowlisted
environment/empty synthetic HOME and guarded subprocess/network execution,
including nested validator children. Completion requires representative access
and case tests to refuse token-file/environment and live provider access under
synthetic negative controls while permitted local fixtures remain usable. Until
then use the preserved isolated review runner, not the ambient `make test` path.
No credential lookup, live investigation or rotation is authorized by this note.
T03 remains progress; contained sessions, authenticated owner provenance,
materialization, exact type acknowledgment/pin and first native case remain open.
2026-10-17 safe unit-runner source candidate: `make test` now selects an existing
interpreter and `scripts/run_unit_tests.py`, which constructs the environment and
empty temporary HOME before pytest collection, denies unexpected process/socket
use and ambient file opens, and guards the pinned BrowserInputs child too.
Closed fixture exceptions cover the synthetic desk endpoint, metadata checkers,
exact-byte contract doubles and fixed transport prints; they confer no provider
authority. Explicit public declaration fixtures replace ambient HOME source
lookups. See `docs/development/safe-unit-tests.md` and Custodian packet
`docs/changes/netkingdom-target-2026-10-17/warden-safe-unit-runner-r1`.
Synthetic token, ambient-path, forged-provider and nested-child regressions are
retained alongside the initial failed isolation runs and corrected results. This
is a source candidate for the existing safe-test handoff, not an OS sandbox or
native case acceptance. T03 remains progress; contained sessions, authenticated
owner provenance, materialization, exact type acknowledgment/pin and first native
case remain open. No credential lookup, live investigation or rotation occurred.
Candidate validation: ordinary `make test` under synthetic ambient token/HOME
controls passes 783 tests with four integration-marked tests deselected. Affected
focused checks pass 117 tests; new runner code/regressions pass Ruff. Retained
initial failures exposed fixture dependencies and were corrected, not suppressed.

View file

@ -0,0 +1,120 @@
{
"schema": "custodian.warden-safe-unit-runner-implementation.v1",
"date": "2026-10-17",
"role": "implementation author; not independent review",
"status": "source-candidate-not-canonically-applied",
"base": "922c26da0f3fcb0182352ea83e6ae06f29878580",
"preserved_allocator_commit": "922c26da0f3fcb0182352ea83e6ae06f29878580",
"previous_base": "ae7bc73b4f4bac22454144959b870d161498e0af",
"netkingdom_test_source_head": "befb0bc68cd25b625804fce559476eefd702521d",
"phase_memory_test_source_head": "755fd2c3e2a5414cd89ee59df1814196d872b768",
"files": [
{
"path": "Makefile",
"before_sha256": "9186d6166f3192b814f901350724b9c8a14d7db5b6c8664e9b0f2b5d5565e9b8",
"after_sha256": "8cf08ec680ed6bd323a1ce8475ade731dbeebcd64ffd43ecd169308f8a727940"
},
{
"path": "scripts/run_unit_tests.py",
"before_sha256": null,
"after_sha256": "8157e44df298fa4c47c6c08b2dc68e3ac945c4beb3f47a251a7afbbc55eb1bd2"
},
{
"path": "tests/test_safe_unit_runner.py",
"before_sha256": null,
"after_sha256": "6b623d18879e7564dd11447c16d3ec9f80321a25a525fcd0306b6a903a68031a"
},
{
"path": "tests/unit_isolation_probe.py",
"before_sha256": null,
"after_sha256": "726d3e01ae21c1379588e1f08459449908cc8a75ffea1b337c33a1a888c66f59"
},
{
"path": "tests/test_layer_conformance.py",
"before_sha256": "93e3a8805460c4a6a4fd78734cf4dd85947a46e23d16a0d6898a43e8ec39275d",
"after_sha256": "3edf0a0d49c3560278a564c477834335cfaf5243341cb9345f0d4bf8994db56c"
},
{
"path": "tests/test_workload_join.py",
"before_sha256": "b5f5be43192d78105dbe86ada736d8a10705cadd4ee64682d1fb78768cbcd191",
"after_sha256": "1828908a5cd1f0bc13ca367dbd1245221c52d1ac60789c9e3bd51dd36cb8beb9"
},
{
"path": "tests/test_case_plan.py",
"before_sha256": "df8ccc89ab840efd1d5242c1b4e68a1c589168d89768ae44bdbb2b5f6d0e6b55",
"after_sha256": "944bc2a725ca1b7a10f4516c3ceed65f99627057dd15a859da4f8ffb3d97e71f"
},
{
"path": "tests/test_case_type.py",
"before_sha256": "4e2ec3faa030d3036534b7f9564a41abf567d4a951c8458a589b68076b7debf9",
"after_sha256": "5a217a172e7e2ffbea66f1beee9a1c18bf5e97f9fb25b83cb96b6ba976cbb2a5"
},
{
"path": "docs/development/safe-unit-tests.md",
"before_sha256": null,
"after_sha256": "b157c3e6956a41dcd9fc3912d0c7d09a664f11f08f0f8a8e4cae57fac9747cf7"
},
{
"path": "workplans/WARDEN-WP-0044-security-case-follow-through.md",
"before_sha256": "10c6f02d578837dee12acd8b638d18c5b9f93b6a9c4aff3083ce60c3752d1664",
"after_sha256": "074bfcf2f7841e78bcd404bf573982d244b00f2f500e198b7fe80fea660de991"
},
{
"path": "tests/fixtures/workload-coverage/provenance.json",
"before_sha256": null,
"after_sha256": "a4a203c1bd7bc5b8039d1b2525bea65dbae288a3f552969e4218cd5abda96990"
},
{
"path": "tests/fixtures/workload-coverage/rapp-core-hub/declarations/rapp.yaml",
"before_sha256": null,
"after_sha256": "9ce902da0c77809f1094a634244652835b162f59682e9fa6923d8c8aa4ed4a3c"
},
{
"path": "tests/fixtures/workload-coverage/rapp-issue-core/declarations/rapp.yaml",
"before_sha256": null,
"after_sha256": "a1956deecf2f0fbca44549e5ea5e8f1c4b74ebf91a9482c64c982491af0d923b"
},
{
"path": "tests/fixtures/workload-coverage/rapp-qonto/declarations/rapp.yaml",
"before_sha256": null,
"after_sha256": "15aa9809e8d6a120c516be5ce9adfb72c00382140c171e791083ad117f503b3f"
}
],
"patch_sha256": "1fe65076ce7e633be304fc779bf2c87b7ee1e4e460de55ca74355b5842d036f5",
"patch_applies_to_exact_archive": true,
"validation": {
"focused_initial": "136 passed, 2 failed (ambient source/metadata assumptions)",
"focused_metadata_corrected": "42 passed",
"guard_initial": "28 passed",
"full_initial": "13 failed, 768 passed, 2 skipped, 4 deselected; diagnostic intermediate state, retained",
"focused_corrected": "117 passed",
"full_final": "783 passed, 4 deselected in 62.70s",
"lint": "new runner and regression files: all checks passed"
},
"full_initial_note": "Intermediate diagnostic run: a source correction removing WARDEN_MEMORY=0 was made while its parent had already loaded the earlier runner. No final-candidate claim is made from that mixed-version diagnostic run. Its actual refusal traces and failures are retained. Final full run used stable corrected code.",
"ambient_controls": {
"input_tokens": "synthetic BAO_TOKEN and VAULT_TOKEN only",
"input_home": "temporary synthetic HOME with synthetic .vault-token created by harness; never a real user home",
"input_other": "synthetic PYTHONPATH and invalid synthetic PYTEST_ADDOPTS prove they are not propagated",
"child_probe": "synthetic token/HOME monkeypatches discarded; child reports only presence booleans; socket/provider/home/nested operations refused",
"actual_credential_values_read": false
},
"native_owner_actions": false,
"local_process_exceptions": "guarded Python fixtures; bounded local git log/status; exact-byte synthetic Bash doubles and five fixed printf fixtures",
"canonical_edits": false,
"commits": false,
"dependencies_downloaded": false,
"workplan": {
"path": "workplans/WARDEN-WP-0044-security-case-follow-through.md",
"task": "WARDEN-WP-0044-T03",
"status": "progress preserved",
"ids_statuses_dependencies_unchanged": true,
"new_workplan_or_task": false
},
"limits": [
"Trusted Python unit-test accident guard, not an OS isolation or hostile-code security boundary.",
"Direct pytest bypasses launcher. Native extensions, preopened descriptors and non-open filesystem syscalls are not fully controlled.",
"Reviewed system/interpreter/source roots remain readable. Exact Bash/Git fixtures have no Python audit hook inside their native binaries.",
"No production Warden code, authority, catalog/source/parameter pin or native acceptance changed."
]
}

View file

@ -0,0 +1,26 @@
{
"README.md": "7322316db3fdd7107efe82d42166a25dd494161f8062aaa833b4497392fd04bb",
"candidate/Makefile": "8cf08ec680ed6bd323a1ce8475ade731dbeebcd64ffd43ecd169308f8a727940",
"candidate/docs/development/safe-unit-tests.md": "b157c3e6956a41dcd9fc3912d0c7d09a664f11f08f0f8a8e4cae57fac9747cf7",
"candidate/scripts/run_unit_tests.py": "8157e44df298fa4c47c6c08b2dc68e3ac945c4beb3f47a251a7afbbc55eb1bd2",
"candidate/tests/fixtures/workload-coverage/provenance.json": "a4a203c1bd7bc5b8039d1b2525bea65dbae288a3f552969e4218cd5abda96990",
"candidate/tests/fixtures/workload-coverage/rapp-core-hub/declarations/rapp.yaml": "9ce902da0c77809f1094a634244652835b162f59682e9fa6923d8c8aa4ed4a3c",
"candidate/tests/fixtures/workload-coverage/rapp-issue-core/declarations/rapp.yaml": "a1956deecf2f0fbca44549e5ea5e8f1c4b74ebf91a9482c64c982491af0d923b",
"candidate/tests/fixtures/workload-coverage/rapp-qonto/declarations/rapp.yaml": "15aa9809e8d6a120c516be5ce9adfb72c00382140c171e791083ad117f503b3f",
"candidate/tests/test_case_plan.py": "944bc2a725ca1b7a10f4516c3ceed65f99627057dd15a859da4f8ffb3d97e71f",
"candidate/tests/test_case_type.py": "5a217a172e7e2ffbea66f1beee9a1c18bf5e97f9fb25b83cb96b6ba976cbb2a5",
"candidate/tests/test_layer_conformance.py": "3edf0a0d49c3560278a564c477834335cfaf5243341cb9345f0d4bf8994db56c",
"candidate/tests/test_safe_unit_runner.py": "6b623d18879e7564dd11447c16d3ec9f80321a25a525fcd0306b6a903a68031a",
"candidate/tests/test_workload_join.py": "1828908a5cd1f0bc13ca367dbd1245221c52d1ac60789c9e3bd51dd36cb8beb9",
"candidate/tests/unit_isolation_probe.py": "726d3e01ae21c1379588e1f08459449908cc8a75ffea1b337c33a1a888c66f59",
"candidate/workplans/WARDEN-WP-0044-security-case-follow-through.md": "074bfcf2f7841e78bcd404bf573982d244b00f2f500e198b7fe80fea660de991",
"candidate.patch": "1fe65076ce7e633be304fc779bf2c87b7ee1e4e460de55ca74355b5842d036f5",
"focused-corrected.log": "b882102d13be229872d931d97187b8893ad8edfd889b2571b3cfb558b73c6811",
"focused-initial.log": "c115cbd9ea50e9a55cd35f3b78b42cc10204d5780beba8c40501d55ee04760e3",
"focused-metadata-corrected.log": "e027958397e90c267e7d07e43ce4c78bbe8cfb980bdad575eff0bcadce023b3f",
"full-final.log": "544a4be60b5409ad7af5d1b399691c962ed0fffefd2732376b1a2a4ea2c992be",
"full-initial-failed.log": "be4aedc321eb7ae6e956f670b4d6ee89d12ef7057fec7dcbe35e9c98829b3d04",
"guard-regressions-initial.log": "399377e7ef48191e50c473a085fa44f25132a838a3597010bd416ea91dce5373",
"implementation.json": "8033b323178e1d3b031a45466687fe05479627e99559d9de7b3baef52ab8671f",
"lint.log": "82b3e6a6c090a57601d22943bd23fca9218d1031dbe5a7b754092f9a156b4f18"
}

View file

@ -0,0 +1,127 @@
{
"schema": "custodian.warden-safe-unit-runner-review.v1",
"date": "2026-10-17",
"role": "independent reviewer of platform_f2_review author candidate; reviewer-proposed correction kept separate",
"disposition": "reject original exact14-file candidate; minimal correction proposed and focused-tested separately",
"inputs": {
"base": "922c26da0f3fcb0182352ea83e6ae06f29878580",
"candidate.patch": "sha256:1fe65076ce7e633be304fc779bf2c87b7ee1e4e460de55ca74355b5842d036f5",
"implementation.json": "sha256:8033b323178e1d3b031a45466687fe05479627e99559d9de7b3baef52ab8671f",
"README.md": "sha256:7322316db3fdd7107efe82d42166a25dd494161f8062aaa833b4497392fd04bb",
"packet-hashes.json": "sha256:1567ff1ad558fdb464818bb555dab79152477c85113f89874daa3049029733a8",
"all14_candidate_after_hashes": "independently verified against applied fresh archive before reviewer mutations",
"net_kingdom": "befb0bc68cd25b625804fce559476eefd702521d",
"phase_memory": "755fd2c3e2a5414cd89ee59df1814196d872b768"
},
"findings": [
{
"id": "SUR-R1-F1",
"severity": "medium",
"blocking": true,
"location": "scripts/run_unit_tests.py Guard.audit open write-mask",
"title": "O_TRUNC alone is classified as read access and truncates readable source",
"counterexample": "os.open(synthetic_readable_source, os.O_RDONLY | os.O_TRUNC) triggers the audited open event with no O_WRONLY/O_RDWR/O_CREAT bits. Candidate classifies it as a read and permits it under ROOT. On Linux it successfully truncates the source file. Independent probe used only a21-byte synthetic scratch fixture and observed truncation; no canonical file or ambient value was touched.",
"expected": "Refuse before opening/truncation whenever open flags request truncation, including read-only flag combinations.",
"scope": "An open-audit loophole within the advertised contract, not the documented limitation covering non-open mutation syscalls.",
"minimal_fix": "Include os.O_TRUNC and conservative os.O_APPEND in write mask. New regression uses only synthetic data in the temporary fixture tree with a separate guarded writable subtree."
},
{
"id": "SUR-R1-F2",
"severity": "medium",
"blocking": true,
"location": "tests/fixtures/workload-coverage/provenance.json and snapshot consumers",
"title": "Public fixture projection hashes are recorded but never checked",
"counterexample": "Append one synthetic comment to rapp-core-hub projection. Existing workload-join and published-coverage tests still both pass, despite projection_sha256 being stale. Reviewer hash check fails with expected9ce902... versus observed2e9381....",
"expected": "Default unit tests fail closed when shipped projection bytes disagree with their recorded provenance, while preserving documented snapshot-only semantics.",
"minimal_fix": "Add one ordinary test validating the closed3-entry projection set and every projection_sha256. It does not query live repositories or claim live/source-owner freshness."
}
],
"positive_review": {
"ordinary_make_entry": "Makefile now launches an already installed interpreter with-I and the committed runner, without uv/resolution. Worker creates guard before pytest import/collection. Parent environment is constructed and guarded children receive reconstructed HOME/env even after synthetic parent mutation.",
"closed_process_inventory": "No generic Python -c, generic Git status, provider token lookup, extra shell text or inherited-FD widening was permitted by independent probes. Native Bash exceptions are exact fixed printf commands/exact-byte doubles; child Git is restricted to2 metadata queries. Production adapter behavior and catalog/parameter pins are untouched.",
"python_children": "Existing child probes independently passed under ordinary make test. A corrupted pinned validator module was refused before even the synthetic Popen observer ran. Six real pinned BrowserInputs integration tests passed in first focused run.",
"loopback": "Single actual synthetic dry desk HTTP test passed. Unleased TCP sockets were refused. Code binds127.0.0.1:0 only, registers its resulting endpoint and restricts connect to it; lease clears per test. No real loopback service was contacted.",
"docs_and_maintainability": "14-file scope is justified by launcher/regressions,4 explicit source-fixture adaptations, documentation/workplan note and3 projections/provenance. Docs candidly call this a trusted-test accident guard, not an OS sandbox; direct pytest and native/non-open/preopened-descriptor limits remain. Frozen artifact tests now explicitly measure a snapshot, not the current estate."
},
"validation": [
{
"command": "python3 /tmp/warden-safe-unit-runner-review-r1/run.py focused.log <18 author guard tests,18 independent probes,6 BrowserInputs integration tests,desk HTTP,2 coverage tests>",
"result": "43 passed,1 failed in12.64s; only original O_TRUNC guard failure"
},
{
"command": "python3 .../run.py provenance-drift-existing.log <2 existing coverage tests>",
"result": "2 passed despite deliberately stale fixture projection hash"
},
{
"command": "python3 .../run.py provenance-drift-negative.log tests/test_review_safe_runner.py::test_public_projection_hashes_are_current",
"result": "1 failed; independently detects the deliberately stale projection hash"
},
{
"command": "python3 .../run.py correction-regressions-before.log <2 newly proposed correction tests>",
"result": "2 failed before code fix and fixture restoration; exact counterexamples retained"
},
{
"command": "python3 .../run.py corrected-focus.log tests/test_safe_unit_runner.py tests/test_review_safe_runner.py tests/test_workload_join.py tests/test_layer_conformance.py::test_published_coverage_equals_measured_coverage",
"result": "40 passed in0.97s after minimal write-mask fix and restoration of original public fixture bytes"
},
{
"command": "python3 .../run.py collect-default.log --collect-only -q",
"result": "Collect-only receipt lists785 selected tests with correction2 tests; source has4 integration-marked tests excluded by unchanged default not-integration expression. Double-quiet collection omits the deselection summary; no native integration execution."
}
],
"correction": {
"file": "reviewer-correction.patch",
"sha256": "sha256:9407289f8da41ed6fff367baf566ad30f5510a2627c14e0ac0cf971bf9b465c9",
"applies": "After exact original candidate on fresh922c26d archive; application and all3 afterhashes independently checked in second scratch tree",
"files": {
"scripts/run_unit_tests.py": {
"before_sha256": "sha256:8157e44df298fa4c47c6c08b2dc68e3ac945c4beb3f47a251a7afbbc55eb1bd2",
"after_sha256": "sha256:86880094b33114fdefb26691140b5c9a516cdba5fe6ddabd70fd5b7f18e9d2aa"
},
"tests/test_safe_unit_runner.py": {
"before_sha256": "sha256:6b623d18879e7564dd11447c16d3ec9f80321a25a525fcd0306b6a903a68031a",
"after_sha256": "sha256:5408e7face98b01b92da077b0b2d115fcb370ec46e572ad5a69e3d0c10df8433"
},
"tests/test_workload_join.py": {
"before_sha256": "sha256:1828908a5cd1f0bc13ca367dbd1245221c52d1ac60789c9e3bd51dd36cb8beb9",
"after_sha256": "sha256:8ef0891daf4b7ac520430a514690364917110628edc760911a850195cffbdd4a"
}
},
"status": "Reviewer-proposed minimal correction, focused-tested; separate from original author patch and original rejection. Root may carry as corrected candidate pending its source disposition/revalidation.",
"original_public_fixture_bytes": "Restored unchanged; no projection/provenance hash was updated to hide the negative test."
},
"protected_source_hashes": {
"src/warden/case_run.py": "sha256:1bc73e30ac718fd75bbaff2a739495fc051aeaec73802ac71f0583cb2d53ab0a",
"src/warden/case_inputs.py": "sha256:1334b0cd9897e763cfea2d306e997c659f3f284ecc3f9612140c2104835da7c7",
"src/warden/routing/models.py": "sha256:b85372b2572a49af62e9534f26a33963b894633c7cd43dd2a28416b8959cba3e",
"registry/routing/catalog.yaml": "sha256:ba9634a92e584dac8c42e8624ab52adce06e79a285209cb64c0daa4dac9cd7d8",
"registry/generated/high-risk-data-paths.yaml": "sha256:5cd9c03b86751f7197cb5661a53a86d59765137958b215ec14bb343156f216d0",
"pyproject.toml": "sha256:c8f7c53f0bd0f8ae4e7242342fe47b1f36d47fd221964782a3a6953e0f804e01"
},
"boundaries": {
"canonical_edits": false,
"commits": false,
"ambient_credential_reads": false,
"native_owner_actions": false,
"dependencies_downloaded": false,
"synthetic_controls": "Allowlisted outer process environment with only synthetic BAO_TOKEN,VAULT_TOKEN,HOME/.vault-token,PYTHONPATH,PYTEST_ADDOPTS,BASH_ENV/ENV sentinels. Source archives are public frozen commits. Provider commands were refused before launch; only intended local fixture Python/Bash and synthetic HTTP were exercised."
},
"limits": [
"No full-suite recertification; author783-pass final run is attributed to author, not adopted as independent full-suite evidence.",
"Source roots/interpreters/libraries remain trusted and directory-readable by design. This is no OS isolation or grant.",
"Projection digest check proves shipped fixture consistency, not live estate freshness or source-owner authenticity.",
"No native acceptance,1.3 pin,draft promotion,credential investigation or external owner assent.",
"Original author initial failure logs remain intact."
],
"packet_hashes": {
"provenance-drift-negative.log": "sha256:357556c55ac2a8befe88b688ced1808a50132f4fcb42b670ba3468085ea63098",
"reviewer-probes.py": "sha256:0b49fc2ad7aeeca0cabb0961b06d8cdc85ae5109f36bf81e4245e55127357574",
"provenance-drift-existing.log": "sha256:d633d56ea09739398410f73e61cc2f24fb25aa180d885a5a8ceea55f3d4e3fb4",
"run.py": "sha256:f7fc81b8acbcd0712ee5f79a16b27aa1cdd0af11db761f9e94fba8b91e51ec8a",
"reviewer-correction.patch": "sha256:9407289f8da41ed6fff367baf566ad30f5510a2627c14e0ac0cf971bf9b465c9",
"corrected-focus.log": "sha256:2c55ba79aefa81de60a93ef7aa385f95c91925cad6889aa963c381bbaa0b2589",
"focused.log": "sha256:592a914c2c0855d6177bc84d72e433bfa2683865336ff1dde891bb099bba22f0",
"collect-default.log": "sha256:d41e8c609c11b28dd5baf0fc3763f0c882284a20da6018e00110a4a15f607228",
"correction-regressions-before.log": "sha256:7927b0e20deca4da6450534bd1d0566733908ffcf5b944ede95b02c9f2492af6"
}
}

View file

@ -0,0 +1,56 @@
diff --git a/scripts/run_unit_tests.py b/scripts/run_unit_tests.py
--- a/scripts/run_unit_tests.py
+++ b/scripts/run_unit_tests.py
@@ -62,7 +62,7 @@
path = Path(os.fsdecode(args[0])).resolve()
mode, flags = args[1:3]
write = ((isinstance(mode, str) and any(c in mode for c in 'wax+'))
- or (isinstance(flags, int) and flags & (os.O_WRONLY | os.O_RDWR | os.O_CREAT)))
+ or (isinstance(flags, int) and flags & (os.O_WRONLY | os.O_RDWR | os.O_CREAT | os.O_TRUNC | os.O_APPEND)))
roots = (self.temporary,) if write else self.read_roots
if path != Path('/dev/null') and not inside(path, roots):
raise IsolationDenied('unit isolation: file outside reviewed roots')
diff --git a/tests/test_safe_unit_runner.py b/tests/test_safe_unit_runner.py
--- a/tests/test_safe_unit_runner.py
+++ b/tests/test_safe_unit_runner.py
@@ -79,3 +79,14 @@
provider.chmod(0o700)
with pytest.raises(PermissionError, match='double bytes differ'):
subprocess.run([str(provider), 'token', 'lookup'], check=True)
+
+
+def test_os_open_truncation_respects_read_only_source_root(guarded, tmp_path, monkeypatch):
+ # Synthetic readable source outside the guard's writable subtree.
+ source = tmp_path / 'synthetic-source'
+ source.write_bytes(b'synthetic public source')
+ monkeypatch.setattr(guarded, 'temporary', tmp_path / 'writable')
+ with pytest.raises(PermissionError, match='unit isolation'):
+ descriptor = os.open(source, os.O_RDONLY | os.O_TRUNC)
+ os.close(descriptor)
+ assert source.read_bytes() == b'synthetic public source'
diff --git a/tests/test_workload_join.py b/tests/test_workload_join.py
--- a/tests/test_workload_join.py
+++ b/tests/test_workload_join.py
@@ -1,5 +1,7 @@
"""Explicit lane-to-workload join tests (WARDEN-WP-0032 / RMGR-WP-0010-T06)."""
from pathlib import Path
+import hashlib
+import json
import yaml
@@ -68,3 +70,14 @@
assert not report["resolved"]
assert report["unknown"][0]["lane"] == "x"
assert "deployable" in report["unknown"][0]["reason"]
+
+
+def test_public_workload_projection_matches_provenance():
+ base = ROOT / 'tests/fixtures/workload-coverage'
+ provenance = json.loads((base / 'provenance.json').read_text())
+ expected = {'rapp-core-hub', 'rapp-issue-core', 'rapp-qonto'}
+ assert len(provenance) == len(expected)
+ assert {row['repo'] for row in provenance} == expected
+ for row in provenance:
+ projection = base / row['repo'] / 'declarations/rapp.yaml'
+ assert hashlib.sha256(projection.read_bytes()).hexdigest() == row['projection_sha256']

View file

@ -0,0 +1,82 @@
"""Reviewer-owned synthetic accident-control probes, no credential/native actions."""
import hashlib
import json
import os
from pathlib import Path
import socket
import subprocess
import sys
import pytest
ROOT=Path(__file__).resolve().parents[1]
@pytest.fixture
def guard(request):
value=getattr(request.config,'_unit_guard',None)
assert value is not None
return value
@pytest.mark.parametrize('name',['BAO_TOKEN','VAULT_TOKEN','PYTHONPATH','PYTEST_ADDOPTS','BASH_ENV','ENV'])
def test_synthetic_ambient_environment_not_propagated(guard,name):
assert name not in os.environ
@pytest.mark.parametrize('path',[
'/tmp/warden-safe-unit-runner-review-r1/outer-home/.vault-token',
'/tmp/warden-review-nonexistent-ambient-home/.kube/config',
])
def test_synthetic_outer_home_open_refused(guard,path):
with pytest.raises(PermissionError,match='unit isolation'):
Path(path).read_bytes()
@pytest.mark.parametrize('command,options',[
(['bao','token','lookup'],{}),
(['/usr/bin/git','status'],{}),
([sys.executable,'-c','print(42)'],{}),
("printf 'sekret'; printf extra",{'shell':True}),
(['printf','sekret'],{}),
([sys.executable,'-c','print("SYNTHETIC-SECRET")'],{'close_fds':False}),
])
def test_no_generic_or_widened_process_execution(guard,command,options):
with pytest.raises(PermissionError,match='unit isolation'):
subprocess.run(command,**options)
def test_changed_validator_module_refuses_before_launch(guard,tmp_path,monkeypatch):
from warden import case_inputs
directory=tmp_path/'warden-case-validator-review'
for relative in case_inputs.SOURCE_PINS:
target=directory/relative;target.parent.mkdir(parents=True,exist_ok=True)
target.write_bytes(b'not the pinned producer')
calls=[]
def forbidden(*args,**kwargs):
calls.append(args)
raise AssertionError('process must not launch')
monkeypatch.setattr(guard,'original_popen',forbidden)
with pytest.raises(PermissionError,match='validator source pin differs'):
subprocess.run([sys.executable,'-I','-c',case_inputs._VALIDATE,str(directory)])
assert calls==[]
def test_unexpected_loopback_socket_refused(guard):
with pytest.raises(PermissionError,match='sockets disabled'):
socket.socket(socket.AF_INET,socket.SOCK_STREAM)
def test_source_truncate_via_os_open_is_refused(guard):
path=ROOT/'tests/reviewer-truncate.fixture'
before=path.stat().st_size
try:
descriptor=os.open(path,os.O_RDONLY|os.O_TRUNC)
except PermissionError:
pass
else:
os.close(descriptor)
pytest.fail('source O_TRUNC open escaped the write guard')
assert path.stat().st_size==before
def test_public_projection_hashes_are_current():
base=ROOT/'tests/fixtures/workload-coverage'
for row in json.loads((base/'provenance.json').read_text()):
data=(base/row['repo']/'declarations/rapp.yaml').read_bytes()
assert hashlib.sha256(data).hexdigest()==row['projection_sha256']

View file

@ -0,0 +1,8 @@
from pathlib import Path
import subprocess,sys
r=Path('/tmp/warden-safe-unit-runner-review-r1')
env={'HOME':str(r/'outer-home'),'TMPDIR':str(r/'outer-tmp'),'PATH':'/usr/bin:/bin','LANG':'C.UTF-8','BAO_TOKEN':'synthetic-review-token-only','VAULT_TOKEN':'synthetic-review-token-only','PYTEST_ADDOPTS':'invalid-synthetic-pytest-options','PYTHONPATH':'/tmp/never-import-synthetic','BASH_ENV':'/tmp/never-read-synthetic-bash-env','ENV':'/tmp/never-read-synthetic-env'}
command=['make','test','UNIT_PYTHON=/tmp/warden-kernel-review-r1/final/.venv/bin/python','PHASE_MEMORY_REPO='+str(r/'phase-memory'),'TEST_ARGS=--netkingdom-root '+str(r/'net-kingdom')+' -q '+ ' '.join(sys.argv[2:])]
with (r/sys.argv[1]).open('w') as output:
result=subprocess.run(command,cwd=r/'ops-warden',env=env,stdout=output,stderr=subprocess.STDOUT)
print(result.returncode);sys.exit(result.returncode)