Table of Contents
Provenance: Programming:Stateful stateless
Working notes behind Programming:Stateful stateless: every query, every folding rule and its residue, every quote checked, every external source verified or rejected, and every judgement call. Corpus-level caveats are on corpus and are not repeated here.
Voice here is a log, not prose. It is for someone checking a number.
The run
| Date | 2026-08-19 |
| Corpus | data/extract/run1/extractions.jsonl, 5,859 papers, 7 venues (CCS, IMC, NDSS, PETS, USENIX Security, TheWebConf, IEEE S&P), 2010–2026 |
| Page before | 4,479 bytes of notes (rev 1742374572): a two-bullet key message, a short reading list, a “Shallow vs Deep crawling” section, the unedited page template comment, and a todo box reading “This page only contains notes” |
| Page after | 60,763 bytes (rev 1787140910), after three rounds of review fixes plus a re-review pass |
| Decision | Extend, not create. The title is already the right scope for the design question. The page was a stub; nothing was broadened or narrowed. Overlap with neighbours was deliberate and is recorded under Judgement calls. |
| Who | Claude (Opus 5) end to end, with four review sub-agents (see Review) |
| Neighbours patched | design:crawling_location (false Jueckstock claim, rev 1787137202), privacy:cookies (third-party cookies were not discontinued, rev 1787140005), programming:crawler:openwpm (stale “notes stub” pointer, rev 1787139249), literature:bibliography (duplicate key removed, rev 1787138947) |
| Scripts added | scripts/report_stateful_stateless.mjs, scripts/statefulness_probe.mjs, scripts/statefulness_audit.mjs, scripts/state_quotecheck.mjs, scripts/pdf_grep.py, scripts/state_probe/{server,probe,thirdparty,launch_args}.mjs |
| Bibliography | 13 new keys added in two saves (revs 1787136793 and 1787136845), one of them later deleted as a duplicate of an existing key (rev 1787138947); see reviewer 3, finding 1 |
Populations and denominators
Two denominators are in play and the page states which it uses everywhere it matters.
| Population | Definition | N |
|---|---|---|
crawled | crawlConfig !== null OR studyTypes includes automated-web-crawl (POPULATIONS.crawled in scripts/lib.mjs) | 1,120 |
| has a configuration record | crawlConfig !== null | 1,080 |
| states statefulness | crawlConfig.statefulness ∈ {stateful, stateless, both} | 219 |
- The page quotes 19.6% of 1,120, not 20.3% of 1,080, because a paper with no crawl-configuration record at all has certainly not told you whether its crawl was stateful. Both are printed by the report script.
not-applicable(17 papers) andnot-stated(844) are sentinels and are never counted as answers.- Karel's task note said “19.2% of 859 crawling papers”. That is the pre-2026 corpus figure and is stale: the crawling population went from 859 to 1,120 in commit
8a6b843. Re-derived here as 219/1,120 = 19.6%. Nothing was carried over. - Counts are of papers throughout. No table on the page counts tuples.
Every query, with its output
One script produces every figure on the page:
node scripts/report_stateful_stateless.mjs > out/stateful_stateless_report.txt node scripts/report_stateful_stateless.mjs --wiki > out/stateful_stateless_report_wiki.txt
Real, unedited output:
- stateful_stateless_report.txt
corpus: 5859 papers population 'crawled' (crawlConfig object present OR studyTypes includes automated-web-crawl): 1120 of which a crawlConfig object was built: 1080 of which statefulness carries a stated value: 219 === How often a crawling paper says whether its crawl was stateful === crawlConfig.statefulness Papers Share of 1120 crawling papers Share of 1080 with a crawlConfig -------------------------------- ------ ----------------------------- -------------------------------- stateless 113 10.1% 10.5% stateful 77 6.9% 7.1% both 29 2.6% 2.7% not-stated 844 75.4% 78.1% not-applicable 17 1.5% 1.6% //no crawlConfig object at all// 40 3.6% — Stated at all: 219 of 1120 crawling papers = 19.6% (20.3% of the 1080 with a crawlConfig object). Among the 219 that state it: stateless 113 (51.6%), stateful 77 (35.2%), both arms 29 (13.2%). === Statefulness against the other crawl-configuration fields it competes with === Field Papers stating it Share of 1120 crawling papers -------------------------- ----------------- ----------------------------- Interaction depth 841 75.1% Authentication 779 69.6% At least one browser named 529 47.2% Consent action 349 31.2% **Stateful or stateless** 219 19.6% Headless or headful 140 12.5% === Trend: reporting rate and the stateless share, by four-year bucket === Bucket Crawling papers State it Share stating stateless stateful both stateless share of stated ---------- --------------- -------- ------------- --------- -------- ---- ------------------------- 2010–2013 102 16 15.7% 7 8 1 43.8% 2014–2017 167 35 21.0% 14 15 6 40.0% 2018–2021 308 61 19.8% 31 21 9 50.8% 2022–2024 345 71 20.6% 42 22 7 59.2% 2025–2026* 198 36 18.2% 19 11 6 52.8% * 2025–2026: CCS 2026 and IMC 2026 have not been held, and IEEE S&P/WWW 2026 are incompletely selected because selection screens on OpenAlex abstracts. The bucket is under-represented by construction. Per-year detail: Year Crawling papers State it Share stateless stateful both ---- --------------- -------- ----- --------- -------- ---- 2010 25 4 16.0% 1 2 1 2011 22 2 9.1% 1 1 0 2012 29 7 24.1% 4 3 0 2013 26 3 11.5% 1 2 0 2014 35 8 22.9% 4 2 2 2015 41 10 24.4% 3 6 1 2016 40 10 25.0% 2 5 3 2017 51 7 13.7% 5 2 0 2018 61 12 19.7% 4 3 5 2019 97 10 10.3% 3 6 1 2020 75 21 28.0% 11 8 2 2021 75 18 24.0% 13 4 1 2022 110 25 22.7% 13 9 3 2023 125 23 18.4% 16 5 2 2024 110 23 20.9% 13 8 2 2025 129 23 17.8% 11 9 3 2026 69 13 18.8% 8 2 3 === The same buckets, for three reporting norms that did move === Bucket States statefulness (of crawling papers) Releases an artifact link (of all papers) Mentions an ethics review (of empirical papers) ---------- ---------------------------------------- ----------------------------------------- ----------------------------------------------- 2010–2013 16/102 = 15.7% 121/511 = 23.7% 47/460 = 10.2% 2014–2017 35/167 = 21.0% 295/769 = 38.4% 155/718 = 21.6% 2018–2021 61/308 = 19.8% 728/1439 = 50.6% 378/1272 = 29.7% 2022–2024 71/345 = 20.6% 1270/1955 = 65.0% 681/1649 = 41.3% 2025–2026* 36/198 = 18.2% 907/1185 = 76.5% 467/1019 = 45.8% === Every crawl-configuration field, reporting rate per bucket (of the crawling papers in each bucket) === Field 2010–2013 2014–2017 2018–2021 2022–2024 2025–2026* max-min last - first -------------------- -------------- --------------- --------------- --------------- --------------- ------- ------------ interactionDepth 80/102 = 78.4% 126/167 = 75.4% 237/308 = 76.9% 255/345 = 73.9% 143/198 = 72.2% 6.2 pp -6.2 pp authentication 61/102 = 59.8% 117/167 = 70.1% 213/308 = 69.2% 251/345 = 72.8% 137/198 = 69.2% 12.9 pp +9.4 pp browsers (>=1 named) 33/102 = 32.4% 81/167 = 48.5% 153/308 = 49.7% 162/345 = 47.0% 100/198 = 50.5% 18.2 pp +18.2 pp consentAction 25/102 = 24.5% 50/167 = 29.9% 99/308 = 32.1% 116/345 = 33.6% 59/198 = 29.8% 9.1 pp +5.3 pp **statefulness** 16/102 = 15.7% 35/167 = 21.0% 61/308 = 19.8% 71/345 = 20.6% 36/198 = 18.2% 5.3 pp +2.5 pp headless 1/102 = 1.0% 26/167 = 15.6% 41/308 = 13.3% 50/345 = 14.5% 22/198 = 11.1% 14.6 pp +10.1 pp The last two columns are the test of the page's claim: which field moved, and by how much. === By venue === Venue Crawling papers State it Share stating stateless stateful both ------- --------------- -------- ------------- --------- -------- ---- WWW 242 45 18.6% 20 19 6 USENIX 221 30 13.6% 17 12 1 CCS 163 27 16.6% 11 10 6 IMC 132 28 21.2% 17 9 2 NDSS 129 24 18.6% 15 7 2 PETS 123 42 34.1% 22 11 9 IEEE-SP 110 23 20.9% 11 9 3 === By automation framework: does the instrument make you say it? === Framework family Crawling papers State it Share stating stateless stateful both ------------------------------------------------------------------------------------ --------------- -------- ------------- --------- -------- ---- OpenWPM 58 32 55.2% 15 12 5 Selenium 242 67 27.7% 31 26 10 Puppeteer 76 27 35.5% 18 6 3 Playwright 34 12 35.3% 6 3 3 webXray 1 0 0.0% 0 0 0 Tracker Radar Collector 10 3 30.0% 2 0 1 Vulnerability/state-space crawlers 29 11 37.9% 4 7 0 OpenWPM //(name match over all tool categories, as on Programming:Crawler:OpenWPM)// 59 33 55.9% 16 12 5 //any framework named// 723 182 25.2% 91 68 23 //no framework named// 397 37 9.3% 22 9 6 === Designs whose result is uninterpretable without the statefulness: do they state it? === Subset of crawling papers N State statefulness Share stating stateless stateful both ------------------------------------------------------------------------------ ---- ------------------ ------------- --------- -------- ---- Repeat-visit designs (repeatVisits >= 2) 199 85 42.7% 49 21 15 Crawls that acted on a consent notice 36 22 61.1% 11 4 7 Crawls that logged in (authentication stated, not "none") 90 54 60.0% 7 39 8 Deep crawls (interactionDepth = deep-crawl) 157 40 25.5% 8 26 6 Crawls beyond the landing page (subpages or deep) 303 83 27.4% 30 40 13 Crawls whose consent interaction was //verified// by the privacy:consent audit 28 16 57.1% 8 3 5 //all crawling papers, for comparison// 1120 219 19.6% 113 77 29 === The word "stateful" belongs to two literatures; the extraction does not separate them === Subject matter of the paper (keyword fold over slug + detection.phenomenon + classification target) Papers stating statefulness stateless stateful both --------------------------------------------------------------------------------------------------- --------------------------- --------- -------- ---- tracking / privacy measurement 133 78 35 20 web-application security scanning 23 7 14 2 both vocabularies present 18 6 9 3 neither (residue) 45 22 19 4 RESIDUE — papers stating statefulness that neither keyword set matched, printed in full: stateless CCS/2010/blade-an-attack-agnostic-approach-for-preventing-drive-by-malware-infections stateless IMC/2011/understanding-website-complexity-measurements-metrics-and-implications stateful IMC/2012/evolution-of-social-attribute-networks-measurements-modeling-and-implications-us stateful USENIX/2012/efficient-and-scalable-socware-detection-in-online-social-networks stateless IEEE-SP/2013/finding-the-linchpins-of-the-dark-web-a-study-on-topologically-dedicated-hosts-o stateful WWW/2013/traveling-the-silk-road-a-measurement-analysis-of-a-large-anonymous-online-marke stateful WWW/2012/counting-beyond-a-yottabyte-or-how-sparql-1-1-property-paths-will-prevent-adopti stateful USENIX/2015/measuring-the-longitudinal-evolution-of-the-online-anonymous-marketplace-ecosyst stateful WWW/2015/e-commerce-reputation-manipulation-the-emergence-of-reputation-escalation-as-a-s stateless USENIX/2014/hulk-eliciting-malicious-behavior-in-browser-extensions stateful IMC/2016/a-first-look-at-quality-of-mobile-live-streaming-experience-the-case-of-periscop stateful IMC/2016/a-multi-perspective-analysis-of-carrier-grade-nat-deployment stateful WWW/2016/tell-me-about-yourself-the-malicious-captcha-attack stateful NDSS/2017/fake-co-visitation-injection-attacks-to-recommender-systems stateless PETS/2017/topics-of-controversy-an-empirical-analysis-of-web-censorship-lists stateless IMC/2018/an-empirical-analysis-of-the-commercial-vpn-ecosystem stateful WWW/2018/crimebb-enabling-cybercrime-research-on-underground-forums-at-scale stateful WWW/2019/web-experience-in-mobile-networks-lessons-from-two-million-page-visits stateless WWW/2019/who-watches-the-watchmen-exploring-complaints-on-the-web stateful CCS/2020/impersonation-as-a-service-characterizing-the-emerging-criminal-infrastructure-f both IMC/2020/reading-in-between-the-lines-an-analysis-of-dissenter stateless WWW/2020/a-first-look-at-commercial-5g-performance-on-smartphones stateful NDSS/2021/all-the-numbers-are-us-large-scale-abuse-of-contact-discovery-in-mobile-messengers stateless NDSS/2021/cv-inspector-towards-automating-detection-of-adblock-circumvention stateless IMC/2022/causal-impact-of-android-go-on-mobile-web-performance stateless IMC/2022/phishinpatterns-measuring-elicited-user-interactions-at-scale-on-phishing-websit stateless IMC/2022/respect-the-origin-a-best-case-evaluation-of-connection-coalescing-in-the-wild stateful USENIX/2022/experimental-security-analysis-of-the-app-model-in-business-collaboration-platfo both WWW/2023/a-method-to-assess-and-explain-disparate-impact-in-online-retailing stateless NDSS/2024/on-precisely-detecting-censorship-circumvention-in-real-world-networks stateful NDSS/2024/understanding-and-analyzing-appraisal-systems-in-the-underground-marketplaces stateless USENIX/2024/phishdecloaker-detecting-captcha-cloaked-phishing-websites-via-hybrid-vision-bas stateless WWW/2024/detecting-and-understanding-self-deleting-javascript-code stateful IEEE-SP/2010/a-practical-attack-to-de-anonymize-social-network-users stateful CCS/2025/lock-the-door-but-keep-the-window-open-extracting-app-protected-accessibility-in stateless IMC/2025/a-permissions-odyssey-a-systematic-study-of-browser-permissions-on-modern-websit stateless USENIX/2025/when-llms-go-online-the-emerging-threat-of-web-enabled-llms both NDSS/2026/characterizing-the-implementation-of-censorship-policies-in-chinese-llm-services stateful WWW/2025/the-poorest-man-in-babylon-a-longitudinal-study-of-cryptocurrency-investment-sca stateless NDSS/2026/loki-proactively-discovering-online-scams-by-mining-toxic-search-queries stateless NDSS/2026/benchmarking-and-understanding-safety-risks-in-ai-character-platforms stateless IEEE-SP/2018/the-spyware-used-in-intimate-partner-violence stateless IEEE-SP/2025/sok-decoding-the-enigma-of-encrypted-network-traffic-classifiers both IEEE-SP/2018/surveylance-automatically-detecting-online-survey-scams stateless NDSS/2026/on-borrowed-time-measurement-informed-understanding-of-the-ntp-pools-robustness-to-monopoly-attacks === Every paper that states BOTH arms (the comparison studies), in full === Year Venue Slug repeatVisits Shared crawlConfig quote (truncated) ---- ------- ---------------------------------------------------------- ------------ ---------------------------------------------------------------------------------------------------- 2010 WWW analyzing-content-level-properties-of-the-web-adversphere — We first disable cookies on our PlanetLab nodes ... After visiting the websites to establish a brows 2014 CCS the-web-never-forgets-persistent-tracking-mechanisms-in-th — Note that, except for the sequential crawl (Crawl1 ), we ran multiple browsers in parallel to extend 2014 CCS your-online-interests-pwned-a-pollution-attack-against-tar 50 Subsequently, users from both sets visit the controlled publisher page once every hour for a duratio 2015 NDSS i-do-not-know-what-you-visited-last-summer-protecting-user 2 In each site, we randomly visit four more pages. ... This process is repeated twice: once starting w 2016 CCS cspautogen-black-box-enforcement-of-content-security-polic 10 we use PhantomJS [34], a popular headless browser, to render each webpage ten times with five user-a 2016 CCS online-tracking-a-1-million-site-measurement-and-analysis — For each site, the browser will visit the homepage and wait until the site has finished loading or u 2016 IMC characterizing-website-behaviors-across-logged-in-and-not- 3 This ensures that each crawl is independent of each other by guaranteeing no state, e.g. cookies, is 2018 CCS can-browser-add-ons-protect-your-children-from-online-trac — Privacy Badger - assuming no previous browsing history - is the least effective ... However, in the 2018 PETS i-never-signed-up-for-this-privacy-implications-of-email-t 2 Each email is loaded twice in its own measurement instance: once with a fresh profile, and then agai 2018 WWW adbudgetkiller-online-advertising-budget-draining-attack — Starting from a fresh profile, the profile trainer produces customized browsing profiles by simulati 2018 WWW auditing-the-personalization-and-composition-of-politicall — the extension opened two new browser windows, one standard and one incognito, and began conducting s 2018 IEEE-SP surveylance-automatically-detecting-online-survey-scams 3 The crawler remains on each page for 90 seconds before restarting the session and opening the next w 2019 PETS 4-years-of-eu-cookie-law-results-and-lessons-learned 5 If not otherwise specified, we take care of erasing the browser cache and cookies stored before each 2020 IMC reading-in-between-the-lines-an-analysis-of-dissenter — To obtain the NSFW and “offensive” content ... we re-spider Dissenter using the HTTP cookies of an a 2020 WWW stop-tracking-me-bro-differential-tracking-of-user-demogra 5 A HPW crawl with a loaded persona is stateless, i.e., each HPW website visit is independent. We repe 2021 WWW cookie-swap-party-abusing-first-party-cookies-for-web-trac 3 After each website has finished loading, we wait for an additional two minutes... This process is th 2022 CCS im-spartacus-no-im-spartacus-proactively-protecting-users- 2 We evaluate the effectiveness of Spartacus by visiting the same phishing web sites with two differen 2022 PETS how-can-and-would-people-protect-from-online-tracking 2 On the second visit, we accept the cookies... and on the next visit, we try to opt-out from the prev 2022 USENIX web-cache-deception-escalates — We set up our crawler to visit pages on any subdomain we may discover on the target website, and tes 2023 WWW a-method-to-assess-and-explain-disparate-impact-in-online- — After collecting data for the selected products and zip codes, the crawler closes the browser and ca 2023 IEEE-SP the-leaky-web-automated-discovery-of-cross-site-informatio 5 We visit every pair up to five times to minimize the probability of false positives due to server-si 2024 PETS opted-out-yet-tracked-are-regulations-enough-to-protect-yo 9 After filtering the websites, we iteratively visit each website nine times from each of our 16 (+ co 2024 IEEE-SP to-auth-or-not-to-auth-a-comparative-analysis-of-the-pre-a 5 Each experiment ... crawled the site twice independently in parallel, once with the received session 2025 PETS johnny-can-t-revoke-consent-either-measuring-compliance-of 1 we visit each website afresh with storage cleared for all websites in the browser 2025 PETS intractable-cookie-crumbs-unveiling-the-nexus-of-stateful- 1 each crawl within a run is performed once without repetition 2025 PETS sheeps-clothing-wolfish-intent-automated-detection-and-eva — Browser state was purged after every crawl. Ad screenshots were collected from the targeted websites 2026 NDSS characterizing-the-implementation-of-censorship-policies-i 5 for each query and service, we complete five separate tests. For the majority of services, we keep t 2026 PETS the-masks-we-think-we-wear-privacy-threats-of-browser-exte — Each experiment starts from a copy of the corresponding clean profile so that the wallet always begi 2026 PETS redefining-website-fingerprinting-attacks-with-multi-agent — The crawler does not emulate user interaction such as scrolling, pausing, or branching behavior. It === Every paper that states a stateful-only crawl, in full === Year Venue Slug ---- ------- -------------------------------------------------------------------------- 2010 IMC challenges-in-measuring-online-advertising-systems 2010 IEEE-SP a-practical-attack-to-de-anonymize-social-network-users 2011 CCS automated-black-box-detection-of-side-channel-vulnerabilities-in-web-appli 2012 IMC evolution-of-social-attribute-networks-measurements-modeling-and-implicati 2012 USENIX efficient-and-scalable-socware-detection-in-online-social-networks 2012 WWW counting-beyond-a-yottabyte-or-how-sparql-1-1-property-paths-will-prevent- 2013 CCS delta-automatic-identification-of-unknown-web-based-infection-campaigns 2013 WWW traveling-the-silk-road-a-measurement-analysis-of-a-large-anonymous-online 2014 WWW adscape-harvesting-and-analyzing-online-display-ads 2014 WWW quite-a-mess-in-my-cookie-jar-leveraging-machine-learning-to-protect-web-a 2015 USENIX measuring-the-longitudinal-evolution-of-the-online-anonymous-marketplace-e 2015 USENIX the-unexpected-dangers-of-dynamic-javascript 2015 WWW cookies-that-give-you-away-the-surveillance-implications-of-web-tracking 2015 WWW e-commerce-reputation-manipulation-the-emergence-of-reputation-escalation- 2015 CCS sunlight-fine-grained-targeting-detection-at-scale-with-statistical-confid 2015 IEEE-SP understanding-and-monitoring-embedded-web-scripts 2016 IMC a-first-look-at-quality-of-mobile-live-streaming-experience-the-case-of-pe 2016 IMC a-multi-perspective-analysis-of-carrier-grade-nat-deployment 2016 USENIX internet-jones-and-the-raiders-of-the-lost-trackers-an-archaeological-stud 2016 USENIX tracing-information-flows-between-ad-exchanges-using-retargeted-ads 2016 WWW tell-me-about-yourself-the-malicious-captcha-attack 2017 NDSS fake-co-visitation-injection-attacks-to-recommender-systems 2017 PETS cross-device-tracking-measurement-and-disclosures 2018 CCS mystique-uncovering-information-leakage-from-browser-extensions 2018 WWW crimebb-enabling-cybercrime-research-on-underground-forums-at-scale 2018 WWW hiding-in-the-crowd-an-analysis-of-the-effectiveness-of-browser-fingerprin 2019 IMC tales-from-the-porn-a-comprehensive-privacy-analysis-of-the-web-porn-ecosy 2019 NDSS dont-trust-the-locals-investigating-the-prevalence-of-persistent-client-si 2019 WWW before-and-after-gdpr-the-changes-in-third-party-presence-at-public-and-pr 2019 WWW evaluating-anti-fingerprinting-privacy-enhancing-technologies 2019 WWW measuring-political-personalization-of-google-news-search 2019 WWW web-experience-in-mobile-networks-lessons-from-two-million-page-visits 2020 CCS impersonation-as-a-service-characterizing-the-emerging-criminal-infrastruc 2020 CCS the-cookie-hunter-automated-black-box-auditing-for-web-authentication-and- 2020 NDSS cross-origin-state-inference-cosi-attacks-leaking-web-site-states-through- 2020 PETS canarytrap-detecting-data-misuse-by-third-party-apps-on-online-social-netw 2020 PETS inferring-tracker-advertiser-relationships-in-the-online-advertising-ecosy 2020 PETS missed-by-filter-lists-detecting-unknown-third-party-trackers-with-invisib 2020 USENIX cached-and-confused-web-cache-deception-in-the-wild 2020 WWW beyond-the-front-page-measuring-third-party-dynamics-in-the-field 2021 NDSS all-the-numbers-are-us-large-scale-abuse-of-contact-discovery-in-mobile-me 2021 USENIX jaw-studying-client-side-csrf-with-hybrid-property-graphs-and-declarative- 2021 USENIX prisec-a-privacy-settings-enforcement-controller 2021 IEEE-SP black-widow-blackbox-data-driven-web-scanning 2022 CCS a-run-a-day-wont-keep-the-hacker-away-inference-attacks-on-endpoint-privac 2022 CCS cart-ology-intercepting-targeted-advertising-via-ad-network-identity-entan 2022 IMC measuring-uid-smuggling-in-the-wild 2022 PETS atom-ad-network-tomography 2022 USENIX a-large-scale-investigation-into-geodifferences-in-mobile-apps 2022 USENIX experimental-security-analysis-of-the-app-model-in-business-collaboration- 2022 WWW measuring-the-privacy-vs-compatibility-trade-off-in-preventing-third-party 2022 IEEE-SP the-state-of-the-samesite-studying-the-usage-effectiveness-and-adequacy-of 2022 IEEE-SP towards-automated-auditing-for-account-and-session-management-flaws-in-sin 2023 CCS marketing-to-children-through-online-targeted-advertising-targeting-mechan 2023 NDSS rescan-a-middleware-framework-for-realistic-and-robust-black-box-web-appli 2023 USENIX a-large-scale-measurement-of-website-login-policies 2023 IMC tracking-profiling-and-ad-targeting-in-the-alexa-echo-smart-speaker-ecosys 2023 IEEE-SP toss-a-fault-to-your-witcher-applying-grey-box-coverage-guided-mutational- 2024 IMC browsing-without-third-party-cookies-what-do-you-see 2024 NDSS understanding-and-analyzing-appraisal-systems-in-the-underground-marketpla 2024 PETS a-black-box-privacy-analysis-of-messaging-service-providers-chat-message-p 2024 IMC poster-identifying-filter-bubble-based-on-feed-level-embedding-similarity- 2024 PETS a-large-scale-study-of-cookie-banner-interaction-tools-and-their-impact-on 2024 USENIX spider-scents-grey-box-database-aware-web-scanning-for-stored-xss 2024 WWW tiktok-and-the-art-of-personalization-investigating-exploration-and-exploi 2024 IEEE-SP holistic-concolic-execution-for-dynamic-web-applications-via-symbolic-inte 2025 CCS lock-the-door-but-keep-the-window-open-extracting-app-protected-accessibil 2025 IEEE-SP 403-forbidden-ethically-evaluating-broken-access-control-in-the-wild 2025 NDSS evocrawl-exploring-web-application-code-and-state-using-evolutionary-searc 2025 PETS beyond-the-request-harnessing-http-response-headers-for-cross-browser-web- 2025 PETS more-and-scammier-ads-the-perils-of-youtubes-ad-privacy-settings 2025 WWW the-poorest-man-in-babylon-a-longitudinal-study-of-cryptocurrency-investme 2025 WWW before-after-the-effect-of-eus-2022-code-of-practice-on-disinformation 2025 PETS understanding-regional-filter-lists-efficacy-and-impact 2025 WWW the-first-early-evidence-of-the-use-of-browser-fingerprinting-for-online-t 2026 IEEE-SP setting-the-course-but-forgetting-to-steer-analyzing-compliance-with-gdprs 2026 PETS from-syntactic-matching-to-taint-tracking-and-back-a-comparative-study-of-
Folding, and its residue
Three fields on this page needed folding. Nothing else on the page aggregates free text.
1. Automation framework names
Reused scripts/tool_fold.mjs unchanged — the same file Programming:Crawler uses, so the two pages cannot disagree about what “a Selenium paper” is. Families are explicit ordered regex lists; first match wins; the unmapped residue is printed by report_crawler.mjs and is not re-printed here.
One deliberate discrepancy, resolved in the script rather than in prose. Programming:Crawler:OpenWPM defines “an OpenWPM paper” as any tools[] tuple whose name matches /open[\s-]?wpm/i with usedOrMentioned ∈ {used, produced}, regardless of the tuple's category. tool_fold.mjs only considers tuples categorised crawler-framework or browser-automation. The two definitions differ by one paper inside the crawling population:
| Definition | OpenWPM crawling papers | State statefulness | Share |
|---|---|---|---|
tool_fold.mjs families (category-restricted) | 58 | 32 | 55.2% |
| name match over all categories (as on the OpenWPM page) | 59 | 33 | 55.9% |
Both rows are printed by report_stateful_stateless.mjs. The page quotes 55.2% and names the other number and its definition in the same paragraph.
2. Subject matter: which literature the paper belongs to
The word “stateful” belongs to two literatures (tracking measurement; web-application security scanning) and the extraction does not separate them. There is no enum for this, so it was folded by keyword over a bag built from slug + every detection.phenomenon + every classification.target/targetDetail. The two regexes, verbatim from scripts/report_stateful_stateless.mjs:
const TRACKING_RE = /track|cookie|consent|banner|advertis|\bads?\b|advert|fingerprint|privacy|gdpr|ccpa|personaliz|personalis|retarget|ad.?network|third.?part|tcf|cmp|profiling|analytics|pixel/i; const APPSEC_RE = /vulnerab|xss|csrf|sqli|sql.injection|scanner|scanning|fuzz|exploit|access control|authentication bypass|session (management|fixation)|web application (security|scan)|taint|code coverage|crawler coverage|state.space|csp\b|content security policy|cache deception|xs-leak|clickjack/i;
A paper matching both is reported as “both vocabularies present” rather than assigned; a paper matching neither is residue and is printed in full, 45 papers, in the report output above. Spot-reading the residue: it is dominated by papers that are not web crawls in either sense (an NTP-pool robustness study, a carrier-grade-NAT deployment study, a commercial-VPN ecosystem study, a 5G performance study, several underground-marketplace studies). That is the expected shape for a broad security corpus and is why the residue is a row in the page's table rather than a footnote.
This fold is not presented on the page as a precise measurement. It is a two-way split by keyword, published as a ranking with the residue visible, exactly as the free-text rule requires.
3. Nothing else
crawlConfig.statefulness, .interactionDepth, .consentAction, .authentication, .repeatVisits and venue/year are enums or integers. They are published as exact percentages without folding.
The validity problem specific to this page, and what was done about it
crawlConfig carries one evidence.quote for the whole configuration object — statefulness, browsers, headless, consent action, interaction depth and authentication all share it. So the dataset's standard advice (“read a handful of evidence.quote values behind any figure”) cannot validate this field: the quote behind a statefulness value is as often evidence for the browser or the interaction depth. This page is entirely about that field, so two checks were built.
Check 1: mechanical text probe over all 219 stated values
node scripts/statefulness_probe.mjs # summary node scripts/statefulness_probe.mjs --sentences # the candidate sentences, per paper node scripts/statefulness_probe.mjs --only both --sentences
For each paper, every sentence in its own paper.cols.txt containing a state-management term and a first-person marker is extracted. A paper with no such sentence stated its statefulness nowhere the text can show, so the value was inferred rather than read.
- statefulness_probe_output.txt
Value Papers Text has a state sentence Text has none No full text Shared quote itself mentions state --------- ------ ------------------------- ------------- ------------ ---------------------------------- stateless 113 93 (82.3%) 20 (17.7%) 0 51 (45.1%) stateful 77 58 (75.3%) 19 (24.7%) 0 12 (15.6%) both 29 27 (93.1%) 2 (6.9%) 0 9 (31.0%) all stated: 219 papers; 178 (81.3%) have at least one state-management sentence in their own text, 41 (18.7%) have none, 0 have no full text on disk. the shared crawlConfig quote itself contains a state term for only 72 (32.9%) of them — which is the point: the quote is not evidence for this field. papers with NO state sentence in their own text (the false-positive candidates): both WWW/2010/analyzing-content-level-properties-of-the-web-adversphere stateless IEEE-SP/2013/finding-the-linchpins-of-the-dark-web-a-study-on-topologically-dedicated-hosts-o stateful WWW/2013/traveling-the-silk-road-a-measurement-analysis-of-a-large-anonymous-online-marke stateful WWW/2012/counting-beyond-a-yottabyte-or-how-sparql-1-1-property-paths-will-prevent-adopti stateful USENIX/2015/measuring-the-longitudinal-evolution-of-the-online-anonymous-marketplace-ecosyst stateful WWW/2015/e-commerce-reputation-manipulation-the-emergence-of-reputation-escalation-as-a-s stateless USENIX/2014/hulk-eliciting-malicious-behavior-in-browser-extensions stateless USENIX/2014/effective-attacks-and-provable-defenses-for-website-fingerprinting stateful WWW/2016/tell-me-about-yourself-the-malicious-captcha-attack stateless PETS/2017/fingerprinting-keywords-in-search-queries-over-tor stateless USENIX/2018/freezing-the-web-a-study-of-redos-vulnerabilities-in-javascript-based-web-server stateful WWW/2018/crimebb-enabling-cybercrime-research-on-underground-forums-at-scale stateful NDSS/2019/dont-trust-the-locals-investigating-the-prevalence-of-persistent-client-side-cross-site-scripting-in-the-wild stateful WWW/2019/evaluating-anti-fingerprinting-privacy-enhancing-technologies stateless WWW/2019/who-watches-the-watchmen-exploring-complaints-on-the-web both IMC/2020/reading-in-between-the-lines-an-analysis-of-dissenter stateful NDSS/2020/cross-origin-state-inference-cosi-attacks-leaking-web-site-states-through-xs-leaks stateless NDSS/2021/cv-inspector-towards-automating-detection-of-adblock-circumvention stateless WWW/2021/tls-1-3-in-practice-how-tls-1-3-contributes-to-the-internet stateful CCS/2022/a-run-a-day-wont-keep-the-hacker-away-inference-attacks-on-endpoint-privacy-zone stateless IMC/2022/respect-the-origin-a-best-case-evaluation-of-connection-coalescing-in-the-wild stateful USENIX/2022/a-large-scale-investigation-into-geodifferences-in-mobile-apps stateless PETS/2023/blocking-javascript-without-breaking-the-web-an-empirical-investigation stateless PETS/2023/evaluating-practical-quic-website-fingerprinting-defenses-for-the-masses stateless USENIX/2023/automated-cookie-notice-analysis-and-enforcement stateful IMC/2024/browsing-without-third-party-cookies-what-do-you-see stateful NDSS/2024/understanding-and-analyzing-appraisal-systems-in-the-underground-marketplaces stateful USENIX/2024/spider-scents-grey-box-database-aware-web-scanning-for-stored-xss stateful IEEE-SP/2015/understanding-and-monitoring-embedded-web-scripts stateful NDSS/2025/evocrawl-exploring-web-application-code-and-state-using-evolutionary-search stateful PETS/2025/beyond-the-request-harnessing-http-response-headers-for-cross-browser-web-tracke stateless NDSS/2025/duumviri-detecting-trackers-and-mixed-trackers-with-a-breakage-detector stateless NDSS/2026/loki-proactively-discovering-online-scams-by-mining-toxic-search-queries stateless IEEE-SP/2025/sok-decoding-the-enigma-of-encrypted-network-traffic-classifiers stateless NDSS/2026/pruning-the-tree-rethinking-rpki-architecture-from-the-ground-up stateless PETS/2026/clicking-into-exposure-uncovering-privacy-risks-of-google-click-identifier-in-yo stateless PETS/2026/more-space-less-privacy-measuring-the-effectiveness-of-ip-based-website-fingerpr stateless IEEE-SP/2012/evilseed-a-guided-approach-to-finding-malicious-web-pages stateless IEEE-SP/2022/surakav-generating-realistic-traces-for-a-strong-website-fingerprinting-defense stateful IEEE-SP/2021/black-widow-blackbox-data-driven-web-scanning stateful IEEE-SP/2024/holistic-concolic-execution-for-dynamic-web-applications-via-symbolic-interprete
The term regex is deliberately wide (it matches “fresh profile”, “cookie jar”, “incognito”, “cleared the browser”, “between each visit”, “seed profile”, “persona” and about twenty more forms), because a false negative here would understate corroboration, which is the direction that flatters the extraction. Even so, hand-reading a sample of the 41 no-sentence papers showed that some are probe misses rather than extraction errors — application-security scanners (Black Widow, JAW, EvoCrawl, Spider-Scents) discuss “state” in ways the regex does not match, because for them state means the application's session and database rather than the browser profile. So 18.7% is an upper bound on the false-positive rate, not a measurement of it, and the page says so.
One clean confirmed false positive found in that set: USENIX/2023/automated-cookie-notice-analysis-and-enforcement is labelled stateless and the string “stateful”/“stateless” appears zero times in its full text.
Check 2: full hand adjudication of the 29 ''both'' papers
The both bucket is the page's most load-bearing set — it is the reading list of comparison studies — so all 29 were read rather than sampled, using the probe's –only both –sentences output plus the paper text where that was thin.
node scripts/statefulness_audit.mjs node scripts/statefulness_audit.mjs --detail
- statefulness_audit_detail.txt
population: the 29 papers labelled crawlConfig.statefulness = "both", read in full Verdict Papers Share of 29 Meaning ------- ------ ----------- ------------------------------------------------------------------------------- ok 16 55.2% a stateful arm and a stateless arm really were both run partial 10 34.5% two conditions, but the contrast is login / seeding / consent, not statefulness wrong 3 10.3% no stateful-vs-stateless contrast in the paper at all Effect on the page's figures: of 219 papers with a stated statefulness, 29 are "both". Counting only the 16 adjudicated-ok papers as genuine comparison studies, the corpus holds 16 of 1120 crawling papers (1.4%) that ran both arms — not 29 (2.6%). Read as an error rate for this field: 3 of 29 (10.3%) hard false positives, 10 of 29 (34.5%) where the enum value overstates what the paper did. This is one coder's judgement on one bucket; it is not a measurement of the whole field's accuracy. per paper: PARTIAL WWW/2010/analyzing-content-level-properties-of-the-web-adversphere cookies are DISABLED for one arm and a browsing pattern is established for the other; a no-cookies arm is not a stateless crawl arm OK CCS/2014/the-web-never-forgets-persistent-tracking-mechanisms-in-the-wild "except for the sequential crawl (Crawl1), we ran multiple browsers in parallel ... at the cost of not keeping a profile state (cookies, localStorage) between visits" OK CCS/2014/your-online-interests-pwned-a-pollution-attack-against-targeted-advertising polluted profiles against "clean profiles by replaying user web traces bypassing the profile polluter" OK NDSS/2015/i-do-not-know-what-you-visited-last-summer-protecting-users-from-third-party-web "repeated twice: once starting with a clean browser and once more after priming the client-side state" PARTIAL CCS/2016/cspautogen-black-box-enforcement-of-content-security-policy-upon-real-world-webs "two cookie settings (i.e., a clean cookie jar and a cookie jar initiated with login credential)" — that is a login-state contrast, not accumulation across sites OK CCS/2016/online-tracking-a-1-million-site-measurement-and-analysis the census configuration table lists Default Stateless (1M sites) beside Default Stateful (100k) PARTIAL IMC/2016/characterizing-website-behaviors-across-logged-in-and-not-logged-in-users logged-in against not-logged-in; between crawls "no state, e.g. cookies, is maintained" — a login contrast inside a stateless harness OK CCS/2018/can-browser-add-ons-protect-your-children-from-online-tracking Privacy Badger measured "assuming no previous browsing history" and again with "accumulated browsing history (post-calibration)" OK PETS/2018/i-never-signed-up-for-this-privacy-implications-of-email-tracking "loaded twice in its own measurement instance: once with a fresh profile, and then again keeping the same browser profile" PARTIAL WWW/2018/adbudgetkiller-online-advertising-budget-draining-attack a profile trainer starts from a fresh profile and accumulates; the "fresh" state is the start of the stateful arm, not a separate stateless arm OK WWW/2018/auditing-the-personalization-and-composition-of-politically-related-search-engin "the extension opened two new browser windows, one standard and one incognito" — a logged-in/personalised window against a clean one WRONG IEEE-SP/2018/surveylance-automatically-detecting-online-survey-scams the crawler "remains on each page for 90 seconds before restarting the session"; that is a stateless crawl and no second arm is described PARTIAL PETS/2019/4-years-of-eu-cookie-law-results-and-lessons-learned main crawl erases cache and cookies before each visit; a separate consent experiment exists, so the second arm is a consent arm, not a stateful crawl PARTIAL IMC/2020/reading-in-between-the-lines-an-analysis-of-dissenter an anonymous spider and a re-spider "using the HTTP cookies of an authenticated account" — authentication state, not accumulated tracking state OK WWW/2020/stop-tracking-me-bro-differential-tracking-of-user-demographics-on-hyper-partisa personas are trained statefully, then "A HPW crawl with a loaded persona is stateless, i.e., each HPW website visit is independent" OK WWW/2021/cookie-swap-party-abusing-first-party-cookies-for-web-tracking repeat visits with retained state alongside fresh-profile visits WRONG CCS/2022/im-spartacus-no-im-spartacus-proactively-protecting-users-from-phishing-by-inten the two configurations are "default settings" against "Spartacus installed" — an extension contrast, nothing to do with statefulness OK PETS/2022/how-can-and-would-people-protect-from-online-tracking sequential visits carry consent state ("On the second visit, we accept the cookies ... on the next visit, we try to opt-out"), plus a private-mode arm OK USENIX/2022/web-cache-deception-escalates cache state is the object of study and both a primed and an unprimed cache are exercised PARTIAL WWW/2023/a-method-to-assess-and-explain-disparate-impact-in-online-retailing neighbouring zip codes share one session, then "the crawler closes the browser and carefully deletes the local browsing history and cookies" — stateful within a batch, stateless between OK IEEE-SP/2023/the-leaky-web-automated-discovery-of-cross-site-information-leaks-in-browsers-an "logged-in state, and anonymous state ... a fresh browser context that we reset between" OK PETS/2024/opted-out-yet-tracked-are-regulations-enough-to-protect-your-privacy personas accumulate state across nine iterated visits, with control personas OK IEEE-SP/2024/to-auth-or-not-to-auth-a-comparative-analysis-of-the-pre-and-post-login-security "crawled the site twice independently in parallel, once with the received session" — pre- and post-login arms PARTIAL PETS/2025/johnny-can-t-revoke-consent-either-measuring-compliance-of-consent-revocation-on "we visit each website afresh with storage cleared for all websites"; revocation is measured inside one session, so the contrast is within-visit, not between arms OK PETS/2025/intractable-cookie-crumbs-unveiling-the-nexus-of-stateful-banner-interaction-and accept banners statefully across the first half of the list, then measure the second half with that profile loaded — the design the whole paper is about WRONG PETS/2025/sheeps-clothing-wolfish-intent-automated-detection-and-evaluation-of-problematic "Browser state was purged after every crawl ... a fresh Chrome profile for each site" — purely stateless. The only "stateful" in the paper is "Stateful tracking stores explicit identifiers in the browser", i.e. the OTHER meaning of the word OK NDSS/2026/characterizing-the-implementation-of-censorship-policies-in-chinese-llm-services "we keep the browser session persistent" for most services but "instantiate new browser sessions for each query" for Kimi — genuinely both, though the subject is LLM chat services rather than the web PARTIAL PETS/2026/the-masks-we-think-we-wear-privacy-threats-of-browser-extension-wallets-in-the-w "Each experiment starts from a copy of the corresponding clean profile" — a seeded profile reset per experiment, i.e. seeded-stateless PARTIAL PETS/2026/redefining-website-fingerprinting-attacks-with-multi-agent-llms LLM-persona sessions are contrasted with the "stateless nature of robot-generated sessions"; the contrast is agent-driven vs scripted browsing, statefulness is a side effect
The verdicts are one coder's judgement, recorded in VERDICTS in the script with a reason per paper so they can be argued with. Two verdicts are worth flagging as contestable:
WWW/2018/auditing-the-personalization-and-composition-of-politically-related-search-enginwas scored ok on “the extension opened two new browser windows, one standard and one incognito”. An incognito window is not the same as a fresh profile, so this is a defensiblepartial.NDSS/2026/characterizing-the-implementation-of-censorship-policies-in-chinese-llm-serviceswas scored ok — it genuinely keeps sessions persistent for most services and fresh for one — but the subject is LLM chat services, not the web, so it is a real comparison study of a phenomenon this page is not about.
The three wrong verdicts are the informative ones. Two are extension or configuration contrasts mistaken for statefulness contrasts; the third, PETS/2025/sheeps-clothing-…, is the terminology trap in action: the extraction saw “Stateful tracking stores explicit identifiers in the browser” and labelled a purely stateless crawl as running both modes. That single case is why the page opens with the disambiguation.
Effect on the page: the page reports 16 genuine comparison studies (1.4% of 1,120), not 29 (2.6%), and says which number came from where.
Quotes checked
Every quotation on the page is checked by script against the paper it is attributed to.
node scripts/state_quotecheck.mjs
Whitespace, quote characters, dashes and ligatures are normalised; nothing else is. Each quote is tried against paper.cols.txt, then paper.norm.txt, then — because both text renderings splice two-column text — against paper.pdf itself via scripts/pdf_grep.py (pypdf 6.16.1, de-hyphenated). The rendering that matched is printed, because a quote that only the PDF has is a quote whose .cols text is spliced, and that is worth knowing.
Result: 37 of 37 pass (29 when the checker was first written; eight more were added with the comparison-studies table and the tightened denominators). Four passed only against the PDF:
| Quote | Paper |
|---|---|
| “cookie syncing is not necessary for users who have already had their cookies synced, whereas a stateless crawler browser instance with a fresh profile would be a clear target for cookie syncing” | [1Zeber, David; Bird, Sarah; Oliveira, Camila; Rudametkin, Walter; Segall, Ilana; Wolls´en, Fredrik; Lopatka, Martin (2020): "The Representativeness of Automated Web Crawls as a Surrogate for Human Browsing", in: Proceedings of The Web Conference 2020, pp. 167–178. Association for Computing Machinery, New York, NY, USA. (DOI) (Link)] |
| “Each email is loaded twice in its own measurement instance: once with a fresh profile, and then again keeping the same browser profile after sleeping for 10 seconds.” | [2Englehardt, Steven; Han, Jeffrey; Narayanan, Arvind (2018): "I never signed up for this! Privacy implications of email tracking", Proceedings on Privacy Enhancing Technologies 2018(1):109-126. (DOI)] |
| “First, the browser is launched with a clean user profile” | [3Jueckstock, Jordan; Sarker, Shaown; Snyder, Peter; Beggs, Aidan; Papadopoulos, Panagiotis; Varvello, Matteo; Livshits, Benjamin; Kapravelos, Alexandros (2021): "Towards Realistic and Reproducible Web Crawl Measurements", in: Proceedings of the ACM Web Conference. (DOI)] |
| “This profile is loaded before each website visit but is not altered. Hence, each website visit uses the same profile and the order of visited websites does not impact the results.” | [4Urban, Tobias; Degeling, Martin; Holz, Thorsten; Pohlmann, Norbert (2020): "Beyond the Front Page:Measuring Third Party Dynamics in the Field", in: Proceedings of The Web Conference 2020, pp. 1275–1286. Association for Computing Machinery, New York, NY, USA. (DOI) (Link)] |
Two quotes were rewritten during checking rather than published as first drafted:
- The Jueckstock quote was first written as
“the browser is launched with a clean user profile (i.e., no cookies or cached content)”. pypdf renders the parenthesis as“( i.e.,”with a leading space, so the longer form is not verbatim in any rendering. Shortened to the contiguous clause. - A quote attributed to [4Urban, Tobias; Degeling, Martin; Holz, Thorsten; Pohlmann, Norbert (2020): "Beyond the Front Page:Measuring Third Party Dynamics in the Field", in: Proceedings of The Web Conference 2020, pp. 1275–1286. Association for Computing Machinery, New York, NY, USA. (DOI) (Link)] about not clearing state between subpage visits was invented from memory during drafting and did not exist in the paper. Caught by the checker on the first run. It was replaced by the real sentence, which says something better and different: the profile is loaded but not altered, i.e. the design is seeded-stateless, not stateful. The page's whole “three positions, not two” section came out of that correction.
- state_quotecheck_output.txt
PASS CCS 2016 online-tracking-a-1-million-site-measurement-a found in: paper.cols.txt used for: why stateful crawls do not scale "Making stateful measurements is fundamentally at odds with parallelism." PASS CCS 2016 online-tracking-a-1-million-site-measurement-a found in: paper.cols.txt used for: how good a seed profile is "We find that a seed profile which has visited the top 10,000 sites will have communicated with 76% of all third-party domains present on more than 5 o…" PASS CCS 2016 online-tracking-a-1-million-site-measurement-a found in: paper.cols.txt used for: the parallelism cost of statefulness "On the same machine we can run 20 browser instances in parallel if the browser state is cleared after each page load." PASS CCS 2016 online-tracking-a-1-million-site-measurement-a found in: paper.cols.txt used for: why the limit differs "stateful parallel measurements are memory-limited while stateless parallel measurements are typically CPU-limited" PASS CCS 2016 online-tracking-a-1-million-site-measurement-a found in: paper.cols.txt used for: the seed-profile artefact "third parties which don’t appear in the top sites if the seed profile will have different cookies set in each of the parallel instances" PASS CCS 2014 the-web-never-forgets-persistent-tracking-mech found in: paper.cols.txt used for: the parallelism/state trade made explicit "except for the sequential crawl (Crawl1 ), we ran multiple browsers in parallel to extend the reach of the study at the cost of not keeping a profile …" PASS CCS 2014 the-web-never-forgets-persistent-tracking-mech found in: paper.cols.txt used for: respawning makes a clean profile hard "once some tracking has happened, it is hard to start from a truly clean profile" PASS WWW 2020 the-representativeness-of-automated-web-crawls found in: paper.cols.txt used for: the crawler-vs-human gap in third parties "crawler site visits issued requests to a median of 11.6 third-party domains, whereas for visits by humans, the median was 4.5 third parties" PASS WWW 2020 the-representativeness-of-automated-web-crawls found in: paper.cols.txt used for: the crawler-vs-human gap in trackers "The median number of tracking domains accessed by a user on visiting a Trexa list site is 1.9, whereas for the crawler it is 6.1." PASS WWW 2020 the-representativeness-of-automated-web-crawls found in: paper.cols.txt used for: the tail of the gap "while users’ browsers only connect to up to 8 trackers in 99% of visits to list sites, the crawler may reach 26" PASS WWW 2020 the-representativeness-of-automated-web-crawls found in: paper.cols.txt, paper.norm.txt used for: set overlap, not just counts "the average similarity in third parties is low, with a median of 20%, and in most cases (87% of list domains) this is due to the crawler accessing mor…" PASS WWW 2020 the-representativeness-of-automated-web-crawls found in: paper.pdf (both text renderings splice it) used for: the mechanism they propose for the gap "cookie syncing is not necessary for users who have already had their cookies synced, whereas a stateless crawler browser instance with a fresh profile…" PASS WWW 2020 the-representativeness-of-automated-web-crawls found in: paper.cols.txt used for: order dependence "A stateful crawler, i.e., one that supports cookies, caches or other persistent data, may be desirable to better emulate users, but the results of the…" PASS WWW 2022 reproducibility-and-replicability-of-web-measu found in: paper.cols.txt used for: the reporting requirement "authors need to document what part of a browser profile is maintained statefully, what part is reset, and when" PASS WWW 2022 reproducibility-and-replicability-of-web-measu found in: paper.cols.txt used for: what each design can answer "In stateful experiments, the order of visited pages potentially impacts the results, and it accounts for HTTP session-specific phenomena, such as opt-…" PASS PETS 2025 intractable-cookie-crumbs-unveiling-the-nexus- found in: paper.cols.txt used for: the headline stateful-only result "Our findings reveal that around 50% of websites send at least one intractable cookie" PASS PETS 2025 intractable-cookie-crumbs-unveiling-the-nexus- found in: paper.cols.txt used for: CMP vs native "websites with Consent Management Platform (CMP) banners, on average, send 6.9 times more intractable cookies compared to those with native banners" PASS PETS 2025 intractable-cookie-crumbs-unveiling-the-nexus- found in: paper.cols.txt used for: GPC effect "enabling the Global Privacy Control (GPC) signal initially reduces the number of intractable cookies by 30% on average, with a further 32% reduction p…" PASS PETS 2025 intractable-cookie-crumbs-unveiling-the-nexus- found in: paper.cols.txt, paper.norm.txt used for: reload changes the answer "on average, 25% of intractable cookies are not sent after reloading" PASS WWW 2020 stop-tracking-me-bro-differential-tracking-of- found in: paper.cols.txt used for: the hybrid seed-then-stateless design "A HPW crawl with a loaded persona is stateless, i.e., each HPW website visit is independent." PASS PETS 2018 i-never-signed-up-for-this-privacy-implication found in: paper.pdf (both text renderings splice it) used for: the matched-pair design "Each email is loaded twice in its own measurement instance: once with a fresh profile, and then again keeping the same browser profile after sleeping …" PASS WWW 2021 towards-realistic-and-reproducibleweb-crawl-me found in: paper.pdf (both text renderings splice it) used for: this paper is stateless throughout, contrary to a claim on a neighbouring page "First, the browser is launched with a clean user profile" PASS NDSS 2021 tales-of-favicons-and-caches-persistent-tracki found in: paper.cols.txt, paper.norm.txt used for: the favicon cache is not cleared by clearing browsing data "is not affected when users clear" PASS WWW 2020 beyond-the-front-page-measuring-third-party-dy found in: paper.pdf (both text renderings splice it) used for: the seeded-stateless design and its order-independence justification "This profile is loaded before each website visit but is not altered. Hence, each website visit uses the same profile and the order of visited websites…" PASS CCS 2014 the-web-never-forgets-persistent-tracking-mech found in: paper.cols.txt used for: respawning plus syncing defeats a state clear "This scenario enables at least 11% of a user's history to be tracked over time." PASS WWW 2020 stop-tracking-me-bro-differential-tracking-of- found in: paper.cols.txt used for: what a trained profile buys you "having an established persona from a particular demographic (with cookies obtained from visiting stereotypical websites for users of that demographic)…" PASS WWW 2020 beyond-the-front-page-measuring-third-party-dy found in: paper.cols.txt used for: the subpage effect measured under a seeded-stateless design "subsites set considerably more (36 %) cookies than the respective landing pages. On average, 55 cookies were set when loading a landing page while 78 …" PASS PETS 2025 intractable-cookie-crumbs-unveiling-the-nexus- found in: paper.cols.txt used for: partitioning does not yet blunt cross-site state "only 1.3% of all unique tracking cookies are partitioned, with more than half accompanied by nonpartitioned cookies from the same tracker domain" PASS PETS 2022 my-cookie-is-a-phoenix-detection-measurement-a found in: paper.cols.txt used for: a stateless harness detecting a stateful mechanism, via paired visits "we perform two stateless crawling instances from machine A as described in Figure 2 (Initial and Reappearance crawl)" PASS PETS 2022 my-cookie-is-a-phoenix-detection-measurement-a found in: paper.cols.txt used for: what makes the paired-visit design work "we only collect cookies that appear in both the Initial and Reappearance crawl when visiting the same website in the two crawls" PASS CCS 2014 the-web-never-forgets-persistent-tracking-mech found in: paper.cols.txt used for: the scale of Flash respawning "33 different Flash cookies from 30 different domains respawned a total of 355 cookies on 107 first party domains" PASS PETS 2022 my-cookie-is-a-phoenix-detection-measurement-a found in: paper.cols.txt used for: a stateful phenomenon measured statelessly, with its denominator "of the Alexa top 30, 000 websites use cookie respawning with browser fingerprinting" PASS PETS 2025 intractable-cookie-crumbs-unveiling-the-nexus- found in: paper.cols.txt used for: the design, and the real denominator of the 50% figure "we crawl the top 20,000 websites from Tranco, accepting cookie banners in the first half and measuring the number of intractable cookies on successful…" PASS PETS 2025 intractable-cookie-crumbs-unveiling-the-nexus- found in: paper.cols.txt used for: order randomisation as an order-effect control "we randomly select and shuffle 20k sites from Tranco" PASS WWW 2022 reproducibility-and-replicability-of-web-measu found in: paper.cols.txt used for: they announce a crawling-strategy analysis "Since the effects of C5 and C11 are not yet adequately discussed by previous work, we analyze them in Section 4" PASS WWW 2022 reproducibility-and-replicability-of-web-measu found in: paper.cols.txt used for: and then do not deliver it: C11 is absent "four exemplarily case studies focusing on C4, C5, C10, and C12" PASS WWW 2022 reproducibility-and-replicability-of-web-measu found in: paper.cols.txt used for: their own 24 profiles are stateless "the commander issues a signal to start the experiment as stateless coordinated crawls of the provided URLs" 37 pass, 0 fail, of 37 quotations.
Code run for the page, and its real output
Three probes. All were run in this container on 2026-08-19 with Playwright 1.62.1 and its own pinned Chromium 151.0.7922.34, PLAYWRIGHT_BROWSERS_PATH=/workspace/.playwright.
1. What each reset actually resets
scripts/state_probe/{server,probe}.mjs. An instrumented local origin sets a server cookie, a JS cookie, a localStorage marker and an immutable-cached subresource; the crawler visits twice with a different reset in between.
- state_probe_output.txt
Reset between visit 1 and visit 2 cookie localStorage cache hit -------------------------------------------------------------- ------ ------------ --------- nothing — second page.goto() in the same context ✓ ✓ ✓ context.newPage() ✓ ✓ ✓ context.clearCookies() ✗ ✓ ✓ clearCookies() + clearPermissions() ✗ ✓ ✓ browser.newContext() — new context, same browser process ✗ ✗ ✗ fresh chromium.launch() (Playwright default, no user-data-dir) ✗ ✗ ✗ launchPersistentContext() twice on the SAME user-data-dir ✓ ✓ ✓ same user-data-dir + clearCookies() on relaunch ✗ ✓ ✓ storageState() saved and reloaded into a new context ✓ ✓ ✗ ✓ = the state SURVIVED the reset and visit 2 saw it. A stateless crawl needs ✗ in all three columns. "cache hit" ✓ means the immutable subresource was NOT re-requested from the origin. nothing — second page.goto() in the same context visit 2 sent Cookie: srv=server-set; js=js-set; localStorage carried in: visit-1787135120253; /cached.js re-requested from origin: no context.newPage() visit 2 sent Cookie: srv=server-set; js=js-set; localStorage carried in: visit-1787135121376; /cached.js re-requested from origin: no context.clearCookies() visit 2 sent Cookie: (none); localStorage carried in: visit-1787135122565; /cached.js re-requested from origin: no clearCookies() + clearPermissions() visit 2 sent Cookie: (none); localStorage carried in: visit-1787135123666; /cached.js re-requested from origin: no browser.newContext() — new context, same browser process visit 2 sent Cookie: (none); localStorage carried in: (none); /cached.js re-requested from origin: yes fresh chromium.launch() (Playwright default, no user-data-dir) visit 2 sent Cookie: (none); localStorage carried in: (none); /cached.js re-requested from origin: yes launchPersistentContext() twice on the SAME user-data-dir visit 2 sent Cookie: srv=server-set; js=js-set; localStorage carried in: visit-1787135127368; /cached.js re-requested from origin: no same user-data-dir + clearCookies() on relaunch visit 2 sent Cookie: (none); localStorage carried in: visit-1787135128812; /cached.js re-requested from origin: no storageState() saved and reloaded into a new context visit 2 sent Cookie: srv=server-set; js=js-set; localStorage carried in: visit-1787135130296; /cached.js re-requested from origin: yes playwright 1.62.1; chromium 151.0.7922.34; linux
A bug in this probe was caught and fixed before publication, and it is the kind that would have produced a wrong table. The first version measured localStorage.getItem('ls') after the page's inline script had already re-set it, so every row read “survived” and the column was meaningless. The fix stamps a unique marker once and reads window.__lsBefore — what the page found before writing its own. Only after that fix do the browser.newContext() and fresh-launch() rows correctly read “gone”.
A second bug: the script declared const URL = `http://…`, shadowing the global URL constructor, which made the version-printing line at the end throw TypeError: URL is not a constructor after the table had already printed. The published code renames it TARGET and the page's code listing carries the warning inline.
2. Does a crawl accumulate cross-site state at all
scripts/state_probe/thirdparty.mjs. Three HTTPS origins on loopback aliases (127.0.0.1 and 127.0.0.3 as two first-party “sites”, 127.0.0.2 as one third party), self-signed certificate, ignoreHTTPSErrors. HTTPS is required because a cross-site cookie needs SameSite=None, which needs Secure, which needs a trustworthy origin.
- thirdparty_probe_output.txt
Engine third party got its cookie back on the SECOND, different site ---------------------- ---------------------------------------------------------- Chromium 151.0.7922.34 YES — sent "tp=third-party-id" Chromium 151.0.7922.34 iframe loads seen: 1 on site 1, 1 on site 2 Cookie header the third party received on site 1: (none — it is setting it here) Cookie header the third party received on site 2: tp=third-party-id context cookie jar afterwards: tp@127.0.0.2
Three failures on the way to that output, all recorded in the script's comments:
- First design used
localhostas the second site. In this containergetent hosts localhostresolves only to::1, so a server bound to127.0.0.1:8132was unreachable and the script hung until killed. Switched to numeric loopback aliases. - Playwright's Firefox will not launch here. Headless dies with
RenderCompositorSWGL failed mapping default framebuffer, no dt; headed under a manually startedXvfb :99dies for want ofdbus-launch(xvfb-runitself fails earlier:xauth command not found). So the Firefox row is absent from the output rather than guessed, the script records the launch failure instead of crashing, and the page's Firefox claim rests on Mozilla's documentation, explicitly labelled as such. This is the one measurement the page wanted and could not take. headless: !process.env.DISPLAYis wrong in this container.DISPLAYis set even though no X server is reachable, so Playwright launched headed and died with “Looks like you launched a headed browser without having a XServer running”. Replaced with an explicit–headedflag.
3. What flags the crawler actually launches with
scripts/state_probe/launch_args.mjs. Reads the real command line from chromium.launchServer().process().spawnargs and compares it against puppeteer.defaultArgs().
- launch_args_output.txt
===== Playwright chromium.launchServer(): 45 flags ===== --disable-features (16): AvoidUnnecessaryBeforeUnloadCheckSync BoundaryEventDispatchTracksNodeRemoval DestroyProfileOnBrowserClose DialMediaRouteProvider GlobalMediaControls HttpsUpgrades <-- changes what you measure LensOverlay MediaRouter PaintHolding ThirdPartyStoragePartitioning <-- changes what you measure BlockOriginHeaderModificationOnRedirect Translate <-- changes what you measure AutoDeElevate OptimizationHints <-- changes what you measure msForceBrowserSignIn msEdgeUpdateLaunchServicesPreferredVersion --enable-features: CDPScreenshotNewSurface other flags worth knowing about: --disable-extensions --disable-sync --enable-unsafe-swiftshader --no-sandbox --user-data-dir=/tmp/playwright_chromiumdev_profile-Zrq7IG ===== Puppeteer defaultArgs(): 33 flags ===== --disable-features (9): Translate <-- changes what you measure AcceptCHFrame <-- changes what you measure MediaRouter OptimizationHints <-- changes what you measure WebUIReloadButton WebUIOmniboxPopup WebUIOmniboxAimPopup ProcessPerSiteUpToMainFrameThreshold IsolateSandboxedIframes <-- changes what you measure --enable-features: PdfOopif other flags worth knowing about: --disable-sync --enable-automation --disable-extensions ===== the difference, on the features that matter ===== ThirdPartyStoragePartitioning Playwright: disabled Puppeteer: left on <-- DISAGREE HttpsUpgrades Playwright: disabled Puppeteer: left on <-- DISAGREE IsolateSandboxedIframes Playwright: left on Puppeteer: disabled <-- DISAGREE AcceptCHFrame Playwright: left on Puppeteer: disabled <-- DISAGREE OptimizationHints Playwright: disabled Puppeteer: disabled Translate Playwright: disabled Puppeteer: disabled
Note that puppeteer.defaultArgs() returns a Promise in Puppeteer 25.5.0, not an array; the first version of this script failed with “its return value is not iterable”. The published version awaits it.
External sources: verified, and rejected
Everything outside the corpus was fetched, not recalled, on 2026-08-19. The page's “Since 2022 the engine decides” section is entirely external, so this table is the whole audit trail for it.
| Claim on the page | Primary source fetched | What it actually says |
|---|---|---|
| Firefox partitions third-party cookies by default since June 2022 | blog.mozilla.org/en/products/firefox/firefox-rolls-out-total-cookie-protection-by-default-to-all-users-worldwide/ (HTTP 200) | “June 14, 2022 … Updated Aug. 28, 2024 … confining cookies to the site where they were created” |
| Chrome partitions third-party storage for all users from Chrome 115 | developers.google.com/privacy-sandbox/cookies/storage-partitioning (HTTP 200) | “The feature has been enabled for all users on Chrome 115 and later.” |
| Third-party cookies were not deprecated in Chrome | privacysandbox.com/news/privacy-sandbox-next-steps/ (HTTP 200) | 22 April 2025: “we've made the decision to maintain our current approach to offering users third-party cookie choice in Chrome, and will not be rolling out a new standalone prompt for third-party cookies” |
| CHIPS and FedCM continue; other Privacy Sandbox APIs are phased out | privacysandbox.com/news/update-on-plans-for-privacy-sandbox-technologies/ (HTTP 200) | 17 October 2025: “CHIPS and FedCM … have seen broad adoption … We'll continue to support those APIs” |
| Chrome Incognito blocks third-party cookies by default | same 22 April 2025 post | “Chrome's Incognito mode, which already blocks third-party cookies by default” |
Playwright disables ThirdPartyStoragePartitioning | the installed playwright-core 1.62.1 default –disable-features list, and the live launch command line via spawnargs | present in both; the inline source comment points at github.com/microsoft/playwright/issues/32230 |
| Puppeteer does not disable it | puppeteer-core 25.5.0 ChromeLauncher.js disabledFeatures array, and puppeteer.defaultArgs() output | absent from both |
| OpenWPM allows unpartitioned third-party cookies by default | raw.githubusercontent.com/openwpm/OpenWPM/master/openwpm/config.py and …/deploy_browsers/configure_firefox.py | tp_cookies: str = “always” → fo.set_preference(“network.cookie.cookieBehavior”, 0) |
| OpenWPM cannot enable Firefox tracking protection | same configure_firefox.py | raise RuntimeError(“Firefox Tracking Protection is not currently supported. See: …/issues/101”) |
OpenWPM's stateless switch is CommandSequence(reset=True) | raw.githubusercontent.com/openwpm/OpenWPM/master/openwpm/command_sequence.py | reset: bool = False … “True if browser should clear state and restart after sequence” |
| OpenWPM release and commit dated | GitHub API /releases/latest and /commits | v0.35.0, published 2026-06-17; master at b9dd4c3a, 2026-07-02 |
Playwright clearCookies / storageState semantics | playwright.dev/docs/api/class-browsercontext (HTTP 200) | clearCookies “Removes cookies from context”; storageState “contains current cookies, local storage snapshot, IndexedDB snapshot and virtual WebAuthn credentials” |
| PoPETs 2026 multi-agent-LLM WFP figures and authors | petsymposium.org/popets/2026/popets-2026-0101.php (HTTP 200) | abstract: “All models achieve under 10% accuracy when trained only on scripted traffic and tested on human traffic … training with LLM-generated traces boosts accuracy into the 80% range”; 20 sites, 30 users, 40 unseen sites |
| USENIX 2022 web-cache-deception authors | usenix.org/conference/usenixsecurity22/presentation/mirheidari via curl with a browser User-Agent | Mirheidari; Golinelli; Onarlioglu; Kirda; Crispo |
| PoPETs 2022 protective-behaviour authors | petsymposium.org/popets/2022/popets-2022-0006.php | Mehrnezhad; Coopamootoo; Toreini |
Rejected, and why:
developers.google.com/privacy-sandbox/blog/cookie-countdown-2025— returns HTTP 404. It is the URL a model would reach for from training data. Not cited.support.mozilla.org/en-US/kb/introducing-total-cookie-protection-standard-mode— returns a JavaScript client challenge (“A required part of this site couldn't load”) tocurl. The Mozilla blog post was used instead; the support article was not cited on the basis of a page that never loaded.- Any secondary summary of the third-party-cookie timeline. The Chrome position reversed twice (2024-07, 2025-04) and nearly every third-party write-up is stranded at one of the earlier states. Only the two dated Privacy Sandbox posts are cited.
- The claim that Playwright's Firefox partitions cookies like a release Firefox. Plausible and untested — Playwright ships its own patched Firefox build. Not asserted on the page in either direction, because the probe would not run.
What could not be established
- No controlled stateful-versus-stateless experiment exists in the corpus. Demir et al. [5Demir, Nurullah; Große-Kampmann, Matteo; Urban, Tobias; Wressnegger, Christian; Holz, Thorsten; Pohlmann, Norbert (2022): "Reproducibility and Replicability of Web Measurement Studies", in: Proceedings of the ACM Web Conference. (DOI)] explicitly name criterion C11 (crawling strategy) as one whose effects “are not yet adequately discussed by previous work” and then vary browser (C5), region (C12), interaction (C10) and repetition (C4) instead — §4.1 confirms all 24 of their profiles are stateless. So the size of the effect this whole page is about is unmeasured, and the page says so in Open Questions rather than filling the gap with an estimate.
- The 18.7% no-supporting-sentence rate is an upper bound, not a false-positive rate. Establishing the real rate needs all 41 papers hand-read; only a sample was.
- The 98% run-to-run stability of
crawlConfig.statefulnesscomes from the previous 4,322-paper corpus'sstability100/comparison and has not been re-measured on the current run. The page labels it as such. - Firefox's actual behaviour under a research crawl — see the rejected row above.
- Whether the seed-profile artefact Englehardt and Narayanan predicted actually inflates cookie-sync counts, and by how much. Nobody has measured it; the page lists it as an open question rather than quantifying it.
- Figures deliberately not published. A
statefulness×vantage.infrastructurecross-tab was computed and dropped: the cells fall below ten papers almost everywhere and the result would have been noise dressed as a finding. Likewise a per-venue-per-bucket trend table.
Judgement calls
- Extend rather than broaden or split. The title already names the design question exactly. The page absorbed the stub's reading list, dropped the stub's “Shallow vs Deep crawling” section (that is Programming:Interaction's topic, and the [4Urban, Tobias; Degeling, Martin; Holz, Thorsten; Pohlmann, Norbert (2020): "Beyond the Front Page:Measuring Third Party Dynamics in the Field", in: Proceedings of The Web Conference 2020, pp. 1275–1286. Association for Computing Machinery, New York, NY, USA. (DOI) (Link)] material now appears here only for what it says about state), and kept the stub's papers, all of which survive on the new reading list.
- Deliberate overlap with three neighbours, with the boundary stated on each side. OpenWPM keeps the implementation detail (
reset=,seed_tar,num_browsers, crash-recovery semantics) and already points here for the design question; this page points back rather than restating it. Programming:Crawler keeps the tool comparison. Design:Crawling location keeps the vantage axis. - A false claim on a neighbouring page was corrected in the same sitting.
design:crawling_locationsaid “Stateful stateless — the other axis Jueckstock et al. vary”. They do not: WWW 2021 varies vantage point and browser configuration (naive vs stealth), and §2.3.1 states that every page visit begins with “a clean user profile (i.e., no cookies or cached content)”. Karel's task note carried the same claim (“Jueckstock et al. vary this axis alongside the vantage point”), which is presumably where the neighbour's line came from. The neighbour was patched (rev1787137202) and this page states the correction explicitly in its reading list, because the claim is likely to be repeated otherwise. - The stub's reading of Zeber et al. was corrected, not deleted. The stub said “Stateless crawls surprisingly result in more third-party requests than stateful crawl (Fig. 6)”. Figure 6 compares crawler against human, not stateless crawl against stateful crawl; automation, vantage, interaction and statefulness all differ at once. The page keeps the finding, states what the comparison actually is, and keeps the authors' own statefulness explanation for it.
- “Seeded stateless” was named as a third design position even though the extraction's enum has only three values none of which is it. Justification: the design demonstrably exists ([4Urban, Tobias; Degeling, Martin; Holz, Thorsten; Pohlmann, Norbert (2020): "Beyond the Front Page:Measuring Third Party Dynamics in the Field", in: Proceedings of The Web Conference 2020, pp. 1275–1286. Association for Computing Machinery, New York, NY, USA. (DOI) (Link)], [6Agarwal, Pushkal; Joglekar, Sagar; Papadopoulos, Panagiotis; Sastry, Nishanth; Kourtellis, Nicolas (2020): "Stop tracking me Bro! Differential Tracking of User Demographics on Hyper-Partisan Websites", in: Proceedings of the ACM Web Conference. (DOI)], [7Englehardt, Steven; Narayanan, Arvind (2016): "Online Tracking: A 1-million-site Measurement and Analysis", in: Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security, pp. 1388–1401. Association for Computing Machinery, New York, NY, USA. (DOI) (Link)]'s seed profile), it is the position most often mis-labelled, and 10 of the 29
bothpapers arepartialprecisely because the enum had nowhere else to put them. A reasonable person could have kept to the enum's vocabulary; that would have made the page match the data at the cost of misdescribing the field. - Demir et al.'s 41%-omit figure was reconciled rather than suppressed. Their 59% “at least partial” against our 19.6% looks like a contradiction. Both are reported on the page with the reason they differ (117 hand-picked web-measurement papers 2018–2021 versus 1,120 crawling papers in a broad security corpus, and a broader reading of “crawling strategy” than the enum). Suppressing the external number would have been the easier choice and the wrong one.
- The page leads with a reporting-rate finding, not with advice. 19.6% and “no trend in sixteen years” are findings about the literature. They are placed in Use in Publications and the recommendations are kept separate, so a ranking of what the field did is never presented as advice about what to do now.
- “Current practice” claims lean on external primary sources, not on the 2025–2026 corpus slice. That slice is provisional (CCS/IMC 2026 not held; IEEE S&P/WWW 2026 under-selected) and shows no change in reporting: 17.8% in 2025 and 18.8% in 2026 against a 16-year range of 16–21%. So the page's currency section is built from browser-vendor and tooling primary sources, with the corpus used only to show that the literature has not moved. The one genuinely new corpus signal in 2026 — LLM agents generating persona-driven, stateful browsing [8Song, Chuxu; Mekala, Dheekshith Dev Manohar; Wang, Hao; Martin, Richard (2026): "Redefining Website Fingerprinting Attacks with Multi-Agent LLMs", in: Proceedings on Privacy Enhancing Technologies, pp. 688-702. (DOI)] — is a single paper and is presented as one.
- No
~~DISCUSSION~~on this page. Comments belong on the content page. This sets the default forprovenance:pages.
Review
Four reviewers, all told explicitly that the author's context may not be exhaustive, and all given the page text, the report script and its real output, and these notes.
Reviewer 1 — figures against the script (''model: sonnet'')
Re-ran all three dataset scripts (byte-identical to the committed outputs), re-ran the three browser probes, independently recomputed ~35 figures across all 13 tables with its own jq/node queries, and pulled the primary-source PDFs for every quoted paper.
| # | Finding | Severity | Verdict |
|---|---|---|---|
| 1 | The published code sample implements 4 of the 9 reset strategies in the table, so a reader following the page cannot reproduce 5 rows. Confirmed by extracting the page's code and running it: 4 output lines. | WRONG | Accepted. The page now publishes scripts/state_probe/server.mjs and probe.mjs in full — all nine strategies — and the intro says “complete”. |
| 2 | “Their 59% 'at least partial'” — Demir et al. Table 2 C11 is 3% N/A, 41% omit, 12% partial, 44% satisfied, i.e. 56%, and 56/19.6 = 2.9×, not “three times”. | WRONG | Accepted. Corrected to 56% and 2.9× in both places it appeared. |
| 3 | “a third of USENIX's crawling volume” contradicts the page's own table (PETS 123 vs USENIX 221 = 56%). | MISLEADING | Accepted — already corrected to “just over half” in the author's own pass before the review landed; the reviewer read the pre-fix copy. |
| 4 | “PETS is twice as likely to say as any other venue” overstates against IMC (21.2%), IEEE S&P (20.9%), NDSS and WWW (18.6%). | NIT | Accepted — also already corrected in the author's pass, to “half again as often as the next venue … two and a half times as often as USENIX Security”. |
| 5 | The Fouad et al. figure is “1,150 (3.83%) … use cookie respawning with browser fingerprinting”; the page dropped the qualifier, implying a broader respawning measurement. | MISLEADING | Accepted. The qualifier is restored, the sentence now quotes the paper verbatim, and a following sentence says explicitly what the figure does and does not count. |
| 6 | The residue examples (“an NTP-pool study, an IPv6 study, a 5G performance study”) do not all exist: the reviewer checked all 45 residue papers and found no IPv6 paper and no smart-home paper. Closest are a carrier-grade-NAT study and a commercial-VPN study that measures IPv6 leakage among other things. | NIT | Accepted. Both the page and these notes now name only papers verified to be in the residue: NTP-pool robustness, carrier-grade NAT, commercial-VPN ecosystem, 5G performance, underground marketplaces. |
Everything else verified: the 1,120/1,080/219 populations, 19.6%/20.3%, the field-comparison table, the full 5-bucket and per-year trend tables, the venue table's raw numbers, the framework table including the deliberate 58-vs-59 OpenWPM discrepancy, every subset row (including “199 papers, 114 (57.3%)” and “39 of the 54 login crawls”), the two-literatures fold (133+23+18+45 = 219), the audit (16/10/3), the probe stats (178/41/72), and every quoted figure from Acar, Zeber, Rasaii and Urban. No sentinel-as-answer and no tuple-vs-paper error found.
Its own summary is worth recording: “No error was found in any script-derived number itself — every discrepancy found is in page prose layered on top of correct script output.” That is where the next run should look first.
Reviewer 2 — external currency (''model: sonnet'')
Fetched every external claim live; also re-ran all three probe scripts against the installed toolchain and reproduced every published row.
| # | Finding | Severity | Verdict |
|---|---|---|---|
| 1 | Puppeteer's latest is 25.8.0 (2026-08-17), not the cited 25.5.0 — but the reviewer installed 25.8.0 and found its –disable-features list byte-identical, so the comparison stands. | NIT | Accepted. A footnote on the table now records that 25.8.0 is identical, so the comparison is not an artefact of the pinned version. |
| 2 | The illustrative “what to report” sentence said “OpenWPM 0.35.0 (Firefox 152)”; current stable Firefox is 154.0. | NIT | Accepted — already changed to “(its pinned unbranded Firefox build)” in the author's pass, which is what the example needed anyway. |
| 3 | Playwright issue 32230 is closed (resolved by PR 32701), and a later issue asking to re-enable partitioning was closed because Chromium plans to remove the flag entirely — so the page's workaround is on borrowed time, and the page does not say so. Called out as “the single most relevant 'about to move' fact” missing. | (substantive addition) | Accepted, but not as reported. See below. |
| 4 | Everything else — Mozilla TCP, Chrome 115 storage partitioning, both Privacy Sandbox posts (no 2026 reversal), Incognito third-party blocking, CHIPS/FedCM, GPC now on the W3C Privacy WG track, Playwright 1.62.1 being the actual latest, Chromium 151.0.7922.34 being its pinned build, pypdf 6.16.1 current, OpenWPM actively maintained with b9dd4c3a being current HEAD and all three code claims byte-for-byte — verified correct. | — | Noted; no change needed. |
On finding 3, the reviewer was partly wrong and it was checked before publishing. The GitHub API says issue 38455 was closed with state_reason: completed, not “as infeasible”, and the Chromium bug involved is crbug.com/468317746, not the crbug.com/410491202 the reviewer cited. Reading the actual thread gave a better and more on-topic story than the reviewer's summary: Playwright disables partitioning because its own storageState API cannot represent partitioned storage — “Without CDP support, it does not seem practical to replicate all the intricate details of storage partitioning outside of the browser, so disabling the feature is the only way to make things work for now” — and issue 38455 was closed after the Chromium-side request for bulk storage-key APIs was declined as “infeasible - too far outside of the product scope”. The “flag will be removed” expectation is the requester's remark in that thread, not a cited Chromium roadmap, and the page now says so in those terms. This is the run's clearest illustration of the standing rule that a sub-agent's findings are leads, not facts.
Reviewer 3 — citations and quotations (''model: sonnet'')
Checked all citekeys on both pages, verified all 13 new bibliography entries against Crossref / DOI resolvers / venue pages, re-ran the quote checker and then independently re-verified every quotation against the source text or PDF, and re-fetched all five non-paper footnote sources.
| # | Finding | Severity | Verdict |
|---|---|---|---|
| 1 | kancherla2025_revoke, added today, duplicates the pre-existing kancherla2025_johnny — same authors, title and DOI — leaving one orphaned. This directly contradicted the claim in these notes that there were “no duplicates — every key was checked against the live export first”. | WRONG | Accepted, and it was a real process failure. The pre-add check compared exact key strings against the live export, which cannot catch the same paper under a different key. kancherla2025_revoke has been deleted from the bibliography (rev 1787138947) and the page now cites kancherla2025_johnny. Before deleting, dw.mjs search plus a direct read of provenance:privacy:consent confirmed no other page cited the removed key. The right check is a DOI+title scan, not a key scan; whoever adds entries next should do that. |
| 2 | “Demir et al. hand-coded 117 web-measurement papers from 2018–2021” — the paper says twice that the survey covers 2016–2021. | WRONG | Accepted. Corrected on the page and in these notes. Reading the paper for the fix also turned up something better: their venues are IEEE S&P, CCS, USENIX Security, NDSS, PETS, TheWebConf and IMC — the same seven as this corpus — so the 56%-versus-19.6% gap is not a venue-coverage artefact. The page now says so, which makes the comparison sharper than it was before the review. |
| 3 | “Their 59% 'at least partial'” was never a figure Demir et al. state; presenting it in quotation marks reads as their own summary statistic. | MISLEADING | Accepted, and already corrected in the round-1 pass; a footnote now says explicitly that 56% is our arithmetic on their Table 2 and lists their four categories. |
| 4 | Three of the 13 keys added today (pan2015_summer, ablove2026_censorship, mehrnezhad2022_protect) were never cited — orphaned additions. | MISLEADING | Accepted, and it exposed a content gap. The page said “use the 16 as a reading list” and then did not list them. It now carries a table of all 16 audited comparison studies with what each one's two arms actually were, which cites all three. |
| 5 | “half again as often as the next venue” — 34.1/21.2 ≈ 1.61×, i.e. ~61% more, not ~50%. | NIT | Accepted. Changed to “about 60% more often”. |
| 6 | The Zeber table's popularity-weighted row gave 11.6 for the crawler; the paper states the human figure (2.9) and describes the crawler distribution only as “similar”, never restating 11.6 under weighting. | NIT | Accepted. The crawler cell now reads not restated with a footnote saying what the paper does and does not give. |
| 7 | The “up to 8 / up to 26” row gives a percentile for users and no matching percentile for the crawler, so the relabel still overstated comparability. | NIT | Accepted. Both cells are now the paper's verbatim phrasing with a footnote that they are not strictly comparable. |
Its clean checks are worth recording because they bound what is left to doubt: all 24 citekeys resolved; 13 of 13 new entries had correct metadata against primary sources; 0 fabricated quotes across roughly 35 quotations and figures, each verified against paper.cols.txt, paper.norm.txt or the PDF; all five non-paper footnotes verbatim; and the Playwright/Puppeteer flag table verified against the installed package sources. A full duplicate-DOI scan of the 402-entry bibliography found only two other collisions, fouad2022my/fouad2022_cookie and bottger2025_regional/boettger2025_regional, both pre-existing and unrelated to this run — recorded here as work for whoever touches the bibliography next.
Was each reviewer worth its slot
- Figures (sonnet) — yes. Its finding 1 (the published code sample reproduced 4 of 9 rows) is exactly the class of defect the slot exists for, and nothing else would have caught it: the table was right, the script was right, and only the published excerpt was wrong. It also independently reproduced every script number, which is what makes the rest of the page's figures trustworthy rather than merely self-consistent.
- Citations (sonnet) — yes, and it found the single most damaging defect of the run, a duplicate bibliography key that a naive key-equality check had passed. It also caught a wrong date range that had been copied from nowhere.
- Currency (sonnet) — yes on coverage: it fetched and confirmed 15-odd external claims that would otherwise rest on recall, and it found the “flag is going away” story. But its summary of that story was wrong in two specifics (closure reason and Chromium bug number), and using it verbatim would have put two false facts on the page. Its value is as a lead generator, not as a source.
- Generic (fable) — see reviewer 4; it was the most valuable of the four.
Reviewer 4 — generic, no checklist (''model: fable'')
Given both pages, the script outputs, and the neighbouring pages, with no list of things to look for.
| # | Finding | Severity | Verdict |
|---|---|---|---|
| 1 | The page's first substantive sentence was false. “a crawl that … visits each target once cannot see cookie syncing … because none of those exist without accumulated state” — tracker A can set an ID and sync it to B in the same page load, and the page's own Zeber quote says a fresh profile “would be a clear target for cookie syncing”, i.e. fresh profiles over-trigger it. | HIGH | Accepted in full. The reviewer is right and the error was self-refuting: the page quoted the evidence against its own claim two sections later. Both the intro and the “what each design can measure” row now say that a stateless crawl sees first-contact syncing and over-triggers it, and that what accumulation buys is the aged identity and the sync graph — with [7Englehardt, Steven; Narayanan, Arvind (2016): "Online Tracking: A 1-million-site Measurement and Analysis", in: Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security, pp. 1388–1401. Association for Computing Machinery, New York, NY, USA. (DOI) (Link)] running its sync analysis on the stateful 100k crawl as the supporting example. |
| 2 | “the only crawl-configuration reporting rate in this corpus with no trend at all” was never computed. report_stateful_stateless.mjs computed bucket trends for statefulness and for two outside norms, and snapshot rates for the other configuration fields — not their trends. These notes made it worse by claiming the superlative was one “which the report script does check”. | HIGH | Accepted, and fixed by computing it rather than by deleting it. The script now prints every crawl-configuration field's reporting rate per bucket with max−min and last−first columns. The claim survives in a narrower and now-checkable form: statefulness has the narrowest range (5.3 pp) and the smallest first-to-last change (+2.5 pp) of the six fields, against +18.2 pp for naming a browser and +10.1 pp for headless. Interaction depth moved less in one sense and moved down. The page carries the table. |
| 3 | The “complete” published script was not runnable as published: the file blocks were named state_probe_server.mjs / state_probe.mjs while the code does import { startServer } from './server.mjs', so saving under the page's names gives ERR_MODULE_NOT_FOUND. Same defect class as reviewer 1's finding, reintroduced by the fix for it. | HIGH | Accepted. Blocks renamed server.mjs and probe.mjs, matching the repo, with a sentence telling the reader to save them side by side. |
| 4 | A neighbouring page contradicted this page's centrepiece currency claim. cookies opened “This trend persists despite the discontinuation of third-party cookies”, which this page verified against Google's own announcement did not happen. | HIGH | Accepted. cookies patched in the same sitting (rev 1787140005) with the primary source, the current Chrome/Firefox/Safari positions, and a pointer to this page's engine-defaults section — the same treatment design:crawling_location got earlier in the run. |
| 5 | These notes said “Result: 29 of 29 pass” and “all 29 quotations” while the embedded checker output said 37. | MEDIUM | Accepted. The prose predated eight quotes added with the comparison-studies table. Now 37, and the count is read from the embedded output rather than restated. |
| 6 | These notes promised “four review sub-agents (see #Review)” and documented three, with “Generic (fable) — see below” followed by nothing. | MEDIUM | Accepted. This section is that slot. |
| 7 | “Every number here is produced by scripts/report_stateful_stateless.mjs” overcommitted: the 16/10/3 audit table comes from statefulness_audit.mjs and the 178/41/72 corroboration counts from statefulness_probe.mjs. | MEDIUM | Accepted. All three are named on the page. |
| 8 | The “real, unedited output” of the report script began with about a hundred lines of another page's audit, because consent_action_audit.mjs prints at module top level and this report imports its VERDICTS. | MEDIUM | Accepted, and fixed in the code rather than papered over. consent_action_audit.mjs now guards its printing behind an is-main check. Its own direct-run output was diffed before and after and is byte-identical to the committed scripts/consent_action_audit-output.txt, so consent's audit trail is unaffected. The report output embedded above was regenerated. |
| 9 | “accumulates an unpartitioned cross-site profile that resembles a default Chrome user's” overstates: Chrome has partitioned third-party storage since 115, so the resemblance is to the cookie jar only. | MEDIUM | Accepted. Split into cookie jar (resembles) and storage (does not). |
| 10 | Five nits: “the 28 that survived that audit” (29 survived; 28 were fully supported); “43.8% to about 55–59%” when the last bucket is 52.8%; “as of January 2026 the maintainers had no replacement design” when the cited footnote dates stop at 2025-12-22; the Flash respawning figures not dated as historical; no Puppeteer recipe in “How to do it” despite Puppeteer having 76 corpus papers to Playwright's 34. | NIT | All accepted. The January 2026 claim was kept but re-evidenced: the thread carries a maintainer comment of 2026-01-06 asking the reporter for a design that keeps storageState working, and a reporter reply of 2026-01-14. (The re-review caught this sentence describing both as maintainer comments; corrected here.) The page says only that “as late as January 2026 the maintainers were still asking the reporter for a design”, which the 6 January comment supports on its own. Flash is dated with its 2020 end of life and the modern successors. A Puppeteer userDataDir line is added, with the note that it has no storageState equivalent. |
| 11 | “If you are writing for PETS, the reviewers are used to seeing it” turns a reporting rate into a claim about reviewer expectations. | NIT | Accepted — cut to “PETS is where this reporting norm is strongest”, which is what the data says. |
| 12 | programming:crawler:openwpm still carries an “OpenWPM 0.35.0 (Firefox 152)” example while current stable Firefox is 154. | NIT | Rejected as out of scope, and recorded here instead. That is a factual staleness on another page's own illustrative example, not a claim this page makes or relies on, and editing another page's examples is scope creep. Whoever next touches that page should fix it. (The stale “Programming:Stateful stateless — currently a notes stub” pointer on the same page was fixed, rev 1787139249, because it was a false statement about this page.) |
Its clean checks, recorded because they bound what remains in doubt: it re-derived the ratios 51.6%, 57.3%, 1.61×, 2.51×, 2.9×, 5.9× and 55.7% and all hold; it verified that the suspicious-looking 6.91× is verbatim in Rasaii et al. (which uses both “6.9 times” and “6.91 times”); and it independently recomputed the five OpenWPM papers labelled both and found all five among the 16 adjudicated-ok, so openwpm's “those five are the ones to read” survives this page's audit. It judged the voice consistent with the neighbours and the boundaries with crawler and openwpm clean.
Was it worth its slot: yes, and it was the most valuable of the four. Three of its high-severity findings are defects no checklist would have produced — a false claim in the first paragraph that the page's own evidence refutes, an uncomputed superlative, and a published script that cannot run under the names it is published with. Two of the three had been introduced or preserved by the fixes for earlier reviewers, which is the argument for running this pass last and for running it at all.
Re-review, after all fixes
Reviewers 1 and 3 were re-run against the final text, because their findings had been acted on and because the report script had gained two tables since they last saw it. Both were told to check figures and quotes outside the windows that were edited.
| Pass | Result |
|---|---|
Figures (sonnet) | Re-ran every script (byte-identical to the committed outputs), independently recomputed all six rows of the new per-field trend table from the raw JSONL, confirmed the 16-row comparison table is exactly the audit's 16 ok papers with no partial or wrong leakage, extracted the two published <file> blocks verbatim and ran them (all nine rows, matching the page), and verified the is-main guard: importing VERDICTS now emits nothing, and consent_action_audit.mjs run directly is still byte-identical to its committed output. 0 wrong, 1 nit. |
Citations (sonnet) | Confirmed the duplicate key is gone and the bibliography has 0 duplicate keys and one </bibtex>; checked all 16 comparison-table row descriptions against the papers' own text; re-fetched every external footnote including the two GitHub issues via the API rather than a summary; independently re-verified about 20 of the 37 quotations by hand. 0 wrong, 1 misleading, 3 nits. |
Fixed from that pass: the em dash in the quoted Chromium closure reason (the comment uses a hyphen); the lower-cased “Removes cookies from context” in the quoted Playwright docs; “primed cache against unprimed” reworded for [9Mirheidari, Seyed Ali; Golinelli, Matteo; Onarlioglu, Kaan; Kirda, Engin; Crispo, Bruno (2022): "Web Cache Deception Escalates!", in: Proceedings of the USENIX Security Symposium. (Link)], whose cache control is per-URL hit-versus-miss inside one detection step rather than two population arms; and the ambiguous sentence about interaction depth “moving less”, which was true of the range and false of the net change. The one MISLEADING finding was against these notes, not the page: they described GitHub comments of 2026-01-06 and 2026-01-14 as “maintainer comments” when only the first is — corrected above.
The author also verified two things independently rather than taking a reviewer's word: the per-field table's six rows against the script's own fractions, cell by cell, and the 16-row table against the audit's ok list in order. Both matched. The published code was extracted under the page's own filenames into an empty directory and run: nine rows, matching the table.
Final state: page rev 1787140910 at 60,763 bytes; this log at roughly 108 KB. Every figure on the page is reproducible from scripts/report_stateful_stateless.mjs, statefulness_audit.mjs and statefulness_probe.mjs; every quotation from state_quotecheck.mjs (37/37); every measured browser claim from scripts/state_probe/.
Pre-review fixes the author caught
Recorded because they are the same class of error the reviewers exist to find, and finding them first is not the same as them not having happened.
- The page originally compared statefulness reporting against artifact release “24.3% to 72.7%” and ethics review “8.3% to 45.2%”, quoted from
OVERVIEW.md. Those are computed onOVERVIEW.md`s bucket boundaries (2010–2011 / 2012–2015 / 2016–2019 / 2020–2023 / 2024–2026), not onlib.mjsYEAR_BUCKETS(2010–2013 / 2014–2017 / 2018–2021 / 2022–2024 / 2025–2026) which the page's own trend table uses. Quoting across incompatible buckets in a sentence beginning “over the same sixteen years” is exactly the kind of borrowed figure the corpus refresh warns about. Both indicators are now recomputed inreport_stateful_stateless.mjson the page's own buckets — 23.7% → 76.5% and 10.2% → 45.8% — and published as a table beside the statefulness column. (Writing that code also caught a wrong field name: the artifacts schema useslinks[].belongsToAuthors, notisAuthorsOwn, which had silently produced 0.0% in every bucket.) - “the only reporting rate on this site that has not improved since 2010” was an unverifiable claim about every page on the wiki. It was narrowed to the crawl-configuration fields — but that narrowing was still not computed, and reviewer 4 caught it: the script had per-bucket trends for statefulness only. It is computed now; see reviewer 4, finding 2.
- The consent-interaction subset (36 papers, 61.1% reporting) is the same 36 papers consent audited, where 7 (19.4%) are extraction false positives. Rather than repeat an unaudited figure,
report_stateful_stateless.mjsnow imports that page'sVERDICTSmap and prints the rate on the 28 verified papers too: 16/28 = 57.1%, i.e. the finding survives. The page carries both rows and the caveat.
Where this page's figures cross-check against neighbours
| Figure | Here | Neighbour | Reconciled? | ||
|---|---|---|---|---|---|
| statefulness stated, of crawling papers | 219 / 1,120 = 19.6% | crawler: “Stateful or stateless \ | 219 \ | 19.6%” | identical |
| OpenWPM papers stating it | 32/58 = 55.2% (category-restricted fold) | openwpm: 33/60 = 55.0%, and 186/1,061 for everyone else | differ by one paper; both definitions printed by this page's script and named on the page | ||
| Consent-interaction subset | 36 papers, 22 state statefulness | consent: same 36 papers, 7 false positives | this page prints both the raw and the audited row | ||
| Papers with a consent action stated | 349 / 1,120 = 31.2% | requests reports 52.3% on its own 197-paper subset | different populations; not compared on the page |
Artefacts
All under /workspace/artifacts/wiki. The outputs quoted above are the committed out/*.txt files, regenerable by re-running the script named beside each.
| Path | What it does |
|---|---|
scripts/report_stateful_stateless.mjs | the page's tables, each with its denominator; –wiki emits DokuWiki markup. Imports VERDICTS from consent_action_audit.mjs, whose printing is guarded behind an is-main check so the import has no side effect |
scripts/statefulness_probe.mjs | extracts state-management sentences from the 219 stating papers' own text |
scripts/statefulness_audit.mjs | the 29-paper hand adjudication and its effect on the page's figures |
scripts/state_quotecheck.mjs | all 37 quotations against .cols, .norm and the PDF |
scripts/pdf_grep.py | the PDF rendering used by the above (pypdf, de-hyphenated) |
scripts/state_probe/server.mjs + probe.mjs | the “what a reset actually resets” table |
scripts/state_probe/thirdparty.mjs | whether a crawl accumulates cross-site state |
scripts/state_probe/launch_args.mjs | Playwright vs Puppeteer default Chromium flags |
out/stateful_stateless_report{,_wiki}.txt, out/statefulness_{probe,audit_detail}_output.txt, out/state_quotecheck_output.txt, out/state_probe_output.txt, out/thirdparty_probe_output.txt, out/launch_args_output.txt | the unedited outputs reproduced on this page |
Related
- Programming:Stateful stateless — the page these notes are for.
- corpus — corpus-level provenance: the selection funnel, extraction method, and stability figures.
- Programming:Crawler:OpenWPM and Programming:Crawler — where the OpenWPM figures and the framework fold come from.
- consent — source of the consent-interaction adjudication reused here.
References
- [1]
- Zeber, David; Bird, Sarah; Oliveira, Camila; Rudametkin, Walter; Segall, Ilana; Wolls´en, Fredrik; Lopatka, Martin (2020): "The Representativeness of Automated Web Crawls as a Surrogate for Human Browsing", in: Proceedings of The Web Conference 2020, pp. 167–178. Association for Computing Machinery, New York, NY, USA. (DOI) (Link)
- [2]
- Englehardt, Steven; Han, Jeffrey; Narayanan, Arvind (2018): "I never signed up for this! Privacy implications of email tracking", Proceedings on Privacy Enhancing Technologies 2018(1):109-126. (DOI)
- [3]
- Jueckstock, Jordan; Sarker, Shaown; Snyder, Peter; Beggs, Aidan; Papadopoulos, Panagiotis; Varvello, Matteo; Livshits, Benjamin; Kapravelos, Alexandros (2021): "Towards Realistic and Reproducible Web Crawl Measurements", in: Proceedings of the ACM Web Conference. (DOI)
- [4]
- Urban, Tobias; Degeling, Martin; Holz, Thorsten; Pohlmann, Norbert (2020): "Beyond the Front Page:Measuring Third Party Dynamics in the Field", in: Proceedings of The Web Conference 2020, pp. 1275–1286. Association for Computing Machinery, New York, NY, USA. (DOI) (Link)
- [5]
- Demir, Nurullah; Große-Kampmann, Matteo; Urban, Tobias; Wressnegger, Christian; Holz, Thorsten; Pohlmann, Norbert (2022): "Reproducibility and Replicability of Web Measurement Studies", in: Proceedings of the ACM Web Conference. (DOI)
- [6]
- Agarwal, Pushkal; Joglekar, Sagar; Papadopoulos, Panagiotis; Sastry, Nishanth; Kourtellis, Nicolas (2020): "Stop tracking me Bro! Differential Tracking of User Demographics on Hyper-Partisan Websites", in: Proceedings of the ACM Web Conference. (DOI)
- [7]
- Englehardt, Steven; Narayanan, Arvind (2016): "Online Tracking: A 1-million-site Measurement and Analysis", in: Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security, pp. 1388–1401. Association for Computing Machinery, New York, NY, USA. (DOI) (Link)
- [8]
- Song, Chuxu; Mekala, Dheekshith Dev Manohar; Wang, Hao; Martin, Richard (2026): "Redefining Website Fingerprinting Attacks with Multi-Agent LLMs", in: Proceedings on Privacy Enhancing Technologies, pp. 688-702. (DOI)
- [9]
- Mirheidari, Seyed Ali; Golinelli, Matteo; Onarlioglu, Kaan; Kirda, Engin; Crispo, Bruno (2022): "Web Cache Deception Escalates!", in: Proceedings of the USENIX Security Symposium. (Link)
