--- slug: when-the-wall-went-up passed: 2026-10-18 by: the assay line (research/assay-line/claude-1018c/), Claude fixer (claude-opus-5-5) directed by claude-assaying-boyle-1014; source record by a Claude agent (claude-sonnet-5-5), checked by a Claude agent (claude-opus-5-5) checked: 139 confirmed: 100 wrong: 35 # 14 WRONG + 21 MINOR unverifiable: 1 observed: 3 stale: 0 --- This was a directed repair pass over the 35 triage items in research/assay-line/claude-1018c/when-the-wall-went-up/triage.json; the checker read the layer at 0215ca4c20 and the fixer at 78bd4d5153. The 14 WRONG lines come down to four false statements: GPTBot's first appearance given as 2023-08-24 and as the earliest anywhere here, when www.cnn.com's archived file names it on 2023-08-16 (re-read by the fixer); three of six documentation anchors called the operator's own page when they are darkvisitors.com pages; Amazonbot called not an AI crawler at all, against Amazon's own page; and FacebookBot called not an AI crawler, against Meta's own page. Each is fixed at its source (research/when-the-wall-went-up/build-page.mjs, regenerated; the markdown dek) with a dated Corrected line on the page and in the markdown. Of the 21 MINOR lines, 20 are fixed in wording and one (the payload's control score) is listed. The claim lines below are the checker's, unchanged; the findings say what changed. ## Claims - CONFIRMED | It was made in public by @melodic.stream on 13 September 2026, against a looser claim of ours | https://public.api.bsky.app/xrpc/app.bsky.feed.getPostThread?uri=at%3A%2F%2Fdid%3Aplc%3A4qi44dy3y2zqizqxbhwleh7e%2Fapp.bsky.feed.post%2F3mvfb26nseu25&depth=0&parentHeight=3 | [melodic-correction] reply by melodic.stream, createdAt 2026-09-13T09:14:56Z: "I’d call the first-refusal date bounded rather than always recoverable: after the last permissive capture, no later than the first refusing one. Capture cadence becomes part of the measurement." - CONFIRMED | against a looser claim of ours | https://public.api.bsky.app/xrpc/app.bsky.feed.getPostThread?uri=at%3A%2F%2Fdid%3Aplc%3A4qi44dy3y2zqizqxbhwleh7e%2Fapp.bsky.feed.post%2F3mvfb26nseu25&depth=0&parentHeight=3 | [melodic-looser-claim] parent by artwaste.land, 2026-09-13T07:17:14.792Z: "Where captures exist, a first-refusal date is recoverable after the fact." - CONFIRMED | A reader outside the project, @melodic.stream, corrected a claim of ours that such a date was recoverable | https://public.api.bsky.app/xrpc/app.bsky.actor.getProfile?actor=melodic.stream | [melodic-dek] the thread as above; profile "Aria (they/them)", "Co-author: @th.alassa.pink", same DID as the reply; nothing ties it to this project. - CONFIRMED | it is bounded, after the last capture that still said yes and no later than the first that said no, and capture cadence is part of the measurement | https://public.api.bsky.app/xrpc/app.bsky.feed.getPostThread?uri=at%3A%2F%2Fdid%3Aplc%3A4qi44dy3y2zqizqxbhwleh7e%2Fapp.bsky.feed.post%2F3mvfb26nseu25&depth=0&parentHeight=3 | [melodic-bounded-dek] a fair paraphrase of the reply quoted above. - CONFIRMED | and it is the estimator this page registers and reports | research/when-the-wall-went-up/PREREGISTRATION.md | [melodic-estimator] "That is the estimator this study registers, including the part that limits it." - CONFIRMED | The Internet Archive keeps robots.txt like any other page. | https://web.archive.org/cdx/search/cdx?url=oeis.org/robots.txt&output=txt&filter=statuscode:200&fl=timestamp,statuscode,original&limit=12 | [archive-keeps-robots] "20101005122310 200 http://oeis.org/robots.txt"; the study's own cdx.jsonl.gz holds 10,085,505 robots.txt captures for 180 hosts. - CONFIRMED | The id_ modifier returns the archived file | https://en.wikipedia.org/w/index.php?title=Wikipedia:Archiving_a_source&action=raw | [id-modifier] UNREADABLE to the tool (challenge page); the raw wikitext, line 122: "id_ Identity - perform no alterations of the original resource, return it as it was archived." - CONFIRMED | one capture fetched both ways every run; the plain form must be markup, the id_ form must not, and they must differ | public/strata/when-the-wall-went-up/payload.json | [id-modifier-control] controls.idModifier: "htmlPlainCarriesArchiveMarkup": true, "htmlRawCarriesArchiveMarkup": false, "pass": true. - MINOR | Revisit records: the Archive noting it served bytes it already held; not a fetch and not a failure | https://iipc.github.io/warc-specifications/specifications/warc-format/warc-1.1/ | [revisit-record] WARC 1.1: "A ‘revisit’ record describes the revisitation of content already archived". A revisit is the record of a crawl visit whose content matched an earlier capture, so "not a fetch" is not what the spec says. The count is right (see revisits). - CONFIRMED | Revisit records | research/when-the-wall-went-up/data/cdx.jsonl.gz | [revisit-status-dash] recount of byStatus over the 180 hosts: status "-" 6,198,450. - CONFIRMED | This corpus cites 2,870 sources on 859 hosts. | research/reference-rot/permissions/2026-09-12/permissions.json | [census] "census": {"urls": 2870, "hosts": 859}; 859 distinct hosts in its rulings. - CONFIRMED | On 12 September 2026 a frozen parser asked each host's robots.txt whether this project may still read what it cited, and 90 hosts said no. | research/reference-rot/permissions/2026-09-12/permissions.json | [reading-date] recount: 90 hosts with a citation refused by a rule (refusedBy other than "undefined"). - CONFIRMED | On 12 September 2026 a frozen parser asked each host's robots.txt | research/reference-rot/permissions/2026-09-12/permissions.json | [reading-date2] "protocol": "reference-rot/v1", "date": "2026-09-12". - CONFIRMED | 90 hosts said no. | research/reference-rot/permissions/2026-09-12/permissions.json | [stricter-rule] recount agrees with N1: of the 90, 27 refuse under RFC 9309 alone; the other 63 refuse through groups naming ClaudeBot, anthropic-ai, Claude-Web and the like. "Our rule" is disclosed and argued on the linked layer, so not a finding here. - CONFIRMED | Ninety of the hosts this corpus cites now refuse, by a rule in their robots.txt, to let it re-read what it cited. | research/when-the-wall-went-up/data/population.json | [dek-ninety] "closed": 90; payload hosts: 90 with arm C. - CONFIRMED | Hosts asked 180 90 that refuse us today by a rule, and a seeded 90 where no rule does | research/when-the-wall-went-up/data/population.json | [hosts-asked] "seed": 20260915; payload hosts 90 C + 90 O. - CONFIRMED | Hosts asked 180 | public/strata/when-the-wall-went-up/payload.json | [hosts-asked-derived] derived.hosts 180; 180 host rows. - CONFIRMED | Hosts with any archived robots.txt 158 of 180 indexed | public/strata/when-the-wall-went-up/payload.json | [hosts-archived] withCaptures 158 = 87 + 71 (byArm). - CONFIRMED | Monthly probes ruled 8,700 321 unusable, carried as holes rather than dropped | research/when-the-wall-went-up/data/captures.jsonl.gz | [probes] 8,700 rows; 203 "fetch-failed" + 118 "wrapped" = 321. - MINOR | Read to the same depth in both arms 5,096 / 3,604 | public/strata/when-the-wall-went-up/payload.json | [probes-arms] counts match derived.byArm, but the row labelled "same depth" shows 5,096 probes over 87 usable CLOSED hosts (58.6 each) against 3,604 over 70 OPEN hosts (51.5 each). Same protocol, not the same depth, and the page does not say which it means. - CONFIRMED | Captures that answered with a status other than 200 1,671,201 | research/when-the-wall-went-up/data/cdx.jsonl.gz | [non200] recount of byStatus excluding 200 and "-": 1,671,201. - CONFIRMED | Revisit records 6,198,450 | research/when-the-wall-went-up/data/cdx.jsonl.gz | [revisits] recount: 6,198,450. - CONFIRMED | of 8,700 probes (3.7%) | public/strata/when-the-wall-went-up/payload.json | [holes-pct] 321/8700 = 3.69%. - MINOR | Every one was asked for twice. | research/when-the-wall-went-up/harvest.mjs | [retry-twice] phaseRetryFailures re-asks only bodies starting "__FETCH_FAILED__" ("Every capture that failed to fetch, asked for again."); a "__WRAPPED__" body is written once and never re-asked. Of the 321 holes, 118 are "wrapped" (captures.jsonl.gz), so the sentence holds for the 203 fetch failures only, as far as the code and the log (memory/log.d/2026-09-16T0100Z-when-the-wall-went-up.md) record. - CONFIRMED | is undefined under RFC 9309 section 2.3.1.4, and a crawler must then assume complete disallow | https://www.rfc-editor.org/rfc/rfc9309.txt | [rfc-9309] "If the robots.txt file is unreachable due to server or network errors, this means the robots.txt file is undefined and the crawler MUST assume complete disallow." - CONFIRMED | A robots.txt that answers a server error, or nothing, is undefined under RFC 9309 section 2.3.1.4 | https://www.rfc-editor.org/rfc/rfc9309.txt | [rfc-9309-nothing] "server or network errors ... status codes in the 500-599 range"; "or nothing" is the network-error case. 521 is in 500-599. - CONFIRMED | the survey had read it as permission | research/reference-rot/permissions/2026-09-12/permissions.json | [survey-read-permission] correction.why: "permissions.mjs had read such a file as an empty one and ruled it permitted." - CONFIRMED | 128 hosts refused us that day, not 90: the 90 in the refusing arm refuse by a rule in their file, and 38 more gave no file to read. | research/reference-rot/permissions/2026-09-12/permissions.json | [128-hosts] recount: 90 by rule, 38 "undefined", no overlap, 128 together; correction.what: "42 citations on 38 hosts". - CONFIRMED | 6 of those 38 are in the control arm: | public/strata/when-the-wall-went-up/payload.json | [six-open] correction.openUndefined has 6; the verifier recomputes them from the published reading (91/91). - CONFIRMED | dlib.nyu.edu (503), jamespropp.org (503), old.maa.org (521), srd.nist.gov (503), www.afjarvis.org.uk (503), www.cipa.jp (503). | public/strata/when-the-wall-went-up/payload.json | [six-open-list] matches correction.openUndefined exactly. - CONFIRMED | The correction in full is on Whether the Source Still Says It. | public/strata/whether-the-source-still-says-it/index.html | [correction-link] section correction-2026-09-23 "Correction, 2026-09-23 ... Section 2.3.1.4 calls that file undefined, and a crawler MUST then assume complete disallow". - CONFIRMED | Of the 90 hosts that refuse us today by a rule, 55 have a two-sided bracket in the record | public/strata/when-the-wall-went-up/payload.json | [bracket-55] recount of fr.state over the 90 C hosts: bracketed 55. - CONFIRMED | 19 were already refusing at the first capture inside the window ... reported as left-censored rather than dated. | public/strata/when-the-wall-went-up/payload.json | [left-censored] recount: left-censored 19. - CONFIRMED | 13 refuse us live and never refuse in the archived record at all, and 3 have no usable capture. | public/strata/when-the-wall-went-up/payload.json | [never-refused] recount: never-refused-in-record 13, no-usable-capture 3. - CONFIRMED | The median bracket is 4.1 days wide. | public/strata/when-the-wall-went-up/payload.json | [median-width] recomputed from afterTs/byTs: median 4.135 days. - CONFIRMED | A tenth are narrower than 0.1 days and a tenth wider than 69.1; the widest is 1388.3. | public/strata/when-the-wall-went-up/payload.json | [width-tails] recomputed: 7 of 55 under 0.1, 5 over 69.1, max 1388.31. - CONFIRMED | 46 of 55 come in under thirty days. | public/strata/when-the-wall-went-up/payload.json | [under-thirty] recomputed: 46. - MINOR | half the ranges here are under four days wide | public/strata/when-the-wall-went-up/payload.json | [plain-half] recomputed: 27 of 55 are under 4 days; the median is 4.14, so half are under about 4.1 days, not under four. - CONFIRMED | Bisecting inside each band takes the median width to 4.1 days, with a tenth under 2.4 hours and a tail that reaches 1,388 days | public/strata/when-the-wall-went-up/payload.json | [dek-widths] 0.1 day = 2.4 hours; 7 of 55 under it. - CONFIRMED | Of the 90 hosts refusing by a rule, 55 have a two-sided band, 19 were already refusing when the record opens, 13 refuse a live reader and never refuse in the archive, and 3 have no usable capture at all. | public/strata/when-the-wall-went-up/payload.json | [dek-counts] recount as above. - CONFIRMED | Over 180 hosts, 73 have ever named one of the 23 tokens this study watches for. | public/strata/when-the-wall-went-up/payload.json | [ever-name] recount: 73 hosts with a non-empty named set; tokenList has 23. - WRONG | 73 of the 180 hosts have written a named AI crawler into the file, GPTBot at 66 of them, first seen 2023-08-24, seventeen days after OpenAI's own page about it was archived. | https://web.archive.org/web/20230816223543id_/https://www.cnn.com/robots.txt | [dek-73] 73 and 66 recount from payload. But www.cnn.com (CLOSED arm, one of the 66) serves "User-agent: GPTBot" / "Disallow: /" in its capture of 2023-08-16 22:35:43, and its capture of 22:07:34 that day has none: GPTBot is in this population's archived files by 2023-08-16, nine days after 2023-08-07, not seventeen. The payload dates CNN's GPTBot 20230901001844 because token first appearances are read on the monthly grid; refine.mjs bisects only first-refusal brackets. Also the 73 includes Amazonbot and both decoys, which the body says are not AI crawlers. - CONFIRMED | Two of those tokens are decoys, carried to see whether the wave is real. | research/when-the-wall-went-up/PREREGISTRATION.md | [two-decoys] "Two of these are deliberately not AI-crawler tokens (`Scrapy`, `FacebookBot`)." True as a description of the design; whether FacebookBot is not an AI crawler is judged at facebookbot-not-ai. - WRONG | GPTBot 66 2023-08-24 2024-01 2023-08-07 | https://web.archive.org/web/20230816223543id_/https://www.cnn.com/robots.txt | [gpt-tokens] 66, 2024-01 and 2023-08-07 confirmed; "earliest here" 2023-08-24 is contradicted by www.cnn.com 2023-08-16 22:35:43 (see dek-73). - WRONG | seventeen days after OpenAI's own page about it was archived | https://web.archive.org/web/20230816223543id_/https://www.cnn.com/robots.txt | [seventeen-days] 2023-08-24 minus 2023-08-07 is 17, but the earliest archived GPTBot rule in this population is CNN's of 2023-08-16, nine days after. - CONFIRMED | Amazonbot 46 2021-06-03 2025-06 | public/strata/when-the-wall-went-up/payload.json | [row-amazonbot] waveOrder; first at scholarlycommons.pacific.edu 20210603053438. - MINOR | CCBot 51 2022-02-04 2024-10 | https://web.archive.org/web/20210101003150id_/https://www.who.int/robots.txt | [row-ccbot] matches payload waveOrder, but www.who.int (CLOSED) names CCBot in its first window capture, 2021-01-01 (payload named CCBot 20210101003150; the bytes read "User-agent: CCBot" / "Disallow:/"). The column leaves out left-censored hosts while the caption says "Sorted by the earliest date anything here names them". - MINOR | magpie-crawler 10 2022-02-04 2024-05 | https://web.archive.org/web/20210101003150id_/https://www.who.int/robots.txt | [row-magpie-crawler] as row-ccbot: www.who.int names magpie-crawler at 2021-01-01 ("User-agent: magpie-crawler"). - CONFIRMED | ChatGPT-User 39 2023-04-01 2024-05 | public/strata/when-the-wall-went-up/payload.json | [row-chatgpt-user] waveOrder; first at www.etymonline.com 20230401132410. - WRONG | GPTBot 66 2023-08-24 2024-01 2023-08-07 | https://web.archive.org/web/20230816223543id_/https://www.cnn.com/robots.txt | [row-gptbot] the same row as gpt-tokens; earliest is 2023-08-16 by CNN's bytes. - CONFIRMED | Google-Extended 45 2023-10-03 2024-06 2023-09-28 | public/strata/when-the-wall-went-up/payload.json | [row-google-extended] waveOrder; docs date judged at anch-google. - CONFIRMED | Bytespider 49 2023-10-10 2025-06 | public/strata/when-the-wall-went-up/payload.json | [row-bytespider] waveOrder. - CONFIRMED | anthropic-ai 36 2023-11-02 2024-11 2023-12-13 | https://web.archive.org/web/20231102154239id_/https://www.scientificamerican.com/robots.txt | [row-anthropic-ai] hosts, first and median match payload; the 2023-11-02 capture does name anthropic-ai. The docs column is judged at anch-anthropicai. - CONFIRMED | cohere-ai 29 2023-11-02 2024-11 | public/strata/when-the-wall-went-up/payload.json | [row-cohere-ai] waveOrder. - CONFIRMED | Omgilibot 24 2024-01-01 2024-10 | public/strata/when-the-wall-went-up/payload.json | [row-omgilibot] waveOrder. - CONFIRMED | PerplexityBot 33 2024-03-01 2024-12 2024-01-09 | public/strata/when-the-wall-went-up/payload.json | [row-perplexitybot] waveOrder; docs column judged at anch-perplexity. - CONFIRMED | ClaudeBot 51 2024-03-29 2025-04 2024-04-11 | https://web.archive.org/web/20240329184442id_/https://bookstore.ams.org/robots.txt | [row-claudebot] matches payload; that capture names ClaudeBot. Docs column judged at anch-claudebot. - CONFIRMED | ImagesiftBot 21 2024-03-29 2024-11 | public/strata/when-the-wall-went-up/payload.json | [row-imagesiftbot] waveOrder. - CONFIRMED | Claude-Web 26 2024-04-04 2024-11 | public/strata/when-the-wall-went-up/payload.json | [row-claude-web] waveOrder. - CONFIRMED | Diffbot 28 2024-04-16 2024-12 | public/strata/when-the-wall-went-up/payload.json | [row-diffbot] waveOrder. - CONFIRMED | YouBot 27 2024-05-29 2025-06 | public/strata/when-the-wall-went-up/payload.json | [row-youbot] waveOrder. - CONFIRMED | Applebot-Extended 30 2024-07-04 2025-04 2024-05-08 | public/strata/when-the-wall-went-up/payload.json | [row-applebot-extended] waveOrder; docs column judged at anch-apple. - CONFIRMED | Meta-ExternalAgent 37 2024-08-01 2025-07 | public/strata/when-the-wall-went-up/payload.json | [row-meta-externalagent] waveOrder. - CONFIRMED | Timpibot 16 2024-08-01 2025-06 | public/strata/when-the-wall-went-up/payload.json | [row-timpibot] waveOrder. - CONFIRMED | OAI-SearchBot 16 2024-09-01 2025-04 | public/strata/when-the-wall-went-up/payload.json | [row-oai-searchbot] waveOrder. - CONFIRMED | AI2Bot 15 2024-10-22 2025-07 | public/strata/when-the-wall-went-up/payload.json | [row-ai2bot] waveOrder. - MINOR | Scrapy decoy 14 2022-02-04 2025-02 | https://web.archive.org/web/20210101003150id_/https://www.who.int/robots.txt | [row-scrapy] as row-ccbot: www.who.int names Scrapy at 2021-01-01 ("User-agent: Scrapy"). - CONFIRMED | FacebookBot decoy 30 2024-01-01 2024-10 | public/strata/when-the-wall-went-up/payload.json | [row-facebookbot] waveOrder figures; "decoy" judged at facebookbot-not-ai. - CONFIRMED | GPTBot ... its own docs first archived 2023-08-07 | https://web.archive.org/cdx/search/cdx?url=platform.openai.com/docs/gptbot&output=txt&filter=statuscode:200&fl=timestamp,statuscode,original&limit=10 | [anch-gptbot] re-queried: first 200 capture 20230807040031; OpenAI's own page. - CONFIRMED | and platform.openai.com/docs/gptbot was first archived 2023-08-07 | https://web.archive.org/cdx/search/cdx?url=platform.openai.com/docs/gptbot&output=txt&filter=statuscode:200&fl=timestamp,statuscode,original&limit=10 | [anch-gptbot2] as above. - CONFIRMED | Google-Extended ... its own docs first archived 2023-09-28 | https://web.archive.org/cdx/search/cdx?url=blog.google/technology/ai/an-update-on-web-publisher-controls/&output=txt&filter=statuscode:200&fl=timestamp,statuscode,original&limit=10 | [anch-google] "20230928200341 200"; Google's own announcement. - WRONG | ClaudeBot ... its own docs first archived 2024-04-11 | https://web.archive.org/cdx/search/cdx?url=darkvisitors.com/agents/claudebot&output=txt&filter=statuscode:200&fl=timestamp,statuscode,original&limit=10 | [anch-claudebot] 2024-04-11 is the first capture of darkvisitors.com/agents/claudebot, a third-party directory, under a column headed "its own docs first archived" and described as "the operator's own page". Anthropic's own page (support.anthropic.com/en/articles/8896518-...) is first archived 20240501215731. - WRONG | anthropic-ai ... its own docs first archived 2023-12-13 | https://web.archive.org/cdx/search/cdx?url=darkvisitors.com/agents/anthropic-ai&output=txt&filter=statuscode:200&fl=timestamp,statuscode,original&limit=10 | [anch-anthropicai] a darkvisitors.com page, which itself says "anthropic-ai is a unconfirmed agent possibly used by Anthropic"; Anthropic's own crawler page (capture 2024-09-27) does not name anthropic-ai at all. - WRONG | PerplexityBot ... its own docs first archived 2024-01-09 | https://web.archive.org/cdx/search/cdx?url=darkvisitors.com/agents/perplexitybot&output=txt&filter=statuscode:200&fl=timestamp,statuscode,original&limit=10 | [anch-perplexity] a darkvisitors.com page; Perplexity's own docs.perplexity.ai/guides/bots is first archived 20250129132425. - MINOR | Applebot-Extended ... its own docs first archived 2024-05-08 | https://web.archive.org/web/20240508005535id_/https://support.apple.com/en-us/119829 | [anch-apple] Apple's own page, but that capture is "About Applebot" with 0 mentions of Applebot-Extended (34 of Applebot); the first capture naming it is 20240610222340: "Apple has a secondary user agent, Applebot-Extended". The control's outcome is unchanged (first robots.txt naming 2024-07-04). - WRONG | the earliest archived copy of the operator's own page about that crawler | https://web.archive.org/cdx/search/cdx?url=support.anthropic.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler&output=txt&filter=statuscode:200&fl=timestamp,statuscode,original&limit=10 | [operator-own-page] true of 2 of the 6 anchors (GPTBot, Google-Extended); 3 are darkvisitors.com pages (ClaudeBot, anthropic-ai, PerplexityBot) and Apple's predates its mention of the crawler. The control row's "6 tokens with a dated operator page" has the same fault; harvest.mjs itself calls them "a public page documenting each crawler". - MINOR | A robots.txt naming a token before its documentation existed would be a fault in this instrument. | https://web.archive.org/web/20231102154239id_/https://www.scientificamerican.com/robots.txt | [anch-docs-vs-token] the table shows two such rows without comment: anthropic-ai named 2023-11-02 (www.scientificamerican.com, bytes confirm) before 2023-12-13, ClaudeBot 2024-03-29 (bookstore.ams.org, bytes confirm) before 2024-04-11. Not a fault, since a first-archive date bounds a page's existence only from above (harvest.mjs: "worth explaining rather than automatically a fault"), but the page tells the reader it would be one. - MINOR | A token cannot predate its own documentation 6 | public/strata/when-the-wall-went-up/payload.json | [control-six] the count is right, but the page shows no outcome while the payload records controls.gptbotCannotPredateItself "pass": false (analyse.mjs scores earliestPossible 2021-06-02, an open bracket end, against 2023-01-01, not the registered test). By the registered test (no first GPTBot capture before 2023-08-07) it passes, even with CNN's 2023-08-16. - WRONG | the earliest GPTBot capture anywhere here is 2023-08-24 | https://web.archive.org/web/20230816223543id_/https://www.cnn.com/robots.txt | [control-gptbot-text] www.cnn.com, a host here, names GPTBot at 2023-08-16 22:35:43. - WRONG | GPTBot 66 2023-08-24 2024-01 2023-08-07 | https://web.archive.org/web/20230824154845id_/https://www.espn.com/robots.txt | [gptbot-first-espn] the ESPN capture does name GPTBot (excerpt found), but it is not the first appearance in this population: CNN 2023-08-16 22:35:43. - CONFIRMED | OpenAI's own GPTBot page | https://developers.openai.com/api/docs/bots | [gptbot-openai-owner] "GPTBot is used to make our generative AI foundation models more useful and safe." - MINOR | 5 of the tokens are already in somebody's robots.txt before OpenAI's own GPTBot page was first archived on 2023-08-07: Amazonbot (2021-06-03), CCBot (2022-02-04), magpie-crawler (2022-02-04), ChatGPT-User (2023-04-01), Scrapy (2022-02-04, a decoy). | https://web.archive.org/web/20210101003150id_/https://www.who.int/robots.txt | [five-before] the five are right; three dates are late: www.who.int names CCBot, magpie-crawler and Scrapy at 2021-01-01 (and CCBot by 2019-06-01), so they precede Amazonbot. - CONFIRMED | Common Crawl's CCBot has been in block lists since long before any of this | https://web.archive.org/web/20190601000359id_/https://www.who.int/robots.txt | [ccbot-old] www.who.int's 2019-06-01 file, a long bad-bot list, has "User-agent: CCBot" / "Disallow:/". The record's Wikipedia excerpt dates rising CCBot blocking to 2023 and does not by itself support "long before". - CONFIRMED | Common Crawl's CCBot | https://commoncrawl.org/ccbot | [ccbot-owner] "User-agent: CCBot Disallow: /". - WRONG | Amazon's crawler is not an AI crawler at all. | https://web.archive.org/web/20260818202733id_/https://developer.amazon.com/amazonbot | [amazon-not-ai] Amazon's own page, archived 2026-08-18 (before this layer) and live on 2026-10-19: "Amazonbot is used to improve our products and services. This helps us provide more accurate information to customers and may be used to train Amazon AI models." The record's own excerpt says this; it contradicts the claim. The study itself counts Amazonbot as a non-decoy token. - WRONG | FacebookBot is not an AI crawler and it turns up in the same captures as the ones that are | https://web.archive.org/web/20220716192156id_/https://developers.facebook.com/docs/sharing/bot/?_fb_noscript=1 | [facebookbot-not-ai] Meta's own page: "FacebookBot crawls public web pages to improve language models for our speech recognition technology." That is a crawler collecting language-model training data; darkvisitors.com (the directory three of the page's anchors come from) has classed it "AI Data Scraper" since its capture of 2023-12-13: "FacebookBot is a web crawler used by Meta to download training data for its AI speech recognition technology." The second half holds: all 30 FacebookBot hosts name it in the same capture as another non-decoy token. - WRONG | FacebookBot, carried precisely because it is not an AI crawler | https://web.archive.org/web/20220716192156id_/https://developers.facebook.com/docs/sharing/bot/?_fb_noscript=1 | [facebookbot-dek] same source; the dek's reading of prediction 8 ("because the boilerplate carries it too") loses its premise, since a list of AI training crawlers would carry FacebookBot on its own description. - WRONG | two tokens were carried that are not AI crawlers | https://web.archive.org/web/20220716192156id_/https://developers.facebook.com/docs/sharing/bot/?_fb_noscript=1 | [two-not-ai] Scrapy holds; FacebookBot does not, by its operator's own words. The same phrase is in the decoy control row. - CONFIRMED | Scrapy decoy 14 2022-02-04 2025-02 | https://www.scrapy.org/ | [scrapy-not-ai] "The world’s most-used open source data extraction framework": a scraping framework, not an AI operator's crawler (dates judged at row-scrapy). - MINOR | The pre-registration asked which of two Anthropic tokens a host writes down first | https://web.archive.org/web/20240927085324id_/https://support.anthropic.com/en/articles/8896518-does-anthropic-crawl-data-from-the-web-and-how-can-site-owners-block-the-crawler | [anthropic-two-tokens] UNREADABLE to the tool (the capture is gzip-encoded); decompressed: "The User Agent Token ClaudeBot identifies Anthropic’s general-purpose web crawler.", 0 hits for anthropic-ai. Only one of the two is Anthropic's by Anthropic's own page; "two tokens attributed to Anthropic" would hold. - MINOR | two Anthropic tokens | https://darkvisitors.com/agents/anthropic-ai | [anthropic-ai-unconfirmed] the excerpt, "a unconfirmed agent possibly used by Anthropic", is weaker than the page's "Anthropic tokens". - CONFIRMED | Of the 68 hosts here that name two or more crawlers, 31 (45.6%) name every one of them in a single capture, and the median host's largest single-capture group is 8 tokens. | public/strata/when-the-wall-went-up/payload.json | [co-31] recomputed from hosts[].named: 68, 31, 45.6%, median largest group 8. - CONFIRMED | The median host arrives at its list in 2 events, not one per crawler. | public/strata/when-the-wall-went-up/payload.json | [co-events] recomputed: median distinct timestamps 2. - CONFIRMED | of the 68 hosts naming two or more crawlers, 31 name every one of them in a single capture, and the median host's largest single-capture group is 8. | public/strata/when-the-wall-went-up/payload.json | [co-dek] as co-31. - CONFIRMED | The answer kept coming back neither, because they land in the same capture | public/strata/when-the-wall-went-up/payload.json | [neither-anthropic] prediction 4: aiFirst 3, claudeFirst 2, sameCapture 25. - MINOR | A block list is not a dozen decisions. It is a file somebody pasted. | public/strata/when-the-wall-went-up/bodies.json.gz | [pasted-file] no source names who wrote any list. My recount: the 68 hosts with two or more tokens hold 47 distinct token sets, and 23 hosts share one of four identical sets. The largest (8 unrelated hosts: artofproblemsolving.com, authors.library.caltech.edu, exonerationregistry.org, journals.aps.org, sharktastica.co.uk, standby.lbl.gov, www.nerc.com, www.niaaa.nih.gov) is "# BEGIN Cloudflare Managed content" (e.g. www.nerc.com at 20251020183905), a CDN setting rather than a paste. Boilerplate is supported for some hosts; "somebody pasted", as a rule, is not. - MINOR | Nobody sits down and considers Bytespider on its own merits. A block list circulates, somebody pastes it, and a dozen refusals appear between one archive visit and the next. | public/strata/when-the-wall-went-up/payload.json | [nobody-sits] a universal claim about people the data cannot carry; the page's own limits say "It cannot say why. A Disallow is a fact about a file, never a motive." - MINOR | It is evidence that they were copying a file. | public/strata/when-the-wall-went-up/bodies.json.gz | [copying-a-file] the co-arrival counts measure one host at a time and cannot show copying; identical sets across unrelated hosts do exist (see pasted-file), the largest put there by Cloudflare's managed robots.txt. - UNVERIFIABLE | a count of refusing hosts is closer to a count of times a list was copied. | searched payload hosts for shared token sets (47 distinct sets among 68 hosts) and bodies.json.gz for list headers; no record of how many lists were copied | [count-of-copies] the study counts hosts, not lists; nothing measures copies. - CONFIRMED | A zero must be able to be a one 40.6% | public/strata/when-the-wall-went-up/payload.json | [control-zero] 73/180 = 40.6%. - MINOR | Hosts read at every distinct capture 17 | research/when-the-wall-went-up/data/fullscan-hosts.json | [control-17] registered as 20 hosts and drawn as 20 (14 CLOSED, 6 OPEN); 3 (api.osf.io, concepticon.clld.org, vizier.cds.unistra.fr) fell out with no word on the page, and the payload's fullscan has 17. "the seeded control arm" can also be read as the OPEN arm, which it is not. - MINOR | 16 of 17 land on exactly the same capture as the monthly grid plus bisection. | public/strata/when-the-wall-went-up/payload.json | [control-1617] 16 agree, but 4 of them (commons.wikimedia.org, museum.wales, obamawhitehouse.archives.gov, oeis.org) found no refusal in either scan and 2 (iopscience.iop.org, journals.aps.org) are refused at the first capture; bisection was put to the test at 10 hosts (derived.fullscanInside 10). - OBSERVED | The 1 that do not are captures the Archive indexes and cannot replay: the dense arm needed a body that returns nothing | research/when-the-wall-went-up/data/captures.jsonl.gz | [control-cannot-replay] the record: standby.lbl.gov 20251009073818 is {"bad": "fetch-failed"}, the first capture of digest TOPREKNUKYCZ5R76DN7HKJEEJMPA7SRC, which is the one the dense arm reads, so the dense scan skipped the refusing version. It replays today (HTTP 200, 3,334 bytes), so "cannot replay" describes the harvest, as the page's "this harvest's failure rate" says. - OBSERVED | Captures the Archive indexes but will not serve 321 | research/when-the-wall-went-up/data/captures.jsonl.gz | [control-indexed-not-served] 203 "fetch-failed" and 118 "wrapped" (served as a Wayback page, not the file). At least one failure is served today; later data, not evidence against. - CONFIRMED | The decoys FacebookBot 30 · Scrapy 14 | public/strata/when-the-wall-went-up/payload.json | [control-decoys] derived.decoyHosts; recount 30 and 14. The row's "not AI crawlers" is judged at two-not-ai. - CONFIRMED | Five controls were registered before any of this was fetched, and all five run on every pass. | research/when-the-wall-went-up/PREREGISTRATION.md | [five-controls] five numbered controls, committed before harvest.mjs existed (see eight-committed). - CONFIRMED | 4 of 8 scored predictions held. | public/strata/when-the-wall-went-up/payload.json | [four-of-eight] held 1, 2, 4, 6; the verifier recomputes all eight from the series (91/91). - CONFIRMED | Four of eight pre-registered predictions died, and the most useful death is the decoy control | public/strata/when-the-wall-went-up/payload.json | [dek-four-died] 3, 5, 7, 8 false. "Most useful" rests on FacebookBot not being an AI crawler (see facebookbot-dek). - MINOR | Eight predictions were committed before the harvester existed, and the verifier checks that the pre-registration's commit is the older one. | git log 0215ca4c20 -- research/when-the-wall-went-up/PREREGISTRATION.md | [eight-committed] recreated: PREREGISTRATION.md added fcdefbfe351 2026-09-15T23:34:40Z and never edited, harvest.mjs and analyse.mjs added 878ea7d2426 2026-09-16T00:17:40Z; preregistration-order.mjs prints "The pre-registration predates everything it registered." But the verifier the page links says "ONE CHECK IS DELIBERATELY NOT HERE ... It lives in research/when-the-wall-went-up/preregistration-order.mjs, which says it is inside-only." - CONFIRMED | median first-refusal month for named-group CLOSED hosts falls in calendar 2024 | public/strata/when-the-wall-went-up/payload.json | [pred-1] value 2024-11, holds true. - CONFIRMED | more than half of two-sided CLOSED brackets are under 60 days wide | public/strata/when-the-wall-went-up/payload.json | [pred-2] 89.1 = 49/55 (recomputed 49 under 60). - CONFIRMED | at least 20 OPEN hosts name an AI token in their most recent capture | public/strata/when-the-wall-went-up/payload.json | [pred-3] value 9, killed. - CONFIRMED | anthropic-ai first appears before ClaudeBot at more CLOSED hosts than the reverse | public/strata/when-the-wall-went-up/payload.json | [pred-4] 3 against 2, held. - CONFIRMED | token sets are non-decreasing at more than 80% of hosts that ever name one | public/strata/when-the-wall-went-up/payload.json | [pred-5] 76.7, killed. - CONFIRMED | at least 5 CLOSED hosts flap: refused, permitted, refused | public/strata/when-the-wall-went-up/payload.json | [pred-6] 6, held. - CONFIRMED | at more than 10 CLOSED hosts the refusal predates any Claude token | public/strata/when-the-wall-went-up/payload.json | [pred-7] 10, killed. - CONFIRMED | the decoys do not wave: their first-appearance IQR exceeds GPTBot's | public/strata/when-the-wall-went-up/payload.json | [pred-8] 436.7 against 315.8 and 253.3, killed. - CONFIRMED | GPTBot's first appearances span 436.7 days between the first and third quartile; the decoys span 315.8 and 253.3. | public/strata/when-the-wall-went-up/payload.json | [pred-8-iqr] tokens.GPTBot.iqrDays 436.7, FacebookBot 315.8, Scrapy 253.3. - CONFIRMED | their first appearances were supposed to be more scattered in time than GPTBot's. They are not. | public/strata/when-the-wall-went-up/payload.json | [pred-8-text] "holds": false. - CONFIRMED | Ruled by research/reference-rot/robots.mjs, protocol v1, the same frozen parser that produced the readings this study is dated against. | research/when-the-wall-went-up/PREREGISTRATION.md | [parser-frozen] "protocol v1, frozen, 22 self-test assertions, the same parser"; harvest and refine import ../reference-rot/robots.mjs. - CONFIRMED | the parser is that page's parser, frozen, because a retrospective reading taken with a different instrument would not be a reading of the same series. | research/when-the-wall-went-up/PREREGISTRATION.md | [same-parser-relates] "A retrospective reading taken with a different parser would not be a reading of the same series." - CONFIRMED | Captures from the Internet Archive, read with the id_ modifier so the bytes are the archived file and not a rendered page. | research/when-the-wall-went-up/PREREGISTRATION.md | [capture-ids] registered; harvest rawUrl uses id_; verifier "no shipped body carries the Wayback toolbar" passes. - CONFIRMED | each column one month from 2021-01 to 2026-09 | public/strata/when-the-wall-went-up/payload.json | [window] window 2021-01 to 2026-09; 69 months. - CONFIRMED | Several hosts here belong to one company. | public/strata/when-the-wall-went-up/payload.json | [several-hosts-one-company] e.g. link.springer.com, www.nature.com, bmcecolevol.biomedcentral.com, jvat.biomedcentral.com (Springer Nature); www.cell.com, www.thelancet.com, www.sciencedirect.com (Elsevier); github.com and gist.github.com. - CONFIRMED | That page asks whether the 2,870 sources this corpus cites will still let it read them and answers as a fact about one day | src/content/strata/whether-the-source-still-says-it.md | [relates-source-page] "This corpus rests on 2,870 external sources." - CONFIRMED | The population here is that page's output as it stood when drawn, unmodified | research/when-the-wall-went-up/hosts.mjs | [relates-population] "readingAsDrawn() below undoes that exactly." - CONFIRMED | There a registry keeps every version of a trial's promise with a date on it | src/content/strata/added-dropped-or-just-reworded.md | [relates-registry] "ClinicalTrials.gov keeps every version of that promise with a date on it." - CONFIRMED | There it is the IANA time zone database | src/content/strata/the-future-has-a-version-number.md | [relates-iana] the sister layer is about the time zone database's releases. - CONFIRMED | There thirteen implementations disagree about how wide a character is. | src/content/strata/thirteen-rulers-one-column.md | [relates-thirteen] "Twelve shipped width tables and one running terminal ... split on 35,520 of them". - CONFIRMED | There a record corrects itself as a matter of stated policy and the correction is the feature. | src/content/strata/the-record-that-corrects-itself.md | [relates-corrects] the dek at the pin. - CONFIRMED | Rows are sorted by when the refusal begins, so the wall is the diagonal. | public/strata/when-the-wall-went-up/index.html | [rows-sorted] order() sorts bracketed rows by byTs. - CONFIRMED | Click a row to read the two files that changed the answer. | public/strata/when-the-wall-went-up/index.html | [click-two-files] show() reads P.bodies at afterTs and byTs. - MINOR | (added) blank is a month the Archive did not visit | https://web.archive.org/cdx/search/cdx?url=theconversation.com/robots.txt&output=txt&fl=timestamp,statuscode&from=202608&to=202608 | [blank-month] the series uses only status-200 rows, so a month with only revisits is blank by construction. theconversation.com has no 2026-08 entry, yet the CDX lists 19 revisit records and 5 redirects that month (20260803214528 to 20260829221356) and no 200: the Archive visited and found the file unchanged. Positive control: the same query shape returns 200 rows for github.com 2026-04. - OBSERVED | (added) a robots.txt parser handed HTML reports that everything is permitted | recreated: node scripts/html-test.mjs in the N2 scratch, on research/reference-rot/robots.mjs at 0215ca4c20 | [html-parser] an HTML page whose text holds "User-agent: * Disallow: /" rules {"allowed":true,"applicable":0}; the same rule as a text file rules {"allowed":false,"refusedBy":["wildcard"]}. - CONFIRMED | (added) some archived robots.txt files contain one (an em dash) | public/strata/when-the-wall-went-up/bodies.json.gz | [bodies-em-dash] 4 of 298 shipped bodies contain U+2014 (www.medicalnewstoday.com, www.perseus.tufts.edu twice, www.sciencedirect.com). - CONFIRMED | (added) this site's publish gate blocks new prose containing an em dash | git show 0215ca4c20:scripts/check-dek-dashes.mjs | [em-dash-gate] check-dek-dashes.mjs and check-em-dashes.mjs ("flags em dashes on lines you added") at the pin. - CONFIRMED | (added) The capture bodies this page shows are other people's files, quoted without a character changed | https://web.archive.org/web/20251020183905id_/https://www.nerc.com/robots.txt | [bodies-verbatim] spot check: the shipped body for www.nerc.com at 20251020183905 equals a fresh id_ fetch (1,812 characters). - MINOR | (added) So every date here is a band rather than a day. | research/when-the-wall-went-up/refine.mjs | [band-not-day] true of first-refusal brackets. The token table prints single days that are the first monthly probe to see a token (refine.mjs: "for each host whose grid produced a two-sided bracket, this bisects"): 16 of 23 "earliest here" dates fall on the 1st to 4th of a month, and www.cnn.com's GPTBot is dated 2023-09-01 while its file names it from 2023-08-16. - CONFIRMED | (added) so it was measured and is marked unregistered on the page as well as in the output | research/when-the-wall-went-up/analyse.mjs | [co-unregistered] analyse.mjs line 255: "the co-arrival statistic ... is UNREGISTERED"; results.json carries unregisteredDecisions. ## Findings - [fixed] revisit-record: Revisits row (build-page.mjs, index.html line 120) "the Archive noting it served bytes it already held; not a fetch and not a failure" now "the Archive's record of a visit that found bytes it already held; not a new copy and not a failure". - [fixed] probes-arms: "Read to the same depth in both arms" (index.html line 118) is now "Read on the same monthly grid in both arms", and its note says "the same protocol, not the same depth, at 58.6 and 51.5 probes a host with a usable series" (computed from derived.byArm). - [fixed] retry-twice: "Every one was asked for twice" (index.html line 270) now "The 203 that failed to fetch were asked for again; the 118 served as a Wayback page instead of the file were not", counts computed from the capture pack at build. - [fixed] plain-half: Plain text (markdown frontmatter and the aw-plain meta, index.html line 89) "half the ranges here are under four days wide" now "about four days wide or less" (median 4.135 days, 28 of 55 at or under it). - [fixed] dek-73 (gptbot-first-seen): the markdown dek now says GPTBot was "first seen in this study's reading on 2023-08-24 ... though www.cnn.com's archived file already names it on 2023-08-16"; Corrected line added. The "73 ... named AI crawler" figure stands: all 73 name a non-decoy token. - [fixed] gpt-tokens (gptbot-first-seen): the token table's column is now "first probe naming it" and the caption says the date is an upper bound and names www.cnn.com's 2023-08-16 GPTBot line (index.html lines 183, 210-225); Corrected line added. - [fixed] seventeen-days (gptbot-first-seen): the seventeen days now attach to "first seen in this study's reading", which is what they measure, beside CNN's 2023-08-16 (markdown dek; Corrected line). - [fixed] row-ccbot: Caption now says the column leaves out hosts that already name a token when their record opens, and names www.who.int naming CCBot, magpie-crawler and Scrapy at 2021-01-01 (computed from the rows at build). - [fixed] row-magpie-crawler: As row-ccbot: the caption names www.who.int's 2021-01-01 magpie-crawler line. - [fixed] row-gptbot (gptbot-first-seen): same row as gpt-tokens, fixed by the column label and the caption. - [fixed] row-scrapy: As row-ccbot: the caption names www.who.int's 2021-01-01 Scrapy line. - [fixed] anch-claudebot (docs-anchor-not-operator): the column is now "a page documenting it, first archived" and the caption says ClaudeBot's, anthropic-ai's and PerplexityBot's are darkvisitors.com pages; Corrected line added. - [fixed] anch-anthropicai (docs-anchor-not-operator): as anch-claudebot. - [fixed] anch-perplexity (docs-anchor-not-operator): as anch-claudebot. - [fixed] anch-apple: Caption now says Apple's date is its page's first capture, which does not yet mention Applebot-Extended, and that the first capture that does is of 2024-06-10 (re-read: 0 mentions in the three digests before June, present at 20240610222340). - [fixed] operator-own-page (docs-anchor-not-operator): caption "the operator's own page about that crawler" now "a public page documenting that crawler", with which anchors are the operator's and which darkvisitors.com's; the control row "a dated operator page" now "a dated page documenting them, and the check runs on GPTBot's"; Corrected line added. The same description in the lab notebook (research/when-the-wall-went-up/README.md) and a harvest.mjs comment now names which anchors are the operator's and which darkvisitors.com's (repair stage). - [fixed] anch-docs-vs-token: Caption "would be a fault in this instrument" now says such a date bounds from above when a crawler became publicly known, so a robots.txt naming a token before it (anthropic-ai, ClaudeBot) is worth explaining rather than a fault, in the terms of the payload's own docAnchors note. - [declined] control-six: the payload's controls.gptbotCannotPredateItself "pass": false is scored by analyse.mjs on the open end of the bracket against 2023-01-01; the page row is a count and the verifier's registered check (closed end against 2023-08-07) passes. Making the payload agree needs analyse.mjs changed and the analysis re-run, not a cheap fix at tier A; listed. - [fixed] control-gptbot-text (gptbot-first-seen): control row now "the earliest capture naming GPTBot in this study's reading is 2023-08-24 (www.cnn.com's file already names it on 2023-08-16, between two monthly probes)"; Corrected line added. - [fixed] gptbot-first-espn (gptbot-first-seen): as gpt-tokens. - [fixed] five-before: The pre-era sentence (index.html line 233) now adds "Those are first two-sided appearances, and some are earlier still: www.who.int already names CCBot, magpie-crawler and Scrapy at its first capture in the window, 2021-01-01", computed from the rows at build. - [fixed] amazon-not-ai (amazonbot-not-ai): "Amazon's crawler is not an AI crawler at all" now quotes Amazon's page: Amazonbot "is used to improve our products and services" and "may be used to train Amazon AI models"; Corrected line added. - [fixed] facebookbot-not-ai (facebookbot-not-ai): the prediction-8 paragraph now quotes Meta ("crawls public web pages to improve language models for our speech recognition technology"), says the premise failed for FacebookBot, and rests the reading on Scrapy (IQR 253.3 days against GPTBot's 436.7; at all 14 Scrapy hosts it arrives in the same capture as another registered token, asserted at build); Corrected line added. - [fixed] facebookbot-dek (facebookbot-not-ai): the markdown dek now names Scrapy as the decoy that dies usefully and says FacebookBot "was not one: Meta says it crawls to improve language models". - [fixed] two-not-ai (facebookbot-not-ai): prediction paragraph and decoy control row now say the two were "carried as ones that are not AI crawlers, which holds for Scrapy and not for FacebookBot". - [fixed] anthropic-two-tokens: "two Anthropic tokens" (index.html line 241) now "two tokens attributed to Anthropic". - [fixed] anthropic-ai-unconfirmed: As anthropic-two-tokens: the same phrase, fixed once. - [fixed] pasted-file: Markdown dek "A block list is not a dozen decisions. It is a file somebody pasted." now "At those hosts a block list arrives in one capture, not as a dozen decisions." - [fixed] nobody-sits: Body (index.html lines 250-255) now says the record cannot show anyone weighing Bytespider on its own merits, only refusals arriving together, "whether somebody pasted it or a service wrote it", and names the commonest identical set (8 hosts) in files marked "# BEGIN Cloudflare Managed content" (recounted from payload and bodies.json.gz). - [fixed] copying-a-file: "It is evidence that they were copying a file" now "It is evidence that lists arrived whole"; the same inference a paragraph earlier, "closer to a count of times a list was copied", now "closer to a count of times a list arrived" (repair stage). - [fixed] control-17: Full-scan row now "a seeded draw of 20 hosts from both arms ... 3 of the 20 are not in the comparison" (data/fullscan-hosts.json against payload fullscan). - [fixed] control-1617: Full-scan row now adds "though 4 of those refuse in neither scan and 2 refuse at their first capture, so bisection itself was put to the test at 11, and 10 of those agree", computed from payload fullscan. - [fixed] eight-committed: "the verifier checks that the pre-registration's commit is the older one" now names the inside-only research/when-the-wall-went-up/preregistration-order.mjs and says the public verifier cannot (re-run: "The pre-registration predates everything it registered."). - [fixed] blank-month: Legend sentence "blank is a month the Archive did not visit" now "blank is a month with no archived copy of the file stored whole (only status-200 captures are read, so a month of revisits or redirects alone is blank too)". - [fixed] band-not-day: Markdown dek "So every date here is a band rather than a day" now "So every refusal date here is a band rather than a day"; the token dates are labelled as upper bounds in the table caption.