Put the gate's own actions on the log it writes for everyone else #11

Merged
LNK merged 1 commit from claude/control-plane-log into main 2026-09-04 20:12:33 +00:00
Contributor

The last of the review's foundations. Eight event types had a schema and no writer; consent, grants, pauses, gaps and scope rules were tables the log never mentioned, so a session could not be replayed from its events.

What changes. The gate writes each of them at the moment it acts, on the same log as the data, validated against the schema it always had. Session start and consent are the first two records; grant changes, scope rules added or removed, pauses and resumes, and indicator gaps and state transitions follow; session end with its counts is the last. The tables stay for live state. The path is the gate's own, not subject to a signal's grant, and closed to collectors, which a test pins.

Proof. A session replayed from its log alone comes back in order with the payloads saying what happened, and a collector's attempt to write a control record is rejected at admission. Linux verifier green on the pinned toolchain. Not run here: the Windows verifier and the end-to-end suite.

The last of the review's foundations. Eight event types had a schema and no writer; consent, grants, pauses, gaps and scope rules were tables the log never mentioned, so a session could not be replayed from its events. **What changes.** The gate writes each of them at the moment it acts, on the same log as the data, validated against the schema it always had. Session start and consent are the first two records; grant changes, scope rules added or removed, pauses and resumes, and indicator gaps and state transitions follow; session end with its counts is the last. The tables stay for live state. The path is the gate's own, not subject to a signal's grant, and closed to collectors, which a test pins. **Proof.** A session replayed from its log alone comes back in order with the payloads saying what happened, and a collector's attempt to write a control record is rejected at admission. Linux verifier green on the pinned toolchain. Not run here: the Windows verifier and the end-to-end suite.
Eight event types in the registry had a schema and no writer: the start and end of a
session, consent, a grant changing, a pause, a scope change, an indicator gap and the
indicator's state. Each was a table instead. The data was on the log and the decisions
about the data were in rows the log never mentioned, so a session could not be replayed from
its events, and an auditor asking why there is a hole here had to join five tables by
timestamp and guess.

The gate now writes each of them at the moment it acts, on the same log as the data. The
session's first two records are that it began and what was consented to; a grant change, a
scope rule added or removed, a pause and its resume, and the indicator's verification
opening and closing a gap each become a record with the schema they always had; the last
record is the session's end, with its counts. The tables stay — they are how live state is
asked — and the log is the record of how it got that way.

The path is the gate's own and not `submit`. A control record is validated against its
schema like any other, but it is not subject to the grant a person gives a signal, because
it is not a signal about them: it is the gate saying what it did to their signals. And the
path stays closed to collectors, which is pinned by a test — a collector that sends
`here.pause.v1` is rejected at admission as undeclared, the way it always was. Where a
caller's word is not in a schema's closed vocabulary the record carries the vocabulary's
nearest word rather than failing to exist.

Tests: a session replayed from its log alone comes back in order — start, consent, grant,
scope, pause, resume, indicator state and gap opening and closing, scope again, end — with
the payloads saying what happened; and a collector cannot write the gate's log.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
LNK merged commit 2ca1dcb749 into main 2026-09-04 20:12:33 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
mikebrandon/here-telemetry-rnd!11
No description provided.