Filed from the 2026-08-25 dispatch outage. This is the reason it lasted days
rather than minutes, and it is independent of any individual unbounded call.
The defect
readinessReconcile has a failureThreshold of 3 and a consecutiveFailures
counter. Through every wedge observed today, across five container boots and
two different root causes, that counter read 0.
08:24:00Z rr=stalled inFlightMs=1860000 (31.0 min) missedPasses=30
consecutiveFailures=0 failureThreshold=3
intervalMs=60000
A sweep that never returns never throws. A hang is not a failure. So the
threshold cannot be crossed, the breaker cannot open, and any recovery gated on
consecutive failures — including container replacement — can never fire. The
subsystem is stuck in a state its own health model has no way to escape.
The public projection even reports ok: true alongside
status: "degraded" while dispatch is fully down.
Why the existing signals did not help
consecutiveFailures — structurally cannot move during a hang.
state: stalled — it is set, but nothing acts on it.
missedPasses — climbs correctly (one per interval) and is the honest
signal, but nothing acts on it either.
inFlightMs — climbs exactly with wall clock and is the sharpest indicator
available. Also unconsumed.
So the instrument already carries the truth. Nothing consumes it.
What done looks like
- A hang is classified as a failure. If
inFlightMs exceeds some multiple
of intervalMs (the observed wedges ran 30x and 31x over a 60s interval),
the sweep is unhealthy in the sense the breaker understands — not merely
labelled stalled.
- Recovery is reachable. Whatever action
consecutiveFailures >= failureThreshold unlocks must also be reachable from a hang. Today a wedged
sweep is a permanent absorbing state; see also factory-cloud#62, which
makes the same point about /healthz being unable to see an offline
dependency, and factory-cloud#63 on recovery being gated on a
timer-written heartbeat.
- A must-fire test: a sweep whose inner call never returns eventually trips
the same path a failing sweep trips. It must fail before the change.
- A must-not-fire test: a sweep that is merely SLOW but completing inside
its budget does NOT trip it. Without this, the obvious wrong fix — treating
any long sweep as failed — passes and introduces flapping.
Scope note
This is deliberately NOT a fix for any particular unbounded call. Today's
outage went through three of those:
factory-cloud#78 — unbounded FACTORY_STATE Durable Object calls
factory#368 — unbounded relayfile change-log tail reads
- and a third layer, the retry of the now-bounded call
Each was real and each was fixed, and the wedge returned one layer down every
time. A detector that treats a hang as a failure is what makes layer N+1 a
degradation rather than an outage, regardless of which call is next.
Filed from the 2026-08-25 dispatch outage. This is the reason it lasted days
rather than minutes, and it is independent of any individual unbounded call.
The defect
readinessReconcilehas afailureThresholdof 3 and aconsecutiveFailurescounter. Through every wedge observed today, across five container boots and
two different root causes, that counter read 0.
A sweep that never returns never throws. A hang is not a failure. So the
threshold cannot be crossed, the breaker cannot open, and any recovery gated on
consecutive failures — including container replacement — can never fire. The
subsystem is stuck in a state its own health model has no way to escape.
The public projection even reports
ok: truealongsidestatus: "degraded"while dispatch is fully down.Why the existing signals did not help
consecutiveFailures— structurally cannot move during a hang.state: stalled— it is set, but nothing acts on it.missedPasses— climbs correctly (one per interval) and is the honestsignal, but nothing acts on it either.
inFlightMs— climbs exactly with wall clock and is the sharpest indicatoravailable. Also unconsumed.
So the instrument already carries the truth. Nothing consumes it.
What done looks like
inFlightMsexceeds some multipleof
intervalMs(the observed wedges ran 30x and 31x over a 60s interval),the sweep is unhealthy in the sense the breaker understands — not merely
labelled
stalled.consecutiveFailures >= failureThresholdunlocks must also be reachable from a hang. Today a wedgedsweep is a permanent absorbing state; see also
factory-cloud#62, whichmakes the same point about
/healthzbeing unable to see an offlinedependency, and
factory-cloud#63on recovery being gated on atimer-written heartbeat.
the same path a failing sweep trips. It must fail before the change.
its budget does NOT trip it. Without this, the obvious wrong fix — treating
any long sweep as failed — passes and introduces flapping.
Scope note
This is deliberately NOT a fix for any particular unbounded call. Today's
outage went through three of those:
factory-cloud#78— unboundedFACTORY_STATEDurable Object callsfactory#368— unbounded relayfile change-log tail readsEach was real and each was fixed, and the wedge returned one layer down every
time. A detector that treats a hang as a failure is what makes layer N+1 a
degradation rather than an outage, regardless of which call is next.