Changes touching this path

  • the forge ingest stops writing a row per statement: write_rows issued one INSERT per object, tree entry, edge, repo change and path touch, about a million round trips for the 620-change push of this 1,600-path repo that timed out at the client 270 s wait in #2388. each table now takes one INSERT SELECT FROM UNNEST ON CONFLICT DO NOTHING per call, tree_entry one per manifest the call itself inserted (a manifest row is only ever written with its entries in one transaction, the memory store already keeps first-arrival entries, and the comment says what would break that), with the conflict clauses, refuse_burned first, the G5 order, per-change parent and predecessor ordinals and path_touch and object order kept. a Statements trait lets a counting wrapper stand in for the sealed GenericClient, and a pin holds 16 and 160 entries to the same 9 statements, red under per-row tree_entry, objects, path_touch and parents and under rewriting a held manifest, each restored. measured on a throwaway Postgres 18, 600 changes of 1,600 paths: 80.0 and 82.5 s before, 13.5 and 14.3 s after. workspace suite 4549 passed over 142 binaries, 13 ignored, and bash ci/local.sh green against Postgres 18 (4549 passed, site live suites 67). no migration; owes a forge deploy (#2391) 9f32e5e1 · 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.