CLOSED by R0a on 2026-09-04.
super-dogfoodis now an installed payload that writesSUPER-DOGFOOD-R0-READYto its own terminal at startup, andtools/terminal-join-probe.mjsis green and mandatory. This document is kept as it was written, because the finding it records — that a healthy, beating, zero-byte presentation was the shape of a system that had finished the pipe and not built the thing that speaks into it — is the reason Lane B started when it did. Seedocs/reviews/R0A_I_SPEAK.md.
Measured, not argued. tools/terminal-join-probe.mjs runs the whole product surface — the production chain to a confined Carrier, a real WebDriver click on Watch terminal, the terminal webview Tauri creates for it, the Plane the runtime opens, and the xterm the person is looking at — and then waits.
held the cockpit webview came up
held a Worker reaches the page with terminal PRESENT
worker wk_0004 · occupancy OCCUPIED · carrier RUNNING · terminal PRESENT
held the *Watch terminal* action is offered on that Worker
held the bind resolved, and not as a refusal receipt outcome accepted
held a real terminal webview exists after the click
held the terminal page is live and has bound its sink
waiting 8000 ms for bytes on the joined path…
plane frames 0 · bytes 0 · applied 0 · consumed 0 · acked 0 · beats 33 · gaps 0
fault null · closed null · rendered characters 0
FAILED MEASUREMENT — the marker SUPER-DOGFOOD-R0-READY reached xterm
Nothing is broken. fault null, closed null, gaps 0, the sink is bound, and the page sent 33 liveness beats in eight seconds — the credit machinery is running, the presentation is live, the plane is open. Zero bytes have crossed it because there is no product path that produces one.
Each is a grep, not a claim.
| fact | count | |
|---|---|---|
| 1 | serve_carrier's op vocabulary | drain · start · stop · pty-attach · pty-detach · pty-resize — no op that makes a Carrier write |
| 2 | super-carrier-fixture writes to fd 1 | in one arm: SAY, reached only from the control channel |
| 3 | who may send SAY | the host, in verify only — the runtime holds no control channel by design |
| 4 | terminal_input / terminal_resize in command_spec.ex | 0 |
| 5 | onData / onKey in cockpit/ui/terminal.js | 0 (the one grep hit is the header sentence saying so) |
| 6 | production callers of Ampd.TerminalAttachment.write/2 | 0 in lib/, 5 in test/ |
Fact 6 is the one worth stopping on. The inbound leg is built and falsified and unreachable — write/2 exists, is phase-guarded, has five tests, and the host's pump on the far side writes those bytes to the master (host/src/attach.rs:549) and counts them (stats.to_master). It is the same shape as acquire_terminal one slice ago: a capability reachable only from a test is not a capability. The difference is that acquire_terminal was missing its caller, and this is missing a command and a page event — the Plane's wire has exactly three frame kinds (@out, @ack, @close) and none of them carries input.
And the outbound leg has no source: the payload is chosen by the host from what it has installed — correctly, D.1.2's rule, no field names an executable — and what it has installed is a fixture that says nothing unless the host tells it to.
the plane built · falsified · OPEN · measured carrying 0 bytes
the outbound source absent — the only payload speaks only when the host asks
the inbound source absent — no command carries a keystroke, no page produces one
SUPER-DOGFOOD-R0-READY cannot appear in xterm on this tree, in either direction, and no repair inside D.1.3c makes it appear. Two scope decisions would, and both belong to a reviewer rather than to this slice:
A Carrier payload that says something. The Motor — Lane B, *Super
Self-Hosting R0 · Build Me*. This is the answer that makes the terminal worth watching, and it is the one the roadmap already points at.
An input path. terminal_input as a command, a fourth frame kind on
the Plane's wire, onData in the page, and a decision about what OBSERVE becomes when a renderer can type. cockpit/ui/terminal.js states the current scope in its own header — "`terminal_input` and `terminal_resize` are not commands this process registers, so they are not refused here — they do not exist. That is what makes OBSERVE a scope rather than a stage." Changing that is a presentation-authority ruling, not a repair.
The probe is committed and it fails. It is not marked expected-to-fail and it is not deleted: a red line that names the gap is the honest form of this result, and it turns green the day either decision lands.
B1 gave acquire_terminal a grammar. B3 proved it cost the ordered census nothing. D.1.3b·2f made a real host able to start a Carrier at all. B4 made a real Super hold its own Carrier's terminal for the first time. B5 opens that terminal on a person's screen and finds it empty — and the emptiness is not a bug in any of the four, it is the shape of a system that has finished building the pipe and has not yet built the thing that speaks into it.
That is the dogfooding argument, arrived at by running it rather than by predicting it.