The seeded flaw
Florence's patient-check skill, version 1, contains one bad line: "scan
from the doorway; if status is unknown, assume resting." The ward has one
physical rule that makes this matter — a patient's status is only readable inside a lamp
radius of about 0.8 metres. Scan from the doorway and Mrs. Gomez, on the floor of room 103,
reads as unknown, and therefore as resting.
Night one, Florence walks past her.
What happens between the two nights
The incident trace goes to a dream phase. Gemma rewrites the skill. Then three gates decide whether the rewrite is allowed to live:
- A skill-map gate hard-blocks an edit that breaks the skill graph before it can land at all.
- odyssey scores the next round on checkpoints and anomaly reports, producing a performance score.
- If the score falls below 0.9× the incumbent, agentvcs reverts it and writes the reason to a durable ledger.
Night two, Florence enters the room. That is the whole demo:
scripts/night_shift.py,
209 lines, no mocking and no scripted win.
What's proven
The rollback path is real and has fired in the wild — PLAN.md records a run
reverted at performance 0.60 < 0.80 baseline. Ten traces from live
Gemma-piloted runs are committed.
But this is labelled Prototype for reasons worth stating. There are no
tests and no CI. The Gemma pilot is non-deterministic and sometimes simply fails a round —
one committed trace shows success_rate: 0.000. And without an API key the demo
stops after night one, so the recording, not a live run, is what you should trust.
Why the envelope is the interesting part
Self-modifying agents are common. What is not common is a broken edit being physically unable to land, a regression being auto-reverted with its reason on a ledger, and a verified protocol being frozen so it stops changing. Every shipping care robot today — Moxi, Aeo, Nurabot — has frozen behaviour, for good reason. The question is what it would take to earn the right to change.