{"appId":"demo-saved-library-grid","generatedAt":"2026-08-10T00:16:42.031Z","status":"ready","fingerprint":"f892e6f749166b283ab2d3b7310f264a169dd9a091a67b9165971374ded52b4a","stages":[{"id":"manifest","label":"Manifest validation","status":"passed","findings":[]},{"id":"assets","label":"Asset preflight","status":"passed","findings":[]},{"id":"analytics","label":"Analytics readiness","status":"passed","findings":[]},{"id":"security","label":"Embed security","status":"passed","findings":[]},{"id":"adapter","label":"WebTV adapter","status":"passed","findings":[]},{"id":"adapter","label":"android-tv adapter","status":"passed","findings":[]},{"id":"adapter","label":"roku adapter","status":"passed","findings":[]}],"summary":{"errors":0,"warnings":0,"assetsChecked":22,"adapterTargets":3,"webtvAdapterStatus":"ready"},"manifest":{"valid":true,"status":"valid","fingerprint":"f892e6f749166b283ab2d3b7310f264a169dd9a091a67b9165971374ded52b4a","findings":[]},"assets":{"appId":"demo-saved-library-grid","generatedAt":"2026-08-10T00:16:42.031Z","totals":{"assets":22,"ok":22,"warnings":0,"errors":0},"findings":[{"asset":{"id":"demo-saved-library-grid.logo","type":"image","url":"https://placehold.co/512x512/08090B/F0D95E?text=Demo%20Saved%20Library%20Grid","usage":"logo"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":348,"status":200},{"asset":{"id":"demo-saved-library-grid.splash","type":"image","url":"https://placehold.co/1920x1080/08090B/F7F7F2?text=Demo%20Saved%20Library%20Grid","usage":"splash"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":356,"status":200},{"asset":{"id":"saved-sistas-style.poster","type":"image","url":"https://placehold.co/960x540/171A20/F7F7F2?text=Circle%20Of%20Friends","usage":"poster","contentId":"saved-sistas-style"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":354,"status":200},{"asset":{"id":"saved-sistas-style.background","type":"image","url":"https://placehold.co/1920x1080/08090B/F7F7F2?text=Circle%20Of%20Friends","usage":"background","contentId":"saved-sistas-style"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":361,"status":200},{"asset":{"id":"saved-sistas-style.playback","type":"playback","url":"https://samplelib.com/lib/preview/mp4/sample-20s.mp4","usage":"playback","contentId":"saved-sistas-style"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"video/mp4","elapsedMs":261,"status":200},{"asset":{"id":"saved-house-style.poster","type":"image","url":"https://placehold.co/960x540/171A20/F7F7F2?text=Oak%20Street%20House","usage":"poster","contentId":"saved-house-style"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":155,"status":200},{"asset":{"id":"saved-house-style.background","type":"image","url":"https://placehold.co/1920x1080/08090B/F7F7F2?text=Oak%20Street%20House","usage":"background","contentId":"saved-house-style"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":153,"status":200},{"asset":{"id":"saved-house-style.playback","type":"playback","url":"https://samplelib.com/lib/preview/mp4/sample-10s.mp4","usage":"playback","contentId":"saved-house-style"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"video/mp4","elapsedMs":263,"status":200},{"asset":{"id":"saved-love-after.poster","type":"image","url":"https://placehold.co/960x540/171A20/F7F7F2?text=Second%20Chances","usage":"poster","contentId":"saved-love-after"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":155,"status":200},{"asset":{"id":"saved-love-after.background","type":"image","url":"https://placehold.co/1920x1080/08090B/F7F7F2?text=Second%20Chances","usage":"background","contentId":"saved-love-after"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":132,"status":200},{"asset":{"id":"saved-love-after.playback","type":"playback","url":"https://samplelib.com/lib/preview/mp4/sample-5s.mp4","usage":"playback","contentId":"saved-love-after"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"video/mp4","elapsedMs":233,"status":200},{"asset":{"id":"saved-family-road.poster","type":"image","url":"https://placehold.co/960x540/171A20/F7F7F2?text=Family%20Road","usage":"poster","contentId":"saved-family-road"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":144,"status":200},{"asset":{"id":"saved-family-road.background","type":"image","url":"https://placehold.co/1920x1080/08090B/F7F7F2?text=Family%20Road","usage":"background","contentId":"saved-family-road"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":129,"status":200},{"asset":{"id":"saved-family-road.playback","type":"playback","url":"https://samplelib.com/lib/preview/mp4/sample-30s.mp4","usage":"playback","contentId":"saved-family-road"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"video/mp4","elapsedMs":280,"status":200},{"asset":{"id":"saved-wild-card.poster","type":"image","url":"https://placehold.co/960x540/171A20/F7F7F2?text=Wild%20Card%20Night","usage":"poster","contentId":"saved-wild-card"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":135,"status":200},{"asset":{"id":"saved-wild-card.background","type":"image","url":"https://placehold.co/1920x1080/08090B/F7F7F2?text=Wild%20Card%20Night","usage":"background","contentId":"saved-wild-card"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":132,"status":200},{"asset":{"id":"saved-wild-card.playback","type":"playback","url":"https://samplelib.com/lib/preview/mp4/sample-20s.mp4","usage":"playback","contentId":"saved-wild-card"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"video/mp4","elapsedMs":201,"status":200},{"asset":{"id":"saved-office-style.poster","type":"image","url":"https://placehold.co/960x540/171A20/F7F7F2?text=The%20Office%20Tower","usage":"poster","contentId":"saved-office-style"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":121,"status":200},{"asset":{"id":"saved-office-style.background","type":"image","url":"https://placehold.co/1920x1080/08090B/F7F7F2?text=The%20Office%20Tower","usage":"background","contentId":"saved-office-style"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":134,"status":200},{"asset":{"id":"saved-office-style.playback","type":"playback","url":"https://samplelib.com/lib/preview/mp4/sample-10s.mp4","usage":"playback","contentId":"saved-office-style"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"video/mp4","elapsedMs":202,"status":200},{"asset":{"id":"demo-saved-library-grid-home.background","type":"image","url":"https://placehold.co/1920x1080/08090B/F7F7F2?text=Demo%20Saved%20Library%20Grid%20Home","usage":"background","screenId":"demo-saved-library-grid-home"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":120,"status":200},{"asset":{"id":"demo-saved-library-grid-saved.background","type":"image","url":"https://placehold.co/1920x1080/08090B/F7F7F2?text=Saved%20Library","usage":"background","screenId":"demo-saved-library-grid-saved"},"severity":"ok","message":"Asset is reachable.","checkedWith":"HEAD","contentType":"image/svg+xml; charset=utf-8","elapsedMs":162,"status":200}]},"adapters":[{"adapterId":"webtv-reference","target":"browser-webtv","status":"ready","entryRoutes":{"portal":"/portal?project=demo-saved-library-grid","preview":"/?project=demo-saved-library-grid","manifest":"/api/app-manifest/current?project=demo-saved-library-grid"},"supported":{"blockTypes":["hero","rail","grid","liveGuide","continueWatching","posterList","text","banner","actions","embed","searchKeyboard","searchResults","searchPreview","bundleOffer","providerLogoRail","promoMosaic"],"streamFormats":["mp4","external","youtube","hls","dash","webrtc"],"navigationModels":["browser","spatial","rowPriority"]},"findings":[]},{"adapterId":"android-tv-target","target":"android-tv","status":"ready","runtime":{"language":"Kotlin / Jetpack Compose for TV","rendererEntry":"native/android-tv/app/src/main/java/app/universalmedia/MainActivity.kt","packageRoot":"native/android-tv"},"supported":{"blockTypes":["hero","searchKeyboard","searchResults","searchPreview","bundleOffer","providerLogoRail","promoMosaic"],"nativeBlockTypes":["hero","searchKeyboard","searchResults","searchPreview","bundleOffer"],"fallbackBlockTypes":["providerLogoRail","promoMosaic"],"streamFormats":["hls","dash","mp4","external"],"billingProviders":["iap","external"]},"billing":{"entitlementEndpoint":"/api/subscription/entitlement?project=demo-saved-library-grid","purchaseEndpoint":"/api/subscription/purchase","restoreEndpoint":"/api/subscription/restore","providerMode":"none"},"findings":[]},{"adapterId":"roku-target","target":"roku","status":"ready","runtime":{"language":"BrightScript / SceneGraph","rendererEntry":"native/roku/source/main.brs","packageRoot":"native/roku"},"supported":{"blockTypes":["searchKeyboard","searchResults","searchPreview","bundleOffer","providerLogoRail","promoMosaic"],"nativeBlockTypes":["searchKeyboard","searchResults","searchPreview","bundleOffer"],"fallbackBlockTypes":["providerLogoRail","promoMosaic"],"streamFormats":["hls","dash","mp4","external"],"billingProviders":["iap","external"]},"billing":{"entitlementEndpoint":"/api/subscription/entitlement?project=demo-saved-library-grid","purchaseEndpoint":"/api/subscription/purchase","restoreEndpoint":"/api/subscription/restore","providerMode":"none"},"findings":[]}],"webtvAdapter":{"adapterId":"webtv-reference","target":"browser-webtv","status":"ready","entryRoutes":{"portal":"/portal?project=demo-saved-library-grid","preview":"/?project=demo-saved-library-grid","manifest":"/api/app-manifest/current?project=demo-saved-library-grid"},"supported":{"blockTypes":["hero","rail","grid","liveGuide","continueWatching","posterList","text","banner","actions","embed","searchKeyboard","searchResults","searchPreview","bundleOffer","providerLogoRail","promoMosaic"],"streamFormats":["mp4","external","youtube","hls","dash","webrtc"],"navigationModels":["browser","spatial","rowPriority"]},"findings":[]}}