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.

Zero until 2026-09-19. On that day the named crawler list starts to abort, and the share reaches . The share then falls while the absolute count rises, because the rotator sits outside that list and adds to the denominator.

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.

Read the 2026-09-19 rows for ClaudeBot and PerplexityBot. Served volume falls to zero and stays there. Read 2026-09-24 for the rotator, which rises on the same day Applebot falls.

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.