User Tools

Site Tools


provenance:design:platforms

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
provenance:design:platforms [2026/08/27 20:22] – New page: working log behind design:platforms — six fold iterations with the wrong numbers they produced, every query with its denominator, all six scripts and their unedited output, the fold dump and phenomenon residue in full, four hand audits with meas karel.kubicek.claudeprovenance:design:platforms [2026/08/27 20:51] (current) – Add the generic reviewer's log (14 findings, 11 accepted outright, 3 partly); correct this page's own quote-check coverage overclaim and regenerate the stale script/output blocks (42 checks, all passing); record the framing, cross-page-fold and schema-lab karel.kubicek.claude
Line 50: Line 50:
 | 3 | recall check: matched paper **titles** against the ''sourceList'' verdict | TikTok fell to **2** | ''sourceList'' badly **under-recalls**. The TheWebConf 2024 TikTok feed study gives its population as ''custom bot accounts'' and never names TikTok there. Widened to four signals. | | 3 | recall check: matched paper **titles** against the ''sourceList'' verdict | TikTok fell to **2** | ''sourceList'' badly **under-recalls**. The TheWebConf 2024 TikTok feed study gives its population as ''custom bot accounts'' and never names TikTok there. Widened to four signals. |
 | 4 | four signals, first cut | **Amazon 923 papers** | Bug in ''platforms_report.mjs'': it accepted any tag ''plat_fold.tagsOf()'' returned, and ''tagsOf'' returns the role rather than filtering on it. So every Mechanical Turk and EC2 mention counted. Fixed by filtering ''role === 'subject''' at the call site. | | 4 | four signals, first cut | **Amazon 923 papers** | Bug in ''platforms_report.mjs'': it accepted any tag ''plat_fold.tagsOf()'' returned, and ''tagsOf'' returns the role rather than filtering on it. So every Mechanical Turk and EC2 mention counted. Fixed by filtering ''role === 'subject''' at the call site. |
-| 5 | four signals + role filter | **1,072** platform-subject papers; Twitter/X 165, Meta 186 | Qualitative studies list Twitter as a **recruitment channel** in ''sourceList'' — e.g. ''"professional networks, Reddit, Twitter, Slack, and Upwork"'' and ''"LinkedIn, Upwork, Discord, Slack, Twitter"''. A lexical rule cannot separate those reliably. |+| 5 | four signals + role filter | **1,072** platform-subject papers; Twitter/X 165, Meta 186 | Qualitative studies list Twitter as a **recruitment channel** in ''sourceList'' — e.g. ''%%"professional networks, Reddit, Twitter, Slack, and Upwork"%%'' and ''%%"LinkedIn, Upwork, Discord, Slack, Twitter"%%''. A lexical rule cannot separate those reliably. |
 | 6 | added the paper-level ''participants'' correction | **897** platform-subject papers; Twitter/X 142, Meta 151 | This is what is published. | | 6 | added the paper-level ''participants'' correction | **897** platform-subject papers; Twitter/X 142, Meta 151 | This is what is published. |
  
Line 146: Line 146:
   web-archive            17  1.9%   web-archive            17  1.9%
   (no stated mode)       60  6.7%   (no stated mode)       60  6.7%
 +  EXCLUSIVE split of the same 897 papers:
 +    existing-dataset ONLY (no primary collection)   208  23.2%
 +    primary collection ONLY (no existing dataset)   453  50.5%
 +    both                                           175  19.5%
 +    any primary collection                         628  70.0%
  
 ## Did they use the platform's official API, or scrape? (tools[].name over the 897 platform-subject papers) ## Did they use the platform's official API, or scrape? (tools[].name over the 897 platform-subject papers)
Line 271: Line 276:
     [CCS 2012] malware infection     [CCS 2012] malware infection
     [IMC 2012] Facebook gifting application activity     [IMC 2012] Facebook gifting application activity
 +
 +## Cross-page reconciliation: how many papers name "Alexa" in a stated population source?
 +  papers with >=1 stated population sourceList                       5492
 +  ... of which at least one tuple has a web unit                     1143
 +  name "Alexa" in any stated sourceList (no role filter)             486
 +  ... and have a web-unit population tuple                          464   <- comparable to design:website_selection's 463
 +  assigned role=ranking by plat_fold.mjs (what this page publishes)  412
 +  The gap is the role rule: Alexa-as-skill-store strings are diverted to
 +  role=subject, and a string naming several lists is tagged per platform.
 +  Neither number is wrong; they answer different questions.
 </file> </file>
  
Line 880: Line 895:
 const noMode = anySubject.filter((r) => (r.temporal || []).every((t) => !t.mode || isSentinel(t.mode))).length; const noMode = anySubject.filter((r) => (r.temporal || []).every((t) => !t.mode || isSentinel(t.mode))).length;
 console.log(`  (no stated mode)     ${String(noMode).padStart(4)}  ${pct(noMode, anySubject.length)}`); console.log(`  (no stated mode)     ${String(noMode).padStart(4)}  ${pct(noMode, anySubject.length)}`);
 +// temporal.mode is MULTI-VALUED, so "383 existing-dataset" is not "383 papers
 +// that collected nothing": 175 of them also name a primary-collection mode.
 +// Publishing the multi-valued count as an exclusive one overstates dataset
 +// reuse and understates primary collection. Exclusive split:
 +const PRIMARY = new Set(['live-crawl', 'active-probing', 'passive-collection']);
 +let bothModes = 0;
 +let onlyExisting = 0;
 +let onlyPrimary = 0;
 +for (const r of anySubject) {
 +  const m = new Set((r.temporal || []).map((t) => t.mode).filter((x) => x && !isSentinel(x)));
 +  const ex = m.has('existing-dataset');
 +  const pr = [...m].some((x) => PRIMARY.has(x));
 +  if (ex && pr) bothModes += 1;
 +  else if (ex) onlyExisting += 1;
 +  else if (pr) onlyPrimary += 1;
 +}
 +console.log(`  EXCLUSIVE split of the same ${anySubject.length} papers:`);
 +console.log(`    existing-dataset ONLY (no primary collection)  ${String(onlyExisting).padStart(4)}  ${pct(onlyExisting, anySubject.length)}`);
 +console.log(`    primary collection ONLY (no existing dataset)  ${String(onlyPrimary).padStart(4)}  ${pct(onlyPrimary, anySubject.length)}`);
 +console.log(`    both                                          ${String(bothModes).padStart(4)}  ${pct(bothModes, anySubject.length)}`);
 +console.log(`    any primary collection                        ${String(onlyPrimary + bothModes).padStart(4)}  ${pct(onlyPrimary + bothModes, anySubject.length)}`);
  
 // -- 6. official API vs scraping, from tool names // -- 6. official API vs scraping, from tool names
Line 1036: Line 1072:
 console.log('  residue sample (first 15 phenomena):'); console.log('  residue sample (first 15 phenomena):');
 for (const r of unmatched.slice(0, 15)) console.log(`    [${r.venue} ${r.year}] ${(r.detection[0] || {}).phenomenon}`); for (const r of unmatched.slice(0, 15)) console.log(`    [${r.venue} ${r.year}] ${(r.detection[0] || {}).phenomenon}`);
 +
 +// -- 16. cross-page reconciliation.
 +// design:website_selection reports 463 papers for Alexa, folded over the 1,153
 +// papers that sampled the WEB. This page reports 412 for role=ranking over all
 +// papers that stated a population. A subset cannot exceed its superset, so the
 +// two folds must be measuring different things — and they are. Printed here so
 +// neither page looks broken to a reader holding both.
 +console.log(`\n## Cross-page reconciliation: how many papers name "Alexa" in a stated population source?`);
 +{
 +  const stated = rows.filter((r) => (r.population || []).some((p) => p.sourceList && !isSentinel(p.sourceList)));
 +  const WEB_UNITS = new Set(['websites', 'domains', 'web-pages', 'urls']);
 +  const isWeb = (r) => (r.population || []).some((p) => p.sourceList && !isSentinel(p.sourceList) && WEB_UNITS.has(p.unit));
 +  const anyAlexa = stated.filter((r) => r.population.some((p) => p.sourceList && /alexa/i.test(p.sourceList)));
 +  console.log(`  papers with >=1 stated population sourceList                       ${stated.length}`);
 +  console.log(`  ... of which at least one tuple has a web unit                     ${stated.filter(isWeb).length}`);
 +  console.log(`  name "Alexa" in any stated sourceList (no role filter)             ${anyAlexa.length}`);
 +  console.log(`  ... and have a web-unit population tuple                          ${anyAlexa.filter(isWeb).length}   <- comparable to design:website_selection's 463`);
 +  const rankingRole = [...perPaperRoles.entries()].filter(([, f]) => f.has('Amazon') && f.get('Amazon').has('ranking')).length;
 +  console.log(`  assigned role=ranking by plat_fold.mjs (what this page publishes)  ${rankingRole}`);
 +  console.log('  The gap is the role rule: Alexa-as-skill-store strings are diverted to');
 +  console.log('  role=subject, and a string naming several lists is tagged per platform.');
 +  console.log('  Neither number is wrong; they answer different questions.');
 +}
 </file> </file>
  
