diff --git a/.custodian-brief.md b/.custodian-brief.md index a3c9edf..f60f8ba 100644 --- a/.custodian-brief.md +++ b/.custodian-brief.md @@ -2,7 +2,7 @@ # Custodian Brief — net-kingdom **Domain:** infotech -**Last synced:** 2026-10-17 05:53 UTC +**Last synced:** 2026-10-17 06:49 UTC **State Hub:** http://127.0.0.1:8000 *(adjust if running on a remote machine)* ## Active Workstreams @@ -42,19 +42,20 @@ Progress: 26/38 done | workplan_id: `17d315f0-829e-57c7-85cc-3a7914152804` - … and 5 more open tasks ### Establish SecurityCaseTypes so that known security cases are light -Progress: 17/31 done | workplan_id: `e31f3f9d-0748-5137-b0a3-7b3ca46a66eb` +Progress: 24/31 done | workplan_id: `e31f3f9d-0748-5137-b0a3-7b3ca46a66eb` **Open tasks:** - ! T05 — Acknowledge the type through informed-decision `d9b26bcf` *(wait: Type1.2 architecture has a confirmed source-only founder acknowledgment; canonical1.1 remains unchanged/default and the1.2 reference case stays proposed. Needs explicit version selection/reference-source integration without normal admission bypass, closed owner adapters plus global/native receipt verifier (WARDEN-WP-0044-T03), independently verified six-object structural materialization and CCR42 claims/created-only provenance, exact broker/case/source reconciliation, then separately authorized native mint/delivery and attended registry/consumer verification. Source acknowledgment, a bundle or local tests do not prove implemented/materialized/live status.)* - ! T06 — First KnownSecurityCase: Forgejo `c3c9c3ae` *(wait: The next types follow once the first one is proven end to end.)* +- ! T15 — Define authenticated recovery for lost registration process state `1b825705` + *(wait: Source candidate 061461e is merged. Waiting on the owner to select the real authenticated original-attempt holder and native readback, and on independent re-review of the changed T13 adapter source.)* +- ! T30 — Compose the descriptor set over the reviewed candidates `6f6073ac` + *(wait: Seven-step 1.2 candidate composes completely in source. Waiting on owner confirmation of the proposed lanes and schemas for T25-T29.)* - ► T14 — Admit governed group rollback against native owner boundaries `fce95440` - · T12 — Prepare NetKingdom-owned attended step adapters `7ce4eee3` -- · T15 — Define authenticated recovery for lost registration process state `1b825705` - · T16 — Select and review the actual machine descriptor composition `200bf500` -- · T24 — Ensure-groups adapter source candidate `1a3931ee` -- … and 7 more open tasks ### Define an execution-attribution receipt for Railiance runs Progress: 1/2 done | workplan_id: `e2533f3a-aa43-59b3-bff3-8e64b6149487` diff --git a/sso-mfa/k8s/keycape/compose-1.2-descriptors.py b/sso-mfa/k8s/keycape/compose-1.2-descriptors.py index 0bbd036..8927d90 100644 --- a/sso-mfa/k8s/keycape/compose-1.2-descriptors.py +++ b/sso-mfa/k8s/keycape/compose-1.2-descriptors.py @@ -43,8 +43,9 @@ ADAPTERS = { 'hand-over': ('handover-adapter.py', True), } -# Worker-proposed names (T25-T29) that the type does not fix. Each needs owner -# confirmation before any pin; the artifact marks them owner_confirmation_required. +# Names (T25-T29) that the type does not fix. Worker-proposed, then confirmed by +# the founder on 2026-10-17; the artifact records them as names_confirmed. +NAMES_CONFIRMED = {'by': 'founder', 'on': '2026-10-17'} PROPOSED = { # Actor 'agent' was decided by the founder on 2026-10-17; only the schema is open. 'mint-secret': {'task': 'NK-WP-0048-T25', @@ -183,7 +184,8 @@ def review(type_spec, candidates, params): 'candidate_descriptor_digest': digest(source), 'type_owner': entry and entry['owner'], 'type_lane': entry and entry.get('lane'), 'findings': findings, - 'owner_confirmation_required': proposed or None}) + 'owner_confirmation_required': None, + 'names_confirmed': dict(proposed, **NAMES_CONFIRMED) if proposed else None}) return rows diff --git a/sso-mfa/k8s/keycape/descriptor-composition-1.2.candidate.json b/sso-mfa/k8s/keycape/descriptor-composition-1.2.candidate.json index 3be34b0..01cabf0 100644 --- a/sso-mfa/k8s/keycape/descriptor-composition-1.2.candidate.json +++ b/sso-mfa/k8s/keycape/descriptor-composition-1.2.candidate.json @@ -49,6 +49,7 @@ "version": "warden.case.execution.v1" }, "findings": [], + "names_confirmed": null, "owner_confirmation_required": null, "step": "ensure-groups", "type_lane": "key-cape-oidc-login", @@ -76,10 +77,13 @@ "version": "warden.case.execution.v1" }, "findings": [], - "owner_confirmation_required": { + "names_confirmed": { + "by": "founder", + "on": "2026-10-17", "schema": "railiance-platform.custody-mint.v1", "task": "NK-WP-0048-T25" }, + "owner_confirmation_required": null, "step": "mint-secret", "type_lane": "keycape-client-secret-generate", "type_owner": "railiance-platform" @@ -105,11 +109,14 @@ "version": "warden.case.execution.v1" }, "findings": [], - "owner_confirmation_required": { + "names_confirmed": { + "by": "founder", "lane": "platform-secret-delivery", + "on": "2026-10-17", "schema": "netkingdom.deliver-secret.v1", "task": "NK-WP-0048-T26" }, + "owner_confirmation_required": null, "step": "deliver-secret", "type_lane": null, "type_owner": "railiance-platform" @@ -135,10 +142,13 @@ "version": "warden.case.execution.v1" }, "findings": [], - "owner_confirmation_required": { + "names_confirmed": { + "by": "founder", + "on": "2026-10-17", "schema": "netkingdom.keycape-bind-env.attempt.v1", "task": "NK-WP-0048-T27" }, + "owner_confirmation_required": null, "step": "bind-env", "type_lane": "key-cape-oidc-login", "type_owner": "net-kingdom" @@ -164,6 +174,7 @@ "version": "warden.case.execution.v1" }, "findings": [], + "names_confirmed": null, "owner_confirmation_required": null, "step": "register-client", "type_lane": "key-cape-oidc-login", @@ -192,11 +203,14 @@ "version": "warden.case.execution.v1" }, "findings": [], - "owner_confirmation_required": { + "names_confirmed": { + "by": "founder", "lane": "consumer-owner-deployment", + "on": "2026-10-17", "schema": "netkingdom.consumer-secret-delivery.v1", "task": "NK-WP-0048-T28" }, + "owner_confirmation_required": null, "step": "deliver-consumer-secret", "type_lane": null, "type_owner": "{consumer_owner_repo}" @@ -222,11 +236,14 @@ "version": "warden.case.execution.v1" }, "findings": [], - "owner_confirmation_required": { + "names_confirmed": { + "by": "founder", "lane": "apps-consumer-handover", + "on": "2026-10-17", "schema": "netkingdom.apps-handover.attempt.v1", "task": "NK-WP-0048-T29" }, + "owner_confirmation_required": null, "step": "hand-over", "type_lane": null, "type_owner": "{consumer_owner_repo}" diff --git a/sso-mfa/k8s/keycape/test_compose_1_2_descriptors.py b/sso-mfa/k8s/keycape/test_compose_1_2_descriptors.py index 009add0..6d83d59 100644 --- a/sso-mfa/k8s/keycape/test_compose_1_2_descriptors.py +++ b/sso-mfa/k8s/keycape/test_compose_1_2_descriptors.py @@ -109,10 +109,13 @@ class ComposeTests(unittest.TestCase): self.assertEqual(mint['descriptor']['actor'], 'agent') hand_over = next(r for r in doc['steps'] if r['step'] == 'hand-over') self.assertEqual(hand_over['descriptor']['owner'], PARAMS['consumer_owner_repo']) - self.assertNotIn('owner', hand_over['owner_confirmation_required']) - flagged = {r['step'] for r in doc['steps'] if r['owner_confirmation_required']} - self.assertEqual(flagged, {'mint-secret', 'deliver-secret', 'bind-env', - 'deliver-consumer-secret', 'hand-over'}) + self.assertNotIn('owner', hand_over['names_confirmed']) + self.assertFalse(any(r['owner_confirmation_required'] for r in doc['steps'])) + confirmed = {r['step'] for r in doc['steps'] if r['names_confirmed']} + self.assertEqual(confirmed, {'mint-secret', 'deliver-secret', 'bind-env', + 'deliver-consumer-secret', 'hand-over'}) + self.assertTrue(all(r['names_confirmed']['by'] == 'founder' + for r in doc['steps'] if r['names_confirmed'])) def test_committed_artifact_matches_regeneration(self): import json diff --git a/workplans/NK-WP-0048-security-case-types.md b/workplans/NK-WP-0048-security-case-types.md index ff1e3f3..8aa69f2 100644 --- a/workplans/NK-WP-0048-security-case-types.md +++ b/workplans/NK-WP-0048-security-case-types.md @@ -1378,12 +1378,17 @@ stay separate gates and are not supplied by this task. ```task id: NK-WP-0048-T30 status: wait -blocking_reason: "Seven-step 1.2 candidate composes completely in source. Waiting on owner confirmation of the proposed lanes and schemas for T25-T29." +blocking_reason: "Seven-step 1.2 candidate composes completely and its names are confirmed. Waiting on independent source review of the seven adapters; owner review and admission follow under T16." depends_on: [NK-WP-0048-T24, NK-WP-0048-T25, NK-WP-0048-T26, NK-WP-0048-T27, NK-WP-0048-T28, NK-WP-0048-T29] priority: high state_hub_task_id: "6f6073ac-52dd-5b70-8874-6d76d4c072e4" ``` +2026-10-17 founder confirmed every proposed lane and schema name for T25-T29 +as-is. The artifact records them as `names_confirmed` (by founder, 2026-10-17), +and no step is still `owner_confirmation_required`. Next: independent source +review of the seven adapters. + 2026-10-17 founder decision: the mint-secret actor is `agent`, not `warden`. The kernel is unchanged. The adapter, its test and the composer were updated and the artifact regenerated; all seven steps pass `Descriptor.decode` and