This is an old revision of the document!
Table of Contents
Provenance: Roadmap
Working log for roadmap. That page publishes paper counts, so it carries a log like any other: the probe, its unedited output, what the counts do and do not mean, and the decisions taken against them.
1. Where the counts come from
scripts/gap_probe_roadmap.mjs, committed with its output as scripts/gap_probe_roadmap-output.txt. It runs regular expressions over title + summary of every paper in the extraction and prints, per family, the number of matching papers, how many carry the web platform, and the 2020–2023 and 2024–2026 splits. Re-run it with a family name to print the matching titles, which is how every count on roadmap can be audited:
node scripts/gap_probe_roadmap.mjs # the table node scripts/gap_probe_roadmap.mjs llm_annotator
Output as of 2026-09-07, unedited:
family papers web 2020-2023 2024-2026 age_assurance 11 3 2 2 dsar_rights 9 7 1 6 ctv_streaming 16 1 5 5 llm_annotator 30 10 3 27 reproducibility 38 7 16 19 ai_crawlers 4 3 0 3 cdn_edge 48 23 15 8 browser_permissions 8 2 3 2 anti_adblock 3 3 1 1 payments_checkout 48 15 21 11 health_sensitive 16 4 4 4 webrtc_leak 6 4 3 3 sok_survey 44 6 14 21 crowdsourced_vantage 57 7 20 11
2. What these numbers are not
- They are candidate sets, not populations. A title-and-summary probe cannot see a paper that measured smart TVs without saying so in either field, so every count is a floor. A page written against one of these rows derives its own population from the structured fields and publishes that instead.
- They are not comparable across families.
cdn_edge(48) andpayments_checkout(48) are wide regular expressions that match incidental mentions;anti_adblock(3) is narrow and specific. A larger number is not a stronger case, which is why every disposition on roadmap names the reason rather than the rank. - The year split is not a trend. 2025 is thin and 2026 is provisional — see corpus. The split is here because a family that is entirely pre-2020 is a different proposition from one that is entirely post-2024, not because the slope means anything.
- 2026-09-15, writing Age assurance found a defect in this probe. The
age_assurancepattern isage (verification|assurance|estimation|gate)with no word boundary beforeage, so F-BLEAU: Fast Black-Box Leakage Estimation (IEEE S&P 2019) matched on Leakage Estimation. Corrected, that row is 10, not 11. The same class of defect bit three probes written for that page (voltage signal→age signal,improve their agency→prove their age,webpage screenshot→age screen), so check everyage-prefixed alternation in this file for a leading\bbefore reusing a count from it. Only theage_assurancerow uses that construction; the other fourteen families were not re-checked. Detail: age_assurance. - Reading the titles changed two dispositions, and this is the reason the probe prints them.
age_assurancelooks like 11 papers on age gates and is mostly COPPA and children's-privacy work;ctv_streaminglooks like 16 papers with only one on the web platform and contains a coherent six-paper smart-TV tracking spine. Both rows on roadmap say so.
3. Decisions taken on 2026-09-07
- Ten queued pages, with ids fixed so that later work lands in the right place. Four ids were open questions in the backlog and were decided here:
privacy:policiesrather thanprivacy:privacy_policies(which sorts next to this site's own privacy_policy page);programming:internet_scanningrather thandesign:scanning(an instrument, matching Crawler);statistics:annotationrather thanstatistics:classifier_validationordesign:validation, because the page has to cover LLM annotation as well as validation;privacy:data_subject_rightsto avoid colliding with Requests, which is web requests. statistics:annotationabsorbs two backlog items — hoisting the label-validation section out of Website classification, and the LLM-as-annotator gap. They are one page: 30 candidate papers use an LLM to annotate, 27 of them in 2024–2026, and the corpus-wide report-no-validation figure cannot live on a topic page without misstating that page's denominator. Both counts moved when the page was written on 2026-09-11. The 30 is a candidate set with 70.0% precision and 13.1% recall — 21 of the 30 really annotate, and theclassification.method == “llm”enum finds 175 papers the probe catches only 23 of. And the 42.4% is the share of papers with at least one unvalidated classifier; the share that validate nothing is 29.9% (1,328 of 4,439). See annotation.- Connected TV and Age assurance were queued despite being thin, as an explicit editorial decision: a page that states a method and a small, dated literature is more useful to a student than silence, and the thinness is itself reportable. The line was drawn at WebRTC leaks (6 candidates) — below it sit WebAssembly and every other thinly-published web technology, and admitting one admits all.
- Six proposals were assessed and not written, with counts, on roadmap. Three become sections on existing pages rather than pages.
3b. Decisions taken on 2026-09-08
- Ad archives was written, and its Queued row removed — required, not optional:
scripts/sitemap.mjsreports a written-but-still-queued row as a failure. A disposition row was added to Assessed instead, so the decision survives the removal. - The count that justified queuing it was wrong, and writing the page corrected it. The row read “69 papers”. That figure came from a full-text probe for /Ad Library|Ads? Archive API/i on Platforms, and the probe cannot separate Meta's Ad Library from an Android advertising SDK — the ordinary meaning of “ad library” in mobile-security writing. 44 of the 69 carry only the lowercase SDK sense, and the pattern also matches inside “uplo[ad librar]ies”, so one of the 69 is a paper about Node.js file uploads. The hand-audited figure is 11; precision of the old probe was 14.5%. Platforms has been corrected in the same sitting and the audit is on ad_archives.
- This is a warning about every count in the Queued table. roadmap already says the counts are candidate sets and floors, not populations. The ad-archives row shows the other failure direction: a candidate set can be a large over-count, by a factor of six here, when the probe term is a homonym. A queued row's count justifies looking, and nothing more.
- The queued page still deserved writing on the corrected number. Eleven papers is thin, but they are coherent, five of them measure the archives' own error rates, and the regulatory driver is live — which is what the row claimed.
3c. Decisions taken on 2026-09-11
- Authentication was written, and the Assessed row that gated it on an audit was replaced with the audit's result. The gate was “dropped if the deployment-measurement slice is under ~20”. It is 22 within the queued 46, and 45 once the candidate pool is widened to 184 — so the page was written, and the row now carries both numbers rather than the one it was queued with.
- The queued count was not wrong, it was one probe.
auth_tightstill returns exactly 46 papers on the current run. What the row could not know is its precision: 24 of the 46 are not deployment measurements at all, and three are homonyms —MFAexpanded by its own paper as “Made for AdSense”,OpenIDmatched inside “OpenIDEO”, and an RPKI relying party, which is a route-origin validator. This is the ad-archives lesson (§3b) in a milder form: a candidate count justifies looking, and nothing more. - The recall direction mattered more than the precision direction here. Adding four probes and a full-text recall pass over every
paper.cols.txtmoved the population from the 22 the queued probe could see to 45 — and even the branded-mechanism slice the row described is 25, four of them invisible to the queued probe. The page's own subject — login-page discovery, login and password policies, session state — is invisible to a probe built from branded mechanism names, which is why the page was broadened from the row's scope. The weak step is recorded on the page's own log: 144 of the 155 papers over the full-text threshold were dismissed on their titles alone. - Authentication became the seventh child of Security, and the namespace page's “six children, all six written” sentence was updated in the same sitting.
3d. Decisions taken on 2026-09-23
- Advertising was written without ever being queued. Karel chose it in the 2026-09-22 gap pass; the Queued table was empty and stays empty. An Assessed row records the result in the same shape as the others, because the gap pass's count (118) needed the same correction a queued count gets: 33.1% precision and 59.2% recall against the 71-paper population the page derived. Full audit on advertising.
- The recall miss has a shape worth remembering for the next gap pass. A probe built from the question vocabulary (“ad targeting”, “targeted ad”, “RTB”) misses the papers that answer it through a different observable — 22 of its 29 misses collect ad content, and the other seven include Algorithm audits' two founding persona papers. A probe for the observable (the word “ads” itself, ≥ 40 times) found 64 of the 71.
- The Sock-puppet and personalization audits row was settled rather than left open. It had been superseded since 2026-09-11 by Algorithm audits and is now also covered, for ads, by Advertising (22 of the 34 audits are in that page's population). The row's 20 was not re-derived.
3e. Decisions taken on 2026-09-24
- Online scams was written without ever being queued. Karel chose it in the 2026-09-22 gap pass; the Queued table was empty and stays empty. An Assessed row records the result in the same shape as the other gap-pass pages, because the gap pass's reading of its own count did not survive the audit: the
scamsregex reproduces 43 papers, but only 7 of its 23 hits from 2024–2026 measure scam websites, and it misses 9 of the page's 27 papers. The page is the eighth child of security. Full log: online_scams.
3f. Decisions taken on 2026-09-25
- Domain abuse was written without ever being queued. Karel chose it in the 2026-09-22 gap pass; the Queued table was empty and stays empty. An Assessed row records the result in the same shape as the other gap-pass pages. The
domain_abuseregex reproduces 85 papers and finds 38 of the page's 48; it misses the name-collision and delegation-hijack papers, and of its 27 hits from 2024–2026 only 11 are in the population. The page is the ninth child of security. Full log: domain_abuse. - One follow-up was filed rather than done: a ethics section on registering or claiming names to receive other people's traffic, which the new page flags as an open question.
3g. Decisions taken on 2026-09-27
- Messaging channels was written without ever being queued. Karel chose it in the 2026-09-22 gap pass; the Queued table was empty and stays empty. An Assessed row records the result in the same shape as the other gap-pass pages. The brief's three counts (40 / 41 / 13) reproduce exactly with case-sensitive name patterns; read against the page's 26-paper population, their union has 30.3% precision and 88.5% recall, and the WhatsApp count alone 9.8% precision. The page is the second child of Platforms, and design's table went from 18 to 19 rows. Full log: messaging_channels.
- Account enumeration was kept as a pointer section on that page rather than proposed as a page of its own: four papers, one design (a census of accounts against the numbering plan), and Platforms already carries its largest example.
- One follow-up was filed rather than done: a ethics section on entering and recording online groups whose members did not join a study.
- Mini programs was written without ever being queued. Karel chose it in the 2026-09-22 gap pass; the Queued table stays empty and an Assessed row records the result. The brief's count (37 papers, 21 from 2024–2026, ≥ 10 hits of
/mini-?programs?|WeChat/) reproduces exactly, case-insensitive. Read against the page's 16-paper population the rule has 40.5% precision and 93.8% recall; the ecosystem vocabulary alone reaches all 16. The page is the first child of Mobile and app measurement, which had no mention of mini-programs to replace; design's table went from 19 to 20 rows. Three mini-program papers from the seven venues are outside the extraction (one PDF never retrieved, two venue-years without OpenAlex abstracts) and are cited, not counted. Full log: mini_programs.
3h. Decisions taken on 2026-10-08
- Malicious web content was written without ever being queued. Karel chose it in the 2026-09-22 gap pass; a research run on 2026-09-27 stopped before writing, and this sitting finished it. The Queued table was empty and stays empty; an Assessed row records the result in the same shape as the other gap-pass pages. The
malicious_web_contentregex reproduces 124 papers and finds 36 of the page's 39, but none of its 20 hits from 2024–2026 is in the population. The page is the tenth child of security. Full log: malicious_web_content. - The “nothing after 2023” finding was tested, not assumed: wider full-text vocabularies over every 2024–2026 paper, a title-and-abstract probe over the whole venue index to find screening losses, and the outside-venue search. Three on-topic 2025 papers were screened out of the corpus (all defences); the page names them and does not count them.
4. The red-link gate
Red links are a defect on this wiki, and one drain item exists purely to clean up namespace-relative ones. roadmap is the single exception, and it is enforced rather than asserted: scripts/sitemap.mjs now checks that every promised-but-missing page on the whole wiki appears as the first link of a row in the Queued table, and that no Queued row's page already exists. It exits non-zero on either, after printing the full report.
Two consequences worth knowing before editing:
- The declaration is the first link in a row, deliberately. The second column links pages that do exist, and the Assessed table names pages that will never be written; counting every link in the table would license a red link anywhere on the page.
?do=sitemapis cached, so a page created minutes ago is absent from that listing. roadmap is therefore fetched directly and added before any page is scanned — without that, its declared red links are never seen and the gate passes vacuously. That is the same shape of silent pass this script produced on 2026-09-05, when an origin change made it report “Distinct internal link targets: 0” with exit 0.
5. Limitations
The queued list is what the corpus supports as of 2026-09-07 and it is not a schedule. Two rows are conditional in substance even though they read as commitments: statistics:annotation depended on the LLM-annotation slice surviving a hand audit of its 30 candidates — it did: 21 annotate, 7 study LLMs, 2 use one as a generator, and the page's population turned out to be the 175-paper enum rather than the probe at all (written 2026-09-11), and Connected TV will need its population derived from platform fields rather than the probe, because the probe's web-platform column is exactly the wrong filter for it. The Assessed table's SSO/WebAuthn row was gated on an audit that had not been run. That audit ran on 2026-09-11 (§3c): the row now reports 21 of its own 46 as deployment measurements, and the page that came out of it derives a 45-paper population from a wider candidate pool.
