Commit graph

86 commits

Author SHA1 Message Date
abd9e6fa2b Record Binky MFA login acceptance 2026-07-29 22:05:18 +02:00
72b0eb404c Record platform-root authorization fix 2026-07-29 21:33:37 +02:00
90a20783e5 Map platform-root group to platform operator
All checks were successful
Build and Publish Container Image / build-and-push (push) Successful in 26s
2026-07-29 21:30:56 +02:00
41d2e1d1f6 Record Binky password handoff readiness 2026-07-28 17:56:14 +02:00
49a8992d6e Advance Binky human onboarding 2026-07-28 16:49:27 +02:00
custodian-sync
2bfd115f11 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-28:
  - update .custodian-brief.md for key-cape
2026-07-28 16:48:13 +02:00
070c38f447 Record suspended identity enforcement 2026-07-28 01:33:24 +02:00
909bb327fc Deny suspended directory identities
All checks were successful
Build and Publish Container Image / build-and-push (push) Successful in 24s
2026-07-28 01:23:22 +02:00
76da0237ff Bind portal OIDC workplan to State Hub 2026-07-28 00:43:56 +02:00
custodian-sync
806bcf18d4 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-28:
  - update .custodian-brief.md for key-cape
2026-07-28 00:40:13 +02:00
e8b4eded88 Map explicit tenant groups into OIDC claims
All checks were successful
Build and Publish Container Image / build-and-push (push) Successful in 26s
2026-07-28 00:34:19 +02:00
993a4dd589 Register user-engine portal OIDC client 2026-07-28 00:06:38 +02:00
401ab9ca55 Refresh Binky onboarding records 2026-07-27 22:34:21 +02:00
custodian-sync
c9459b29fc chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-27:
  - update .custodian-brief.md for key-cape
2026-07-27 22:31:59 +02:00
1cd137cd9d Route Binky onboarding through user portal 2026-07-27 22:31:43 +02:00
3d108adeb8 Refresh work record index 2026-07-27 21:13:44 +02:00
custodian-sync
3def97b087 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-27:
  - update .custodian-brief.md for key-cape
2026-07-27 20:53:36 +02:00
e54bcd9a40 Advance Binky identity onboarding 2026-07-27 20:39:13 +02:00
custodian-sync
0fa9ec9673 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-27:
  - update .custodian-brief.md for key-cape
2026-07-27 20:18:33 +02:00
881fffc079 Complete KeyCape service-token rollout
All checks were successful
Build and Publish Container Image / build-and-push (push) Successful in 25s
2026-07-27 20:17:55 +02:00
custodian-sync
f4a2f7eb1e chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-27:
  - update .custodian-brief.md for key-cape
2026-07-27 20:03:36 +02:00
custodian-sync
e4464278e7 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-27:
  - KEY-WP-0006-T04: progress → wait
2026-07-27 20:03:31 +02:00
e877d2752d Implement KeyCape service-token issuance
All checks were successful
Build and Publish Container Image / build-and-push (push) Successful in 47s
2026-07-27 20:03:07 +02:00
custodian-sync
519f0772d2 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-27:
  - update .custodian-brief.md for key-cape
2026-07-27 19:39:07 +02:00
86e6c083f7 Define Qonto runtime identity contract 2026-07-26 13:34:56 +02:00
custodian-sync
739b1f5c72 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-26:
  - update .custodian-brief.md for key-cape
2026-07-26 13:09:56 +02:00
custodian-sync
a32512c6de chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-26:
  - update .custodian-brief.md for key-cape
2026-07-26 11:03:32 +02:00
9ce84b915f chore(consistency): sync WORK-RECORDS.md for KEY-WP-0005 closure [auto]
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-24 00:18:50 +02:00
custodian-sync
f4da182a1f chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-24:
  - update .custodian-brief.md for key-cape
2026-07-24 00:18:41 +02:00
44da5f5f99 KEY-WP-0005-T02-T03: cached tenant_roles claim, close workplan
All checks were successful
Build and Publish Container Image / build-and-push (push) Successful in 1m21s
New internal/adapters/tenantengine package, mirroring
internal/adapters/{lldap,privacyidea,authelia}'s shape: Client.Roles()
calls tenant-engine's cache-read endpoint. Fails open by construction --
unreachable, non-200, malformed body, or a nil *Client all return
(nil, false), never an error to specially handle. Wired into
TokenHandler.TenantEngine (nil by default, existing tests unaffected);
token.go stamps tenant_roles only when ok.

