Loki Mode v8.0.3
Patch release. Two live status surfaces contradicted each other about whether a
build was running.
Dashboard status
Measured on a preserved real run that was genuinely paused on a gate:
-
The WebSocket stream reported "running" while
/api/statusreported
"paused" -- for the same run. The stream derived status from
dashboard-state.json'smodefield, which the engine writes and which goes
stale the moment a run pauses; on that run it still readautonomous.
/api/statusreads.loki/PAUSEand was correct.Two live surfaces disagreeing about whether a build is running is worse than
either being wrong alone, because the user cannot tell which to believe. The
WebSocket now consults the control files (.loki/STOP,.loki/PAUSE) FIRST
and falls back to the engine-written mode only when neither exists.
The pre-existing liveness check is preserved: a dead PID with no control file
still reports stopped, and a corrupt or missing state file no longer breaks
the stream.
Evidence Receipt
- The receipt collected a termination reason and never showed it. The
generator recordsfacts.execution(reason / outcome / run_status), but the
template rendered it zero times -- so a receipt for a run that stopped on a
gate displayed a verdict with no cause. The honesty banner now shows
Stopped: <reason>beneath the headline when a run did not complete, and
stays silent for a clean run. Display-only: the value is whatever the
generator recorded, never recomputed in the template.