# Dated implementation notes — 14 October 2026 - Official Proton Linux CLI 1.0.5 was available and authenticated, despite no desktop GUI process being observed. Initial connection disconnected; NetShield malware-only, kill switch off, custom DNS off. CLI connection DE#388 was independently verified. Native GUI/kill-switch behavior is not an outcome. - uBO Lite official release 2026.1012.1545 was loaded into disposable isolated Playwright Chromium 151.0.7922.34 profiles. Optimal mode 2 and six enabled default rulesets were checked through its own options page. Initial self-message activation check failed and was repaired using the extension page. Basic validation is retained but is not the measured mode. - HTTP and HTTPS fixture rounds captured 17/17 receiver requests through the proxy and 15/17 through browser events; departure beacons require the proxy. Initial and fresh-context storage checks passed. - NetShield DNS off/on comparison retained the same exit hash. Three selected tracking hosts changed from DNS answers to NXDOMAIN while control domains remained resolvable; connect.facebook.net still resolved in that check. These are mechanism checks, not prevalence or proof of complete NetShield coverage. - A navigation-based off-parity prototype stalled and was terminated without a saved completed off result. A fetch-based replacement records each probe separately, including abort/error outcomes. Both direct and proxied off probes received HTTP 200 for all five selected resources. The earlier on probes blocked the same two script resources in direct and proxied browsers. Instrumentation still does not establish parity for every DNS name/transport. - A proxied browser IP-echo check matched the independent Germany exit hash. Its paired direct browser IP-echo failed with ERR_SOCKET_NOT_CONNECTED; this is retained as a failed check, not evidence of different routing. - The five-site pilot includes access failures and unavailable/refusal-with-subscription surfaces. No purchase/subscription control is clicked to obtain refusal. Shared-profile reserve reconnaissance is non-analytic discovery only. Main runs require fresh profiles and no initial cookies. - Pilot taskCompleted flags initially denote action issuance; independent functional success must be assessed from saved fields, screenshots and scroll observations, not assumed from that flag. Main collection will explicitly verify input actionability and scroll outcome before final protocol freeze. - Main phase uses selected Referer and hashed research-browser cookie values for attribution; other headers/cookie values are omitted from proxy logs and public exports. Pilot captures remain separate. Missing capture files are retained as incomplete evidence, not dropped from denominators. Per-visit proxy shutdown/readiness was strengthened before the second main mode block. - A temporary system sleep/idle inhibitor is scoped to the active bounded round and releases on completion/deadline. No persistent power settings or shutdown action are changed. Future round supervisors request the same scoped inhibitor and retain any failure in private/inhibitor.log. - Main collector v2.1 preserves v2 task/window definitions, strengthens per-run proxy exit/readiness, creates a never-reused temporary profile directory even after a crashed attempt, and records collector/helper source hashes at module load. Already-running v2 records remain labelled v2 and are not given retrospective source hashes. These changes precede the next mode block; prior originals remain unchanged. ## 15 October, after midnight Nairobi — first-round audit - R1 finished all 160 assignments on 14 October local time. No new collection was started by the early continuation heartbeat. Properly spaced repetitions remain scheduled for 21:18 on subsequent days. - Original status/title detection missed some visible Reuters/Skyscanner challenges. Separate audit-main.py applies specific captured challenge evidence and completed-task/window/capture checks to every main record; originals are never relabelled. This review applies uniformly to future rounds too. Raw measured counts are not eligible-pair counts. - analyze.py now retains per-window counters instead of relying on full-visit totals. Primary contrasts use task action, the fixed 60-second observation, and departure; navigation/consent and screenshot overhead are separate exploratory windows. This implements the intended equal-window comparison, but the precise analytic boundary was clarified after inspecting R1 and is disclosed as such. URL decoding was corrected for synthetic-marker matching. All 200 existing records pass window-to-total arithmetic checks. - paired-analysis.py makes all single-factor contrasts with the other two factors held fixed. Repetitions are averaged within site before site means or resampling; no pilot or California data are pooled into Germany. Fewer than five site clusters receives no interval. Complete-case conditioning and purposive sampling limit interpretation. Endpoint-purpose classification remains provisional until final primary-source review. - Prospective California subset frozen in california-sample-freeze.json after German R1, based on workflow operability and category/task coverage, not effect direction. It is a descriptive replication subset; geography also changes exit/network identity. - Future supervisors now verify exact modes at both block edges, country (and California region for US-CA), exit stability across mode blocks, refuse to duplicate a finished round ID, record independently verified restoration, and refresh audit/paired/progress outputs. No real-site task or capture settings changed. - An idle owned calibration browser remained after an earlier preflight. It was closed. Chromium on this host rewrites its process title with spaces; watchdog cleanup now uses the independently resolved executable and exact owned profile path instead of assuming NUL-separated argv. Interrupted supervisors also invoke scoped cleanup. These changes do not affect measured requests. ## 16 October, after midnight Nairobi — continuation timing - The continuation arrived at 2026-10-15T21:36:58Z, which is 16 October 00:36:58 Africa/Nairobi. R2 actually started at 00:37 Nairobi on 16 October, more than 24 hours after R1. No 15 October main collection is claimed. - Two successive heartbeats match the recurrence hour in UTC and arrive three hours after the requested Nairobi time. This supports, but does not prove, a scheduler timezone interpretation problem. Remaining starts were encoded as 18:35 UTC for 21:35 Nairobi, bounded through 18 October. Official scheduling documentation did not resolve timezone behavior. Future arrivals must be checked against actual timestamps. R3 must wait until at least 17 October; a new supervisor guard enforces distinct local dates before touching networking. No currently running collector was changed. - Before R2 outcomes were used, all 1,078 previously inventoried main evidence files matched their hashes; all 930 files of the pinned unpacked blocker release matched the preserved official ZIP. R1 manifest snapshot retained separately. - Microsoft Clarity provider documentation was archived from Microsoft Learn. Ten R1 Clarity POST bodies across two TechCrunch assignments decoded as gzip JSON containing e and a arrays, consistent with documented metadata/analytics. No raw IDs or event values are exported, no specific interaction event types are inferred, and no persistent identity or legality conclusion follows. The refused assignment is not eligible for completed-task contrasts. A full-filter-mode attempt to retrieve the already-observed Clarity script version failed DNS; it was not bypassed, and no deployed-code verification is claimed. - Manual endpoint review found InMobi and PubMatic OpenRTB bid uploads in R1 captures. Current official Prebid adapter source identifies the exact endpoints, and IAB OpenRTB documentation identifies the nested EID/site/device fields. These precise POST endpoints are now classified as reviewed advertising auction requests in every run, with preflight/script delivery still separate. Current reference source is not asserted to be the exact deployed revision. Only field presence and per-run anonymized ID aliases may be published; no raw identifier or hash is exported. Co-occurrence at two recipients is distinct from backend linking or cross-session persistence. - A secondary loaded-page analysis was added after seeing R1, explicitly exploratory. It applies the same capture, timing, route, isolation and challenge guards but allows an issued scroll task to fail on a genuine rendered page. It is kept separate from completed-task primary results and does not turn subscription refusals or challenges into privacy successes. This captures observable analytics while a notice obstructs the task, with the selection limits disclosed. ## 16 October evening — audit and final-start readiness - No new main collection tonight. R2 finished 160 assignments with valid route/DNS/exact-mode guards; postprocessing finished and restoration was verified. Rechecked 2,157 inventoried original files with zero mismatches. - This continuation arrived at 18:30:24Z, 275.827 seconds before its configured 18:35 target. No cause for this early arrival is asserted. The recurrence stays unchanged; R3 is explicitly reserved for 17 October. A UTC not-before guard was exercised and rejected an early R3 invocation without changing VPN state. - Read-only clock checks found NTPSynchronized=no and two uncached HTTPS Date references roughly 35–36 seconds ahead of the host. The bounded final launcher now calibrates against both, waits for the target with the estimated offset, rejects duplicate claims and clock jumps, and records host/reference times separately. HTTP Date cannot guarantee sub-second accuracy. No system clock or time service was changed. All prior raw timestamps remain original; the observed offset does not cross any recorded collection-day boundary. - A preparation attempt to use DE#388 failed; an official fastest Frankfurt Germany availability check also failed. No study visits were collected during these checks, and disconnected/malware-only was restored. Before any R3 outcome only, the supervisor may try official same-city Frankfurt Germany selection if DE#388 is unavailable, recording the actual exact server and availability amendment. It will not change exits mid-round or apply fallback to a partial existing round. The independent Germany/DNS/exit guards still apply. Any cross-round server change must be disclosed; no route or successful condition is fabricated. - Draft article and self-contained HTML/WordPress previews were prepared with current counts and provisional labels. Outcome categories use a mutually exclusive hierarchy: captured challenges take precedence over raw missing-refusal labels. Chart counts derive from the audit; they are not protection-effect estimates. Optional matplotlib installation failed due network transfer issues; no dependency or system-package change was forced. A portable SVG/PNG chart renderer uses already available Sharp. ## 17 October — user advances the final round - The user explicitly requested the final round run now rather than waiting for 18:35 UTC. The former evening not-before guard was removed as superseded by this instruction. Distinct Nairobi calendar days, duplicate prevention, frozen tasks, capture fidelity and all route/DNS/mode guards remain in force. Actual launch time and time-of-day variation will be disclosed. No earlier timestamp is rewritten. - The first manual R3 launch timed out waiting for official CLI status before any visits. Its terminal record is preserved privately as attempt 1. A later ordinary CLI connection succeeded to original DE#388; a fresh supervisor then passed the Germany, control/filter DNS and exact-off start guards and began collection. No source-IP substitution was needed. - Four early R3 assignments failed the existing 8-second local capture-proxy readiness deadline before a browser/site workflow. They remain original local collection-error records, not website failures or zero-disclosure successes. Later proxies started and live capture files contain data. No task, capture method or observation-window definition was changed mid-block, and no original failure was overwritten. The final exclusions must retain this distinction. ## 17 October — interrupted closing guard and recollection - The first 80 R3 workflows finished, but the closing `protonvpn config list` probe timed out before the DNS/exit end snapshot. Cleanup then changed the mode, so the missing closing guard cannot be retroactively reconstructed. All 80 attempts are excluded from primary comparison and preserved byte-identically with a checksum archive. Recollecting them is necessary validation repair, not a fourth collection day. Report these 80 additional attempts separately from the 480 planned main cells. - Read-only configuration/status probes now permit one bounded retry, and the DNS probe wrapper permits sufficient time for both attempts; no guard is waived. Disconnection is rechecked and retried if still connected. Collector v2.2 allows 30 seconds rather than 8 for local proxy readiness and randomizes eight marker characters without changing typed length, keystroke delay or task/window definitions, avoiding identifier reuse on recollection. Source hashes remain recorded. ## 17 October — bounded recovery supervision - At the user’s request, added ACTIVE recovery heartbeat `final-research-round-recovery` every ten minutes, bounded through 13:42:31 UTC on 17 October (the current supervisor deadline plus ten minutes). Scheduler dispatch is not an uptime guarantee. It checks owned checkpoints/processes without competing Proton CLI calls, preserves invalid attempts, and continues remaining authorized work after verified R3 completion. Original bounded evening follow-ups remain backup. - The DNS/configuration helper now permits three 60-second read-only configuration attempts and runs independent DNS probes concurrently. This stays within the existing 240-second supervisor guard timeout; no successful guard is inferred from a timeout. No measured task or collection condition changes. - Verified temporary scoped sleep inhibition and live supervisor, collector and postprocessor. Proton desktop is available as a recovery option but left idle while the CLI owns collection to avoid competing changes. No permanent power, clock or VPN system settings changed. ## 17 October — final main audit and publication preparation - Recollected R3 finished at 10:38:59 UTC with both closing DNS/configuration/exit guards passing; restoration was independently verified at 10:39:14 UTC despite an initial disconnect command error. The first R3 manifest snapshot belonged to the invalidated attempt; it remains unchanged. Integrity checks resolve its original paths through the checksum archive, and the successful recollection receives an owner-specific manifest. Future observer snapshots include the owner PID to prevent ambiguous retry provenance. - All 20 main sites have records on three distinct actual Nairobi dates: 14, 16 and 17 October. Main assignment count is 480; 80 invalidated additional workflow attempts are separately disclosed. Primary eligible count before California is 105. - Frozen California feasibility/collection launched using original US-CA#229, independently located in Los Angeles. No main data are pooled with this subset. Final publication remains pending California closure, evidence/source review, rendering and numerical/privacy checks. ## 17 October — final collection and publication review - California finished 48 assignments at 11:19:30 UTC. Both NetShield blocks passed exact mode/DNS/exit/location checks; disconnected/malware-only restoration was independently verified at 11:19:42 UTC. It supplies 22 primary-eligible workflows and 21 single-factor contrasts, kept separate from Germany. One Surfshark UET request contributes to two contrasts; these are not two independent events. Official Microsoft UET documentation supports the endpoint-purpose classification; no retention, completed conversion or persistent-person inference is made. - Public data now labels California explicitly as phase replication, alongside phase main and pilot, without changing request counts, eligibility or paired results. All 3,594 retained main/California original files matched final inventory hashes; invalidated attempts retain their separate archive provenance. - Completed numerical/source/privacy review and local desktop/mobile article and WordPress rendering. R1 predates the machine-readable restoration flag; its original record is preserved, and the dated independent audit plus CLI restoration outputs document its stopping state. Later restoration flags were verified normally. - Final analytical replay reproduces every primary and exploratory contrast/summary from allowlisted sanitized inputs. Private packet-level classifications cannot be independently replayed from the public ZIP; that limitation is explicit. The first packaging process was terminated before producing a ZIP; a fresh bounded packaging run succeeded. No measurement was changed or fabricated to resolve a packaging issue.