API
Following a run
progress returns a phase. Poll it about every 10 seconds — that is what the app’s own screen does — and stop when the phase is one of the terminal ones. heartbeatAgeSeconds is how long since the machine doing the work last checked in; it is only set while something is actually running, and a number climbing past a minute or two is the signal that a run is in trouble rather than merely slow.
| phase | Stop? | Meaning |
|---|---|---|
uploading | no | The bytes are still arriving. Nothing is queued yet, and that is correct. |
not-dispatched | yes | Nothing was ever queued for this broadcast. An upload that never finished — start again. |
queued | no | Waiting for a machine. The queue is swept once a minute, so this can sit for that long. |
starting | no | A machine is being brought up. It has not picked the job up yet. |
analysing | no | Running. The only phase with a heartbeat: `heartbeatAgeSeconds` is how long since the machine last checked in. |
retrying | no | The machine stopped answering or was refused, and another is being tried. `generation` counts the attempts. |
loading | no | The run finished and its results are being read in. Nearly done. |
done | yes | Finished. The timeline is readable. |
failed | yes | It will not finish. Nothing to wait for. |
cancelled | yes | Stopped because it was asked to stop. |
There is no percentage and no estimate, because there is no honest one to give: the analyser is a single opaque run that reports nothing from inside itself, and the measured read rate varies by nearly three times across broadcasts. The phases are what is actually known.