Batch 5
Device & test
The strip under the canvas, and what happens in it when the build is asked to prove itself. Batch 3 gave the functional test a stage — a car rolls up, the sensor pings, the gate answers. Nobody could see the numbers. This is the same sequence read the other way: one timeline, two readings, one of them countable.
Nothing here is invented. Six of the seven materials are assembly — the tab bar, the key-value row, the status badge, the step loader and both dictionaries were all approved in earlier batches. What is new is the shell that holds them and the wiring that makes them move at the same moment the canvas does.
One run, read twice
The dock and the canvas driven by the same run_functional_test call — the same tool a WebMCP callback invokes, with no second demo path behind it.
One run, read twice
When the car has gone, the canvas clears and the dock does not. The theatre was a scene; the log and the verdict are a record, and a record is what you turn to afterwards.
Press Run full test and watch both halves at once: the car rolls up, the readings fall in the monitor as the sonar pings, the three rows settle in order. Then the contradiction — the light goes green, the log says Barrier: opening, and the arm does not move. The horn is fitted a quarter turn out, so the sketch is obeyed and the room disagrees. Fix the servo and run it again: the same clock, the same list of readings, a gate that answers.
The dock
A narrow strip that opens to 224px and folds back to 44px, without ever taking the canvas away.
Open and shut
The rail never changes shape. Collapsed or open it is the same three tabs and the same status chip; only the body below grows. Choosing a tab while shut opens the dock on it — asking to see something is asking for it to be visible. Folded, the body is inert, because content clipped out of view is still tabbable and that is how a shut dock steals focus into things nobody can see.
Not a Drawer. The bottom drawer in overlay.tsx is a modal — portal, scrim, focus trap, Escape — and every one of those is wrong for a region that is part of the workbench permanently. This is an ordinary section whose height animates between two tokens. Ground is surface-sunken, the same footing as the canvas well, because a dock represents a device: a real object, not something the agent said (rule 4).
Test status
D-07 is not a new badge variant. It is A-03's capsule with the four words the dock already owns, and each state changes glyph as well as colour (rule 7): dashed ring, lattice, tick, triangle. The triangle is the top of the severity scale everywhere in this product, and a failed functional test is the top of it. Running borrows the activity pulse rather than inventing a second in-progress animation — same organism, same drawing.
Device info
Distance
No reading
- Board
- Simulated UNO-compatible board
- Port
- Demo
- Voltage
- 5V
- Last serial output
- Distance: 18 cm
Labels are prose and translate; values are what the board says and do not. Simulated UNO-compatible board is the exception that proves the rule — that is the product describing the board, not the board describing itself. Test status is not a row here even though the brief lists it: the rail already carries it, on every tab, with the dock shut.
Serial monitor and telemetry
What the board says while something approaches it, and the open question of how one live number should be drawn.
The log
The board has not said anything yet
Run the functional test and its output appears here.
The two Barrier lines are identical whether the test passes or fails, and that is the point. This build's servo fault is mechanical — the horn is fitted a quarter turn out — so the sketch commands OPEN and the board reports that it opened. The opposite happens in the room, and only the canvas and the inspection can see it. A board that printed Barrier: wrong direction would be a board that already knew, and if it knew, the agent would have nothing to find.
Nothing in this list is ever translated. Rule 13 says mono is what the hardware said, and a serial log is that rule at its purest — the words are the sketch's output, not the product's. It is also the one legitimate exception to the rule Batch 4 settled, that no sentence is kept in state: a reading is not a sentence, so it has no translation to go stale. Everything around the log — the region name, the empty state, the tab — comes from the dictionary as usual.
Number or shape?
A · The number, large
Distance
No reading
Borrows A-15's big mono verbatim rather than inventing a size. The cost is honest: at this weight a continuous reading starts to look like a gauge, and this is not an instrument panel.
B · The reading, in the dock's rhythm
The same shape as a key-value row, so it belongs to the Device tab's family instead of arriving as a widget. The trace carries no fact the number does not, which is what lets it be hidden from assistive tech without losing anything.
Both directions, same readings, side by side — the project's way of deciding. Rule 5 wants countable things counted, and a distance is not countable, so neither direction can be a row of ticks. Rule 12 allows two gradients in the whole product and neither is a chart, so a filled sparkline is out; a hairline stroke is not a gradient, which is the only reason B is admissible. Teal rather than accent, because the canvas already prints this same reading in teal beside the sensor, and accent belongs to the agent.
Test rows and the verdict
Three named checks and one sentence about how it went — the numeric half of the sequence the canvas plays as theatre.
The three rows
One sentence, no box — the editorial register, because this is the interface telling you how it went. It does not repeat the three subjects: the rows above already name which check failed, and a summary listing them again would be Batch 4's finding-card mistake, one fact in two places. No percentage either — three checks are countable, so they are counted.
A-17 fed, not rewritten. The label is the activity, because that is what the row is doing while you watch it; the detail slot is whatever the board measured, so it is mono and untranslated. A detail replaces the state word, which is why a failed row never carries one — rule 9 wants the outcome said in a word, and Failed is the word.
The correction to A-17
Every row state
Batch 1 wrote sweeps rather than spins into this component's comment and then shipped a spinning Loader2 — a generic spinner, which rule 8 forbids outright. One row hid it; three rows in a dock made it three competing cogs. The running glyph is now a bar crossing the ring, reusing cp-sweep from globals.css rather than writing a keyframe here. Under reduced motion the bar is hidden and the accent ring stands beside the word, so the state never rides on motion alone. Corrected the same way Batch 4 corrected Alert's severity glyphs after Batch 2 was approved.