User Handoff Pack

Handoff Action Pack

Ordered user actions, secret-store actions, upload evidence, dashboard fields, and Codex follow-up steps for clearing launch blockers.

Pack Controls

Open pack CSV

Run npm run handoff:pack after saving dashboard fields or uploading evidence. Secrets belong in a deployment secret store or temporary shell, never in this dashboard.

Pack status Handoffs Waiting Ready
User actions 17 Ready
Secret actions 9 Ready
Ready for Codex 0 Ready
Deployability No-Go Live Money Ready
Release candidate Internal Alpha Only Ready

Secret Store Only

PhasePriorityLaneOwnerReadinessRequirementUser ActionEvidence NeededPageField
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has live Stripe secret key beginning with sk_live_ Set STRIPE_SECRET_KEY in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: STRIPE_SECRET_KEY
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has Stripe webhook signing secret beginning with whsec_ Set STRIPE_WEBHOOK_SECRET in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: STRIPE_WEBHOOK_SECRET
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has Stripe monthly Price ID beginning with price_ Set NYRA_STRIPE_PRICE_PRO_MONTHLY in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: NYRA_STRIPE_PRICE_PRO_MONTHLY
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has HTTPS checkout success URL Set NYRA_BILLING_SUCCESS_URL in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: NYRA_BILLING_SUCCESS_URL
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has HTTPS checkout cancel URL Set NYRA_BILLING_CANCEL_URL in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: NYRA_BILLING_CANCEL_URL
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has HTTPS Customer Portal return URL Set NYRA_BILLING_RETURN_URL in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: NYRA_BILLING_RETURN_URL
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has long random license API token Set NYRA_LICENSE_API_TOKEN in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: NYRA_LICENSE_API_TOKEN
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has long random license signing secret Set NYRA_LICENSE_SIGNING_SECRET in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: NYRA_LICENSE_SIGNING_SECRET
2. Price And Offer P0 Payments Licensing User Waiting on secret store Deployment env has long random Android APK download ticket secret Set NYRA_ANDROID_DOWNLOAD_TICKET_SECRET in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: NYRA_ANDROID_DOWNLOAD_TICKET_SECRET

1. Business Identity

PhasePriorityLaneOwnerReadinessRequirementUser ActionEvidence NeededPageField
1. Business Identity P0 Business Legal User Waiting on user Attorney/accountant review approved for paid beta Mark Approved only after attorney/accountant review clears paid beta. save billingRehearsal.attorneyReviewStatus; Upload evidence to legal-review if there is a document, screenshot, receipt, or confirmation that proves it. pages/billing-rehearsal.html billingRehearsal.attorneyReviewStatus

2. Price And Offer

PhasePriorityLaneOwnerReadinessRequirementUser ActionEvidence NeededPageField
2. Price And Offer P0 Payments Licensing User Waiting on secret store Deployment env has long random Android APK download ticket secret Set NYRA_ANDROID_DOWNLOAD_TICKET_SECRET in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: NYRA_ANDROID_DOWNLOAD_TICKET_SECRET

3. Billing And Stripe

PhasePriorityLaneOwnerReadinessRequirementUser ActionEvidence NeededPageField
3. Billing And Stripe P0 Payments Licensing User + Codex Waiting on user Billing rehearsal mode set to live for final money preflight Switch to live only after test-mode rehearsal, legal, support, and Stripe gates pass. save billingRehearsal.mode; Upload evidence to stripe-screenshots if there is a document, screenshot, receipt, or confirmation that proves it. pages/billing-rehearsal.html billingRehearsal.mode
3. Billing And Stripe P0 Payments Licensing User Waiting on user Hosted billing backend HTTPS URL saved Enter the hosted billing backend HTTPS base URL. save billingRehearsal.backendBaseUrl; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it. pages/billing-rehearsal.html billingRehearsal.backendBaseUrl
3. Billing And Stripe P0 Payments Licensing User Waiting on user Stripe webhook HTTPS endpoint saved Enter the Stripe webhook endpoint URL after it is created. save billingRehearsal.webhookEndpointUrl; Upload evidence to stripe-screenshots if there is a document, screenshot, receipt, or confirmation that proves it. pages/billing-rehearsal.html billingRehearsal.webhookEndpointUrl
3. Billing And Stripe P0 Payments Licensing User Waiting on user Customer Portal configured for cancellation, invoices, and payment methods Mark yes after Customer Portal cancellation, invoices, and payment methods are tested. save billingRehearsal.customerPortalConfigured; Upload evidence to stripe-screenshots if there is a document, screenshot, receipt, or confirmation that proves it. pages/billing-rehearsal.html billingRehearsal.customerPortalConfigured
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has live Stripe secret key beginning with sk_live_ Set STRIPE_SECRET_KEY in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: STRIPE_SECRET_KEY
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has Stripe webhook signing secret beginning with whsec_ Set STRIPE_WEBHOOK_SECRET in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: STRIPE_WEBHOOK_SECRET
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has Stripe monthly Price ID beginning with price_ Set NYRA_STRIPE_PRICE_PRO_MONTHLY in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: NYRA_STRIPE_PRICE_PRO_MONTHLY
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has HTTPS checkout success URL Set NYRA_BILLING_SUCCESS_URL in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: NYRA_BILLING_SUCCESS_URL
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has HTTPS checkout cancel URL Set NYRA_BILLING_CANCEL_URL in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: NYRA_BILLING_CANCEL_URL
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has HTTPS Customer Portal return URL Set NYRA_BILLING_RETURN_URL in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: NYRA_BILLING_RETURN_URL
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has long random license API token Set NYRA_LICENSE_API_TOKEN in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: NYRA_LICENSE_API_TOKEN
3. Billing And Stripe P0 Payments Licensing User Waiting on secret store Deployment env has long random license signing secret Set NYRA_LICENSE_SIGNING_SECRET in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard. Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files. pages/billing-rehearsal.html deployment secret store: NYRA_LICENSE_SIGNING_SECRET

4. Support And Domain

