{
  "artifact": "loopstand-tv-v1.3-test.apk",
  "package": "com.loopstand.tvplayer.test",
  "version": "1.3-test",
  "versionCode": 4,
  "minSdk": 24,
  "targetSdk": 35,
  "bytes": 623560,
  "sha256": "bb2e504e9c48ec98e31c1230290dae82fb909478200942cda8180f99532a5f42",
  "permissions": [
    "android.permission.INTERNET"
  ],
  "nativeLibraries": [],
  "download": "/tv/loopstand-tv-v1.3-test.apk",
  "player": "/tv/",
  "guide": "/tv/setup.html",
  "channel": "signed test build",
  "softwareTests": 69,
  "validation": [
    "Java and D8 compilation",
    "APK ZIP integrity, v2/v3 signing and alignment verification",
    "Manifest SDK and permission verification",
    "All five bundled player assets match canonical public SHA-256 hashes",
    "Same signer and increasing version code verified against v1.2",
    "69 TV, phone, proxy and routing regression checks passed",
    "11 isolated backend handshake scenarios passed using actual upstream functions and in-memory SQLite; Auth responses mocked",
    "Independent QR decoder and ReportLab encoder agree on all modules and error-correction codewords",
    "Browser preview verified invalid-code, authentication-unavailable recovery and code preservation after reload"
  ],
  "notVerified": [
    "Physical Alibaba box installation and remote control",
    "Box-specific media decoding and long-running playback",
    "Physical phone camera scan",
    "Live Eravo ID sign-in and owner approval: the preview could not load the upstream auth module",
    "Physical-device approval-to-playback end-to-end session"
  ],
  "features": [
    "QR carries the current TV approval code and expiry to the phone",
    "Existing Eravo ID sign-in is reused; pending code survives sign-in and reload",
    "Owner explicitly chooses an approved screen and taps Connect TV",
    "TV accepts backend-approved credentials and opens its assigned schedule",
    "Expired, malformed and replaced codes cannot leave an active QR on the TV",
    "Simplified TV interface retained",
    "In-place update from v1.2 using the same signing certificate"
  ],
  "backendHandshakeScenarios": 11,
  "phoneConnection": "/tv/connect.html"
}
