{
  "product": "GuruOwl browser APKG viewer",
  "verification_date": "2026-09-08",
  "verified_by": "GuruOwl developers",
  "environment": "Playwright Chromium; local development server; desktop and 390 px viewport",
  "source": "scripts/anki/apkg-viewer-smoke.mjs and artifacts/apkg-viewer-2026-09-08/smoke-results.json",
  "scope": "Developer verification, not an independent audit, native iPhone Safari verification, or production performance guarantee.",
  "limits_bytes": { "package": 104857600, "decompressed_database": 67108864 },
  "checks": [
    {
      "input": "AnKing MCAT",
      "cards": 6437,
      "rendered_frames_at_once": 12,
      "cloze_front": "[...]",
      "cloze_answer": "mass number",
      "image_pixels": [800, 800],
      "image_blob_url": true,
      "search": "element",
      "search_matches": 55,
      "parse_ms_observed_locally": 1990
    },
    {
      "input": "GCSE Chemistry",
      "cards": 1039,
      "search": "pH probe",
      "search_matches": 1,
      "image_pixels": [346, 346]
    },
    {
      "input": "Generated stress collection",
      "cards": 20000,
      "rendered_frames_at_once": 12,
      "last_card_searchable": true,
      "parse_ms_observed_locally": 1354,
      "search_ms_observed_locally": 24
    },
    {
      "input": "Generated local-media and external-request canary",
      "local_wav_playable": true,
      "external_canary_requests_observed": 0,
      "multipart_file_uploads_observed": 0,
      "caveat": "These scoped observations do not mean the entire website makes no network requests."
    }
  ],
  "not_passed": [
    {
      "input": "Local MileDown package",
      "reason": "Exceeded the 100 MB package limit; not a successful viewer test."
    },
    {
      "input": "Local AnKing Step package",
      "reason": "Exceeded the 64 MB decompressed database limit; not a successful viewer test."
    }
  ],
  "limitations": [
    "No Anki add-on or script execution",
    "No remote media loading",
    "No MathJax/LaTeX evaluation",
    "Script-dependent or image-occlusion templates may differ",
    "Audio decoding depends on the browser"
  ],
  "reusable_sample": {
    "url": "/examples/apkg-viewer/guruowl-sample.apkg",
    "author": "GuruOwl",
    "license": "CC0-1.0",
    "license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
    "generator": "scripts/anki/build-public-viewer-sample.mjs",
    "notes": 2,
    "cards": 3,
    "search": "SampleFinalCard",
    "search_matches": 1,
    "cloze_front": "[colour]",
    "cloze_answer": "blue",
    "packaged_media": "One original test PNG; no third-party course material"
  }
}
