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…

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.