Record reviewed case source evidence (11/13)
This commit is contained in:
parent
30e41c948e
commit
df5765e0e1
20 changed files with 1552 additions and 0 deletions
|
|
@ -0,0 +1,17 @@
|
|||
import sys
|
||||
|
||||
def guard(event,args):
|
||||
if event.startswith('socket.'):
|
||||
raise RuntimeError('review isolation: sockets disabled')
|
||||
if event == 'subprocess.Popen':
|
||||
cmd=args[1]
|
||||
if (type(cmd) is list and len(cmd)==5 and cmd[:3]==[sys.executable,'-I','-c']
|
||||
and cmd[3].startswith('import sys as _review_sys\ndef _review_guard(')
|
||||
and str(cmd[4]).startswith('/tmp/warden-case-validator-') and args[3]=={}):
|
||||
return
|
||||
raise RuntimeError('review isolation: subprocess disabled')
|
||||
if event in {'os.system','os.exec','os.posix_spawn'}:
|
||||
raise RuntimeError('review isolation: subprocess disabled')
|
||||
if event=='open' and isinstance(args[0],str) and (args[0].startswith('/home/') or args[0].startswith('/root/')):
|
||||
raise RuntimeError('review isolation: ambient home denied')
|
||||
sys.addaudithook(guard)
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"exit_code": 0,
|
||||
"stdout": "[detached HEAD ae7bc73] fix(case): preserve attended authority at dispatch and validate session lanes\n 8 files changed, 252 insertions(+), 27 deletions(-)\n create mode 100644 tests/test_case_attended_boundary.py\n",
|
||||
"stderr": ""
|
||||
}
|
||||
|
|
@ -0,0 +1,267 @@
|
|||
[
|
||||
{
|
||||
"path": ".custodian-brief.md",
|
||||
"sha256": "4ff4bb94315149e07d36b8f4ecbbfc63b61d72e9d81f0f43a9c2f02bc13ada85",
|
||||
"index": "100644 34573d262327057c11628ce8a7ca78292968545b 0\t.custodian-brief.md"
|
||||
},
|
||||
{
|
||||
"path": "WORK-RECORDS.md",
|
||||
"sha256": "b6af9b1cb21e3a64b2ef8a5e732bc35c39cdeaef6af7a18f24824e8ec9fb5a76",
|
||||
"index": "100644 34cf268862326a5832a7d0be9e84eb296e5601bb 0\tWORK-RECORDS.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/ADHOC-2026-06-27.md",
|
||||
"sha256": "f0a89c1809e23b436767a73b70636c283e79216fb19678f08bef2b9e62e42ddb",
|
||||
"index": "100644 d75908fb225c1f964b5b697032a6f98c4a13c1db 0\tworkplans/ADHOC-2026-06-27.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/ADHOC-2026-06-29.md",
|
||||
"sha256": "9869f07cdfe79d37314d36db74a434a55b50c0b965ae53f29d76ca9a9a73151f",
|
||||
"index": "100644 b46be0fd6ee2eeea9ffeff695b887b61aab8a7a2 0\tworkplans/ADHOC-2026-06-29.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/ADHOC-2026-08-11.md",
|
||||
"sha256": "6bba4f5dab9fc64f7b65df7c2ab7e4b9d4dbb69ba1c4a41c8440dbd23555aea4",
|
||||
"index": "100644 3d858fe808bd7a9d8318cdcd38ee012a8d907ca4 0\tworkplans/ADHOC-2026-08-11.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/ADHOC-2026-08-17.md",
|
||||
"sha256": "39ec882551bf5643fabb3ebc9f47300b4e6f6caf6d67a0a26bc100b68d4e313e",
|
||||
"index": "100644 65d75959a0fd23dd861e24321b1b46057d6fea5f 0\tworkplans/ADHOC-2026-08-17.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/ADHOC-2026-09-08.md",
|
||||
"sha256": "27c64084fdd16b926b138584d96688061a18a58d4d8152d9688b4486b9687c05",
|
||||
"index": "100644 c1ae7c3ea0d8e722d7073ae920780a5e56611294 0\tworkplans/ADHOC-2026-09-08.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/ADHOC-2026-10-03.md",
|
||||
"sha256": "8de5e5ba28ce2cd94c5864e316d54fe32e6cdfdb0e75551fe92ed25b81eeafa6",
|
||||
"index": "100644 e76cd016eab0dfd9eceac7d8033b40f92c9ada32 0\tworkplans/ADHOC-2026-10-03.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0016-ops-bridge-tunnel-cert-pilot.md",
|
||||
"sha256": "ad904837aa2d83d888d46c482fe381eba328c96a4617209ea8a9ae2d7d64c467",
|
||||
"index": "100644 a787f1da8347fdd2219ef67a569d21a192563343 0\tworkplans/WARDEN-WP-0016-ops-bridge-tunnel-cert-pilot.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0017-access-front-door-discoverability.md",
|
||||
"sha256": "a35f65a40c98d35e86f352c1430837b8bc9f269bddaddfe4a71c6414f678d85c",
|
||||
"index": "100644 fe9c5b15a464aa3ae104576bfc0a04510d944f89 0\tworkplans/WARDEN-WP-0017-access-front-door-discoverability.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0018-whynot-design-npm-lane-activation.md",
|
||||
"sha256": "6d9145534f7fa80cec9f185751d3796fdaab4a2d88b289a5451ba04e24822855",
|
||||
"index": "100644 f923be5351582a2bab38afc1aca3b4e5da0fe008 0\tworkplans/WARDEN-WP-0018-whynot-design-npm-lane-activation.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0019-route-to-secrets-engine.md",
|
||||
"sha256": "8fa2d79c85a821f7bc51044f37001bad613afb75d143181e2e0a01b213e06df8",
|
||||
"index": "100644 602fad1b4e56fc69de85aa2e0843676f50186340 0\tworkplans/WARDEN-WP-0019-route-to-secrets-engine.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0020-ops-warden-worker.md",
|
||||
"sha256": "d565f65413a2698160caf33ab30d7513a03d06ddcee7d624b198bb8841abdcc3",
|
||||
"index": "100644 1230ed3175d3f5f175fc0146e8006ebd8be5a369 0\tworkplans/WARDEN-WP-0020-ops-warden-worker.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0021-enable-scheduled-worker-tick.md",
|
||||
"sha256": "4f7afe5bdd147705e68d31d02f39251543c6c120ce22d893b98af063e303c361",
|
||||
"index": "100644 2500d4b346dffbe6d5f9848c5440bfa8d85d5d14 0\tworkplans/WARDEN-WP-0021-enable-scheduled-worker-tick.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0022-audit-trail-and-activity.md",
|
||||
"sha256": "f733fb0d7cfcc7b44aba49a730e7f51381d6478a87c394161e77c90577c26505",
|
||||
"index": "100644 63171f58096efb8d4bc07c69db250fff7038f4e1 0\tworkplans/WARDEN-WP-0022-audit-trail-and-activity.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0023-intent-scope-alignment-closeout.md",
|
||||
"sha256": "97d25825ba626a3979e8d6217aebd27f58d27fe9f92e8b94eb2f63e2bb843cb9",
|
||||
"index": "100644 99278d609aa5324c625364b2e0ac636ad9219ddf 0\tworkplans/WARDEN-WP-0023-intent-scope-alignment-closeout.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0024-experiential-memory-and-agent-sessions.md",
|
||||
"sha256": "22bde2d1398a4260e337768c6cf71cf80cd61d466371b6cfd0c0f0c18fc72378",
|
||||
"index": "100644 3ebac662f6c96f69a5fa6cbb5917999a4e24455a 0\tworkplans/WARDEN-WP-0024-experiential-memory-and-agent-sessions.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0025-forgejo-admin-api-token-lane.md",
|
||||
"sha256": "ded5bdfdbe897f3376c71c7a169caca51a9d75453ba66cf216ec8dfcab91c708",
|
||||
"index": "100644 5c4e77249b01fd8cb9300a237c917d95363cf2d7 0\tworkplans/WARDEN-WP-0025-forgejo-admin-api-token-lane.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0026-credential-disclosure-hygiene.md",
|
||||
"sha256": "f65ccdf9c920e9138353018e2ed5a7fbbd590246eb730fc6f57c75b6d2e09eea",
|
||||
"index": "100644 309f77187b31c1287b085affefc9d271ea40858c 0\tworkplans/WARDEN-WP-0026-credential-disclosure-hygiene.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0027-credential-governance-lockdown.md",
|
||||
"sha256": "0d0c08458718ec88883c4b257ea80011123a6d5aa2eea36fe28db331ff6d438f",
|
||||
"index": "100644 c14e9c303a1f1a096fdf710ee48112f68205435e 0\tworkplans/WARDEN-WP-0027-credential-governance-lockdown.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0028-tenant-secret-custody.md",
|
||||
"sha256": "92cc0ad8d42209d5d7e45122e8ddd67e1970de1d200df373885ba5fb75e0d22a",
|
||||
"index": "100644 fe81983444e5127bb8a0fdf94f42c3817758c67e 0\tworkplans/WARDEN-WP-0028-tenant-secret-custody.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0029-policy-front-door-and-founder-surface.md",
|
||||
"sha256": "2b21f06c062edd96943a1d26fd86c6a27b341b1db4532e528edbaebd4ced7e66",
|
||||
"index": "100644 4008d825b4c39d3f0e4a80f6d290af9b551fd812 0\tworkplans/WARDEN-WP-0029-policy-front-door-and-founder-surface.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0030-delegation-register.md",
|
||||
"sha256": "59bf962b355cd9734315108f9868508739ddcb4855591bff53aea3634aed47f7",
|
||||
"index": "100644 49612d072663af831f7b7314c4b77e4b9596097b 0\tworkplans/WARDEN-WP-0030-delegation-register.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0031-policy-caller-identity.md",
|
||||
"sha256": "0fa890ba81833180feb727ba35dcf01ead7d7dedf55a285a49a2585049b4bffb",
|
||||
"index": "100644 c4c600c47a6e4a65951b1adf324cc33f13cb1be6 0\tworkplans/WARDEN-WP-0031-policy-caller-identity.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0032-security-zones.md",
|
||||
"sha256": "4497947e57fb86e883090d07c8bef031fd5fe4a7f3eb065d530ebe327d97b1cc",
|
||||
"index": "100644 6c8000ade056b82e019826d01a7e9e8cf0f4de98 0\tworkplans/WARDEN-WP-0032-security-zones.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0033-native-lane-handoff.md",
|
||||
"sha256": "74747ebf7c628b1a5336c63aa3924212068a6015f370e647cf9127949c181998",
|
||||
"index": "100644 55cd015061bb610fe43c8f2ee821bb71b092d77c 0\tworkplans/WARDEN-WP-0033-native-lane-handoff.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0034-layer-model-v07-conformance.md",
|
||||
"sha256": "57e10b9efff02d7437231424ebc4d48864a2019939c2cda2fa10629a4ede2a3b",
|
||||
"index": "100644 d6ebfdce0e2901b42c98e38e9eaaac0f1d817e79 0\tworkplans/WARDEN-WP-0034-layer-model-v07-conformance.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0035-policy-nexus-forgejo-source-read-route.md",
|
||||
"sha256": "d40987b48a8416de386972d214ce01dba138a9f294cc948de36085c794c76418",
|
||||
"index": "100644 1210b158a3836d2b4df934f50fb538c5241b09d5 0\tworkplans/WARDEN-WP-0035-policy-nexus-forgejo-source-read-route.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0036-attended-login-openbao-output.md",
|
||||
"sha256": "e0584491b5a6a7d4db0cf61a689f733b4a6597778ca79a3f8f2207fe7ecfb8cc",
|
||||
"index": "100644 452eb41267ea99cc83104fcb2a782c0b244b87d1 0\tworkplans/WARDEN-WP-0036-attended-login-openbao-output.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0037-whynot-design-forgejo-npm-lane.md",
|
||||
"sha256": "7c64a631eb70d9ff42826ea5966cac571786ff86bac5393f88c328aeb14aa9ba",
|
||||
"index": "100644 a3eba2dff6517a64b2c5d3d9b9a9c14ca4570ec6 0\tworkplans/WARDEN-WP-0037-whynot-design-forgejo-npm-lane.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0038-plan-mutation-intent.md",
|
||||
"sha256": "09b0ed8c6315255796a2da0d64dfd001b1f6de2e903ac2ea79bc5667b499fb83",
|
||||
"index": "100644 8c9c5b6df7d1f48b48f8c2056c2a8186935184ee 0\tworkplans/WARDEN-WP-0038-plan-mutation-intent.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0039-explicit-policy-refusal.md",
|
||||
"sha256": "e8773a7b4196cf77a48ab4ed0804a5f826a0a0b5e7972f968681746ebbc6e3e9",
|
||||
"index": "100644 ca0828d2679eda031fb86d66eb886ccb38ee1843 0\tworkplans/WARDEN-WP-0039-explicit-policy-refusal.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0040-unknown-zone-fail-closed-adoption.md",
|
||||
"sha256": "a4b8e768eaacd5ab5a90f69a1abcb3bd48ce821fcdea208b0ee75d9326f0d512",
|
||||
"index": "100644 f07fb535d5ad00f5330f16a5a6e927da6960fe52 0\tworkplans/WARDEN-WP-0040-unknown-zone-fail-closed-adoption.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0041-catalog-lane-scaffolding.md",
|
||||
"sha256": "c16993301f29e7f5ea005cccdbe360ac9c4c3949e6988e2b7a1f1e5df6235bc1",
|
||||
"index": "100644 8a1ca341e9fcc041dcf99be8706f0db2a39408a6 0\tworkplans/WARDEN-WP-0041-catalog-lane-scaffolding.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0042-openbao-structure-survey-route.md",
|
||||
"sha256": "1e48399d6ef8a509898e8ea0b334a378c51ec467aaa704b6dbf8485aed29fa8b",
|
||||
"index": "100644 097d64791e79e782640514c7324e2ff8a5dc435c 0\tworkplans/WARDEN-WP-0042-openbao-structure-survey-route.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0043-platform-supplier-credentials.md",
|
||||
"sha256": "c059b7f80ad4c0e5faa8ad15532ab6c2577d0c383ba91cde7293534b6e4683e2",
|
||||
"index": "100644 d359328239b0b897ccffbf037a12b06d1f0d126a 0\tworkplans/WARDEN-WP-0043-platform-supplier-credentials.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/WARDEN-WP-0044-security-case-follow-through.md",
|
||||
"sha256": "10c6f02d578837dee12acd8b638d18c5b9f93b6a9c4aff3083ce60c3752d1664",
|
||||
"index": "100644 aa9f798b39bcfe1f42b9a6777b1f83e7973e3c42 0\tworkplans/WARDEN-WP-0044-security-case-follow-through.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260515-WARDEN-WP-0001-initial-implementation.md",
|
||||
"sha256": "359456ecd25525d95748ca611e7c6c118eee2b914dae447c84c59442a6520458",
|
||||
"index": "100644 5425cbd886ff77afc9be7c8b62b97d03278e0a8e 0\tworkplans/archived/260515-WARDEN-WP-0001-initial-implementation.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260515-WARDEN-WP-0002-correctness-and-completeness.md",
|
||||
"sha256": "43ba78e9c6e9914360edc88a6f8f5af0f981b3078ef41808a784ce7388559fb7",
|
||||
"index": "100644 0b6044f99391e81a439f2782ee697434319df05b 0\tworkplans/archived/260515-WARDEN-WP-0002-correctness-and-completeness.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260515-WARDEN-WP-0003-test-coverage-and-quality.md",
|
||||
"sha256": "4fb4ac0cb72cf14dd72c6e5f313a068d90ead203460ad3ac68f0d5dd12b6a755",
|
||||
"index": "100644 d544f950037cb705d5f7195ee559f91ca9f6a4f4 0\tworkplans/archived/260515-WARDEN-WP-0003-test-coverage-and-quality.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260617-WARDEN-WP-0004-repo-hygiene-and-hub-sync.md",
|
||||
"sha256": "fbb36a3d9c4ab0ac829bba713160d919b3c12c19f5f5826fb4e8483edeec3ac1",
|
||||
"index": "100644 31330938708c5ae9b6412c5715549f2d69192589 0\tworkplans/archived/260617-WARDEN-WP-0004-repo-hygiene-and-hub-sync.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260617-WARDEN-WP-0005-openbao-doc-alignment.md",
|
||||
"sha256": "3c930a395d518f9b287855632c21fe99a3d5c78a758ece06498fb9e35f5ea8b9",
|
||||
"index": "100644 9969260deee2960143102edecadb9fd7c9736832 0\tworkplans/archived/260617-WARDEN-WP-0005-openbao-doc-alignment.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260617-WARDEN-WP-0006-netkingdom-alignment-and-access-stewardship.md",
|
||||
"sha256": "fbc90ca4c18f8180a7fbcd2b43f21d7f99a44c914eb17c78f823228f8e3cc64f",
|
||||
"index": "100644 8a7cc2f69821ac8cbf0de744073b7a938fa6b51d 0\tworkplans/archived/260617-WARDEN-WP-0006-netkingdom-alignment-and-access-stewardship.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260617-WARDEN-WP-0007-policy-gate-and-production-verify.md",
|
||||
"sha256": "613b73c79bad0929f621feb136b3141f9c60e23bf6e23650881a47c762101214",
|
||||
"index": "100644 f49eea27ea7c15f4f3d608669ddd60e3a13803b5 0\tworkplans/archived/260617-WARDEN-WP-0007-policy-gate-and-production-verify.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260618-WARDEN-WP-0008-production-ssh-path-and-stewardship-closeout.md",
|
||||
"sha256": "8362d4cdb933b52c9be968d5410c8548c7554cc4cd44ab0389b913674795a10a",
|
||||
"index": "100644 f3827285c4e279f36ac63c14ad166ff90544659a 0\tworkplans/archived/260618-WARDEN-WP-0008-production-ssh-path-and-stewardship-closeout.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260623-WARDEN-WP-0009-flex-auth-policy-gate-production.md",
|
||||
"sha256": "fa611c1a2e5c5a214e38f0673ebcda17e3f30e10556b268fb126ded9af2bdbbb",
|
||||
"index": "100644 7f87d0ed26b7f19438f164a10a10a46808824776 0\tworkplans/archived/260623-WARDEN-WP-0009-flex-auth-policy-gate-production.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260624-WARDEN-WP-0010-access-routing-charter.md",
|
||||
"sha256": "62bc994e3efbb124004f98992ded6842ff2748568b2e405c61b335385a35b9d7",
|
||||
"index": "100644 12357da7a3d1d5f994e70d0f06dcc80ea1faf848 0\tworkplans/archived/260624-WARDEN-WP-0010-access-routing-charter.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260624-WARDEN-WP-0011-routing-guide-cli.md",
|
||||
"sha256": "767cd3c53cfe64beab93f19475be823d0637a40140877db6dfcc60e2693652ce",
|
||||
"index": "100644 3fe363e93d7e7d38db58deeec0ef3023bb35f8fa 0\tworkplans/archived/260624-WARDEN-WP-0011-routing-guide-cli.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260624-WARDEN-WP-0013-production-integration-and-stewardship-closeout.md",
|
||||
"sha256": "ecc38b4998796e20d734105df81ef6e2eb05c8e830b6d0dbe344d6336b9f668b",
|
||||
"index": "100644 9812e11e5e3499a22d0d4dde01fccd26b7d0ee03 0\tworkplans/archived/260624-WARDEN-WP-0013-production-integration-and-stewardship-closeout.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260627-WARDEN-WP-0012-routing-scenario-playbooks.md",
|
||||
"sha256": "7a7a1d25cd1d015c0a28f0d443de0512fc48cb1fda4317760051251988aa96f0",
|
||||
"index": "100644 acf9cce9f55395827479d4963e2d257be182f507 0\tworkplans/archived/260627-WARDEN-WP-0012-routing-scenario-playbooks.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260627-WARDEN-WP-0014-operator-access-assist.md",
|
||||
"sha256": "c1b84e750b2580fa1deae7dd56fd29abe5d9924a3ccd47ce9fc5f99c26aa4924",
|
||||
"index": "100644 01240484d955b0af77443d6dd49948c96f9fb032 0\tworkplans/archived/260627-WARDEN-WP-0014-operator-access-assist.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260627-WARDEN-WP-0015-secret-lifecycle-tiering.md",
|
||||
"sha256": "300b8b6cfdd7306fbb81ab30d4f59551976eed1de0012fd655e4b6fc096ccf10",
|
||||
"index": "100644 c59207892dcf723ce7b4ca0908635fb32407176e 0\tworkplans/archived/260627-WARDEN-WP-0015-secret-lifecycle-tiering.md"
|
||||
},
|
||||
{
|
||||
"path": "workplans/archived/260707-ADHOC-2026-07-07.md",
|
||||
"sha256": "e169418f6d83f954de1907ae8fa26a5f5cf4fe011be01dba9363e69befa05cfa",
|
||||
"index": "100644 31e9d27f2aa37f8eac17cb5500873a60b9ee8833 0\tworkplans/archived/260707-ADHOC-2026-07-07.md"
|
||||
}
|
||||
]
|
||||
|
|
@ -0,0 +1,151 @@
|
|||
{
|
||||
"repo_slug": "ops-warden",
|
||||
"repo_path": "/home/worsch/ops-warden",
|
||||
"source_revision": "ae7bc73b4f4bac22454144959b870d161498e0af",
|
||||
"source_revision_reason": null,
|
||||
"issues": [
|
||||
{
|
||||
"severity": "WARN",
|
||||
"check_id": "C-24",
|
||||
"message": "Repo classification advisory: capability_tag 'security' is not a recommended family tag (allowed, check for synonym)",
|
||||
"file_path": "",
|
||||
"db_id": "",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "WARN",
|
||||
"check_id": "C-42",
|
||||
"message": "Blocked workplan 'warden-wp-0027' has no task in status wait \u2014 nothing states what it waits for; qualify a wait task or re-status the workplan",
|
||||
"file_path": "workplans/WARDEN-WP-0027-credential-governance-lockdown.md",
|
||||
"db_id": "21528e8d-a049-523d-9ae1-da7a27cb8bbf",
|
||||
"file_value": "blocked",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "WARN",
|
||||
"check_id": "C-37",
|
||||
"message": "Residual workplan 'warden-wp-0034' has no origin/origin_ref provenance (not invented)",
|
||||
"file_path": "workplans/WARDEN-WP-0034-layer-model-v07-conformance.md",
|
||||
"db_id": "ae3ff76f-883d-5e2f-b6aa-144d61e8fdef",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "WARN",
|
||||
"check_id": "C-40",
|
||||
"message": "blocker satisfied, task still wait: 'WARDEN-WP-0037-T03' in workplan 'WARDEN-WP-0037' \u2014 decision 1591daa1-6e85-4dfd-aadd-5a9fe1ef47fa is resolved",
|
||||
"file_path": "workplans/WARDEN-WP-0037-whynot-design-forgejo-npm-lane.md#WARDEN-WP-0037-T03",
|
||||
"db_id": "",
|
||||
"file_value": "1591daa1-6e85-4dfd-aadd-5a9fe1ef47fa",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "WARN",
|
||||
"check_id": "C-11",
|
||||
"message": "Task 'WARDEN-WP-0038-T01' has no state_hub_task_id",
|
||||
"file_path": "workplans/WARDEN-WP-0038-plan-mutation-intent.md#WARDEN-WP-0038-T01",
|
||||
"db_id": "",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": true
|
||||
},
|
||||
{
|
||||
"severity": "WARN",
|
||||
"check_id": "C-37",
|
||||
"message": "Residual workplan 'warden-wp-0040' has no origin/origin_ref provenance (not invented)",
|
||||
"file_path": "workplans/WARDEN-WP-0040-unknown-zone-fail-closed-adoption.md",
|
||||
"db_id": "c8ee441e-1be1-5219-910c-e79ff23cc9ec",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "INFO",
|
||||
"check_id": "C-08",
|
||||
"message": "Retired DB workstream 'adhoc-2026-06-29@retired-20260828' (id=1c0460b7\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
|
||||
"file_path": "",
|
||||
"db_id": "1c0460b7-bc8a-48db-96d4-681bce18ac91",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "INFO",
|
||||
"check_id": "C-08",
|
||||
"message": "Retired DB workstream 'adhoc-2026-08-17@retired-20260827' (id=8376eb89\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
|
||||
"file_path": "",
|
||||
"db_id": "8376eb89-36f2-52b0-a59a-2954b2e49349",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "INFO",
|
||||
"check_id": "C-08",
|
||||
"message": "Retired DB workstream 'adhoc-2026-08-11@retired-20260827' (id=bc6dd3e3\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
|
||||
"file_path": "",
|
||||
"db_id": "bc6dd3e3-ab2b-567a-9574-30d2650f20a2",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "INFO",
|
||||
"check_id": "C-08",
|
||||
"message": "Retired DB workstream 'ops-warden-adhoc-2026-06-27@retired-20260827' (id=142b171b\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
|
||||
"file_path": "",
|
||||
"db_id": "142b171b-c34b-4a45-91a5-c77e6d07ec6f",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "INFO",
|
||||
"check_id": "C-08",
|
||||
"message": "Retired DB workstream 'adhoc-2026-07-07@retired-20260827' (id=2e8bc783\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
|
||||
"file_path": "",
|
||||
"db_id": "2e8bc783-2e37-4b86-a691-177b18329783",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "WARN",
|
||||
"check_id": "C-28",
|
||||
"message": "2 unread inbox message(s) older than 3 day(s): the-custodian:23172cb2, the-custodian:51e9eace",
|
||||
"file_path": "",
|
||||
"db_id": "",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "WARN",
|
||||
"check_id": "C-28",
|
||||
"message": "3 unread message(s) lack thread_id for supersession tracking: the-custodian:d422aecb, the-custodian:23172cb2, the-custodian:51e9eace",
|
||||
"file_path": "",
|
||||
"db_id": "",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
}
|
||||
],
|
||||
"fixes_applied": [
|
||||
"bindings: synced 51/51",
|
||||
"C-17 cleared: pushed 6 backlogged commit(s)",
|
||||
"C-11 skipped: task 'WARDEN-WP-0038-T01' in finished workstream \u2014 not created",
|
||||
"push: pushed"
|
||||
],
|
||||
"summary": {
|
||||
"fail": 0,
|
||||
"automation_error": 0,
|
||||
"warn": 8,
|
||||
"info": 5
|
||||
},
|
||||
"result": "warn"
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
........................................................................ [ 80%]
|
||||
.................. [100%]
|
||||
90 passed in 4.74s
|
||||
|
|
@ -0,0 +1,93 @@
|
|||
from pathlib import Path
|
||||
import hashlib,json,re,subprocess,sys
|
||||
p=Path(__file__).resolve().parent;r=Path('/home/worsch/ops-warden')
|
||||
f=p.parent/'warden-1.3-kernel-fixes-r1'; review=json.loads((p.parent/'warden-1.3-kernel-review-r2/kernel-review-r2.json').read_text())
|
||||
w=Path('/tmp/warden-kernel-source-integration-r1')
|
||||
base='117fec9241e7b985dfb187b992e173d0a5dc3700'; branch='5abde817775d6304e3cf5a46948717a1606981bf'
|
||||
def git(root,*a):return subprocess.check_output(['git','-C',str(root),*a],stderr=subprocess.PIPE,text=True,timeout=60).strip()
|
||||
assert git(r,'rev-parse','HEAD')==base
|
||||
assert git(r,'rev-parse','warden-1.3-kernel')==branch
|
||||
assert git(r,'ls-remote','origin','refs/heads/main').split()[0]==base
|
||||
assert not w.exists()
|
||||
assert hashlib.sha256((f/'candidate.patch').read_bytes()).hexdigest()=='1a3530a1e469fc03c2c29f1b66fa3ba1904e56bf2abcfb242c7a2ed015fb3e74'
|
||||
assert hashlib.sha256((f/'test-isolation-proposal.patch').read_bytes()).hexdigest()=='0f6c46303ec24f337e4190ec84773ccefb4833241233b4b7d56bd1927eba838c'
|
||||
original_work=(r/'WORK-RECORDS.md').read_bytes(); original_index=git(r,'ls-files','--stage','--','WORK-RECORDS.md')
|
||||
(p/'WORK-RECORDS.md.backup').write_bytes(original_work)
|
||||
git(r,'worktree','add','--detach',str(w),branch)
|
||||
for file in ['candidate.patch','test-isolation-proposal.patch']:
|
||||
git(w,'apply','--check',str(f/file));git(w,'apply',str(f/file))
|
||||
for file,want in review['inputs']['candidate_files_verified'].items():
|
||||
assert hashlib.sha256((w/file).read_bytes()).hexdigest()==want.split(':')[-1]
|
||||
for file,want in review['inputs']['unchanged_pins_verified'].items():
|
||||
assert hashlib.sha256((w/file).read_bytes()).hexdigest()==want.split(':')[-1]
|
||||
name='workplans/WARDEN-WP-0044-security-case-follow-through.md'
|
||||
old=(w/name).read_text();(p/'workplan.preimage.md').write_text(old)
|
||||
new=old+"""
|
||||
|
||||
## 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.
|
||||
"""
|
||||
assert re.findall(r'```task\n.*?```',old,re.S)==re.findall(r'```task\n.*?```',new,re.S)
|
||||
(w/name).write_text(new)
|
||||
# Repeat the independently reviewed focused cases with an empty allowlisted HOME.
|
||||
probe=p.parent/'warden-1.3-kernel-review-r2/reviewer-probes.py'
|
||||
(w/'tests/test_review_r2_independent.py').write_bytes(probe.read_bytes())
|
||||
home=p/'test-home';home.mkdir()
|
||||
env={'HOME':str(home),'PATH':'/usr/bin:/bin','PYTHONDONTWRITEBYTECODE':'1','PYTHONPATH':'/tmp/warden-kernel-review-r2/guard:'+str(w/'src'),'LANG':'C.UTF-8'}
|
||||
with (p/'focused-tests.txt').open('w') as log:
|
||||
result=subprocess.run(['/tmp/warden-kernel-review-r1/final/.venv/bin/python','-B','-m','pytest','-q','-p','no:cacheprovider','tests/test_review_r2_independent.py','tests/test_case_attended_boundary.py','tests/test_case_admission_modes.py','tests/test_access.py','tests/test_openbao_caller.py'],cwd=w,env=env,stdout=log,stderr=subprocess.STDOUT,timeout=120)
|
||||
assert result.returncode==0,'guarded focused tests failed; preserve worktree'
|
||||
paths=[*review['inputs']['candidate_files_verified'],'tests/test_access.py',name]
|
||||
git(w,'diff','--check')
|
||||
run=subprocess.run(['git','-C',str(w),'add','--',*paths],capture_output=True,text=True);assert run.returncode==0
|
||||
run=subprocess.run(['git','-C',str(w),'commit','--only','-m','fix(case): preserve attended authority at dispatch and validate session lanes','--',*paths],capture_output=True,text=True,timeout=240)
|
||||
(p/'commit.json').write_text(json.dumps({'exit_code':run.returncode,'stdout':run.stdout,'stderr':run.stderr},indent=2)+'\n')
|
||||
assert run.returncode==0,'normal commit refused'
|
||||
head=git(w,'rev-parse','HEAD')
|
||||
assert set(git(w,'diff-tree','--no-commit-id','--name-only','-r',head).splitlines())==set(paths)
|
||||
assert git(r,'rev-parse','HEAD')==base and git(r,'ls-remote','origin','refs/heads/main').split()[0]==base
|
||||
assert (r/'WORK-RECORDS.md').read_bytes()==original_work and git(r,'ls-files','--stage','--','WORK-RECORDS.md')==original_index
|
||||
git(r,'merge','--ff-only',head)
|
||||
assert (r/'WORK-RECORDS.md').read_bytes()==original_work and git(r,'ls-files','--stage','--','WORK-RECORDS.md')==original_index
|
||||
(p/'integration.json').write_text(json.dumps({'status':'integrated-source-not-published','base':base,'draft_branch':branch,'head':head,'paths':paths,'unchanged_original_workplan_tasks':4,'ambient_owner_dirt_preserved':True,'catalog_promotion':False,'PARAMETER_PINS_changed':False,'native_action':False,'test_result':(p/'focused-tests.txt').read_text()},indent=2)+'\n')
|
||||
print(json.dumps({'status':'integrated','head':head,'paths':len(paths),'focused_tests':'passed','native_action':False}))
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"status": "integrated-source-not-published",
|
||||
"base": "117fec9241e7b985dfb187b992e173d0a5dc3700",
|
||||
"draft_branch": "5abde817775d6304e3cf5a46948717a1606981bf",
|
||||
"head": "ae7bc73b4f4bac22454144959b870d161498e0af",
|
||||
"paths": [
|
||||
"src/warden/case_run.py",
|
||||
"src/warden/case_type.py",
|
||||
"src/warden/routing/models.py",
|
||||
"tests/test_case_1_3_integration.py",
|
||||
"tests/test_case_admission_modes.py",
|
||||
"tests/test_case_attended_boundary.py",
|
||||
"tests/test_access.py",
|
||||
"workplans/WARDEN-WP-0044-security-case-follow-through.md"
|
||||
],
|
||||
"unchanged_original_workplan_tasks": 4,
|
||||
"ambient_owner_dirt_preserved": true,
|
||||
"catalog_promotion": false,
|
||||
"PARAMETER_PINS_changed": false,
|
||||
"native_action": false,
|
||||
"test_result": "........................................................................ [ 80%]\n.................. [100%]\n90 passed in 4.74s\n"
|
||||
}
|
||||
|
|
@ -0,0 +1,296 @@
|
|||
{
|
||||
"ok": true,
|
||||
"status": "applied",
|
||||
"repo_slug": "ops-warden",
|
||||
"commit": "922c26da0f3fcb0182352ea83e6ae06f29878580",
|
||||
"requests": 2,
|
||||
"elapsed_ms": 12875.5,
|
||||
"git": {
|
||||
"upstream": "origin/main",
|
||||
"behind": 0,
|
||||
"ahead": 0
|
||||
},
|
||||
"identifiers": {
|
||||
"schema": "repo-manager.identifier-assignment.v1",
|
||||
"ok": true,
|
||||
"executed": true,
|
||||
"repo": "ops-warden",
|
||||
"namespace": "helixforge",
|
||||
"assignments": [
|
||||
{
|
||||
"kind": "task",
|
||||
"record_id": "WARDEN-WP-0038-T01",
|
||||
"uuid": "ef28df7c-2c72-56be-ad90-4e079f37639f",
|
||||
"path": "workplans/WARDEN-WP-0038-plan-mutation-intent.md"
|
||||
}
|
||||
],
|
||||
"historical_invalid_identifiers": [],
|
||||
"historical_identity_collisions": [],
|
||||
"files_changed": [
|
||||
"workplans/WARDEN-WP-0038-plan-mutation-intent.md"
|
||||
]
|
||||
},
|
||||
"receipt": {
|
||||
"schema": "state-hub.repository-projection-reconcile.v1",
|
||||
"instance_role": "primary",
|
||||
"instance_label": "railiance01",
|
||||
"expected_commit": "922c26da0f3fcb0182352ea83e6ae06f29878580",
|
||||
"derived_commit": "922c26da0f3fcb0182352ea83e6ae06f29878580",
|
||||
"outcome": {
|
||||
"schema": "state-hub.projection-reset.v1",
|
||||
"repo_slug": "ops-warden",
|
||||
"commit": "922c26da0f3fcb0182352ea83e6ae06f29878580",
|
||||
"status": "applied",
|
||||
"counts": {
|
||||
"created": 0,
|
||||
"updated": 51,
|
||||
"retired": 0,
|
||||
"refused": 0,
|
||||
"released": 0,
|
||||
"created_tasks": 0,
|
||||
"updated_tasks": 0,
|
||||
"cancelled_tasks": 0,
|
||||
"created_edges": 0,
|
||||
"removed_edges": 0,
|
||||
"unresolved_edges": 0,
|
||||
"external_edges": 17
|
||||
},
|
||||
"created": [],
|
||||
"updated": [
|
||||
"WARDEN-WP-0001",
|
||||
"WARDEN-WP-0002",
|
||||
"WARDEN-WP-0003",
|
||||
"WARDEN-WP-0004",
|
||||
"WARDEN-WP-0005",
|
||||
"WARDEN-WP-0006",
|
||||
"WARDEN-WP-0007",
|
||||
"WARDEN-WP-0008",
|
||||
"WARDEN-WP-0009",
|
||||
"WARDEN-WP-0010",
|
||||
"WARDEN-WP-0011",
|
||||
"WARDEN-WP-0012",
|
||||
"WARDEN-WP-0013",
|
||||
"WARDEN-WP-0014",
|
||||
"WARDEN-WP-0015",
|
||||
"WARDEN-WP-0016",
|
||||
"WARDEN-WP-0017",
|
||||
"WARDEN-WP-0018",
|
||||
"WARDEN-WP-0019",
|
||||
"WARDEN-WP-0020",
|
||||
"WARDEN-WP-0021",
|
||||
"WARDEN-WP-0022",
|
||||
"WARDEN-WP-0023",
|
||||
"WARDEN-WP-0024",
|
||||
"WARDEN-WP-0025",
|
||||
"WARDEN-WP-0026",
|
||||
"WARDEN-WP-0027",
|
||||
"WARDEN-WP-0028",
|
||||
"WARDEN-WP-0029",
|
||||
"WARDEN-WP-0030",
|
||||
"WARDEN-WP-0031",
|
||||
"WARDEN-WP-0032",
|
||||
"WARDEN-WP-0033",
|
||||
"WARDEN-WP-0034",
|
||||
"WARDEN-WP-0035",
|
||||
"WARDEN-WP-0036",
|
||||
"WARDEN-WP-0037",
|
||||
"WARDEN-WP-0038",
|
||||
"WARDEN-WP-0039",
|
||||
"WARDEN-WP-0040",
|
||||
"WARDEN-WP-0041",
|
||||
"WARDEN-WP-0042",
|
||||
"WARDEN-WP-0043",
|
||||
"WARDEN-WP-0044",
|
||||
"WARDEN-WP-ADHOC-2026-06-27",
|
||||
"WARDEN-WP-ADHOC-2026-06-29",
|
||||
"WARDEN-WP-ADHOC-2026-07-07",
|
||||
"WARDEN-WP-ADHOC-2026-08-11",
|
||||
"WARDEN-WP-ADHOC-2026-08-17",
|
||||
"WARDEN-WP-ADHOC-2026-09-08",
|
||||
"WARDEN-WP-ADHOC-2026-10-03"
|
||||
],
|
||||
"retired": [],
|
||||
"released": [],
|
||||
"created_tasks": [],
|
||||
"updated_tasks": [],
|
||||
"cancelled_tasks": [],
|
||||
"created_edges": [],
|
||||
"removed_edges": [],
|
||||
"unresolved_edges": [],
|
||||
"external_edges": [
|
||||
{
|
||||
"workplan": "WARDEN-WP-0032",
|
||||
"from": "WARDEN-WP-0032",
|
||||
"target": "WARDEN-WP-0031",
|
||||
"relationship_type": "blocks",
|
||||
"from_workplan_id": "38c6a5f3-fb0d-5230-be85-f9e3ffc850f6",
|
||||
"from_task_id": null,
|
||||
"to_workplan_id": "739bad25-2345-5f4f-aaa3-cc4cd8c71f6c",
|
||||
"to_task_id": null
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0037",
|
||||
"from": "WARDEN-WP-0037-T03",
|
||||
"target": "SECRETS-WP-0006-T06",
|
||||
"relationship_type": "starts_after",
|
||||
"from_workplan_id": "42a097db-1c24-558e-a724-030bb2b4443e",
|
||||
"from_task_id": "a8b1b855-ab34-5835-b9fd-5f48bc0b6817",
|
||||
"to_workplan_id": null,
|
||||
"to_task_id": "1431edae-5791-5892-8c4b-829419b537d2"
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0033",
|
||||
"from": "WARDEN-WP-0033",
|
||||
"target": "WARDEN-WP-0030",
|
||||
"relationship_type": "blocks",
|
||||
"from_workplan_id": "4627d89b-4b00-562a-81e9-76e96f90fa7e",
|
||||
"from_task_id": null,
|
||||
"to_workplan_id": "da3367d5-890c-52c6-aa54-1bdd0f277342",
|
||||
"to_task_id": null
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0013",
|
||||
"from": "WARDEN-WP-0013",
|
||||
"target": "WARDEN-WP-0011",
|
||||
"relationship_type": "blocks",
|
||||
"from_workplan_id": "4678c41a-c1d0-48cd-9988-4ea0380e8258",
|
||||
"from_task_id": null,
|
||||
"to_workplan_id": "0a520f8e-01b4-48f1-9af3-2f3f69fd0672",
|
||||
"to_task_id": null
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0013",
|
||||
"from": "WARDEN-WP-0013",
|
||||
"target": "WARDEN-WP-0009",
|
||||
"relationship_type": "blocks",
|
||||
"from_workplan_id": "4678c41a-c1d0-48cd-9988-4ea0380e8258",
|
||||
"from_task_id": null,
|
||||
"to_workplan_id": "9213b262-e2f5-480e-a5bc-56635d5eb4c9",
|
||||
"to_task_id": null
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0013",
|
||||
"from": "WARDEN-WP-0013",
|
||||
"target": "WARDEN-WP-0008",
|
||||
"relationship_type": "blocks",
|
||||
"from_workplan_id": "4678c41a-c1d0-48cd-9988-4ea0380e8258",
|
||||
"from_task_id": null,
|
||||
"to_workplan_id": "a174963a-4ff1-4565-b19f-896cd4ff14a0",
|
||||
"to_task_id": null
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0013",
|
||||
"from": "WARDEN-WP-0013",
|
||||
"target": "WARDEN-WP-0010",
|
||||
"relationship_type": "blocks",
|
||||
"from_workplan_id": "4678c41a-c1d0-48cd-9988-4ea0380e8258",
|
||||
"from_task_id": null,
|
||||
"to_workplan_id": "e93de9fd-0192-4d02-bb7c-5e859fb76b9b",
|
||||
"to_task_id": null
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0031",
|
||||
"from": "WARDEN-WP-0031",
|
||||
"target": "WARDEN-WP-0007",
|
||||
"relationship_type": "blocks",
|
||||
"from_workplan_id": "739bad25-2345-5f4f-aaa3-cc4cd8c71f6c",
|
||||
"from_task_id": null,
|
||||
"to_workplan_id": "3718ac07-2fa2-47d0-a02a-c9a7b83a5ba9",
|
||||
"to_task_id": null
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0038",
|
||||
"from": "WARDEN-WP-0038",
|
||||
"target": "WARDEN-WP-0029",
|
||||
"relationship_type": "blocks",
|
||||
"from_workplan_id": "751ad530-e44b-52c4-b70e-cb47568a0179",
|
||||
"from_task_id": null,
|
||||
"to_workplan_id": "bbb3d9ec-d88d-5088-b4c0-55bfba0a10cf",
|
||||
"to_task_id": null
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0023",
|
||||
"from": "WARDEN-WP-0023",
|
||||
"target": "WARDEN-WP-0022",
|
||||
"relationship_type": "blocks",
|
||||
"from_workplan_id": "7bad1ec4-a7c2-4980-b8f9-49a7f5408574",
|
||||
"from_task_id": null,
|
||||
"to_workplan_id": "fc8afa28-68a7-4250-a19e-9754829f0cd5",
|
||||
"to_task_id": null
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0034",
|
||||
"from": "WARDEN-WP-0034",
|
||||
"target": "WARDEN-WP-0030",
|
||||
"relationship_type": "blocks",
|
||||
"from_workplan_id": "ae3ff76f-883d-5e2f-b6aa-144d61e8fdef",
|
||||
"from_task_id": null,
|
||||
"to_workplan_id": "da3367d5-890c-52c6-aa54-1bdd0f277342",
|
||||
"to_task_id": null
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0040",
|
||||
"from": "WARDEN-WP-0040",
|
||||
"target": "WARDEN-WP-0032",
|
||||
"relationship_type": "blocks",
|
||||
"from_workplan_id": "c8ee441e-1be1-5219-910c-e79ff23cc9ec",
|
||||
"from_task_id": null,
|
||||
"to_workplan_id": "38c6a5f3-fb0d-5230-be85-f9e3ffc850f6",
|
||||
"to_task_id": null
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0040",
|
||||
"from": "WARDEN-WP-0040",
|
||||
"target": "WARDEN-WP-0034",
|
||||
"relationship_type": "blocks",
|
||||
"from_workplan_id": "c8ee441e-1be1-5219-910c-e79ff23cc9ec",
|
||||
"from_task_id": null,
|
||||
"to_workplan_id": "ae3ff76f-883d-5e2f-b6aa-144d61e8fdef",
|
||||
"to_task_id": null
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0040",
|
||||
"from": "WARDEN-WP-0040-T03",
|
||||
"target": "WARDEN-WP-0040-T01",
|
||||
"relationship_type": "starts_after",
|
||||
"from_workplan_id": "c8ee441e-1be1-5219-910c-e79ff23cc9ec",
|
||||
"from_task_id": "93eaf1f2-daaa-5e22-8804-85ca9433571c",
|
||||
"to_workplan_id": null,
|
||||
"to_task_id": "611f0901-9fb5-5954-8dd0-a860c5f0cbec"
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0044",
|
||||
"from": "WARDEN-WP-0044-T04",
|
||||
"target": "WARDEN-WP-0044-T03",
|
||||
"relationship_type": "starts_after",
|
||||
"from_workplan_id": "f7e81013-6868-5d99-8528-ba75a442eca9",
|
||||
"from_task_id": "4a0fa4a7-5ca9-518a-ab92-a79a5e2cf93e",
|
||||
"to_workplan_id": null,
|
||||
"to_task_id": "bcbf6c91-2c04-5c16-ae8c-5d6c06fd6b89"
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0044",
|
||||
"from": "WARDEN-WP-0044-T03",
|
||||
"target": "MASON-WP-0010-T03",
|
||||
"relationship_type": "starts_after",
|
||||
"from_workplan_id": "f7e81013-6868-5d99-8528-ba75a442eca9",
|
||||
"from_task_id": "bcbf6c91-2c04-5c16-ae8c-5d6c06fd6b89",
|
||||
"to_workplan_id": null,
|
||||
"to_task_id": "56cea6be-c613-586c-80cd-125340b374da"
|
||||
},
|
||||
{
|
||||
"workplan": "WARDEN-WP-0044",
|
||||
"from": "WARDEN-WP-0044-T03",
|
||||
"target": "WARDEN-WP-0044-T02",
|
||||
"relationship_type": "starts_after",
|
||||
"from_workplan_id": "f7e81013-6868-5d99-8528-ba75a442eca9",
|
||||
"from_task_id": "bcbf6c91-2c04-5c16-ae8c-5d6c06fd6b89",
|
||||
"to_workplan_id": null,
|
||||
"to_task_id": "5f68c991-f490-58f8-a121-92f74073d272"
|
||||
}
|
||||
],
|
||||
"refused": [],
|
||||
"notes": []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
from pathlib import Path
|
||||
import hashlib,json,subprocess,urllib.request,re
|
||||
p=Path(__file__).resolve().parent;r=Path('/home/worsch/ops-warden')
|
||||
cfg=json.loads((p/'integration.json').read_text());head=cfg['head']
|
||||
def git(*a):return subprocess.check_output(['git','-C',str(r),*a],stderr=subprocess.PIPE,text=True,timeout=90).strip()
|
||||
assert git('rev-parse','HEAD')==head
|
||||
assert git('ls-remote','origin','refs/heads/main').split()[0] in {cfg['base'],head}
|
||||
backup=p/'consistency-backup';assert not backup.exists();backup.mkdir()
|
||||
files=[r/'.custodian-brief.md',r/'WORK-RECORDS.md',*sorted((r/'workplans').rglob('*.md'))]
|
||||
rows=[]
|
||||
for f in files:
|
||||
if not f.exists():continue
|
||||
n=str(f.relative_to(r));dst=backup/n;dst.parent.mkdir(parents=True,exist_ok=True);dst.write_bytes(f.read_bytes())
|
||||
rows.append({'path':n,'sha256':hashlib.sha256(f.read_bytes()).hexdigest(),'index':git('ls-files','--stage','--',n)})
|
||||
(p/'consistency-preimage.json').write_text(json.dumps(rows,indent=2)+'\n')
|
||||
try:
|
||||
result=subprocess.run(['statehub','fix-consistency','--repo','ops-warden','--no-writeback','--json'],cwd=r,capture_output=True,text=True,timeout=300)
|
||||
(p/'consistency.json').write_text(result.stdout);(p/'consistency.stderr.txt').write_text(result.stderr)
|
||||
assert result.returncode==0,'required consistency failed'
|
||||
data=json.loads(result.stdout);assert data.get('fail',data.get('summary',{}).get('fail',0))==0
|
||||
finally:
|
||||
for row in rows:
|
||||
n=row['path'];f=r/n;old=(backup/n).read_bytes()
|
||||
if f.read_bytes()!=old:
|
||||
(p/('changed-'+n.replace('/','-'))).write_bytes(f.read_bytes());f.write_bytes(old)
|
||||
if git('ls-files','--stage','--',n)!=row['index']:
|
||||
mode,oid,stage,name=row['index'].split();assert stage=='0';git('update-index','--cacheinfo',mode,oid,name)
|
||||
assert hashlib.sha256(f.read_bytes()).hexdigest()==row['sha256']
|
||||
assert git('rev-parse','HEAD')==head
|
||||
result=subprocess.run(['/home/worsch/repo-manager/.venv/bin/rmgr','sync','--path',str(r),'--push'],capture_output=True,text=True,timeout=180)
|
||||
(p/'normal-sync.json').write_text(result.stdout);(p/'normal-sync.stderr.txt').write_text(result.stderr)
|
||||
if result.returncode:
|
||||
text=result.stdout+result.stderr
|
||||
assert 'WARDEN-WP-0038-T01' in text and ('UUID' in text or 'uuid' in text),'unexpected sync refusal; stop'
|
||||
assert git('ls-remote','origin','refs/heads/main').split()[0] in {cfg['base'],head}
|
||||
push=subprocess.run(['git','-C',str(r),'push','origin','main'],capture_output=True,text=True,timeout=120)
|
||||
(p/'source-push.json').write_text(json.dumps({'exit_code':push.returncode,'stdout':push.stdout,'stderr':push.stderr},indent=2)+'\n')
|
||||
assert push.returncode==0,'normal source push refused'
|
||||
else:
|
||||
data=json.loads(result.stdout);assert data.get('status') in {'applied','noop'}
|
||||
assert git('ls-remote','origin','refs/heads/main').split()[0]==head
|
||||
body={'expected_commit':head,'acknowledge_retirements':False}
|
||||
request=urllib.request.Request('http://127.0.0.1:8000/repos/ops-warden/work-record-projection/reconcile',data=json.dumps(body).encode(),headers={'Content-Type':'application/json','X-StateHub-Component':'ops-warden'},method='POST')
|
||||
with urllib.request.urlopen(request,timeout=120) as response: receipt=json.load(response)
|
||||
(p/'receiver-receipt.json').write_text(json.dumps(receipt,indent=2)+'\n')
|
||||
assert receipt['ok'] and receipt['status'] in {'applied','noop'}
|
||||
rp=receipt['receipt'];assert rp['expected_commit']==rp['derived_commit']==head
|
||||
assert (rp['instance_role'],rp['instance_label'])==('primary','railiance01')
|
||||
assert rp['outcome']['counts']['retired']==0
|
||||
name='workplans/WARDEN-WP-0044-security-case-follow-through.md';text=(r/name).read_text()
|
||||
blocks=re.findall(r'```task\n.*?```',text,re.S)
|
||||
assert len(blocks)==4
|
||||
bindings=[]
|
||||
for b in blocks:
|
||||
tid=re.search(r'state_hub_task_id: "(.*?)"',b).group(1);status=re.search(r'^status: (.+)$',b,re.M).group(1)
|
||||
with urllib.request.urlopen('http://127.0.0.1:8000/tasks/'+tid,timeout=15) as response:task=json.load(response)
|
||||
assert task['status']==status
|
||||
bindings.append({'record_id':task.get('record_id'),'id':tid,'status':status})
|
||||
for row in rows:
|
||||
assert hashlib.sha256((r/row['path']).read_bytes()).hexdigest()==row['sha256']
|
||||
assert git('ls-files','--stage','--',row['path'])==row['index']
|
||||
verification={'status':'published-and-projected','head':head,'primary_task_bindings':bindings,'preserved_files_and_index':len(rows),'normal_allocator_refusal_preserved':result.returncode!=0,'catalog_promotion':False,'PARAMETER_PINS_changed':False,'native_actions':False}
|
||||
(p/'verification.json').write_text(json.dumps(verification,indent=2)+'\n')
|
||||
print(json.dumps(verification))
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
{
|
||||
"status": "published-and-projected",
|
||||
"implementation_commit": "ae7bc73b4f4bac22454144959b870d161498e0af",
|
||||
"final_published_commit": "922c26da0f3fcb0182352ea83e6ae06f29878580",
|
||||
"normal_allocator_assignment": [
|
||||
{
|
||||
"kind": "task",
|
||||
"record_id": "WARDEN-WP-0038-T01",
|
||||
"uuid": "ef28df7c-2c72-56be-ad90-4e079f37639f",
|
||||
"path": "workplans/WARDEN-WP-0038-plan-mutation-intent.md"
|
||||
}
|
||||
],
|
||||
"allocator_commit_only_adds_missing_uuid": true,
|
||||
"preserved_other_files_and_index": 52,
|
||||
"primary_task_bindings": [
|
||||
{
|
||||
"id": "ef0920fc-418e-52cb-acff-9a5c0c728bf5",
|
||||
"record_id": "WARDEN-WP-0044-T01",
|
||||
"status": "done",
|
||||
"needs_human": false
|
||||
},
|
||||
{
|
||||
"id": "5f68c991-f490-58f8-a121-92f74073d272",
|
||||
"record_id": "WARDEN-WP-0044-T02",
|
||||
"status": "done",
|
||||
"needs_human": false
|
||||
},
|
||||
{
|
||||
"id": "bcbf6c91-2c04-5c16-ae8c-5d6c06fd6b89",
|
||||
"record_id": "WARDEN-WP-0044-T03",
|
||||
"status": "progress",
|
||||
"needs_human": false
|
||||
},
|
||||
{
|
||||
"id": "4a0fa4a7-5ca9-518a-ab92-a79a5e2cf93e",
|
||||
"record_id": "WARDEN-WP-0044-T04",
|
||||
"status": "wait",
|
||||
"needs_human": false
|
||||
},
|
||||
{
|
||||
"id": "ef28df7c-2c72-56be-ad90-4e079f37639f",
|
||||
"record_id": "WARDEN-WP-0038-T01",
|
||||
"status": "done",
|
||||
"needs_human": false
|
||||
}
|
||||
],
|
||||
"retired": 0,
|
||||
"cancelled": 0,
|
||||
"native_actions": false,
|
||||
"catalog_promotion": false,
|
||||
"PARAMETER_PINS_changed": false,
|
||||
"prior_attempt": "publish.py stopped at stale expected-head assertion after normal rmgr sync succeeded and assigned missing historical UUID; no retry, rewrite or duplicate sync needed."
|
||||
}
|
||||
|
|
@ -0,0 +1,312 @@
|
|||
---
|
||||
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.
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"exit_code": 0,
|
||||
"stdout": "[detached HEAD b593c87] test: isolate ordinary unit runs from ambient credentials and provider I/O\n 14 files changed, 592 insertions(+), 6 deletions(-)\n create mode 100644 docs/development/safe-unit-tests.md\n create mode 100644 scripts/run_unit_tests.py\n create mode 100644 tests/fixtures/workload-coverage/provenance.json\n create mode 100644 tests/fixtures/workload-coverage/rapp-core-hub/declarations/rapp.yaml\n create mode 100644 tests/fixtures/workload-coverage/rapp-issue-core/declarations/rapp.yaml\n create mode 100644 tests/fixtures/workload-coverage/rapp-qonto/declarations/rapp.yaml\n create mode 100644 tests/test_safe_unit_runner.py\n create mode 100644 tests/unit_isolation_probe.py\n",
|
||||
"stderr": ""
|
||||
}
|
||||
|
|
@ -0,0 +1,140 @@
|
|||
{
|
||||
"repo_slug": "ops-warden",
|
||||
"repo_path": "/home/worsch/ops-warden",
|
||||
"source_revision": "b593c879831378db7dc62adfabdfedf2d44ddd38",
|
||||
"source_revision_reason": null,
|
||||
"issues": [
|
||||
{
|
||||
"severity": "WARN",
|
||||
"check_id": "C-24",
|
||||
"message": "Repo classification advisory: capability_tag 'security' is not a recommended family tag (allowed, check for synonym)",
|
||||
"file_path": "",
|
||||
"db_id": "",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "WARN",
|
||||
"check_id": "C-42",
|
||||
"message": "Blocked workplan 'warden-wp-0027' has no task in status wait \u2014 nothing states what it waits for; qualify a wait task or re-status the workplan",
|
||||
"file_path": "workplans/WARDEN-WP-0027-credential-governance-lockdown.md",
|
||||
"db_id": "21528e8d-a049-523d-9ae1-da7a27cb8bbf",
|
||||
"file_value": "blocked",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "WARN",
|
||||
"check_id": "C-37",
|
||||
"message": "Residual workplan 'warden-wp-0034' has no origin/origin_ref provenance (not invented)",
|
||||
"file_path": "workplans/WARDEN-WP-0034-layer-model-v07-conformance.md",
|
||||
"db_id": "ae3ff76f-883d-5e2f-b6aa-144d61e8fdef",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "WARN",
|
||||
"check_id": "C-40",
|
||||
"message": "blocker satisfied, task still wait: 'WARDEN-WP-0037-T03' in workplan 'WARDEN-WP-0037' \u2014 decision 1591daa1-6e85-4dfd-aadd-5a9fe1ef47fa is resolved",
|
||||
"file_path": "workplans/WARDEN-WP-0037-whynot-design-forgejo-npm-lane.md#WARDEN-WP-0037-T03",
|
||||
"db_id": "",
|
||||
"file_value": "1591daa1-6e85-4dfd-aadd-5a9fe1ef47fa",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "WARN",
|
||||
"check_id": "C-37",
|
||||
"message": "Residual workplan 'warden-wp-0040' has no origin/origin_ref provenance (not invented)",
|
||||
"file_path": "workplans/WARDEN-WP-0040-unknown-zone-fail-closed-adoption.md",
|
||||
"db_id": "c8ee441e-1be1-5219-910c-e79ff23cc9ec",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "INFO",
|
||||
"check_id": "C-08",
|
||||
"message": "Retired DB workstream 'adhoc-2026-06-29@retired-20260828' (id=1c0460b7\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
|
||||
"file_path": "",
|
||||
"db_id": "1c0460b7-bc8a-48db-96d4-681bce18ac91",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "INFO",
|
||||
"check_id": "C-08",
|
||||
"message": "Retired DB workstream 'adhoc-2026-08-17@retired-20260827' (id=8376eb89\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
|
||||
"file_path": "",
|
||||
"db_id": "8376eb89-36f2-52b0-a59a-2954b2e49349",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "INFO",
|
||||
"check_id": "C-08",
|
||||
"message": "Retired DB workstream 'adhoc-2026-08-11@retired-20260827' (id=bc6dd3e3\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
|
||||
"file_path": "",
|
||||
"db_id": "bc6dd3e3-ab2b-567a-9574-30d2650f20a2",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "INFO",
|
||||
"check_id": "C-08",
|
||||
"message": "Retired DB workstream 'ops-warden-adhoc-2026-06-27@retired-20260827' (id=142b171b\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
|
||||
"file_path": "",
|
||||
"db_id": "142b171b-c34b-4a45-91a5-c77e6d07ec6f",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "INFO",
|
||||
"check_id": "C-08",
|
||||
"message": "Retired DB workstream 'adhoc-2026-07-07@retired-20260827' (id=2e8bc783\u2026, status=finished) has no backing workplan file \u2014 projection tombstone, not live work",
|
||||
"file_path": "",
|
||||
"db_id": "2e8bc783-2e37-4b86-a691-177b18329783",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "WARN",
|
||||
"check_id": "C-28",
|
||||
"message": "2 unread inbox message(s) older than 3 day(s): the-custodian:23172cb2, the-custodian:51e9eace",
|
||||
"file_path": "",
|
||||
"db_id": "",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
},
|
||||
{
|
||||
"severity": "WARN",
|
||||
"check_id": "C-28",
|
||||
"message": "3 unread message(s) lack thread_id for supersession tracking: the-custodian:d422aecb, the-custodian:23172cb2, the-custodian:51e9eace",
|
||||
"file_path": "",
|
||||
"db_id": "",
|
||||
"file_value": "",
|
||||
"db_value": "",
|
||||
"fixable": false
|
||||
}
|
||||
],
|
||||
"fixes_applied": [
|
||||
"bindings: synced 51/51",
|
||||
"C-17 cleared: pushed 1 backlogged commit(s)",
|
||||
"push: pushed"
|
||||
],
|
||||
"summary": {
|
||||
"fail": 0,
|
||||
"automation_error": 0,
|
||||
"warn": 7,
|
||||
"info": 5
|
||||
},
|
||||
"result": "warn"
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"exit_code": 0,
|
||||
"command": [
|
||||
"make",
|
||||
"test",
|
||||
"UNIT_PYTHON=/home/worsch/ops-warden/.venv/bin/python",
|
||||
"PHASE_MEMORY_REPO=/home/worsch/phase-memory",
|
||||
"TEST_ARGS=--netkingdom-root /home/worsch/net-kingdom -q"
|
||||
],
|
||||
"expected": "785 passed,4 deselected",
|
||||
"log_sha256": "75563bad2656a7566a7913cbacab6178c3943b9ed8f28ff6796dffe5e53da4a7",
|
||||
"synthetic_parent_environment": true,
|
||||
"real_credentials_or_provider_calls": false
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
from pathlib import Path
|
||||
import hashlib,json,re,subprocess
|
||||
p=Path(__file__).resolve().parent;r=Path('/home/worsch/ops-warden');w=Path('/tmp/warden-safe-unit-integration-r1')
|
||||
a=p.parent/'warden-safe-unit-runner-r1';v=p.parent/'warden-safe-unit-runner-review-r1'
|
||||
author=json.loads((a/'implementation.json').read_text());review=json.loads((v/'review-r1.json').read_text());base=author['base']
|
||||
def git(root,*args):return subprocess.check_output(['git','-C',str(root),*args],stderr=subprocess.PIPE,text=True,timeout=60).strip()
|
||||
def sha(f):return hashlib.sha256(f.read_bytes()).hexdigest()
|
||||
assert git(r,'rev-parse','HEAD')==base and git(r,'ls-remote','origin','refs/heads/main').split()[0]==base
|
||||
assert sha(a/'candidate.patch')=='1fe65076ce7e633be304fc779bf2c87b7ee1e4e460de55ca74355b5842d036f5'
|
||||
assert sha(v/'reviewer-correction.patch')=='9407289f8da41ed6fff367baf566ad30f5510a2627c14e0ac0cf971bf9b465c9'
|
||||
assert not w.exists()
|
||||
protected={}
|
||||
for name in ['WORK-RECORDS.md','.custodian-brief.md']:
|
||||
protected[name]={'sha256':sha(r/name),'index':git(r,'ls-files','--stage','--',name)}
|
||||
(p/(name+'.backup')).write_bytes((r/name).read_bytes())
|
||||
git(r,'worktree','add','--detach',str(w),base)
|
||||
for packet,file in [(a,'candidate.patch'),(v,'reviewer-correction.patch')]:
|
||||
git(w,'apply','--check',str(packet/file));git(w,'apply',str(packet/file))
|
||||
expected={row['path']:row['after_sha256'] for row in author['files']}
|
||||
for name,row in review['correction']['files'].items():expected[name]=row['after_sha256'].split(':')[-1]
|
||||
for name,want in expected.items():assert sha(w/name)==want,name
|
||||
for name,want in review['protected_source_hashes'].items():assert sha(w/name)==want.split(':')[-1],name
|
||||
# Root source disposition: accept the minimal reviewed corrections; original
|
||||
# rejection and both negative controls stay preserved. This is test hygiene only.
|
||||
(p/'root-disposition.json').write_text(json.dumps({'original_candidate':'rejected as reviewed','corrected_candidate':'accepted for source revalidation','fixes':['Classify O_TRUNC and O_APPEND opens as writes before the OS open.','Check closed fixture projection set and every recorded byte digest in default unit selection.'],'candidate_sha256':sha(a/'candidate.patch'),'correction_sha256':sha(v/'reviewer-correction.patch'),'remaining_limits':review['limits'],'native_acceptance':False},indent=2)+'\n')
|
||||
sentinel=p/'synthetic-parent-home';sentinel.mkdir();(sentinel/'.vault-token').write_text('synthetic-never-a-real-token')
|
||||
env={'HOME':str(sentinel),'PATH':'/usr/bin:/bin','BAO_TOKEN':'synthetic-never-a-real-token','VAULT_TOKEN':'synthetic-never-a-real-token','PYTHONPATH':'/synthetic-untrusted-pythonpath','PYTEST_ADDOPTS':'--synthetic-invalid-if-inherited','LANG':'C.UTF-8'}
|
||||
cmd=['make','test','UNIT_PYTHON=/home/worsch/ops-warden/.venv/bin/python','PHASE_MEMORY_REPO=/home/worsch/phase-memory','TEST_ARGS=--netkingdom-root /home/worsch/net-kingdom -q']
|
||||
with (p/'full-unit-tests.log').open('w') as log:
|
||||
result=subprocess.run(cmd,cwd=w,env=env,stdout=log,stderr=subprocess.STDOUT,timeout=180)
|
||||
text=(p/'full-unit-tests.log').read_text()
|
||||
(p/'full-unit-result.json').write_text(json.dumps({'exit_code':result.returncode,'command':cmd,'expected':'785 passed,4 deselected','log_sha256':sha(p/'full-unit-tests.log'),'synthetic_parent_environment':True,'real_credentials_or_provider_calls':False},indent=2)+'\n')
|
||||
assert result.returncode==0 and re.search(r'785 passed, 4 deselected',text),'corrected ordinary suite failed; preserve scratch and logs'
|
||||
name='workplans/WARDEN-WP-0044-security-case-follow-through.md';old=(w/name).read_text()
|
||||
new=old+"""
|
||||
|
||||
2026-10-17 root follow-through: the original safe-runner source candidate was
|
||||
independently rejected for O_TRUNC open-write misclassification and unchecked
|
||||
public fixture projection hashes. Both counterexamples are retained. The minimal
|
||||
correction treats truncating/appending opens as writes and adds the closed
|
||||
projection-byte provenance regression. Root inspected the two exact corrections
|
||||
and ran ordinary make test on stable corrected source with only synthetic parent
|
||||
HOME/token/Python/pytest sentinels: 785 passed, four deselected. No real credential
|
||||
or native provider action occurred. Initial author failures and rejected review
|
||||
are preserved in the Custodian warden-safe-unit-runner-r1 and
|
||||
warden-safe-unit-runner-review-r1 packets, with root disposition/full result in
|
||||
warden-safe-unit-integration-r1. This completes the known trusted-unit-entry
|
||||
accident-prevention follow-through; direct pytest bypass, native/non-open/preopened
|
||||
file-descriptor limits remain explicit. No OS sandbox, isolated agent assignment,
|
||||
production grant or native T03 acceptance follows. T03 stays progress.
|
||||
"""
|
||||
assert re.findall(r'```task\n.*?```',old,re.S)==re.findall(r'```task\n.*?```',new,re.S)
|
||||
(w/name).write_text(new)
|
||||
paths=list(expected)
|
||||
git(w,'diff','--check');git(w,'add','--',*paths)
|
||||
result=subprocess.run(['git','-C',str(w),'commit','--only','-m','test: isolate ordinary unit runs from ambient credentials and provider I/O','--',*paths],capture_output=True,text=True,timeout=240)
|
||||
(p/'commit.json').write_text(json.dumps({'exit_code':result.returncode,'stdout':result.stdout,'stderr':result.stderr},indent=2)+'\n');assert result.returncode==0,'normal commit refused'
|
||||
head=git(w,'rev-parse','HEAD');assert set(git(w,'diff-tree','--no-commit-id','--name-only','-r',head).splitlines())==set(paths)
|
||||
assert git(r,'rev-parse','HEAD')==base and git(r,'ls-remote','origin','refs/heads/main').split()[0]==base
|
||||
for name,row in protected.items():assert sha(r/name)==row['sha256'] and git(r,'ls-files','--stage','--',name)==row['index']
|
||||
git(r,'merge','--ff-only',head)
|
||||
for name,row in protected.items():assert sha(r/name)==row['sha256'] and git(r,'ls-files','--stage','--',name)==row['index']
|
||||
for name,want in review['protected_source_hashes'].items():assert sha(r/name)==want.split(':')[-1]
|
||||
(p/'integration.json').write_text(json.dumps({'status':'integrated-corrected-source-not-published','base':base,'head':head,'paths':paths,'source_and_catalog_pins_unchanged':True,'owner_dirt_preserved':True,'original_four_task_blocks_preserved':True,'full_unit_tests':'785 passed,4 deselected','native_actions':False},indent=2)+'\n')
|
||||
print(json.dumps({'status':'integrated','head':head,'files':len(paths),'tests':'785 passed,4 deselected','production_src_catalog_pin_changes':False}))
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
{
|
||||
"status": "integrated-corrected-source-not-published",
|
||||
"base": "922c26da0f3fcb0182352ea83e6ae06f29878580",
|
||||
"head": "b593c879831378db7dc62adfabdfedf2d44ddd38",
|
||||
"paths": [
|
||||
"Makefile",
|
||||
"scripts/run_unit_tests.py",
|
||||
"tests/test_safe_unit_runner.py",
|
||||
"tests/unit_isolation_probe.py",
|
||||
"tests/test_layer_conformance.py",
|
||||
"tests/test_workload_join.py",
|
||||
"tests/test_case_plan.py",
|
||||
"tests/test_case_type.py",
|
||||
"docs/development/safe-unit-tests.md",
|
||||
"workplans/WARDEN-WP-0044-security-case-follow-through.md",
|
||||
"tests/fixtures/workload-coverage/provenance.json",
|
||||
"tests/fixtures/workload-coverage/rapp-core-hub/declarations/rapp.yaml",
|
||||
"tests/fixtures/workload-coverage/rapp-issue-core/declarations/rapp.yaml",
|
||||
"tests/fixtures/workload-coverage/rapp-qonto/declarations/rapp.yaml"
|
||||
],
|
||||
"source_and_catalog_pins_unchanged": true,
|
||||
"owner_dirt_preserved": true,
|
||||
"original_four_task_blocks_preserved": true,
|
||||
"full_unit_tests": "785 passed,4 deselected",
|
||||
"native_actions": false
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
from pathlib import Path
|
||||
import hashlib,json,subprocess
|
||||
p=Path(__file__).resolve().parent;r=Path('/home/worsch/ops-warden')
|
||||
i=json.loads((p/'integration.json').read_text());head=i['head']
|
||||
def git(*a):return subprocess.check_output(['git','-C',str(r),*a],text=True).strip()
|
||||
assert git('rev-parse','HEAD')==head
|
||||
assert git('ls-remote','origin','refs/heads/main').split()[0]==i['base']
|
||||
assert json.loads((p/'full-unit-result.json').read_text())['exit_code']==0
|
||||
cfg={'owner':'ops-warden','base_revision':i['base'],'message':'test: isolate ordinary unit runs from ambient credentials and provider I/O','files':[{'path':name,'sha256':hashlib.sha256((r/name).read_bytes()).hexdigest()} for name in i['paths']]}
|
||||
(p/'publication-inputs.json').write_text(json.dumps(cfg,indent=2)+'\n')
|
||||
commit=json.loads((p/'commit.json').read_text());assert commit['exit_code']==0
|
||||
commit.update(commit=head,base=i['base'],files=cfg['files'])
|
||||
(p/'publication-commit.json').write_text(json.dumps(commit,indent=2)+'\n')
|
||||
b=p/'publication-backup';assert not b.exists();b.mkdir()
|
||||
rows=[]
|
||||
for name in ['.custodian-brief.md','WORK-RECORDS.md']:
|
||||
(b/(name+'.worktree')).write_bytes((r/name).read_bytes());rows.append({'path':name,'index':git('ls-files','--stage','--',name)})
|
||||
(b/'originals.json').write_text(json.dumps(rows,indent=2)+'\n')
|
||||
print(json.dumps({'prepared_normal_publication_for':head,'files':len(i['paths'])}))
|
||||
Loading…
Add table
Add a link
Reference in a new issue