- Canonical
/v1and/v2OpenAPI/fixtures validate public success and normalized error responses. - Apple and Android manifests pin product
3.0.0, contract2.0.0, and OpenAPI SHA-2568bf63751f286daa30263a74aa98b633ccb78e9d2777e21a5023719fd1c3b6257. - Native Android and KMP consume the same versioned snapshot; production promotion verifies Android
mainbefore deploy. - Worker tests cover v3/v4 mapping, cache partitions, rate limiting, D1 migrations, encryption, callback/CSRF/CORS controls, session expiry/revoke, durable mutation idempotency, and rollback paths. The protected staging runner snapshots and restores the full Movie/TV library matrix and Movie/TV/Episode ratings, validates recommendations, completes the mixed-list lifecycle, retries safely, and cleans up after failure.
- Swift, native Android, and KMP test canonical discriminator/nullable/unknown-field fixtures and local-first storage/outbox behavior.
- Native Android CI validates unit/lint/goldens plus phone/TV launch; main and Wear release workflows verify shared signing identity.
- KMP desktop tests/compile, JS, Wasm, and portable desktop packages are release blockers.
- Apple source gates cover Swift tests, strict SwiftLint, iOS/Catalyst/tvOS/macOS/watchOS/visionOS builds, analyze, and launch smoke where runtimes are installed. Committed release artwork now supplies opaque iOS/Mac icons, a separate Watch icon set, layered tvOS icons/Top Shelf images, a two-layer visionOS icon stack, and the named iOS launch color. Build-log inspection turns relevant asset warnings into CI failures; visionOS validation runs on Apple silicon.
./scripts/release-preflight.sh stagingandproductionare read-only owner gates for the matching promotion stage;allis the final combined audit. They check the source manifest, required GitHub secret names without reading their values, matching DNS/TLS, and optional local Wrangler authentication. Production additionally requires reviewer/branch protection plus exact Androidmaincontract, fixture, release-manifest, and canonical-source provenance parity. The scoped post-deploy form such as./scripts/release-preflight.sh staging --liverequires the exact capability contract and a Cloudflare UUID Worker version header; its public GET can exercise normal rate-limit/cache behavior.
TMDb coverage records Apple Episode account-state as implemented with model, HTTP, canonical fixture, pending-local precedence, and capability-gate coverage; live signed-in device/TV QA remains open. Mixed-list editing/items, account recommendations, and Worker TMDb-change-feed cache invalidation have cross-platform or backend test coverage. Account authorization is fail-closed on every full client: Apple/Android TV require tv_qr_auth, while phone, desktop, and web require browser_auth; missing or false flags disable the action before any account request.
The following require external accounts, protected credentials, approved artwork, or store ownership and are intentionally not committed:
- Create/verify DNS and TLS for
staging-catalog.smartmovie.app,catalog.smartmovie.app, and browser callback origins. - Create staging/production D1 databases, bind each as
AUTH_DB, and apply all migrations. - Rotate and set
TMDB_BEARER_TOKEN,SESSION_ENCRYPTION_KEY, Cloudflare deployment credentials, callback origins, cookie domain, CORS origin allowlists, and return-URI allowlists. - Configure
ANDROID_CONTRACT_SYNC_TOKENwith least privilege and merge the checksummed Android snapshot PR. - Review and approve the committed Apple artwork, configure signing, App Store Connect records, production CloudKit schema, universal/app links, privacy/support URLs, approved TMDb attribution artwork, screenshots, age rating, and metadata.
- Configure Android/Play signing secrets, verify main + Wear AAB identity/version/signature, complete Play privacy/age/attribution metadata, and run Internal Testing.
- Provide desktop code signing/notarization identities and publish the Web origin with correct
application/wasm, cookie, CORS, and CSRF behavior. - Provision a dedicated protected TMDb staging account and persistent non-personal broker session. The automated runner restores library/ratings and deletes lists per run; browser/TV approval and logout/revoke use separate disposable sessions during manual QA.
Worker staging → contract/account smoke → every client CI/package → TestFlight, Play Internal, desktop/web candidates → device QA → Worker production → coordinated store/release publication.
Do not bypass contract checksum, capability, privacy, or signing gates. If Worker smoke fails, roll back the Worker deployment. If a client-only defect appears, stop staged rollout or return to the last store build while keeping the compatible Worker online.