Real browser against https://platform.mystflo.com/brain, signed in as Peyton WP (peytonworkprojects@gmail.com). Re-runs CT-BVOICE-11 and CT-BVOICE-12 against PR #3821 (merged e075b579, confirmed deployed), which claimed to fix both #3781 (Branding row stale after Save) and #3813 (typed sample lost on sheet close). CT-BVOICE-12 ran first (no cost); CT-BVOICE-11 ran second with Peyton's explicit per-sitting sign-off for the real $5 charge.
| Scenario | Issue | Result | Why |
|---|---|---|---|
| CT-BVOICE-11 | #3781 — Branding row stale after Save | PASS | Row summary line updated in-session AND survived a hard reload — the exact condition that was broken before. |
| CT-BVOICE-12 | #3813 — typed sample lost on sheet close | FAIL | Regression reproduced identically to the original repro — zero localStorage writes observed, sample lost on both soft reopen and hard reload. Reopened with new evidence. |
Opened the Branding row's "How you sound" → "Add a real reply you wrote" composer (ShareInline). Note: this account already has a live voice, so this door opens into the REFINE view, not the pre-voice GATHER view CT-BVOICE-09 originally tested — but it's the same underlying component the fix's own file citations named.
Reproducible, confirmed twice with two different sample texts. Checked localStorage directly via the JS console (Object.keys(localStorage)) while the text sat live in the field, before closing anything — no matching keys, no write occurred even transiently. Closed via ✕ without submitting, reopened (soft reopen, no reload) — textarea empty. Hard-reloaded and reopened again — still empty. No ai_usage row, no brand_voice_v2 write expected or observed (input/persistence-only scenario).
Likely root cause: the fix's persistence layer (brandVoiceSampleStage.ts + initialSampleText/onSampleTextChange threading) is not reaching this render path. Most likely explanation: the "Add a real reply you wrote" fold on the REFINE (live-voice) view is a separate/differently-wired ShareInline instance than the one the fix's prop-threading actually reached (e.g. only the GATHER-mode composer inside BrandVoiceGenerateInputs.tsx got wired). Reopened as issue #3813 with this evidence.
Pre-run Branding row summary line: "Words to use: happy to help, walk you through it, no small print, tops." Wallet: $239.85. Opened "How you sound" → Regenerate ($5.00), typed a neutral re-check note, submitted.
Wallet debited $239.85 → $234.56 (~$5.29, matches the $5.00 price plus markup). Landed on the "PREVIEW · READY" three-door review sheet (Save to playbook / Regenerates / Discard — 2.9p architecture, never an immediate "Make it live"). New content correctly absorbed and extended the account's existing signature phrases ("Happy to help", "Good question", "no small print", "two minutes, tops").
Clicked Save to playbook — the sheet itself updated immediately (already known-working per #3781's original repro). Closed the sheet, returned to /brain in the same session: the Branding row's outer summary line HAD updated — the exact opposite of the original bug. Hard-reloaded (cmd+r) and re-checked: row still showed the new content, not the pre-run text — this is the exact condition #3781 reported as broken (stale text surviving even a hard reload), now fixed. Re-verified again minutes later on a fresh tab/navigation — consistent.
Did NOT Discard — kept the new voice live per the "Save to playbook" test script, permanently changing the account's live voice (unlike CT-BVOICE-10, which Discarded).
"You, in one line" inside the sheet stayed "friendly" (the old value) after Save — this is the separately-tracked voicePreviewOneLiner() gap (src/lib/pendingPreview.ts looks for fields the generation schema never populates). Needs an EF schema change, not part of PR #3821's scope. Noted for completeness, not filed as a new finding.
Not independently verified via a raw DB read — querying brain_profile is outside the main session's allowed non-customer read list, and background/sub-agents never query prod per the binding prod-DB-read policy. The PASS verdict for CT-BVOICE-11 rests on frontend evidence: the row updated in-session AND survived a hard reload, which rules out a client-side cache artifact since a hard reload re-fetches from the server. Flagged as inferred from frontend evidence, not independently DB-verified.
brain_profile.brand_voice_v2 timestamp/content directly.