Changes touching this path

  • a forge push no longer writes an index over every tree entry: migration 0031 drops tree_entry_by_object_manifest and keeps repo_object, the addresses each repo tree names, derived by a trigger on repo_change and backfilled under a lock, and the fetch residue (repo_referenced_objects) and each tier object and tombstone views read it by key, where they asked tree_entry by address. on a throwaway Postgres 18 seeded with 1,400 versions of 7,400 paths, the tree insert of a one-change push after a checkpoint went from 373-412 ms, about 8,000 pages dirtied and 49 MB of WAL to 61-66 ms, about 300 pages and 3.3 MB, the trigger adding 12-14 ms to the repo_change insert; the residue asked for 2,200 addresses went from 286-327 ms to 2.9-4.4 ms. ADR 0102 records the measurements, the levers that did not move it (COPY, a narrower index, hash partitioning) and why content-addressed tree nodes and delta manifests are deferred. pinned: every_index_on_tree_entry_leads_with_the_manifest_id, repo_object_holds_the_addresses_each_repos_trees_name, the_residue_asks_repo_object_by_key_and_never_the_tree, every_view_of_an_address_asks_repo_object_by_that_address_and_never_the_tree, migration_thirty_one_backfills_the_set_from_the_trees_already_on_file and two migrate.rs guards over the migration text; red under named mutations, each restored: the index kept (2 failed and 3 passed over the lib pins), no trigger (2 and 3, and member_read 1 failed and 8 passed), the residue back on the join (1 failed and 6 passed), the owner object view back on the tree (member_read 1 and 8, the view guard 1 and 4), and no backfill (1 failed and 9 passed). the rls and member_read fixtures file a tree before its change, as the forge does. ci/local.sh green, cargo test with the live suites 4984 passed over 145 test result lines with 15 ignored, and the site live suites 101 passed. owes a forge deploy, which applies migration 0031 (yznpntky) 92bb0631 · 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.