Changes touching this path

  • the forge answers where a request spent its time: the new loot_forge::timing records a span per step, each ended where its step ends so the spans sum to the total, the last named answer or until_error, plus counts beside them, and a repo-scoped route whose steps report returns them as a Server-Timing header and writes the same text as one INFO line with the repo, endpoint and status, names durations and counts only. /ingest (ppwukxrx) and /stow name their handler and prepare steps, the ancestry check, publish, proposals, attestations, jobs, and on Postgres each statement family inside the transaction from store.open to store.heads_read, then commit and wake, and count the tree_entry rows written and the parent tree rows read. /fetch (zxkpzxvz) names the serve walk steps from a new Phase enum whose words the budget refusals now use, and counts each object read as a cache_hit or cache_miss with summed times, the time keeping copies took and the width, tallied per thread through the new BlobStore::get_with_source and reported on a refused walk too. CORS exposes Server-Timing and each answer carries Timing-Allow-Origin *, as the CORS layer already answers every origin. measured on a local Postgres 18 of 7.6M tree_entry rows, the ingest of one change onto a 7,240-path tree took 192 to 566 ms, 55 to 79 percent of it the 7,240 tree_entry rows written whole (106 to 447 ms), and a Tickets-shaped walk of 5,463 wants spent 77 to 81 ms outside the blob reads; against a plain-HTTP stand-in bucket at 50 ms a get the real S3 client read 2,048 objects in 6.54 s at 16 wide and 1.66 s at 64. sweep 2 fix-ups of rxxtvlvl: only the serving process opens the blob cache (Forge::serving_from_env; Forge::from_env, and so --reap-runner-deposits, reads the bucket bare) and an open removes no temp file younger than STALE_TEMP; the integrity sweep reads the bucket under the cache through blob::tier_of; the budget phase test covers every Phase by construction, not four by hand; and the MAX_CONCURRENT_GETS doc no longer calls 44 ms a floor. the Dockerfile makes /var/cache/loot-forge, owned by the forge user, for a cache volume. red under named mutations, each restored: spans measured from the start (6 passed and 1 failed over the timing tests, 0 and 2 over the two http tests), every read tallied a miss (0 and 1, and 0 and 1 over http), reads reported only when the walk answered (0 and 1), the sweep reading through the cache (0 and 1), an open removing fresh temp files (0 and 1), a refusal naming the span token (0 and 1), Server-Timing not exposed (0 and 1), no header on a refusal (0 and 1), held manifests counted as tree rows (0 and 1, against a throwaway Postgres 18). cargo test green, 4800 passed over 145 binaries with 13 ignored, and loot-forge green at 696 passed against a throwaway Postgres 18. owes a forge deploy; it also carries comments on vrxsvlsy, zkkkyqun and rxxtvlvl, the new tickets zxkpzxvz and uqooxqvx, and the resolution of zykuxznx, whose gzip change is scripts 3a21f24 (ppwukxrx) 2aacc76d · dbf3dbe6…
  • the Tickets view /fetch wants lane no longer falls to the residue query: since vrxsvlsy it names its heads as have, so every want reached repo_referenced_objects, whose plans on Postgres read every tree_entry row naming a want, every manifest of the repo, or the whole table; bundle_within now asks the new MetadataStore::referenced_by_versions of the manifests of the tips of what the caller named as held (serve::held_tips, tips because a CLI pull declares its closure) before the residue query, on Postgres pg::meta::REFERENCED_BY_VERSIONS, read one named version at a time and plan-pinned in pg::tests, and the answer is the same repo-scoped set. measured against a throwaway Postgres 18 with 2,200 ticket files of a 7,240-path head as wants and the head as have, the wants span went from 21.8-103.6 ms to 7.1-7.5 ms on the perf hunt fixture and from 575-1,820 ms to 11.4-15.2 ms on a repo whose ticket files sit in up to 1,000 manifests (the ADR 0075 zsxqmrtm amendment, and a note in ADR 0098). a /offer or /fetch step that fails now ends its own span before until_error; a budget refusal says how long since the walk began, keeping its leading words, and its objects-read count is taken once the gets in flight end, so it equals the cache_hit and cache_miss tallies summed; the fetch_latency cold test runs under an unspendable budget and asserts the fit from the width the tier saw instead of the wall clock. text: the timing module and CONTEXT.md say what a fact is and where facts are named instead of listing them (timing::count is timing::fact, Got.keeping is keep_time), the phases doc says the runner walk laps nothing and tallies no reads, and the lib.rs cache sentence names only the serving process. judgement calls: the route and the Tickets view build the ticket file list with the new site lib/workbench/ticket-files.ts and compare it by content, manifest.ts shares one private read, the wasm JS names are readTicketList and readWholeTickets, and ADR 0002 and the spike-crdt ignore reason say --include-ignored. red under named mutations, each restored: over the 16 offer_cost tests, no heads step (13 passed and 3 failed) and every named version read (15 and 1); the memory store reading every version (1 and 1 over the 2 conformance runs); the plan pin without OFFSET 0 (2 and 1); over the 27 serve tests, a failing step not lapped (26 and 1), the count taken at the refusal (26 and 1), the old spent wording (25 and 2), 16 in flight (26 and 1); the site ticket file compare as JSON text (2 and 1). the Postgres statement without its repo_id condition stayed green, as the RLS repo binding hides other repos. cargo test green, 4811 passed over 145 test result lines with 14 ignored, loot-forge green at 702 passed against a throwaway Postgres 18, the site gate green at 889 passed and its pg suites at 85. owes a forge deploy and a site deploy; it also carries the new ticket zsxqmrtm and comments on kwlxstko and zxkpzxvz (zsxqmrtm) ed102f51 · dbf3dbe6…diff

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.