Five Wakes for Nothing
The backstop timers from the last lesson are the floor, not the plan. The plan is to look at an obligation when something happened: a worker's turn ended, a session vanished, a blocker was reported. The engine learns those things from its adapters, which watch each enrolled chat and report its status through Engine.observe_session.
The first version of that function was simple. On any observation of idle, disconnected or exited, it pulled every matching obligation's due to now. Three days into production, the 2026-09-30 review read the log and found that five of the chief's early wakes, on 2026-09-29 and 2026-09-30, each followed an adapter's host event that rewrote engine_obligations.due within five seconds. None of them was a worker finishing anything. Every one was an adapter that had just restarted and, on its first cycle, reported the status the engine already had stored. An adapter does that by design: it does not know what the engine remembers, so it says what it sees. The engine heard "idle" and treated it as news.
An Observation Is Not an Event
The repair is one comparison, and the reasoning behind it is worth more than the code. observe_session now computes changed = stored != new and acts only on a real transition. Repeating the stored status still refreshes the row's timestamp, but it changes nothing else and wakes nobody. The docstring keeps the incident on the record: "repeating the stored status changed nothing and must not wake the chief (five of the early wakes of 2026-09-29/30 were exactly that)."
For that comparison to work from the very first reading, a new enrollment starts in status unknown rather than the column default idle, and a retired session that enrolls again is reset to unknown as well. Its first real observation is therefore a transition, never a repeat.
Which Transitions Owe a Review
Even a real transition is not automatically evidence. Here is exactly what the engine does, for each active binding on the session whose obligation is pending and not parked:
- To
disconnectedorexited: the obligation'sduebecomesMIN(due, now)at once, and the engine queues asession_disconnectedorsession_exitednotification for Dad listing the bound items. A worker that vanished while holding work is something Dad hears about. - To
idle, on an obligation the chief has never reviewed (itsreviewedcolumn is still empty): the review is pulled forward. A turn ended and nobody has looked yet; that is enough. - To
idle, on an obligation the chief has reviewed before: the review is pulled forward only if the worker left a note on that dispatch after the last review. No new note, no wake. The chief already looked at everything this worker had said. - To
busy,waitingorunknown: no review. (In Coop,waitingis the adapter's own delivery state, watching for a report, not the worker waiting on anyone.)
The idle check can rely on notes because of an ordering the adapter guarantees: it commits a turn's reports and notes before it reports the turn's end. By the time the engine sees the idle transition, anything that turn said is already in engine_notes. Reports do not need this path at all. A blocked report pulls its own obligation to now the moment it is stored, and a done, released or abandoned report resolves it outright.
One more reading never wakes anything: the chat's native activity (working, idle, needs input, unknown). observe_activity is documented as "Records only; it never wakes the chief or touches work." It exists so the chief and Dad can see what the chat is doing, which is a different question from whether a decision is owed.
Evidence, Then the Backstop
Put the two lessons together and you get the architecture's sentence in full: a review is owed on evidence, never on a repeated observation. An idle transition with something new to read asks for one. A lost session asks at once and tells Dad. A blocked report asks at once. Behind all of it stands the backstop, two hours after a managed acceptance and three after a CLI take, and the chief's own deferral is respected in between.
Notice what is not on that list: elapsed time as a reason to close, idle as a reason to close, silence as a reason to close. Evidence decides when the chief looks. It never decides what the chief concludes; that is the next lesson.