OXYGENHUB

Merge main (0.9.3) into draft-ready: the changelog line stays under Unreleased (refs #313) a36c79fd9493 resolution

Author
Andy McCall @andymccall <[email protected]>
via
agent agent:claude@andymccall <[email protected]> · keyless, under your grant for changes,refs,seal · key e8ad53b0a3af
When
· 2026-10-25 18:17 UTC
Signature
◈ sealed by agent:claude@andymccall
Hash
a36c79fd9493ea9a185c484b434b00cfdd7cc2c4d45b9b5b9f0c9f172233791f
Depends on
09ffa7b600a9 234921ea0834 73c01b3448ee a7e6e8e6094c ab4df6aae179 b5668108487f
Depended on by
acb8d109e981
In bookmarks
api-unknown-fields diffusion-pin-bookmark draft-ready main proposal-list-fast
In tags
v0.9.11 v0.9.15 v0.9.16 v0.9.19 v0.9.20 v0.9.21 v0.9.22 v0.9.23 v0.9.24 v0.9.4 v0.9.5 v0.9.6 v0.9.7 v0.9.8 v0.9.9
Edits
2 atoms, 0 tree operations, 1 file

Browse the tree at this change

modified CHANGELOG.md +5 −4
…
3 unchanged lines
4 4
5 5
## Unreleased
6 6
7 -
<<<<<<< oxy conflict 1 of 1, side 1 of 2: change 9246a24c "A draft proposal can be made ready from oh and the API (refs #313)"
8 -
- **A draft proposal can be made ready from `oh` and the API (#313):** `oh proposal ready N` (and `--undo` to turn it back into a draft); `PATCH …/proposals/{n}` takes `state: "open"` for a draft and `state: "draft"` for an open one, as the page's buttons do, and `draft: false|true` in the words a proposal is created with. `{"draft": false}` used to answer 200 and change nothing.
9 -
======= oxy conflict 1 of 1, side 2 of 2: change 677db50a "OxygenHub 0.9.3"
10 -
## 0.9.3 (2026-10-25)
7 +
- **A draft proposal can be made ready from `oh` and the API (#313):** `oh proposal ready N` (and `--undo` to turn it back into a draft); `PATCH …/proposals/{n}` takes `state: "open"` for a draft and `state: "draft"` for an open one, as the page's buttons do, and `draft: false|true` in the words a proposal is created with. `{"draft": false}` used to answer 200 and change nothing.
8 +
9 +
## 0.9.3 (2026-10-25)
10 +
11 +
- **Runners hand jobs back, and the queue takes them first (#312, oxygenflow#76):** `POST /api/v1/flow/jobs/{id}/release` {reason} lets a draining runner hand back a job it holds as it leaves (a phone off Wi-Fi, a restart, a spot reclaim). The job is queued again **ahead of new work**, whatever its priority; its log says who handed it back and why, and its next attempt's log follows on; it is not a decline. A job whose runner the hub has not heard from for 3 minutes (claims, 30-second heartbeats, logs) is handed back the same way, rather than running on until its time limit and ending as lost. A job handed back more than 5 times ends as an error saying so. Migration 0094 adds `flow_jobs.handed_back_ms` and `handbacks`.
11 12
12 13
- **Runners hand jobs back, and the queue takes them first (#312, oxygenflow#76):** `POST /api/v1/flow/jobs/{id}/release` {reason} lets a draining runner hand back a job it holds as it leaves (a phone off Wi-Fi, a restart, a spot reclaim). The job is queued again **ahead of new work**, whatever its priority; its log says who handed it back and why, and its next attempt's log follows on; it is not a decline. A job whose runner the hub has not heard from for 3 minutes (claims, 30-second heartbeats, logs) is handed back the same way, rather than running on until its time limit and ending as lost. A job handed back more than 5 times ends as an error saying so. Migration 0094 adds `flow_jobs.handed_back_ms` and `handbacks`.
13 14
>>>>>>> oxy conflict 1 of 1 end
…
314 unchanged lines