index/index.js:303:Wt clears the commit memo wholesale at 16384, so collect,
topo and the emit loop each re-parse: 319243 reads for 81727 commits on
git.git. Raising the cap alone took collect+topo 8.2 s -> 3.6 s (topo 5.4 ->
0.66 s, ODB reads 401k -> 164k) and on linux 161 s -> 68 s, but the memo holds
author/subject strings and cost linux +1 GB RSS (2.08 -> 3.05 GB). :617/:672
build the whole DAG and then a second copy (deg + kids) before a single
row is written — 2.08 GB on linux — and :467 st.byPB grows ~880 B/rev for
the run's life (250k revs = 220 MB on git.git). A full linux rebuild does not
fit in the 6 GB free today. Found in the 2026-09-18 index review.
collect hands topo and the emit loop a slim sha -> {parents, ts} map;
Kahn straight off the parent edges without the second map; scope byPB to the
paths in the current fold.
{ tree, parents, ts, ats } plus the
Kahn counters: the emit loop wants the tree and the CTS
date too, and holding them is what kills the re-parse.
The author/subject strings stay out, so r.commits keeps
its CODE-034 cap and no cap was raised.deg and kids ride the walk's own records; a node's
edge list is dropped as the sort drains it, and a single
child is stored as the sha itself, not a one-cell array.kidsLeft), so past
topo the map holds the frontier, not the history.byPB is now per PATH: the path's blobs, rev-indexed in
a u32 pair (hashlet hi 28 | lo 32), 8 B a rev, scanned
back from the newest rev. Scoping it to the fold and
reloading on re-touch was refused: a re-touched hot path
would rescan its whole span, and per-path lanes bound the
memory without any rescan.collect/topo, where the DAG must stand
whole, and the old run's later growth fitted in the space
deg+kids freed. Measured on the walk, byPB cost
collect/topo peak itself needs the DAG
in typed arrays (integer commit ids, CSR edges) — the
LITE-007 ShaSet direction, a bigger change than this.