Support Ops
Support
Inbox setup, diagnostics export, ticket categories, refund workflow, Customer Portal support, support visuals, and reply macros.
Support Ops Pack
Open support CSVRun npm run support:ops-pack after changing support email, domain, Customer Portal, billing backend, legal review, or support evidence. Never paste inbox passwords, recovery codes, raw customer data, API keys, full card numbers, or private files into the dashboard.
Support Intake Form
Checking command-center API...
Load file here: support-roundtrip
Safe Command Sequence
| Phase | Owner | Command | Purpose | No-Go Rule |
|---|---|---|---|---|
| 0. Dashboard Sync | Codex | npm run support:ops-pack && npm run test:support-ops-pack |
Refresh support handoffs, support macros, dashboard state, and support no-go rules. | Do not rely on stale support status before enabling paid checkout. |
| 3. Customer Diagnostics | Codex | npm run test:support-readiness |
Verify redacted diagnostics, Settings support UI, support runbook, and dashboard Support page wiring. | Support diagnostics must never export raw chats, tokens, license blobs, API keys, passwords, screenshots, or transcripts. |
| 3. Customer Diagnostics | Codex | npm run test:support-diagnostics-runtime |
Runtime-smoke the diagnostics export and redaction rules. | Do not ask customers to send unredacted private data. |
| 2. Public Policy And Domain | Codex | npm run public:launch-config && npm run test:public-launch-config |
Verify public domain, support email, policy URLs, billing redirects, and launch-site support links. | No public checkout until the support path in app, policies, Stripe, and launch site agree. |
| 5. Billing Support | User + Codex | npm run payment:launch-pack && npm run billing:live-preflight -- --mode test --allow-blocked |
Keep billing support, Customer Portal, webhook, backend URL, support inbox, and legal review blockers visible. | Recurring billing must stay blocked until cancellation, invoices, support, and refund workflow can be handled. |
Support Actions
| Phase | Priority | Owner | Status | Action | What To Do | Page | Field | Verify |
|---|---|---|---|---|---|---|---|---|
| 1. Public Support Identity | P0 | User | Ready | Support email saved | Save the support address customers will see in the app, Stripe receipts, public policies, and launch site. | pages/support.html | decisions.supportEmail | npm run support:ops-pack && npm run test:support-ops-pack |
| 1. Public Support Identity | P0 | User | Ready | Support inbox ticket roundtrip confirmed | Send a test customer email to the support inbox, reply from the inbox, and upload sanitized proof of the roundtrip. | pages/support.html | billingRehearsal.supportInboxConfirmed | npm run support:ops-pack && npm run test:support-ops-pack |
| 2. Public Policy And Domain | P0 | User | Ready | Public domain and policy support path saved | Save the public product domain so privacy, terms, refund, cancellation, support, checkout success, and portal return URLs can match. | pages/support.html | decisions.domain | npm run public:launch-config && npm run test:public-launch-config |
| 3. Customer Diagnostics | P0 | Codex | Ready | Redacted support diagnostics export exists | Keep Settings diagnostics export available and redacted before every release candidate. | pages/support.html | supportOps.diagnosticsStatus | npm run test:support-readiness && npm run test:support-diagnostics-runtime |
| 4. Support Process | P0 | Codex | Ready | Support runbook and inbox setup docs exist | Keep support categories, evidence rules, response targets, canned replies, and inbox setup docs current with the shipping product. | pages/support.html | supportOps.runbookStatus | npm run test:support-readiness |
| 5. Billing Support | P0 | User + Codex | Ready | Customer Portal cancellation and invoice support configured | Configure Stripe Customer Portal for cancellation, invoice history, and payment method updates; then test the support reply path. | pages/support.html | billingRehearsal.customerPortalConfigured | npm run payment:launch-pack && npm run test:payment-launch-pack |
| 5. Billing Support | P0 | User + Codex | Ready | Hosted billing support links saved | Save hosted billing backend and Stripe webhook URLs so support can distinguish checkout, portal, webhook, and activation failures. | pages/support.html | billingRehearsal.backendBaseUrl | npm run billing:live-preflight -- --mode test --allow-blocked |
| 6. Legal And Policy Review | P0 | User | Waiting on handoff | Support, refund, privacy, and cancellation language reviewed | Review final-sale, cancellation, support, privacy, and paid-beta language with an attorney/accountant or explicitly mark approved after review. | pages/support.html | billingRehearsal.attorneyReviewStatus | npm run test:policy-readiness |
| 7. Support Visual Evidence | P0 | Codex | Waiting on product freeze | Support screenshots match shipping app | Refresh support, diagnostics, billing, cancellation, and activation screenshots after the shipping UI and support paths are frozen. | pages/support.html | visualProduction.finalScreenshotsApproved | npm run visuals:pack && npm run test:visual-production-pack |
Sanitized Evidence Checklist
Support roundtrip, Customer Portal, legal review, and billing support stay blocked until sanitized evidence exists. Plans, placeholders, and synthetic routing proofs do not clear these rows.
| Phase | Evidence | Upload Slot | Redaction Rule | Clears |
|---|---|---|---|---|
| Support roundtrip | Sanitized screenshot or export showing a test customer email arrived in the support inbox. | support-roundtrip | Hide inbox passwords, recovery details, unrelated mailbox content, full customer addresses, and message bodies that contain private data. | billingRehearsal.supportInboxConfirmed can only move to Yes after receive and reply evidence both exist. |
| Support roundtrip | Sanitized proof that the support inbox sent a reply to the test customer ticket. | support-roundtrip | Show only the support address, timestamp, subject, and a non-sensitive reply excerpt. | Proves the support inbox can answer a real customer ticket. |
| Diagnostics | Runtime smoke output or reviewed sample proving diagnostics redact tokens, license blobs, emails, transcripts, raw chats, and private files. | qa-evidence | Do not upload real customer diagnostics unless the customer reviewed the file first. | Keeps diagnostics export ready without requesting raw secrets from customers. |
| Billing support | Sanitized Customer Portal test showing cancellation, invoice history, and payment-method update paths. | stripe-screenshots | Hide Stripe secret keys, webhook secrets, customer IDs when not needed, full card data, and account recovery details. | billingRehearsal.customerPortalConfigured can only move to Yes after the portal support path is tested. |
| Billing support | Hosted billing backend base URL and Stripe webhook endpoint saved as HTTPS URLs, with health/preflight output if available. | cloud-handoff | URLs are allowed; raw Stripe keys, webhook secrets, bearer tokens, and license signing secrets are not. | Lets support separate checkout, portal, webhook, entitlement, and activation failures. |
| Billing support | Sanitized billing escalation notes showing how support distinguishes checkout failure, portal failure, duplicate charge, refund request, webhook delay, and activation failure. | stripe-screenshots | Use ticket IDs, timestamps, and non-sensitive status only. Hide payment method details, Stripe secrets, customer IDs when not needed, and private account recovery details. | Proves billing support can route customer money issues without exposing payment secrets or guessing from incomplete evidence. |
| Legal and policy | Attorney/accountant review status or sanitized note covering support, refund, cancellation, privacy, tax, and paid-beta language. | legal-review | Do not store private legal account credentials, tax IDs, recovery codes, or personal address details in generated docs. | Paid beta support language can only be marked approved after real review evidence exists. |
Support Roundtrip Evidence Template
Keep billingRehearsal.supportInboxConfirmed=No until both receive and reply proof are uploaded and reviewed.
| Artifact | Include | Redact |
|---|---|---|
| Receive proof | Support address, received timestamp, test subject, ticket/reference ID if available, and non-sensitive mailbox view showing the ticket arrived. | Hide inbox passwords, recovery details, unrelated mailbox content, full sender address when not needed, message body private data, and account settings. |
| Reply proof | Support address, sent timestamp, same test subject or ticket/reference ID, and a short non-sensitive reply excerpt. | Hide unrelated recipients, private customer text, account recovery content, credentials, and any payment details. |
| Dashboard update proof | After both proofs are reviewed, show billingRehearsal.supportInboxConfirmed set to Yes and the support-roundtrip upload slot populated. | Do not include raw mailbox credentials, raw bridge tokens, Stripe secrets, API keys, recovery codes, or unreviewed customer diagnostics. |
Review Checklist
- Receive proof and reply proof refer to the same test ticket.
- The proof shows the configured support inbox, not a personal inbox alias.
- The upload contains no secrets, passwords, private documents, full card numbers, raw tokens, or unrelated customer content.
- Only after review should billingRehearsal.supportInboxConfirmed move from No to Yes.
A support email value or canned reply does not clear the support roundtrip blocker; only sanitized receive and reply evidence clears it.
Support Escalation Matrix
Escalate money, activation, cancellation, privacy, security, and high-impact action reports from sanitized evidence only. Do not promise refunds, readiness, or account fixes before the listed evidence exists.
| Severity | Category | Owner | First Response Target | Required Evidence | Redaction Rule | No-Go Rule |
|---|---|---|---|---|---|---|
| P0 money | Billing charge, duplicate charge, or refund request | Support + Billing | Same business day before paid beta; 4 business hours after paid beta opens. | Checkout email, charge date, non-sensitive Stripe event or ticket ID, and redacted diagnostics when activation is involved. | Never request or store full card numbers, Stripe secret keys, webhook secrets, bank details, passwords, or recovery codes. | Escalate before promising a refund when policy review, charge ownership, or Stripe evidence is incomplete. |
| P0 entitlement | Paid activation failed after checkout | Support + License Activation | Same business day before paid beta; 4 business hours after paid beta opens. | Checkout email, app version, exact activation error, return-to-app result, and redacted support diagnostics. | Do not ask for license signing secrets, raw license blobs, API keys, full transcripts, or private files. | Do not mark paid support ready until support can distinguish checkout, webhook, entitlement, portal, and device activation failures. |
| P0 subscription | Customer Portal, cancellation, invoices, or payment methods | Support + Billing | Same business day before paid beta; 4 business hours after paid beta opens. | Sanitized Customer Portal proof, portal link source, checkout email, approximate purchase time, and user-visible error text. | Hide customer IDs when not needed, payment method details, Stripe account recovery data, and unrelated inbox content. | Recurring billing remains blocked until cancellation, invoice history, and payment-method update paths are tested. |
| P1 privacy | Diagnostics, privacy, security, or data request | Support + Privacy/Legal | One business day before paid beta; same business day for security or data exposure reports. | Redacted diagnostic bundle, customer-reviewed notes, policy URL involved, and sanitized reproduction details. | Do not collect raw chats, screenshots with secrets, private documents, passwords, recovery codes, or unreviewed diagnostics. | Escalate any suspected secret, payment, account, or private-data exposure before giving operational guidance. |
| P1 safety | Computer-control, high-impact action, or safety issue | Support + Desktop Runtime | One business day before paid beta; same business day when a high-impact action is involved. | Exact command, expected result, actual result, approval prompt state, app version, OS version, and redacted diagnostics. | Do not request private screen recordings, raw transcripts, passwords, or screenshots with sensitive windows visible. | Escalate high-impact action reports before asking the customer to retry risky actions. |
Billing Support Triage Runbook
Use this for checkout, activation, cancellation, invoice, duplicate-charge, refund, and dispute issues. Keep customer replies evidence-based and redacted.
| Trigger | First Check | Evidence | Reply Macro | Escalation | No-Go Rule |
|---|---|---|---|---|---|
| Customer cannot open checkout or checkout fails before payment. | Verify the hosted billing backend URL, checkout endpoint health, public success/cancel URLs, and support email shown to the customer. | Support ticket ID, app version, public billing origin, sanitized error text, and billing preflight output when available. | Billing Review | Billing + Cloud | Do not tell customers to retry payment until backend URL, support email, and checkout configuration are verified. |
| Checkout completed but NyrA stays locked or shows an activation error. | Separate return-to-app failure, webhook delay, entitlement lookup, and device activation issues before requesting more customer data. | Checkout email, charge time, app version, exact activation error, return-to-app result, and redacted diagnostics. | Paid Activation After Checkout | Support + License Activation | Do not request raw license blobs, signing secrets, webhook secrets, API keys, or full transcripts. |
| Customer asks to cancel, view invoices, or update payment method. | Confirm the Customer Portal link source, return URL, portal configuration status, and invoice/cancellation path before giving policy guidance. | Checkout email, approximate purchase time, portal link source, sanitized portal error, and Customer Portal proof if configured. | Cancellation And Invoice Help | Support + Billing | Recurring billing remains blocked until the portal cancellation and invoice paths are tested with sanitized proof. |
| Customer reports duplicate charge, unauthorized charge, refund request, or dispute risk. | Confirm charge ownership and policy/legal review status before promising a refund, reversal, or account fix. | Ticket ID, checkout email, charge date, non-sensitive Stripe event or charge reference, and redacted diagnostics only when activation is involved. | Billing Review | Support + Billing + Legal/Policy | Never ask for full card numbers, bank details, Stripe secrets, passwords, or recovery codes. |
Support Intake Decision Tree
Classify each first message before choosing a macro or escalation owner. Request only the redacted evidence needed for that route.
| Intake Signal | First Question | Route | Required Evidence | Reply Macro | No-Go Rule |
|---|---|---|---|---|---|
| Customer mentions checkout, charge, refund, cancellation, invoice, receipt, subscription, portal, or payment method. | Did money move, did checkout fail before payment, or is this only a portal/account-management request? | Billing Support Triage Runbook | Checkout email, approximate time, user-visible error text, portal link source when relevant, and non-sensitive Stripe/ticket reference only if already available. | Billing Review or Cancellation And Invoice Help | Do not promise refunds, reversals, cancellation completion, or paid-beta readiness until charge ownership, policy status, and portal evidence are verified. |
| Customer says payment succeeded but NyrA stayed locked, activation failed, or the app did not return from checkout. | Did checkout complete, did the app return to NyrA, and what exact activation error is visible? | Activation After Checkout escalation | Checkout email, app version, exact activation error, return-to-app result, and redacted support diagnostics. | Paid Activation After Checkout | Do not request raw license blobs, signing secrets, webhook secrets, API keys, or full transcripts. |
| Customer asks about diagnostics, privacy, data deletion, security, suspicious files, or what NyrA can see. | Is there suspected private-data exposure, a security issue, or a routine explanation request? | Diagnostics, privacy, security escalation | Customer-reviewed diagnostic bundle only when needed, policy URL involved, sanitized reproduction details, and no raw chats or private files. | Diagnostics Request | Escalate suspected payment, account, secret, or private-data exposure before giving operational guidance. |
| Customer reports a computer-control command, approval prompt, automation, file action, browser action, or high-impact safety concern. | What command was given, what result was expected, what happened, and did a high-impact approval prompt appear? | Computer-control safety escalation | Exact command, expected result, actual result, approval prompt state, app version, OS version, and redacted diagnostics. | Computer Control | Do not ask the customer to retry risky actions before support reviews the high-impact approval and diagnostics evidence. |
First Response QA Checklist
Run this before sending any canned reply. Keep first responses evidence-based, redacted, and blocker-preserving.
| Step | Check | Pass Signal | Blocker Rule |
|---|---|---|---|
| Classify the ticket before choosing a macro. | Match the first customer message to the support intake decision tree and billing support triage route. | One intake route, reply macro, escalation owner, and first-response target are selected. | Do not send a generic reply when money movement, activation, privacy, security, or high-impact action risk is unclear. |
| Ask only for redacted evidence. | Compare the draft reply against the route requiredEvidence and redactionRule before sending. | The reply requests no passwords, raw API keys, raw license blobs, full card numbers, private files, raw transcripts, or recovery codes. | Escalate instead of asking the customer for private data, account recovery details, payment secrets, or unreviewed diagnostics. |
| Preserve readiness blockers when proof is missing. | Confirm support roundtrip, Customer Portal, hosted billing links, and policy review evidence exist before claiming readiness or completion. | The reply names what is being reviewed without saying support, billing, cancellation, refund, or paid-beta readiness is complete. | A canned reply, support email value, plan, or placeholder does not clear supportInboxConfirmed, Customer Portal, billing support, legal review, or paid-beta readiness. |
| Route escalation cases before making promises. | For refunds, duplicate charges, activation after checkout, privacy/security, or computer-control safety, confirm the escalation matrix owner and evidence. | The draft avoids promising refunds, reversals, cancellation completion, account fixes, or retries until the owner reviews sanitized evidence. | Escalate before promising a customer outcome when charge ownership, policy status, portal proof, diagnostics, or high-impact approval evidence is incomplete. |
Reply Macros
| Category | Subject | Reply |
|---|---|---|
| Diagnostics Request | NyrA support diagnostics needed | Please open NyrA Settings, choose Export Support Diagnostics, review the JSON file, and attach it in your reply to support@support.porterlabz.com. Do not send passwords, API keys, full card numbers, recovery codes, private documents, or screenshots with secrets visible. |
| License Activation | NyrA license activation help | 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. |
| Billing Review | NyrA billing request received | 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. |
| Cancellation And Invoice Help | NyrA cancellation or invoice help | Please use the customer portal link from your receipt or NyrA Settings to manage cancellation, invoices, and payment methods. If the portal link fails, send the checkout email, approximate purchase time, app version, and redacted support diagnostics. Do not send card numbers, Stripe secrets, passwords, or recovery codes. |
| Paid Activation After Checkout | NyrA activation after payment | Please confirm whether checkout completed, whether NyrA returned to the app, and the exact activation error text. Attach the redacted support diagnostics file from Settings so we can separate checkout, webhook, portal, entitlement, and device activation failures without asking for private payment details. |
| Computer Control | NyrA computer-control issue | 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. |
NyrA Support Inbox Setup
Scope: Swarm Little Buddy desktop app only
The operational support address is:
support@support.porterlabz.com
Cloudflare Email Routing forwards this address to a verified Porter Labs owner mailbox without changing the existing porterlabz.com business-mail MX records. The receive-and-reply roundtrip was verified on July 18, 2026; sanitized proof is stored in the command-center support-roundtrip upload slot. Do not put mailbox passwords, recovery codes, API tokens, or raw message content in the repo.
The current branded test reply reached Gmail spam. Complete sender-domain onboarding and DMARC alignment before branded replies are relied on for customer support. Until then, the verified owner mailbox remains the operational reply path.
Minimum Setup
- Keep the
support@support.porterlabz.comCloudflare routing rule enabled. - Keep the destination owner mailbox protected with two-factor authentication and recovery.
- Monitor Cloudflare Email Routing activity for forwarding or authentication failures.
- Add the support address to Stripe customer receipts.
- Add the support address to the refund and cancellation policy.
- Add the support address to the privacy policy.
- Add the support address to the terms and EULA.
- Add the support address to the app settings/help screen.
- Add the support address to the landing page.
- Complete sending-domain onboarding and DMARC alignment, then rerun inbox-placement tests.
Support Labels
Create labels or folders:
- Billing
- Install
- License activation
- API provider keys
- Voice/mic/camera
- Screen capture
- Computer control
- Refund review
- Bug report
- Feature request
First Reply Targets
Do not promise a support SLA until it can be staffed. For beta, use:
- Billing issues: best effort within 2 business days.
- Installation/license issues: best effort within 2 business days.
- Feature requests: no guaranteed response.
Canned Reply: Billing Final Sale
Subject: NyrA billing request received
Thanks for contacting NyrA support. 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.
We will review the charge and reply with the next step. Please include the email used at checkout, charge date, and the last four digits of the payment method. Do not send full card numbers, passwords, API keys, screenshots containing secrets, or recovery codes.
Canned Reply: License Activation
Subject: NyrA license activation help
We can help with activation. Please send the checkout email address, your app version, Windows version, and the exact error shown in the app. Do not send API keys, passwords, or screenshots containing private data.
NyrA Support Operations Runbook
Scope: Swarm Little Buddy desktop app only.
This runbook is the operating process for paid beta support. It assumes the customer support inbox is controlled by the business owner and that no customer secrets are requested or stored in the repo.
Support Intake
Every support ticket should capture:
- Customer checkout email.
- App version.
- Windows version.
- Billing backend URL shown in Settings, if relevant.
- Exact error text or screenshot with secrets hidden.
- Redacted support diagnostics JSON from Settings > Support.
- Whether the issue blocks install, activation, payment, cancellation, or core app use.
Do not ask for passwords, API keys, full card numbers, recovery codes, raw transcripts, private files, or screenshots containing secrets.
Ticket Categories
| Category | First Action | Needed Evidence | Escalate When |
|---|---|---|---|
| Install or launch | Confirm app version, Windows version, installer path, antivirus message, and signing status | Screenshot, app version, install log if available | Installer is blocked by trust/signing or app crashes before Settings opens |
| License activation | Confirm checkout email, billing URL, checkout session ID status, and device status | Redacted diagnostics, Stripe customer/session lookup | Paid customer cannot activate after successful charge |
| Billing or cancellation | Send Customer Portal path and confirm charge date/email | Stripe customer ID or checkout email, no full card data | Duplicate charge, unauthorized charge, legal refund requirement, or portal failure |
| Voice or listening | Confirm microphone consent, wake/trigger settings, muted state, and Windows input device | Redacted diagnostics, screenshot of privacy settings | Realtime voice fails after consent and provider health are good |
| Screen or camera | Confirm consent state and that the user explicitly requested the capture | Redacted diagnostics, Windows privacy settings screenshot | App captures without consent or fails after consent |
| Computer control | Confirm paid license, computer-control consent, and high-impact approval category | Redacted diagnostics, action description | Action is unsafe, destructive, payment/account changing, or repeatedly fails |
| Provider/API issue | Confirm provider availability and configured key owner | Redacted diagnostics only; never ask for raw keys | Provider is down or all providers fail after key setup |
| Privacy/delete request | Route to privacy workflow and confirm identity path | Customer email and requested action | Legal/account deletion, data export dispute, or breach concern |
| Bug report | Reproduce locally or mark unable to reproduce | Redacted diagnostics, steps, expected result, actual result | Data loss, billing impact, security impact, or crash loop |
| Feature request | Record request and attach product lane | Customer use case | Request touches safety, legal, billing, or privacy promises |
Redacted Diagnostic Bundle
The app now exposes Export Support Diagnostics in Settings. The file is meant to be attached by the customer after they review it.
The bundle includes:
- App version, platform, Electron/Chrome/Node versions.
- Consent booleans.
- License status metadata with tokens and license blobs removed.
- Device ID hash, not the raw device ID.
- Provider availability and route metadata without env file paths or keys.
- Local data counts and recent high-impact audit metadata.
The bundle excludes:
- Raw chat history.
- API keys.
- Passwords.
- Device access tokens.
- License blobs.
- Screenshots.
- Transcripts.
- Passive context log text.
- Full customer email address.
Response Targets
Do not sell a strict support SLA until staffing exists. For paid beta, use these public-facing targets:
- Billing, cancellation, duplicate charge, and activation issues: best effort within 2 business days.
- Install, crash, voice, screen, and computer-control issues: best effort within 2 business days.
- Feature requests and general feedback: reviewed but no guaranteed response.
- Security or privacy reports: acknowledge as soon as practical and pause affected release work until triaged.
Billing And Refund Workflow
- Confirm the request category: cancellation, duplicate charge, unauthorized charge, billing error, license delivery failure, or general refund request.
- Use Stripe to locate the customer by checkout email or customer ID.
- Never ask for full card numbers.
- If it is cancellation only, send Customer Portal instructions.
- If it is duplicate charge, unauthorized charge, billing error, or verified license delivery failure, mark for refund review.
- If the final-sale policy applies, reply with the final-sale language and explain the cancellation path for future renewals.
- Log the ticket category and outcome in the command center team updates.
Canned Replies
Diagnostics Request
Subject: NyrA support diagnostics needed
Thanks for the report. Please open NyrA Settings, choose Export Support Diagnostics, review the JSON file, and attach it here. Hide or remove anything you do not want to send. Do not send passwords, API keys, full card numbers, recovery codes, private documents, or screenshots with secrets visible.
Activation Help
Subject: NyrA license activation help
We can help with activation. 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.
Billing Review
Subject: NyrA billing request received
Thanks for contacting NyrA support. 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.
Computer-Control Issue
Subject: NyrA computer-control issue
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. Do not ask NyrA to perform destructive, credential, payment, or account-changing actions while we are diagnosing the issue.
No-Go Conditions
Paid beta support is not live until:
- The support inbox exists and is monitored.
- Support docs and public policies contain the same support address.
- Stripe receipts and Customer Portal show the same support path.
- App Settings exposes the support email and diagnostics export.
- A support ticket roundtrip has been tested.
- A refund/cancellation test-mode rehearsal has been completed.
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.
Support Ops Pack JSON
{
"schemaVersion": 1,
"generatedAt": "2026-07-18T13:47:03.091Z",
"status": "SUPPORT_OPS_WAITING_ON_HANDOFFS",
"label": "Support Ops Waiting On Handoffs",
"supportEmail": "support@support.porterlabz.com",
"supportInboxConfirmed": "Yes",
"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": "support@support.porterlabz.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": "Ready",
"label": "Support inbox ticket roundtrip confirmed",
"detail": "supportInboxConfirmed=Yes",
"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": "Ready",
"label": "Customer Portal cancellation and invoice support configured",
"detail": "customerPortalConfigured=Yes",
"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": "Ready",
"label": "Hosted billing support links saved",
"detail": "backend=https://billing.porterlabz.com; webhook=https://billing.porterlabz.com/api/billing/webhook",
"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."
}
],
"supportEvidenceChecklist": [
{
"id": "customer-ticket-received",
"phase": "Support roundtrip",
"required": true,
"uploadSlot": "support-roundtrip",
"evidence": "Sanitized screenshot or export showing a test customer email arrived in the support inbox.",
"redactionRule": "Hide inbox passwords, recovery details, unrelated mailbox content, full customer addresses, and message bodies that contain private data.",
"clears": "billingRehearsal.supportInboxConfirmed can only move to Yes after receive and reply evidence both exist."
},
{
"id": "support-reply-sent",
"phase": "Support roundtrip",
"required": true,
"uploadSlot": "support-roundtrip",
"evidence": "Sanitized proof that the support inbox sent a reply to the test customer ticket.",
"redactionRule": "Show only the support address, timestamp, subject, and a non-sensitive reply excerpt.",
"clears": "Proves the support inbox can answer a real customer ticket."
},
{
"id": "diagnostics-redaction-proof",
"phase": "Diagnostics",
"required": true,
"uploadSlot": "qa-evidence",
"evidence": "Runtime smoke output or reviewed sample proving diagnostics redact tokens, license blobs, emails, transcripts, raw chats, and private files.",
"redactionRule": "Do not upload real customer diagnostics unless the customer reviewed the file first.",
"clears": "Keeps diagnostics export ready without requesting raw secrets from customers."
},
{
"id": "customer-portal-proof",
"phase": "Billing support",
"required": true,
"uploadSlot": "stripe-screenshots",
"evidence": "Sanitized Customer Portal test showing cancellation, invoice history, and payment-method update paths.",
"redactionRule": "Hide Stripe secret keys, webhook secrets, customer IDs when not needed, full card data, and account recovery details.",
"clears": "billingRehearsal.customerPortalConfigured can only move to Yes after the portal support path is tested."
},
{
"id": "billing-link-proof",
"phase": "Billing support",
"required": true,
"uploadSlot": "cloud-handoff",
"evidence": "Hosted billing backend base URL and Stripe webhook endpoint saved as HTTPS URLs, with health/preflight output if available.",
"redactionRule": "URLs are allowed; raw Stripe keys, webhook secrets, bearer tokens, and license signing secrets are not.",
"clears": "Lets support separate checkout, portal, webhook, entitlement, and activation failures."
},
{
"id": "billing-escalation-proof",
"phase": "Billing support",
"required": true,
"uploadSlot": "stripe-screenshots",
"evidence": "Sanitized billing escalation notes showing how support distinguishes checkout failure, portal failure, duplicate charge, refund request, webhook delay, and activation failure.",
"redactionRule": "Use ticket IDs, timestamps, and non-sensitive status only. Hide payment method details, Stripe secrets, customer IDs when not needed, and private account recovery details.",
"clears": "Proves billing support can route customer money issues without exposing payment secrets or guessing from incomplete evidence."
},
{
"id": "policy-review-proof",
"phase": "Legal and policy",
"required": true,
"uploadSlot": "legal-review",
"evidence": "Attorney/accountant review status or sanitized note covering support, refund, cancellation, privacy, tax, and paid-beta language.",
"redactionRule": "Do not store private legal account credentials, tax IDs, recovery codes, or personal address details in generated docs.",
"clears": "Paid beta support language can only be marked approved after real review evidence exists."
}
],
"supportFlowEvidenceGate": {
"status": "SUPPORT_ROUNDTRIP_EVIDENCE_READY",
"label": "Support Roundtrip Evidence Ready",
"supportInboxConfirmed": "Yes",
"requiredProof": [
"customer-ticket-received",
"support-reply-sent",
"diagnostics-redaction-proof",
"customer-portal-proof",
"billing-link-proof",
"billing-escalation-proof",
"policy-review-proof"
],
"noGoRule": "Do not mark support inbox roundtrip, billing support, or paid-beta support readiness complete until receive proof, reply proof, and billing support evidence are uploaded as sanitized artifacts.",
"nextAction": "Review uploaded support-roundtrip proof before changing paid-beta readiness."
},
"supportEscalationMatrix": [
{
"id": "billing-charge-refund",
"category": "Billing charge, duplicate charge, or refund request",
"severity": "P0 money",
"owner": "Support + Billing",
"firstResponseTarget": "Same business day before paid beta; 4 business hours after paid beta opens.",
"requiredEvidence": "Checkout email, charge date, non-sensitive Stripe event or ticket ID, and redacted diagnostics when activation is involved.",
"redactionRule": "Never request or store full card numbers, Stripe secret keys, webhook secrets, bank details, passwords, or recovery codes.",
"noGoRule": "Escalate before promising a refund when policy review, charge ownership, or Stripe evidence is incomplete."
},
{
"id": "activation-after-checkout",
"category": "Paid activation failed after checkout",
"severity": "P0 entitlement",
"owner": "Support + License Activation",
"firstResponseTarget": "Same business day before paid beta; 4 business hours after paid beta opens.",
"requiredEvidence": "Checkout email, app version, exact activation error, return-to-app result, and redacted support diagnostics.",
"redactionRule": "Do not ask for license signing secrets, raw license blobs, API keys, full transcripts, or private files.",
"noGoRule": "Do not mark paid support ready until support can distinguish checkout, webhook, entitlement, portal, and device activation failures."
},
{
"id": "portal-cancellation-invoice",
"category": "Customer Portal, cancellation, invoices, or payment methods",
"severity": "P0 subscription",
"owner": "Support + Billing",
"firstResponseTarget": "Same business day before paid beta; 4 business hours after paid beta opens.",
"requiredEvidence": "Sanitized Customer Portal proof, portal link source, checkout email, approximate purchase time, and user-visible error text.",
"redactionRule": "Hide customer IDs when not needed, payment method details, Stripe account recovery data, and unrelated inbox content.",
"noGoRule": "Recurring billing remains blocked until cancellation, invoice history, and payment-method update paths are tested."
},
{
"id": "diagnostics-privacy-security",
"category": "Diagnostics, privacy, security, or data request",
"severity": "P1 privacy",
"owner": "Support + Privacy/Legal",
"firstResponseTarget": "One business day before paid beta; same business day for security or data exposure reports.",
"requiredEvidence": "Redacted diagnostic bundle, customer-reviewed notes, policy URL involved, and sanitized reproduction details.",
"redactionRule": "Do not collect raw chats, screenshots with secrets, private documents, passwords, recovery codes, or unreviewed diagnostics.",
"noGoRule": "Escalate any suspected secret, payment, account, or private-data exposure before giving operational guidance."
},
{
"id": "computer-control-safety",
"category": "Computer-control, high-impact action, or safety issue",
"severity": "P1 safety",
"owner": "Support + Desktop Runtime",
"firstResponseTarget": "One business day before paid beta; same business day when a high-impact action is involved.",
"requiredEvidence": "Exact command, expected result, actual result, approval prompt state, app version, OS version, and redacted diagnostics.",
"redactionRule": "Do not request private screen recordings, raw transcripts, passwords, or screenshots with sensitive windows visible.",
"noGoRule": "Escalate high-impact action reports before asking the customer to retry risky actions."
}
],
"billingSupportTriageRunbook": [
{
"id": "checkout-not-created",
"trigger": "Customer cannot open checkout or checkout fails before payment.",
"firstCheck": "Verify the hosted billing backend URL, checkout endpoint health, public success/cancel URLs, and support email shown to the customer.",
"evidence": "Support ticket ID, app version, public billing origin, sanitized error text, and billing preflight output when available.",
"replyMacro": "Billing Review",
"escalation": "Billing + Cloud",
"noGoRule": "Do not tell customers to retry payment until backend URL, support email, and checkout configuration are verified."
},
{
"id": "paid-not-activated",
"trigger": "Checkout completed but NyrA stays locked or shows an activation error.",
"firstCheck": "Separate return-to-app failure, webhook delay, entitlement lookup, and device activation issues before requesting more customer data.",
"evidence": "Checkout email, charge time, app version, exact activation error, return-to-app result, and redacted diagnostics.",
"replyMacro": "Paid Activation After Checkout",
"escalation": "Support + License Activation",
"noGoRule": "Do not request raw license blobs, signing secrets, webhook secrets, API keys, or full transcripts."
},
{
"id": "portal-cancel-invoice",
"trigger": "Customer asks to cancel, view invoices, or update payment method.",
"firstCheck": "Confirm the Customer Portal link source, return URL, portal configuration status, and invoice/cancellation path before giving policy guidance.",
"evidence": "Checkout email, approximate purchase time, portal link source, sanitized portal error, and Customer Portal proof if configured.",
"replyMacro": "Cancellation And Invoice Help",
"escalation": "Support + Billing",
"noGoRule": "Recurring billing remains blocked until the portal cancellation and invoice paths are tested with sanitized proof."
},
{
"id": "duplicate-refund-dispute",
"trigger": "Customer reports duplicate charge, unauthorized charge, refund request, or dispute risk.",
"firstCheck": "Confirm charge ownership and policy/legal review status before promising a refund, reversal, or account fix.",
"evidence": "Ticket ID, checkout email, charge date, non-sensitive Stripe event or charge reference, and redacted diagnostics only when activation is involved.",
"replyMacro": "Billing Review",
"escalation": "Support + Billing + Legal/Policy",
"noGoRule": "Never ask for full card numbers, bank details, Stripe secrets, passwords, or recovery codes."
}
],
"supportIntakeDecisionTree": [
{
"id": "money-or-subscription",
"intakeSignal": "Customer mentions checkout, charge, refund, cancellation, invoice, receipt, subscription, portal, or payment method.",
"firstQuestion": "Did money move, did checkout fail before payment, or is this only a portal/account-management request?",
"route": "Billing Support Triage Runbook",
"requiredEvidence": "Checkout email, approximate time, user-visible error text, portal link source when relevant, and non-sensitive Stripe/ticket reference only if already available.",
"replyMacro": "Billing Review or Cancellation And Invoice Help",
"noGoRule": "Do not promise refunds, reversals, cancellation completion, or paid-beta readiness until charge ownership, policy status, and portal evidence are verified."
},
{
"id": "paid-activation",
"intakeSignal": "Customer says payment succeeded but NyrA stayed locked, activation failed, or the app did not return from checkout.",
"firstQuestion": "Did checkout complete, did the app return to NyrA, and what exact activation error is visible?",
"route": "Activation After Checkout escalation",
"requiredEvidence": "Checkout email, app version, exact activation error, return-to-app result, and redacted support diagnostics.",
"replyMacro": "Paid Activation After Checkout",
"noGoRule": "Do not request raw license blobs, signing secrets, webhook secrets, API keys, or full transcripts."
},
{
"id": "diagnostics-privacy",
"intakeSignal": "Customer asks about diagnostics, privacy, data deletion, security, suspicious files, or what NyrA can see.",
"firstQuestion": "Is there suspected private-data exposure, a security issue, or a routine explanation request?",
"route": "Diagnostics, privacy, security escalation",
"requiredEvidence": "Customer-reviewed diagnostic bundle only when needed, policy URL involved, sanitized reproduction details, and no raw chats or private files.",
"replyMacro": "Diagnostics Request",
"noGoRule": "Escalate suspected payment, account, secret, or private-data exposure before giving operational guidance."
},
{
"id": "computer-control-safety",
"intakeSignal": "Customer reports a computer-control command, approval prompt, automation, file action, browser action, or high-impact safety concern.",
"firstQuestion": "What command was given, what result was expected, what happened, and did a high-impact approval prompt appear?",
"route": "Computer-control safety escalation",
"requiredEvidence": "Exact command, expected result, actual result, approval prompt state, app version, OS version, and redacted diagnostics.",
"replyMacro": "Computer Control",
"noGoRule": "Do not ask the customer to retry risky actions before support reviews the high-impact approval and diagnostics evidence."
}
],
"supportRoundtripEvidenceTemplate": {
"id": "support-roundtrip-proof-template",
"label": "Support Roundtrip Proof Template",
"uploadSlot": "support-roundtrip",
"dashboardField": "billingRehearsal.supportInboxConfirmed",
"supportEmail": "support@support.porterlabz.com",
"blockerPreservedWhenMissing": "Keep billingRehearsal.supportInboxConfirmed=No until both receive and reply proof are uploaded and reviewed.",
"requiredArtifacts": [
{
"id": "receive-proof",
"label": "Receive proof",
"include": "Support address, received timestamp, test subject, ticket/reference ID if available, and non-sensitive mailbox view showing the ticket arrived.",
"redact": "Hide inbox passwords, recovery details, unrelated mailbox content, full sender address when not needed, message body private data, and account settings."
},
{
"id": "reply-proof",
"label": "Reply proof",
"include": "Support address, sent timestamp, same test subject or ticket/reference ID, and a short non-sensitive reply excerpt.",
"redact": "Hide unrelated recipients, private customer text, account recovery content, credentials, and any payment details."
},
{
"id": "dashboard-update-proof",
"label": "Dashboard update proof",
"include": "After both proofs are reviewed, show billingRehearsal.supportInboxConfirmed set to Yes and the support-roundtrip upload slot populated.",
"redact": "Do not include raw mailbox credentials, raw bridge tokens, Stripe secrets, API keys, recovery codes, or unreviewed customer diagnostics."
}
],
"reviewChecklist": [
"Receive proof and reply proof refer to the same test ticket.",
"The proof shows the configured support inbox, not a personal inbox alias.",
"The upload contains no secrets, passwords, private documents, full card numbers, raw tokens, or unrelated customer content.",
"Only after review should billingRehearsal.supportInboxConfirmed move from No to Yes."
],
"noGoRule": "A support email value or canned reply does not clear the support roundtrip blocker; only sanitized receive and reply evidence clears it."
},
"firstResponseQaChecklist": [
{
"id": "classify-before-macro",
"step": "Classify the ticket before choosing a macro.",
"check": "Match the first customer message to the support intake decision tree and billing support triage route.",
"passSignal": "One intake route, reply macro, escalation owner, and first-response target are selected.",
"blockerRule": "Do not send a generic reply when money movement, activation, privacy, security, or high-impact action risk is unclear."
},
{
"id": "redacted-evidence-only",
"step": "Ask only for redacted evidence.",
"check": "Compare the draft reply against the route requiredEvidence and redactionRule before sending.",
"passSignal": "The reply requests no passwords, raw API keys, raw license blobs, full card numbers, private files, raw transcripts, or recovery codes.",
"blockerRule": "Escalate instead of asking the customer for private data, account recovery details, payment secrets, or unreviewed diagnostics."
},
{
"id": "preserve-missing-proof-blockers",
"step": "Preserve readiness blockers when proof is missing.",
"check": "Confirm support roundtrip, Customer Portal, hosted billing links, and policy review evidence exist before claiming readiness or completion.",
"passSignal": "The reply names what is being reviewed without saying support, billing, cancellation, refund, or paid-beta readiness is complete.",
"blockerRule": "A canned reply, support email value, plan, or placeholder does not clear supportInboxConfirmed, Customer Portal, billing support, legal review, or paid-beta readiness."
},
{
"id": "route-escalations-before-promises",
"step": "Route escalation cases before making promises.",
"check": "For refunds, duplicate charges, activation after checkout, privacy/security, or computer-control safety, confirm the escalation matrix owner and evidence.",
"passSignal": "The draft avoids promising refunds, reversals, cancellation completion, account fixes, or retries until the owner reviews sanitized evidence.",
"blockerRule": "Escalate before promising a customer outcome when charge ownership, policy status, portal proof, diagnostics, or high-impact approval evidence is incomplete."
}
],
"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 support@support.porterlabz.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": "cancellation-portal-help",
"category": "Cancellation And Invoice Help",
"subject": "NyrA cancellation or invoice help",
"body": "Please use the customer portal link from your receipt or NyrA Settings to manage cancellation, invoices, and payment methods. If the portal link fails, send the checkout email, approximate purchase time, app version, and redacted support diagnostics. Do not send card numbers, Stripe secrets, passwords, or recovery codes."
},
{
"id": "activation-after-payment",
"category": "Paid Activation After Checkout",
"subject": "NyrA activation after payment",
"body": "Please confirm whether checkout completed, whether NyrA returned to the app, and the exact activation error text. Attach the redacted support diagnostics file from Settings so we can separate checkout, webhook, portal, entitlement, and device activation failures without asking for private payment details."
},
{
"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": 2,
"readyActions": 7,
"supportCommands": 5,
"supportEvidenceItems": 7,
"supportEscalationItems": 5,
"billingSupportTriageItems": 4,
"supportIntakeDecisionItems": 4,
"firstResponseQaItems": 4,
"cannedReplies": 6
},
"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"
}
}