Line 1324: Line 1383:
   ['2024/CCS/modern-problems-require-modern-solutions-community-developed-techniques-for-onli', '137 videos and 4,297 comments on TikTok'],   ['2024/CCS/modern-problems-require-modern-solutions-community-developed-techniques-for-onli', '137 videos and 4,297 comments on TikTok'],
   ['2025/USENIX/darkgram-a-large-scale-analysis-of-cybercriminal-activity-channels-on-telegram', 'now replaced by the Meta Content Library'],   ['2025/USENIX/darkgram-a-large-scale-analysis-of-cybercriminal-activity-channels-on-telegram', 'now replaced by the Meta Content Library'],
 +  // Added 2026-08-27 after review found the '1% streaming API' quote attributed
 +  // to the wrong NDSS 2021 paper. hagen2021_numbers contains no occurrence of
 +  // "Twitter" at all; this is the paper the quote belongs to.
 +  ['2021/NDSS/to-err-is-human-characterizing-the-threat-of-unintended-urls-in-social-media', '1% streaming API that Twitter provides to vetted researchers'],
 +  ['2021/NDSS/to-err-is-human-characterizing-the-threat-of-unintended-urls-in-social-media', 'all the numbers that we presented in this paper are lower bounds'],
 +  // Added after review found the cross-platform blocking range omitted TikTok,
 +  // which is at the TOP of it, not absent from it.
 +  ['2025/IMC/exploration-of-the-dynamics-of-buy-and-sale-of-social-media-accounts', 'TikTok and Instagram demonstrated the highest'],
 +  ['2025/IMC/exploration-of-the-dynamics-of-buy-and-sale-of-social-media-accounts', 'TikTok 1,700 816'],
 +  // Added 2026-08-27 after the generic reviewer pointed out that the header
 +  // sentence claimed to cover "every figure the page attributes to a paper"
 +  // while many attributed figures were in no check at all. These close the gap.
 +  ['2026/PETS/a-year-under-the-dsa-ad-transparencys-uneven-landscape', '98.9% of all explanation texts cite only the main targeting form'],
 +  ['2026/NDSS/hey-there-you-are-using-whatsapp-enumerating-three-billion-accounts-for-security-and-privacy', 'roughly two-thirds of the images (66 %) contain detectable human faces'],
 +  ['2026/NDSS/hey-there-you-are-using-whatsapp-enumerating-three-billion-accounts-for-security-and-privacy', '245 countries'],
 +  ['2019/WWW/auditing-offline-data-brokers-via-facebooks-advertising-platform', 'Australia (81.3%), and for the U.K. (74.4%)'],
 +  ['2026/PETS/banned-books-analysis-of-censorship-on-amazon-com', '8,965 out of the 796,081'],
 +  // Column splice: the running sentence is interleaved. The paper's own
 +  // contiguous statement of the same fact is in its contributions list.
 +  ['2023/IMC/flocking-to-mastodon-tracking-the-great-twitter-migration', 'The top 25% most populous instances contain 96% of the users'],
 +  ['2023/IMC/flocking-to-mastodon-tracking-the-great-twitter-migration', '2,879 unique Mastodon instances'],
 +  ['2025/IMC/exploration-of-the-dynamics-of-buy-and-sale-of-social-media-accounts', 'Facebook 649 37 5.70'],
 +  ['2026/WWW/does-this-button-work-investigating-youtubes-ineffective-user-controls', '22,722'],
 +  ['2024/IMC/beyond-the-guidelines-assessing-metas-political-ad-moderation-in-the-eu', '29.5 million'],
 +  // "63.2 bn" on the page is a rounding of this table value; check the value.
 +  ['2026/NDSS/hey-there-you-are-using-whatsapp-enumerating-three-billion-accounts-for-security-and-privacy', '63,170,000,000'],
 +  ['2024/WWW/tiktok-and-the-art-of-personalization-investigating-exploration-and-exploitation', '4.9M'],
 ]; ];
  
Line 1350: Line 1436:
  
 ^ Probe ^ First regex ^ What it matched by mistake ^ Effect ^ ^ Probe ^ First regex ^ What it matched by mistake ^ Effect ^
-| terms of service | ''terms of (service%%\|%%use)'' | ''"in **terms of us**er pairs"'' | 147 platform-subject hits became **134** after adding a word boundary after ''use''+| terms of service | ''terms of (service%%\|%%use)'' | ''%%"in **terms of us**er pairs"%%'' | 147 platform-subject hits became **134** after adding a word boundary after ''use''
-| Digital Services Act | ''%%\bDSA\b%%'' | the **DSA signature algorithm** — ''".RSA or .DSA file under META-INF/"'' | 27 platform-subject hits became **15** for the narrowed ''Digital Services Act%%\|%%Article 40'' form, and the page uses the even narrower ''Digital Services Act'' count of 25 over the whole corpus | +| Digital Services Act | ''%%\bDSA\b%%'' | the **DSA signature algorithm** — ''%%".RSA or .DSA file under META-INF/"%%'' | 27 platform-subject hits became **15** for the narrowed ''Digital Services Act%%\|%%Article 40'' form, and the page uses the even narrower ''Digital Services Act'' count of 25 over the whole corpus | 
-| ad archive | ''Ad(vert(ising)?)? Library'' | the Android **advertising library** — ''"Google's AdMob advertising library"'' | 56 platform-subject hits, mostly false; replaced with a regex requiring a platform name or ''Ad Library API'' |+| ad archive | ''Ad(vert(ising)?)? Library'' | the Android **advertising library** — ''%%"Google's AdMob advertising library"%%'' | 56 platform-subject hits, mostly false; replaced with a regex requiring a platform name or ''Ad Library API'' |
 | YouTube family | ''youtube%%\|\byt\b%%'' | ''\byt\b'' as an abbreviation anywhere | dropped ''\byt\b'' entirely before any figure was computed | | YouTube family | ''youtube%%\|\byt\b%%'' | ''\byt\b'' as an abbreviation anywhere | dropped ''\byt\b'' entirely before any figure was computed |
  
Line 1359: Line 1445:
 <WRAP important> <WRAP important>
 **''/Article 40%%\|%%vetted researcher/'' returned 19 papers. We hand-checked all 19 and exactly one is on point.** The other 18 are: **''/Article 40%%\|%%vetted researcher/'' returned 19 papers. We hand-checked all 19 and exactly one is on point.** The other 18 are:
