OXYGENHUB

Backlog: metalgear feedback as M1 to M10; M1 and M2 done c1fe1fb25021

Author
Andy McCall @andymccall <[email protected]>
When
· 2026-09-28 22:13 UTC
Signature
✔ signed by Andy McCall
Hash
c1fe1fb2502163ba920d3a32d3f613f952f1c0f9c91e2e79d5abd4a912cdb398
Depends on
28fee1c9eb6c 57dfc51417fd 75036530b621 b037ade16953
Depended on by
ed5b9ef990a3 6a81dbab471d c2d790f9fa95 0bb901cbd059 08b388841556 73609c9f7f50 ce3e73ce9020 85ef828b6bf0 2dd42fa169c8 f8c695764c95
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
2 atoms, 0 tree operations, 1 file

Browse the tree at this change

modified docs/backlog-overnight-2.md +24 −0
…
63 unchanged lines
64 64
- [ ] F6 Faster runs: the runner takes one job at a time (oxygenhub is about 14.5 min to green, 8.5 of them the release build), so run independent jobs in parallel within the runner's CPU and memory, and reuse a build tree between jobs of one run (clippy, test and build compile the same crates).
65 65
- [x] F5 Required checks: each repository's default bookmark requires its pipeline's checks to land, and the work loop pushes and waits for green instead of gating only locally.
66 66
- [x] O10e Checkpoint payload version 2: large file graphs as shared blobs named from an index, read and decoded in parallel; readers accept both versions (spec §11). Agreed by Andy on 2026-09-28.
67 +
- [x] M1 (metalgear feedback 1, reported by Andy) Bookmarks with `/` in their names could not be pushed: attestation and checkpoint files are now flat, escaped names (oxygen#12). The hub is pinned to the fix and deployed.
68 +
- [x] M2 Flow on/off per repository in the hub (Andy's request; feedback 10): a switch in repository settings for site admins, with hub.toml's `[flow] repos` as the default; no restart.
69 +
- [ ] M3 Start a run without moving a bookmark (feedback 9): "Run pipeline" on a state and "Re-run" on a finished run, in the web and the API.
70 +
- [ ] M4 Guest `/dev/fd`, `/dev/stdin|stdout|stderr` links in flow-init (feedback 15), and job variables `FLOW_STATE`, `FLOW_HEADS`, `FLOW_BOOKMARK`, `FLOW_RUN`, `FLOW_REPO` (feedback 17).
71 +
- [ ] M5 Sandbox-level `env` in pipeline.kdl, and the image's environment kept through `flow rootfs import` (feedback 16).
72 +
- [ ] M6 Flow API: `GET /repos/{o}/{n}/flow/runs`, `/flow/runs/{n}` with jobs, a job's log; checks by head hash as well as state (feedback 11). JSON 404s under `/api/v1` (feedback 13). Per-repository run numbers, or a note (feedback 12).
73 +
- [ ] M7 Server push errors name the operation and bookmark and log the error chain (feedback 2).
74 +
- [ ] M8 `merge` updates a working copy that is clean against the pre-merge base; `checkout` tells "removed by you" from "not yet written"; `bookmark switch --help` says what happens to uncommitted work (feedback 3).
75 +
- [ ] M9 Small oxy items: `oxy describe` (tag, else bookmark + change, `+dirty`) and tags accepted where a change is (feedback 4); `commit -F` (6); `submodule status` shows added-but-unpinned and has `--json` (5, 7); doctor before the first commit (8).
76 +
- [ ] M10 Hub: say "signed by an unlinked key" on changes and in `/api/v1/user`, pointing at Settings (feedback 14).
67 77
- [ ] P1 **Conflict resolution on OxygenHub** (Andy's list, item 1). A resolver page for a conflicted state:
68 78
  - Per conflict region: pick a side, several sides, or none; edit freely; tree conflicts too (keep a candidate).
69 79
  - Commit the result as a `kind = resolution` change on the bookmark, through the web-edit path. Signing: sealed when the author next pushes, or "resolve in VS Code" hands off to oxygen-vscode.
…
366 unchanged lines
436 446
  - **Tests:** 3 new; 157 core tests pass, clippy is clean.
437 447
  - **At 10 000 files:** a clean status takes 0.22 s instead of 0.55 s, and 51 MB instead of 259 MB. Log takes 0.38 s instead of about 0.75 s. Diff and commit are unchanged at about 0.57 s.
438 448
  - **Split:** O10h (a lazy base for commit and diff, and cached materialized states) is added to the backlog.
449 +
- 2026-09-28 **Metalgear feedback.** Andy's other project reports what it finds in `~/oxygen_feedback.md`; I watch it and act on it. Its items are M1 to M10, placed ahead of P.
450 +
  - **M1 done** (oxygen#12). Pushing a bookmark with `/` in its name failed with "No such file or directory".
451 +
    - Cause: reference attestations and checkpoint pointers are files named after the bookmark, and nothing created the subdirectory.
452 +
    - They are now one flat file each, with `/` escaped (`%2F`), so `feature` and `feature/x` coexist.
453 +
    - A test pushes and checkpoints both.
454 +
    - Pinned through oxygenflow into oxygenhub and deployed. All three OxygenFlow runs are green.
455 +
  - **M2 done** (oxygenhub#22, Andy's request). Settings → OxygenFlow has on, off or site default (hub.toml's `[flow] repos`), and needs no restart.
456 +
    - Site administrators change it; repository admins only see it.
457 +
    - Audited as `repo.flow`; migration 0018.
458 +
    - Two tests; hub gate green; deployed; run green.
459 +
  - **Andy asked urgently** to enable Flow for doomsdayone/metalgear.
460 +
    - My edit of hub.toml on Earth was refused by the permission check, so I did not make it.
461 +
    - The line `"doomsdayone/metalgear"` is now in `[flow] repos`, added outside this loop, and run #37 there passed.
462 +
    - From now on the new setting does this without editing hub.toml.