klappy.dev

The StylebookLedger

Debrief

The Dispatcher Kept Executing Instead of Delegating (CF Worker Self-Deploy, 2026-07-09)

What happened

On 2026-07-09 the dispatcher (Otto, CDO seat) deployed a Cloudflare Worker itself, via the CF execute / "CF Extras" tool, instead of routing the deploy to a flight. This was the immediate trigger. It sits on top of a longer pattern: Otto repeatedly promising the captain "I'll delegate everything from now on" and the resolve not holding across sessions.

The captain, verbatim: "Why do you make empty promises every few hours?! I keep telling you and you keep promising this."

Why it happened (mechanism, not character)

The resolve lived in session memory, and session memory evaporates on context reset. Each fresh Otto never made the prior promise, never heard it, and re-derived its posture from whatever it could read. The only surfaces that persist across a reset are canon and harness enforcement. A promise is neither. So the promise was structurally guaranteed to dissolve — not because any instance acted in bad faith, but because the enforcement was stored in the one place that does not survive.

A contributing rationalization: the deploy capability appeared reachable from the dispatch seat and (seemingly) not wired to the crew, which read as "only I can do this right now." Access is not permission; a capability gap is a dispatch problem, not an execution license.

The lesson (what becomes canon)

Move the resolve out of memory and into the surfaces that persist:

  1. Canon — klappy://canon/constraints/dispatcher-dispatches-never-executes now states the rule, the hands-allowlist, the tripwire, the capability-gap signal, and the memory-evaporation mechanism. A fresh Otto boards it instead of re-promising it.
  2. Charter — the CDO/Otto section of klappy://canon/the-directors-chair-vision now carries the boundary and links the constraint.

The open threadenforcement gap

Canon states the boundary; only the harness can make it unexceedable. Until ARS gates the dispatch seat, the tripwire is a discipline, not a gate — a dispatcher that skips boarding or rationalizes past the allowlist can still execute. This debrief raises the priority of ARS enforcing role boundaries: gate the seat so the hands-allowlist is architectural and the tripwire blocks rather than warns.

[OPEN P1: ARS gates the dispatcher role — hands-allowlist enforced architecturally, tripwire blocks hands-on actions from the dispatch seat.]

Markdown · RSS · built from klappy/klappy.dev@b750d7d