Skip to content

README: SPI is implemented, the opening names the consumers, the status says what is proven on a Nano - #29

Merged
neu-rah merged 1 commit into
mainfrom
readme-consumers
Oct 8, 2026
Merged

neu-rah merged 1 commit into
mainfrom
readme-consumers

Conversation

@neu-rah

@neu-rah neu-rah commented Oct 8, 2026

Copy link
Copy Markdown
Member

README only: four edits, each checked against the code and the examples.

  1. Status: "I2C is the only bus implemented so far, but" is removed; the component-agnostic sentence stays. SPI is implemented: include/oneMachine/discover/spi.h (discover::SpiScan) and examples/spi (an RC522 on an SPI bus next to a BMP280 on I2C). Nothing else in the README or docs/ says I2C is the only bus.
  2. Examples: "And one that serves a machine to lab software:" becomes "And two consumers of the same machine, from its description alone:", over examples/sila and examples/mcp, which both read the examples/sila machine's description over its link and nothing else.
  3. Opening paragraph: "A machine describes itself over its link, and consumers serve it to other worlds from that description alone: SiLA 2 for lab software, MCP for AI assistants, with nothing protocol-specific on the board." The link carries the descriptions (role::Link, ops m, c, r, include/oneMachine/role/link.h); the firmware of examples/sila includes only oneMachine/role/* and Arduino (examples/sila/src/main.cpp, machine.h, kinds.h), with no protocol library, vocabulary or generated file (docs/consumers.md, "What the machine provides"); examples/mcp has no firmware of its own.
  4. Status: "Roles and their consumers are proven on a Nano: an independent SiLA 2 client and Claude (through MCP) read all eight roles and command the seven that take a command, with out-of-range values refused before anything reaches the board."

One wording change, and why

The requested sentence said "read and command all eight roles". vin is an analog role: it is read-only in both consumers (vin_get has no _set; the SiLA Vin feature has no command), so seven roles take a command (led, lamp, step, mode, note, duty, ping). The sentence says that; revert to the shorter wording if you prefer it.

Where claim 4 comes from (ran, on a Nano: ATmega328P, the examples/sila firmware)

  • Independent SiLA 2 client: unitelabs-sila 0.10.0, a different codebase from the sila2 0.14.0 the gateway is built on, against the gateway on the Nano. It read all eight features and commanded led, lamp, step, mode, note, duty and ping; 124 checks passed, and the command frames on the link were decoded with test/state/frame_decode.py. Out-of-range values (SetLevel(250), SetValue(7) on step, an unknown mode label, 17 characters, Duty 100.01 and -0.1) were validation errors with no frame sent.
  • Claude through MCP: a fresh Claude Code session (only this server's tools, no other context about the board), eleven plain-words requests. It commanded led, lamp, step, mode, note, duty (12.36 → 12.4, the device's value) and ping (fired twice, read back 2), read vin and the whole machine with status, and for "set the lamp to 300" and "set the duty to 101 percent" it declined and asked, sending nothing. Eight command frames in the whole session, none for the two refusals.
  • Out-of-range refused by the server itself, whatever the client does: an independent MCP client (the MCP Inspector) and a raw JSON-RPC client send out-of-bound and mistyped values to the server; each is a tool error naming the parameter and the bound, with no frame on the link; with the server's own check removed, the board clamps the value (level 200, clamped true).

The runs are not scripts in this repository (the SiLA end-to-end run needs a second Python environment and a clone of sila_base, the MCP one needs the Inspector from npm); the examples' READMEs carry the expected output of real runs, and docs/consumers.md ("Adding a consumer", step 4) asks for exactly this check with a client you did not write.

🤖 Generated with Claude Code

…us says what is proven on a Nano

The status no longer says I2C is the only bus (examples/spi finds an RC522 on
an SPI bus); the component-agnostic sentence stays. The opening paragraph says
a machine describes itself over its link and that consumers serve it to other
worlds from that description alone (SiLA 2, MCP), with nothing protocol-specific
on the board. The examples heading for the SiLA and MCP examples says they are
two consumers of the same machine. The status adds what is proven on a Nano.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@neu-rah
neu-rah merged commit 4046162 into main Oct 8, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant