OXYGENHUB

Backlog 3: M2 done, progress on M3, S1 and clone f59376ea413b

refs #35
Author
Andy McCall @andymccall <[email protected]>
When
· 2026-09-30 00:12 UTC
Signature
✔ signed by Andy McCall
Hash
f59376ea413b22a2ca915ea538e4272496fd20f25ea17abc989d8cca663e456d
Depends on
1681323d1dff 33e77a5526fa 7757367bedcc
Depended on by
a87c7b9d563a
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-3.md +12 −1
…
97 unchanged lines
98 98
  replay the whole change. Options: the commit writes a checkpoint;
99 99
  history-only states load graphs on demand (`State::load_graphs`).
100 100
  Target: under 300 MB and 0.4 s.
101 -
- [ ] M2 **Lines without an allocation each.** An insert's lines become
101 +
- [x] M2 **Lines without an allocation each.** An insert's lines become
102 102
  one shared buffer with line offsets (for example `Arc<[u8]>` and
103 103
  ranges) in the change and in the file graph. The file graph shares
104 104
  that buffer and does not copy it. `AtomInfo` and the edge map shrink.
…
78 unchanged lines
183 183
  - **Still far from Git**: one-file and 1 000-file status, diff and commit (2 to 5 s); switch (2 s); log (2 s); clone (110 s, 8 GB); first commit (56 s, 10 GB); fsck (4.5 GB).
184 184
    - The common cost is loading the first change's history (0.5 s) and building the tree view (0.4 s).
185 185
    - Next: a persistent per-state cache (tree view, graph keys and change set), Git's index in effect, then compact graphs (M2) and a streaming commit (M3).
186 +
- 2026-09-30 **M2 done, M3 and S1 part way** (oxygen#35). The first commit of the Linux tip now takes 40.7 to 41.6 s on a quiet Earth (S1 target: 50 s; Git: 34 to 38 s) and 4.9 GB RSS (from 10 GB).
187 +
  - **Encoding** (b7103633): each change is encoded once, the working copy's edits are moved rather than copied, and text blobs and chunk compression run on every core.
188 +
  - **Storing** (b7a090c7): texts go to the store a batch at a time.
189 +
  - **M2, lines** (086641a8): an insert's lines are one shared buffer, into which graph atoms point.
190 +
  - **Clone** (5d62fa66, 11bf3b00, 397d9f98): a local clone takes 48 s and 3.9 GB (from 96 s and 5.2 GB, and killed before that; Git: 9.6 s). The changes behind it:
191 +
    - an unedited file's graph is read off as a chain;
192 +
    - a bundle carries its changes' hashes;
193 +
    - a large change is read once per checkout;
194 +
    - a local fetch moves changes as stored.
195 +
  - **Hub and runner**: re-pinned to oxygen 397d9f98 and deployed (oxygenhub#58, a6f006ba; oxygenflow#15, 630b7fd6). The hub reads metadata or skeletons where it lists changes. Checked: /health, and the log, file history, tree and file pages.
196 +
  - **Note**: my pushes start Flow jobs on Earth, so timings under load are marked in benchmarks.md.
186 197