7 adapter tests plus 3 TokenHandler-level tests proving the actual
required behavior end-to-end: present when reachable, token issuance still
200 with every other core claim intact when unreachable (tenant_roles
simply absent -- the literal done-criteria), absent when not configured.

Real bug found and fixed at the source, not worked around: the first live
cross-process check (real flex-auth, real tenant-engine, this adapter)
returned tenant_not_found for a tenant that existed -- tenant-engine's read
endpoint was keyed by its internal tenant_id, but key-cape only ever has
the tenant's profile identifier. Fixed in tenant-engine
(ADHOC-2026-07-24), re-verified with the same live three-process chain --
roles=[IAM] ok=true.

Workplan closed: T01-T03 done. Explicitly still open: client_credentials /
service-token issuance -- no such flow exists in token.go at all, a
materially larger separate piece of work than either task here.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-24 00:18:17 +02:00
fb888579dc chore(consistency): sync WORK-RECORDS.md for KEY-WP-0005-T01 [auto]
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-24 00:04:09 +02:00
custodian-sync
f66df69202 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-24:
  - update .custodian-brief.md for key-cape
2026-07-24 00:03:59 +02:00
f1f7fa9dd7 KEY-WP-0005-T01: IAM Profile core claims for the human PKCE flow
All checks were successful
Build and Publish Container Image / build-and-push (push) Successful in 1m50s
Verified first: grant_types_supported advertises client_credentials in
discovery.go, but token.go only ever accepted authorization_code -- no
service-token issuance path exists at all. Building one from scratch is
materially bigger than extending the existing flow; explicitly not
attempted here, left open in the workplan rather than declared done.

What shipped for the human Authorization Code + PKCE flow:

