Signal

Two Real Boards Found a Spec Violation

By makemind · Jul 31, 2026

The last week of July. This week has no simulator. The verification does not pass without a board either.

This week's Signal

A board handed over its screen. "Boards Hand Over Their Screens" attaches an STM32H723 on the desk over USB serial, and an ESP32 found by mDNS over Wi-Fi TCP. Each board serves its own screen definition, and pressing a button really lights an LED. The client code does not differ by a character between the two — the only change is which bridge program runs.

Three terminals attached to one chip. "Attach to One Chip" stands one server beside the shop's payment terminal and attaches a tablet, a PC and a kitchen screen. No app was built for any of the three, and the card authorisation path was not touched by a single line.

Tool and package notes

This week's real gain was not an article but a defect found. Attached to a real board, listResources() died instantly.

type 'Null' is not a subtype of type 'String' in type cast

The board was the first suspect. But the MCP spec makes a resource's description optional, and the board simply did not send it. The board was right. mcp_client 1.1.1 was casting that field as non-null; 2.1.0 already had it fixed.

Why had it not shown up? Because consumers that call listResources() are rare. A path that only runs initialize → tools/list → tools/call → resources/read never touches that code. A parser that requires a field the spec makes optional only dies when it meets someone who followed the spec. And that meeting usually comes on the day real hardware is connected.

A short thought

A simulator usually answers the way we wrote it. So it passes right through the places where we misunderstood. What this week confirmed was neither performance nor convenience but that — real hardware does not agree to our mistakes.

Next month

Down to field terminals. A queue, a picking route, a shift handover, a till with the network gone.


makemind.dev "Signal" — once a week, what went up and what got in the way while building it.

Twitter