KEY-WP-0038-T04 cancelled: entry point moved to net-kingdom NK-WP-0048-T09

Remove the draft key-cape.oidc-client-registration declaration; net-kingdom
declares net-kingdom.keycape-client-registration beside the live deployment
machinery.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 5457@bnt-lap001
Assistant-Session: 792bf84a-3783-4f5d-a811-cded61dd2012
This commit is contained in:
tegwick 2026-10-08 23:03:58 +02:00
parent 9fab7912f5
commit 213b98feb1
2 changed files with 12 additions and 129 deletions

View file

@ -1,125 +0,0 @@
apiVersion: netkingdom.io/playbook-capability/v0.1
kind: PlaybookCapabilityDeclaration
metadata:
id: key-cape.oidc-client-registration
name: KeyCape OIDC client registration
owner: key-cape
repo: key-cape
domain: infotech
contract_version: "0.1"
source_links:
- label: Client field rules
path: spec/canonical-model.yaml
- label: First case request (Forgejo)
path: docs/forgejo-oidc-client-request.yaml
- label: Workplan
path: workplans/KEY-WP-0038-forgejo-oidc-client.md
spec:
playbook:
path: tools/keycape-client/
type: cli-sequence
invocation: keycape-client register --client-file <rendered-client.yaml>
description: >-
Idempotently add, update or remove exactly one client in the running
KeyCape client registry, without exporting secret values. Generalizes the
per-client helpers in net-kingdom sso-mfa/k8s/keycape (register-coulomb-social,
portal-client-rollout, vergabe-client-rollout, secrets-engine-openbao-client-rollout).
Modes: inspect, dry-run, apply, remove.
capabilities:
- id: c1.lightweight-sso
tier: C1
resource_kinds:
- identities
- roles_scopes_policies
description: Register one OIDC relying party (browser or service) with the running lightweight issuer.
parameters:
- name: client_id
type: string
required: true
constraints:
pattern: ^[a-z0-9][a-z0-9-]{1,62}$
sensitivity: operational
tuning_authority: netkingdom_tunable
description: OAuth2 client_id, unique in the registry.
- name: display_name
type: string
required: true
constraints:
pattern: ^[^\n\r]{1,80}$
sensitivity: public
tuning_authority: netkingdom_tunable
description: Human-readable client name shown at sign-in.
- name: redirect_uris
type: string
required: true
constraints:
pattern: ^https://[^*\s,]+(,https://[^*\s,]+)*$
sensitivity: security_sensitive
tuning_authority: netkingdom_tunable
description: Comma-separated exact redirect URIs; wildcards are never accepted.
- name: allowed_scopes
type: string
required: true
constraints:
pattern: ^openid(,(profile|email|groups))*$
sensitivity: security_sensitive
tuning_authority: netkingdom_tunable
description: Comma-separated scopes the client may request; openid first.
- name: client_type
type: string
required: true
constraints:
pattern: ^(confidential|public)$
sensitivity: security_sensitive
tuning_authority: netkingdom_tunable
description: confidential (server-side, holds a secret) or public (PKCE only).
- name: mfa_required
type: string
required: true
constraints:
pattern: ^(true|false)$
sensitivity: security_sensitive
tuning_authority: netkingdom_tunable
description: Pin MFA on this client instead of relying on the provider default.
- name: secret_ref
type: string
required: false
constraints:
pattern: ^bao:[a-z0-9/_-]+$
sensitivity: secret_reference
tuning_authority: netkingdom_tunable
description: Custody reference for a confidential client's secret, omitted for public clients; the registry reads the value from custody, never from the request.
responsibilities:
- resource_kind: identities
owner: key-cape
resources:
- oidc:static-clients
repo_owns: Registry change for exactly this client, field validation (KEY-WP-0028 rules), idempotency and removal.
netkingdom_orchestrates: Supply the case's validated, non-secret client fields.
- resource_kind: roles_scopes_policies
owner: key-cape
resources:
- iam-profile:client-scope-allowlists
repo_owns: Enforce exact redirect URIs, allowed scopes and the MFA pin at authorization time.
netkingdom_orchestrates: Choose scopes and MFA posture per SecurityCaseType.
trust:
requires:
- state: runtime_secret_trust
readiness_checks: []
- state: runtime_identity_trust
readiness_checks: []
satisfies:
- state: tenant_onboarding_trust
readiness_checks:
- id: client-authorize-accepts-registered-redirect
description: The authorization endpoint accepts the client with each registered redirect URI.
evidence: GET /authorize with client_id and each redirect_uri returns the login page, not an error.
- id: client-authorize-refuses-other-redirect
description: The authorization endpoint refuses an unregistered redirect URI for the client.
evidence: GET /authorize with an unregistered redirect_uri returns an OAuth error.
catalog:
publish: capabilities/playbooks/key-cape.oidc-client-registration.yaml
maturity: planned
consumers:
- netkingdom-security-scenario-composer
- netkingdom-security-case-types

View file

@ -104,9 +104,9 @@ state_hub_task_id: "ddcfb482-8f33-5c81-9ce8-84be8fa5dc30"
Registration is the first case of the SecurityCaseType `oidc-browser-relying-party` Registration is the first case of the SecurityCaseType `oidc-browser-relying-party`
(net-kingdom NK-WP-0048, canon `security-case-types_v0.1`). The parameters (net-kingdom NK-WP-0048, canon `security-case-types_v0.1`). The parameters
accepted in T01 become the case; ops-mason materializes it (MASON-WP-0010) and accepted in T01 become the case; ops-mason materializes it (MASON-WP-0010) and
ops-warden follows through (WARDEN-WP-0044). key-cape's part is to declare ops-warden follows through (WARDEN-WP-0044). The registration capability is
client registration as a playbook capability that the type composes, and to net-kingdom's (`net-kingdom.keycape-client-registration`); key-cape's part is its
review the type's composition. field rules and reviewing the type's composition.
The original intent below still describes what must result. The original intent below still describes what must result.
@ -143,13 +143,21 @@ recorded. Then hand over to RAPPS-WP-0016.
```task ```task
id: KEY-WP-0038-T04 id: KEY-WP-0038-T04
status: todo status: cancel
priority: high priority: high
state_hub_task_id: "583cf1f1-16dc-515f-83bc-1efc45024a89" state_hub_task_id: "583cf1f1-16dc-515f-83bc-1efc45024a89"
``` ```
### T04 — Implement the `keycape-client` entry point ### T04 — Implement the `keycape-client` entry point
**Cancelled 2026-10-08: moved to net-kingdom NK-WP-0048-T09 (done).** The live
registration machinery (contained kubectl, cluster and issuer pins) already lives
in net-kingdom `sso-mfa/k8s/keycape/`, where KeyCape is deployed; a copy here
would drift. The entry point is `net-kingdom/sso-mfa/k8s/keycape/keycape-client.py`
and the declaration is `net-kingdom.keycape-client-registration`; key-cape's draft
declaration is removed. key-cape still owns the client field rules (canonical
model) and their enforcement at authorization time.
`capabilities/playbooks/key-cape.oidc-client-registration.yaml` (contract PASS, `capabilities/playbooks/key-cape.oidc-client-registration.yaml` (contract PASS,
`maturity: planned`) declares client registration as a playbook capability, so `maturity: planned`) declares client registration as a playbook capability, so
that the SecurityCaseType `oidc-browser-relying-party` (net-kingdom NK-WP-0048) that the SecurityCaseType `oidc-browser-relying-party` (net-kingdom NK-WP-0048)