{
  "schemaVersion": 1,
  "generatedAt": "2026-06-17T22:59:04.190Z",
  "status": "SUPPORT_OPS_WAITING_ON_HANDOFFS",
  "label": "Support Ops Waiting On Handoffs",
  "supportEmail": "nyrasupport@gmail.com",
  "supportInboxConfirmed": "No",
  "dashboardFields": [
    "decisions.supportEmail",
    "decisions.domain",
    "billingRehearsal.supportInboxConfirmed",
    "billingRehearsal.customerPortalConfigured",
    "billingRehearsal.attorneyReviewStatus",
    "billingRehearsal.backendBaseUrl",
    "billingRehearsal.webhookEndpointUrl",
    "visualProduction.finalScreenshotsApproved"
  ],
  "uploadSlots": [
    "support-roundtrip",
    "domain-email",
    "legal-review",
    "stripe-screenshots",
    "product-screenshots",
    "qa-evidence"
  ],
  "actions": [
    {
      "id": "support-email-saved",
      "source": "support-ops-pack",
      "phase": "1. Public Support Identity",
      "priority": "P0",
      "owner": "User",
      "status": "Ready",
      "label": "Support email saved",
      "detail": "nyrasupport@gmail.com",
      "action": "Save the support address customers will see in the app, Stripe receipts, public policies, and launch site.",
      "evidenceNeeded": "Save decisions.supportEmail in the dashboard and upload sanitized support evidence to domain-email.",
      "dashboardPage": "pages/support.html",
      "dashboardField": "decisions.supportEmail",
      "uploadSlot": "domain-email",
      "verificationCommand": "npm run support:ops-pack && npm run test:support-ops-pack",
      "noGoRule": "No paid checkout without a public support contact."
    },
    {
      "id": "support-inbox-roundtrip",
      "source": "support-ops-pack",
      "phase": "1. Public Support Identity",
      "priority": "P0",
      "owner": "User",
      "status": "Waiting on handoff",
      "label": "Support inbox ticket roundtrip confirmed",
      "detail": "supportInboxConfirmed=No",
      "action": "Send a test customer email to the support inbox, reply from the inbox, and upload sanitized proof of the roundtrip.",
      "evidenceNeeded": "Save billingRehearsal.supportInboxConfirmed in the dashboard and upload sanitized support evidence to support-roundtrip.",
      "dashboardPage": "pages/support.html",
      "dashboardField": "billingRehearsal.supportInboxConfirmed",
      "uploadSlot": "support-roundtrip",
      "verificationCommand": "npm run support:ops-pack && npm run test:support-ops-pack",
      "noGoRule": "No paid beta until a real support inbox can receive and answer a customer ticket."
    },
    {
      "id": "public-domain-support-path",
      "source": "support-ops-pack",
      "phase": "2. Public Policy And Domain",
      "priority": "P0",
      "owner": "User",
      "status": "Ready",
      "label": "Public domain and policy support path saved",
      "detail": "porterlabz.com",
      "action": "Save the public product domain so privacy, terms, refund, cancellation, support, checkout success, and portal return URLs can match.",
      "evidenceNeeded": "Save decisions.domain in the dashboard and upload sanitized support evidence to domain-email.",
      "dashboardPage": "pages/support.html",
      "dashboardField": "decisions.domain",
      "uploadSlot": "domain-email",
      "verificationCommand": "npm run public:launch-config && npm run test:public-launch-config",
      "noGoRule": "No public checkout unless policy/support URLs are on the intended public domain."
    },
    {
      "id": "diagnostics-export",
      "source": "support-ops-pack",
      "phase": "3. Customer Diagnostics",
      "priority": "P0",
      "owner": "Codex",
      "status": "Ready",
      "label": "Redacted support diagnostics export exists",
      "detail": "Settings diagnostics UI and Electron redaction handler exist.",
      "action": "Keep Settings diagnostics export available and redacted before every release candidate.",
      "evidenceNeeded": "Save supportOps.diagnosticsStatus in the dashboard and upload sanitized support evidence to qa-evidence.",
      "dashboardPage": "pages/support.html",
      "dashboardField": "supportOps.diagnosticsStatus",
      "uploadSlot": "qa-evidence",
      "verificationCommand": "npm run test:support-readiness && npm run test:support-diagnostics-runtime",
      "noGoRule": "Support must not ask customers for raw chats, API keys, tokens, full card numbers, screenshots with secrets, or private files."
    },
    {
      "id": "support-runbook",
      "source": "support-ops-pack",
      "phase": "4. Support Process",
      "priority": "P0",
      "owner": "Codex",
      "status": "Ready",
      "label": "Support runbook and inbox setup docs exist",
      "detail": "runbook=true; inboxSetup=true",
      "action": "Keep support categories, evidence rules, response targets, canned replies, and inbox setup docs current with the shipping product.",
      "evidenceNeeded": "Save supportOps.runbookStatus in the dashboard and upload sanitized support evidence to qa-evidence.",
      "dashboardPage": "pages/support.html",
      "dashboardField": "supportOps.runbookStatus",
      "uploadSlot": "qa-evidence",
      "verificationCommand": "npm run test:support-readiness",
      "noGoRule": "No paid beta without a written support process for install, activation, billing, cancellation, privacy, and computer-control tickets."
    },
    {
      "id": "billing-cancellation-support",
      "source": "support-ops-pack",
      "phase": "5. Billing Support",
      "priority": "P0",
      "owner": "User + Codex",
      "status": "Waiting on handoff",
      "label": "Customer Portal cancellation and invoice support configured",
      "detail": "customerPortalConfigured=No",
      "action": "Configure Stripe Customer Portal for cancellation, invoice history, and payment method updates; then test the support reply path.",
      "evidenceNeeded": "Save billingRehearsal.customerPortalConfigured in the dashboard and upload sanitized support evidence to stripe-screenshots.",
      "dashboardPage": "pages/support.html",
      "dashboardField": "billingRehearsal.customerPortalConfigured",
      "uploadSlot": "stripe-screenshots",
      "verificationCommand": "npm run payment:launch-pack && npm run test:payment-launch-pack",
      "noGoRule": "Do not take recurring subscription money without a customer cancellation path."
    },
    {
      "id": "hosted-billing-support-links",
      "source": "support-ops-pack",
      "phase": "5. Billing Support",
      "priority": "P0",
      "owner": "User + Codex",
      "status": "Waiting on handoff",
      "label": "Hosted billing support links saved",
      "detail": "backend=blank; webhook=blank",
      "action": "Save hosted billing backend and Stripe webhook URLs so support can distinguish checkout, portal, webhook, and activation failures.",
      "evidenceNeeded": "Save billingRehearsal.backendBaseUrl in the dashboard and upload sanitized support evidence to cloud-handoff.",
      "dashboardPage": "pages/support.html",
      "dashboardField": "billingRehearsal.backendBaseUrl",
      "uploadSlot": "cloud-handoff",
      "verificationCommand": "npm run billing:live-preflight -- --mode test --allow-blocked",
      "noGoRule": "Support cannot debug real customer billing until hosted backend and webhook URLs are known."
    },
    {
      "id": "legal-support-review",
      "source": "support-ops-pack",
      "phase": "6. Legal And Policy Review",
      "priority": "P0",
      "owner": "User",
      "status": "Waiting on handoff",
      "label": "Support, refund, privacy, and cancellation language reviewed",
      "detail": "attorneyReviewStatus=Not approved",
      "action": "Review final-sale, cancellation, support, privacy, and paid-beta language with an attorney/accountant or explicitly mark approved after review.",
      "evidenceNeeded": "Save billingRehearsal.attorneyReviewStatus in the dashboard and upload sanitized support evidence to legal-review.",
      "dashboardPage": "pages/support.html",
      "dashboardField": "billingRehearsal.attorneyReviewStatus",
      "uploadSlot": "legal-review",
      "verificationCommand": "npm run test:policy-readiness",
      "noGoRule": "Do not launch paid beta while support/refund/cancellation language is unreviewed."
    },
    {
      "id": "support-visuals-current",
      "source": "support-ops-pack",
      "phase": "7. Support Visual Evidence",
      "priority": "P0",
      "owner": "Codex",
      "status": "Waiting on product freeze",
      "label": "Support screenshots match shipping app",
      "detail": "finalScreenshotsApproved=No",
      "action": "Refresh support, diagnostics, billing, cancellation, and activation screenshots after the shipping UI and support paths are frozen.",
      "evidenceNeeded": "Save visualProduction.finalScreenshotsApproved in the dashboard and upload sanitized support evidence to product-screenshots.",
      "dashboardPage": "pages/support.html",
      "dashboardField": "visualProduction.finalScreenshotsApproved",
      "uploadSlot": "product-screenshots",
      "verificationCommand": "npm run visuals:pack && npm run test:visual-production-pack",
      "noGoRule": "Do not use support visuals that show stale UI, wrong support email, wrong policy URLs, or incomplete billing flow."
    }
  ],
  "supportCommands": [
    {
      "id": "refresh-support-pack",
      "phase": "0. Dashboard Sync",
      "owner": "Codex",
      "command": "npm run support:ops-pack && npm run test:support-ops-pack",
      "purpose": "Refresh support handoffs, support macros, dashboard state, and support no-go rules.",
      "noGoRule": "Do not rely on stale support status before enabling paid checkout."
    },
    {
      "id": "support-readiness",
      "phase": "3. Customer Diagnostics",
      "owner": "Codex",
      "command": "npm run test:support-readiness",
      "purpose": "Verify redacted diagnostics, Settings support UI, support runbook, and dashboard Support page wiring.",
      "noGoRule": "Support diagnostics must never export raw chats, tokens, license blobs, API keys, passwords, screenshots, or transcripts."
    },
    {
      "id": "support-diagnostics-runtime",
      "phase": "3. Customer Diagnostics",
      "owner": "Codex",
      "command": "npm run test:support-diagnostics-runtime",
      "purpose": "Runtime-smoke the diagnostics export and redaction rules.",
      "noGoRule": "Do not ask customers to send unredacted private data."
    },
    {
      "id": "public-support-config",
      "phase": "2. Public Policy And Domain",
      "owner": "Codex",
      "command": "npm run public:launch-config && npm run test:public-launch-config",
      "purpose": "Verify public domain, support email, policy URLs, billing redirects, and launch-site support links.",
      "noGoRule": "No public checkout until the support path in app, policies, Stripe, and launch site agree."
    },
    {
      "id": "payment-support-gate",
      "phase": "5. Billing Support",
      "owner": "User + Codex",
      "command": "npm run payment:launch-pack && npm run billing:live-preflight -- --mode test --allow-blocked",
      "purpose": "Keep billing support, Customer Portal, webhook, backend URL, support inbox, and legal review blockers visible.",
      "noGoRule": "Recurring billing must stay blocked until cancellation, invoices, support, and refund workflow can be handled."
    }
  ],
  "cannedReplies": [
    {
      "id": "diagnostics-request",
      "category": "Diagnostics Request",
      "subject": "NyrA support diagnostics needed",
      "body": "Please open NyrA Settings, choose Export Support Diagnostics, review the JSON file, and attach it in your reply to nyrasupport@gmail.com. Do not send passwords, API keys, full card numbers, recovery codes, private documents, or screenshots with secrets visible."
    },
    {
      "id": "activation-help",
      "category": "License Activation",
      "subject": "NyrA license activation help",
      "body": "Please send the checkout email address, app version, Windows version, exact error text, and the redacted support diagnostics file from Settings. Do not send full card numbers, API keys, passwords, or recovery codes."
    },
    {
      "id": "billing-review",
      "category": "Billing Review",
      "subject": "NyrA billing request received",
      "body": "Purchases are final except where required by law or where we confirm a billing error, duplicate charge, unauthorized charge, or license delivery failure caused by our billing system. Please send the checkout email, charge date, and a short description of the issue. Do not send full card numbers."
    },
    {
      "id": "computer-control-issue",
      "category": "Computer Control",
      "subject": "NyrA computer-control issue",
      "body": "Please describe the exact command you gave NyrA, what happened, what should have happened, and whether the app showed a high-impact approval message. Attach the redacted support diagnostics file from Settings."
    }
  ],
  "counts": {
    "totalActions": 9,
    "userActions": 6,
    "codexActions": 5,
    "waitingActions": 5,
    "readyActions": 4,
    "supportCommands": 5,
    "cannedReplies": 4
  },
  "outputs": {
    "json": "docs/launch_command_center/support-ops-pack.json",
    "csv": "docs/launch_command_center/support-ops-pack.csv",
    "report": "docs/launch_command_center/SUPPORT_OPS_PACK.md",
    "dashboard": "docs/launch_command_center/pages/support.html"
  }
}
