- A fresh New repository page (issue #360): owner and name side by side with a live check that the name is free and valid and the address it will have; visibility as three described choices; Start with a README, a licence (MIT, BSD 2-Clause or ISC, with what each allows) and an
.oxyignorefor a language, committed as you with the hub signing as your delegate (it says what to do first when you have not delegated, before anything is made); and a project board with it: a new one (Backlog, Doing, Done, on by default for an organisation) or one of the owner's, which takes the repository's issues and proposals as they open. Storage moves under its own heading. The API's create takes the same (project: {"new": TITLE} | {"number": N},readme,licence,ignore), andoh repo create OWNER/NAME [--project new:TITLE|N] [--readme] [--licence MIT] [--ignore Rust]. - oxygenhub.io links open the Android app (issue #370):
/.well-known/assetlinks.jsonvouches for the app (its package and release key's fingerprint,[push] android_appsto change), so Android opens the hub's links in it once the app claims them (oxygenhub-android#36). - The changelog is checked on the WASM tier: a
changelogjob in the pipeline runs OxygenFlow's checks module (no image, no KVM; a phone or plex takes it) and fails when the changelog's sections are out of shape or Cargo.toml's version has none. - Board views (issue #361): a board shows what matters now and other views of the same cards.
- Saved views as tabs across the top: a layout with its filter, lanes and order, saved under a name and shared by its address (
?view=NAME). - One filter bar for every view: words,
repo:,assignee:,label:,milestone:(quote a title with spaces),state:,is:open|closed,age:>14dandage:<7d. - Board: swimlanes by repository, assignee, label or milestone; a work-in-progress limit per column, whose header turns to the warning colour past it; Done shows this iteration's work while one is open, saying how many cards finished before it; and compact cards (labels as dots).
- Table: every card as a row (title, reference, state, column, assignees, labels, milestone, opened), sortable, grouped, a column changed in place, 50 rows a page.
- Keys:
j/kbetween cards,Enteropens one,mmoves it,/filters. - History: every card's moves (added, moved, archived, restored, removed) are kept from now on, for the charts and forecasts of issue #357.
- The API answers
GET /projects/{owner}/{n}?q=or?view=NAMEwith the filter applied, and lists the board's views and each column's limit;oh project view N --filter TEXTor--view NAME.
- Saved views as tabs across the top: a layout with its filter, lanes and order, saved under a name and shared by its address (
- A hung test no longer holds a runner (issue #365): the PostgreSQL tests run under nextest like the rest, and CI stops any test still running after ten minutes; the history scan's tests have four worker threads and a two-minute bound of their own. Two of them once sat for an hour on plex-1.
- Charts and forecasts from the board's own history (issue #357): a Charts tab on every board, with no estimates to keep.
- Forecasts: a Monte Carlo of the board's weekly throughput (the last 12 weeks, or its life if shorter) says when the open cards will be done, at 50% and 85%: for the open iteration or the whole board, for each milestone, and for any filter. It says how many weeks it rests on, and says plainly when there is nothing to go on. Seeded by the board and the day, so it does not change between page loads.
- Cycle time (leaving the first column to reaching Done: median and 85th percentile), throughput (cards done each week), the open iteration's burn-down with its scope, and cumulative flow (cards per column per day over 60 days, a widening band showing where work waits).
- Timeline (issue #361): iterations as spans and milestones with their due dates and forecast bands on one time axis, today marked.
- Drawn server-side as SVG in the hub's chart style, readable in both themes, each with its numbers in a table.
GET /projects/{owner}/{n}/charts(?q=) gives the series and forecasts;oh project charts N [-q FILTER].
Releases 33
OxygenHub 0.9.24 latest v0.9.24 · ✔ signed by Andy McCall · andymccall ·
Trust and auditAssets
- SHA256SUMS 1.0 KiB · blake3
8c8726b463cc· 1 downloads · built by run #544 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.24-linux-arm64.tar.gz 2.7 MiB · blake3
9f14f11f8dff· 0 downloads · built by run #544 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.24-linux-riscv64.tar.gz 2.7 MiB · blake3
373b4b5cb9bc· 0 downloads · built by run #544 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.24-linux-x86_64.tar.gz 2.9 MiB · blake3
3df965d01d66· 0 downloads · built by run #544 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.24-macos-arm64.tar.gz 2.5 MiB · blake3
f911505171ec· 0 downloads · built by run #544 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.24-macos-x86_64.tar.gz 2.7 MiB · blake3
2f30a4fc0ca6· 0 downloads · built by run #544 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.24-src.tar.gz 5.8 MiB · blake3
95a2268bc205· 0 downloads · built by run #544 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.24-windows-x86_64.zip 13.6 MiB · blake3
e895dca7ec27· 0 downloads · built by run #544 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.24_amd64.deb 2.2 MiB · blake3
ca8b0c597ca8· 1 downloads · built by run #544 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.24_arm64.deb 1.9 MiB · blake3
fb0cb84e4f9a· 1 downloads · built by run #544 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.24_riscv64.deb 2.0 MiB · blake3
b511f827e253· 1 downloads · built by run #544 dist · signed receipt by earth-1 (short-lived key) · provenance - oxygenhub-server-0.9.24-linux-x86_64.tar.gz 27.5 MiB · blake3
13feca50d1fb· 0 downloads · built by run #544 dist · signed receipt by earth-1 (short-lived key) · provenance - Source (v0.9.24.tar.zst)
- Source (v0.9.24.zip)
OxygenHub 0.9.23 v0.9.23 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- A push no longer stops main's running run (issue #369): a push cancels its bookmark's older push runs, and those already running too unless Settings › OxygenFlow keeps them; on the default bookmark, where releases are cut from the run of their commit, a running push run now always finishes, and only queued ones are cancelled. A release commit's run lost to the next push is what prompted it.
- A board's columns from the API and
oh(issue #366):POST /projects/{owner}/{n}/columnsadds one at the right,PATCH …/columns/{column}(by id or name) renames it or moves it to aposition, andDELETEremoves it, its cards going to the first remaining column; each answers the board.oh project column add|rename|move|remove BOARD …(move --to N, counting from 1 at the left,--left,--right), so a sprint column is renamed without the web page. oh run watchandoh run viewtake the newest run (issue #367): with no number they follow or show the newest run, or the newest of--bookmark NAME, so the run a push just started needs no lookup.oh issue closeandreopensay why (issue #368):-b,-Fand--attachpost a comment first, in the same command.
Assets
- SHA256SUMS 1.0 KiB · blake3
634e4e21868b· 0 downloads · built by run #540 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.23-linux-arm64.tar.gz 2.7 MiB · blake3
243e88e21b06· 0 downloads · built by run #540 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.23-linux-riscv64.tar.gz 2.7 MiB · blake3
e2a253bd03ed· 0 downloads · built by run #540 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.23-linux-x86_64.tar.gz 2.9 MiB · blake3
2b9b8afb09c9· 0 downloads · built by run #540 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.23-macos-arm64.tar.gz 2.5 MiB · blake3
a35fa1fb824a· 0 downloads · built by run #540 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.23-macos-x86_64.tar.gz 2.6 MiB · blake3
73bc93e7f8aa· 0 downloads · built by run #540 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.23-src.tar.gz 5.7 MiB · blake3
82a8723625ab· 0 downloads · built by run #540 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.23-windows-x86_64.zip 13.5 MiB · blake3
41f80f4016bc· 0 downloads · built by run #540 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.23_amd64.deb 2.2 MiB · blake3
f1df41261f69· 0 downloads · built by run #540 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.23_arm64.deb 1.9 MiB · blake3
1b2d647ba085· 0 downloads · built by run #540 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.23_riscv64.deb 2.0 MiB · blake3
85611173ac53· 0 downloads · built by run #540 dist · signed receipt by plex-1 (short-lived key) · provenance - oxygenhub-server-0.9.23-linux-x86_64.tar.gz 27.2 MiB · blake3
4ded12992c92· 0 downloads · built by run #540 dist · signed receipt by plex-1 (short-lived key) · provenance - Source (v0.9.23.tar.zst)
- Source (v0.9.23.zip)
OxygenHub 0.9.22 v0.9.22 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- Pictures in issues and comments fit their box (issue #364): an attached screenshot was shown at its own size, running out of the card on a phone and dwarfing the text on a desktop; pictures in all rendered Markdown now scale down to the width they have.
Assets
- SHA256SUMS 1.0 KiB · blake3
630e0268eb2c· 0 downloads · built by run #537 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.22-linux-arm64.tar.gz 2.6 MiB · blake3
9ccb18d60112· 1 downloads · built by run #537 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.22-linux-riscv64.tar.gz 2.7 MiB · blake3
af461d7b9c79· 1 downloads · built by run #537 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.22-linux-x86_64.tar.gz 2.9 MiB · blake3
c27251bfb3bc· 1 downloads · built by run #537 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.22-macos-arm64.tar.gz 2.4 MiB · blake3
de1eb88bcb72· 1 downloads · built by run #537 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.22-macos-x86_64.tar.gz 2.6 MiB · blake3
f3192e59418a· 0 downloads · built by run #537 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.22-src.tar.gz 5.7 MiB · blake3
f0e495f6c714· 1 downloads · built by run #537 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.22-windows-x86_64.zip 13.5 MiB · blake3
f82630b74f4d· 1 downloads · built by run #537 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.22_amd64.deb 2.2 MiB · blake3
d29497bdd525· 0 downloads · built by run #537 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.22_arm64.deb 1.9 MiB · blake3
1a2075195f05· 0 downloads · built by run #537 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.22_riscv64.deb 2.0 MiB · blake3
10114a6990c0· 0 downloads · built by run #537 dist · signed receipt by plex-1 (short-lived key) · provenance - oxygenhub-server-0.9.22-linux-x86_64.tar.gz 27.3 MiB · blake3
314aefe5cbd3· 0 downloads · built by run #537 dist · signed receipt by plex-1 (short-lived key) · provenance - Source (v0.9.22.tar.zst)
- Source (v0.9.22.zip)
OxygenHub 0.9.21 v0.9.21 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- Added: your phone as the second factor, and the sudo step (issue #356). With two-factor sign-in on, the OxygenHub app can add the phone as a second factor (its Keystore key, opened by your fingerprint, face or PIN; adding it needs a current app code). Signing in then shows a two-digit number and waits: the phone offers three, you pick the one shown and confirm, and the browser carries on, with "Use a code instead" always there. A wrong number is a no. Before sensitive changes (password, two-factor settings, keys, tokens, secrets, webhooks, collaborators, deleting or transferring a repository, anything under Administration) a session that has not proved a second factor in 15 minutes is asked again at
/sudo: the phone, a code, or the password for an account without two-factor. Settings › Security lists the phones; turning app codes off removes them. API:/api/v1/user/authenticators,/api/v1/user/approvals; migration 0104.
Assets
- SHA256SUMS 1.0 KiB · blake3
a368a53b18e8· 2 downloads · built by run #536 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.21-linux-arm64.tar.gz 2.6 MiB · blake3
98b9cac8f22e· 1 downloads · built by run #536 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.21-linux-riscv64.tar.gz 2.7 MiB · blake3
64497cb3f225· 1 downloads · built by run #536 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.21-linux-x86_64.tar.gz 2.9 MiB · blake3
56aeece2b944· 1 downloads · built by run #536 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.21-macos-arm64.tar.gz 2.4 MiB · blake3
93afbf7ba906· 1 downloads · built by run #536 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.21-macos-x86_64.tar.gz 2.6 MiB · blake3
55400b52e4fe· 1 downloads · built by run #536 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.21-src.tar.gz 5.7 MiB · blake3
35a347185f68· 1 downloads · built by run #536 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.21-windows-x86_64.zip 13.5 MiB · blake3
ff61aeabfa02· 1 downloads · built by run #536 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.21_amd64.deb 2.2 MiB · blake3
e5b9f102efeb· 1 downloads · built by run #536 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.21_arm64.deb 1.9 MiB · blake3
6950d7b967c3· 1 downloads · built by run #536 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.21_riscv64.deb 2.0 MiB · blake3
9875090ab536· 1 downloads · built by run #536 dist · signed receipt by plex-1 (short-lived key) · provenance - oxygenhub-server-0.9.21-linux-x86_64.tar.gz 27.3 MiB · blake3
4f1bb541bfd1· 1 downloads · built by run #536 dist · signed receipt by plex-1 (short-lived key) · provenance - Source (v0.9.21.tar.zst)
- Source (v0.9.21.zip)
OxygenHub 0.9.20 v0.9.20 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- Added:
GET /api/v1/user/issues(issue #359). The open issues assigned to you, in repositories you can see, newest-updated first, as the dashboard's "Assigned to you" lists them, each with its repository and address; for apps, first the Android widget's issue count (oxygenhub-android#31).
Assets
- SHA256SUMS 1.0 KiB · blake3
c6673c77ea43· 2 downloads · built by run #534 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.20-linux-arm64.tar.gz 2.6 MiB · blake3
b627155d3f77· 1 downloads · built by run #534 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.20-linux-riscv64.tar.gz 2.7 MiB · blake3
d21d01bdeebb· 1 downloads · built by run #534 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.20-linux-x86_64.tar.gz 2.9 MiB · blake3
ee6fc053ec1e· 1 downloads · built by run #534 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.20-macos-arm64.tar.gz 2.4 MiB · blake3
37450ca3c894· 1 downloads · built by run #534 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.20-macos-x86_64.tar.gz 2.6 MiB · blake3
fabf8f9a1945· 1 downloads · built by run #534 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.20-src.tar.gz 5.7 MiB · blake3
08b71d177e37· 1 downloads · built by run #534 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.20-windows-x86_64.zip 13.5 MiB · blake3
4c17e8e94197· 1 downloads · built by run #534 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.20_amd64.deb 2.2 MiB · blake3
864d77593ff8· 1 downloads · built by run #534 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.20_arm64.deb 1.9 MiB · blake3
dc09ce52f954· 1 downloads · built by run #534 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.20_riscv64.deb 2.0 MiB · blake3
c96a627a0123· 1 downloads · built by run #534 dist · signed receipt by plex-1 (short-lived key) · provenance - oxygenhub-server-0.9.20-linux-x86_64.tar.gz 27.2 MiB · blake3
a17e53a43652· 1 downloads · built by run #534 dist · signed receipt by plex-1 (short-lived key) · provenance - Source (v0.9.20.tar.zst)
- Source (v0.9.20.zip)
OxygenHub 0.9.19 v0.9.19 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- Added: attachments on issues and comments (issue #350). Screenshots and any other file:
POST /api/v1/repos/OWNER/NAME/attachments?name=FILEwith the file's bytes answers with its address and the Markdown to use, andoh issue createandoh issue commenttake--attach FILE(repeatable), so a screenshot pasted into Claude Code can go onto the issue it files. An image (by its bytes: PNG, JPEG, GIF, WebP) shows in place; anything else, SVG included, is a download. Attachments are served under the repository's read rules and can run nothing (no sniffing, a policy that allows nothing, never in a shared cache). Pasting and dragging into the web editors come later.
Assets
- SHA256SUMS 1.0 KiB · blake3
347979a48eae· 2 downloads · built by run #532 dist · signed receipt by earth-1 (short-lived key) · provenance - SHA256SUMS-haiku 96 B · blake3
1c792b93006d· 2 downloads - oh-0.9.19-haiku-x86_64.tar.gz 16.8 MiB · blake3
4256c705a8d6· 1 downloads - oh-0.9.19-linux-arm64.tar.gz 2.6 MiB · blake3
8123b15d6bed· 1 downloads · built by run #532 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.19-linux-riscv64.tar.gz 2.7 MiB · blake3
075e071eefb4· 1 downloads · built by run #532 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.19-linux-x86_64.tar.gz 2.9 MiB · blake3
b10036c371e4· 1 downloads · built by run #532 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.19-macos-arm64.tar.gz 2.4 MiB · blake3
2fee704ceae2· 0 downloads · built by run #532 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.19-macos-x86_64.tar.gz 2.6 MiB · blake3
d59e866d7d1a· 0 downloads · built by run #532 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.19-src.tar.gz 5.7 MiB · blake3
b9b5f0e052d6· 1 downloads · built by run #532 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.19-windows-x86_64.zip 13.5 MiB · blake3
f4023fca7a1c· 1 downloads · built by run #532 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.19_amd64.deb 2.2 MiB · blake3
a376f883a049· 0 downloads · built by run #532 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.19_arm64.deb 1.9 MiB · blake3
3a1e864933a1· 0 downloads · built by run #532 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.19_riscv64.deb 2.0 MiB · blake3
6884a4cfdd6a· 0 downloads · built by run #532 dist · signed receipt by earth-1 (short-lived key) · provenance - oxygenhub-server-0.9.19-linux-x86_64.tar.gz 27.3 MiB · blake3
b1b6c9120a50· 1 downloads · built by run #532 dist · signed receipt by earth-1 (short-lived key) · provenance - Source (v0.9.19.tar.zst)
- Source (v0.9.19.zip)
OxygenHub 0.9.16 v0.9.16 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- A release's asset at a fixed address (oxygen#157).
/OWNER/NAME/releases/download/TAG/FILEredirects to the asset, an address known before the release exists (as GitHub's), so a packager's recipe can name it. - Releases carry their source (oxygen#157). Each release now has
oh-VERSION-src.tar.gz: the oxygenhub tree with its subrepos inside, so oh builds from it alone, reproducible and listed in SHA256SUMS, for packagers (haikuports' oh recipe). - A phone's runner follows the app's releases (oxygenflow#84). A runner on Android is part of the OxygenHub app, so the hub never offers it a runner build: with updates on, it is told it follows the app's releases (update the app to update it), and Admin › Runners › Updates says so.
Assets
- SHA256SUMS 1.0 KiB · blake3
830531184a83· 4 downloads · built by run #526 dist · signed receipt by plex-1 (short-lived key) · provenance - SHA256SUMS-haiku 96 B · blake3
1c249f3d9f30· 2 downloads - oh-0.9.16-haiku-x86_64.tar.gz 16.5 MiB · blake3
9542ddda48b9· 1 downloads - oh-0.9.16-linux-arm64.tar.gz 2.6 MiB · blake3
4aac87e557be· 1 downloads · built by run #526 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.16-linux-riscv64.tar.gz 2.7 MiB · blake3
8d181edfe6a8· 1 downloads · built by run #526 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.16-linux-x86_64.tar.gz 2.8 MiB · blake3
f1e16df20ede· 1 downloads · built by run #526 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.16-macos-arm64.tar.gz 2.4 MiB · blake3
014306b64b42· 1 downloads · built by run #526 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.16-macos-x86_64.tar.gz 2.6 MiB · blake3
cfe2fcfa38fa· 0 downloads · built by run #526 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.16-src.tar.gz 5.6 MiB · blake3
5930c0832dcc· 4 downloads · built by run #526 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.16-windows-x86_64.zip 13.4 MiB · blake3
9c871211fbe3· 1 downloads · built by run #526 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.16_amd64.deb 2.1 MiB · blake3
5025bf2a382e· 0 downloads · built by run #526 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.16_arm64.deb 1.9 MiB · blake3
d71d5b823860· 0 downloads · built by run #526 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.16_riscv64.deb 2.0 MiB · blake3
f0ab6809dfe3· 0 downloads · built by run #526 dist · signed receipt by plex-1 (short-lived key) · provenance - oxygenhub-server-0.9.16-linux-x86_64.tar.gz 27.1 MiB · blake3
14f75e3a0d7b· 1 downloads · built by run #526 dist · signed receipt by plex-1 (short-lived key) · provenance - Source (v0.9.16.tar.zst)
- Source (v0.9.16.zip)
OxygenHub 0.9.15 v0.9.15 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- Run a pipeline's WASM jobs in your browser (oxygenflow#80, first part). Flow › run in this tab (
/OWNER/NAME/flow/tab) lists the jobs of a bookmark's pipeline whose sandbox isruntime "wasm"and runs them in this tab, as a runner's WASM tier does: a worker fetches the bookmark's files as a zip once, unpacks them in memory and runs each job's modules with a WASI preview 1 shim, the files at/srcand as the current directory, the job's arguments and environment, its output shown as it comes, its exit code and time; Run all, Run and Stop per job. Nothing is claimed or reported: it shows the tier in a browser before a tab can take jobs as a runner. - Runner builds through the swarm (oxygenflow#84). The first time the hub offers a runner build, it cuts the release asset into its image chunks, as an image named by the build's BLAKE3, so a runner in a swarm (OxygenFlow 0.5.2) fetches it from its site's peers and the hub together and the hub serves it about once per site; Admin › Runners › Images lists it as "runner build flow VERSION".
Assets
- SHA256SUMS 944 B · blake3
1a10c4af6fd7· 2 downloads · built by run #522 dist · signed receipt by plex-1 (short-lived key) · provenance - SHA256SUMS-haiku 96 B · blake3
bf2acd91c31f· 4 downloads - oh-0.9.15-haiku-x86_64.tar.gz 16.5 MiB · blake3
2673d08aaa4a· 0 downloads - oh-0.9.15-linux-arm64.tar.gz 2.6 MiB · blake3
3f50a93b07dd· 1 downloads · built by run #522 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.15-linux-riscv64.tar.gz 2.7 MiB · blake3
4382a8d2b7b5· 1 downloads · built by run #522 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.15-linux-x86_64.tar.gz 2.8 MiB · blake3
afa8a726aaf0· 1 downloads · built by run #522 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.15-macos-arm64.tar.gz 2.4 MiB · blake3
042ac95d5a4b· 0 downloads · built by run #522 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.15-macos-x86_64.tar.gz 2.6 MiB · blake3
3bee1b52fedd· 1 downloads · built by run #522 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.15-windows-x86_64.zip 13.4 MiB · blake3
e2d6e77a85c3· 1 downloads · built by run #522 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.15_amd64.deb 2.1 MiB · blake3
531ff9a52aea· 0 downloads · built by run #522 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.15_arm64.deb 1.9 MiB · blake3
4e039fa949f8· 0 downloads · built by run #522 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.15_riscv64.deb 2.0 MiB · blake3
2fa175f03c55· 0 downloads · built by run #522 dist · signed receipt by plex-1 (short-lived key) · provenance - oxygenhub-server-0.9.15-linux-x86_64.tar.gz 24.9 MiB · blake3
0913c8d8232e· 1 downloads · built by run #522 dist · signed receipt by plex-1 (short-lived key) · provenance - Source (v0.9.15.tar.zst)
- Source (v0.9.15.zip)
OxygenHub 0.9.11 v0.9.11 · ✔ signed by Andy McCall · andymccall ·
Trust and audit-
Your sky over the API (oxygenhub-android#23).
GET /api/v1/user/skygives what the dashboard's backdrop draws: the caller's repositories and their pushes, proposal and issue events, releases and Flow runs of the last 30 days, so the Android app draws the same sky from the same data. -
Another repository's pass is taken only on its signed receipt (issue #296). A pass from upstream or from any other repository on the hub now stands only if its runner's signed receipt was kept (the hub checks it against the runner's bound key when the job finishes) and, read again from that repository's store, still verifies and its key is not revoked; otherwise the job runs here. Only a pass that ran in the repository offering it is taken, so the receipt is where it is checked.
-
A pass on the same state is reused from any repository on the hub (issue #296). After the repository's own runs and the line it was forked from, a push's job with no pass of its own on that state reuses one from any other repository holding the same state, public or with the same owner, newest first: a state is its changes, so whoever proved it, the proof holds. The run page and the check say whose pass it was.
Assets
- SHA256SUMS 944 B · blake3
f70fc26ddf8c· 6 downloads · built by run #516 dist · signed receipt by plex-1 (short-lived key) · provenance - SHA256SUMS-haiku 96 B · blake3
c5942d4f75c9· 4 downloads - oh-0.9.11-haiku-x86_64.tar.gz 16.4 MiB · blake3
4657d19b5716· 1 downloads - oh-0.9.11-linux-arm64.tar.gz 2.6 MiB · blake3
501f290d6df3· 1 downloads · built by run #516 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.11-linux-riscv64.tar.gz 2.6 MiB · blake3
41522dd60875· 1 downloads · built by run #516 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.11-linux-x86_64.tar.gz 2.8 MiB · blake3
0b25590f9857· 1 downloads · built by run #516 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.11-macos-arm64.tar.gz 2.4 MiB · blake3
fe16591b71b3· 2 downloads · built by run #516 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.11-macos-x86_64.tar.gz 2.5 MiB · blake3
d11e1c166a4e· 1 downloads · built by run #516 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.11-windows-x86_64.zip 13.3 MiB · blake3
223d51577433· 1 downloads · built by run #516 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.11_amd64.deb 2.1 MiB · blake3
140e3e95ecd4· 0 downloads · built by run #516 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.11_arm64.deb 1.8 MiB · blake3
a940da6161a0· 1 downloads · built by run #516 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.11_riscv64.deb 1.9 MiB · blake3
e8b251731e70· 0 downloads · built by run #516 dist · signed receipt by plex-1 (short-lived key) · provenance - oxygenhub-server-0.9.11-linux-x86_64.tar.gz 27.0 MiB · blake3
749f167187a0· 1 downloads · built by run #516 dist · signed receipt by plex-1 (short-lived key) · provenance - Source (v0.9.11.tar.zst)
- Source (v0.9.11.zip)
OxygenHub 0.9.9 v0.9.9 · ✔ signed by Andy McCall · andymccall ·
Trust and auditohworks in PowerShell (issue #319). PowerShell has a built-in aliasoh(forOut-Host), sooh --versionran that and failed. The Windows zip now carriesohub.exe, the same program under a name nothing hides, andinstall.ps1, which installs both for the current user and puts them onPATH. Where PowerShell runs scripts it also removes the alias in the profile; under Windows' default policy, where a profile cannot run and would only print an error, it says to useohuband never changes the policy. Tried on the Windows VM under both policies.- Admin › Runners › Images tells a peer-held image from the hub's own (issue #342). An image only runners hold shows as "manifest" (sent by which runner) rather than "hub", and one no runner holds now is marked nowhere, as an image the hub lacks is.
- A queued job's reason names CPUs too. A runner with a free slot but not the room for a job was said to lack "the memory or disk"; earth-1's limit is often its CPUs (5, with a 4-vCPU job running), so it says "the memory, CPUs or disk".
- The Content Security Policy is enforced (issue #227). The pages carry no inline scripts or handlers, and a week of reports showed it would block only Cloudflare's Web Analytics beacon, which the policy now allows (
static.cloudflareinsights.com, reports tocloudflareinsights.com). Violations are still reported and logged. - Where a job's time went (oxygenflow#35). A runner's finish report carries its phases (image, prepare, run, finish); the run page shows them under each job, and
/metricshasoxyhub_flow_job_phase_secondsby phase. Migration 0099 (flow_jobs.phases).
Assets
- SHA256SUMS 934 B · blake3
0073f4a76807· 5 downloads · built by run #504 dist · signed receipt by earth-1 (short-lived key) · provenance - SHA256SUMS-haiku 95 B · blake3
83c999290cab· 5 downloads - oh-0.9.9-haiku-x86_64.tar.gz 16.4 MiB · blake3
d4d2d4cd812a· 2 downloads - oh-0.9.9-linux-arm64.tar.gz 2.6 MiB · blake3
771cc5374950· 1 downloads · built by run #504 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.9-linux-riscv64.tar.gz 2.6 MiB · blake3
257224ef3c03· 1 downloads · built by run #504 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.9-linux-x86_64.tar.gz 2.8 MiB · blake3
31b62b3cdc1f· 1 downloads · built by run #504 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.9-macos-arm64.tar.gz 2.4 MiB · blake3
db07d1ebaabf· 1 downloads · built by run #504 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.9-macos-x86_64.tar.gz 2.5 MiB · blake3
1bf4eabb52b9· 1 downloads · built by run #504 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.9-windows-x86_64.zip 13.3 MiB · blake3
d3468ffb186e· 1 downloads · built by run #504 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.9_amd64.deb 2.1 MiB · blake3
ff83faf68862· 0 downloads · built by run #504 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.9_arm64.deb 1.8 MiB · blake3
da0eabb0c9e5· 2 downloads · built by run #504 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.9_riscv64.deb 1.9 MiB · blake3
df4b8aad6886· 0 downloads · built by run #504 dist · signed receipt by earth-1 (short-lived key) · provenance - oxygenhub-server-0.9.9-linux-x86_64.tar.gz 26.7 MiB · blake3
e6e5c2e7ddd0· 1 downloads · built by run #504 dist · signed receipt by earth-1 (short-lived key) · provenance - Source (v0.9.9.tar.zst)
- Source (v0.9.9.zip)
OxygenHub 0.9.8 v0.9.8 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- Images only runners hold (issue #342, oxygenflow#94). A runner that serves its peers sends the manifest of each image it holds that the hub lacks (
POST /flow/images/held,PUT /flow/images/{hash}/held, runner tokens only); the hub keeps it as held by runners and offers the image's jobs to runners of the same swarm site, which fetch it from their peers (the announce says the hub is no seed for it). A pushed image replaces such a record. On 2026-10-25 a re-pinned image that was never pushed kept every Rust job on one runner for a day. Migration 0098 (jet_images.source,holder).
Assets
- SHA256SUMS 934 B · blake3
e4a1df69d645· 2 downloads · built by run #500 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.8-linux-arm64.tar.gz 2.6 MiB · blake3
fcc1a300f3a7· 1 downloads · built by run #500 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.8-linux-riscv64.tar.gz 2.6 MiB · blake3
1f3b65095820· 1 downloads · built by run #500 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.8-linux-x86_64.tar.gz 2.8 MiB · blake3
894cb58a21ac· 2 downloads · built by run #500 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.8-macos-arm64.tar.gz 2.4 MiB · blake3
08d0b526d958· 0 downloads · built by run #500 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.8-macos-x86_64.tar.gz 2.5 MiB · blake3
68992aff96e4· 0 downloads · built by run #500 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.8-windows-x86_64.zip 6.7 MiB · blake3
a2b380225e53· 1 downloads · built by run #500 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.8_amd64.deb 2.1 MiB · blake3
b965d14acbe9· 0 downloads · built by run #500 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.8_arm64.deb 1.8 MiB · blake3
71d49f54a22e· 0 downloads · built by run #500 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.8_riscv64.deb 1.9 MiB · blake3
92bd4c31125f· 0 downloads · built by run #500 dist · signed receipt by earth-1 (short-lived key) · provenance - oxygenhub-server-0.9.8-linux-x86_64.tar.gz 26.7 MiB · blake3
214dd5c30125· 1 downloads · built by run #500 dist · signed receipt by earth-1 (short-lived key) · provenance - Source (v0.9.8.tar.zst)
- Source (v0.9.8.zip)
OxygenHub 0.9.7 v0.9.7 · ✔ signed by Andy McCall · andymccall ·
Trust and audit-
A push to a landed proposal's bookmark says so (issue #329). The changes reach no target until a new proposal takes them, and the push was silent: now it is answered
its proposal #N has landed in TARGET, and these changes are not on TARGET: open a new proposal with oh proposal create --from BOOKMARK(oxygen'sBackend::push_notes). The landed proposal's page lists them as changes since it landed, with a link to a new proposal; it no longer shows them as its own, and no longer offers to delete a bookmark that holds them. -
Creating a repository no longer stalls the hub on a busy disk (issue #335). A bare init makes about sixteen fsyncs, and on Earth's shared disk each waited behind every other write: one create took 26 s and held an async worker the whole time. Creates from the API, the web and drops now run on a blocking thread, as forks and bucket creates already did.
-
A Diffusion bump pins the upstream's default bookmark (issue #332). A bump kept the bookmark name of the pin it replaced, so a subrepo first pinned at an upstream proposal's bookmark still named it after the proposal landed and Diffusion moved the pin to the default bookmark's state; a checkout then counted the subrepo as on another bookmark. A bump now names the upstream's default bookmark, unless it keeps pinned changes that bookmark lacks.
-
Listing landed proposals is quick, and pages (issue #331).
oh proposal list --state landedon a repository with a few hundred proposals timed out: the API worked out every proposal's projected state again, landed and closed ones too. Those now come from what was recorded, and the list takeslimit(oh proposal list --limit N, 30 by default), newest first. -
A big image's push no longer fails at the last step (issue #341). The hub reads a whole image before it accepts the manifest, which on a busy disk outlasted
flow rootfs push's wait. The image could then be kept but never offered, and a retry read it all again. The hub now finishes and records the image even if the sender gives up, and a manifest it already keeps is recorded without reading the image again. -
The API refuses a field an edit does not take (issue #330).
PATCHon an issue, proposal, project, milestone, release or drop answered 200 to a field it does not know and changed nothing ({"ready": true}on a draft proposal, say), which looked like success. It now answers 422 naming the field and the ones it takes. -
Mail reads
[OxygenHub], in a wider message (issue #334). A notification's subject was tagged with the site's name ([Oxygenhub on Earth]); mail now goes by the From address's display name (OxygenHub <noreply@…>) in the subject and the footer, falling back to the site's name, so the site keeps its own name (which its apt repository is labelled with). The message card is 720px wide rather than 560. -
An agent follows its owner's newest identity (oxygen#82). A keyless certificate's answer now carries
author_chain: the grant owner's newest linked identity and its predecessors back to the grant's key, so an agent home withauthor.forauthors as the owner's current identity, not one several rotations old. -
The profile page's actions are one tidy group (issue #328). Edit profile, Projects and Drops sat on two rows, touching each other and the panel below; they are now one evenly spaced block, Edit profile across the top and the two pages side by side.
-
Copy buttons are a glyph joined to their field (issue #338). Every copy button is now a clipboard glyph on the end of the box it copies, with the tooltip "Copy to clipboard"; pressed, it turns to a tick saying "Copied!" for two seconds. A drop's Embed and Clone boxes line up with each other.
-
Changelog entries no longer block a landing (oxygen#145). Two proposals that each add a line at the same place in a file marked
merge=unionin.oxyattributes(CHANGELOG.md merge=union) used to leave the second unlandable where conflicts are refused. When a proposal's only conflicts are such adjacent insertions, landing it now adds the resolution, both sides kept, the earlier change's first, authored by whoever lands it and signed by the hub as their delegate. Any other conflict blocks as before.
Assets
- SHA256SUMS 934 B · blake3
ac9f607213d3· 1 downloads · built by run #498 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.7-linux-arm64.tar.gz 2.6 MiB · blake3
567542df621f· 1 downloads · built by run #498 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.7-linux-riscv64.tar.gz 2.6 MiB · blake3
7bd6ce16c46b· 1 downloads · built by run #498 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.7-linux-x86_64.tar.gz 2.8 MiB · blake3
ef5257c154c2· 1 downloads · built by run #498 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.7-macos-arm64.tar.gz 2.4 MiB · blake3
97da291e622e· 1 downloads · built by run #498 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.7-macos-x86_64.tar.gz 2.5 MiB · blake3
7865ae9a684c· 1 downloads · built by run #498 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.9.7-windows-x86_64.zip 6.7 MiB · blake3
5d441f9746ac· 1 downloads · built by run #498 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.7_amd64.deb 2.1 MiB · blake3
d451d457a20a· 0 downloads · built by run #498 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.7_arm64.deb 1.8 MiB · blake3
33eb3be0e02c· 0 downloads · built by run #498 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.9.7_riscv64.deb 1.9 MiB · blake3
5c82e9ea8511· 0 downloads · built by run #498 dist · signed receipt by plex-1 (short-lived key) · provenance - oxygenhub-server-0.9.7-linux-x86_64.tar.gz 26.6 MiB · blake3
98b324a894d3· 1 downloads · built by run #498 dist · signed receipt by plex-1 (short-lived key) · provenance - Source (v0.9.7.tar.zst)
- Source (v0.9.7.zip)
OxygenHub 0.9.6 v0.9.6 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- A highlighting test no longer fails a busy machine's gate (issue #327): it timed a debug build against a release build's 500 ms; debug builds now have 3 s, still far below what highlighting the line would take.
oh runner-updatesand its API (issue #322): site administrators read every level's update settings, the test groups, each runner's policy and offer, and the held builds (GET /api/v1/admin/runner-updates);oh runner-updates set group:canary --updates on --window 02-05changes one level, keeping what is not given (PUT …/settings, 422 saying what is wrong);oh runner-updates lift 0.4.0offers a held build again (POST …/holds/{version}/lift).- A build that rolls back on one runner is held for the rest (issue #326): when a runner reports it rolled back from flow X (it did not reach the hub after updating, or would not start), the hub offers X to no other runner, saying why, until an administrator lifts the hold on Admin › Runners › Updates, which lists each held build with the runner and the reason. One failed canary halts the rollout. Migration 0097.
- Finished work moves to Done (issue #325): a card whose issue closes (on its page, through the API, or by a change's
closes #N), or whose proposal lands or closes, moves to its board's column for finished work. A new board's Done is that column, and so is each existing board's column named Done; a column's menu turns it on or off (one column of a board). Archived cards stay archived. - A WASM job's placement names no image (issue #323): a job on the WASM tier was placed saying its runner "fetches the image from the hub"; it has none, so the line now starts with what the runner is doing (andymccall/windows-runner-demo run issue #1).
- Runner updates: policy, test groups and the offer (issue #322): Admin › Runners › Updates sets where runner builds come from (a repository whose releases carry
flow-linux-ARCHfiles, andflow-windows-x86_64.exefor Windows runners) and who takes them. Updates are off unless chosen; the site, an owner, a test group and a runner may each set updates on or off, a channel (stable,canaryor a version), a window of hours (UTC) and dry run, and the nearest setting wins, each setting on its own. A test group is chosen runners or a percentage of the site's (or an owner's) runners, by a stable hash of each runner's id, so a share is the same machines every rollout and 10% sits inside 50%.GET /api/v1/flow/runner/updatetells a runner its policy, where each setting came from, and the build to install (its BLAKE3, to check the download against);POSTtakes what the runner did, shown on the page and in the audit log. An organisation's owners set the same for their own runners in the organisation's Settings › Runner updates: the organisation's setting, test groups of its runners (chosen, or a percentage), and each runner's own; nothing of the site's or another owner's. Pins OxygenFlow's main.
Assets
- SHA256SUMS 934 B · blake3
8987cfc04ab1· 5 downloads · built by run #477 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.6-linux-arm64.tar.gz 2.6 MiB · blake3
9f588d425722· 1 downloads · built by run #477 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.6-linux-riscv64.tar.gz 2.6 MiB · blake3
832d1a1bf74e· 1 downloads · built by run #477 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.6-linux-x86_64.tar.gz 2.8 MiB · blake3
e0ffc89dda1b· 1 downloads · built by run #477 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.6-macos-arm64.tar.gz 2.4 MiB · blake3
c0130cde5ef5· 2 downloads · built by run #477 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.6-macos-x86_64.tar.gz 2.5 MiB · blake3
05b28d49ab9d· 1 downloads · built by run #477 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.6-windows-x86_64.zip 6.6 MiB · blake3
e8599b73efec· 1 downloads · built by run #477 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.6_amd64.deb 2.1 MiB · blake3
789e7dfeac03· 1 downloads · built by run #477 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.6_arm64.deb 1.8 MiB · blake3
2562f5c8329c· 1 downloads · built by run #477 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.6_riscv64.deb 1.9 MiB · blake3
02edd56200e1· 0 downloads · built by run #477 dist · signed receipt by earth-1 (short-lived key) · provenance - oxygenhub-server-0.9.6-linux-x86_64.tar.gz 26.6 MiB · blake3
d302075e1ddb· 1 downloads · built by run #477 dist · signed receipt by earth-1 (short-lived key) · provenance - Source (v0.9.6.tar.zst)
- Source (v0.9.6.zip)
OxygenHub 0.9.5 v0.9.5 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- No failed run every minute for a pipeline that does not parse (issue #321): the scheduler asked each repository's pipeline every minute and, for one it could not read (a mistake, or no jobs yet), recorded a failed
schedulerun each time: oxygenhub-android had about 1,500. A scheduled tick now starts nothing for such a pipeline; its push's run still says what is wrong. - A change's diff through the API (issue #320):
GET /api/v1/repos/{owner}/{name}/changes/{hash}gives each file's diff lines too (lines:kindcontext, add, del or gap,oldandnewline numbers,text), with three lines of context, up to 2000 lines a file (truncatedsays when it stops short), so the Android app can show a diff itself. - JaCoCo coverage is read (issue #308): Gradle's
jacocoTestReportand Kover write JaCoCo XML, which acoverageartifact (orPOST /coverage) may now be, beside LCOV and Cobertura: lines hit when an instruction ran, branches, methods. Its paths are relative to a source root (io/oxygenhub/…/X.kt), so a report's path not in the state is matched by its ending to the one file it can be.
Assets
- SHA256SUMS 934 B · blake3
5633c78a24eb· 3 downloads · built by run #468 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.5-linux-arm64.tar.gz 2.5 MiB · blake3
360b9d49a2e0· 2 downloads · built by run #468 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.5-linux-riscv64.tar.gz 2.6 MiB · blake3
13535a600d79· 0 downloads · built by run #468 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.5-linux-x86_64.tar.gz 2.7 MiB · blake3
c155d7f1006a· 1 downloads · built by run #468 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.5-macos-arm64.tar.gz 2.3 MiB · blake3
eec1f088735c· 0 downloads · built by run #468 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.5-macos-x86_64.tar.gz 2.5 MiB · blake3
3466bac9ed7a· 2 downloads · built by run #468 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.5-windows-x86_64.zip 6.6 MiB · blake3
20d653051bdc· 1 downloads · built by run #468 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.5_amd64.deb 2.1 MiB · blake3
ec91db4b4269· 0 downloads · built by run #468 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.5_arm64.deb 1.8 MiB · blake3
7c5eb3249efa· 1 downloads · built by run #468 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.5_riscv64.deb 1.9 MiB · blake3
5e322ec81013· 1 downloads · built by run #468 dist · signed receipt by earth-1 (short-lived key) · provenance - oxygenhub-server-0.9.5-linux-x86_64.tar.gz 26.4 MiB · blake3
27daac1c62b9· 1 downloads · built by run #468 dist · signed receipt by earth-1 (short-lived key) · provenance - Source (v0.9.5.tar.zst)
- Source (v0.9.5.zip)
OxygenHub 0.9.4 v0.9.4 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- Checkpoints, so a handed-back job resumes (oxygenflow#77):
POST /api/v1/flow/jobs/{id}/checkpointkeeps the directories a job declares withcheckpoint "/src/…"as its runner hands it back; the next attempt's claim names the blob (checkpoint) and its runner fetches it (GET) and restores it before running. A checkpoint is kept beside the job's artifacts but is none of them (no receipt names it). Pins OxygenFlow's main. - Boards keep the last fortnight of finished work (issue #293): by default every column archives its finished cards (closed issues, closed or landed proposals) 14 days after they reached it, hourly, so a Done column stops growing however long a project runs; open work and notes stay. A column can instead archive every card after N days, or never ("Archive automatically" in its menu). Archived cards stay on the board's archive view, searchable and restorable. On the next hourly pass, boards with years of Done cards (Super Mario Land 2's 327) shrink to their last two weeks.
- An issue's references: no line through the chips, each change once (issue #318): an opened "referenced by N changes" box drew the proposal timeline's vertical rule through its first column (the events shared its class); and a change was recorded again for every bookmark it was pushed on, and for every mention in its message, so one change filled several chips. Now one reference per change per issue or proposal, and the page shows each change once, including those recorded before.
- Claims say how long a job is expected to take (oxygenflow#76):
expected_ms, the median of the job's last five passing runs in the repository (reused passes left out), so a runner leaving with notice finishes a job that fits it and hands back the rest. Pins OxygenFlow's main. - The hub's CI writes a test report and coverage (issue #307):
testruns under cargo-nextest and keeps a JUnit report (whether or not the tests pass); a newcoveragejob runs the tests instrumented beside it, with its own cached target, and keeps LCOV coverage.coverageis not a required check. - The new proposal form lines up (issue #315): as wide as the changes above it; Draft with Claude a secondary button under the editor (it fills the fields, it does not open the proposal); the draft checkbox and Open proposal on one row.
- Draft with Claude proposes a title too (issue #316): for a proposal not yet opened, the assistant begins its draft with a title in the style of the changes' own titles; it fills the title field unless you wrote one (the page's own suggestion does not count), and stays out of the description.
- A waiting WASM job no longer says runners lack its image (issue #317): a job with no image (the WASM tier) waited saying every runner "does not hold image" with an empty name; the explanation now skips the image check, as the claim always did.
- A draft proposal can be made ready from
ohand the API (issue #313):oh proposal ready N(and--undoto turn it back into a draft);PATCH …/proposals/{n}takesstate: "open"for a draft andstate: "draft"for an open one, as the page's buttons do, anddraft: false|truein the words a proposal is created with.{"draft": false}used to answer 200 and change nothing.
Assets
- SHA256SUMS 934 B · blake3
5ab972a51769· 1 downloads · built by run #464 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.4-linux-arm64.tar.gz 2.5 MiB · blake3
a7ace67e68e8· 1 downloads · built by run #464 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.4-linux-riscv64.tar.gz 2.6 MiB · blake3
3f3eb98782b4· 0 downloads · built by run #464 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.4-linux-x86_64.tar.gz 2.7 MiB · blake3
7bf23a1e26ba· 2 downloads · built by run #464 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.4-macos-arm64.tar.gz 2.3 MiB · blake3
1dadd1138f9e· 1 downloads · built by run #464 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.4-macos-x86_64.tar.gz 2.5 MiB · blake3
dbba851b116d· 0 downloads · built by run #464 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.4-windows-x86_64.zip 6.6 MiB · blake3
9546935a5ade· 1 downloads · built by run #464 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.4_amd64.deb 2.1 MiB · blake3
0c6158f139af· 1 downloads · built by run #464 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.4_arm64.deb 1.8 MiB · blake3
de478ce8549e· 1 downloads · built by run #464 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.4_riscv64.deb 1.9 MiB · blake3
6aaf3151c794· 0 downloads · built by run #464 dist · signed receipt by earth-1 (short-lived key) · provenance - oxygenhub-server-0.9.4-linux-x86_64.tar.gz 26.4 MiB · blake3
9d8c1ddcca97· 0 downloads · built by run #464 dist · signed receipt by earth-1 (short-lived key) · provenance - Source (v0.9.4.tar.zst)
- Source (v0.9.4.zip)
OxygenHub 0.9.3 v0.9.3 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- Runners hand jobs back, and the queue takes them first (issue #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 addsflow_jobs.handed_back_msandhandbacks.
Assets
- SHA256SUMS 934 B · blake3
b6f3c9fda59c· 4 downloads · built by run #451 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.3-linux-arm64.tar.gz 2.5 MiB · blake3
617044733ef5· 1 downloads · built by run #451 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.3-linux-riscv64.tar.gz 2.6 MiB · blake3
6d01dded0127· 1 downloads · built by run #451 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.3-linux-x86_64.tar.gz 2.7 MiB · blake3
6dd6beaf34b4· 1 downloads · built by run #451 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.3-macos-arm64.tar.gz 2.3 MiB · blake3
e85cd7b8f003· 1 downloads · built by run #451 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.3-macos-x86_64.tar.gz 2.5 MiB · blake3
4332436c16db· 1 downloads · built by run #451 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.3-windows-x86_64.zip 6.6 MiB · blake3
f76f133166cf· 1 downloads · built by run #451 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.3_amd64.deb 2.1 MiB · blake3
bd5773d5e2dd· 0 downloads · built by run #451 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.3_arm64.deb 1.8 MiB · blake3
47880ffe6bb0· 0 downloads · built by run #451 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.3_riscv64.deb 1.9 MiB · blake3
6a3160fcffb2· 0 downloads · built by run #451 dist · signed receipt by earth-1 (short-lived key) · provenance - oxygenhub-server-0.9.3-linux-x86_64.tar.gz 26.6 MiB · blake3
ada28c106f10· 1 downloads · built by run #451 dist · signed receipt by earth-1 (short-lived key) · provenance - Source (v0.9.3.tar.zst)
- Source (v0.9.3.zip)
OxygenHub 0.9.2 v0.9.2 · ✔ signed by Andy McCall · andymccall ·
Trust and auditGET /api/v1/user/proposals?landable=true(issue #311): also lists the open proposals the caller could land now (in repositories they can write to, with no blockers, as each proposal'slandablesays), for the Android app to say when there is something to land. Only when asked for, since it works out each one's projected state.- One logo, with its arms (issue #306): the Oxygen mark's two arms were never drawn: their gradient was in bounding-box units, and a horizontal line's box has no height, so SVG paints nothing. The gradient is now in user space everywhere (header, footer, favicon,
mark.svg; the VS Code extensions and the Android app too), and while a page loads the arms slide back and forth in turn beside the turning rings (still with reduced motion). - Admin › Runners: the Serves column lines up (issue #309): the scope sits above its input, so the inputs line up whatever the scope's length.
- A job's RE-RUN THIS JOB button no longer touches its log (issue #310).
Assets
- SHA256SUMS 934 B · blake3
1f48a2740321· 2 downloads · built by run #447 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.2-linux-arm64.tar.gz 2.5 MiB · blake3
72f1f73119e2· 1 downloads · built by run #447 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.2-linux-riscv64.tar.gz 2.6 MiB · blake3
7f79f7239f2d· 2 downloads · built by run #447 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.2-linux-x86_64.tar.gz 2.7 MiB · blake3
4251fd9fe21c· 2 downloads · built by run #447 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.2-macos-arm64.tar.gz 2.3 MiB · blake3
c4658893e4f8· 2 downloads · built by run #447 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.2-macos-x86_64.tar.gz 2.5 MiB · blake3
ce4582fc5c94· 1 downloads · built by run #447 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.2-windows-x86_64.zip 6.6 MiB · blake3
1a7162764570· 1 downloads · built by run #447 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.2_amd64.deb 2.1 MiB · blake3
96adaf840d37· 1 downloads · built by run #447 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.2_arm64.deb 1.8 MiB · blake3
20aa1f1b19bd· 1 downloads · built by run #447 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.2_riscv64.deb 1.9 MiB · blake3
c8f961c92cbf· 1 downloads · built by run #447 dist · signed receipt by earth-1 (short-lived key) · provenance - oxygenhub-server-0.9.2-linux-x86_64.tar.gz 26.6 MiB · blake3
408ce1f5e955· 1 downloads · built by run #447 dist · signed receipt by earth-1 (short-lived key) · provenance - Source (v0.9.2.tar.zst)
- Source (v0.9.2.zip)
OxygenHub 0.9.1 v0.9.1 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- Pipelines may use the WASM tier: OxygenFlow's main pinned (oxygenflow#75), so
runtime "wasm"sandboxes are accepted and their jobs placed on runners that offer the tier (every runner from flow 0.3.1-3; an Android phone from the app). POST /api/v1/user/runner-token(repo:write): a one-time registration token for a runner that serves the caller's own repositories and no one else's, as the Android app offers the phone as a runner (oxygenhub-android#8); it lasts a day, like the settings pages' tokens, and is audited.
Assets
- SHA256SUMS 934 B · blake3
b74801cf5be3· 2 downloads · built by run #444 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.1-linux-arm64.tar.gz 2.5 MiB · blake3
bf7b59874a1e· 1 downloads · built by run #444 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.1-linux-riscv64.tar.gz 2.6 MiB · blake3
026a3cd3f091· 2 downloads · built by run #444 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.1-linux-x86_64.tar.gz 2.7 MiB · blake3
d3b069511f42· 2 downloads · built by run #444 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.1-macos-arm64.tar.gz 2.3 MiB · blake3
7438a13fb26f· 1 downloads · built by run #444 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.1-macos-x86_64.tar.gz 2.5 MiB · blake3
23f6f0bfb432· 2 downloads · built by run #444 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.1-windows-x86_64.zip 6.6 MiB · blake3
fbb7efeaa256· 1 downloads · built by run #444 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.1_amd64.deb 2.1 MiB · blake3
2eafe2443be7· 1 downloads · built by run #444 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.1_arm64.deb 1.8 MiB · blake3
aaed7f88d379· 0 downloads · built by run #444 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.1_riscv64.deb 1.9 MiB · blake3
cff0155e55e6· 0 downloads · built by run #444 dist · signed receipt by earth-1 (short-lived key) · provenance - oxygenhub-server-0.9.1-linux-x86_64.tar.gz 26.6 MiB · blake3
23430c541dbc· 2 downloads · built by run #444 dist · signed receipt by earth-1 (short-lived key) · provenance - Source (v0.9.1.tar.zst)
- Source (v0.9.1.zip)
OxygenHub 0.9.0 v0.9.0 · ✔ signed by Andy McCall · andymccall ·
Trust and auditGET /api/v1/user/proposals(repo:read): the proposals the web dashboard lists, for apps:review(open ones by others in repositories the caller belongs to, not yet reviewed by them) andauthored(their own open and drafts, in repositories they can still see), each with its repository, state, conflicts and web address. The Android app's dashboard shows them (oxygenhub-android#18).- Board cards can be archived (issue #293, archive): off the board but kept, on the board's archive view (
?archived=1, with the same filter) and restored to the end of their column. A column archives its cards that reached it more than N days ago at once ("Archive cards here more than 14 days"), or on its own once set to (checked hourly,projects.archiver), so a Done column stops growing. An issue's or proposal's page says its card is archived. The API hasPOST …/cards/archive(issue #289's selection plusolder_days, withdry_run),GET …/cards?archived=trueandPOST …/cards/{id}/restore;oh project card archive N --from Done --older 14d,oh project card restore N CARDandoh project view N --archived. Migration 0093 addsproject_cards.archived_msandmoved_ms(when a card joined its column) andproject_columns.archive_after_days. - Board cards show their labels and assignees, and the board filters by them (issue #293, filters): an issue's or proposal's card shows its labels (each a link to the board filtered by it) and an issue's assignees; the filter takes
label:NAME,assignee:NAMEandstate:STATEwith words, as the issue list does, every term holding. The board reads what its cards show once per repository rather than once per card (a board of 300 cards made 300 queries). The API's cards andoh project viewcarry the labels and assignees too.
Assets
- SHA256SUMS 934 B · blake3
b881d1a6289a· 5 downloads · built by run #441 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.0-linux-arm64.tar.gz 2.5 MiB · blake3
07065da82530· 0 downloads · built by run #441 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.0-linux-riscv64.tar.gz 2.6 MiB · blake3
75fb24b35d8c· 1 downloads · built by run #441 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.0-linux-x86_64.tar.gz 2.7 MiB · blake3
98e252a8c1b0· 2 downloads · built by run #441 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.0-macos-arm64.tar.gz 2.3 MiB · blake3
d4a75821f0e2· 1 downloads · built by run #441 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.0-macos-x86_64.tar.gz 2.5 MiB · blake3
0ae93038f5e0· 0 downloads · built by run #441 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.9.0-windows-x86_64.zip 6.6 MiB · blake3
2ccd4d456bf8· 2 downloads · built by run #441 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.0_amd64.deb 2.1 MiB · blake3
99969efa54cc· 1 downloads · built by run #441 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.0_arm64.deb 1.8 MiB · blake3
9399500cc920· 1 downloads · built by run #441 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.9.0_riscv64.deb 1.9 MiB · blake3
cb67844f4d55· 1 downloads · built by run #441 dist · signed receipt by earth-1 (short-lived key) · provenance - oxygenhub-server-0.9.0-linux-x86_64.tar.gz 26.6 MiB · blake3
863b757db85b· 1 downloads · built by run #441 dist · signed receipt by earth-1 (short-lived key) · provenance - Source (v0.9.0.tar.zst)
- Source (v0.9.0.zip)
OxygenHub 0.8.0 v0.8.0 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- Built on oxy 0.6.0 and OxygenFlow 0.3.1: tag withdrawals, keyless grants that survive a key rotation, working depth-0 clones of big repositories (oxygen#134, issue #135, issue #137; oxygenhub#301).
- The API for apps (issue #302-issue #305), found building the Android app:
GET /api/v1/user/reposlists the caller's own repositories, their organisations' and those they collaborate on (?affiliation=owner,organization,collaborator, paged with?after=owner/name&limit=), andGET /api/v1/user/orgstheir organisations and role (issue #302); a call with no token now answers 401 (sign in) rather than 403 (issue #303);DELETE /api/v1/device/codewithdraws a device sign-in the app gave up on, at once (issue #304); each notification says itsrepository,reason(participating, watching),threadand the kind'slabel(issue #305). - Boards that keep growing stay readable (issue #293, first part): a column of more than 30 cards shows its newest 30 (cards join a column at its end), says how many older ones it leaves out and links to "show all"; a filter above the board finds cards by title or reference, and by state (open, closed, landed, draft), in every column, counting "3 of 312".
- An issue's references come in a box per day (issue #292): an issue many changes refer to listed a line per change and ran on down the page. Two or more on one day are now one box, "referenced by 12 changes on 21 Oct 2026", their changes as wrapping chips, collapsible, the newest day's open.
- Move a board's column at once (issue #289):
oh project card move N --from Doing -c Donemoves every card of a column,--except 317,#320leaves some,--state closed,landedtakes only cards whose issue or proposal is done, and--dry-runlists what would move. One call (POST …/projects/{owner}/{n}/cards/move), all or none, one audit entry: tidying a board of 115 cards took 115 commands. - Expediting a run moves the queue at once (issue #291): a run's jobs kept the place they had ("9 of 9 jobs come before") until the next placement pass and some other change on the page. Expediting now places every queued job again straight away, every run whose jobs' notes changed updates live, and a job an expedited run moved down says so ("2 ready jobs come first (after expedited run andy/demo issue #12)").
- Create and withdraw tags on the website (issue #295, issue #301): a writer creates a tag on the Tags page (or
oh tag create,POST …/tags), signed by the hub as their delegate, under the policy, and its tag jobs run; a maintainer withdraws one there (oroh tag delete,DELETE …/tags/{tag}, oroxy push --delete tags/NAME) with a signed withdrawal, never while a release uses it. The withdrawal is logged, audited and listed on the page with why, and clones drop the tag on their next fetch. Tags never move, and a withdrawn name is not used again. Pins oxygen with tag withdrawal and with keyless grants that survive their owner's key rotation (oxygen#135). - An agent's changes verify in a new repository (oxygen#134): a keyless agent's change in a repository its owner had never pushed to read INVALID ("grant is by an unknown author"). The hub now sends the grant's signer with each certificate, and with oxy's fix the agent keeps it and pushes it beside the certificate, so the repository can check the grant.
- A mistyped address shows the not-found page (issue #294): an address the hub could not read, such as a project or issue number that is not a number, answered with a raw parse error ("Invalid URL: Cannot parse value …"); it now shows the site's not-found page, signed-in header and all.
- Embed a drop (issue #280): a drop's page offers an
<iframe>snippet;/{owner}/drops/{id}/embedshows its files with a link back, framed by any site, with no scripts and no forms. - Comments on drops (issue #280): a drop's page has comments: signed-in readers write them in Markdown, the drop's owner is told, and the author, the owner or a site administrator deletes one.
- Star a drop (issue #280): a signed-in visitor stars a drop, or takes the star back, from its page, which shows how many it has.
Assets
- SHA256SUMS 934 B · blake3
a1eb821cfd5a· 5 downloads · built by run #437 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.8.0-linux-arm64.tar.gz 2.5 MiB · blake3
d6371e403b72· 1 downloads · built by run #437 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.8.0-linux-riscv64.tar.gz 2.6 MiB · blake3
c21d4a27d4b7· 1 downloads · built by run #437 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.8.0-linux-x86_64.tar.gz 2.7 MiB · blake3
89285345b967· 1 downloads · built by run #437 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.8.0-macos-arm64.tar.gz 2.3 MiB · blake3
4e29b6970aeb· 1 downloads · built by run #437 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.8.0-macos-x86_64.tar.gz 2.5 MiB · blake3
f169e9067e19· 2 downloads · built by run #437 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.8.0-windows-x86_64.zip 6.6 MiB · blake3
dd582572e07c· 2 downloads · built by run #437 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.8.0_amd64.deb 2.1 MiB · blake3
2758c6bf2f84· 1 downloads · built by run #437 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.8.0_arm64.deb 1.8 MiB · blake3
ca726aba353c· 0 downloads · built by run #437 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.8.0_riscv64.deb 1.9 MiB · blake3
390b6e97faee· 1 downloads · built by run #437 dist · signed receipt by plex-1 (short-lived key) · provenance - oxygenhub-server-0.8.0-linux-x86_64.tar.gz 26.5 MiB · blake3
9697721a936a· 1 downloads · built by run #437 dist · signed receipt by plex-1 (short-lived key) · provenance - Source (v0.8.0.tar.zst)
- Source (v0.8.0.zip)
OxygenHub and oh 0.7.0 v0.7.0 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- Fork a drop (issue #280): a signed-in visitor's FORK makes a drop of their own from someone else's, with its files, history, title and secrecy; the fork's page says which drop it came from.
- Flow's job times in /metrics (oxygenflow#35, issue #212):
oxyhub_flow_job_queue_seconds(ready to started) andoxyhub_flow_job_run_secondshistograms by runner, finished jobs by runner and result, reused passes, and the work queue's waiting and dead items, all over the last day, for the Grafana dashboard. - A durable work queue (issue #276): work that fails where it starts is queued and retried instead of lost: a notification's email the mail server refused, and a Git mirror export after a push. Any worker process takes due items (on PostgreSQL several at once, each skipping what another holds), retries back off from 30 seconds to an hour, and an item still failing after eight attempts is kept as dead.
- One auto-land and one Diffusion bump at a time across hub processes (issue #275): auto-land's check of a proposal, and Diffusion's bump and landing of a consumer's pin, were serialised only within a process, so two web processes could land one proposal twice. Each now holds a lock named for the proposal or the pin across every process sharing the database (a PostgreSQL advisory lock; on SQLite, one process, as before).
- Several web processes can share a data directory (issue #274): the transparency log took appends from one process only, so only one process per data directory could have the web role. Each append now holds a lock in the log's directory and starts from the log as the files hold it, readers see every process's entries, and every process serves the newest checkpoint, whichever signed it.
- A push reuses a job's pass on the same state (issue #265): when main reaches a state a proposal's run already tested (landing it), a job that passed there with the same spec and sandbox is not run again: it shows passed, reused from that run, with its receipt, and its check says so. Jobs with an approval gate, an environment, secrets or identity tokens, or whose artifacts another job takes, always run. Maintainers can turn reuse off under Settings › Runs.
- Drops are backed up (issue #280): an owner's backups now include its drops, each copied like a repository and restored as a drop (secret or public, with its title and description); Admin › Backups counts them with the repositories they cover.
- A skip marker quoted in code does not skip: a change message that mentions
[skip ci]between backticks or in a fenced block (documenting the marker, say) now starts its run as usual; only a marker in the text itself skips it. - Administration has a sidebar, one page per section (issue #288): the admin area was one long page plus separate pages for runners, images, Diffusion, backups and storage. Every page now has the same sidebar, grouped as Overview, People (accounts, registration and invitations, organisations), Sign-in (providers, security contact), Mail, Flow (runners, images, runner settings, insights, variables, secrets), Integrations (AI assistants, Diffusion), Data (storage and maintenance, backups) and Audit, each at its own address (
/admin/mail,/admin/audit, …)./adminis an overview of the site's numbers. Forms keep their addresses and answer with their own page, and a kept/admin#maillink opens the Mail page. - Help: AI identities (issue #287): a section on letting an AI agent work for you: keyless agents (a grant with
oh agent grant, an agent home withoxy auth grant, ten-minute certified keys, nothing secret on disk), how its work shows (via agent:NAME@YOU), admitting it to a repository's trust policy (oxy policy grant-subject), agents with keys of their own (delegation), agent-marked tokens, approval gates, and revoking. "Letting the hub act for you" now says to export your identity again after delegating and upload that. - Settings › Keys says when each key was last used (issue #286): like tokens, each linked key shows when it was linked, when the hub last accepted a push it signed (a change or a seal; "never" until then) and when the identity expires.
- Settings › Security is balanced (issue #285): every box runs the page's width: two-factor shows whether it is on in its head, with its field and button on one row; connected accounts are rows with Connect or Disconnect; signed-in browsers are rows with Sign out, and Sign out everywhere else sits in that box's head with the session limits under it.
- Push without starting a run (issue #284):
[skip flow],[skip ci]or[ci skip]in the newest pushed change's message starts no jobs; the run list shows a skipped run naming the change and who pushed it, and the next run still tests what it brought. Tags always run. Maintainers choose where it is allowed under Settings › Runs: any bookmark (the default), any but the default bookmark, or never. - A drop's page is centred and its header clearer (issue #283): the page ran the full width with everything against the left edge; it is now centred like other pages, with the title, description and details on the left, EDIT and DELETE together on the right (DELETE only for whoever may delete it), the clone line with a copy button under them, and a Markdown file filling its box.
- A started job no longer says it is waiting (issue #282): a run page opened while a job was queued kept "Waiting for a runner and for build." under it after it started, as the live update changed its status and streamed its log; the note now goes once the job leaves the queue.
- Linking the identity that delegates to the hub (issue #281): the notice on pages that commit for you (New drop, web edits) read as if the hub's key file was what to link under Settings › Keys, which then asked for a signature nobody but the hub can make. It now says to export your own identity again after
oxy identity delegate addand upload that; uploading the hub's own key is refused saying so, uploading an already linked key says to export again after delegating, and a challenge signed by another key than the one uploaded names both keys. The New drop form runs the page's width, and CREATE DROP and CANCEL are the same height in one row.
Assets
- SHA256SUMS 934 B · blake3
5b300f26c019· 9 downloads · built by run #425 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.7.0-linux-arm64.tar.gz 2.5 MiB · blake3
330d4334ab12· 1 downloads · built by run #425 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.7.0-linux-riscv64.tar.gz 2.6 MiB · blake3
4dfe42271b91· 3 downloads · built by run #425 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.7.0-linux-x86_64.tar.gz 2.7 MiB · blake3
d580f4116d82· 4 downloads · built by run #425 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.7.0-macos-arm64.tar.gz 2.3 MiB · blake3
78e9d5172a93· 1 downloads · built by run #425 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.7.0-macos-x86_64.tar.gz 2.5 MiB · blake3
1b0016545bb5· 3 downloads · built by run #425 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.7.0-windows-x86_64.zip 6.5 MiB · blake3
458c3b28072f· 2 downloads · built by run #425 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.7.0_amd64.deb 2.1 MiB · blake3
d6fa423e8b52· 3 downloads · built by run #425 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.7.0_arm64.deb 1.8 MiB · blake3
c68862f2789a· 3 downloads · built by run #425 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.7.0_riscv64.deb 1.9 MiB · blake3
aeabecc37278· 3 downloads · built by run #425 dist · signed receipt by plex-1 (short-lived key) · provenance - oxygenhub-server-0.7.0-linux-x86_64.tar.gz 26.1 MiB · blake3
823ccbdcc8a8· 2 downloads · built by run #425 dist · signed receipt by plex-1 (short-lived key) · provenance - Source (v0.7.0.tar.zst)
- Source (v0.7.0.zip)
OxygenHub and oh 0.6.1 v0.6.1 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- Tidier forms and headers: the New drop page is laid out like every other page (it ran the full width when its notice did), a form's Cancel lines up with its buttons (drops and web edits), and the Drops page's + NEW DROP sits beside its title instead of against the text above.
- Released oxy can clone repositories with an agent's release tag again (oxygen#131): since keyless agents could tag releases with ten-minute certified keys, oxy 0.5.0 and older refused such a tag when cloning or fetching a repository with a trust policy (
key … may not create tags/v0.5.0 under this repository's policy), and with it the whole clone, so andymccall/oxygen could not be cloned by any released client. The hub now leaves those tags out of its answer to a client that does not declarecertified-tagsin the newOxy-Featuresrequest header (oxygen#131), which sees the repository as if the tag did not exist; current clients get it as before. Needs the oxygen pin with oxygen#131. - Drops: snippets of files, each its own small repository (issue #279): a drop is one or more files, as a gist is, kept as an Oxygen repository of its own at
/{owner}/drops/{id}(a 24-hex-digit id), so every edit is a signed change with history and diffs, andoxy cloneandoxy pushtake its address. Make one at/drops/new(title, description, files, public or secret), withPOST /api/v1/drops, or withoh drop create FILE… [--secret] [-d TEXT] [-t TITLE]; the hub commits it as your delegate, as web edits are, so you delegate to the hub's key first. Your Drops page (/drops, under your profile and in the site band) lists and manages them; someone else's shows their public drops only. A secret drop is listed nowhere but readable by anyone with its address. Drops never appear among repositories (profiles, the dashboard, Explore, search,GET /api/v1/repos); Admin › Storage labels them. Only the owner edits a drop; the owner or a site administrator deletes it. Push protection covers drop pushes and what the web and the API commit. API:GET/POST /drops,GET /users/{name}/drops,GET/PATCH/DELETE /drops/{id};oh drop list|view|delete.dropsis now a reserved name, for owners and for repositories. Not yet: forks, stars, comments, embedding, and drops in backups. - Repository settings are one page per setting (issue #278): a repository's Settings was one long page; it is now a sidebar of grouped pages (General, Code, Flow, Integrations, Data, Danger zone) with the page shown beside it, the current one marked, each at its own address (
/{owner}/{name}/settings/push-protection,/settings/runs, …;/settingsis General). Pages a role cannot use are not listed and are not found. Every form keeps its address and now returns to its own page with what happened, so reloading does not send it again. Links elsewhere point at the new pages (the push protection refusal names/settings/push-protection), and a kept/settings#sectionlink opens the page that has it. On a narrow screen the sidebar becomes a compact list above the page. An archived repository's settings open for its admins again, so they can bring it back. - Proposal lists and the proposals API are much faster on large files: listing a repository's proposals rendered every open proposal's full diff and looked up each new line's history separately, recomputing a whole file's lines for every line; lists, the API, auto-land and the checks after a push now skip the rendering, and the proposal page computes each file's lines once.
- Keyless agents can push release tags (andymccall/oxygen#129): A tag signed by a key the hub certified (an agent's or a Flow job's ten-minute key) was refused "unknown key", and then refused by the policy. With oxy's fix the hub accepts it under the policy's subject grant and countersigns when it accepted it, as it does a bookmark move. It logs the tag's acceptance in the transparency log beside the tag, and serves both with the tag in every refs answer, so a client fetching the tag months later checks the certificate at the hub's time. Runners read repositories with their own oxy, so they need rebuilding to check such tags; older ones ignore the new fields.
- Secret scanning finds what is already in history (issue #277): push protection's rules now also run over each repository's existing history in the background (every change reachable from its bookmarks: the lines it inserts and the text files it replaces), so a credential committed before push protection existed, or while it was off, is found too. Every repository's whole history is scanned once after this deploy, then only what each push adds, a budget at a time (
[limits] history_scan_limit, 64 MiB, andhistory_scan_time_ms, 5 s, per repository per pass;0turns it off), at low priority, resuming where it stopped. Maintainers see the findings, with the change, bookmark, file and line, under Settings › Push protection › Found in history, and either allow one (not a secret) or mark it resolved with how it was revoked (audited assecret.resolved); "Scan history now" scans the whole history again. An allowed fingerprint can now be removed (audited assecret.bypass_removed), so pushes adding that value are refused again. Repositories with push protection off are not scanned.
Assets
- SHA256SUMS 934 B · blake3
96c28960d384· 8 downloads · built by run #411 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.6.1-linux-arm64.tar.gz 2.5 MiB · blake3
48a50cd63e80· 3 downloads · built by run #411 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.6.1-linux-riscv64.tar.gz 2.6 MiB · blake3
0baf45d54cb0· 3 downloads · built by run #411 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.6.1-linux-x86_64.tar.gz 2.7 MiB · blake3
9fdd405afe36· 3 downloads · built by run #411 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.6.1-macos-arm64.tar.gz 2.3 MiB · blake3
56870b166b4a· 2 downloads · built by run #411 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.6.1-macos-x86_64.tar.gz 2.5 MiB · blake3
4e48b62a1899· 4 downloads · built by run #411 dist · signed receipt by plex-1 (short-lived key) · provenance - oh-0.6.1-windows-x86_64.zip 6.5 MiB · blake3
8173a3dcd427· 4 downloads · built by run #411 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.6.1_amd64.deb 2.1 MiB · blake3
2988b076d778· 3 downloads · built by run #411 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.6.1_arm64.deb 1.8 MiB · blake3
d0feb7835fe8· 3 downloads · built by run #411 dist · signed receipt by plex-1 (short-lived key) · provenance - oh_0.6.1_riscv64.deb 1.9 MiB · blake3
af81b019b900· 3 downloads · built by run #411 dist · signed receipt by plex-1 (short-lived key) · provenance - oxygenhub-server-0.6.1-linux-x86_64.tar.gz 25.8 MiB · blake3
628ff240b9c5· 3 downloads · built by run #411 dist · signed receipt by plex-1 (short-lived key) · provenance - Source (v0.6.1.tar.zst)
- Source (v0.6.1.zip)
OxygenHub and oh 0.6.0 v0.6.0 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- An event bus between the hub's processes (issue #273): on PostgreSQL, what one process publishes (a push, a check, a run's jobs, a comment, a waiting webhook delivery, a choice in the conflict resolver) reaches every other process over
LISTEN/NOTIFY, so live pages on any web process see a push made through another, and a separate worker delivers a push's webhooks at once instead of on its once-a-minute pass. Nothing to configure; on SQLite the bus stays in process. Events say "look now" and are delivered at most once; a process that loses its listening connection listens again on a new one and logs that events may have been missed. A live page that reconnects with an event id its process never gave (another web process's, or one from before a restart) is now told to reload instead of waiting for newer ids. In the conflict resolver, choices and landings cross processes; who is present stays per process. See docs/roles.md. - Run the hub as web and worker processes (issue #272):
oxygenhub serve --role web,worker(or[server] roles,OXYHUB_SERVER_ROLES; both by default, so one process works as before). A web process serves pages, the API, the wire protocol and the runner API; a worker runs the background tasks and serves only/healthand/metrics. On PostgreSQL each singleton task (Flow's scheduler, reaper and placement pass, webhooks, nightly upkeep, backups, Diffusion's index, the log's checkpointer) runs in one process at a time under an advisory lock, and another takes it over within seconds when that process stops or loses its connection./healthreports the process'srolesand the locks it isleading. Until the transparency log has a cluster-wide writer (issue #274), run one web process per data directory. See docs/roles.md. - Repositories kept in a bucket need far fewer requests (oxygen#116): the hub reads a repository's signatures and index entries from a journal and entry lists instead of a LIST per lookup, and stops asking for the old one-list keys once its nightly gc has folded them. Another writer's new entry is seen within 30 seconds. Every writer of a bucket repository should run oxy 0.5.0 or later: until it does, entries it writes after the first fold are seen only after the next nightly gc.
- Push protection (issue #268): the hub refuses a push that adds what looks like a credential (cloud keys, GitHub, GitLab and OxygenHub tokens, Slack and Stripe keys, private keys; rules v1), naming each by file, line and a fingerprint, never the secret itself, and saying how to take it out (
oxy amend) and to revoke it if real. Nothing of a refused push is stored. A maintainer can allow one fingerprint with a reason (Settings › Push protection, audited); the setting is on for every repository and can be turned off there. Only what a push adds is scanned, within[limits] scan_limit(16 MiB),scan_file_limit(1 MiB) andscan_time_ms(2 s); a push past them is accepted and its push log says how much went unscanned. Existing history is not scanned yet. - Land when checks pass, or land now over them (issue #261): anyone who may land a proposal can set it to land by itself, on the proposal, through
POST/DELETE …/proposals/{n}/auto-landor withoh proposal land N --when-ready(--offto clear it). Once every required check has passed and nothing else blocks it, it lands as the person who set it, if they may still land. A required check that fails or is cancelled turns it off with a note on the timeline; a push to the source makes it wait again. When required checks are the only thing in the way (pending, or failed with the runners down), a maintainer may land now with a reason: on the proposal, with{"over_checks": "reason"}on the API's land, oroh proposal land N --over-checks REASON. Only the checks are passed over; approvals, code owners, requested changes, drafts, dependencies and the trust policy still apply. Both are audited, and the proposal, its timeline and the pushes page say how it landed. - The repository bar has an Artifacts menu and a More menu (issue #254): the bar is now Code, Changes, Proposals, Issues, Flow, Releases, Wiki, Artifacts, More and Settings, and no longer wraps. Artifacts holds Releases, Build artifacts (every run's outputs in one list, new), Images (the runner images the repository's jobs used, new), Terraform state and Reports; More holds Bookmarks, Tags, Diffusion, Trust, Pushes and Conflicts. Projects leaves the bar (it is on the site band and every profile). The menus work without JavaScript.
- The hub keeps Terraform and OpenTofu state (issue #252, issue #255): an HTTP backend per repository at
/api/v1/repos/OWNER/NAME/terraform/state/STATE, with locking. A job uses it with an identity token for{base}/terraformor its job token, for its own repository only; people use a token of theirs and their role. State is sealed at rest and its last 20 versions are kept; backups carry it. The Terraform state page (under Artifacts) lists each state's versions; writers download the current state or any version as a.tfstatefile, and maintainers restore one. A restore writes the version again with a serial above the current one, since OpenTofu and Terraform only take a state forward, and keeps the state it replaces as a version, so nothing is lost. Refused while the state is locked, never by a job, and audited. - Insights (issue #257): OxygenFlow's charts for the site (
/admin/insights, filtered by repository, owner or runner), an owner (/insights/{owner}) and a repository (/{owner}/{name}/insights): pickup time (median and p95), jobs finished and pass rate, duration, queued and running, runners online and slots busy, a runners table and the busiest repositories, over 1 hour, 24 hours or 7 days. The page refreshes itself every 30 seconds, and?wall=1is a view without menus for a second monitor.[server] grafana_url(OXYHUB_SERVER_GRAFANA_URL) adds an Open in Grafana link.log,metricsandinsightsare now reserved names. - Prometheus metrics (issue #212):
/metricsserves Prometheus text to a bearer of[server] metrics_token(OXYHUB_SERVER_METRICS_TOKEN); without one it is 404. It reports the build, uptime, memory, the state cache, bucket requests by kind, HTTP requests by route class with latency histograms, protocol bytes by endpoint, the database pool, pushes accepted and refused, Flow jobs and runs, runners' last heartbeats, backups, mail sent and failed, and the transparency log's size. - A transparency log (issue #238): the hub logs every signed object it accepts (reference and tag attestations, seals, the policy, its acceptances, short-lived keys' certificates, kept receipts and sealed approvals) in one append-only Merkle tree, and signs a checkpoint every 5 seconds while entries arrive. The log is served as C2SP tlog-tiles under
/log/, with a/logpage. Every refs answer carries the latest checkpoint and each bookmark's entry with its inclusion proof, so oxy checks them on fetch. Hubs can witness each other's logs:[tlog] witnessesandwitness_forinhub.toml(none by default, so nothing changes until set). - Trusted time (issue #240): the hub keeps each cosigned checkpoint, lists its witnesses at
GET /log/witnessesand in every refs answer, and serves for each logged bookmark the first cosigned checkpoints that hold its entry, from which oxy takes the integrated time: when a witness first saw it, by the witness's clock. - Agents act for their owner with no key (issue #241, issue #253): an owner makes a grant with
oh agent grant NAME [--scope] [--for 30d], signed with their own oxy key; the hub keeps it and answers with the agent's token, shown once. The agent exchanges it atPOST /api/v1/keyless/certifyfor ten-minute certificates, so its fresh keys' commits count in the owner's name, and the same token works for fetch, push and the API as an agent's token of the owner (writing when the grant allows). What the agent does is marked as its own and its owner is told.oh agent listandoh agent revokemanage grants, and a revoked grant gets no more certificates. When a push moves a bookmark with a short-lived key, the hub countersigns it with its own clock. Runners' receipts signed with keys this hub certified are kept, and a release's trust report counts them as known signers. - Approval gates (oxygenflow#57, issue #235): a job whose pipeline asks for approval waits until someone with the role it names approves it on the run page, through the API, or with
oh run approve N --job NAME(oh run rejectto refuse). Everyone who may decide is notified once the job is ready. A rejected or expired job ends cancelled and the jobs after it are skipped. A gate that asks for a sealed approval (the default for a job with an environment) is released only by a signature of the approver's own key (oxy seal --flow), kept in the repository and named in the job's identity tokens. - Environments and deployments (oxygenflow#59): a job's identity tokens name its environment only once the job is approved.
/{owner}/{name}/deploymentsandGET /api/v1/repos/{o}/{n}/deploymentsshow what each environment runs, who approved it, and the history. - Artifacts between jobs, and allow-listed egress (oxygenflow#58, oxygenflow#55): a job's inputs come from the artifacts of a job it depends on in the same run, served to the runner holding it. A sandbox with
network "egress"goes only to runners offering egress. - Flow priorities (issue #244): runners take queued jobs by level first (urgent, high, normal, low), then by turn, so repositories take turns instead of one repository's burst holding everyone. The level comes from the run when expedited, else the repository (Settings › OxygenFlow), else the organisation, else the site. A maintainer can expedite a queued or running run to urgent with a reason; at most 2 expedited runs per owner go at once unless Admin › Runners › Settings says otherwise. A pipeline may lower its own jobs with
priority "low", never raise them. - Runners show Connectivity and Status apart (issue #243): Admin › Runners shows whether a runner is online (when the hub last heard from it) apart from what it is doing (disabled, draining, idle, or running N of M). A busy runner sends a heartbeat, so a quiet job no longer shows it offline. The queue filters by repository, status and runner, and shows when each job started.
- Why a job waits (issue #259): a job some runner could take now says why it still waits: which of those runners are busy (
earth-1 busy (3 of 3)) or lack the memory or disk for it now, and how many ready jobs come first. - Pages update themselves (issue #203–issue #207): the proposal page's timeline and Landing section, the notification bell, the inbox, the dashboard, the issue page, the repository overview and Diffusion refresh in place when something changes, over one
/livestream per page. Checks keep their width and refresh in place instead of reloading the whole page (issue #232). - Signing in from an invitation with GitHub, GitLab or Google (issue #214): the registration page shows the providers' buttons for a usable invitation, and the account is made only with an unused code.
git cloneon the Code panel (issue #215) when the repository's Git mirror is on, belowoxy clone.oh issue comment -F FILE(issue #260): takes the comment from a file, or from standard input with-F -, as otherohcommands with a body do, and refuses an empty comment.- PostgreSQL (issue #211, issue #242): the hub can run on PostgreSQL 16 (or 15) when built with
--features postgres, set by[database] url(OXYHUB_DATABASE_URL).oxygenhub admin copy-db --from <old>/hub.dbmoves a stopped SQLite hub's records into an empty Postgres database (--replaceempties a fresh one first). Releases includeoxygenhub-server-VERSION-linux-x86_64.tar.gz, built for PostgreSQL. See docs/postgres.md. - SLSA provenance for build artifacts (issue #239): an artifact of a job whose signed receipt the hub kept has
…/provenance, an in-toto SLSA provenance v1 statement in a DSSE envelope signed with the hub's key; release assets link it (built_by.provenance_urlin the API).cosign verify-blob-attestation --key oxyhub-signing.pem --type slsaprovenance1 --insecure-ignore-tlog --signature PROVENANCE ASSETchecks a download, with the key from/.well-known/oxyhub-signing.pem. - Assistants stream their answers (issue #248): the time limit is now for silence, not the whole answer, so a large proposal no longer times out with nothing. Drafts fill the editor as they are written. The assistant is told every changed file before the diff, and which files it could not see; a provider that refuses a prompt as too long is asked once more with less.
- Agent tokens decide approval gates only where the repository allows it (issue #258, issue #229): a gate exists so a person decides. A decision through an agent's token (an agent-marked token or an agent's grant) is refused, saying why, unless Settings › OxygenFlow lets agents decide the repository's gates (off by default). Where allowed, the decision names the agent ("approved by carol via claude-code"). A sealed approval is a person's own key and is not affected.
- A landed proposal's runs that have not started are cancelled (issue #263): they can no longer change anything and held the queue ahead of the target's own run. Each such job says "moot: proposal #N landed"; runs already going finish.
- Newest run wins (issue #267): a new push run cancels the older push runs of its bookmark still going, as before, and now a proposal's new run cancels that proposal's older runs too, so
proposal/Nruns no longer pile up three or four deep. Each cancelled job says which run superseded it. Runs started by hand, by a schedule, by a tag or as a re-run are never cancelled this way. Settings › OxygenFlow › Newest run wins lets maintainers keep superseded runs that are already running, cancelling only the queued ones. - Flow on your own runners (issue #225): a repository's maintainers can turn OxygenFlow on for it themselves once it (or its owner) has a runner of its own: Settings › OxygenFlow › "on, own runners only". Its jobs then go only to those runners, never to the site's; letting the site's runners take them stays a site administrator's choice.
- Readers never wait for a push or gc (issue #249): pages, the API and fetches stalled for up to 43 s while a repository's gc or a push held its lock. With oxy's store now safe to read alongside a writer, reads take only a shared lock that deleting or moving a repository holds alone; pushes, gc, landings, web edits and the rest still take turns as writers.
- Repositories kept in a bucket answer quickly (issue #228, issue #234): the hub shares one client per bucket and credentials, keeps ranges of large packs on disk, looks in packs first, remembers a missing key for 30 s and lists packs once a while. The nightly gc remembers the day it ran across restarts, so a deploy during
gc_hourno longer runs it again, and a store that is already one pack is left alone./healthshows bucket requests by kind. - Restarts drain (issue #233): on SIGTERM the hub stops taking connections, ends live streams (browsers reconnect) and gives requests in flight up to 30 s, then stops within a second. It can take its socket from systemd (socket activation), so requests that arrive during a restart wait instead of failing: install
oxygenhub.socketand the service changes in docs/deploy.md. - Diffusion mends itself (issue #210): every 10 minutes the pin index is compared with each followed bookmark and re-indexed where it differs, and a consumer left behind with no open bump is caught up. A failed index write says which step failed and is tried again.
- The state cache counts what states really cost (issue #246): a loaded state was weighed at a quarter of its real size, so the hub held far more memory than its 3 GiB budget. It now weighs states by what they take, so fewer stay cached; raise
OXYHUB_STATE_CACHE_MBif large repositories miss it too often. - Sessions are kept on the server (issue #223): the cookie holds a random id, and a session ends after 14 days unused or 30 days in all. Settings › Security lists your signed-in browsers with Sign out on each. Old cookies no longer work, so everyone signs in once more.
- A new hub gives administrator only to whoever brings its setup code (issue #245): on a hub with no accounts the first registration made an administrator with no invitation, whatever the registration mode. The hub now writes a one-time setup code to
<data>/setup-code(owner-only) and logs where it is, or takes[registration] setup_code(OXYHUB_REGISTRATION_SETUP_CODE); the first registration must bring it. A sign-in provider never makes the first account.oxygenhub admin user create --adminneeds no code. - Terraform state needs the write role to read (issue #256): every account has the Read role on public and internal repositories, so any account's
repo:readtoken could read their Terraform state, which often holds secrets. Reading a state now needs arepo:writetoken and the write role; the repository's jobs keep their access. - HTTPS only (issue #218): on a site whose
base_urlis https, a request that a proxy reports came over plain http is redirected (GET, HEAD) or refused (anything else), so a form or password is never taken over http. Every cookie is Secure on an https site. - Requests out only to public addresses (issue #219): webhooks and assistants refuse a host that resolves to a loopback, private, link-local (the cloud metadata address among them) or other local address, pin the connection to the checked addresses and do not follow redirects. A site administrator who wants a local service, such as a local Ollama, must allow it with
[outbound] allowinhub.toml. - Webhooks read at most 64 KiB of an answer (issue #220), and a hook with 1000 deliveries waiting takes no more until it catches up.
- Guessing is slowed (issue #221): failed sign-ins, two-factor codes, device codes and reset requests count per account (5 free) and per address (20 free), then each doubles the wait, from 2 seconds to a 15-minute lockout; the page says when to try again.
- Security headers (issue #222, issue #227, issue #231): every response is sent with
nosniff, a referrer policy and a permissions policy, and pages withX-Frame-Options: DENYand a report-only Content-Security-Policy, with no inline scripts left in the pages.Strict-Transport-Securityis sent on https sites with the max-age from[server] hsts_max_age(OXYHUB_SERVER_HSTS_MAX_AGE); none at 0, the default. - security.txt and a security contact page (issue #224, issue #230): once an administrator sets a contact under Administration › Security contact,
/.well-known/security.txtand/security-contactshow it. - Fetches no longer fail on a bookmark moved by a key that signed nothing (issue #266, issue #271): a delegate or short-lived key that moved a bookmark without signing any of its changes left every client, runners included, failing the whole fetch with "unknown key". Fetches now carry the identities of the keys that signed every bookmark's and tag's latest attestation, so any client can verify the move. The fix first made every fetch of a repository with many bookmarks in a bucket slow (14 s for one with 145); the signers are now gathered once per change to the repository.
- A renewed key approves as the account its predecessor is linked to (issue #236): a sealed approval signed by a renewed or delegated key with the same key pair was refused because the new identity was not linked. The hub now follows the key's earlier identities to a linked one, as pushes already did.
- Closing keywords close every issue they list (issue #226):
Closes #1, #2 and #3,Fixes: #4 #5andresolves #6 & #7close every number, not only the first. - Long hashes in change titles show their two ends (issue #216), the whole in a tip, and change rows wrap rather than grow wider than their card.
- A minified file is shown plain at once: a file with a line over 4,000 bytes was highlighted for seconds and is now shown as plain text, as other forges do.
Assets
- SHA256SUMS 934 B · blake3
d4ec22043bd9· 8 downloads · built by run #405 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.6.0-linux-arm64.tar.gz 2.5 MiB · blake3
f176a58cde88· 4 downloads · built by run #405 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.6.0-linux-riscv64.tar.gz 2.5 MiB · blake3
eae7c80785d8· 3 downloads · built by run #405 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.6.0-linux-x86_64.tar.gz 2.7 MiB · blake3
b3e02a1acc55· 3 downloads · built by run #405 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.6.0-macos-arm64.tar.gz 2.3 MiB · blake3
a60d8f0e7138· 3 downloads · built by run #405 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.6.0-macos-x86_64.tar.gz 2.5 MiB · blake3
5d5ea2382b7f· 3 downloads · built by run #405 dist · signed receipt by earth-1 (short-lived key) · provenance - oh-0.6.0-windows-x86_64.zip 6.5 MiB · blake3
71ea62914d9d· 3 downloads · built by run #405 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.6.0_amd64.deb 2.0 MiB · blake3
9bc8aba728b1· 2 downloads · built by run #405 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.6.0_arm64.deb 1.8 MiB · blake3
4145524fa83f· 2 downloads · built by run #405 dist · signed receipt by earth-1 (short-lived key) · provenance - oh_0.6.0_riscv64.deb 1.9 MiB · blake3
2c094722b04e· 2 downloads · built by run #405 dist · signed receipt by earth-1 (short-lived key) · provenance - oxygenhub-server-0.6.0-linux-x86_64.tar.gz 23.4 MiB · blake3
288049fbca98· 3 downloads · built by run #405 dist · signed receipt by earth-1 (short-lived key) · provenance - Source (v0.6.0.tar.zst)
- Source (v0.6.0.zip)
OxygenHub 0.5.2 v0.5.2 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- Your year on your profile (issue #217): above the repositories, a waveform of the changes you pushed each day over the last 3, 6, 9 or 12 months (as long as you have been pushing), coloured by the repository the work went to, with the share pushed through agent tokens as a violet trace and release tags on the peaks. It draws itself in, a heartbeat runs along it while idle, and the pointer lights the days around it with a card for each one; the legend shows one repository's year. Pushes now record the agent token they came through.
- Sign in with Google is set up on oxygenhub.io, beside GitHub and GitLab.
Assets
- SHA256SUMS 825 B · blake3
0a157f7218fe· 11 downloads · built by run #282 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.2-linux-arm64.tar.gz 2.3 MiB · blake3
858d74fde42d· 4 downloads · built by run #282 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.2-linux-riscv64.tar.gz 2.4 MiB · blake3
63c6f210fd40· 3 downloads · built by run #282 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.2-linux-x86_64.tar.gz 2.5 MiB · blake3
d0ca31f3fe11· 4 downloads · built by run #282 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.2-macos-arm64.tar.gz 2.2 MiB · blake3
3a086ca9540c· 3 downloads · built by run #282 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.2-macos-x86_64.tar.gz 2.3 MiB · blake3
6ca65e16461d· 3 downloads · built by run #282 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.2-windows-x86_64.zip 6.2 MiB · blake3
43307960179f· 3 downloads · built by run #282 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.5.2_amd64.deb 1.9 MiB · blake3
b2371f0cb9af· 4 downloads · built by run #282 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.5.2_arm64.deb 1.7 MiB · blake3
b14c1fdc296d· 3 downloads · built by run #282 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.5.2_riscv64.deb 1.7 MiB · blake3
081f35e8a577· 2 downloads · built by run #282 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - Source (v0.5.2.tar.zst)
- Source (v0.5.2.zip)
OxygenHub 0.5.1 v0.5.1 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- Sign in with GitLab (issue #213): gitlab.com, or a self-managed GitLab at an address the administrator gives, beside GitHub and Google. The providers show as branded buttons beside the sign-in box (GitLab red-orange, GitHub dark, Google white, each with its logo), and on the registration page when registration is open.
- A landing runs the pipeline (issue #197): landing a proposal (on the web, through the API or by Diffusion's auto-land) starts the target's run, as a push does, so consumers following an upstream when green are no longer held back by a landed state that never ran.
- Long hashes show their two ends (issue #198): a state address or hash on the overview reads
0826ac0c…f8d97241, the whole of it in a wrapped tip. - Multi-line
watchlists (issue #200):.oxymoduleslists over several lines, as TOML allows, are read in full. - Assistants say why there is no answer (issue #201): answers may be 16,000 tokens long and background reviews and summaries five minutes; when no text comes, the hub says whether the assistant ran out of room while thinking or the provider declined.
Assets
- SHA256SUMS 825 B · blake3
62fc6d6caebc· 13 downloads · built by run #279 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.1-linux-arm64.tar.gz 2.3 MiB · blake3
c9d5e031985e· 4 downloads · built by run #279 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.1-linux-riscv64.tar.gz 2.4 MiB · blake3
397585b22c85· 4 downloads · built by run #279 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.1-linux-x86_64.tar.gz 2.5 MiB · blake3
62d1d69695e5· 4 downloads · built by run #279 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.1-macos-arm64.tar.gz 2.2 MiB · blake3
4eefe2758462· 4 downloads · built by run #279 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.1-macos-x86_64.tar.gz 2.3 MiB · blake3
84ffcfe5fb14· 4 downloads · built by run #279 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.1-windows-x86_64.zip 6.2 MiB · blake3
a0ff2a39a8a2· 4 downloads · built by run #279 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.5.1_amd64.deb 1.9 MiB · blake3
f45f8e4ccf93· 3 downloads · built by run #279 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.5.1_arm64.deb 1.7 MiB · blake3
935f43f32ceb· 4 downloads · built by run #279 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.5.1_riscv64.deb 1.7 MiB · blake3
f585e3e23d9c· 3 downloads · built by run #279 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - Source (v0.5.1.tar.zst)
- Source (v0.5.1.zip)
OxygenHub 0.5.0 v0.5.0 · ✔ signed by Andy McCall · andymccall ·
Trust and audit- Mail that works for any site (issue #181, issue #182): Administration › Mail picks a service (Resend, Amazon SES, Mailgun or plain SMTP) and takes its key, STARTTLS by default, with SEND A TEST. Every email is an HTML card with the OxygenHub mark, a button for its link and the site's links, beside a plain-text copy.
- Notifications by email (issue #183, issue #186): owners hear about their repositories by default; Flow says when a build breaks and when it is fixed; backups say when they fail, when they recover, and once a day what ran; admins hear of sign-ups; proposals reach watchers and reviewers. Subjects say what happened, e.g.
[OxygenHub] 🎉 Build Success,💥 Build Broken,⚠️ Backup Failed,🔀 New Proposal. - Agent tokens (issue #183, issue #185): a token marked as an agent's (Settings › Tokens, Mark as agent) tells its owner what is done with it, as anyone else's actions would. Settings › Tokens and Keys are cards with their actions beside each row (issue #188).
- Two-factor sign-in asks only for the code (issue #184): the password is not typed twice.
- Backups, part two: restore brings the records back and release assets travel (issue #175); Admin › Backups (issue #176); a repository can be left out or given its own schedule (issue #177); Amazon S3 with no key, through STS web identity (issue #178); an API for settings, TEST, back up now and runs, for users and organisations (issue #179); empty files upload to GCS (issue #180).
- Assistants summarise proposals (issue #190): Summarise with posts its summary of the proposal as a comment via the assistant, under the prompts the site, organisation and repository set.
- Choose a bookmark or tag on the overview (issue #191): a picker beside the code search; the side bar stays.
- Wiki pages (issue #192, issue #194): a title row with who edited the page and its revisions, Pages and Contents in the side bar, and a clone box with a copy button.
- The Markdown editor (issue #193) is laid out like GitLab's: a Preview tab, icon buttons with strikethrough, task lists and tables, fullscreen and a Markdown supported footer.
- Backdrops on more pages (issue #196): a repository's own sky on its overview, wiki, proposals and Conflicts; the mark on Settings › Keys, Tokens and Backups. Live arrivals on the sky (issue #172).
- Diffusion auto-land (issue #174), opt-in per repository; image architectures detected on push and learnt from runs (issue #173).
- Fixes: the proposals list API on a bucket-backed repository (28 s, issue #171); a long list of heads on a proposal (issue #170); Conflicts is the usual width (issue #195); + new is the primary blue (issue #187); Backups' settings are as wide as its runs (issue #189).
- Backups (issue #169, docs/backups.md): a user (Settings › Backups) or an organisation's owners copy every repository they own, with its wiki, issues, proposals, releases and settings (never a secret value), hourly or daily, to a directory the hub allows or a Google Cloud Storage bucket with no key at all (the hub signs in as
backup:OWNERthrough workload identity federation; TEST checks it). Only what changed travels, runs are kept 7, 30 or 90 days, a failure lands in the owner's inbox, andoxygenhub admin backup restorebrings repositories back byte for byte. - Diffusion (issue #148, docs/diffusion.md). When a repository that others pin as a subrepo moves on, each consumer that follows it gets a proposal moving the pin, signed by the hub, tested by the consumer's own pipeline, with the upstream's changes listed. One proposal per consumer and subrepo, kept up to date; never landed by itself. Turned on per repository (Settings › Diffusion,
PUT /repos/{owner}/{name}/diffusion, orfollowin.oxymodules), off by default;greenwaits for the upstream's run to pass. A repository's page shows who uses it and how far behind each is (Diffusion › Diffuses to,GET /repos/{owner}/{name}/consumers). Consumers are bumped on the bookmark their work lands on, learned from where their proposals land. - Jobs go where their build cache is (oxygenflow#51): a runner's claim lists the caches it holds, and the hub holds a job for up to 15 s for the runner holding its cache, ahead of one holding its image; the run page says "holds its build cache".
- Diffusion has a face (issue #154): the
diffusionaccount's picture is the Diffusion mark (assets/icons/diffusion.svg), ripples from a source out to its consumers, until someone uploads another. - Diffusion in the API (issue #153):
GET /repos/{owner}/{name}/diffusiongives what a repository takes from and what it diffuses to, each with its pill, for the VS Code extension. - The card layout everywhere (issue #159–issue #164): the About card's counts in its heading and its buttons centred; wider repository cards with each Diffusion row on one line; the Code button and + New project in the accent blue; proposal and issue sidebars, profile and organisation pages, search results and the wiki's sidebar as cards; every panel's and form card's heading a shaded bar.
- Every backdrop scene (issue #167, docs/backgrounds.md): the Oxygen mark's two rings turning behind sign in, register and device sign-in; ripples on a repository's Diffusion tab, its upstreams flowing in and changes flowing out to its consumers in their pills' tones; the swarm on Admin › Runners › Images, chunks streaming to a fetching runner from every holder; and one mark adrift on a page not found or a server error.
- The hub's sky (issue #165): Explore and the signed-out home draw the same sky from the public repositories listed (a filter narrows it), never a private one, whoever looks.
- Your sky (issue #157, docs/backgrounds.md): a quiet, moving backdrop behind the dashboard, drawn in Rust compiled to WebAssembly: your repositories as clusters and their last 30 days (every change pushed, proposal and issue events, releases, Flow runs) as marks around them; the cursor lights and links them, and names the cluster it rests by. Settings › Appearance: Moving, Still or Off; still under reduced motion.
- Signed-in pages are private (issue #158): HTML for a signed-in viewer says
Cache-Control: private, no-store, so no proxy or CDN serves one viewer's page to another. - The dashboard in cards (issue #155): each section a rounded card with its heading and count in a shaded bar, your repositories a sidebar card with New in its heading.
- Tidier pages (issue #152). The repository sidebar is a column of cards with shaded headings: Diffusion in one card (Takes from and Diffuses to, each with its pill), the ten most recently moved bookmarks with a link to the rest, and the hub's delegate key shown with the OxygenHub mark. The code tree has a shaded head with the latest change and the history, and folder and file icons; the site bar has icons; the Diffusion tables share one column grid; Help › Coming from GitHub covers submodules and Renovate.
- Admin › Runners › Images (issue #146): every runner image, where it is and what uses it.
- Faster pages after a restart (issue #145): bookmark summaries are kept on disk; slow requests are logged.
Assets
- SHA256SUMS 825 B · blake3
429a91013fa4· 13 downloads · built by run #272 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.0-linux-arm64.tar.gz 2.3 MiB · blake3
d2f004a00b78· 4 downloads · built by run #272 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.0-linux-riscv64.tar.gz 2.4 MiB · blake3
38e2d61e678c· 5 downloads · built by run #272 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.0-linux-x86_64.tar.gz 2.5 MiB · blake3
0ca19bca9a39· 3 downloads · built by run #272 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.0-macos-arm64.tar.gz 2.2 MiB · blake3
901ef888c19e· 5 downloads · built by run #272 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.0-macos-x86_64.tar.gz 2.3 MiB · blake3
157a29358627· 3 downloads · built by run #272 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.5.0-windows-x86_64.zip 6.2 MiB · blake3
0a374111136b· 5 downloads · built by run #272 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.5.0_amd64.deb 1.9 MiB · blake3
319a8a0dcb0d· 3 downloads · built by run #272 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.5.0_arm64.deb 1.7 MiB · blake3
3cc3a7bbf71b· 3 downloads · built by run #272 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.5.0_riscv64.deb 1.7 MiB · blake3
4ce6604022b6· 4 downloads · built by run #272 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - Source (v0.5.0.tar.zst)
- Source (v0.5.0.zip)
OxygenHub 0.4.2 v0.4.2 · ✔ signed by Andy McCall · andymccall ·
Trust and audit-
Coverage from a workstation (issue #136).
oh coverage upload FILE [--bookmark B | --change HASH]keeps an LCOV or Cobertura report measured off the hub as the coverage of that state, for suites a runner cannot run in full. The Coverage page, its history and the Reports card say "uploaded by NAME" where a run number would be, so a runner's figure and an upload's are never mistaken for each other, and an upload sets no check. -
Images by hash (oxygenflow#39). Rootfs images live on the hub:
flow rootfs pushsends only the chunks the hub lacks (a rebuilt image costs its changes, runs of zeros cost nothing), the hub checks the whole image against its hash, and a runner that lacks a job's image fetches it instead of anyone copying it between machines. The hub offers such a job to runners that fetch, and says when neither the runner nor the hub holds the image. -
Reports (issue #127). A Flow job's
report "NAME" { path … }output is kept file by file with every run, and a repository with reports gets one Reports tab in place of Coverage and Tests: each report's latest run with its kind, summary and metrics, and how each moved against the run before. A report's page shows its metrics with sparklines across runs, its thresholds, its[context], its runs, and its own page (index.html) in a sandboxed frame that carries no session. Each metric withfail_aboveorfail_belowsets a check namedreport/NAME/METRICon the change. -
Flow's artifacts survive the nightly gc (issue #126). They are named only in the hub's database, so garbage collection found them unreachable and would have deleted each one 14 days after its run: coverage files, test reports and dist files alike. The nightly gc now keeps every artifact a repository's runs name.
-
Transfer a project (issue #125). A board's Settings move it to another owner you may make boards under, such as one of your organisations; so do the API (
owneronPATCH /projects/{owner}/{n}) andoh project transfer N --to OWNER. It takes the next number there, with its columns, cards and privacy, and its old address redirects to it.
Assets
- SHA256SUMS 825 B · blake3
fb6d8cbedb76· 10 downloads · built by run #181 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.2-linux-arm64.tar.gz 2.3 MiB · blake3
cd534864dbd7· 4 downloads · built by run #181 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.2-linux-riscv64.tar.gz 2.4 MiB · blake3
7f9701970234· 4 downloads · built by run #181 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.2-linux-x86_64.tar.gz 2.5 MiB · blake3
e8b413c867eb· 5 downloads · built by run #181 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.2-macos-arm64.tar.gz 2.2 MiB · blake3
97ce5d0d107e· 5 downloads · built by run #181 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.2-macos-x86_64.tar.gz 2.3 MiB · blake3
1a6fa46afe8c· 5 downloads · built by run #181 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.2-windows-x86_64.zip 6.2 MiB · blake3
f3173aecd095· 5 downloads · built by run #181 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.4.2_amd64.deb 1.9 MiB · blake3
3a4daad659e2· 4 downloads · built by run #181 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.4.2_arm64.deb 1.7 MiB · blake3
52dee3cf83bd· 4 downloads · built by run #181 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.4.2_riscv64.deb 1.7 MiB · blake3
975ca8bf06ae· 4 downloads · built by run #181 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - Source (v0.4.2.tar.zst)
- Source (v0.4.2.zip)
OxygenHub 0.4.1 v0.4.1 · ✔ signed by Andy McCall · andymccall ·
Trust and audit-
The store as its provider's icon (issue #123). A repository kept in its owner's bucket shows the icon of Google Cloud Storage, Amazon S3 or Azure Blob Storage in its header; hovered, focused or tapped, a card gives the provider and, for its admins, the bucket, prefix, region and URL, with a link to Settings › Storage.
-
A tidier Projects page (issue #124). A filter and the New project button in one bar, Open and Closed tabs with their counts, a row per project with its board icon, privacy, number, last update and description; the new-project form opens above the list.
-
Making projects, and their references (issue #118, issue #119). The Projects page has a New project button for anyone who may make one, links to the organisations' boards from your own, and a Projects tab on every repository; a card or issue reference may name another repository (
owner/repo#N).oh projectlists, creates and edits boards (issue #115). -
Blame of a conflicted file no longer fails (issue #120). Its conflict markers are lines no change wrote; the page gave an error, it now shows them with an empty blame cell.
-
Test reports (issue #114). A Flow job's JUnit XML artifact named
junitis read like a coverage report: a Tests tab with each run's passes, failures and skips, every case's history, and the flaky ones. A failing job's artifacts kept withwhen "always"are shown too. -
Pushes in parts. A long push from oxy 0.4.3 arrives as several requests, each of objects alone but the last; the hub stores each part and records the push once, when the last names the bookmark.
-
Memory under control (issue #116, issue #117). The cache of loaded states keeps to a size budget (
OXYHUB_STATE_CACHE_MB, 3 GiB) as well as a count, the summary of a bookmark's heads is cached once per state, and the allocator returns freed memory;/healthreports the cache. -
A coverage check (issue #113). Each coverage report sets a
coveragecheck, such as81.9% (-0.3 against main), measured against the default bookmark. Settings › Coverage can set a minimum and a largest drop. The check then fails and says why, and as a required check it holds a proposal back. A proposal's report shows the files whose coverage moved against the default bookmark. -
Coverage reports, built in (issue #113). A Flow job's artifact named
coveragein LCOV format is read when uploaded, and the job's log says what it found. A Coverage tab shows the latest percentage and its change over a chart of every run, a strip of facts (lines covered, hits per line, functions, branches, files, badge with its Markdown), what this run changed and the files whose coverage moved, how files spread over coverage bands, a chart of covered and missed lines, the recent runs, every file with a bar, and each file's lines marked run or missed, as Coveralls does. A badge is at/OWNER/NAME/coverage/badge.svg, and the run page shows each job's coverage. Totals matchcargo llvm-cov's own. -
A wiki can start with a push. Someone who may write to a repository can push the first pages of its wiki to
OWNER/NAME.wiki, as well as writing them on the web: the hub makes the empty wiki when a writer first reaches that address, and the push gives it its id. Readers still find nothing there until it has pages. -
Mermaid diagrams in Markdown. A
```mermaidblock in a README, wiki page, issue or proposal is drawn as a diagram, in the page's light or dark theme. The hub serves its own copy of Mermaid 12.1.0, loads it only on pages that have a diagram, and runs it in strict mode. A diagram that does not parse stays as its source, with the reason under it. -
An organisation's storage policy (issue #96). An organisation's Settings › Storage can require every new repository to live in a bucket and list the buckets allowed, so its data stays where its own buckets are. The New repository form refuses anything else and says what is allowed.
-
A repository can live in its owner's bucket (issue #96). The New repository form has a Storage section: this server's disk, or your own Amazon S3, Google Cloud Storage or Azure bucket, with credentials for it. The bucket is checked before anything is made. The credentials are sealed on the server and used only for that repository. The hub keeps a cache in front. The header shows a bucket tag, and Settings › Storage checks the bucket again and replaces the credentials. Tested with a push into a real S3 bucket.
-
Runners decline, and the queue says why a job waits (oxygenflow#36, OxygenFlow spec §11.4–11.5). A runner can hand back a job it cannot run with a reason. The job is queued again and not offered to that runner while what it offers stays the same, for ten minutes at most. After three different runners decline it, the job ends as unplaceable with their reasons. Every 15 seconds the hub works out why each ready job no runner can take is waiting, from each runner's last claim: no runner online, a missing tier, the wrong architecture, an image it does not hold, a label, memory or CPUs, a scope, or a decline. The run page and the API show the reason, and a runner's page shows its tiers and what it declined.
-
Assistants through the API and
oh(§13.4). List, add or change, and remove a repository's, an organisation's or the site's assistants, and read or set their prompts:/repos/{o}/{n}/assistants,/orgs/{org}/assistants,/admin/assistants;oh assistant list|add|remove|promptwith--orgor--site. Tokens are write-only and read from an environment variable byoh. -
Adding an assistant picks from what the provider offers (issue #109). A provider list fills the name, endpoint and API (with Other for anything else), List models fetches the endpoint's own models into the Model field, and a model the endpoint does not list is refused on save with ones it does. Administration is a sectioned page with a left-hand menu, its audit log paged (issue #110).
-
Agents get their marks, contributors one row each. A repository's contributors show one row per account with each agent's share beneath (
↳ via Claude Code · 1), asoxy logdoes; agents' names on change pages, reviews and the ask buttons carry their brand mark (Claude, ChatGPT, Perplexity, DeepSeek, Mistral; Antigravity with the Gemini mark), served at/avatar/agent/{name}. -
Jobs go to runners of the right architecture (oxygenflow#36). Runners report each image's architecture; the hub matches a job's
archor its image's against the runner's, and the queue says what a waiting job asks for. -
Sign in with GitHub or Google (issue #106). Set up per provider under Administration (client id, sealed secret, on or off); the login page offers them. A first sign-in links the account with the same verified email, or makes an account when registration is open; connect or disconnect under Settings › Security.
-
Wikis (issue #104). Each repository can have a wiki: Markdown pages kept as an Oxygen repository of their own, read and edited on the web (with history, a sidebar, a page list and search) or cloned and pushed as
OWNER/NAME.wiki. Web edits are signed changes, as code edits are. Settings › Advanced deletes the wiki data. -
Advanced settings: transfer, archive, delete (issue #108). A repository's Delete section becomes Advanced: transfer the repository to a user or organisation (the old address redirects and
oxyremotes keep working), archive it read-only with a reason and bring it back, delete it, and a placeholder for deleting wiki data ahead of wikis. -
Accounts elsewhere on a profile (issue #105). Bluesky, Mastodon and GitHub under Settings › Profile, checked and normalised (a handle,
@user@instanceor a profile URL all work), shown on the profile with the service's icon asrel="me"links. -
A job's identity: the hub is an OIDC issuer (issue #103). A job that declares
identity "AUDIENCE" { mount-path … }gets a signed token naming the repository, bookmark, run and job, delivered as a file like a secret;/.well-known/openid-configurationand/.well-known/jwks.jsonpublish what AWS, Google Cloud or Vault need to trust it. Tokens are masked in logs. -
Secrets for pipelines (issue #107). Administration, organisation and repository settings hold secrets, typed once and sealed; a job gets only those its pipeline declares with
secret, as files Flow mounts before it starts, never in the environment; their values are masked in the job's log as it arrives. -
Variables for pipelines (issue #102). Administration, organisation and repository settings hold variables for OxygenFlow jobs, inner levels overriding outer, each page showing what it inherits; a claim carries the repository's effective set and Flow adds them to the job's environment under
FLOW_*and the pipeline's own. Not for secrets, which Flow mounts. -
AI assistants, step three: drafted descriptions (issue #97). The new-proposal form and an open proposal's editor have a draft-with button per assistant; the answer, written from the changes and diff, lands in the editor for the person to change before saving.
-
AI assistants, step two: review requests (issue #97). Under Reviewers, the author or a writer asks an assistant the repository may use; the hub sends it the proposal's title, description, changes and diff with the site, organisation and repository prompts, and records the answer as a comment review via the assistant, shown as "bob ↳ agent Claude". Approvals count only people, and an assistant's answer never replaces the asker's own verdict. Also
POST …/proposals/{n}/review-requestsin the API, withviaon reviews. -
AI assistants, step one: settings (issue #97). Administration, an organisation's settings and a repository's settings each hold a list of assistants (name, endpoint, API shape, model, extra headers, token, context budget, on or off) and a prompt. A repository sees its organisation's and the site's beside its own; the innermost of a name wins and one turned off above is off below. Tokens are sealed with ChaCha20-Poly1305 under
keys/assistants.keyand never shown again; TEST sends a one-line exchange. Review requests and drafted descriptions follow. -
A runner's own labels and time limit (issue #98). A runner's page under Admin → Runners has a Settings form: labels an administrator gives it beside those it reports (jobs that ask for a label match either), and a job time limit in minutes below the site's, applied when it claims.
-
Mail settings on the admin page (issue #101). The SMTP URL and From address are set and saved from Administration, overriding
hub.toml's[email], with a button that sends a test message to the administrator's own address; the password is kept on the server and shown masked. An empty URL turns mail off. -
Spacing (issue #99, issue #100). The Add a runner button stands off the runners table and the webhook and collaborator forms fill their panel; a proposal's project entries keep a space before remove.
Assets
- SHA256SUMS 825 B · blake3
bd54032b97c6· 8 downloads · built by run #163 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.1-linux-arm64.tar.gz 2.3 MiB · blake3
6480052e6ada· 3 downloads · built by run #163 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.1-linux-riscv64.tar.gz 2.3 MiB · blake3
8fcf94151f64· 2 downloads · built by run #163 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.1-linux-x86_64.tar.gz 2.5 MiB · blake3
6cc7ea54325c· 2 downloads · built by run #163 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.1-macos-arm64.tar.gz 2.1 MiB · blake3
f930e8a2806c· 2 downloads · built by run #163 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.1-macos-x86_64.tar.gz 2.3 MiB · blake3
6eff0170ea04· 3 downloads · built by run #163 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.1-windows-x86_64.zip 6.2 MiB · blake3
6b082d68dc22· 2 downloads · built by run #163 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.4.1_amd64.deb 1.9 MiB · blake3
dd1b9f6b467c· 3 downloads · built by run #163 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.4.1_arm64.deb 1.6 MiB · blake3
9c5f3fcd333a· 3 downloads · built by run #163 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.4.1_riscv64.deb 1.7 MiB · blake3
760bc527ac46· 2 downloads · built by run #163 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - Source (v0.4.1.tar.zst)
- Source (v0.4.1.zip)
OxygenHub and oh 0.4.0 v0.4.0 · ✔ signed by Andy McCall · andymccall ·
Trust and auditOxygenHub 0.4.0 and oh 0.4.0, pinning Oxygen 0.4.0. OxygenFlow built the release files, and the trust page shows each one as attested.
-
Who did the work. A change an AI agent signed for its author says so wherever the author is shown:
via NAMEwith anagentbadge in history rows, aviarow under the author on the change page (the agent's identity, the delegation it acted under and its expiry, its key), a count under the author in Contributors, andviain the API's change summaries. The author stays the human; a revoked delegation turns the badge red. -
Rotated identities link themselves. A push that brings changes authored by a successor of a linked identity, where every step kept the key pair (a renewal, a delegation added or removed), links the successor to the same account: delegating to an agent no longer leaves your changes unattributed until you re-upload a key.
-
A Flow badge.
/{owner}/{name}/flow/badge.svgis the latest run on the default bookmark as a small SVG for a README (passing,failing,running,no runs). -
History by revset.
GET /repos/{o}/{n}/history/{ref}?r=REVSETanswers the changes a revset selects (Oxygen'sdocs/revset_query_language.md), under a two-second budget. -
The hub garbage-collects every repository nightly (issue #94).
oxy gcruns for each repository in turn atretention.gc_hourUTC (default 3; 24 or more turns it off), under its write lock, logging what was pruned and packed;oxygenhub gcruns the same pass by hand. The oxygen repository had 1.45 GB of loose objects when this was found. -
Milestones over the API, and
oh milestone(issue #91).POST /milestonescreates one (title, description, due date) or changes the one with that title,PATCH /milestones/{title}changes title, description, due date or state;oh milestone list|create|edit|close|reopen. -
oh issue edit(issue #95). Title, body (-Ffor a file), labels and assignees as whole sets (--no-labels,--no-assignees), milestone (""clears);oh issue labelkeeps adding and removing. -
ohdies quietly on a closed pipe (issue #92), asoxydoes:oh issue list | head -1no longer panics. -
The trust report prints the tagged state once (issue #93): "The tagged state has N heads" with the short heads, and each asset's line names the run that built it.
-
A runner busy with its only job stays online (issue #78). Its log batches and finish call mark it seen, where only claims did.
-
The hub signs for you only with
changes,refs. Delegating to the hub key now takes--scope changes,refs; the recipes and the trust page say so. -
Web workspaces, designed (issue #69). Spec §13.3 has the design to review before anything is built: data, the runner's
workspacejob kind with flow-casfs, the owner-only proxy, delegate-signed pushes tows/{account}/{id}, security, costs, open questions. -
What starts a job:
on(oxygenflow#24). A pipeline's or a job'son { push "main" "feature/*"; tag "v*"; manual }decides which events run it: pushing a tag now runs the jobs that name it, on the tagged state; a run has only the jobs its event starts (and what they need), and an event that starts none starts no run. A rerun repeats its run's event. A bookmark sent again unchanged starts no run.schedule "0 3 * * *"lines run their jobs on the default bookmark when due (UTC), checked each minute.
Assets
- SHA256SUMS 825 B · blake3
6af9f6892d8b· 15 downloads · built by run #126 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.0-linux-arm64.tar.gz 2.2 MiB · blake3
a58caecb5eb6· 5 downloads · built by run #126 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.0-linux-riscv64.tar.gz 2.3 MiB · blake3
badb0111aef5· 5 downloads · built by run #126 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.0-linux-x86_64.tar.gz 2.5 MiB · blake3
a97cf4f1a502· 6 downloads · built by run #126 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.0-macos-arm64.tar.gz 2.3 MiB · blake3
59538952e8eb· 5 downloads · built by run #126 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.0-macos-x86_64.tar.gz 2.5 MiB · blake3
0a566fd2c9bb· 6 downloads · built by run #126 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh-0.4.0-windows-x86_64.zip 6.1 MiB · blake3
db43dd9da854· 5 downloads · built by run #126 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.4.0_amd64.deb 1.9 MiB · blake3
bb9d0b41afd6· 4 downloads · built by run #126 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.4.0_arm64.deb 1.6 MiB · blake3
c072440800cd· 5 downloads · built by run #126 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - oh_0.4.0_riscv64.deb 1.7 MiB · blake3
f4f0cd4bc5f7· 5 downloads · built by run #126 dist · signed receipt by earth-1 (OxygenFlow runner) · provenance - Source (v0.4.0.tar.zst)
- Source (v0.4.0.zip)
OxygenHub and oh 0.3.1 v0.3.1 · ✔ signed by Andy McCall · andymccall ·
Trust and auditOxygenHub 0.3.1 and oh 0.3.1, pinning Oxygen 0.3.1. OxygenFlow built the release files, and the trust page shows each one as attested.
OxygenFlow
- Run triggers. A pipeline's
onblock chooses which events start each job: pushes and tags by glob, manual runs, and cron schedules. - Time limits. A per-job
timeout, plus site-wide limits on a new admin runner settings page. - Scope. A push runs only the jobs whose
scopeit touched. - Cancel. A run can be cancelled with
oh run cancel Nor the Cancel button on the run page, and its runner stops the job. A newer push to the same bookmark cancels that bookmark's runs still going.
Hub
- apt repository at
/apt, signed with a dedicated oxygenhub.io key and built from the releases' .debs. The oh .deb adds the repository itself. - Release trust page: badges for what is signed and what is attested, and a graph drawn at its own size.
- Issue and proposal pages: GitHub-style sidebars, edit in place, one action row, and a card for a landed proposal.
- Accounts: admins can disable, enable and delete them.
- Look: modern form controls site-wide, and a clear done page after device sign-in.
Assets
- SHA256SUMS 825 B · blake3
e2049f814806· 19 downloads · built by run #114 dist · signed receipt by plex-1 (OxygenFlow runner) · provenance - oh-0.3.1-linux-arm64.tar.gz 2.1 MiB · blake3
8a2b5e19f626· 6 downloads · built by run #114 dist · signed receipt by plex-1 (OxygenFlow runner) · provenance - oh-0.3.1-linux-riscv64.tar.gz 2.2 MiB · blake3
26bc50931d52· 5 downloads · built by run #114 dist · signed receipt by plex-1 (OxygenFlow runner) · provenance - oh-0.3.1-linux-x86_64.tar.gz 2.3 MiB · blake3
716d3b79a5d5· 5 downloads · built by run #114 dist · signed receipt by plex-1 (OxygenFlow runner) · provenance - oh-0.3.1-macos-arm64.tar.gz 2.2 MiB · blake3
180e9a9cf685· 5 downloads · built by run #114 dist · signed receipt by plex-1 (OxygenFlow runner) · provenance - oh-0.3.1-macos-x86_64.tar.gz 2.3 MiB · blake3
4c7795bc802d· 5 downloads · built by run #114 dist · signed receipt by plex-1 (OxygenFlow runner) · provenance - oh-0.3.1-windows-x86_64.zip 5.9 MiB · blake3
07060a6e52aa· 6 downloads · built by run #114 dist · signed receipt by plex-1 (OxygenFlow runner) · provenance - oh_0.3.1_amd64.deb 1.8 MiB · blake3
6442b0c27a0b· 4 downloads · built by run #114 dist · signed receipt by plex-1 (OxygenFlow runner) · provenance - oh_0.3.1_arm64.deb 1.5 MiB · blake3
18186d6089a1· 5 downloads · built by run #114 dist · signed receipt by plex-1 (OxygenFlow runner) · provenance - oh_0.3.1_riscv64.deb 1.6 MiB · blake3
46cddcd4755d· 8 downloads · built by run #114 dist · signed receipt by plex-1 (OxygenFlow runner) · provenance - Source (v0.3.1.tar.zst)
- Source (v0.3.1.zip)
OxygenHub CLI (oh) 0.3.0 pre-release v0.3.0 · ✔ signed by Andy McCall · andymccall ·
Trust and auditPreview: formats may change before 1.0. The macOS and Windows builds are not yet signed or much tested.
What's new
- Edit a proposal and comment on one.
oh proposal edit N [-t TITLE] [-b TEXT | -F FILE]changes its title or description (its author or a maintainer), andoh proposal comment N -b/-Fadds to its conversation.oh proposal createtakes-F FILEtoo. - Edit a release.
oh release edit TAG [--title] [--notes TEXT|-] [--prerelease true|false]. oh api -X METHODsends the method asked for when there is no body.- Built on oxygen 0.3.0, which brings fetch saying when a bookmark is behind, one remote not named
originused by default, and the rest ofoxy0.3.0's changes.
Downloads
| Platform | File |
|---|---|
| Debian, Ubuntu (x86_64) | oh_0.3.0_amd64.deb: sudo apt install ./oh_0.3.0_amd64.deb |
| Debian, Ubuntu (arm64) | oh_0.3.0_arm64.deb |
| Linux x86_64 / arm64 | oh-0.3.0-linux-x86_64.tar.gz, oh-0.3.0-linux-arm64.tar.gz (glibc 2.28 and later) |
| macOS Apple Silicon / Intel | oh-0.3.0-macos-arm64.tar.gz, oh-0.3.0-macos-x86_64.tar.gz, then xattr -d com.apple.quarantine oh |
| Windows x86_64 | oh-0.3.0-windows-x86_64.zip |
Check downloads with sha256sum -c SHA256SUMS --ignore-missing. oh --version prints 0.3.0 (v0.3.0).
Assets
- SHA256SUMS 642 B · blake3
53174fd80a33· 18 downloads - oh-0.3.0-linux-arm64.tar.gz 2.1 MiB · blake3
1f965f3408d0· 5 downloads - oh-0.3.0-linux-x86_64.tar.gz 2.3 MiB · blake3
a2acd0839e7e· 5 downloads - oh-0.3.0-macos-arm64.tar.gz 2.0 MiB · blake3
3223af433190· 6 downloads - oh-0.3.0-macos-x86_64.tar.gz 2.1 MiB · blake3
eed0953adca7· 5 downloads - oh-0.3.0-windows-x86_64.zip 5.9 MiB · blake3
f28d61211e3c· 6 downloads - oh_0.3.0_amd64.deb 1.8 MiB · blake3
e5c653a18738· 4 downloads - oh_0.3.0_arm64.deb 1.5 MiB · blake3
9b8a7288e2c2· 4 downloads - Source (v0.3.0.tar.zst)
- Source (v0.3.0.zip)
OxygenHub CLI (oh) 0.2.0 pre-release v0.2.0 · ✔ signed by Andy McCall · andymccall ·
Trust and auditPreview: formats may change before 1.0. The macOS and Windows builds are not yet signed or much tested.
What's new
- One sign-in for
ohandoxy.oh auth login --with-hub https://oxygenhub.iokeeps its token in oxy's credential store, andohreads it from there. So signing in with either tool signs in both, andoxy auth status/oxy auth logoutcoverohtoo.~/.config/oh/config.tomlnow holds only the default hub. - Built on oxygen 0.2.0, which brings remote bookmarks by name, clones of the repository's default bookmark, and the rest of
oxy0.2.0's changes.
Downloads
| Platform | File |
|---|---|
| Debian, Ubuntu (x86_64) | oh_0.2.0_amd64.deb: sudo apt install ./oh_0.2.0_amd64.deb |
| Debian, Ubuntu (arm64) | oh_0.2.0_arm64.deb |
| Linux x86_64 / arm64 | oh-0.2.0-linux-x86_64.tar.gz, oh-0.2.0-linux-arm64.tar.gz (glibc 2.28 and later) |
| macOS Apple Silicon / Intel | oh-0.2.0-macos-arm64.tar.gz, oh-0.2.0-macos-x86_64.tar.gz, then xattr -d com.apple.quarantine oh |
| Windows x86_64 | oh-0.2.0-windows-x86_64.zip |
Check downloads with sha256sum -c SHA256SUMS --ignore-missing. oh --version prints 0.2.0 (v0.2.0).
Assets
- SHA256SUMS 642 B · blake3
fad95a7ab079· 12 downloads - oh-0.2.0-linux-arm64.tar.gz 2.1 MiB · blake3
39280992ba76· 5 downloads - oh-0.2.0-linux-x86_64.tar.gz 2.3 MiB · blake3
5fd7460e5bd2· 6 downloads - oh-0.2.0-macos-arm64.tar.gz 2.0 MiB · blake3
1dead24e269f· 5 downloads - oh-0.2.0-macos-x86_64.tar.gz 2.1 MiB · blake3
855104a6967c· 5 downloads - oh-0.2.0-windows-x86_64.zip 5.8 MiB · blake3
caf9ce22ae54· 6 downloads - oh_0.2.0_amd64.deb 1.8 MiB · blake3
c704232c0144· 7 downloads - oh_0.2.0_arm64.deb 1.5 MiB · blake3
b4bd200408ab· 4 downloads - Source (v0.2.0.tar.zst)
- Source (v0.2.0.zip)
OxygenHub CLI (oh) 0.1.0 pre-release v0.1.0 · ✔ signed by Andy McCall · andymccall ·
Trust and auditThe first release of oh builds, cross-compiled from Linux. Preview: formats may change before 1.0, and the macOS and Windows builds are neither signed nor much tested yet.
| Platform | File |
|---|---|
| Debian, Ubuntu (x86_64) | oh_0.1.0_amd64.deb: sudo apt install ./oh_0.1.0_amd64.deb |
| Debian, Ubuntu (arm64) | oh_0.1.0_arm64.deb |
| Linux x86_64 / arm64 | oh-0.1.0-linux-x86_64.tar.gz, oh-0.1.0-linux-arm64.tar.gz (glibc 2.28 and later) |
| macOS Apple Silicon / Intel | oh-0.1.0-macos-arm64.tar.gz, oh-0.1.0-macos-x86_64.tar.gz, then xattr -d com.apple.quarantine oh |
| Windows x86_64 | oh-0.1.0-windows-x86_64.zip |
Check downloads with sha256sum -c SHA256SUMS --ignore-missing. oh --version prints 0.1.0 (v0.1.0). The README has the details.
Assets
- SHA256SUMS 642 B · blake3
1f92aa24d745· 17 downloads - oh-0.1.0-linux-arm64.tar.gz 2.1 MiB · blake3
1912b9d6830f· 4 downloads - oh-0.1.0-linux-x86_64.tar.gz 2.3 MiB · blake3
387ea83ccf03· 5 downloads - oh-0.1.0-macos-arm64.tar.gz 1.9 MiB · blake3
9075fd2d625e· 5 downloads - oh-0.1.0-macos-x86_64.tar.gz 2.1 MiB · blake3
3aa3a9a716a4· 5 downloads - oh-0.1.0-windows-x86_64.zip 5.6 MiB · blake3
f6ca520b33e5· 5 downloads - oh_0.1.0_amd64.deb 1.7 MiB · blake3
ae59a421a3f2· 4 downloads - oh_0.1.0_arm64.deb 1.5 MiB · blake3
1a5ec83029a9· 4 downloads - Source (v0.1.0.tar.zst)
- Source (v0.1.0.zip)