The sensorimotor loop: an event reaches a sensor, the body answers, and what the loop leaves behind is an emotion in two trits. Nederlands · all manuals
One page, one API. Both read only; nothing is written into the net.
/robot — the loopWhat you see. An honest status note at the top. Then Now: the emotion cell of the last day in the series, with the date, the sun's Ap value, the expectation error, and a bar strip of the last thirty days (gold = a day with Ap above 29, the storm threshold). Then the table of nine cells, each showing how often it occurred inside and outside the storm windows; today's cell is outlined. At the bottom the booked result: per prediction what stood in advance, what was measured, and whether it held — four times failed, once held.
What you can do. Read. There is nothing to configure and nothing to submit; that is deliberate.
Where it leads. To this manual, and to the hub.
/api/robot — the same state as JSONReturns reeks (number of days, first and last day, number of storm onsets), nu (the last
day with its cell), cellen (the distribution inside and outside the storm windows), sluiting,
armen (the two learning arms) and geboekt (the five predictions with their outcome and the
after-control). No key required, because there is nothing to change.
The paper behind this service is maze.robot — The Sensorimotor Winding: Expectation, Emotion and the Real Human in the Loop (J. Konstapel, 22 September 2026). Three ideas carry it.
The loop is a circle, not an arc. Dewey (1896) and von Uexküll (the Funktionskreis) showed that the response is part of what the next stimulus is. In the net's vocabulary that is a closed winding: event → sensor → body → world → sensor.
An expectation is what many closed windings leave behind. Hence the two directions run at different speeds: rule to observation once per loop and fast, observation to rule over many loops and slowly. One failed expectation therefore changes no rule — it is a vacancy. And it is the second kind of vacancy beside the one of the design step: there a rule without an image, here an observation without a rule.
Emotion is not a module but a rate. Joffily and Coricelli (2013) read valence as the fall of free energy; here it is the fall of the expectation error. Its change is the second trit. Nine cells, with relief and disappointment as crossings between −1 and +1 rather than cells. The middle row, valence zero and change zero, is calm: the rest of the trit, the zero address.
Everything in maze/robot/, dependency-free, no database.
lus.mjs — read the series (leesAp, leesToon), build the loop
(bouwReeks: expectation = median over 60 days; the loading rule adds the six-day memory with decaying
weights (6…1)/21; its coefficient is fitted on the first 40% of the series and then frozen), find the storm onsets
(stormbegin: Ap > 29 after seven quiet days), and the three counts (cellen,
sluiting, leerarmen). schudToon and schudBinnenJaar are the two
controls.robot-toets.mjs — the measurement of plan robot-1; writes robot-1-data.json.route.mjs + pagina.html — the page and the API; the loop is computed once an hour and
served from a cache.maze/poc/model.mjs computes a finite
model against a theory's axioms and names the place where it breaks. 30 tests green
(node maze/poc/model-toets.mjs).Series. Ap: the public GFZ Potsdam file (Kp_ap_Ap_SN_F107_since_1932.txt), column 23. Tone: the
daily GDELT aggregate in maze/conflict/data/gdelt-dag.csv, article-weighted, only days with at least 50
articles. Note: that tone series is not world tone but the tone of the Europe–Russia theatre. This stood in the
hashed plan in advance and is the most important limitation of this measurement.
What was measured, and what came out. Plan maze/robot/plan-robot-1.md, hashed before any
relationship was read (0356b800…). Intersection of both series: 9,591 days, 303 storm onsets.
| the question | predicted in advance | measured | ||
|---|---|---|---|---|
| P1 | is calm the most frequent cell outside storm windows? | 25–60% | 3.5% | failed |
| P2 | more negative valence inside storm windows? | ≥ +5 points | −0.00 pp | failed |
| P3 | does the loop close in about six days? | 3–10 days | 1 day | failed |
| P4 | does the arm with moving η learn better than the fixed one? | Δρ +0.02…+0.20 | Δρ −0.006 | failed |
| P5 | does the effect vanish in the shuffled control? | < 2 points | −0.76 pp | held |
What followed. The paper itself prescribes what happens when P4 fails: the learning rate does not move with valence and stays fixed at 0.1. That is how it stands in the code. Further: the dead zone must come from the series rather than from the paper — with τ = 0.05 the emotion table loses its whole middle row on a real daily series. This is the fourth time in this project that a fixed threshold on a tension measure fails (HRV, Conflict Weather, grokking, now this); the rule is now: thresholds on tension measures are derived, not chosen.
The after-control. One number was positive: the fixed arm reached a rank correlation of 0.41. After shuffling the tone within each calendar year — which leaves the era structure intact and destroys only the coupling with the sun — 0.31 remained. Most of it is therefore era and not sun; the difference has not been subjected to a significance test and is not claimed.
Kinship within the family. The design step (MAZE.AI) works on the first kind of vacancy: a rule without an image. maze.robot works on the second: an observation without a rule. They share the model check and the ledger. Conflict Weather supplies the tone series; the Passage is the organ that decides whether a tension earns an address.
What is open. A global news tone as sensor instead of one theatre; a closure measure that does not let noise pass for free (smoothed error, several consecutive days below the starting level); and the two stands on the axis through the heart — the eight remaining directed relations in the plane are not built. Each of those is one relation, one running case, one gate — not writing.