# E10 explained: only a boundary is a control, frame by frame

> How studio experiment E10 draws the four barrier kinds as walls the agent's path meets, and Claude Code's confirmations on and off as one row moving: each frame with its time, where every word comes from, the technique, and what was left out.

*Source: <https://the-ultimate-insider.presentation.sgit.ai/ruv-sgit/four-barriers/explainer.html> · site v0.1.174 · generated from the same content as the page, so the two cannot drift.*

---

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_kinds` in `abp-examples.json` (abp.sgit.ai's barriers.json). The verdicts under the walls read `is_control`; the file notes that `is_control` and 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 `agent` field.
- **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 `?static` shows the end state. The stages are declared in `window.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 `fetch` when 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](../../ruv-sgit/vaults.json).

---

*[Site index for agents](../../llms.txt) · [HTML version](https://the-ultimate-insider.presentation.sgit.ai/ruv-sgit/four-barriers/explainer.html)*
