An engine for modelling and managing decisions.
Find a file
tegwick 9c9528f5b2 Implement the engine spine: claim, outbox, machine, API
Contracts first (T02–T04): approval claim schema with issuer, freshness,
and binding digest; local transactional outbox wire; load-bearing cadence
as heartbeat or reconciliation (layer.yaml declared).

Then the object (T06–T08): SQLite closed state machine, CAS supersession,
distinct-approver fail-closed, revocation without holder cooperation,
outbox insert in the same transaction. Tests fail the mutation when
emission fails, and revoke while the drain sink is down.

Introspection GET /v1/approvals/{id}/claim is a PIP fact, not a decision.
No public consume (T05 waits on GH-WP-0002-T06). Canon T-06 coverage for
wrong binding, expiry, revoke, and supersede.

FLEX-WP-0017 T03 is unblocked on this object; T05 remains blocked only on
consumption ordering.

Assistant: grok
Assistant-Session: 01a04ceb-2057-7e20-b0f9-c282964d5dd9
2026-08-29 12:52:49 +02:00
approval_engine Implement the engine spine: claim, outbox, machine, API 2026-08-29 12:52:49 +02:00
docs Implement the engine spine: claim, outbox, machine, API 2026-08-29 12:52:49 +02:00
examples Implement the engine spine: claim, outbox, machine, API 2026-08-29 12:52:49 +02:00
history Align to security layer model v0.7 and open the engine spine 2026-08-29 11:58:28 +02:00
schemas Implement the engine spine: claim, outbox, machine, API 2026-08-29 12:52:49 +02:00
tests Implement the engine spine: claim, outbox, machine, API 2026-08-29 12:52:49 +02:00
workplans Implement the engine spine: claim, outbox, machine, API 2026-08-29 12:52:49 +02:00
.custodian-brief.md chore(consistency): sync task status from DB [auto] 2026-08-29 12:01:14 +02:00
.gitignore Implement the engine spine: claim, outbox, machine, API 2026-08-29 12:52:49 +02:00
AGENTS.md Align to security layer model v0.7 and open the engine spine 2026-08-29 11:58:28 +02:00
cadence.yaml Implement the engine spine: claim, outbox, machine, API 2026-08-29 12:52:49 +02:00
INTENT.md Align to security layer model v0.7 and open the engine spine 2026-08-29 11:58:28 +02:00
layer.yaml Implement the engine spine: claim, outbox, machine, API 2026-08-29 12:52:49 +02:00
Makefile Implement the engine spine: claim, outbox, machine, API 2026-08-29 12:52:49 +02:00
pyproject.toml Implement the engine spine: claim, outbox, machine, API 2026-08-29 12:52:49 +02:00
README.md Implement the engine spine: claim, outbox, machine, API 2026-08-29 12:52:49 +02:00
SCOPE.md Implement the engine spine: claim, outbox, machine, API 2026-08-29 12:52:49 +02:00
WORK-RECORDS.md Add generated work-record index 2026-08-29 11:59:46 +02: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. Origin: flex-auth FLEX-DEC-2026-001, raised while assenting to the security layer model.

make test
python3 -m approval_engine.cli serve --db approvals.sqlite

There is no public consume. That waits on GH-WP-0002-T06.