# Reproducing the published analysis Run `python3 analyze.py` inside the unpacked publication directory. It needs only Python 3 standard-library modules, reads all 120 main evidence records, excludes pilot and supplementary data, and regenerates observations.csv and summary.json. Check file integrity against manifest.json before modifying the bundle. ## Repeating collection The exact frozen collector is collector-frozen.cjs. The collection environment used Playwright 1.62.1, Chromium 151.0.7922.34 and Node v25.2.1. It launches isolated browser contexts, with at most two concurrent journeys. No interception, custom user agent, extension or certificate override is used. Collection requires independently supplied routing and valid subscriptions. The frozen collector expects the private proxy connection URI at `../proxy-encryption-study/private/provider-connection.txt`; adapt that private input path for your own environment. Never add credentials to a public script, process command line or evidence bundle. VPN route names are labels: establish and verify the intended VPN connection before running a route. The code rejects a non-US observed exit on proxy/VPN routes. Public exitHash identifiers have been pseudonymized using HMAC-SHA256 over privately captured IP digests with an unpublished study key. They support within-study equality checks; the original addresses and unsalted digests are not distributed. A fresh reproduction will generate different identifiers and can legitimately obtain different access results. The protocol records navigation budgets, rendering grace, normal scrolling in supplementary validation, stop conditions and amendments. No submitted complaint, CAPTCHA solution, declaration acceptance, personal data entry or account login is necessary to repeat the measured part of these journeys. Supplementary headed checks change browser mode and, for embedded forms, scrolling/wait time. Those observations are exploratory and do not replace the fixed-window main matrix. ## Site integration The public screenshots have been losslessly encoded as WebP. image-conversions.json maps the original PNG hashes and dimensions to their WebP counterparts. Original captures remain in the ignored local working-study folder. Published image references and manifest hashes were updated; observation text and classification counts were preserved.