diff --git a/docs/changes/netkingdom-target-2026-10-17/nk48-adapters-1.2-review/coordinator-review-r1.json b/docs/changes/netkingdom-target-2026-10-17/nk48-adapters-1.2-review/coordinator-review-r1.json new file mode 100644 index 00000000..772bc1d4 --- /dev/null +++ b/docs/changes/netkingdom-target-2026-10-17/nk48-adapters-1.2-review/coordinator-review-r1.json @@ -0,0 +1,73 @@ +{ + "schema": "custodian.nk48-adapter-set-source-review.v1", + "revision": "r1", + "reviewed_on": "2026-10-17", + "reviewer": "custodian coordinator (Claude Code, separate session, no authoring-session context)", + "frozen_target": { + "repository": "net-kingdom", + "commit": "582ab9fad063a43730c9cd0aaa0dc48b700b1248", + "base": "2019e82", + "commits_in_range": 22, + "kernel": "ops-warden a45cf47 src/warden/case_run.py (out of scope; used as the admission contract)" + }, + "hashes_verified": { + "keycape-registration-adapter.py": "sha256:021eee262ea5d23d46258ed819da57b331f07b814adcafd60e0941214be02aea", + "ensure-groups-adapter.py": "sha256:19325fc599ae76e7ec2b54c132b1cf7dea1b5e931bb5263031dbdf8f4c0bcc7f", + "mint-secret-adapter.py": "sha256:1242902a8366e5837d1a24c742a2dff84efb195cd8d3e25382fa4e971d732499", + "deliver-secret-adapter.py": "sha256:b97df5710e388ca57b9f239a2900bc29e0b1c1fe1740a1f7987636b44343cf80", + "bind-env-adapter.py": "sha256:3f1c6426e31806d969336b6fdfecd8dd321ec0ca43b50b20213cc9f7637f7c7e", + "deliver-consumer-secret-adapter.py": "sha256:d046eed63090d4e0849a931e2650ccfd89d3b686843aed9e5cb35a0e18e513ee", + "handover-adapter.py": "sha256:0efc300a7b2765bce8da140d5c4666d9cb30daf02b4cbf0e0df96cba7c33d026", + "compose-1.2-descriptors.py": "sha256:4316f23cfdb312212aa688006c1169f29ff27eb4fbd1eba9368cce7cb0095ce8", + "descriptor-composition-1.2.candidate.json": "sha256:1f5bf6d10ca3bbf8e06d3a755ecafeb47179327715d7b1d096e0685d167aa471" + }, + "hashes_match": true, + "independent_reconstruction_passed": 98, + "reconstruction": "git archive of net-kingdom 582ab9f (full tree) and ops-warden a45cf47 src into a scratch directory; README pytest command run there: 98 passed, 71 subtests passed. A keycape-only export fails collection because ensure-groups imports identity-provisioner/group_provenance_postgres.py, so reproduction needs the full repository tree.", + "verdicts": { + "mint-secret-adapter.py": { + "verdict": "rejected", + "finding": "NK48-R1-F1", + "check": 5 + }, + "keycape-registration-adapter.py": {"verdict": "not_reviewed", "reason": "review stopped at first rejection, per the request"}, + "ensure-groups-adapter.py": {"verdict": "not_reviewed", "reason": "review stopped at first rejection, per the request"}, + "deliver-secret-adapter.py": {"verdict": "not_reviewed", "reason": "review stopped at first rejection, per the request"}, + "bind-env-adapter.py": {"verdict": "not_reviewed", "reason": "review stopped at first rejection, per the request"}, + "deliver-consumer-secret-adapter.py": {"verdict": "not_reviewed", "reason": "review stopped at first rejection, per the request"}, + "handover-adapter.py": {"verdict": "not_reviewed", "reason": "review stopped at first rejection, per the request"}, + "compose-1.2-descriptors.py": {"verdict": "not_reviewed", "reason": "review stopped at first rejection, per the request"}, + "descriptor-composition-1.2.candidate.json": { + "verdict": "rejected", + "finding": "NK48-R1-F1", + "check": 8, + "note": "the artifact asserts complete_executable_descriptor_set true although one of its seven descriptors cannot pass kernel admission" + } + }, + "findings": [ + { + "id": "NK48-R1-F1", + "severity": "blocking", + "title": "mint-secret descriptor can never be admitted by the unchanged Warden kernel", + "evidence": [ + "mint-secret-adapter.py descriptor(): actor 'agent', effect 'mint'", + "descriptor-composition-1.2.candidate.json mint-secret descriptor: actor 'agent', effect 'mint' (candidate digest sha256:1fb462d930bae75e35a64bbdefded1e916613f2a630fdecf61885d0e542ea89b)", + "ops-warden a45cf47 case_run.py Executor.admit: refuses unless actor == descriptor.actor ('principal actor or lane mismatch'), then refuses effect 'mint' unless actor == 'human' ('agent mint is forbidden')" + ], + "consequence": "Every admission of mint-secret is refused, whichever actor the caller claims. The seven-step 1.2 set is not executable under kernel a45cf47, so complete_executable_descriptor_set: true overstates the artifact.", + "test_gap": "The suite and the workplan claim stop at Descriptor.decode; no test runs Executor.admit with the mint-secret descriptor, so the 98 passing tests do not detect this.", + "relation_to_founder_decision": "The founder decision (actor 'agent', kernel unchanged) is not challenged here. Its two halves conflict with the kernel's agent-mint prohibition. Fixing this needs a founder or owner choice (for example a human actor, a different effect classification, or a separately reviewed ops-warden kernel change), recorded in net-kingdom as a new revision and reviewed as r2.", + "fix_venue": "net-kingdom new revision; not edited during review" + } + ], + "observations_not_findings": [ + "ensure-groups source_digest covers its import closure across directories (adapter plus identity-provisioner provisioner.py, group_provenance.py, group_provenance_postgres.py); not checked against the full transitive closure, since review stopped.", + "mint-secret finally block calls revoke_session(inv) and then revoke_grant(inv) in one expression. Parent-session revocation is always attempted, but if revoke_session raises, broker-grant revocation is skipped for that attempt. Re-examine in r2." + ], + "known_limits_assessed": "not assessed (bind-env fixture gap, ensure-groups parity copy, injected owner stand-ins): review stopped at first rejection", + "canonical_integration": "not approved", + "native_acceptance": false, + "grants": "none: no owner admission, pin or native authority; those stay with NK-WP-0048-T16 and the founder", + "hard_limits_observed": "no live or native action, no kubectl, SSH or secret access; net-kingdom and ops-warden not edited (read via git archive into scratch only)", + "remaining": "Resolve NK48-R1-F1 (founder/owner choice plus net-kingdom revision, with a test that runs Executor.admit for every descriptor in the set); then full r2 review of all nine files against checks 1-8 and the known limits; then owner review and admission under T16; native acceptance." +}