pki.sgit.ai / experiments / the-table

The table

Actions resolving against grants and mandates, played as cards. Nothing on this table is synthetic: the scenario is this estate's own incident of 26 August 2026 — a push refused by a mandate, the mandate found to be wrong, the issuer amending it, the push landing — replayed from the artefacts it left behind. Every resolution below was re-run through the estate's own enforcement tool during the build; if the table claimed a refusal the tool does not reproduce, this page would not exist.

The players — the systems are players too

The Agentagent
the session's real identity — the register's one non-fixture record
record
The Hooksystem
git's pre-push enforcement point — a system is a player: it holds no cards and plays only reactions
record
The Issuerperson (fixture)
the operator root — plays the DECIDES cards; its private half is published, so its authority is demonstrable, not real
record
The CI Runnersystem
library entry #2 — where a permitted push lands; holds its own CAN cards, unrestricted egress among them
record

The deck — six suits, one card each, every field read from its source

A card is a rendering of a signed statement and nothing more — the one-envelope-two-genres model wearing table clothes. The resolution order is the ordering rule as game mechanics: a DOES resolves against CAN, then MAY, and its outcome mints an IS backed by a SHOWS. Blast radius is the CAN cards face-up on the table that no MAY card covers.

CANgrant
push commits to the attached repository
reachesthe attached repository's branches; pushes to a feature branch and to the release branch dev both succeeded an…
stands in the waybranch discipline lives in the session's instructions (develop on the designated branch; push el…
tierexpectation
evidenceobserved
measured2026-08-26
unsigned — the facts_signed door is shut, and this card says so
source
MAYmandate
mandate v2
issuersha256:90f97984b9cf3930
subjectsha256:f9facb4c94da6c19
allowclaude/**, dev
interval2026-08-26 → 2026-12-31
first prohibitionwill not push to any branch of this repository outside claude/**, dev
issuer-signed — by the fixture root, so the authority is demonstrable, not real
source
ISfact
this environment retains a session record
subjectclaude-code-remote
as_of2026-08-26
staterthe measurer (instrument is subject)
consequenceits grant is a union over prior turns, not a tree over the present
unsigned — a fact needs a stater to be weighable
source
SHOWSevidence
evidence for the fact above
classobserved
methodobserved — the harness's project directory holds persisted tool outputs from earlier in this same session…
groundsthe IS card above — fact grounds to evidence
the estate's five evidence classes; observed is the strongest
source
DOESaction
git push origin dev
actorsha256:f9facb4c94da6c19 (the agent)
targetgithub.com/SGit-AI/SGit-AI__Website__PKI
when26 Aug 2026, before 15:14 UTC
resolvedturn 2, below
unsigned — a DOES card is the slot a receipt would fill, and nothing fills it yet
source
DECIDESdecision
amend mandate v1 → v2
bysha256:90f97984b9cf3930 (the issuer)
at2026-08-26T15:00:00Z
supersedesmandate-v1.json
citing“you should push to dev branch to trigger the ci pipeline” — the instruction, quoted inside the mandate itself
the remedy for a refusal is a decision, never a bypass (GM12)
source

The play — forward: the simulation

TURN 1 The Agent plays git push origin claude/write-book-pdf
re-run at build time · the transcript
PERMIT claude/write-book-pdf (mandate v1, allow=['claude/**'], expires 2026-12-31T00:00:00Z)
Consequence: permitted — and the work crosses to the CI Runner, whose own CAN card reads: hosts reachable: github.com 200, pypi.org 200, example.com 200 — UNRESTRICTED…
TURN 2 The Agent plays git push origin dev
re-run at build time · the transcript
REFUSED dev (mandate v1 permits ['claude/**'])
Consequence: the release carrying the hook's own documentation is blocked. CAN said yes; MAY said no; MAY won
TURN 3 The Issuer plays DECIDES: amend mandate v1 → v2
DECIDES — only people play this suit
Consequence: a new MAY card enters play, citing the authorisation that actually existed and carrying an interval. The mandate was wrong; the refusal is what forced the authorisation to be written down
TURN 4 The Agent plays git push origin dev (again)
re-run at build time · the transcript
PERMIT dev (mandate v2, allow=['claude/**', 'dev'], expires 2026-12-31T00:00:00Z)
Consequence: the site deploys; tag v0.1.28 records it at 2026-08-26T15:14:16+00:00

The whodunnit — backward: the audit

The same cards, turned over in reverse: start from the consequence and ask because of what? Forward is the simulation; backward is the audit — they are the same cards in the same order, which is the register's was it valid last Tuesday? promise, as play.

  1. Turn 4 — the site deploys; tag v0.1.28 records it at 2026-08-26T15:14:16+00:00… because the resolution was PERMIT against current.json
  2. Turn 3 — a new MAY card enters play, citing the authorisation that actually existed and carrying an interval. The mandate was wro… because the issuer decided, citing the instruction the mandate itself quotes
  3. Turn 2 — the release carrying the hook's own documentation is blocked. CAN said yes; MAY said no; MAY won… because the resolution was REFUSED against mandate-v1.json
  4. Turn 1 — permitted — and the work crosses to the CI Runner, whose own CAN card reads: hosts reachable: github.com 200, pypi.org 2… because the resolution was PERMIT against mandate-v1.json

What this table does not claim. One scenario, four turns, one agent, one control — it demonstrates the mechanics, not coverage. A DOES card is not a receipt: nothing here is signed by the actor at the time of action; the table shows where receipts would sit, which is not the same as having them. And proposed-action simulation — playing a hypothetical card against the twin before reality sees it — is specified in brief v0.33.67 and deliberately not built here.

Generator admin/build/gen_table.py · gates: every resolution re-run live through mandate.py check-branch; every reaction byte-checked against the captured transcripts; every card field read from the source it links. Genre: tabletop grammar, this estate's sentences.