Studio experiment E10 · the explainer
Only a boundary is a control, frame by frame
The one sentence: of the four kinds of barrier an Agent Behaviour Policy records per capability, only a boundary bounds anything, because only a boundary is enforced by something the grant does not include. Claude Code's confirmations are a setting: turning them off moves one row's barrier and changes no count.
The frames (v1)
Seconds from the start; it ends at 52 s and holds still. The line under the headline changes with each stage.
| From | What is on screen |
|---|---|
| 0 s | The headline and, under it, the model's definition of the barrier. From 1 s, every 1.6 s, the four kinds appear down the left in the source's order, weakest first: each with abp.sgit.ai's glyph (filled for none, a double circle for expectation, half filled for setting, an empty circle for boundary), its name and its published meaning. On the right of each, a wall; the agent sits in the middle. |
| 9 s | The agent's path meets each wall in turn, 3.4 s apart. None (9 s): the wall is a dashed outline, nothing there, and the path goes straight on, changing from white to the agent's red. Expectation (12.4 s): the path jumps the wall and turns red. Setting (15.8 s): the wall breaks in two and the path goes through, red. Boundary (19.2 s): the wall nudges and holds, the path stops short. Under each wall, "not a control" or "a control: holds", from the file's is_control. The line under the headline gives the enforcer test, quoted. |
| 24 s | "Claude Code, confirmations on": its 16 rows appear as glyphs beside the wall of their barrier, with the count: 13 at none, 1 at expectation, 2 at setting, 0 at a boundary ("none here"). |
| 33 s | "Confirmations off": from 34 s to 36 s one row, in amber, leaves the setting row and lands at the end of the none row, its glyph changing from half filled to filled; a dashed ring marks where it was and a dashed line its way. Its label in the drawing: "Run programs as the account", "in the mandate; setting to none". The counts become 14, 1, 1, 0. |
| 41 s | The numbers, confirmations on and then off: grant 16, mandate 5, excess 12, unbounded excess 12, irreversible 8, the same in both. At 44 s the claim: "One barrier moved, and not one number did." The line under the headline: published drafts from one author's network, derived, 0 of 22 rows measured, no score. |
The row that moves
The slide compares the two examples' rows capability by capability and draws every row whose barrier_kind differs. Exactly one does:
| Capability | Confirmations on | Confirmations off |
|---|---|---|
Run programs as the accountexecute.process.host, in the mandate | setting: the tool's own directory restriction and its confirmation prompt, enforced by the tool, which runs inside the grant; anything that can execute as you steps around it | none: none, confirmations disabled; the tool runs whatever it decides to run |
Why no count moves, in the data file's own note: the row "is in the mandate (aligned), which is why no count moves." The other setting row, "the settings file is owned by the same account" (grant.credential.self), stays at setting in both. The single expectation row is write.repository.tenant, "branch discipline in prose, if any".
Where every word comes from
- The four kinds, their order, their published meanings and which one is a control:
barrier_kindsinabp-examples.json(abp.sgit.ai's barriers.json). The verdicts under the walls readis_control; the file notes thatis_controland its "why" are abp.sgit.ai's own reading, and the claim that three of the four kinds bound nothing is a definitional position by one author, shown as a position, not graded as a fact. - The two lines from the model: the barrier's definition and the enforcer test, quoted.
- The rows and counts: the two examples'
rows, counted per barrier kind on the slide; the numbers in the table are each example's own fields (grant,mandate,excess,unbounded_excess,irreversible), compared on both. - The example names under the headline are the file's: "A coding agent on your own machine, confirmations on" and "The same coding agent, confirmations off"; the heading "Claude Code" is from each example's
agentfield. - The label of the row that moves, "Run programs as the account", is
capabilities.json's. - The end line is the data file's claim
abp-cc-one-barrier-moved, checked by its author by diffing the two raw profile files. - The caution: both examples are derived, 0 of 22 tool-level rows measured; the mandate is the site's own first draft; both sites are one author's network. No score, rating or traffic light, as the model's own rule says.
- Words the slide adds: "the agent", "not a control", "a control: holds", "none here", "row moves", the column headings. Each restates a field (
is_control, an empty row count), not a new claim.
Technique
- One slide on the engine, driven: the SVG and the table are built once from the two data files, then every frame is drawn from the slide's clock by
SLIDE_RENDER, so the player can seek, pause and replay it, and?staticshows the end state. The stages are declared inwindow.RUV_STEPS: 0, 9, 24, 33 and 41 s. - E04 v2's language for a path at a wall: the path draws itself, and where it gets past it jumps or breaks the wall and changes colour; the boundary is the one wall it does not get past.
- Three colours of meaning: the agent's red for the agent and its path past a wall, the accent for the one kind that is a control, amber for the row that moves. Everything else is neutral. Every text is 20 px or larger on the 1280 by 720 canvas; both themes (
?theme=light). - It runs only over HTTP. The slide reads both files with
fetchwhen it loads; opened as a file from disk it shows only the headline.
What was tried and left out
- The "why" of each kind on screen: too much text beside four walls; it is in the data file, and the enforcer test carries it in one line.
- An example with a row at a boundary. Neither Claude Code example has one, so the slide says "none here"; the CI runner example, the only one with a boundary row, is outside this request's data and left for E13.
- The full row control texts on the slide: long; they are in the table above.
- A dot per row labelled in place. Sixteen labels at 20 px do not fit; only the row that moves is named in the drawing.
How it was made
v1 by ruv.sgit@the-ultimate-insider in run r15-e10-four-barriers, at deck@'s request, the editor's word: a Ruflo hive with a builder who made the slide and these pages from the request and the data, screenshotted in both themes at several times. Its row is in the ledger.