PhasePriorityLaneOwnerReadinessRequirementUser ActionEvidence NeededPageField
4. Support And Domain P0 Support Ops User Waiting on user Support inbox roundtrip confirmed Create the support inbox, send a test ticket, reply, and mark confirmed. save billingRehearsal.supportInboxConfirmed; Upload evidence to domain-email if there is a document, screenshot, receipt, or confirmation that proves it. pages/billing-rehearsal.html billingRehearsal.supportInboxConfirmed
4. Support And Domain P0 Cloud Platform User + Codex Waiting on user Hosted mobile bridge Worker URL saved Enter the deployed HTTPS NyrA mobile bridge Worker URL. save mobileBridge.workerUrl; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it. pages/cloud-mobile-bridge.html mobileBridge.workerUrl
4. Support And Domain P0 Cloud Platform User + Codex Waiting on user Mobile bridge token secret configured Set the Worker bridge token secret and mark the mobile bridge secret status. save mobileBridge.secretStatus; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it. pages/cloud-mobile-bridge.html mobileBridge.secretStatus
4. Support And Domain P0 Cloud Platform User + Codex Waiting on user Mobile bridge full swarm provider secrets configured Set OpenAI, Anthropic, Gemini, and Grok provider secrets for the deployed mobile bridge. save mobileBridge.providerSecretStatus; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it. pages/cloud-mobile-bridge.html mobileBridge.providerSecretStatus
4. Support And Domain P0 Cloud Platform User + Codex Waiting on user Mobile support-log R2 bucket saved Create and enter the SUPPORT_LOGS R2 bucket name for mobile diagnostics. save mobileBridge.r2BucketName; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it. pages/cloud-mobile-bridge.html mobileBridge.r2BucketName
4. Support And Domain P0 Cloud Platform User + Codex Waiting on user Android releases R2 bucket saved Create and enter the ANDROID_RELEASES R2 bucket name for hosted APK updates. save mobileBridge.androidReleasesBucketName; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it. pages/cloud-mobile-bridge.html mobileBridge.androidReleasesBucketName
4. Support And Domain P0 Cloud Platform User + Codex Waiting on user Hosted Android APK route configured Upload the current APK to R2 and enter its object key. save mobileBridge.androidApkR2Key; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it. pages/cloud-mobile-bridge.html mobileBridge.androidApkR2Key

5. Cloud Command Center

PhasePriorityLaneOwnerReadinessRequirementUser ActionEvidence NeededPageField
5. Cloud Command Center P0 Cloud Platform User Waiting on user Cloudflare account ready Confirm the Cloudflare account that will host the dashboard and API. save cloudMigration.accountReady; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it. pages/cloud.html cloudMigration.accountReady
5. Cloud Command Center P0 Cloud Platform User Waiting on user D1 database ID saved Paste the Cloudflare D1 database ID. save cloudMigration.d1DatabaseId; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it. pages/cloud.html cloudMigration.d1DatabaseId

6. Release Trust

PhasePriorityLaneOwnerReadinessRequirementUser ActionEvidence NeededPageField
6. Release Trust P0 Release Ops User + Codex Waiting on user Android paid-beta build points at stable bridge URL without bundled shared token Deploy the stable bridge, remove the shared bundled alpha token from paid-beta builds, then rebuild Android from verified bridge evidence. save mobileBridge.bundledBridgeUrl; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it. pages/cloud-mobile-bridge.html mobileBridge.bundledBridgeUrl
6. Release Trust P0 Release Ops User + Codex Waiting on user Paid beta installer is signed or store-trusted Upload or generate signed/store-trusted release evidence after the signing path is chosen. save releasePackage.signingStatus; Upload evidence to code-signing if there is a document, screenshot, receipt, or confirmation that proves it. pages/release-package.html releasePackage.signingStatus

8. Other Launch Handoffs

PhasePriorityLaneOwnerReadinessRequirementUser ActionEvidence NeededPageField
8. Other Launch Handoffs P0 QA User + Codex Waiting on user Physical phone bridge self-test passed Run a phone bridge self-test against the deployed Worker and record the result. save mobileBridge.lastPhoneSelfTest; Upload evidence to phone-evidence if there is a document, screenshot, receipt, or confirmation that proves it. pages/cloud-mobile-bridge.html mobileBridge.lastPhoneSelfTest

Agent Run Log

Each manual intake or scheduled cloud marker becomes a visible build handoff. Use this to confirm the dashboard was read and routed.

No intake runs loaded yet.

Pack JSON