-  * **ACM reference numbers** — ''"Queue 10, 11, Article 40, 10 pages"'', ''"Comput. Surveys 48, 3, Article 40"'', ''"CHI '22 ... Article 400/404/407/409"'' (11 papers)+  * **ACM reference numbers** — ''%%"Queue 10, 11, Article 40, 10 pages"%%'', ''%%"Comput. Surveys 48, 3, Article 40"%%'', ''%%"CHI '22 ... Article 400/404/407/409"%%'' (11 papers)
   * **GDPR Article 40** codes of conduct, not DSA Article 40 (1 paper: PETS 2023 //Data Security on the Ground//)   * **GDPR Article 40** codes of conduct, not DSA Article 40 (1 paper: PETS 2023 //Data Security on the Ground//)
-  * **"vetted researchers" meaning artefact release on request** — ''"we will share our code with vetted researchers upon publication"'', ''"open-sourced to vetted researchers and vendors upon request"'' (4 papers) +  * **"vetted researchers" meaning artefact release on request** — ''%%"we will share our code with vetted researchers upon publication"%%'', ''%%"open-sourced to vetted researchers and vendors upon request"%%'' (4 papers) 
-  * **"vetted researchers" meaning someone else's access programme** — Censys (''"provides vetted researchers with access to a search engine of Internet-wide scanning results"'') and the Twitter 1% stream (2 papers)+  * **"vetted researchers" meaning someone else's access programme** — Censys (''%%"provides vetted researchers with access to a search engine of Internet-wide scanning results"%%'') and the Twitter 1% stream (2 papers)
  
 The one on-point hit is {[mccrosky2026_does]}, which discusses proposed vetted-researcher mandates rather than using one. So the publishable claim is **"essentially nobody in these seven venues has used the DSA Article 40 route"**, and the count 19 is published only as the probe's raw output with this audit attached. A page that had printed "19 papers engage with DSA Article 40" would have been wrong by a factor of nineteen. The one on-point hit is {[mccrosky2026_does]}, which discusses proposed vetted-researcher mandates rather than using one. So the publishable claim is **"essentially nobody in these seven venues has used the DSA Article 40 route"**, and the count 19 is published only as the probe's raw output with this audit attached. A page that had printed "19 papers engage with DSA Article 40" would have been wrong by a factor of nineteen.
Line 1383: Line 1469:
 | **total distinct strings matching any platform token** | **1,174** | | **total distinct strings matching any platform token** | **1,174** |
  
-**The full string-by-string assignment follows. This is the residue: nothing is hidden behind a summary.** Reproduce with ''node scripts/platforms_report.mjs --dump''. Columns are: papers, role, family (or families, pipe-separated), the verbatim string.+**The full string-by-string assignment follows. This is the residue: nothing is hidden behind a summary.** Reproduce with ''%%node scripts/platforms_report.mjs --dump%%''. Columns are: papers, role, family (or families, pipe-separated), the verbatim string.
  
 <file text platforms_fold_dump.txt> <file text platforms_fold_dump.txt>
Line 2565: Line 2651:
 Reading notes on that dump: Reading notes on that dump:
  
-  * ''"Alexa"'' alone is **51 papers**, all assigned ''ranking''. This single line is the difference between 176 and 39 Amazon papers. +  * ''%%"Alexa"%%'' alone is **51 papers**, all assigned ''ranking''. This single line is the difference between 176 and 39 Amazon papers. 
-  * ''"tiktoken"'' is the OpenAI tokenizer, assigned ''falsepos''. A substring match on ''tiktok'' finds it. +  * ''%%"tiktoken"%%'' is the OpenAI tokenizer, assigned ''falsepos''. A substring match on ''tiktok'' finds it. 
-  * ''"Amazon Reviews"'', ''"WikiText-103, XSum, Amazon Reviews, CC-News, and Reddit"'' are assigned ''benchmark'': training corpora named after a platform. The paper trains on them; it does not measure the platform. +  * ''%%"Amazon Reviews"%%'', ''%%"WikiText-103, XSum, Amazon Reviews, CC-News, and Reddit"%%'' are assigned ''benchmark'': training corpora named after a platform. The paper trains on them; it does not measure the platform. 
-  * ''"Google, Amazon, and IBM text-to-speech APIs"'' is ''mlservice''; ''"Google Firebase Test Lab and Amazon Device Farm"'' is ''infrastructure''+  * ''%%"Google, Amazon, and IBM text-to-speech APIs"%%'' is ''mlservice''; ''%%"Google Firebase Test Lab and Amazon Device Farm"%%'' is ''infrastructure''
-  * Strings naming several platforms (''"Amazon, Walmart, eBay, Best Buy, and Home Depot"'') are tagged for **each** family they name, which is why the family counts do not sum to 897. +  * Strings naming several platforms (''%%"Amazon, Walmart, eBay, Best Buy, and Home Depot"%%'') are tagged for **each** family they name, which is why the family counts do not sum to 897. 
-  * **Known imperfections we did not fix**, visible in the dump: ''"Amazon private registry"'' is assigned ''subject'' and is probably a package registry; ''"AOSP, Amazon, Xiaomi and LG"'' is Amazon as a device vendor. These are the kind of residue the hand-audit prices, which is why the audit exists.+  * **Known imperfections we did not fix**, visible in the dump: ''%%"Amazon private registry"%%'' is assigned ''subject'' and is probably a package registry; ''%%"AOSP, Amazon, Xiaomi and LG"%%'' is Amazon as a device vendor. These are the kind of residue the hand-audit prices, which is why the audit exists.
  
 ==== Fold 2: detection.phenomenon into ten families ==== ==== Fold 2: detection.phenomenon into ten families ====
Line 4477: Line 4563:
 ===== Hand audits: the candidate sets and their measured precision ===== ===== Hand audits: the candidate sets and their measured precision =====
  
-The family sets are **regex candidate sets**, so they were audited against the papers' own full text with ''scripts/platforms_audit.mjs'', which prints whitespace-collapsed windows around each platform-name match. Samples are deterministic (every //k//-th row of the ''--list'' output, which is sorted by year then venue), so the audit is reproducible.+The family sets are **regex candidate sets**, so they were audited against the papers' own full text with ''scripts/platforms_audit.mjs'', which prints whitespace-collapsed windows around each platform-name match. Samples are deterministic (every //k//-th row of the ''%%--list%%'' output, which is sorted by year then venue), so the audit is reproducible
 + 
 +**These samples are small** — //n// = 7, 15, 16 and 11. At //n// = 15 the 95% interval around 73% is roughly ±20 points. The precisions below are coarse corrections on a candidate set, not measurements, and the content page now says so too.
  
 ==== TikTok — full audit, all 7 candidates ==== ==== TikTok — full audit, all 7 candidates ====
Line 4484: Line 4572:
 | **genuine** | IEEE S&P 2024 //A Picture is Worth 500 Labels// {[west2024_picture]} | extracted and evaluated the on-device ML models shipped in the TikTok app | | **genuine** | IEEE S&P 2024 //A Picture is Worth 500 Labels// {[west2024_picture]} | extracted and evaluated the on-device ML models shipped in the TikTok app |
 | **genuine** | TheWebConf 2024 //TikTok and the Art of Personalization// {[vombatkere2024_tiktok]} | five sock-puppet accounts driving the feed, plus ''TikTok-Api'' | | **genuine** | TheWebConf 2024 //TikTok and the Art of Personalization// {[vombatkere2024_tiktok]} | five sock-puppet accounts driving the feed, plus ''TikTok-Api'' |
-| **genuine** | CCS 2024 //Modern problems require modern solutions// {[simko2024_modern]} | collected 120 TikTok videos and 4,297 comments; verified in full text |+| **genuine** | CCS 2024 //Modern problems require modern solutions// {[simko2024_modern]} | collected social-media video and comment data from TikTok and YouTube. The paper's own wording is ''%%"the qualitative analysis of 137 videos and 4,297 comments on TikTok (n = 120) and YouTube (n = 17)"%%'' — so **137 videos in total, of which 120 are TikTok**, and the 4,297 comments are across both platforms. An earlier version of this row said "120 TikTok videos and 4,297 comments", which silently reassigned the combined comment count to TikTok alonecorrected after review. |
 | **genuine** | IEEE S&P 2026 //Setting the Course, but Forgetting to Steer// {[karnam2026_setting]} | GDPR right-of-access requests to TikTok from sock-puppet accounts | | **genuine** | IEEE S&P 2026 //Setting the Course, but Forgetting to Steer// {[karnam2026_setting]} | GDPR right-of-access requests to TikTok from sock-puppet accounts |
 | no — topic only | PETS 2023 //Creative beyond TikToks// | interview and diary study of adolescents; TikTok is the subject matter, not the measured system | | no — topic only | PETS 2023 //Creative beyond TikToks// | interview and diary study of adolescents; TikTok is the subject matter, not the measured system |
 | no — topic only | PETS 2026 //"The city isn't uploading me to TikTok"// | interview study on data collection in urban public spaces; TikTok appears in the title quote | | no — topic only | PETS 2026 //"The city isn't uploading me to TikTok"// | interview study on data collection in urban public spaces; TikTok appears in the title quote |
-| no — collision | PETS 2023 //RAVEN// | tool list contains ''"Tiktok"''; the paper is enterprise IP address variation |+| no — collision | PETS 2023 //RAVEN// | tool list contains ''%%"Tiktok"%%''; the paper is enterprise IP address variation |
  
 **Precision 4/7 = 57%.** **Precision 4/7 = 57%.**
Line 4500: Line 4588:
 **Precision 11/15 = 73%.** All four false positives are 2022 or later, which is why the content page warns that the recent Twitter/X counts are inflated relative to the earlier ones, and states the trend as a change in **composition** rather than in size. **Precision 11/15 = 73%.** All four false positives are 2022 or later, which is why the content page warns that the recent Twitter/X counts are inflated relative to the earlier ones, and states the trend as a change in **composition** rather than in size.
  
-==== Meta — every 10th of 151 = 15 audited ====+==== Meta — every 10th of 151 = 16 audited ====
  
-**Genuine (10):** CCS 2010 //Detecting and characterizing social spam campaigns// (3.5 M users' wall messages) · USENIX 2012 //MyPageKeeper// · CCS 2017 //walk2friends// (Instagram check-ins) · TheWebConf 2018 //Tagvisor// (239 k Instagram posts) · TheWebConf 2019 //Auditing Offline Data Brokers via Facebook's Advertising Platform// {[venkatadri2019_auditing]} · USENIX 2020 //DELF// {[cohn2020_delf]} (Facebook-authored, own systems) · NDSS 2021 //All the Numbers are US// {[hagen2021_numbers]} (WhatsApp crawling) · TheWebConf 2023 //The Thin Ideology of Populist Advertising// {[capozzi2023_thin]} (Meta Ad Library, 45 k campaigns) · USENIX 2024 //The Imitation Game// {[acharya2024_imitation]} · IMC 2025 //Buy and Sale of Social Media Accounts// {[beluri2025_exploration]}.+**Genuine (11):** CCS 2010 //Detecting and characterizing social spam campaigns// (3.5 M users' wall messages) · USENIX 2012 //MyPageKeeper// · CCS 2017 //walk2friends// (Instagram check-ins) · TheWebConf 2018 //Tagvisor// (239 k Instagram posts) · TheWebConf 2019 //Auditing Offline Data Brokers via Facebook's Advertising Platform// {[venkatadri2019_auditing]} · USENIX 2020 //DELF// {[cohn2020_delf]} (Facebook-authored, own systems) · NDSS 2021 //All the Numbers are US// {[hagen2021_numbers]} (WhatsApp crawling) · TheWebConf 2023 //The Thin Ideology of Populist Advertising// {[capozzi2023_thin]} (Meta Ad Library, 45 k campaigns) · USENIX 2024 //The Imitation Game// {[acharya2024_imitation]} · IMC 2025 //Buy and Sale of Social Media Accounts// {[beluri2025_exploration]} · TheWebConf 2026 //Longitudinal Trends in Global Climate Change Discourse on Facebook// {[biswas2026_longitudinal]} (299,329 Facebook posts via CrowdTangle).
  
 **False positives (5):** TheWebConf 2013 //Google+ or Google-?// (measures Google+; Facebook only in the framing) · CCS 2015 //Perplexed Messengers from the Cloud// (the Facebook client app is one of many analysed; the study is push clouds) · USENIX 2022 //Pre-hijacked accounts// (Facebook as an identity-provider example) · PETS 2023 //Creative beyond TikToks// (Facebook in related work) · TheWebConf 2025 //Cross-Modal Transfer from Memes to Videos// (Facebook Hateful Memes benchmark). **False positives (5):** TheWebConf 2013 //Google+ or Google-?// (measures Google+; Facebook only in the framing) · CCS 2015 //Perplexed Messengers from the Cloud// (the Facebook client app is one of many analysed; the study is push clouds) · USENIX 2022 //Pre-hijacked accounts// (Facebook as an identity-provider example) · PETS 2023 //Creative beyond TikToks// (Facebook in related work) · TheWebConf 2025 //Cross-Modal Transfer from Memes to Videos// (Facebook Hateful Memes benchmark).
  
-**Precision 10/15 = 67%.**+**Precision 11/16 = 69%.** 
 + 
 +<WRAP important> 
 +**This row was wrong on first publication and was corrected by review.** It read "every 10th of 151 = **15** audited ... precision **10/15 = 67%**"A stride of 10 over 151 rows yields **16** samples (indices 0, 10, … 150), not 15, and the sixteenth — TheWebConf 2026 //Longitudinal Trends in Global Climate Change Discourse on Facebook// — was silently dropped. It is unambiguously genuine: the content page cites it two sections earlier for having collected 299,329 Facebook posts through CrowdTangle. So the audited sample is 16 and the precision is 11/16. TikTok (stride 1 over 7), Twitter/X (stride 10 over 142 → 15) and Amazon (stride 7 over 72 → 11) were re-checked and are correct. Found by the figures reviewer; the author had counted the sample by eye from a truncated terminal listing rather than from ''%%wc -l%%''
 +</WRAP>
  
 ==== Amazon — every 7th of 72 = 11 audited ==== ==== Amazon — every 7th of 72 = 11 audited ====
Line 4512: Line 4604:
 **Genuine (4):** IEEE S&P 2011 //How to Shop for Free Online// (analysed **Amazon Payments** as a cashier-as-a-service provider and found logic flaws; verified in full text) · CCS 2020 //Dangerous Skills Got Certified// {[cheng2020_dangerous]} (Alexa skill store) · TheWebConf 2024 //Understanding GDPR Non-Compliance in Privacy Policies of Alexa Skills// {[liao2024_gdpr]} · PETS 2025 //Erasing the Echo// (Alexa data deletion). **Genuine (4):** IEEE S&P 2011 //How to Shop for Free Online// (analysed **Amazon Payments** as a cashier-as-a-service provider and found logic flaws; verified in full text) · CCS 2020 //Dangerous Skills Got Certified// {[cheng2020_dangerous]} (Alexa skill store) · TheWebConf 2024 //Understanding GDPR Non-Compliance in Privacy Policies of Alexa Skills// {[liao2024_gdpr]} · PETS 2025 //Erasing the Echo// (Alexa data deletion).
  
-**False positives (7):** CCS 2018 //Assessing Non-Visual SSL Certificates// · TheWebConf 2020 //Snippext// (Amazon Reviews benchmark) · IEEE S&P 2022 //Time-Print// (USB drives //purchased on// Amazon — verified in full text: ''"a generic device found on Amazon"'', ''"purchased by users on Amazon as of September 2020"'') · IEEE S&P 2023 //Breaking Security-Critical Voice Authentication// (evaluates **Amazon Connect Voice ID**, a hosted ML product; scored ''mlservice'', and a reasonable person could score it ''subject'') · TheWebConf 2023 //CaML// · PETS 2024 //DeTorrent// · TheWebConf 2026 //FeedGuard// (Amazon dataset benchmark).+**False positives (7):** CCS 2018 //Assessing Non-Visual SSL Certificates// · TheWebConf 2020 //Snippext// (Amazon Reviews benchmark) · IEEE S&P 2022 //Time-Print// (USB drives //purchased on// Amazon — verified in full text: ''%%"a generic device found on Amazon"%%'', ''%%"purchased by users on Amazon as of September 2020"%%'') · IEEE S&P 2023 //Breaking Security-Critical Voice Authentication// (evaluates **Amazon Connect Voice ID**, a hosted ML product; scored ''mlservice'', and a reasonable person could score it ''subject'') · TheWebConf 2023 //CaML// · PETS 2024 //DeTorrent// · TheWebConf 2026 //FeedGuard// (Amazon dataset benchmark).
  
 **Precision 4/11 = 36%** — the lowest of the four, and the direct reason no Amazon sub-page was written. The genuine four also split into two unrelated objects: the Alexa voice/skill ecosystem (3) and an Amazon web service (1). **Precision 4/11 = 36%** — the lowest of the four, and the direct reason no Amazon sub-page was written. The genuine four also split into two unrelated objects: the Alexa voice/skill ecosystem (3) and an Amazon web service (1).
Line 4518: Line 4610:
 ===== Quotes spot-checked against the source ===== ===== Quotes spot-checked against the source =====
  
-Every figure the content page attributes to a paper is listed in ''scripts/platforms_quotecheck.mjs'' with the phrase that must appear in that paper's ''paper.cols.txt''. Whitespace is collapsed on both sides first.+Every figure and every quoted phrase the content page attributes to a paper is listed in ''scripts/platforms_quotecheck.mjs'' with the text that must appear in that paper's ''paper.cols.txt''. Whitespace is collapsed on both sides first. 
 + 
 +<WRAP important> 
 +**That sentence was not true when this page was first published, and the generic reviewer caught it.** The list then held 26 checks and covered the //numbered// figures but not every attributed figure: the 98.9% YouTube explanation share, the 66% face-detection rate, 81.3%/74.4%, 1.1% of 796,081, the Mastodon 96% and 2,879, the per-platform blocking rates, 22,722, 29.5 M ads and 63,170,000,000 were all attributed on the page and checked by nobody. It now holds **42** checks and the sentence is true. The lesson generalises past this page: a quote-check list built from "the figures I published" misses everything a reader would also want to trust, and the number guard cannot see quoted phrases at all. 
 +</WRAP>
  
 <file text platforms_quotecheck-output.txt> <file text platforms_quotecheck-output.txt>
Line 4547: Line 4643:
 PASS     CCS 2024  "137 videos and 4,297 comments on TikTok" PASS     CCS 2024  "137 videos and 4,297 comments on TikTok"
 PASS     USENIX 2025  "now replaced by the Meta Content Library" PASS     USENIX 2025  "now replaced by the Meta Content Library"
 +PASS     NDSS 2021  "1% streaming API that Twitter provides to vetted researchers"
 +PASS     NDSS 2021  "all the numbers that we presented in this paper are lower bounds"
 +PASS     IMC 2025  "TikTok and Instagram demonstrated the highest"
 +PASS     IMC 2025  "TikTok 1,700 816"
 +PASS     PETS 2026  "98.9% of all explanation texts cite only the main targeting form"
 +PASS     NDSS 2026  "roughly two-thirds of the images (66 %) contain detectable human faces"
 +PASS     NDSS 2026  "245 countries"
 +PASS     WWW 2019  "Australia (81.3%), and for the U.K. (74.4%)"
 +PASS     PETS 2026  "8,965 out of the 796,081"
 +PASS     IMC 2023  "The top 25% most populous instances contain 96% of the users"
 +PASS     IMC 2023  "2,879 unique Mastodon instances"
 +PASS     IMC 2025  "Facebook 649 37 5.70"
 +PASS     WWW 2026  "22,722"
 +PASS     IMC 2024  "29.5 million"
 +PASS     NDSS 2026  "63,170,000,000"
 +PASS     WWW 2024  "4.9M"
  
-26 pass, 0 fail, of 26 checks+42 pass, 0 fail, of 42 checks
 </file> </file>
  
Line 4554: Line 4666:
  
 ^ Paper ^ What failed ^ Resolution ^ ^ Paper ^ What failed ^ Resolution ^
-| IMC 2021 //Throttling Twitter// {[xue2021_throttling]} | the extraction's paraphrase ''"only t.co and twitter.com are throttled"'' is **not in the paper** | replaced with the paper's own wording, which is about SNI matching: ''"throttling is triggered upon observing Twitter-related domains (*.twimg.com, twitter.com, t.co) in the SNI"''. The page quotes the paper, not the extraction. | +| IMC 2021 //Throttling Twitter// {[xue2021_throttling]} | the extraction's paraphrase ''%%"only t.co and twitter.com are throttled"%%'' is **not in the paper** | replaced with the paper's own wording, which is about SNI matching: ''%%"throttling is triggered upon observing Twitter-related domains (*.twimg.com, twitter.com, t.co) in the SNI"%%''. The page quotes the paper, not the extraction. | 
-| IMC 2025 //Buy and Sale of Social Media Accounts// {[beluri2025_exploration]} | the 19.71% sentence is interleaved with the adjacent column | split into two contiguous fragments, both of which pass: the sentence tail, and the table row ''"All 11,457 2,259 19.71"''+| IMC 2025 //Buy and Sale of Social Media Accounts// {[beluri2025_exploration]} | the 19.71% sentence is interleaved with the adjacent column | split into two contiguous fragments, both of which pass: the sentence tail, and the table row ''%%"All 11,457 2,259 19.71"%%''
-| NDSS 2026 //Revealing The Secret Power// {[galeazzi2026_revealing]} | ''"approximately eight times for Ukraine-Russia"'' is spliced (''"approxibeen able ... mately eight times"'') | replaced with two contiguous fragments: ''"order of magnitude (0.0069 vs. 0.084)"'' and ''"been restricted since June 2023"'' |+| NDSS 2026 //Revealing The Secret Power// {[galeazzi2026_revealing]} | ''%%"approximately eight times for Ukraine-Russia"%%'' is spliced (''%%"approxibeen able ... mately eight times"%%'') | replaced with two contiguous fragments: ''%%"order of magnitude (0.0069 vs. 0.084)"%%'' and ''%%"been restricted since June 2023"%%'' |
  
 After those replacements: **26 checks, 26 pass, 0 fail.** After those replacements: **26 checks, 26 pass, 0 fail.**
  
-One further note on the corpus text: some IMC volumes in ''paper.cols.txt'' include the **published reviewer comments** ("Reviewer #2 Strengths: ..."). A keyword probe over full text can therefore hit a reviewer's sentence rather than the authors'. Two of the early rate-limit examples in the probe output are exactly that. It does not change the paper counts materially at this scale, but a probe designed to measure what //authors// say would need to strip those sections.+One further note on the corpus text: some IMC volumes in ''paper.cols.txt'' include the **published reviewer comments** ("Reviewer #2 Strengths: ..."). A keyword probe over full text can therefore hit a reviewer's sentence rather than the authors'. Two of the early rate-limit examples in the probe output are exactly that. Quantified rather than waved away: **36 of the 5,869** ''paper.cols.txt'' files contain the string ''%%Reviewer #%%'', and **9 of the 897** platform-subject papers do. So the contamination is real and bounded at about 1% of the population every probe on this page ran over. A probe designed to measure what //authors// say would still need to strip those sections.
  
 ===== External sources ===== ===== External sources =====
Line 4569: Line 4681:
  
 ^ Claim on the page ^ Primary source ^ Verbatim quote ^ Date on the page ^ ^ Claim on the page ^ Primary source ^ Verbatim quote ^ Date on the page ^
-| X API is pay-per-usage, %%$0.005%%/Post read, capped at 3 M Post reads per month, no academic tier | ''https://docs.x.com/x-api/getting-started/pricing'' | ''"The X API uses pay-per-usage pricing. No subscriptions—pay only for what you use."''; ''"Pay-per-usage plans are capped at 3 million Post reads per monthly billing cycle."'' | none shown | +| X API is pay-per-usage, %%$0.005%%/Post read, capped at 3 M Post reads per month, no academic tier | ''https://docs.x.com/x-api/getting-started/pricing'' | ''%%"The X API uses pay-per-usage pricing. No subscriptions—pay only for what you use."%%''; ''%%"Pay-per-usage plans are capped at 3 million Post reads per monthly billing cycle."%%'' | none shown | 
-| CrowdTangle withdrawn 14 August 2024 | ''https://transparency.meta.com/researchtools/other-datasets/crowdtangle/'' | ''"As of August 14, 2024, CrowdTangle is no longer available."'' | ''"UPDATED AUG 16, 2024"''+| CrowdTangle withdrawn 14 August 2024 | ''https://transparency.meta.com/researchtools/other-datasets/crowdtangle/'' | ''%%"As of August 14, 2024, CrowdTangle is no longer available."%%'' | ''%%"UPDATED AUG 16, 2024"%%''
-| Meta Content Library scope and the 100-follower threshold | ''https://transparency.meta.com/researchtools/meta-content-library/'' | ''"posts that appear on public profiles that are either verified or that have 100 or more followers"''; ''"All applications are independently reviewed by the Secure Data Access Center (CASD ...)"'' | ''"UPDATED APR 30, 2026"''+| Meta Content Library scope and the 100-follower threshold | ''https://transparency.meta.com/researchtools/meta-content-library/'' | ''%%"posts that appear on public profiles that are either verified or that have 100 or more followers"%%''; ''%%"All applications are independently reviewed by the Secure Data Access Center (CASD ...)"%%'' | ''%%"UPDATED APR 30, 2026"%%''
-| Meta Content Library eligibility criteria | ''https://developers.facebook.com/docs/content-library-and-api/get-access'' | ''"Dedicated to the pursuit of education and research"'', ''"Accredited"'', ''"Qualified to grant academic degrees"'', ''"A not-for-profit endeavor"'' | none shown | +| Meta Content Library eligibility criteria | ''https://developers.facebook.com/docs/content-library-and-api/get-access'' | ''%%"Dedicated to the pursuit of education and research"%%'', ''%%"Accredited"%%'', ''%%"Qualified to grant academic degrees"%%'', ''%%"A not-for-profit endeavor"%%'' | none shown | 
-| TikTok Research Tools regions, eligibility, turnaround, data | ''https://developers.tiktok.com/products/research-api/'' | ''"Academic institutions in the US, EEA, UK or Switzerland"''; ''"Not-for-profit and/or independent research institution, organization, association, or body in the EU"''; ''"You can typically expect to hear back from us within 4 weeks"'' | none shown | +| TikTok Research Tools regions, eligibility, turnaround, data | ''https://developers.tiktok.com/products/research-api/'' | ''%%"Academic institutions in the US, EEA, UK or Switzerland"%%''; ''%%"Not-for-profit and/or independent research institution, organization, association, or body in the EU"%%''; ''%%"You can typically expect to hear back from us within 4 weeks"%%'' | none shown | 
-| TikTok Commercial Content Library is EU-only | ''https://developers.tiktok.com/products/commercial-content-api/'' | ''"in this phase we are ONLY including data from EU countries"'' | none shown | +| TikTok Commercial Content Library is EU-only | ''https://developers.tiktok.com/products/commercial-content-api/'' | ''%%"in this phase we are ONLY including data from EU countries"%%'' | none shown | 
-| YouTube Researcher Program exists and is separate from a quota increase | ''https://research.youtube/how-it-works/'' | ''"scaled, expanded access to global video metadata across the entire public YouTube corpus via our Data API"'' | none shown | +| YouTube Researcher Program exists and is separate from a quota increase | ''https://research.youtube/how-it-works/'' | ''%%"scaled, expanded access to global video metadata across the entire public YouTube corpus via our Data API"%%'' | none shown | 
-| YouTube Data API default quota | ''https://developers.google.com/youtube/v3/getting-started#quota'' | ''"a default quota allocation of 100 search.list calls, 100 videos.insert calls, and 10,000 units per day combined for all other endpoints"'' | none shown | +| YouTube Data API default quota | ''https://developers.google.com/youtube/v3/getting-started#quota'' | ''%%"a default quota allocation of 100 search.list calls, 100 videos.insert calls, and 10,000 units per day combined for all other endpoints"%%'' | none shown | 
-| Amazon PA-API 5.0 deprecated; calls return HTTP 403 | ''https://affiliate-program.amazon.com/creatorsapi/docs/en-us/paapiv5-deprecation'' | ''"The Amazon Product Advertising API 5.0 (PA-API 5) has been deprecated and is being replaced by the Creators API"''; ''"receive an HTTP 403 Forbidden response with an AccessDeniedException"'' | none shown | +| Amazon PA-API 5.0 deprecated; calls return HTTP 403 | ''https://affiliate-program.amazon.com/creatorsapi/docs/en-us/paapiv5-deprecation'' | ''%%"The Amazon Product Advertising API 5.0 (PA-API 5) has been deprecated and is being replaced by the Creators API"%%''; ''%%"receive an HTTP 403 Forbidden response with an AccessDeniedException"%%'' | none shown | 
-| Commission Delegated Regulation (EU) 2025/2050, of 1 July 2025, entry into force rule | ''https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=OJ:L_202502050'' (CELEX 32025R2050) | ''"laying down the technical conditions and procedures under which providers of very large online platforms and of very large online search engines are to share data with vetted researchers"''; ''"This Regulation shall enter into force on the twentieth day following that of its publication in the Official Journal of the European Union."''; ''"Done at Brussels, 1 July 2025."'' | n/a | +| Commission Delegated Regulation (EU) 2025/2050, of 1 July 2025, entry into force rule | ''https://eur-lex.europa.eu/legal-content/EN/TXT/?uri=OJ:L_202502050'' (CELEX 32025R2050) | ''%%"laying down the technical conditions and procedures under which providers of very large online platforms and of very large online search engines are to share data with vetted researchers"%%''; ''%%"This Regulation shall enter into force on the twentieth day following that of its publication in the Official Journal of the European Union."%%''; ''%%"Done at Brussels, 1 July 2025."%%'' | n/a | 
-| X fined €120 M on 5 December 2025; researcher data access is one of three grounds | ''https://digital-strategy.ec.europa.eu/en/news/commission-fines-x-eu120-million-under-digital-services-act'' | ''"X's terms of service prohibit eligible researchers from independently accessing its public data, including through scraping."''; ''"This is the first non-compliance decision under the DSA."'' | ''"Publication 05 December 2025"'', ''"Last update 16 January 2026"''+| X fined €120 M on 5 December 2025; researcher data access is one of three grounds | ''https://digital-strategy.ec.europa.eu/en/news/commission-fines-x-eu120-million-under-digital-services-act'' | ''%%"X's terms of service prohibit eligible researchers from independently accessing its public data, including through scraping."%%''; ''%%"This is the first non-compliance decision under the DSA."%%'' | ''%%"Publication 05 December 2025"%%'', ''%%"Last update 16 January 2026"%%''
-| Current VLOP designation list, including WhatsApp | ''https://digital-strategy.ec.europa.eu/en/policies/list-designated-vlops-and-vloses'' | list includes ''"WhatsApp Ireland Ltd."'', ''"X Internet Unlimited Company(XIUC)"'', ''"Meta Platforms Ireland Limited (MPIL)"'', ''"TikTok Technology Limited"'', ''"Amazon EU S.à.r.l."'' | ''"Information updated on 24 July 2026"'' |+| Current VLOP designation list, including WhatsApp | ''https://digital-strategy.ec.europa.eu/en/policies/list-designated-vlops-and-vloses'' | list includes ''%%"WhatsApp Ireland Ltd."%%'', ''%%"X Internet Unlimited Company(XIUC)"%%'', ''%%"Meta Platforms Ireland Limited (MPIL)"%%'', ''%%"TikTok Technology Limited"%%'', ''%%"Amazon EU S.à.r.l."%%'' | ''%%"Information updated on 24 July 2026"%%'' |
 | ''help.crowdtangle.com'' is gone | DNS | ''net::ERR_NAME_NOT_RESOLVED'' | 2026-08-27 | | ''help.crowdtangle.com'' is gone | DNS | ''net::ERR_NAME_NOT_RESOLVED'' | 2026-08-27 |
 +| X pay-per-use launched 6 Feb 2026; Basic and Pro remain for existing subscribers; Owned Reads added 20 Apr 2026 at %%$0.001%% | ''%%https://docs.x.com/changelog%%'' | ''%%"Today, we officially launched X API Pay-Per-Use pricing"%%''; ''%%"Basic and Pro plans remain available, and existing subscribers can opt in to Pay-Per-Use."%%''; ''%%"Effective April 20, 2026, we introduced new Owned Reads pricing at $0.001 per resource"%%'' | entries dated ''%%Feb 6, 2026%%'' and ''%%Apr 16, 2026%%'' |
 +| Reg. (EU) 2025/2050 was published in the OJ on 9 October 2025, so it has been in force since 29 October 2025 | the same EUR-Lex record | ''%%"OJ L, 2025/2050, 9.10.2025"%%'' | n/a |
 +| The DSA Data Access Portal accepts applications from 29 October 2025 and publishes a register of vetted-researcher projects | ''%%https://data-access.dsa.ec.europa.eu/home%%'' (headless browser) | ''%%"You can send applications as of 29 October 2025."%%''; ''%%"Find out more about ongoing research projects conducted by vetted researchers who have access to data under Article 40 of the Digital Services Act."%%'' | none shown |
 +| Pushshift live access is moderator-only, by Reddit approval, for moderation use only | ''%%https://support.reddithelp.com/hc/en-us/articles/16470271632404-Pushshift-Access-Request%%'' (headless browser; Cloudflare-walled to ''%%curl%%'') | ''%%"which will be reinstated for verified Reddit moderators"%%''; ''%%"Each moderator will also need explicit approval from Reddit, and the use of Pushshift will be limited to moderation use cases only."%%'' | ''%%"Updated 1 year ago"%%'' |
 +| TikTok's non-academic EU pathway is a beta | ''%%https://developers.tiktok.com/products/research-api/%%'' | ''%%"We are currently beta testing this service with select researchers in the US, UK, Switzerland, Norway, Iceland and Liechtenstein."%%'' — the sentence sits immediately after the EU not-for-profit clause | none shown |
  
-Two of these pages are JavaScript-only and were fetched with Playwright's own Chromium rather than ''curl'' (''transparency.meta.com'', ''developers.facebook.com''; ''curl'' returns an error page for the second). The DSA data-access portal at ''https://data-access.dsa.ec.europa.eu/'' renders nothing without JavaScript — the page title ''"DSA - Data Access Portal"'' is all that could be confirmed, and the content page says only that the portal exists.+Two of these pages are JavaScript-only and were fetched with Playwright's own Chromium rather than ''curl'' (''transparency.meta.com'', ''developers.facebook.com''; ''curl'' returns an error page for the second). The DSA data-access portal at ''https://data-access.dsa.ec.europa.eu/'' renders nothing without JavaScript — the page title ''%%"DSA - Data Access Portal"%%'' is all that could be confirmed, and the content page says only that the portal exists.
  
 ==== Reported by a sub-agent, NOT verified, NOT used on the page ==== ==== Reported by a sub-agent, NOT verified, NOT used on the page ====
Line 4590: Line 4707:
 | Official Journal publication date of Reg. 2025/2050 (9 October 2025) and entry into force (29 October 2025) | EUR-Lex confirmed the instrument, its adoption date and the twentieth-day rule; we did not confirm the OJ date itself, so the page states the rule and not the date | | Official Journal publication date of Reg. 2025/2050 (9 October 2025) and entry into force (29 October 2025) | EUR-Lex confirmed the instrument, its adoption date and the twentieth-day rule; we did not confirm the OJ date itself, so the page states the rule and not the date |
 | Legacy X API Basic (%%$200%%/month) and Pro (%%$5,000%%/month) tiers, and their closure | ''developer.x.com'' returns HTTP 402 and the official forum thread returns 403. The current pricing page does not mention tiers, so the page describes only pay-per-usage | | Legacy X API Basic (%%$200%%/month) and Pro (%%$5,000%%/month) tiers, and their closure | ''developer.x.com'' returns HTTP 402 and the official forum thread returns 403. The current pricing page does not mention tiers, so the page describes only pay-per-usage |
-| Exact date the X Academic Research track was removed | the corroborating forum thread is 403. The page instead quotes a 2026 paper's own statement that academic access has ''"been restricted since June 2023"'' |+| Exact date the X Academic Research track was removed | the corroborating forum thread is 403. The page instead quotes a 2026 paper's own statement that academic access has ''%%"been restricted since June 2023"%%'' |
 | Reddit Data API pricing (%%$0.24%%/1,000 calls), rate limits (100 QPM OAuth), and Pushshift's current status | every Reddit-owned domain refused the fetch (403 or unreachable). The page makes no claim about Reddit pricing or limits; it reports only the corpus counts for Pushshift and the Reddit API | | Reddit Data API pricing (%%$0.24%%/1,000 calls), rate limits (100 QPM OAuth), and Pushshift's current status | every Reddit-owned domain refused the fetch (403 or unreachable). The page makes no claim about Reddit pricing or limits; it reports only the corpus counts for Pushshift and the Reddit API |
 | Ad Library coverage rules (political ads worldwide for 7 years, non-political EU-only for 1 year) and the government-ID requirement | ''transparency.meta.com'' ad-library pages did not yield the text; the page says only that an ad archive contains ads that ran | | Ad Library coverage rules (political ads worldwide for 7 years, non-political EU-only for 1 year) and the government-ID requirement | ''transparency.meta.com'' ad-library pages did not yield the text; the page says only that an ad archive contains ads that ran |
Line 4596: Line 4713:
 | ICPSR/SOMAR compute fees for Meta Content Library access from January 2026 | no primary source found | | ICPSR/SOMAR compute fees for Meta Content Library access from January 2026 | no primary source found |
 | Google Ads Transparency Center researcher API | no primary Google page describes one; the page makes no claim | | Google Ads Transparency Center researcher API | no primary Google page describes one; the page makes no claim |
 +| **X has appealed the €120 M DSA fine** (reported as filed at the EU General Court on 16 February 2026) | reported by the currency reviewer from secondary press; no case number could be confirmed from a primary Curia document. **Not published** — the page presents the decision as the Commission published it and does not claim finality either way. This is the single most likely thing on the page to go out of date first |
 +| **DSA Art. 40(12) has been enforced directly by researchers in German courts** — Democracy Reporting International v X, reported as LG Berlin II, 6 February 2025 (41 O 140/25), and a Kammergericht order of 17 February 2026 granting API access to 30 June 2026 and holding that Art. 40(12) confers an individually enforceable right | reported by the currency reviewer; we tried to verify it. ''%%democracy-reporting.org%%'' is Cloudflare-walled even to a headless browser, the Columbia Global Freedom of Expression search did not surface the case, and the cited German legal blog's February 2026 archive does not contain it. **Not published.** If true it is the most important thing missing from the page, because it would mean the "no worked example of Art. 40" claim holds only for //published papers//, not for practice. What would close it: the Kammergericht order itself, or DRI's case page fetched from a network Cloudflare does not challenge |
 | Amazon Conditions of Use anti-scraping clause | ''amazon.com/gp/help/...'' returned HTTP 503 twice | | Amazon Conditions of Use anti-scraping clause | ''amazon.com/gp/help/...'' returned HTTP 503 twice |
  
Line 4611: Line 4730:
   * **Why platform-subject papers state authentication state //less// often** (65.8% vs 72.1% of all papers with a crawl configuration) even though the login wall matters more to them. The difference is 6.3 points on 260 papers; it could be noise. Not published as a finding, only as the two figures.   * **Why platform-subject papers state authentication state //less// often** (65.8% vs 72.1% of all papers with a crawl configuration) even though the login wall matters more to them. The difference is 6.3 points on 260 papers; it could be noise. Not published as a finding, only as the two figures.
   * **Whether the Twitter/X decline is caused by the API closing.** The share was already down to 1.9% in 2016–2018, years before the restriction. The page says so explicitly rather than drawing the tempting line.   * **Whether the Twitter/X decline is caused by the API closing.** The share was already down to 1.9% in 2016–2018, years before the restriction. The page says so explicitly rather than drawing the tempting line.
 +  * **Whether Art. 40(12) has already been enforced through national courts.** A reviewer reported a German line of cases (Democracy Reporting International v X) that would mean the route has been exercised in practice even though no paper here uses it. We could not verify it from a primary document — see the unverified table above. This is the biggest known hole in the page.
   * **The real cost of a metered-API study.** No paper in the corpus publishes its API spend. The arithmetic on the page (1 M posts = %%$5,000%%) is ours, from the vendor's published unit price, and is labelled as such.   * **The real cost of a metered-API study.** No paper in the corpus publishes its API spend. The arithmetic on the page (1 M posts = %%$5,000%%) is ours, from the vendor's published unit price, and is labelled as such.
-  * **Whether reused corpora still describe the platform.** 42.7% of platform papers use an existing dataset; nobody in the corpus tests whether conclusions from a 2019 Twitter corpus hold for X in 2026. Listed as an open question.+  * **Whether reused corpora still describe the platform.** 383 of 897 platform papers name an existing dataset, and 208 name one with no primary collection of their own; nobody in the corpus tests whether conclusions from a 2019 Twitter corpus hold for X in 2026. Listed as an open question.
  
 ===== Mistakes and near-misses in this run ===== ===== Mistakes and near-misses in this run =====
Line 4618: Line 4738:
 Recorded because they are the part with reuse value. Recorded because they are the part with reuse value.
  
-  - **A concurrent-edit race gave a probe the wrong denominator.** ''platforms_fulltext.mjs'' obtains the platform-subject key set by shelling out to ''platforms_report.mjs --keys''. It ran while ''platforms_report.mjs'' was being rewritten and got **172** keys instead of 897, then computed every percentage on 172. Nothing errored; the output looked normal. Fixed by adding ''if (listed.size < 800) throw'' — a fail-loud guard, not a retry.+  - **A concurrent-edit race gave a probe the wrong denominator.** ''platforms_fulltext.mjs'' obtains the platform-subject key set by shelling out to ''%%platforms_report.mjs --keys%%''. It ran while ''platforms_report.mjs'' was being rewritten and got **172** keys instead of 897, then computed every percentage on 172. Nothing errored; the output looked normal. Fixed by adding ''if (listed.size < 800) throw'' — a fail-loud guard, not a retry.
   - **The role filter was missing at the call site.** ''tagsOf()'' returns ''{family, role}''; the report accepted every tag it returned. Amazon read 923 papers for one run. Fixed, and the number is recorded above.   - **The role filter was missing at the call site.** ''tagsOf()'' returns ''{family, role}''; the report accepted every tag it returned. Amazon read 923 papers for one run. Fixed, and the number is recorded above.
   - **Four probe regexes were too wide** (see the table above), and one had to be abandoned entirely after a hand audit found 1 on-point hit in 19.   - **Four probe regexes were too wide** (see the table above), and one had to be abandoned entirely after a hand audit found 1 on-point hit in 19.
-  - **Bare wiki links resolved inside the ''design:'' namespace.** ''%%[[Design]]%%'', ''%%[[start]]%%'' and ''%%[[Artifacts]]%%'' rendered as red links to ''design:design'', ''design:start'' and ''design:artifacts''. Caught by diffing ''class="wikilink2"'' out of the rendered DOM, not by reading the source. Fixed with a leading colon.+  - **Bare wiki links resolved inside the ''design:'' namespace.** ''%%[[Design]]%%'', ''%%[[start]]%%'' and ''%%[[Artifacts]]%%'' rendered as red links to ''design:design'', ''design:start'' and ''design:artifacts''. Caught by diffing ''%%class="wikilink2"%%'' out of the rendered DOM, not by reading the source. Fixed with a leading colon.
   - **The bibliography cache served a stale parse.** After appending 24 entries, the first render resolved only some citekeys. Fixed with ''?purge=true'' on ''literature:bibliography'' and then on ''design:platforms''; verified by counting %%<dt>%% entries in the rendered reference list (26) against distinct %%{[key]}%% markers on the page (26).   - **The bibliography cache served a stale parse.** After appending 24 entries, the first render resolved only some citekeys. Fixed with ''?purge=true'' on ''literature:bibliography'' and then on ''design:platforms''; verified by counting %%<dt>%% entries in the rendered reference list (26) against distinct %%{[key]}%% markers on the page (26).
   - **LaTeX accent escapes render as HTML entities.** ''Beno\^{i}t'' came out as ''Beno&circ;it'' in the reference list. The five new entries with diacritics were rewritten in UTF-8. Pre-existing entries elsewhere in the bibliography have the same problem and were left alone.   - **LaTeX accent escapes render as HTML entities.** ''Beno\^{i}t'' came out as ''Beno&circ;it'' in the reference list. The five new entries with diacritics were rewritten in UTF-8. Pre-existing entries elsewhere in the bibliography have the same problem and were left alone.
 +  - **A multi-valued field was published as an exclusive one.** The first draft read ''%%383 (42.7%) worked from an existing dataset rather than collecting anything themselves — a higher share than live collection (346, 38.6%)%%''. Both halves were wrong: ''%%temporal.mode%%'' is multi-valued, so 175 of the 383 //also// name a primary-collection mode, only **208** name an existing dataset and nothing else, and **628 (70.0%)** name some primary collection. Caught by the author before review, by asking what the exclusive split was; ''%%platforms_report.mjs%%'' now prints it so the next reader cannot make the same mistake.
 +  - **An audit sample was miscounted by one, in the direction that lowered the precision.** A stride of 10 over Meta's 151 candidates gives 16 samples, not 15; the sixteenth was dropped and is genuine, so the published precision was 67% instead of 69%. The author counted the sample from a truncated terminal listing instead of ''%%wc -l%%''. Found by review, not by the number guard — which passed, because "67" happens to appear in an unrelated per-year denominator elsewhere in the report. Explicit ALLOW entries for all four audit precisions have since been added to ''%%scripts/check_page_numbers.mjs%%'' so the next change to them is actually guarded rather than passing by coincidence.
 +  - **A combined figure was reassigned to one platform.** This log said CCS 2024 "collected 120 TikTok videos and 4,297 comments"; the paper says 137 videos in total, of which 120 are TikTok, and the 4,297 comments span TikTok //and// YouTube. Found by review. The quote-check script had the right phrase all along and passed — the error was in the prose beside it, which is exactly the gap the number guard cannot see.
 +  - **A vendor fact was stale within the same page.** The first version said "the Basic tier the paper worked around no longer exists". X's own changelog says the opposite: pay-per-use launched 6 February 2026 and "Basic and Pro plans remain available" to existing subscribers. Found by the currency reviewer. The lesson is the page's own: an access-route claim needs a dated primary source even when it is only an aside.
 +  - **A quote was attributed to the wrong paper.** The //Denominator problem// bullet on sampled streams cited ''%%hagen2021_numbers%%'' (NDSS 2021, //All the Numbers are US//) for ''%%"the 1% streaming API that Twitter provides to vetted researchers"%%''. That paper is about WhatsApp and Signal phone-number enumeration and contains **no occurrence of the word "Twitter" at all**. The quote belongs to a **different NDSS 2021 paper**, //To Err.Is Human: Characterizing the Threat of Unintended URLs in Social Media//, which the author had read in the same probe output and confused with it. Found by the citations reviewer. Fixed by adding ''%%kaleli2021_human%%'' to the bibliography and re-citing; two quote checks for it were added to ''%%platforms_quotecheck.mjs%%''. This is the worst class of error on the page: a quote check that only verifies "does this phrase exist somewhere in the corpus" would have passed it, and the one here passed because the phrase was never in the check list at all. **Every quote on a page belongs in the check list, not just the numbered figures.**
 +  - **A cross-platform range omitted the platform at the top of it.** The page reported blocking efficacy "//from 5.02% (YouTube) to 46.41% (Instagram)//" across {[beluri2025_exploration]}'s five platforms — leaving out TikTok, which is at or above Instagram. The paper's own summary is ''%%"TikTok and Instagram demonstrated the highest detection efficacy at 48%, whereas YouTube and Facebook showed the lowest efficacy at just 5%"%%''; its Table 8 gives TikTok 816 of 1,700, and the efficacy cell for that row is lost to a column splice, which is how it came to be dropped. Found by the citations reviewer. Fixed, with the paper's prose figure quoted rather than a recomputed one.
 +  - **A true finding was framed so it invited a false inference.** The headline box's "official researcher routes are almost entirely absent from this literature" is correct as a count — the generic reviewer re-ran it with wider probes and the absolutes held — but a fresh reader would have concluded that the programmes do not work, when part of the absence is mechanical: 2023-and-later launches, a provisional 2025–2026 slice, and the venues that publish most such work (ICWSM, CHI, FAccT, communications journals) excluded by construction. That caveat existed on the page, 280 lines below the claim. Moved into the box.
 +  - **Three pages counted the same names and got different numbers, and none of them said so.** [[design:website_selection]] reports 463 papers for Alexa; this page reported 412; [[design:user_studies]] publishes 139 / 92 / 279 for Mechanical Turk against this page's 179. A subset appearing to exceed its superset is a signal that two folds disagree, not that one is broken. Reconciled and now printed by the report script: **486** papers name Alexa in a stated population source at all, **464** of those have a web-unit population tuple — which is what [[design:website_selection]] measures — and 412 is what survives our role rule. The content page carries the reconciliation and does not claim its fold is the better one.
 +  - **A schema label was published as an audited one.** The ''%%crawlConfig.authentication%%'' split (145 / 22 / 4 / 0) was stated as what papers "state", when [[programming:registration]] warns on this exact field that ''%%crawlConfig%%'' carries one evidence quote for the whole object so the label cannot be checked against it, and [[privacy:consent]] measured 19.4% false positives on ''%%consentAction%%'', another field of that same object. We did not audit the 145; the page now says so. This is the finding most likely to move a number if someone does the audit.
   - **No accidental exposure.** No credentials, participant data or unpublished material was written to the wiki. The only non-public thing touched was ''.env'' for the JSON-RPC credentials, read by ''scripts/dw.mjs''.   - **No accidental exposure.** No credentials, participant data or unpublished material was written to the wiki. The only non-public thing touched was ''.env'' for the JSON-RPC credentials, read by ''scripts/dw.mjs''.
 +
 +===== Observations for whoever maintains the shared bibliography =====
 +
 +Found incidentally while checking this page's citations. **None of these keys are used by this page**; they are recorded because a key-string collision check does not find them.
 +
 +^ Duplicate pair ^ Note ^
 +| ''%%lerner2016internet%%'' / ''%%lerner2016_internet%%'' | same paper under two keys |
 +| ''%%bouhoula2024automated%%'' / ''%%bouhoula2024_automated%%'' | same |
 +| ''%%fouad2022my%%'' / ''%%fouad2022_cookie%%'' | same |
 +| ''%%bottger2025_regional%%'' / ''%%boettger2025_regional%%'' | same, transliteration variant |
 +| ''%%ahmad2026_ipfp%%'' / ''%%ahmad2026_more%%'' | same |
 +
 +Also: ''%%biswas2026_longitudinal%%'''s DOI ''%%10.1145/3774904.3793026%%'' did **not** resolve at doi.org or via the CrossRef API on 2026-08-27, although the title and author list check out against the ACM listing. Almost certainly registration lag on a TheWebConf 2026 paper rather than a wrong DOI, but it is unverified as of this run.
 +
 +And a corpus trap worth knowing: ''%%data/fulltext/2024/IMC/beyond-the-guidelines-.../paper.cols.txt%%'' contains a **null byte**, so plain ''%%grep%%'' treats the file as binary and reports no match for a phrase that is present. Use ''%%grep -a%%'', or read it from a language runtime. Every script on this page reads the file through Node, so none of the published figures were affected — but a hand-check with ''%%grep%%'' would have produced a false negative. Same family as the known corpus under-count trap.
  
 ===== Review log ===== ===== Review log =====
Line 4630: Line 4774:
 Four reviewers, each given the page text, the report scripts and their unedited output, and these notes, and each told explicitly that the author's context may not be exhaustive. Four reviewers, each given the page text, the report scripts and their unedited output, and these notes, and each told explicitly that the author's context may not be exhaustive.
  
-//Reviews are running as this page is first saved; the log is filled in below in the same sitting.//+ Three focused passes ran in parallel first; the generic pass ran afterwards against the corrected page. Rejections are recorded as fully as fixes — they are the only record of whether a reviewer earned its slot. 
 + 
 +==== Reviewer 1 — figures against the scripts (Claude Sonnet) ==== 
 + 
 +^ Finding ^ Verdict ^ Action ^ 
 +| Meta audit sample is 16, not 15 — a stride of 10 over 151 rows yields indices 0…150 — and the dropped 16th ({[biswas2026_longitudinal]}) is genuine, so precision is 11/16 = 69%, not 10/15 = 67% | **accepted**, reproduced with ''%%wc -l%%'' | fixed on both pages; the dropped paper added to the genuine list; TikTok, Twitter/X and Amazon strides re-checked and correct | 
 +| This log said CCS 2024 collected "120 TikTok videos and 4,297 comments"; the paper says 137 videos total (120 TikTok + 17 YouTube) with the comments spanning both | **accepted** | fixed, with the paper's own sentence quoted | 
 +| The number guard passes the three other audit precisions only **by coincidence** — "57" matches inside an unrelated WhatsApp quote, "67" inside a per-year denominator, "73" inside the artifact table — so a future change to them would pass silently | **accepted**, and the more useful of its findings | explicit ALLOW entries added for all four audit precisions, each naming its numerator and denominator | 
 +| All four committed ''%%*-output.txt%%'' files reproduce byte-for-byte, including a full re-run of the 7-minute full-text probe; ''%%check_page_numbers.mjs%%'' returns OK; every figure in //Measured results you can cite// verified independently against ''%%paper.cols.txt%%'' and ''%%population.n%%'' | confirmation, no action | — | 
 + 
 +==== Reviewer 2 — citations and quotes (Claude Sonnet) ==== 
 + 
 +^ Finding ^ Verdict ^ Action ^ 
 +| The ''%%"1% streaming API that Twitter provides to vetted researchers"%%'' quote was attributed to {[hagen2021_numbers]}, which contains **no occurrence of "Twitter"**; it belongs to a different NDSS 2021 paper | **accepted — the most serious finding of the review** | re-cited to {[kaleli2021_human]}, new bibliography entry, two quote checks added | 
 +| The cross-platform blocking range omitted TikTok, which is at the top of it, not absent from it | **accepted** | fixed in both places, quoting the paper's own 48% summary | 
 +| ''%%biswas2026_longitudinal%%'''s DOI does not resolve at doi.org or CrossRef | **accepted as an observation**, not a defect — title and authors check out, almost certainly registration lag | recorded above rather than changing the entry | 
 +| Five duplicate-key pairs elsewhere in the shared bibliography, none used by this page | **accepted as an observation** | recorded above for the bibliography's maintainer | 
 +| ''%%beyond-the-guidelines%%'''s ''%%paper.cols.txt%%'' contains a null byte, so plain ''%%grep%%'' silently reports no match | **accepted as an observation** | recorded above; no published figure affected, since every script reads through Node | 
 +| All 26 content-page and 17 provenance-page citekeys resolve; all 24 new entries' authors, titles, years and DOIs verified, including the eight fetched by hand from landing pages; all 13 footnoted URLs fetched and their quotes confirmed, including the JS-only Meta and DSA pages | confirmation, no action | — | 
 + 
 +==== Reviewer 3 — external currency (Claude Sonnet) ==== 
 + 
 +^ Finding ^ Verdict ^ Action ^ 
 +| The page said "the Basic tier the paper worked around no longer exists". X's changelog says pay-per-use launched 6 February 2026 and "Basic and Pro plans remain available" to existing subscribers | **accepted** | rewritten, with both changelog entries quoted and dated; the point that the model changed twice inside 2026 is now made explicitly | 
 +| Pushshift was labelled "current in practice". Reddit's own moderator page says access is reinstated only for approved moderators and "limited to moderation use cases only" | **accepted** | re-labelled historical-for-researchers in three places, with the primary quote; the page now says a paper citing Pushshift is citing a historical dump | 
 +| TikTok's non-academic EU pathway is a beta, not open | **accepted** | the beta sentence is now quoted rather than the eligibility asserted | 
 +| The OJ publication date (9 October 2025) and entry into force (29 October 2025) could be closed off, and the DSA portal states applications open from 29 October 2025 and publishes a register of vetted-researcher projects | **accepted**, re-verified by the author against EUR-Lex and the portal | both dates and the register are now on the page; the register is named as where the missing worked example will first appear | 
 +| X has appealed the €120 M fine (reported as filed 16 February 2026) | **not published** — no primary Curia document could be found | recorded in the unverified table | 
 +| DSA Art. 40(12) has been enforced directly by researchers in German courts (Democracy Reporting International v X) | **not published** — three independent verification attempts failedsee the unverified table | recorded, with what would close it. If true it is the largest hole in the page | 
 +| All 13 previously verified URLs still live with their quotes unchanged; YouTube, Meta and Amazon claims unchanged | confirmation, no action | — | 
 + 
 +==== Reviewer 4 — generic, no checklist (Claude Fable) ==== 
 + 
 +The generic pass was run against the corrected page, after the three focused ones. It produced 14 findings; 11 were accepted, 3 partly. It is the only reviewer that found anything about **framing** rather than about facts, and it earned its slot. 
 + 
 +^ Finding ^ Verdict ^ Action ^ 
 +| The headline "almost entirely absent from this literature" is numerically right (it re-ran the probes wider and the absolutes held) but invites the inference that the programmes do not work; the mechanical explanation sat 280 lines below | **accepted** | caveat moved into the box | 
 +| The ''%%crawlConfig.authentication%%'' split republishes a schema read that [[programming:registration]] explicitly warns against on this field, with no audit and no caveat | **accepted — the highest-value finding** | caveat carried inline, with the sibling field's measured 19.4% false-positive rate; the 145 remain unaudited and the page says so | 
 +| Cross-page count conflicts: Alexa 412 here vs 463 on [[design:website_selection]] (a subset exceeding its superset), and Mechanical Turk 179 here vs 139 / 92 / 279 on [[design:user_studies]] | **accepted** | reconciled in the report script and on the page: 486 name Alexa at all, 464 with a web-unit population, 412 after the role rule | 
 +| This page's quote-check header claimed to cover "every figure the content page attributes to a paper" while ~12 attributed figures were in no check at all, and the embedded script and output were stale | **accepted** | 16 checks added (42 total, all passing), both ''%%<file>%%'' blocks regenerated, and the overclaim recorded above rather than quietly fixed | 
 +| "The top two rows are largely app-store work" — row 2 is Meta, not app-store work | **accepted** | rewritten to rows 1 and 7 | 
 +| Two pointers send the reader to [[design:mobile_and_app_measurement]] for skill-store and on-device-extraction material that page does not contain | **accepted** | reworded to say what that page does and does not cover | 
 +| Google is rank 1 with 323 papers and gets no route, no read-first and no pointer; and the page is silent on what Reddit currently offers | **accepted** | both named as explicit gaps — search/ads auditing in Open Questions, Reddit as a "we could not establish this" bullet | 
 +| "statistically indistinguishable from the 33.8% baseline" — no test was run, and the platform papers are inside that baseline | **accepted** | reworded to "essentially at the baseline", with both caveats stated | 
 +| "roughly twice as likely" does not name which baseline it is twice of; against crawling papers (11.5%) the ratio is ~1.3× | **accepted** | both baselines now named | 
 +| "Three practical consequences:" followed by four bullets | **accepted** | trivial fix | 
 +| ''%%TikTok-Api%%'' is the unofficial scraper library, on a page whose axis is official-versus-unofficial routes | **accepted** | row relabelled | 
 +| "61.5% of platform-subject papers name no instrument" converts absence-from-extracted-tool-lists into a claim about what papers state | **accepted** | softened to an upper bound, with the un-audited 552 stated | 
 +| The early routes table and the closing currency table duplicate each other row-for-row | **partly accepted** | the early table's status column reduced to one word and the evidence left to the closing section; the two tables are kept, because one is a route inventory and the other a dated verdict, and a skimmer needs the first | 
 +| The TikTok no-page justification ("four papers is a paragraph") reads as the page marking its own homework | **accepted** | rewritten to rest on venue scope: the TikTok literature is mostly outside these seven venues, so a page built from this corpus would misrepresent the field | 
 +| Smaller rigour points: a duplicated sentence in this log; a negative claim ("no academic tier") with no stated search method; an unquantified reassurance about reviewer-comment contamination; audit precisions quoted as bare points at //n// = 7–16 | **all accepted** | sentence deleted; the tier claim scoped to the pages an applicant is sent to; contamination quantified (36 of 5,869 files, 9 of 897 platform papers); a small-//n// caveat added here and on the page | 
 +| Confirmations: the framing claim //is// delivered (organised by route and denominator, not by vendor); length and section order match the house pattern; the read-first quartet is right for the stated reader; the box's zero/once absolutes survive wider independent probes | no action | — | 
 + 
 +One thing the generic reviewer reported that is **not** a page defect: the local checkout's ''pages/start.txt'' and ''pages/design.txt'' are stale relative to the live wiki. The live pages were updated in this sitting; the stale files are old local copies and were never the source of a save. 
 + 
  
 ===== Related ===== ===== Related =====
provenance/design/platforms.1787862158.txt.gz · Last modified: by karel.kubicek.claude

Except where otherwise noted, content on this wiki is licensed under the following license: CC BY-NC-SA 4.0
CC BY-NC-SA 4.0 Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki