A policy-as-code capable authorization registry/control-plane service.
Find a file
tegwick bf649ee17d
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s
docs: operator caller access path, and the caller is absent from the record
glas-harness asked for a supported owner access path with authenticated
caller binding and lifetime, ruling out Service DNS and a permanent
operator token. Both refusals are correct and the answer needs no new
mechanism: a TokenRequest token is short-lived, audience-scoped, and
bound by exact sub to the ServiceAccount the deployed pin already names.

Two findings came out of designing it.

First, for an operator caller the pin's NetworkPolicy is not a partial
control, it is silent: kubectl port-forward is proxied to the pod's own
loopback and no policy selector is consulted. So under warn the operator
path is unauthenticated and unfiltered, and the only reason it is not
reachable is that nobody has forwarded the port. warn was safe for
ops-warden because a workload pin still admitted one pod; here the warn
window protects nothing while it runs. enforce is the deliverable.

Second, the ServiceAccount named by the deployed binding does not exist.
Namespace secrets-engine holds only default, so enforce today would deny
every request rather than authenticate one.

Third, and this is the contract one: the decision record has no caller
field. provenance carries evaluator, mode, policy and registry digests
and decision time; binding carries the normalized request. So the four
negative tests can all pass and no artifact retains that they passed for
the request that mattered. Same seam as FLEX-DEC-2026-008 one layer up —
there a tenant was carried into the digest and never compared, visible
but not enforced; here a caller is authenticated and never recorded,
enforced but not visible.

provenance.caller, not binding.caller: the same request from a different
authenticated caller must decide identically, so the caller is not
replay identity and must not move request_digest. FLEX-DEC-2026-009.

Live receipts are not included. kubectl create token is credential
minting and was refused in this session, correctly; the commands are
exact and the expectations read out of internal/callerauth/auth.go, but
nothing is claimed as verified that was not run.

Also records the operator's tenant:platform decision
(5ed3fb35-eca9-413a-82b9-95171ba85bf6) and verifies that v2 already
enforces exactly it — exact string equality, no alias, no normalisation.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014aQMM1dPXaPiXVn6DwwtLd

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 715613@bnt-lap001
Assistant-Session: fabd95c1-4c9e-4080-8849-8707ae025f80
2026-09-06 22:33:21 +02:00
.claude/rules docs: workplan-first agent guidance prose (CUST-WP-0055 T04 batch 2) 2026-07-08 16:41:17 +02:00
.forgejo/workflows Publish images via CI; file staged-promotion overlay debt 2026-08-11 10:35:34 +02:00
.github/workflows Land foundations: assessment, ADR-001/002/003, FLEX-WP-0005, Go skeleton 2026-05-16 01:54:44 +02:00
.repo-manager Publish approval_binding_digest: a claim cannot name the request carrying it 2026-09-06 14:52:33 +02:00
charts/flex-auth Enforce caller-auth on flex-auth-user-engine and record the live A2 probe 2026-08-19 14:00:53 +02:00
cmd/flex-auth feat(policy): add credential grant authorization package 2026-08-23 13:59:03 +02:00
decisions docs: operator caller access path, and the caller is absent from the record 2026-09-06 22:33:21 +02:00
deploy feat(authz): bind decisions to exact actions 2026-08-23 13:18:26 +02:00
docs docs: operator caller access path, and the caller is absent from the record 2026-09-06 22:33:21 +02:00
examples fix(secrets-engine): v2 adds the tenant rule v1 never had 2026-09-06 20:38:45 +02:00
history Align INTENT and SCOPE to security layer model v0.7; plan conformance work 2026-08-29 14:43:49 +02:00
intakes chore(registrar): assign State Hub identifiers 2026-08-29 02:45:11 +02:00
internal Add schemaguard; correct check_request subject.type against shipped reality 2026-09-06 14:21:28 +02:00
pkg/api Publish approval_binding_digest: a claim cannot name the request carrying it 2026-09-06 14:52:33 +02:00
railiance Pin deployed secrets-engine tenant policy v2 2026-09-06 21:39:10 +02:00
registry Add capability registry with seed entry from reuse-surface 2026-06-16 01:46:54 +02:00
schemas Publish approval_binding_digest: a claim cannot name the request carrying it 2026-09-06 14:52:33 +02:00
tests Enforce caller-auth on flex-auth-ops-warden (FLEX-WP-0016-T03) 2026-08-19 20:10:31 +02:00
tools Finish FLEX-WP-0019 layer-model v0.7 conformance 2026-09-03 23:48:45 +02:00
values Pin deployed secrets-engine tenant policy v2 2026-09-06 21:39:10 +02:00
workplans docs: operator caller access path, and the caller is absent from the record 2026-09-06 22:33:21 +02:00
.custodian-brief.md chore(consistency): sync task status from DB [auto] 2026-09-06 20:39:24 +02:00
.gitignore Land foundations: assessment, ADR-001/002/003, FLEX-WP-0005, Go skeleton 2026-05-16 01:54:44 +02:00
.golangci.yml Land foundations: assessment, ADR-001/002/003, FLEX-WP-0005, Go skeleton 2026-05-16 01:54:44 +02:00
.repo-classification.yaml Human-review .repo-classification.yaml (CUST-WP-0050 follow-up) 2026-06-22 17:56:17 +02:00
AGENTS.md docs(agents): repoint remote State Hub URL to the in-cluster address 2026-08-25 00:21:00 +02:00
CLAUDE.md Add credential routing instructions for all agent runtimes 2026-06-18 22:48:37 +02:00
Containerfile Package flex-auth policy service 2026-08-09 01:35:30 +02:00
go.mod Implement policy package loader 2026-05-17 05:30:40 +02:00
go.sum Implement policy package loader 2026-05-17 05:30:40 +02:00
INTENT.md Finish FLEX-WP-0019 layer-model v0.7 conformance 2026-09-03 23:48:45 +02:00
LICENSE Adopt Target Revenue Source License V1C1 (org-wide preliminary rollout) 2026-07-30 00:16:31 +02:00
Makefile Finish FLEX-WP-0019 layer-model v0.7 conformance 2026-09-03 23:48:45 +02:00
README.md Refine workplans for CARING profile 2026-05-17 04:15:38 +02:00
SCOPE.md fix(secrets-engine): v2 adds the tenant rule v1 never had 2026-09-06 20:38:45 +02:00
tenancy.yaml fix(posture): remove redundant implemented level 2026-08-22 15:22:33 +02:00
WORK-RECORDS.md chore(consistency): register FLEX-WP-0022 and refresh work records 2026-09-06 20:41:05 +02:00

flex-auth

Policy-as-code authorization registry and control plane for NetKingdom-aligned systems.

Start with INTENT.md for the project boundary and direction. Research notes and ADRs live in docs/ and docs/adr/.

The product boundary is captured in SCOPE.md, and the current Product Requirements Document is docs/ProductRequirementsDocument.md.

The 2026-05-15 pre-implementation assessment that shapes the current sequencing is in docs/pre-implementation-assessment.md.

The CARING reference-implementation approach is captured in docs/caring-architecture-blueprint.md.

Workplans live in workplans/, with sequencing captured in docs/workplan-planning-map.md.