Read session boundaries as frames, and stop polling the digest for them The note at the call site said this would happen: "the operator has slated spt-bs-releases#239 to surface boundaries to shells as frames; when that lands this call goes with it." It landed. Education now runs off `type="boundary"` frames. That is an event where the digest was a window, which removes the whole seen-set and first-read-seeds apparatus: those existed only because a window re-presents the same boundaries on every poll, so pacer had to remember which ones it had already reminded about. A frame is drained destructively and each one is its own edge, so counting frames counts boundaries. It also fixes a real gap in passing — a reset that happened while pacer was down used to be seeded away as history; it is now a spooled frame for an agent that is genuinely amnesiac, and earns the reminder it was owed. The digest call is GATED, not deleted: it is also the truncation-follow path, and removing it outright would have taken that with it silently. It now runs only when a frame actually pointed at an entry, which on a quiet session is one fewer spawn per cycle. Boundaries are MAC-verified like every durable frame (confirmed with doyle, who amended the frames page — it said "takes the durable side" while the explicit channel lists omitted boundary, so it could not be confirmed from the public contract without inference). The refusal is COUNTED rather than silent: if the stamping assumption had been wrong, requiring the stamp would drop every boundary and education would just stop — which looks exactly like a healthy build, because the thing that stopped is a message sent to somebody else. Two things mutation testing caught that review did not. The digest's Boundary entry type was first KEPT on the claim that serde needed the variant or the window would fail to parse; deleting it broke nothing, because `Entry` is untagged with an `Other` catch-all — the comment asserted a hazard instead of observing one, so the type is gone and a test pins the fall-through. And the drain test reimplemented the production match arm, so disabling the refusal counter left the suite green; the decision is now a named function both sides call. Floor 0.64.0 -> 0.67.0: with the digest read gone, an older core pushes no boundary frame and re-education never fires. Too high refuses loudly; too low fails silently. Co-authored by: perri