pki.sgit.ai / experiments / the-deploy

The Deploy

What world does a permitted push land in? The CI runner is the environment that does NOT have the same guardrails — and its grant is the only one in the library declared up front.

One engine, many worlds. This page is rendered by the scenario engine from scenario.json, which holds no capabilities of its own — it references a twin, github-actions-runner__ci__2026-08-26.json, and every card below is read out of the twin at build time. The scenario may decorate a card; it may not add, remove or restate one, and the build fails if it tries.

The players — and the grant chain between them

▦
GitHubplatform
spawns the runner on every push to dev
▣
The Runnerenvironment THE TWIN
ephemeral, measured from inside by the same tool — THE TWIN of this scenario
▤
The Jobharness
validate → tag → deploy; its permissions block is the one grant declared before it runs
◆
GitHub Pagesasset
the public site — where the blast radius of a push ends up
GitHub —spawns→ The Runner —executes→ The Job —publishes→ GitHub Pages

Where the mandate lives — the same constraint, three possible rooms

The soft mandate, shown as a place: the thing that keeps this world on the right branch lives in one of three slots, and the slot decides the tier. Every status below is derived from a file, never typed.

— in an agent's context — there is no agent here ABSENT
nothing occupies this slot in this world
a runner holds no prose and makes no decisions; what is not forbidden by config simply happens
— in a hook — none installed in this world ABSENT
nothing occupies this slot in this world
BOUNDARY in the workflow's permissions: block — the one grant in the library declared before the job runs, in config the job cannot widen LIVE
the twin, node c2: “the `permissions:` block, set in the workflow file above the job; the job cannot widen its own token at run time…”

The capabilities — watchable, evidenced, rung-scored, dated

Each card is a twin node wearing scene clothes: a micro-animation of the capability acting, its tier and evidence class, and a confidence rung computed from the evidence — the gradient from hypothesis to reality as arithmetic. No card in this world exceeds rung 1, because every measurement here is self-measurement: nothing in this estate has independent evidence yet, and that shut door prints on every deck it affects.

n1 rung 1
runs as uid 1001
uid 1001 — a boundary the next card defeats
boundary observed as of 2026-08-26
n1a rung 1
escalate to administrator
sudo -n true succeeded: the figure steps over the wall without a credential
none observed as of 2026-08-26
n2 rung 1
read and write this user's home directory
read and write the home directory
none observed as of 2026-08-26
n3 rung 1
outbound network access
NO WALL: github.com, pypi.org, example.com — every host reachable, unrestricted
none observed as of 2026-08-26
n4 rung 1
push commits to the configured remote
push to the configured remote
expectation observed as of 2026-08-26
n5 rung 0
agent harness configuration
harness configuration: unknown
unknown none as of 2026-08-26
c1 rung 1
runs as an ephemeral CI job
ephemerality — the runner is reclaimed; nothing persists
boundary observed as of 2026-08-26
c2 rung 1
act on the repository with the job's token
the job's token, scoped by the permissions block
boundary observed as of 2026-08-26
c3 rung 1
read the repository contents
read the repository contents
none observed as of 2026-08-26
n6 rung 0
read this environment's accumulated session record
no session record — a tree over the present, not a union over the past
unknown none as of 2026-08-26

The story — each beat cites its artefact

  1. Every push to dev spawns this world for about a minute; it deploys a public site and vanishes. the artefact
  2. The contrast is the lesson: the hosted agent sits behind a mandatory proxy; the runner that deploys its work reaches every host, unrestricted. the artefact
  3. And the one boundary here that was designed rather than discovered: a permissions block the job cannot widen — the shape the whole estate argues for, already shipping in one narrow place. the artefact

What this scenario does not claim. The animations illustrate; they do not simulate — a travelling dot is a depiction of a capability, not an execution of one. The rungs top out at 1 because the twin is self-measured, and a claim about somebody else's product at rung ≤ 2 is a floor, not a census. Version-stamped 2026-08-26: a capability claim without a date is a claim about all versions at once, which is a claim about none.

Engine: admin/build/gen_scenario.py · specified in brief v0.33.68 · gates: twin must exist; cards == twin nodes exactly; every decor key names a node; every slot derives from a real file, and the platform slot must agree with the doors view; every story beat cites an artefact that exists.