OXYGENHUB

Spec: runner tiers, declines and waiting reasons as built 630ee66034b2

§11 records what is done (tiers, §11.5, the waiting reasons of §11.4)
and how: the decline endpoint, the profile hash, the ten-minute lapse,
unplaceable as an error, the 15-second placement pass. refs #36
Author
Andy McCall @andymccall <[email protected]>
When
· 2026-10-05 00:58 UTC
Signature
✔ signed by Andy McCall
Hash
630ee66034b2a27711318b21906453680d01c5fa58e43beb5e98560a30a0948a
Depends on
1abadd4a2fa6 a083cc802892 fd2d4822f7f3
Depended on by
89171fca079c
In bookmarks
main newer-pipeline push-uses-login
In tags
v0.2.0 v0.3.0 v0.3.1 v0.4.0 v0.5.0 v0.5.1 v0.5.2 v0.5.3
Edits
3 atoms, 0 tree operations, 1 file

Browse the tree at this change

modified docs/spec.md +10 −1
…
429 unchanged lines
430 430
   MUST be rejected by policy verification.
431 431
5. Hermetic Network Isolation: Jobs configured with network "isolated" MUST
432 432
   have outgoing TCP SYN and UDP packets dropped at the hypervisor boundary.
433 -
## 11. Runner Capabilities and Placement (proposed 2026-10-04; §11.2 and `arch` of §11.3 done the same day, oxygenflow#36)
433 +
## 11. Runner Capabilities and Placement (proposed 2026-10-04; §11.2 and `arch` of §11.3 done the same day; tiers of §11.1, §11.5 and the waiting reasons of §11.4 done 2026-10-05, oxygenflow#36)
434 434
435 435
A runner MUST never take a job it cannot run or cannot finish well: the
436 436
wrong architecture, no hardware virtualisation for the MicroVM tier, too
…
70 unchanged lines
507 507
three declines by different runners marks the job `unplaceable` with the
508 508
reasons. A decline is never a failed check on the state.
509 509
510 +
As built: the runner sends `POST /api/v1/flow/jobs/{id}/decline` with
511 +
`{"reason": …}` before it fetches anything. The profile is a hash of the
512 +
tiers, images, architecture, labels and capacity a runner claims with.
513 +
A decline also lapses after ten minutes, so a passing reason such as
514 +
memory in use does not bar a runner for good. An unplaceable job ends
515 +
with status `error` and an error beginning `unplaceable:`. The hub
516 +
works out why each ready job waits every 15 seconds, and the run page and
517 +
the API (`waiting`) show it.
518 +
510 519
### 11.6 Conformance
511 520
512 521
1. Architecture Safety: a job whose image is `x86_64` MUST never be
…
10 unchanged lines