An engine for modelling and managing decisions.
Find a file
tegwick 93907f3b69 APPROVAL-WP-0006 finished: immediate strict CAS on the current pins
Access keeps fractional NotBefore. The current approval, access, and
secrets pins consume immediately, with the stored instant after the signed
start and no sleep or backdating. Native gates stay on APPROVAL-WP-0002.

Assistant: grok
Assistant-Session: 01a1b5fd-0c33-7ba1-b383-53937d525595
2026-11-07 14:57:15 +01:00
adapters/go/approvalfact Preserve fractional approval expiry through atomic consumption 2026-10-16 17:35:53 +02:00
approval_engine APPROVAL-WP-0007: record the verified revoker and park the inactive plans 2026-11-07 14:10:01 +01:00
deploy deploy: pin and record the schema v9 sole-pod rollout 2026-11-07 14:21:04 +01:00
docs APPROVAL-WP-0006 finished: immediate strict CAS on the current pins 2026-11-07 14:57:15 +01:00
examples APPROVAL-WP-0007: record the verified revoker and park the inactive plans 2026-11-07 14:10:01 +01:00
history Align to security layer model v0.7 and open the engine spine 2026-08-29 11:58:28 +02:00
intakes Record the approval-engine coordination follow-up. 2026-10-23 15:43:26 +02:00
registry deploy: pin and record the schema v9 sole-pod rollout 2026-11-07 14:21:04 +01:00
schemas APPROVAL-WP-0007-T02 done: actor_consumes; T05 principal_approves split out 2026-11-01 00:39:34 +01:00
scripts Add producer-owned Go approval fact validation and canonical vectors 2026-10-16 16:25:54 +02:00
tests deploy: pin and record the schema v9 sole-pod rollout 2026-11-07 14:21:04 +01:00
workplans APPROVAL-WP-0006 finished: immediate strict CAS on the current pins 2026-11-07 14:57:15 +01:00
.generated-work-records.json build: generate work-record index from staged source changes 2026-11-01 23:00:30 +01:00
.generated-work-records.mk build: generate work-record index from staged source changes 2026-11-01 23:00:30 +01:00
.gitignore fix: keep generated local orientation out of version control 2026-11-01 22:09:32 +01:00
.repo-classification.yaml Add repo classification to close C-24/C-35 2026-08-29 14:43:52 +02:00
AGENTS.md Finish approval engine spine 2026-09-01 23:45:48 +02:00
cadence.yaml Derive heartbeat cadence from the shared coordination frame 2026-10-15 20:41:49 +02:00
Containerfile fix: raise musl and zlib floors so the release scan can pass 2026-11-07 14:12:22 +01:00
INTENT.md Apply GH-DEC-2026-017: INTENT.md governs, layer.yaml is derived, no version 2026-09-21 07:35:00 +02:00
layer.yaml Apply GH-DEC-2026-020: remove companion_version from layer.yaml 2026-09-21 09:37:12 +02:00
Makefile Deploy approval service and verify native persistence and audit 2026-09-14 01:08:50 +02:00
pyproject.toml APPROVAL-WP-0007-T01 done: required_assurance floor; executor ingress; alignment answer 2026-10-31 23:07:05 +01:00
README.md Harden the PEP harness and KeyCape registration request 2026-09-02 15:46:06 +02:00
SCOPE.md Retain verified tenant provenance and reconcile production blockers 2026-10-04 11:26:32 +02:00
WORK-RECORDS.md APPROVAL-WP-0006 finished: immediate strict CAS on the current pins 2026-11-07 14:57:15 +01:00

approval-engine

The approval as a durable, authenticated, consumable object — issued before an action, verified at the moment of use, and provably not replayable.

An Engine, role PIP, in the NetKingdom security layer model (statute v0.7, accepted; operative form net-kingdom/SECURITY-COMPANION.md). It answers one question, totally and decidably:

Is this approval valid right now — for this exact action, target, actor, and purpose — and has it already been used?

It does not decide whether the action is permitted. That is access-engine, which stays NetKingdom's only policy decision point. An approval is one input to that decision.

Deliberately small, boring, and strict: atomic supersession and single consumption are what make Canon test T-06 — Approval Replay passable. Flexibility here would be a defect. Graded, evidence-based progression belongs to maturity-engine; the two engines are deliberate opposites.

See INTENT.md and SCOPE.md. Declaration: layer.yaml. Claim: docs/approval-claim.md. Consume: docs/approval-consumption.md. Caller auth: docs/caller-authentication.md. PEP sequence: docs/pep-integration.md. Origin: flex-auth FLEX-DEC-2026-001, raised while assenting to the security layer model.

make test
approval-engine migrate --db approvals.sqlite
approval-engine verify --db approvals.sqlite
approval-engine serve --db approvals.sqlite \
  --jwt-issuer https://auth.netkingdom.local \
  --jwt-audience approval-engine \
  --jwks-url http://key-cape.sso.svc.cluster.local:8080/jwks

POST /v1/approvals/{id}/consume implements GH-DEC-2026-003: the PEP atomically spends the approval before the protected side effect. Same-digest retries are idempotent; a different digest conflicts.

Production operations, caller scopes, audit delivery, and PEP sequencing are documented in docs/storage-operations.md, docs/caller-authentication.md, docs/outbox-contract.md, and docs/pep-integration.md. The checked-in StatefulSet deliberately refuses production startup without a migrated persistent store, KeyCape JWT verification, and authenticated audit delivery.