v2.80.1
Binaries and the merged-pull-request list are on the GitHub releases page.
A result the platform never recorded fails the run
A job's result reaches the platform with :complete. orun retried that
call for 90 seconds and then gave up without a word. The job's heartbeat
had already stopped, so a slow :complete outlived the job's lease, and
the platform then refused the result as lease_lost. orun read every
lease_lost as "another runner finished it" and returned success. The
lane exited 0 and showed green, while the platform still held the job as
claimed or queued (#748).
Now:
- The lease is renewed between retries, and the retry window is three
minutes. The client still honours
Retry-Afteron 429 and 5xx answers. - A refused result is checked against the platform's record. A
lease_lostis superseded when the platform already holds a result for the job, or another runner holds the job now. Otherwise the result is lost. - A lost result is printed and fails the run:
✕ result for <job> not recorded on the server: <error>. ThenN job result(s) could not be recorded on the server (…) — state on the server is stale, the same way undelivered logs fail it.
A failing heartbeat is printed
Heartbeat errors other than lease_lost were ignored, so a lease that ran
out left nothing in the log. The first failure of each job is now printed
once, with the error, and the heartbeat keeps going:
⚠ heartbeat for <job> is failing (<error>) — the lease may lapse before the job ends.
A rerun reads the platform's own record
When a claim is refused because the job is finished, orun used to ask the
platform's read model what happened. A read model behind the coordinator
said "not succeeded" for a job that had passed, and orun reported
already failed on another runner. That failed the lane on
gh run rerun --failed, the only way to re-run a lost result.
The claim is now classified from the coordinator's own record of the run
(GET …/runs/{id}/state):
| Platform record | orun reports |
|---|---|
| succeeded or memoized | already completed (skipped) |
| failed, timed out or canceled | already failed |
| no result | its result was never recorded; start a new run |
A platform without the state read keeps the read model.