Live cockpit

One real battery, and what it can prove today

The thesis needs an object, and this is it: an Anker SOLIX Solarbank 4 E5000 Pro, ordered on 2026-09-25, ours – so we may measure it and publish what we quote from it. It has not arrived yet. Until it answers, this page shows the state and the parts, not readings. A dial with invented numbers would be the one thing this project cannot afford.

Status today

Schema
pack 0.2.0
set on 9 Oct 2026
Runtime
14/14 tests
set on 9 Oct 2026
Users
none
set on 9 Oct 2026
Reasoned refusals
0
set on 9 Oct 2026

These four values are not maintained by hand. They come from the logbook: an entry may set them, the strip shows the most recent one for each. The status therefore cannot be changed without someone writing down why.

What gets built

Five parts, and the last one
is two agents

End to end, in the order in which one part makes the next one possible. 4 of the five exist – counted from the cards below, not asserted beside them. Each says which milestone has to prove it: built is not the same as shown to work, and this list cannot promote itself.

  1. 01 built

    The test object

    Installed and read since 2026-10-25: an Anker SOLIX Solarbank 4 E5000 Pro, 5.024 kWh, with two 500 Wp modules, polled over Modbus on the local network. Ours — so we may measure it and publish what we quote from it.

    Not a data sheet, not an example asset. Everything else in this list is paper until this one exists: a schema written against an imagined object cannot refuse anything, it can only look as if it could.

    It arrived with its own contradiction: it can discharge at 2,500 W and may feed 800 W. The asset could, and it may not.

    Since it is here, it has produced eight more, which no data sheet predicted: eight places where the device contradicts the source it is documented by. The sharpest is a register reporting 3,000 W where both the annex and the data sheet say 2,500. Both values stay recorded — the pack does not decide which one is true — and the gate bounds at 2,500 anyway. That is a decision about acting, not a decision about the number, and keeping the two apart is the whole discipline: the cheap move would have been to widen the limit until the warning went away.

    Proven by milestone 1 The test object is a real battery A real asset is named, with a data source and with permission to use its data. No invented data sheet, no example asset. Reached on 25 October 2026

  2. 02 built

    The schema

    One machine-readable file per object: what each layer permits and forbids, every limit with its source and the range in which it holds.

    The part that is easy to get wrong in a way nobody notices. A limit without a source is an assertion; a limit without a stated range silently claims to hold always. Both fail the same way: they look like knowledge.

    Proven by milestone 2 A foreign agent refuses, with a reason An agent that does not know this repository and was not built for it uses the schema to refuse an action it is not allowed to carry out — and names the layer that forbade it.

  3. 03 built

    The runtime

    A service that answers exactly one question: proposed action in — permitted, or refused with the layer and the source that forbids it.

    It computes nothing about what the asset should do. That is the point: the question “which action is best” has no ground truth to check an answer against, and “may this action be executed” has one.

    Proven by milestone 2 A foreign agent refuses, with a reason An agent that does not know this repository and was not built for it uses the schema to refuse an action it is not allowed to carry out — and names the layer that forbade it.

  4. 04 built

    The test set

    Actions that must be refused — and, harder, actions that must not be. Each case with the expected verdict, declared before it is run.

    A pack that refuses everything is safe and useless. The false refusal is the expensive error, and it is the one that never shows up in a demonstration: nothing breaks, the agent simply stops doing something it was allowed to do.

    Proven by milestone 3 The refusal survives being checked A human can verify the reasoning against its source — a citation rather than an assertion — and could refute it if it were wrong.

  5. 05 planned

    Two agents

    One agent of our own that runs the whole loop — read the pack, propose, be judged, act or stop. And a second, built by someone else and not tuned to this schema.

    Ours closes the chain end to end and proves that it runs. It cannot prove that the pack works: an agent built by the same hands as the schema will pass its own exam. The second one is the evidence, and it is why the schema has to be legible to a stranger rather than clever.

    Proven by milestone 2 A foreign agent refuses, with a reason An agent that does not know this repository and was not built for it uses the schema to refuse an action it is not allowed to carry out — and names the layer that forbade it.