Changes touching this path
- closure_complete, the walk the implicit-capture door takes in front of each bare mutating verb, reads each ancestor address off its manifest frames through Manifest::addresses, the spelling locally_missing_objects has used since #2240, where it decoded each ancestor manifest to keep only the addresses; a manifest whose frames are not provably its map, a legacy separator key or the #2273 shapes, still answers from the map. paired --closure readings at depth 1024, one loot-perf-gate --features count built per arm, interleaved, the gate reading load idle at 1 to 4 percent (peak 7): 166.1 to 167.9 ms down to 19.6 to 20.0 ms at width 200 over three rounds, and 382.7 to 383.2 down to 42.8 to 42.9 ms at width 400 over two, the gated counters the same on both arms. two new pins: a reopened repo answers both verdicts decoding no manifest, and over canonical, nested, legacy separator and the three #2273 shapes, with no hole and with each object removed, the deferred and the pre-decoded answers equal a walk over the decoded manifests, with a control that each collapsing shape reached the arm where frames and map disagree. red under mutation, counts read each time: the walk put back on values (0 passed and 2 failed), the ascent check dropped from Manifest::addresses (1 and 1, on the answer itself), the frame arm never taken (0 and 2), restored to 2 passed; the backslash condition dropped alone stays green on Windows, where Path reads a backslash as a separator and the ascent check catches the collapse, which the test doc records. no migration and no format byte moves, so this owes no deploy. the workspace suite is green (4280 passed over 137 binaries, 11 ignored) (#2281)
a2fe24af · 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.