{
  "schemaVersion": 1,
  "generatedAt": "2026-06-17T22:59:02.903Z",
  "status": "HANDOFFS_WAITING",
  "label": "Handoffs Waiting",
  "counts": {
    "totalActions": 26,
    "userActions": 17,
    "secretActions": 9,
    "readyForCodexReview": 0,
    "uploadSlotsWithFiles": 1,
    "phases": 7
  },
  "deployability": {
    "status": "NO_GO_LIVE_MONEY",
    "label": "No-Go Live Money",
    "p0BlockerCount": 26
  },
  "releaseCandidate": {
    "status": "INTERNAL_ALPHA_ONLY",
    "label": "Internal Alpha Only"
  },
  "cloud": {
    "status": "BLOCKED_ON_CLOUD_HANDOFFS",
    "label": "Blocked On Cloud Handoffs",
    "blockedCount": 6
  },
  "brief": {
    "status": "WAITING_ON_HANDOFFS",
    "label": "Waiting On Handoffs"
  },
  "actions": [
    {
      "id": "legal-review",
      "phase": "1. Business Identity",
      "severity": "P0",
      "lane": "Business Legal",
      "owner": "User",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "billingRehearsal.attorneyReviewStatus",
      "uploadSlot": "legal-review",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not approved",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Attorney/accountant review approved for paid beta",
      "userAction": "Mark Approved only after attorney/accountant review clears paid beta.",
      "evidenceNeeded": "save billingRehearsal.attorneyReviewStatus; Upload evidence to legal-review if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Refresh policies, Stripe identity notes, support docs, release publisher metadata, and deployability preflight after the decision/evidence is saved.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "billing-live-mode",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "billingRehearsal.mode",
      "uploadSlot": "stripe-screenshots",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "test",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Billing rehearsal mode set to live for final money preflight",
      "userAction": "Switch to live only after test-mode rehearsal, legal, support, and Stripe gates pass.",
      "evidenceNeeded": "save billingRehearsal.mode; Upload evidence to stripe-screenshots if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "billing-backend-url",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "billingRehearsal.backendBaseUrl",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not set",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Hosted billing backend HTTPS URL saved",
      "userAction": "Enter the hosted billing backend HTTPS base URL.",
      "evidenceNeeded": "save billingRehearsal.backendBaseUrl; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "billing-webhook-url",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "billingRehearsal.webhookEndpointUrl",
      "uploadSlot": "stripe-screenshots",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not set",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Stripe webhook HTTPS endpoint saved",
      "userAction": "Enter the Stripe webhook endpoint URL after it is created.",
      "evidenceNeeded": "save billingRehearsal.webhookEndpointUrl; Upload evidence to stripe-screenshots if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "customer-portal",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "billingRehearsal.customerPortalConfigured",
      "uploadSlot": "stripe-screenshots",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "No",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Customer Portal configured for cancellation, invoices, and payment methods",
      "userAction": "Mark yes after Customer Portal cancellation, invoices, and payment methods are tested.",
      "evidenceNeeded": "save billingRehearsal.customerPortalConfigured; Upload evidence to stripe-screenshots if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "env-stripe_secret_key",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: STRIPE_SECRET_KEY",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "STRIPE_SECRET_KEY=missing",
      "requirement": "Deployment env has live Stripe secret key beginning with sk_live_",
      "userAction": "Set STRIPE_SECRET_KEY in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-stripe_webhook_secret",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: STRIPE_WEBHOOK_SECRET",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "STRIPE_WEBHOOK_SECRET=missing",
      "requirement": "Deployment env has Stripe webhook signing secret beginning with whsec_",
      "userAction": "Set STRIPE_WEBHOOK_SECRET in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-nyra_stripe_price_pro_monthly",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: NYRA_STRIPE_PRICE_PRO_MONTHLY",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "NYRA_STRIPE_PRICE_PRO_MONTHLY=missing",
      "requirement": "Deployment env has Stripe monthly Price ID beginning with price_",
      "userAction": "Set NYRA_STRIPE_PRICE_PRO_MONTHLY in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-nyra_billing_success_url",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: NYRA_BILLING_SUCCESS_URL",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "NYRA_BILLING_SUCCESS_URL=missing",
      "requirement": "Deployment env has HTTPS checkout success URL",
      "userAction": "Set NYRA_BILLING_SUCCESS_URL in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-nyra_billing_cancel_url",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: NYRA_BILLING_CANCEL_URL",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "NYRA_BILLING_CANCEL_URL=missing",
      "requirement": "Deployment env has HTTPS checkout cancel URL",
      "userAction": "Set NYRA_BILLING_CANCEL_URL in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-nyra_billing_return_url",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: NYRA_BILLING_RETURN_URL",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "NYRA_BILLING_RETURN_URL=missing",
      "requirement": "Deployment env has HTTPS Customer Portal return URL",
      "userAction": "Set NYRA_BILLING_RETURN_URL in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-nyra_license_api_token",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: NYRA_LICENSE_API_TOKEN",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "NYRA_LICENSE_API_TOKEN=missing",
      "requirement": "Deployment env has long random license API token",
      "userAction": "Set NYRA_LICENSE_API_TOKEN in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-nyra_license_signing_secret",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: NYRA_LICENSE_SIGNING_SECRET",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "NYRA_LICENSE_SIGNING_SECRET=missing",
      "requirement": "Deployment env has long random license signing secret",
      "userAction": "Set NYRA_LICENSE_SIGNING_SECRET in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-nyra_android_download_ticket_secret",
      "phase": "2. Price And Offer",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: NYRA_ANDROID_DOWNLOAD_TICKET_SECRET",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "NYRA_ANDROID_DOWNLOAD_TICKET_SECRET=missing",
      "requirement": "Deployment env has long random Android APK download ticket secret",
      "userAction": "Set NYRA_ANDROID_DOWNLOAD_TICKET_SECRET in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Refresh the pricing model, Stripe product/price setup plan, marketing copy, checkout copy, and launch-site offer after values are saved.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "support-roundtrip",
      "phase": "4. Support And Domain",
      "severity": "P0",
      "lane": "Support Ops",
      "owner": "User",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "billingRehearsal.supportInboxConfirmed",
      "uploadSlot": "domain-email",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "No",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Support inbox roundtrip confirmed",
      "userAction": "Create the support inbox, send a test ticket, reply, and mark confirmed.",
      "evidenceNeeded": "save billingRehearsal.supportInboxConfirmed; Upload evidence to domain-email if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "cloud-account",
      "phase": "5. Cloud Command Center",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud.html",
      "dashboardField": "cloudMigration.accountReady",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "No",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Cloudflare account ready",
      "userAction": "Confirm the Cloudflare account that will host the dashboard and API.",
      "evidenceNeeded": "save cloudMigration.accountReady; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Wire Cloudflare Pages/Worker/D1/R2 config, run cloud deploy preflight, and prepare sync without storing secrets.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "cloud-d1",
      "phase": "5. Cloud Command Center",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud.html",
      "dashboardField": "cloudMigration.d1DatabaseId",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not set",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "D1 database ID saved",
      "userAction": "Paste the Cloudflare D1 database ID.",
      "evidenceNeeded": "save cloudMigration.d1DatabaseId; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Wire Cloudflare Pages/Worker/D1/R2 config, run cloud deploy preflight, and prepare sync without storing secrets.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-worker-url",
      "phase": "4. Support And Domain",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.workerUrl",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not set",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Hosted mobile bridge Worker URL saved",
      "userAction": "Enter the deployed HTTPS NyrA mobile bridge Worker URL.",
      "evidenceNeeded": "save mobileBridge.workerUrl; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-secret-status",
      "phase": "4. Support And Domain",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.secretStatus",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not set",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Mobile bridge token secret configured",
      "userAction": "Set the Worker bridge token secret and mark the mobile bridge secret status.",
      "evidenceNeeded": "save mobileBridge.secretStatus; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-provider-secrets",
      "phase": "4. Support And Domain",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.providerSecretStatus",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not set",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Mobile bridge full swarm provider secrets configured",
      "userAction": "Set OpenAI, Anthropic, Gemini, and Grok provider secrets for the deployed mobile bridge.",
      "evidenceNeeded": "save mobileBridge.providerSecretStatus; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-support-r2",
      "phase": "4. Support And Domain",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.r2BucketName",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input (suggested default available)",
      "currentValueSummary": "Suggested default: nyra-mobile-support-logs",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Mobile support-log R2 bucket saved",
      "userAction": "Create and enter the SUPPORT_LOGS R2 bucket name for mobile diagnostics.",
      "evidenceNeeded": "save mobileBridge.r2BucketName; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-android-r2",
      "phase": "4. Support And Domain",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.androidReleasesBucketName",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input (suggested default available)",
      "currentValueSummary": "Suggested default: nyra-android-releases",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Android releases R2 bucket saved",
      "userAction": "Create and enter the ANDROID_RELEASES R2 bucket name for hosted APK updates.",
      "evidenceNeeded": "save mobileBridge.androidReleasesBucketName; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-apk-key",
      "phase": "4. Support And Domain",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.androidApkR2Key",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input (suggested default available)",
      "currentValueSummary": "Suggested default: alpha/0.1.0-alpha.72/NyrA.apk",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Hosted Android APK route configured",
      "userAction": "Upload the current APK to R2 and enter its object key.",
      "evidenceNeeded": "save mobileBridge.androidApkR2Key; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-bundled-url",
      "phase": "6. Release Trust",
      "severity": "P0",
      "lane": "Release Ops",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.bundledBridgeUrl",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not set",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Android paid-beta build points at stable bridge URL without bundled shared token",
      "userAction": "Deploy the stable bridge, remove the shared bundled alpha token from paid-beta builds, then rebuild Android from verified bridge evidence.",
      "evidenceNeeded": "save mobileBridge.bundledBridgeUrl; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Enable the selected signed/store-trusted path, regenerate release evidence, and keep paid beta blocked until installer trust is proven.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-phone-self-test",
      "phase": "8. Other Launch Handoffs",
      "severity": "P0",
      "lane": "QA",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.lastPhoneSelfTest",
      "uploadSlot": "phone-evidence",
      "currentValueStatus": "Saved but failed review",
      "currentValueSummary": "Failed evidence review 2026-06-16T05:27:51.911Z: surface=phone; passed=no; 7 pass / 4 warn / 0 fail; supportLogId=2026-06-16T05-27-52-391Z-dbe5c0c4-27b2-481b...",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Physical phone bridge self-test passed",
      "userAction": "Run a phone bridge self-test against the deployed Worker and record the result.",
      "evidenceNeeded": "save mobileBridge.lastPhoneSelfTest; Upload evidence to phone-evidence if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Route this blocker through the Today Command Brief and update the matching team lane after evidence is saved.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "signed-release",
      "phase": "6. Release Trust",
      "severity": "P0",
      "lane": "Release Ops",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/release-package.html",
      "dashboardField": "releasePackage.signingStatus",
      "uploadSlot": "code-signing",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Unsigned internal alpha evidence only",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Paid beta installer is signed or store-trusted",
      "userAction": "Upload or generate signed/store-trusted release evidence after the signing path is chosen.",
      "evidenceNeeded": "save releasePackage.signingStatus; Upload evidence to code-signing if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Enable the selected signed/store-trusted path, regenerate release evidence, and keep paid beta blocked until installer trust is proven.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    }
  ],
  "userActions": [
    {
      "id": "legal-review",
      "phase": "1. Business Identity",
      "severity": "P0",
      "lane": "Business Legal",
      "owner": "User",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "billingRehearsal.attorneyReviewStatus",
      "uploadSlot": "legal-review",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not approved",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Attorney/accountant review approved for paid beta",
      "userAction": "Mark Approved only after attorney/accountant review clears paid beta.",
      "evidenceNeeded": "save billingRehearsal.attorneyReviewStatus; Upload evidence to legal-review if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Refresh policies, Stripe identity notes, support docs, release publisher metadata, and deployability preflight after the decision/evidence is saved.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "billing-live-mode",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "billingRehearsal.mode",
      "uploadSlot": "stripe-screenshots",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "test",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Billing rehearsal mode set to live for final money preflight",
      "userAction": "Switch to live only after test-mode rehearsal, legal, support, and Stripe gates pass.",
      "evidenceNeeded": "save billingRehearsal.mode; Upload evidence to stripe-screenshots if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "billing-backend-url",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "billingRehearsal.backendBaseUrl",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not set",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Hosted billing backend HTTPS URL saved",
      "userAction": "Enter the hosted billing backend HTTPS base URL.",
      "evidenceNeeded": "save billingRehearsal.backendBaseUrl; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "billing-webhook-url",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "billingRehearsal.webhookEndpointUrl",
      "uploadSlot": "stripe-screenshots",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not set",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Stripe webhook HTTPS endpoint saved",
      "userAction": "Enter the Stripe webhook endpoint URL after it is created.",
      "evidenceNeeded": "save billingRehearsal.webhookEndpointUrl; Upload evidence to stripe-screenshots if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "customer-portal",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "billingRehearsal.customerPortalConfigured",
      "uploadSlot": "stripe-screenshots",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "No",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Customer Portal configured for cancellation, invoices, and payment methods",
      "userAction": "Mark yes after Customer Portal cancellation, invoices, and payment methods are tested.",
      "evidenceNeeded": "save billingRehearsal.customerPortalConfigured; Upload evidence to stripe-screenshots if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "support-roundtrip",
      "phase": "4. Support And Domain",
      "severity": "P0",
      "lane": "Support Ops",
      "owner": "User",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "billingRehearsal.supportInboxConfirmed",
      "uploadSlot": "domain-email",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "No",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Support inbox roundtrip confirmed",
      "userAction": "Create the support inbox, send a test ticket, reply, and mark confirmed.",
      "evidenceNeeded": "save billingRehearsal.supportInboxConfirmed; Upload evidence to domain-email if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "cloud-account",
      "phase": "5. Cloud Command Center",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud.html",
      "dashboardField": "cloudMigration.accountReady",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "No",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Cloudflare account ready",
      "userAction": "Confirm the Cloudflare account that will host the dashboard and API.",
      "evidenceNeeded": "save cloudMigration.accountReady; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Wire Cloudflare Pages/Worker/D1/R2 config, run cloud deploy preflight, and prepare sync without storing secrets.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "cloud-d1",
      "phase": "5. Cloud Command Center",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud.html",
      "dashboardField": "cloudMigration.d1DatabaseId",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not set",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "D1 database ID saved",
      "userAction": "Paste the Cloudflare D1 database ID.",
      "evidenceNeeded": "save cloudMigration.d1DatabaseId; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Wire Cloudflare Pages/Worker/D1/R2 config, run cloud deploy preflight, and prepare sync without storing secrets.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-worker-url",
      "phase": "4. Support And Domain",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.workerUrl",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not set",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Hosted mobile bridge Worker URL saved",
      "userAction": "Enter the deployed HTTPS NyrA mobile bridge Worker URL.",
      "evidenceNeeded": "save mobileBridge.workerUrl; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-secret-status",
      "phase": "4. Support And Domain",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.secretStatus",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not set",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Mobile bridge token secret configured",
      "userAction": "Set the Worker bridge token secret and mark the mobile bridge secret status.",
      "evidenceNeeded": "save mobileBridge.secretStatus; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-provider-secrets",
      "phase": "4. Support And Domain",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.providerSecretStatus",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not set",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Mobile bridge full swarm provider secrets configured",
      "userAction": "Set OpenAI, Anthropic, Gemini, and Grok provider secrets for the deployed mobile bridge.",
      "evidenceNeeded": "save mobileBridge.providerSecretStatus; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-support-r2",
      "phase": "4. Support And Domain",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.r2BucketName",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input (suggested default available)",
      "currentValueSummary": "Suggested default: nyra-mobile-support-logs",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Mobile support-log R2 bucket saved",
      "userAction": "Create and enter the SUPPORT_LOGS R2 bucket name for mobile diagnostics.",
      "evidenceNeeded": "save mobileBridge.r2BucketName; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-android-r2",
      "phase": "4. Support And Domain",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.androidReleasesBucketName",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input (suggested default available)",
      "currentValueSummary": "Suggested default: nyra-android-releases",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Android releases R2 bucket saved",
      "userAction": "Create and enter the ANDROID_RELEASES R2 bucket name for hosted APK updates.",
      "evidenceNeeded": "save mobileBridge.androidReleasesBucketName; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-apk-key",
      "phase": "4. Support And Domain",
      "severity": "P0",
      "lane": "Cloud Platform",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.androidApkR2Key",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input (suggested default available)",
      "currentValueSummary": "Suggested default: alpha/0.1.0-alpha.72/NyrA.apk",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Hosted Android APK route configured",
      "userAction": "Upload the current APK to R2 and enter its object key.",
      "evidenceNeeded": "save mobileBridge.androidApkR2Key; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-bundled-url",
      "phase": "6. Release Trust",
      "severity": "P0",
      "lane": "Release Ops",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.bundledBridgeUrl",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Not set",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Android paid-beta build points at stable bridge URL without bundled shared token",
      "userAction": "Deploy the stable bridge, remove the shared bundled alpha token from paid-beta builds, then rebuild Android from verified bridge evidence.",
      "evidenceNeeded": "save mobileBridge.bundledBridgeUrl; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Enable the selected signed/store-trusted path, regenerate release evidence, and keep paid beta blocked until installer trust is proven.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "mobile-bridge-phone-self-test",
      "phase": "8. Other Launch Handoffs",
      "severity": "P0",
      "lane": "QA",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/cloud-mobile-bridge.html",
      "dashboardField": "mobileBridge.lastPhoneSelfTest",
      "uploadSlot": "phone-evidence",
      "currentValueStatus": "Saved but failed review",
      "currentValueSummary": "Failed evidence review 2026-06-16T05:27:51.911Z: surface=phone; passed=no; 7 pass / 4 warn / 0 fail; supportLogId=2026-06-16T05-27-52-391Z-dbe5c0c4-27b2-481b...",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Physical phone bridge self-test passed",
      "userAction": "Run a phone bridge self-test against the deployed Worker and record the result.",
      "evidenceNeeded": "save mobileBridge.lastPhoneSelfTest; Upload evidence to phone-evidence if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Route this blocker through the Today Command Brief and update the matching team lane after evidence is saved.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    },
    {
      "id": "signed-release",
      "phase": "6. Release Trust",
      "severity": "P0",
      "lane": "Release Ops",
      "owner": "User + Codex",
      "readiness": "Waiting on user",
      "dashboardPage": "pages/release-package.html",
      "dashboardField": "releasePackage.signingStatus",
      "uploadSlot": "code-signing",
      "currentValueStatus": "Needs input",
      "currentValueSummary": "Unsigned internal alpha evidence only",
      "filesInSlot": "0",
      "secretStatus": "",
      "requirement": "Paid beta installer is signed or store-trusted",
      "userAction": "Upload or generate signed/store-trusted release evidence after the signing path is chosen.",
      "evidenceNeeded": "save releasePackage.signingStatus; Upload evidence to code-signing if there is a document, screenshot, receipt, or confirmation that proves it.",
      "codexAfter": "Enable the selected signed/store-trusted path, regenerate release evidence, and keep paid beta blocked until installer trust is proven.",
      "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
    }
  ],
  "secretActions": [
    {
      "id": "env-stripe_secret_key",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: STRIPE_SECRET_KEY",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "STRIPE_SECRET_KEY=missing",
      "requirement": "Deployment env has live Stripe secret key beginning with sk_live_",
      "userAction": "Set STRIPE_SECRET_KEY in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-stripe_webhook_secret",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: STRIPE_WEBHOOK_SECRET",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "STRIPE_WEBHOOK_SECRET=missing",
      "requirement": "Deployment env has Stripe webhook signing secret beginning with whsec_",
      "userAction": "Set STRIPE_WEBHOOK_SECRET in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-nyra_stripe_price_pro_monthly",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: NYRA_STRIPE_PRICE_PRO_MONTHLY",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "NYRA_STRIPE_PRICE_PRO_MONTHLY=missing",
      "requirement": "Deployment env has Stripe monthly Price ID beginning with price_",
      "userAction": "Set NYRA_STRIPE_PRICE_PRO_MONTHLY in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-nyra_billing_success_url",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: NYRA_BILLING_SUCCESS_URL",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "NYRA_BILLING_SUCCESS_URL=missing",
      "requirement": "Deployment env has HTTPS checkout success URL",
      "userAction": "Set NYRA_BILLING_SUCCESS_URL in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-nyra_billing_cancel_url",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: NYRA_BILLING_CANCEL_URL",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "NYRA_BILLING_CANCEL_URL=missing",
      "requirement": "Deployment env has HTTPS checkout cancel URL",
      "userAction": "Set NYRA_BILLING_CANCEL_URL in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-nyra_billing_return_url",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: NYRA_BILLING_RETURN_URL",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "NYRA_BILLING_RETURN_URL=missing",
      "requirement": "Deployment env has HTTPS Customer Portal return URL",
      "userAction": "Set NYRA_BILLING_RETURN_URL in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-nyra_license_api_token",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: NYRA_LICENSE_API_TOKEN",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "NYRA_LICENSE_API_TOKEN=missing",
      "requirement": "Deployment env has long random license API token",
      "userAction": "Set NYRA_LICENSE_API_TOKEN in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-nyra_license_signing_secret",
      "phase": "3. Billing And Stripe",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: NYRA_LICENSE_SIGNING_SECRET",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "NYRA_LICENSE_SIGNING_SECRET=missing",
      "requirement": "Deployment env has long random license signing secret",
      "userAction": "Set NYRA_LICENSE_SIGNING_SECRET in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    },
    {
      "id": "env-nyra_android_download_ticket_secret",
      "phase": "2. Price And Offer",
      "severity": "P0",
      "lane": "Payments Licensing",
      "owner": "User",
      "readiness": "Waiting on secret store",
      "dashboardPage": "pages/billing-rehearsal.html",
      "dashboardField": "deployment secret store: NYRA_ANDROID_DOWNLOAD_TICKET_SECRET",
      "uploadSlot": "cloud-handoff",
      "currentValueStatus": "Secret missing",
      "currentValueSummary": "Missing from environment or secret store",
      "filesInSlot": "0",
      "secretStatus": "NYRA_ANDROID_DOWNLOAD_TICKET_SECRET=missing",
      "requirement": "Deployment env has long random Android APK download ticket secret",
      "userAction": "Set NYRA_ANDROID_DOWNLOAD_TICKET_SECRET in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
      "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
      "codexAfter": "Refresh the pricing model, Stripe product/price setup plan, marketing copy, checkout copy, and launch-site offer after values are saved.",
      "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
    }
  ],
  "phases": [
    {
      "phase": "1. Business Identity",
      "actions": [
        {
          "id": "legal-review",
          "phase": "1. Business Identity",
          "severity": "P0",
          "lane": "Business Legal",
          "owner": "User",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/billing-rehearsal.html",
          "dashboardField": "billingRehearsal.attorneyReviewStatus",
          "uploadSlot": "legal-review",
          "currentValueStatus": "Needs input",
          "currentValueSummary": "Not approved",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Attorney/accountant review approved for paid beta",
          "userAction": "Mark Approved only after attorney/accountant review clears paid beta.",
          "evidenceNeeded": "save billingRehearsal.attorneyReviewStatus; Upload evidence to legal-review if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Refresh policies, Stripe identity notes, support docs, release publisher metadata, and deployability preflight after the decision/evidence is saved.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        }
      ]
    },
    {
      "phase": "2. Price And Offer",
      "actions": [
        {
          "id": "env-nyra_android_download_ticket_secret",
          "phase": "2. Price And Offer",
          "severity": "P0",
          "lane": "Payments Licensing",
          "owner": "User",
          "readiness": "Waiting on secret store",
          "dashboardPage": "pages/billing-rehearsal.html",
          "dashboardField": "deployment secret store: NYRA_ANDROID_DOWNLOAD_TICKET_SECRET",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Secret missing",
          "currentValueSummary": "Missing from environment or secret store",
          "filesInSlot": "0",
          "secretStatus": "NYRA_ANDROID_DOWNLOAD_TICKET_SECRET=missing",
          "requirement": "Deployment env has long random Android APK download ticket secret",
          "userAction": "Set NYRA_ANDROID_DOWNLOAD_TICKET_SECRET in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
          "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
          "codexAfter": "Refresh the pricing model, Stripe product/price setup plan, marketing copy, checkout copy, and launch-site offer after values are saved.",
          "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
        }
      ]
    },
    {
      "phase": "3. Billing And Stripe",
      "actions": [
        {
          "id": "billing-live-mode",
          "phase": "3. Billing And Stripe",
          "severity": "P0",
          "lane": "Payments Licensing",
          "owner": "User + Codex",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/billing-rehearsal.html",
          "dashboardField": "billingRehearsal.mode",
          "uploadSlot": "stripe-screenshots",
          "currentValueStatus": "Needs input",
          "currentValueSummary": "test",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Billing rehearsal mode set to live for final money preflight",
          "userAction": "Switch to live only after test-mode rehearsal, legal, support, and Stripe gates pass.",
          "evidenceNeeded": "save billingRehearsal.mode; Upload evidence to stripe-screenshots if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        },
        {
          "id": "billing-backend-url",
          "phase": "3. Billing And Stripe",
          "severity": "P0",
          "lane": "Payments Licensing",
          "owner": "User",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/billing-rehearsal.html",
          "dashboardField": "billingRehearsal.backendBaseUrl",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Needs input",
          "currentValueSummary": "Not set",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Hosted billing backend HTTPS URL saved",
          "userAction": "Enter the hosted billing backend HTTPS base URL.",
          "evidenceNeeded": "save billingRehearsal.backendBaseUrl; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        },
        {
          "id": "billing-webhook-url",
          "phase": "3. Billing And Stripe",
          "severity": "P0",
          "lane": "Payments Licensing",
          "owner": "User",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/billing-rehearsal.html",
          "dashboardField": "billingRehearsal.webhookEndpointUrl",
          "uploadSlot": "stripe-screenshots",
          "currentValueStatus": "Needs input",
          "currentValueSummary": "Not set",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Stripe webhook HTTPS endpoint saved",
          "userAction": "Enter the Stripe webhook endpoint URL after it is created.",
          "evidenceNeeded": "save billingRehearsal.webhookEndpointUrl; Upload evidence to stripe-screenshots if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        },
        {
          "id": "customer-portal",
          "phase": "3. Billing And Stripe",
          "severity": "P0",
          "lane": "Payments Licensing",
          "owner": "User",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/billing-rehearsal.html",
          "dashboardField": "billingRehearsal.customerPortalConfigured",
          "uploadSlot": "stripe-screenshots",
          "currentValueStatus": "Needs input",
          "currentValueSummary": "No",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Customer Portal configured for cancellation, invoices, and payment methods",
          "userAction": "Mark yes after Customer Portal cancellation, invoices, and payment methods are tested.",
          "evidenceNeeded": "save billingRehearsal.customerPortalConfigured; Upload evidence to stripe-screenshots if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        },
        {
          "id": "env-stripe_secret_key",
          "phase": "3. Billing And Stripe",
          "severity": "P0",
          "lane": "Payments Licensing",
          "owner": "User",
          "readiness": "Waiting on secret store",
          "dashboardPage": "pages/billing-rehearsal.html",
          "dashboardField": "deployment secret store: STRIPE_SECRET_KEY",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Secret missing",
          "currentValueSummary": "Missing from environment or secret store",
          "filesInSlot": "0",
          "secretStatus": "STRIPE_SECRET_KEY=missing",
          "requirement": "Deployment env has live Stripe secret key beginning with sk_live_",
          "userAction": "Set STRIPE_SECRET_KEY in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
          "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
          "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
          "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
        },
        {
          "id": "env-stripe_webhook_secret",
          "phase": "3. Billing And Stripe",
          "severity": "P0",
          "lane": "Payments Licensing",
          "owner": "User",
          "readiness": "Waiting on secret store",
          "dashboardPage": "pages/billing-rehearsal.html",
          "dashboardField": "deployment secret store: STRIPE_WEBHOOK_SECRET",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Secret missing",
          "currentValueSummary": "Missing from environment or secret store",
          "filesInSlot": "0",
          "secretStatus": "STRIPE_WEBHOOK_SECRET=missing",
          "requirement": "Deployment env has Stripe webhook signing secret beginning with whsec_",
          "userAction": "Set STRIPE_WEBHOOK_SECRET in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
          "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
          "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
          "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
        },
        {
          "id": "env-nyra_stripe_price_pro_monthly",
          "phase": "3. Billing And Stripe",
          "severity": "P0",
          "lane": "Payments Licensing",
          "owner": "User",
          "readiness": "Waiting on secret store",
          "dashboardPage": "pages/billing-rehearsal.html",
          "dashboardField": "deployment secret store: NYRA_STRIPE_PRICE_PRO_MONTHLY",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Secret missing",
          "currentValueSummary": "Missing from environment or secret store",
          "filesInSlot": "0",
          "secretStatus": "NYRA_STRIPE_PRICE_PRO_MONTHLY=missing",
          "requirement": "Deployment env has Stripe monthly Price ID beginning with price_",
          "userAction": "Set NYRA_STRIPE_PRICE_PRO_MONTHLY in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
          "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
          "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
          "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
        },
        {
          "id": "env-nyra_billing_success_url",
          "phase": "3. Billing And Stripe",
          "severity": "P0",
          "lane": "Payments Licensing",
          "owner": "User",
          "readiness": "Waiting on secret store",
          "dashboardPage": "pages/billing-rehearsal.html",
          "dashboardField": "deployment secret store: NYRA_BILLING_SUCCESS_URL",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Secret missing",
          "currentValueSummary": "Missing from environment or secret store",
          "filesInSlot": "0",
          "secretStatus": "NYRA_BILLING_SUCCESS_URL=missing",
          "requirement": "Deployment env has HTTPS checkout success URL",
          "userAction": "Set NYRA_BILLING_SUCCESS_URL in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
          "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
          "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
          "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
        },
        {
          "id": "env-nyra_billing_cancel_url",
          "phase": "3. Billing And Stripe",
          "severity": "P0",
          "lane": "Payments Licensing",
          "owner": "User",
          "readiness": "Waiting on secret store",
          "dashboardPage": "pages/billing-rehearsal.html",
          "dashboardField": "deployment secret store: NYRA_BILLING_CANCEL_URL",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Secret missing",
          "currentValueSummary": "Missing from environment or secret store",
          "filesInSlot": "0",
          "secretStatus": "NYRA_BILLING_CANCEL_URL=missing",
          "requirement": "Deployment env has HTTPS checkout cancel URL",
          "userAction": "Set NYRA_BILLING_CANCEL_URL in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
          "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
          "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
          "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
        },
        {
          "id": "env-nyra_billing_return_url",
          "phase": "3. Billing And Stripe",
          "severity": "P0",
          "lane": "Payments Licensing",
          "owner": "User",
          "readiness": "Waiting on secret store",
          "dashboardPage": "pages/billing-rehearsal.html",
          "dashboardField": "deployment secret store: NYRA_BILLING_RETURN_URL",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Secret missing",
          "currentValueSummary": "Missing from environment or secret store",
          "filesInSlot": "0",
          "secretStatus": "NYRA_BILLING_RETURN_URL=missing",
          "requirement": "Deployment env has HTTPS Customer Portal return URL",
          "userAction": "Set NYRA_BILLING_RETURN_URL in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
          "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
          "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
          "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
        },
        {
          "id": "env-nyra_license_api_token",
          "phase": "3. Billing And Stripe",
          "severity": "P0",
          "lane": "Payments Licensing",
          "owner": "User",
          "readiness": "Waiting on secret store",
          "dashboardPage": "pages/billing-rehearsal.html",
          "dashboardField": "deployment secret store: NYRA_LICENSE_API_TOKEN",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Secret missing",
          "currentValueSummary": "Missing from environment or secret store",
          "filesInSlot": "0",
          "secretStatus": "NYRA_LICENSE_API_TOKEN=missing",
          "requirement": "Deployment env has long random license API token",
          "userAction": "Set NYRA_LICENSE_API_TOKEN in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
          "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
          "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
          "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
        },
        {
          "id": "env-nyra_license_signing_secret",
          "phase": "3. Billing And Stripe",
          "severity": "P0",
          "lane": "Payments Licensing",
          "owner": "User",
          "readiness": "Waiting on secret store",
          "dashboardPage": "pages/billing-rehearsal.html",
          "dashboardField": "deployment secret store: NYRA_LICENSE_SIGNING_SECRET",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Secret missing",
          "currentValueSummary": "Missing from environment or secret store",
          "filesInSlot": "0",
          "secretStatus": "NYRA_LICENSE_SIGNING_SECRET=missing",
          "requirement": "Deployment env has long random license signing secret",
          "userAction": "Set NYRA_LICENSE_SIGNING_SECRET in the deployment secret store or a temporary shell. Do not paste secrets into the dashboard.",
          "evidenceNeeded": "Set this value in the deployment secret store or a temporary shell only; do not paste the raw value into dashboard files.",
          "codexAfter": "Run billing and cloud billing checks, rehearse checkout/portal/webhooks in test mode, and keep live checkout disabled until all P0 gates close.",
          "noGoRule": "Never paste raw secrets into the dashboard, CSV files, Markdown files, screenshots, or chat."
        }
      ]
    },
    {
      "phase": "4. Support And Domain",
      "actions": [
        {
          "id": "support-roundtrip",
          "phase": "4. Support And Domain",
          "severity": "P0",
          "lane": "Support Ops",
          "owner": "User",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/billing-rehearsal.html",
          "dashboardField": "billingRehearsal.supportInboxConfirmed",
          "uploadSlot": "domain-email",
          "currentValueStatus": "Needs input",
          "currentValueSummary": "No",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Support inbox roundtrip confirmed",
          "userAction": "Create the support inbox, send a test ticket, reply, and mark confirmed.",
          "evidenceNeeded": "save billingRehearsal.supportInboxConfirmed; Upload evidence to domain-email if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        },
        {
          "id": "mobile-bridge-worker-url",
          "phase": "4. Support And Domain",
          "severity": "P0",
          "lane": "Cloud Platform",
          "owner": "User + Codex",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/cloud-mobile-bridge.html",
          "dashboardField": "mobileBridge.workerUrl",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Needs input",
          "currentValueSummary": "Not set",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Hosted mobile bridge Worker URL saved",
          "userAction": "Enter the deployed HTTPS NyrA mobile bridge Worker URL.",
          "evidenceNeeded": "save mobileBridge.workerUrl; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        },
        {
          "id": "mobile-bridge-secret-status",
          "phase": "4. Support And Domain",
          "severity": "P0",
          "lane": "Cloud Platform",
          "owner": "User + Codex",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/cloud-mobile-bridge.html",
          "dashboardField": "mobileBridge.secretStatus",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Needs input",
          "currentValueSummary": "Not set",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Mobile bridge token secret configured",
          "userAction": "Set the Worker bridge token secret and mark the mobile bridge secret status.",
          "evidenceNeeded": "save mobileBridge.secretStatus; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        },
        {
          "id": "mobile-bridge-provider-secrets",
          "phase": "4. Support And Domain",
          "severity": "P0",
          "lane": "Cloud Platform",
          "owner": "User + Codex",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/cloud-mobile-bridge.html",
          "dashboardField": "mobileBridge.providerSecretStatus",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Needs input",
          "currentValueSummary": "Not set",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Mobile bridge full swarm provider secrets configured",
          "userAction": "Set OpenAI, Anthropic, Gemini, and Grok provider secrets for the deployed mobile bridge.",
          "evidenceNeeded": "save mobileBridge.providerSecretStatus; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        },
        {
          "id": "mobile-bridge-support-r2",
          "phase": "4. Support And Domain",
          "severity": "P0",
          "lane": "Cloud Platform",
          "owner": "User + Codex",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/cloud-mobile-bridge.html",
          "dashboardField": "mobileBridge.r2BucketName",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Needs input (suggested default available)",
          "currentValueSummary": "Suggested default: nyra-mobile-support-logs",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Mobile support-log R2 bucket saved",
          "userAction": "Create and enter the SUPPORT_LOGS R2 bucket name for mobile diagnostics.",
          "evidenceNeeded": "save mobileBridge.r2BucketName; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        },
        {
          "id": "mobile-bridge-android-r2",
          "phase": "4. Support And Domain",
          "severity": "P0",
          "lane": "Cloud Platform",
          "owner": "User + Codex",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/cloud-mobile-bridge.html",
          "dashboardField": "mobileBridge.androidReleasesBucketName",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Needs input (suggested default available)",
          "currentValueSummary": "Suggested default: nyra-android-releases",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Android releases R2 bucket saved",
          "userAction": "Create and enter the ANDROID_RELEASES R2 bucket name for hosted APK updates.",
          "evidenceNeeded": "save mobileBridge.androidReleasesBucketName; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        },
        {
          "id": "mobile-bridge-apk-key",
          "phase": "4. Support And Domain",
          "severity": "P0",
          "lane": "Cloud Platform",
          "owner": "User + Codex",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/cloud-mobile-bridge.html",
          "dashboardField": "mobileBridge.androidApkR2Key",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Needs input (suggested default available)",
          "currentValueSummary": "Suggested default: alpha/0.1.0-alpha.72/NyrA.apk",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Hosted Android APK route configured",
          "userAction": "Upload the current APK to R2 and enter its object key.",
          "evidenceNeeded": "save mobileBridge.androidApkR2Key; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Update support macros, policy URLs, launch site links, billing return URLs, and marketing materials after the inbox/domain are confirmed.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        }
      ]
    },
    {
      "phase": "5. Cloud Command Center",
      "actions": [
        {
          "id": "cloud-account",
          "phase": "5. Cloud Command Center",
          "severity": "P0",
          "lane": "Cloud Platform",
          "owner": "User",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/cloud.html",
          "dashboardField": "cloudMigration.accountReady",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Needs input",
          "currentValueSummary": "No",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Cloudflare account ready",
          "userAction": "Confirm the Cloudflare account that will host the dashboard and API.",
          "evidenceNeeded": "save cloudMigration.accountReady; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Wire Cloudflare Pages/Worker/D1/R2 config, run cloud deploy preflight, and prepare sync without storing secrets.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        },
        {
          "id": "cloud-d1",
          "phase": "5. Cloud Command Center",
          "severity": "P0",
          "lane": "Cloud Platform",
          "owner": "User",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/cloud.html",
          "dashboardField": "cloudMigration.d1DatabaseId",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Needs input",
          "currentValueSummary": "Not set",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "D1 database ID saved",
          "userAction": "Paste the Cloudflare D1 database ID.",
          "evidenceNeeded": "save cloudMigration.d1DatabaseId; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Wire Cloudflare Pages/Worker/D1/R2 config, run cloud deploy preflight, and prepare sync without storing secrets.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        }
      ]
    },
    {
      "phase": "6. Release Trust",
      "actions": [
        {
          "id": "mobile-bridge-bundled-url",
          "phase": "6. Release Trust",
          "severity": "P0",
          "lane": "Release Ops",
          "owner": "User + Codex",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/cloud-mobile-bridge.html",
          "dashboardField": "mobileBridge.bundledBridgeUrl",
          "uploadSlot": "cloud-handoff",
          "currentValueStatus": "Needs input",
          "currentValueSummary": "Not set",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Android paid-beta build points at stable bridge URL without bundled shared token",
          "userAction": "Deploy the stable bridge, remove the shared bundled alpha token from paid-beta builds, then rebuild Android from verified bridge evidence.",
          "evidenceNeeded": "save mobileBridge.bundledBridgeUrl; Upload evidence to cloud-handoff if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Enable the selected signed/store-trusted path, regenerate release evidence, and keep paid beta blocked until installer trust is proven.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        },
        {
          "id": "signed-release",
          "phase": "6. Release Trust",
          "severity": "P0",
          "lane": "Release Ops",
          "owner": "User + Codex",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/release-package.html",
          "dashboardField": "releasePackage.signingStatus",
          "uploadSlot": "code-signing",
          "currentValueStatus": "Needs input",
          "currentValueSummary": "Unsigned internal alpha evidence only",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Paid beta installer is signed or store-trusted",
          "userAction": "Upload or generate signed/store-trusted release evidence after the signing path is chosen.",
          "evidenceNeeded": "save releasePackage.signingStatus; Upload evidence to code-signing if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Enable the selected signed/store-trusted path, regenerate release evidence, and keep paid beta blocked until installer trust is proven.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        }
      ]
    },
    {
      "phase": "8. Other Launch Handoffs",
      "actions": [
        {
          "id": "mobile-bridge-phone-self-test",
          "phase": "8. Other Launch Handoffs",
          "severity": "P0",
          "lane": "QA",
          "owner": "User + Codex",
          "readiness": "Waiting on user",
          "dashboardPage": "pages/cloud-mobile-bridge.html",
          "dashboardField": "mobileBridge.lastPhoneSelfTest",
          "uploadSlot": "phone-evidence",
          "currentValueStatus": "Saved but failed review",
          "currentValueSummary": "Failed evidence review 2026-06-16T05:27:51.911Z: surface=phone; passed=no; 7 pass / 4 warn / 0 fail; supportLogId=2026-06-16T05-27-52-391Z-dbe5c0c4-27b2-481b...",
          "filesInSlot": "0",
          "secretStatus": "",
          "requirement": "Physical phone bridge self-test passed",
          "userAction": "Run a phone bridge self-test against the deployed Worker and record the result.",
          "evidenceNeeded": "save mobileBridge.lastPhoneSelfTest; Upload evidence to phone-evidence if there is a document, screenshot, receipt, or confirmation that proves it.",
          "codexAfter": "Route this blocker through the Today Command Brief and update the matching team lane after evidence is saved.",
          "noGoRule": "Do not mark this cleared until the dashboard field or upload evidence proves it."
        }
      ]
    }
  ],
  "outputs": {
    "json": "docs/launch_command_center/handoff-action-pack.json",
    "csv": "docs/launch_command_center/handoff-action-pack.csv",
    "report": "docs/launch_command_center/HANDOFF_ACTION_PACK.md",
    "dashboard": "docs/launch_command_center/pages/handoff-pack.html"
  }
}