gate-house/history/2026-08-29-approval-evidence-integrity-contracts.md
tegwick 7408ff9234 Publish approval evidence-integrity contracts for GH-WP-0002
Adopt approval-engine's outbox wire as Gate House doctrine, specify the
heartbeat-and-reconciliation detection surface, and settle consumption
ordering: the PEP consumes by CAS before the side effect. T05's §11
check is written here and queued for statute v0.8.

Assistant: grok
Assistant-Session: 01a04d89-aaa5-7443-945e-b3055cd4b7e4
2026-08-29 14:51:53 +02:00

57 lines
2.7 KiB
Markdown

# Approval evidence integrity — contracts and rulings
**Recorded:** 2026-08-29
**Workplan:** GH-WP-0002
**Audience:** approval-engine, access-engine / flex-auth, audit-core, kings-guard, secrets-engine, ops-warden
**Status:** Reference note. The normative artifacts are the contracts under
`docs/contracts/` and the decision records GH-DEC-2026-002 and GH-DEC-2026-003.
---
## Why this landed as contracts, not a statute bump
`approval-engine` shipped the object, the local outbox, and a cadence
declaration, and stopped at a public consume because GH-WP-0002-T06 was unset.
`FLEX-WP-0017-T05` is wait on the same unset. The workplan's remaining tasks
were doctrine, not another version of the layer model.
v0.7 stays the accepted statute. Two protocol clarifications and one §11
bullet are queued for v0.8 rather than silently rewritten into an accepted
text:
1. §9.7.3 — consumption is never inferred from a decision record (stands);
the PEP consumes *before* the protected side effect (clarifies the
protocol the paragraph currently implies the other way).
2. §16 — "who marks an approval consumed" is no longer open.
3. §11 — evidence sources declare their emission guarantee (GH-WP-0002-T05).
Inbox items that also belong in v0.8 (pep-stance inventory rows, the §13
table becoming a pointer into `maturity-engine`, `railiance-master`'s own-voice
declaration) are not mixed into this workplan.
## What each task produced
| Task | Artifact |
| --- | --- |
| T02 | `docs/contracts/approval-outbox.md` — adopts `approval-engine`'s wire |
| T03 | GH-DEC-2026-002 — fail-closed only on the local store |
| T04 | `docs/contracts/approval-emission-detection.md` — heartbeat + reconciliation |
| T05 | detection contract, last section — queued for v0.8 §11 |
| T06 | `docs/contracts/approval-consumption.md` and GH-DEC-2026-003 |
## The two rulings in one line each
- **Revocation:** if the local outbox insert cannot commit, the revocation
does not commit. An `audit-core` outage MUST NOT block a revocation.
Synchronous emission to `audit-core` inside the mutation is forbidden.
- **Consumption:** the PEP consumes by CAS before the side effect. The PDP
never mutates. There is no unconsume. Same-digest retry is idempotent;
a different digest against a consumed object is conflict.
## Assent still required of the implementers, not of the estate
These contracts bind `approval-engine` and `access-engine` because they asked
for them and were blocked on them. They do not move a vocabulary away from a
repository that currently uses it, so they do not follow the GH-DEC-2026-001
assent pattern. Contest is still welcome: a protocol that cannot be
implemented is a success of the loop, not a courtesy.