OXYGENHUB

Log P4d1 (Flow artifacts) as done 9df6217f5f47

Author
Andy McCall @andymccall <[email protected]>
When
· 2026-09-29 08:10 UTC
Signature
✔ signed by Andy McCall
Hash
9df6217f5f4749afbf52c40f1032cdbbde91dd3b9de8bcc97fc383012bf59842
Depends on
28fee1c9eb6c 75036530b621 7dc9f65b6546 fc1a466a1e66
Depended on by
d82f153bdf7e
In bookmarks
agents-in-readme bare-hashes carried-not-removed carry-identical doctor-trust identical-sides keyless-tags main merge-remote-bookmark only-help-103 paths-for-resolutions-and-amend push-notes show-stat subrepo-pin-state switch-says
In tags
v0.1.0 v0.10.0 v0.11.0 v0.2.0 v0.3.0 v0.3.1 v0.4.0 v0.4.1 v0.4.2 v0.4.3 v0.4.4 v0.4.5 v0.4.6 v0.5.0 v0.5.1 v0.6.0 v0.7.0 v0.8.0 v0.9.0
Edits
3 atoms, 0 tree operations, 1 file

Browse the tree at this change

modified docs/backlog-overnight-2.md +8 −1
…
106 unchanged lines
107 107
  - P3b: drag and drop on proposal bookmarks only. Dropping a change onto another proposes a squash, dragging a dependent chain proposes a rebase. The hub produces a plan and the author's oxy or oxygen-vscode applies and signs it (V6 has split, squash and rebase). Reordering independent changes means nothing and is not offered.
108 108
- [x] P4a The `receipt` object and attestation in the Oxygen spec and oxy-core: a signed receipt verifies on its own; the repository keeps receipts by state; `oxy receipt list|show|export|verify|import` (first part of P4, below).
109 109
- [x] P4c The runner signs each receipt with its own identity; the hub verifies it against its known runner keys, keeps it in the repository, and shows it on the run, the check and the change.
110 -
- [ ] P4d Flow `output` and artifacts: a job's declared outputs become blobs named by its receipt, and a release asset links to the receipt that built it.
110 +
- [x] P4d1 Flow `output` and artifacts: a job's declared outputs become repository blobs named by its signed receipt, listed and downloadable on the run page.
111 +
- [ ] P4d2 A release asset links to the receipt that built it (by content), and an artifact can be attached to a release from its run.
111 112
- [ ] P4 **Signed Flow receipts**:
112 113
  - A `receipt` object type in the Oxygen spec.
113 114
  - A runner identity whose key (composite Ed25519 + ML-DSA-65) signs each receipt.
…
597 unchanged lines
711 712
  - **Storage and pages:** kept receipts go into the repository through `add_receipt`, under the repository's write lock. Run pages link them with the signer, change pages list their state's receipts, and `/{o}/{n}/receipts/{attest}` downloads one.
712 713
  - **Tests:** a hub end-to-end test (kept, wrong key, wrong state, download, pages) and a runner key test. flow-core's receipt and the Oxygen object hash the same.
713 714
  - **Deployed:** hub and runner. Live, hub run 30's four jobs all have signed receipts, and a downloaded one passes `oxy receipt verify`. Flow and hub runs are green.
715 +
- 2026-09-29 **P4d1 done** (oxygenflow#11, oxygenhub#38, oxygen#24). P4d was split into P4d1 and P4d2.
716 +
  - **Pipeline:** `output { artifact "name" { path "/src/…" } }` allows up to 16 artifacts, sorted and part of the job hash only when present. Paths on tmpfs mounts are refused.
717 +
  - **Runner:** after a passing job, the runner reads each artifact from the job's disk with `debugfs` (no root; at most 512 MiB). It uploads it, checks that the hub's blob matches `Repo::blob_ref`, and names the blobs in the receipt's `outputs`. A missing artifact fails the job, which then gets no receipt.
718 +
  - **Hub:** uploads go through `POST /api/v1/flow/jobs/{id}/artifacts/{name}` and must be declared. The hub keeps each one as a repository blob and records it in `flow_artifacts` (path, size, BLAKE3). A receipt must name exactly the uploaded blobs. Run pages list artifacts and link `/flow/{n}/artifacts/{job}/{name}`.
719 +
  - **Dogfood:** oxygen's build job keeps `target/release/oxy`. Live, run 67's 16 MB binary downloads and runs, and the build job's signed receipt names it as its output.
720 +
  - **Tests:** parsing, debugfs read-back from an ext4 image, and a hub end-to-end test. All runs are green.