- domain.User.Tenant (new, omitempty) + token.go's effectiveTenant():
  falls back to tenant:coulomb (this workstation's actual tenant, ADR-0006)
  when unset -- never an empty tenant claim, never a silent reassignment.
- principal_type: "human", unconditional.
- groups/roles promoted from scope-gated to unconditional core claims,
  always [] not null when empty. One pre-existing test asserted the old
  scope-gated groups behavior -- updated to match the new intentional
  behavior, not left failing or reverted.
- assurance built from PKCESession.MFAVerified (new field, threaded
  through completeAuthorization's two call sites in authorize.go) --
  whether MFA was actually verified in this session, not static enrollment
  state. aal2 only when required-and-passed this time, aal1 otherwise.

go build/vet clean, go test ./... green repo-wide. Two new authorize_test.go
cases assert MFAVerified on both paths. tests/profile/profile_test.go's
TestCompleteTokenFlow (the repo's own full HTTP integration test) extended
with real value assertions for all five claims, not just presence checks.

Python conformance tool not run against a live instance (needs the full
Authelia+LLDAP+privacyIDEA stack); TestCompleteTokenFlow's real HTTP round
trip covers the equivalent claim checks instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-24 00:03:31 +02:00
custodian-sync
e51a2d74e9 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-23:
  - update .custodian-brief.md for key-cape
2026-07-23 23:52:35 +02:00
8059f65a1b chore(consistency): write back state_hub ids for KEY-WP-0005 [auto]
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 23:52:13 +02:00
cca7434b2d chore(consistency): register KEY-WP-0005 in State Hub [auto]
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 22:48:04 +02:00
custodian-sync
74c81f0566 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-23:
  - update .custodian-brief.md for key-cape
2026-07-23 22:47:34 +02:00
260ff9cc99 Draft KEY-WP-0005: IAM Profile core claims (tenant, principal_type, roles, assurance, tenant_roles)
Discovered while planning tenant-engine's flex-auth WriteAuthorizer
(TEN-WP-0003): src/internal/server/oidc/token.go emits none of
iam-profile_v0.3.md's Core Claims yet -- not tenant, principal_type,
groups, roles, or assurance. tenant_roles isn't a small addition on top of
existing tenant support; it's the last, optional claim on top of a
baseline that doesn't exist yet.

Registered, not implemented -- security-sensitive Go token-issuance code
deserves dedicated context before changing, not a rushed edit from a first
read of the file.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 22:47:00 +02:00
df26aee844 KEY-WP-0004-T01: adopt tenant:<grouping>:<name> identifier, binky -> friendly
Bernd's decision: role words (customer/vendor) collide with the separate
capability-role dimension a tenant can hold (PLTF/IAM/VEN/CUS, per
net-kingdom/docs/princedom-isolation-exploration.md's unratified model --
Binky itself is both CUS and, later, VEN). Tenants are grouped instead by
onboarding-risk/entity-shape, orthogonal to role: trial, friendly, single,
small, medium, large, enterprise, consumer, family, community, association,
agentic.

Binky maps to friendly -> tenant:friendly:binky, replacing the earlier
tenant:customer:binky throughout this workplan.

Two open questions flagged, not resolved here: where tenant:coulomb (the
platform's own internal/reference tenant) fits this external-shaped grouping
list, and whether net-kingdom should ratify this list into
iam-profile_v0.2.md's Tenant Claim section, since it currently still
documents the old customer/sandbox suggested identifiers and NetKingdom
owns that canon per ADR-0011.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 15:45:43 +02:00
7ddc48d3cd chore(consistency): register KEY-WP-0004 in State Hub [auto]
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 14:35:36 +02:00
custodian-sync
8a7e243d69 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-23:
  - update .custodian-brief.md for key-cape
2026-07-23 14:35:12 +02:00
b9a7d1b008 Draft KEY-WP-0004: Binky Hedgehog GmbH as first tenant + qonto-assistant workload identity
Provisions the first real NetKingdom tenant (tenant:customer:binky, matching
the slug already live in production OpenBao paths) with a human tenant-admin
user and a workload-identity OIDC client for qonto-assistant's MCP callers,
routed through secrets-engine for secret custody and ops-warden for
discoverable, minimal-touch credential access. Closes Gap #1 flagged in
qonto-assistant's QONTO-WP-0003 closure (no OIDC issuer existed in the fleet).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-23 14:34:40 +02:00
1a7fdadcda docs: workplan-first agent guidance prose (CUST-WP-0055 T04 batch 5) 2026-07-08 19:51:38 +02:00
c95ec5d245 Regenerate agent instructions from state-hub templates (CUST-WP-0055 T01)
Sync AGENTS.md, CLAUDE.md, and .claude/rules from updated project_rules
templates: workplan-first session protocol, legacy terminology footnote,
and GET /workplans/ examples.
2026-07-08 14:50:29 +02:00
custodian-sync
33d7d44205 chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-07-08:
  - update .custodian-brief.md for key-cape
2026-07-08 14:05:58 +02:00
326f7d1f07 Draft capability entry (reuse-surface REUSE-WP-0017-T04, cohort 2)
Honest first-pass maturity vector grounded in README/docs/tests present
in this repo; no invented evidence. Flagged for human review before
publish. See reuse-surface history/2026-07-06-coverage-classification.md.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-06 19:41:37 +02:00
ec706da304 Tier-2 Forgejo pilot: image build workflow on railiance01 runner
All checks were successful
Build and Publish Container Image / build-and-push (push) Successful in 51s
Uses archive checkout + static docker-cli (non-root host runner pattern).
Pushes to forgejo.coulomb.social/coulomb/key-cape per RAIL-HO-WP-0005-T10.
2026-07-04 10:23:38 +02:00
2fd69f0374 Normalize agent instructions and workplan frontmatter (STATE-WP-0067)
Some checks are pending
Build and Publish Container Image / build-and-push (push) Waiting to run
- Align agent files with on-disk workplan prefixes (infer from workplan ids)
- Set workplan domain to registered domain_slug; add topic_slug where applicable
- Repair frontmatter delimiter formatting; migrate legacy task status literals
- Regenerate AGENTS.md, CLAUDE.md, and .claude/rules from State Hub templates
2026-06-22 23:16:27 +02:00
afc01456a5 Fixed workplan frontmatter 2026-06-22 18:40:55 +02:00
d076e7ee7b chore(consistency): sync task status from DB [auto]
Updated by fix-consistency on 2026-06-22:
  - update .custodian-brief.md for key-cape
2026-06-22 18:02:26 +02:00