Changes touching this path
- the ordered bulk load becomes a PRIVATE CONSTRUCTOR rather than a deleted guard: from_parents_first consumes a WHOLE ITERATOR from an empty graph, so parents-first is a property of one sequence handed over ONCE rather than of an interleaving on a live graph, and a caller holding only SOME nodes in order HAS NO DOOR TO SPELL THAT WITH. insert keeps its scan, stays correct under any order, and its doc now names the three callers that need it. the precondition is CHECKED rather than stated - a debug_assert running exactly the scan release no longer pays - and the new door is pinned against INSERT ITSELF on a fork, merge and two-tip DAG rather than against a typed-out literal, so the two agree by construction. the ticket own instrument premise was WRONG AND THE TREE ALREADY SAID SO: it named repo_open, but measure.rs and the fixture name #1548 BY NUMBER where they explain that --open is ONE CHANGE DEEP, so the quadratic term is ZERO there, and that --graph-load was ADDED BY #1571 BECAUSE #1547 AND #1548 BOTH READ FLAT AGAINST IT. measured anyway to confirm: 2.02 against 2.11 ms, overlapping, flat. against the instrument that can see it the change MOVES - 10.367 to 9.228 ms at depth 1024, minus 11.0% with DISJOINT SPREADS, and 61.986 to 38.404 ms at 4096, minus 38.0%, the win growing with depth exactly as the sum over k predicts. so the park clause does not fire, and the sizing guess of single-digit percent below resolution was wrong in the direction that matters. a NEW correctness finding keeps the scan where the ticket only argued from a missing instrument: the persist rewrite is NOT parents-first, because its two loops are two parents-first sequences CONCATENATED, so a parent held only in memory arrives after a child already read off a shallow on-disk graph - that caller needs the scan on correctness grounds and the persist win is explicitly NOT CLAIMED. record and record_unauthored are left alone too, since each is ONE insert per call and never a loop, so there is no quadratic term there to remove (#1548)
4e248905 · dbf3dbe6…
Renames are not followed. loot's tree maps a path to an address, so a rename is a delete and an add. This list is the history of the name, not of the bytes.