Rules & effects
Every change to /git/* handling inside the window, next to what the log did afterwards. The claim stays narrow. These are observed transitions, not attribution.
The timeline
Each entry comes from data/events.csv and cites evidence in the log. Anything without evidence in the log stays off this list.
Share of requests aborted
Aborted is HTTP status 0, the value abort writes to the access log. Dashed lines mark each change.
Before and after each change
Three days before each event date against three days from it, per class. Only classes with meaningful volume in either window are listed.
Outcome by class, whole window
How much of each class was served, and how much was aborted.
One rule in this window was not effective for as long as it looked. @fetchfleet_ua never matched anything. Its pattern contained spaces and no quotes, so the Caddyfile tokenizer split it into header matchers keyed on strings such as Chrome/142.0.0.0 and OS that no request carries. It served 7,259 rotator requests before the repair on 2026-09-26. A rule in the configuration is not a rule in effect.
Open items as of the last reload. The rotator exceeds every list in place. The residual sits in consumer cable ranges, where a block costs real subscribers. The rate limiter (git_burst, 60 requests per hour per /24) bounds bursts and does not stop a fleet that uses each address once.