Changes touching this path
- the control that proved its claim by reading a process-global stops depending on what an unserialised sibling wrote, and the claim gets STRONGER rather than weaker: it is now two positions over the same history, cloned from the same bundle, differing ONLY in depth, asked the same question through the same status call with the same opts in the same process, and answering DIFFERENTLY - so the contrast rules out ANY single shared authority rather than one whose value the test happened to observe, and nothing in the file reads shallow_notice any more. the other two options are rejected with their reasons at the site: setting the global locally MANAGES the race rather than removing it, because the window between the set and the read is open to any sibling open_at and could not be shown closed, and a mutex would be a lock existing only because the TEST reads a static that the production path, after #1828, no longer reads at this site. the #1828 narrowing is not weakened, and that was READ rather than assumed - 87797fe moved FRONTIER_WIDTH to one consumer, the dispatcher that holds no Workspace, and made every Workspace-holding caller derive from the frontier it already holds, which is exactly what the new control pins. the acceptance mutation proves the control still bites: pointing the status arm back at the process-global is RED five runs out of five at 7 passed 1 failed, and a second mutation proves the complete-position half is not decoration by reddening at the other assertion, so each half bites on its own. the verification carries its OWN positive control, because a green run under siblings proves little on its own: an aggressor thread doing nothing but opening SHALLOW positions in a loop, with the OLD assertion recorded but not asserted, shows the old control FAILING ten times out of ten in exactly the runs where both new assertions PASS - a direct demonstration that the old one depended on sibling writes and the new one does not. sixty-five full-file runs, sixty-five green: twenty-five consecutive, and forty more run directly with test-threads eight under eight concurrent spinners, since the flake is scheduling-dependent - with the COUNT read every run, so a filtered-to-nothing ok could never read as a pass. the file has EIGHT tests rather than the five the ticket assumed, and exactly one ever read the global: five are library-only and WRITE it without reading it, and two go through a subprocess that carries its own static, which is why they never flaked. that is recorded as a SHAPE rather than as a list, because a list of safe tests is one added test out of date. and the residual is stated rather than buried: the mutation red is empirical rather than structural, since under the wrong build a sibling could in principle flip the global between the two adjacent calls - a false green under a DELIBERATE mutation, which is strictly cheaper than the false red on a correct build that this ticket exists to remove (#1864)
67d2b79e · 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.