{"status":"owner_proof_required","launchReadyTarget":"0 failed, 0 blockers","expectedPreOwnerVerification":"proof inputs missing until owner/dashboard checks are supplied","blockerCount":4,"summary":"AIRIN's code-level product gates are mostly covered by automated launch suites. Full launch readiness still requires owner-supplied production proof inputs for provider health, one real paid purchase-history smoke, Stripe dashboard branding, and Supabase Auth settings.","baseUrl":"https://airinetwork.com","canonicalCommand":"BASE_URL=https://airinetwork.com npm run launch:gate","ownerProofPreflightCommand":"npm run launch:proof-inputs","fullLaunchReadyCommand":"BASE_URL=https://airinetwork.com \\\nLAUNCH_MACHINE_SECRET=<prod-machine-secret> \\\nPURCHASE_TOKEN=<real-recovery-token> \\\nORDER_ID=<real-order-id> \\\nSTRIPE_DASHBOARD_SMOKE=passed \\\nSUPABASE_AUTH_DASHBOARD_SMOKE=passed \\\nnpm run launch:gate","resolvedProofs":["Stripe Checkout Session permission: Stack Audit checkout creates a context-preserving stripe.com Checkout Session.","Durable rate limiting: production declares REDIS_URL and public API route limits are covered by the KV-capable rateLimitKV invariant.","Code-level product suites: subscription capture, inbound capture, report deliverables, PDF visual snapshots, pricing surfaces, analytics, rate limits, and security hardening are covered by automated launch suites."],"checks":[{"title":"Kit and Resend provider health","proof":"The production machine-health probe must accept the production machine secret and verify Kit + Resend health.","items":["Set LAUNCH_MACHINE_SECRET to the production MACHINE_SECRET.","Run the full launch gate against https://airinetwork.com.","Confirm Resend airinetwork.com domain health and Kit form/tag/sequence health pass."],"gate":"LAUNCH_MACHINE_SECRET=<prod-machine-secret> npm run launch:gate"},{"title":"Paid purchase history smoke","proof":"A real paid or recovered order must produce a PDF and attach to the signed-in user's My Reports history.","items":["Buy or recover a Stack Audit purchase using the production flow.","Record PURCHASE_TOKEN and ORDER_ID for automated proof, or set PAID_PURCHASE_SMOKE=passed after manual proof.","Run BASE_URL=https://airinetwork.com PURCHASE_TOKEN=<token> ORDER_ID=<order-id> npm run launch:purchase-proof for the fast PDF proof.","Sign in, save the recovered purchase to My Reports, download Original PDF, and regenerate Latest PDF.","Confirm the report remains available after refreshing and signing back in."],"gate":"PURCHASE_TOKEN=<token> ORDER_ID=<order-id> npm run launch:gate"},{"title":"Stripe dashboard descriptor and receipt proof","proof":"Stripe dashboard settings must be manually confirmed because descriptor/product/receipt branding live outside git.","items":["Confirm statement descriptor is AIRIN.","Confirm product names, receipt branding, support email, and checkout success URLs match AIRIN launch copy.","Set STRIPE_DASHBOARD_SMOKE=passed only after confirmation."],"gate":"STRIPE_DASHBOARD_SMOKE=passed npm run launch:gate"},{"title":"Supabase Auth dashboard proof","proof":"Supabase Auth settings must be manually confirmed because Site URL, OAuth redirects, and email templates live outside git.","items":["Confirm Site URL, Google OAuth redirect, magic-link redirect/templates, and auth sender/domain.","Verify the deployed auth flow after any dashboard change.","Set SUPABASE_AUTH_DASHBOARD_SMOKE=passed only after confirmation."],"gate":"SUPABASE_AUTH_DASHBOARD_SMOKE=passed npm run launch:gate"}]}