{
  "dates": "Open and import: 2026-10-17 19:35 UTC to 2026-10-18 04:20 UTC.",
  "machine": "Mac with Apple M4 Pro, 48 GB memory, macOS 27.0.1",
  "browser": "Google Chrome 155.0.8059.80, 1440x900 viewport, a copy of a signed-in profile. Launched by Playwright with Chrome's sandbox off (Playwright's default --no-sandbox flag) for every run; noticed afterward",
  "network": "networkQuality: 76.3 Mbps down, 66.5 Mbps up, 16 ms idle latency",
  "apps": {
    "word": "Word for the web (word.cloud.microsoft), Microsoft 365 business account",
    "docs": "Google Docs (docs.google.com), personal Google account",
    "revise": "Revise (revise.io), production"
  },
  "order": "Each case ran its apps in a fixed order (Revise, Word, Google Docs), five consecutive runs per app, warm before cold.",
  "cold": "HTTP cache, service workers, Cache Storage, and IndexedDB cleared for every origin before each run. Cookies and localStorage kept. The home page then loaded untimed.",
  "recording": "Chrome DevTools screencast of the tab, stopped after 5 s without a new frame or at 90 s. 176 of 191 recordings reached 90 s because the caret or other small animations kept producing frames.",
  "text_on_screen": "first frame where macOS Vision OCR finds the document's first sentence with a line height of at least 14 px",
  "loaded": "later of text_on_screen and the first frame from which the top 140 px (toolbar) stays within 1% of the final frame",
  "companion": "AI proofread: /blog/copilot-vs-gemini-vs-revise-ai-proofreading-test",
  "download": "bytes.jsonl, measured 2026-10-19 with bytes.mjs: one load per app and document. Caches cleared as for a cold run, then the document's own URL loaded in a blank tab; every HTTP response in any frame (body as transferred, so compressed, plus headers) and every WebSocket frame received in the first 15 s is counted. Includes the app itself. The timed runs instead opened documents from each app's home page."
}
