OXYGENHUB

Backlog: O10c done (oxygen#2); O10d and O10e split out e1dc6d6aad4f

Author
Andy McCall @andymccall <[email protected]>
When
· 2026-09-28 16:41 UTC
Signature
✔ signed by Andy McCall
Hash
e1dc6d6aad4f8c6807e12dc4d03c3af17bdadb17e31533b17745b3c31f81e829
Depends on
2cc29048b84a 540b229288ba 72bf8a02369f 75036530b621 e7ddd552b619
Depended on by
65aebbe49056 f97d3556db5f
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 +16 −1
…
52 unchanged lines
53 53
- [x] O10a Heads at scale (first part of O10): `State::maximal` compared every pair of heads (quadratic; about 1.5 s per call at 4 500 heads, called three times per commit); now one walk. Commit reuses the snapshot's base state instead of loading it again.
54 54
- [x] O10b Parallel snapshot work: rendering the base state's files, building file graphs from a checkpoint, and reading working-copy files now run on every core (rayon).
55 55
- [x] O12 `log_for_path_in` and `blame_in` rebuild and re-render the whole state on every call, and walk every change: take an already loaded state, stop at the first change touching the path when only the newest is wanted, and benchmark it (found in H16).
56 -
- [ ] O10c Snapshot without the whole base (rest of O10): load only the file graphs a snapshot needs (a checkpoint split per file or indexed), skip reading and rendering files whose stat matches a manifest written for the same base, cache materialized states. Needs a spec change to the checkpoint format; target spec §25.
56 +
- [x] O10c Snapshot cost in the in-memory state: faster graph hashing, no unused predecessor map, inline successor sets, lines moved not copied; `OXY_TIMINGS=1` phase timings.
57 +
- [ ] O10d Skip reading text files whose stat matches a manifest that recorded them equal to the base (racy entries, those modified at or after the manifest was written, are still read); test that no edit is ever missed.
58 +
- [ ] O10e Checkpoints readable per file so a snapshot loads only the file graphs it needs; cache materialized states. **Changes the checkpoint format (spec §25): needs Andy's agreement before starting.**
57 59
- [x] O5 Concurrency: two processes committing, snapshotting and pushing on one repository; locks hold, nothing is lost.
58 60
- [x] O6 Error messages audit: every user-facing error says what to do next; `oxy doctor` checks identity, config, remotes, CA files, hub reachability.
59 61
- [x] O7 Shell completions (`oxy completions bash|zsh|fish`) and man pages generated from clap.
…
188 unchanged lines
248 250
  - Each README has a Settings table.
249 251
  - Every CHANGELOG entry is dated from the history.
250 252
  - `test/docs.test.mjs` in both fails if a setting is missing from the README or the newest CHANGELOG entry is not the package version. Both checks green (18 tests each).
253 +
- 2026-09-28 O10c done (oxygen#2, closed by the change), after splitting it.
254 +
  - **Measured first.** New `OXY_TIMINGS=1` phase timings, documented in the guide. At 10 000 files and 200 changes, loading the base state was about 790 of 1 230 ms. A checkpoint did not help: decoding it took 680 ms, like replaying the history, since both build the same in-memory graphs.
255 +
  - **Fixed without a format change:**
256 +
    - A seeded fast hasher for the graph maps (`fasthash.rs`, tested).
257 +
    - The predecessor map was written for every line and read nowhere; it is removed.
258 +
    - An inline edge set replaces a `BTreeSet` per vertex.
259 +
    - Lines are moved in with one lookup each.
260 +
  - **Result.** Both builds run alternately on the same load, medians: clean status 0.96 s to 0.52 s, one-file commit 0.99 s to 0.51 s, peak memory 657 MB to 239 MB (docs/benchmarks.md).
261 +
  - Gates green for oxygen and oxygenhub; release binary rebuilt; hub redeployed.
262 +
  - The rest is split into:
263 +
    - O10d: skip reading files that are clean by the manifest; next.
264 +
    - O10e: per-file checkpoints, a spec §25 format change. **Andy: this one waits for your agreement.**
265 +
  - Also this iteration: V6 to V8 had been installed into the Rust profile only; now into the default profile too, as the loop asks.