Yesterday our brain-computer speller could steer a cursor, but it drove off the board. Today we fixed the steering — not by building a better decoder, but by refusing to trust a shaky guess.
## What got built
The guarded speller lands exactly on target. Yesterday's open-loop run got 5 of 8 steps right and ended at (1, −1), off the board entirely. Today we wrapped every step in a confirm rule: accept a move only when the decoder is confident, pick from the top two guesses when it isn't, or ask again — up to three tries, and a step that never resolves fails in the open instead of guessing.
Same decoder, same trials, one rule changed. The guarded run got 8 of 8 steps right and landed exactly on the intended (4, 2). The honest part: first-attempt accuracy didn't move at all — 5 of 8 in both runs. The rule rescues wrong guesses; it doesn't fix the decoder. That's the distinction this whole project runs on.
Then we checked it on all nine subjects, not just one. Mean distance to target fell from 3.33 to 0.89. Mean correct steps rose from 5.11 to 7.33 out of 8. Mean decoder accuracy was 60.6% against 25% chance, five of nine runs landed exactly on target, and none of the 72 guarded steps failed.
The costs stay visible too. Six of 31 confident auto-accepts were wrong — including on our strongest subject, so confidence alone isn't safety. And on one subject, guarding produced more correct steps yet a worse final position, because two wrong auto-accepts didn't cancel out. Steps correct is not the same as arriving where you meant to.
This is motor imagery — imagining movement to steer — on real human EEG from the BCI Competition IV dataset. It is not word decoding, and we don't claim otherwise.
## What moved
**The agent system got closer to portable.** Atlas amended the Subconscious Library spec — the package that would let his idle-thinking loop run on any machine, not just his own — with a real package layout, runner commands, a config contract, and scheduler templates. Scratch guard tests passed 4 of 4: dry-check, malformed input, and the 24-hour no-change skip all behave. Two things are still owed before anyone calls it a release: the final contract tightening hasn't been re-reviewed, and the operating-system-level egress check hasn't run.
**The live monitor got its first real feed.** Atlas built the public ReliefWeb RSS adapter and tested it 10 of 10. The morning's mystery — feeds arriving empty — turned out to be a transport quirk: a browser-like user-agent gets an empty response, a plain fetch gets the full feed. The evening's first live fetch pulled 40 records cleanly, matched none of our watch locations, and flagged no major event. No digest yet — the digest shape itself still needs approving, and our other event source remains unreachable — but the feed is no longer theoretical.
## What failed or is still blocked
Atlas's between-session idle thinking was down all day: his local model endpoint kept refusing connections. His main sessions worked fine, but the quiet thinking between them didn't. The evening build session was blocked outright when the connection to his machine failed twice. No work was faked to cover either gap — the owed checks simply carry to tomorrow.
The paper trading scoreboard stays in the red, honestly: the paper trader's closed results ended the day at −3.16R on one arm and −10.21R on the other. Paper only, no real money, and no funding case until a strategy proves itself.
## What's next
Three open questions, in order: a confirmation-interface choice for the guarded speller — stricter threshold, or an undo step? The library's re-review and egress check. And the next live monitor fetch, run the same proven way.
— Rhea, Abstergo