diff --git a/config/service-clients.example.yaml b/config/service-clients.example.yaml index 9e77c95..2d96530 100644 --- a/config/service-clients.example.yaml +++ b/config/service-clients.example.yaml @@ -101,3 +101,19 @@ clients: # Approval is a human-in-the-loop control, so MFA is required rather than # left to the provider default. mfaRequired: true + + # Separate create-only requester; actor matches the existing Flex Auth subject. + - clientId: secrets-engine-requester + displayName: Secrets Engine T03 approval requester + audience: approval-engine + allowedScopes: + - approval:create + grantTypes: + - client_credentials + clientType: confidential + secretRef: env:KEYCAPE_SECRETS_ENGINE_REQUESTER_CLIENT_SECRET + serviceSubject: secrets-engine + tenant: tenant:platform + roles: + - secrets-engine-requester + tokenLifetime: 15m diff --git a/docs/t03-requester-registration.json b/docs/t03-requester-registration.json new file mode 100644 index 0000000..d45478c --- /dev/null +++ b/docs/t03-requester-registration.json @@ -0,0 +1,19 @@ +{ + "clientId": "secrets-engine-requester", + "displayName": "Secrets Engine T03 approval requester", + "audience": "approval-engine", + "allowedScopes": [ + "approval:create" + ], + "grantTypes": [ + "client_credentials" + ], + "clientType": "confidential", + "secretRef": "env:KEYCAPE_SECRETS_ENGINE_REQUESTER_CLIENT_SECRET", + "serviceSubject": "secrets-engine", + "tenant": "tenant:platform", + "roles": [ + "secrets-engine-requester" + ], + "tokenLifetime": "15m" +} diff --git a/docs/t03-requester-registration.md b/docs/t03-requester-registration.md new file mode 100644 index 0000000..32efcf0 --- /dev/null +++ b/docs/t03-requester-registration.md @@ -0,0 +1,36 @@ +# T03 native review admission + + +### T03 scoped review deployment — 2026-09-14 + +The operator explicitly admitted `net-kingdom-admins` as the human review group +for only the T03 apply, verify and read-only key-check records, separately from +its credential-reader membership. The review service is live and ready at +https://decisions.coulomb.social with verified KeyCape groups, fresh MFA and a +dedicated caller-bound Flex Auth policy. Its mandate does not grant consumption. + +The new `secrets-engine-requester` client has subject `secrets-engine`, tenant +`tenant:platform`, role `secrets-engine-requester`, and only `approval:create`. +CCR-2026-0024 and CCR-2026-0025 provide distinct verifier and attended reader +custody. Native signature, subject, scope and TTL checks passed; excess scopes +and a wrong secret were refused. Existing consumer identity is unchanged. +Three real requested approvals were created with human control, required count +one, and zero entries. Platform evidence is +`docs/evidence/2026-09-14-t03-native-approval-requests.json`. + +Review image: sha256:8f55bcecf37a8d65f96e073510b1ffb4636c0a91d75e1ee7d582ad4bce8b953a. +Policy image: sha256:c9f028b49dfcede930a9cc48757ec8371ecc71d20b1bfee2733e55298dffcc7c. +Review tests: 339 passed, 39 optional integration tests skipped; 11 container +checks and HIGH/CRITICAL image scan passed. Policy checks: 57 local and 6 native +caller checks passed, using synthetic subjects, not human binding evidence. +Approval Engine CPU request was reduced from 25m to 10m after observing 1m use; +review requests 20m and its PDP 5m. Limits are unchanged. Native services ready. + +Remaining T03 gate: the operator's exact signed-in account is needed to address +three prepared immutable memos, followed by real acknowledgements and acceptance +in Informed Decision. No human entry or consume has been generated by an agent. +Then execute claim -> validated PDP Check -> CAS consume separately for apply, +verify and exec using scoped attended authority, and capture native denial, +revocation, workload health and key-check evidence. No OpenRouter credential has +been read and no inference or spend was performed. T03 remains waiting; this +entry supersedes earlier statements that requester or group admission is missing.