brain-flow-fixes — QA report

Executed 2026-09-01 · Cloud QA + Chrome · https://platform.mystflo.com · Peyton WP · main @ 387c0132e

For Peyton

The plan: verify the 5 PRs in today's brain flow-fixes batch actually work on the live site (chapter-fork on the Teach/Share door, PDF/DOCX/TXT file uploads, the playbook TLDR rendering nicely, the new "Add to Brain" menu with a real Google reconnect, and the old "keep checking my Brain" toggle being fully gone) — plus two extra checks pulled from your own live walk on theoffline-club.com earlier today.

What we tested: signed in as your WP test account, wiped the Brain clean (twice), reran a real Google reconnect end to end, uploaded real PDF/DOCX/TXT files, pasted the same multi-chapter business text and URL you'd expect a founder to share, and walked the "Keep my brain checked" flow start to finish.

What we found — 3 things work well: the Google reconnect for "Add to Brain" works exactly as designed; the new "Add to Brain" menu shows everything correctly; "Keep my brain checked" is genuinely gone.

What we found — 2 things are broken, not just rough: the headline fix for sharing a multi-location business (the Teach/Share door) doesn't work — it silently treats it as one business. Uploading ANY file (PDF, Word doc, or plain text) to the Brain is completely broken — every file either throws an error or silently does nothing.

What we fixed: nothing this session — filed 4 GitHub issues so each routes to its own fix pass: #4348 (chapter-fork doesn't fire, P0), #4327 (file uploads all fail, P0), #4340 (Google Doc content never read, P1/P2), #4349 (reset script gap, fast-follow).

Readiness call: NOT ready. 2 of the 5 fixes in today's batch don't work on the live site. The other 3 check out.

Scenario-by-scenario

CT-BFF-00 — Build gate: which PRs are live on this build PASS

All 5 PRs confirmed MERGED via gh pr view by direct number lookup: #4344, #4341, #4343, #4346, #4146. Hostname confirmed platform.mystflo.com via tab URL throughout the walk.

CT-BFF-01 — TLDR + recap render in the ink editorial ramp PASS (substituted precondition)

Brain was already wiped when the sitting started (playbook-first.md's CT-PBF-06 dirty content was gone) — Sitting 1's intended "existing dirty playbook" precondition could not be walked as specified. Verified the render mechanism instead against a different pre-existing artifact: a week-old "Our read written" TLDR+recap for theoffline-club.com that survived the pre-session state (content-agnostic render check, not a like-for-like CT-PBF-06 re-walk).

Renders with a clear "What we understood" eyebrow, an "Assistant doesn't read" chip, body prose (not a flat wall), and distinct "STANDS OUT" / "WHAT WE STILL CAN'T SEE" section headers — matches the ink-editorial num/readby/ctitle-deck/facts-block pattern, not a bullet-list dump.

CT-BFF-01: TLDR + recap rendered in ink-editorial style
CT-BFF-01: TLDR + recap rendered in ink-editorial style

CT-BFF-02 — cant_see[] renders visually dimmer than stands_out[] AMBIGUOUS

Zoomed comparison of a "stands out" row vs a "cant_see" row shows both at very similar brightness — could not confirm a clearly reduced opacity/weight from a screenshot judgment call alone (no DOM/computed-style inspection tool was available). Needs a follow-up pass with actual style inspection.

CT-BFF-02: zoomed stands_out vs cant_see comparison, ambiguous
CT-BFF-02: zoomed stands_out vs cant_see comparison, ambiguous

CT-BFF-03 — Chapter-fork fires on the Teach/Share door from shared COPY alone FAIL

Precondition: wiped Brain (confirmed empty). Pasted verbatim into the Teach/Share composer, then clicked Read.

Data In
Hi, it's Miri! I run the Bali chapter of The Offline Club — phone-free hangout nights for people who want to actually talk to each other. We're part of a growing network of city chapters around the world.
Data Out
Single-face "Quick check — is this you?" card. BUSINESS NAME field pre-filled: "The Offline Club" (the parent, unscoped). No chapter-fork rows offered at all.

Did NOT click "That's me — run" (would trigger a wrong-scope paid research charge).

CT-BFF-03: unscoped Quick check, Business Name = The Offline Club (FAIL — expected the chapter-fork sheet)
CT-BFF-03: unscoped Quick check, Business Name = The Offline Club (FAIL — expected the chapter-fork sheet)
CT-BFF-03: reopened, confirmed same result
CT-BFF-03: reopened, confirmed same result
scenario:      CT-BFF-03
failed step:   1 (paste chapter-fork copy, expect identity-scope sheet)
expected:      "From what you shared, this looks like more than one business — which one is yours?" sheet, brain.html#f34-teach-scope
actual:        single-face "Quick check — is this you?" card, Business Name = "The Offline Club" (verbatim, unscoped)
frame ref:     brain.html#f34-teach-scope
layer guess:   frontend or backend — detectBusinessFaces() not firing at all on Teach/Share door for copy-only trigger, OR its output is being ignored/discarded by ShareInline.tsx's rendering branch
PRD AC:        AC-BRAIN-148

CT-BFF-04 — Same fork fires from a plain URL (widened path trigger) FAIL

Fresh composer instance (page reload, no stacking on CT-BFF-03's state).

Data In
https://www.theoffline-club.com (via the Teach/Share composer, NOT the site-read field)
Data Out
"Your site — read... 1 page" completed, THEN identical single-face "Quick check — is this you?" card, Business Name = "The Offline Club" (parent, unscoped).

Did NOT confirm/run. Retested clean to rule out stale state — same result both times.

CT-BFF-04: same unscoped result for the URL trigger
CT-BFF-04: same unscoped result for the URL trigger
CT-BFF-04: reopened confirm, same result
CT-BFF-04: reopened confirm, same result
scenario:      CT-BFF-04
failed step:   1 (paste bare URL trigger, expect same fork as CT-BFF-03)
expected:      identity-scope sheet fires the same way as CT-BFF-03 (proving the fork ALSO fires on this door for a URL)
actual:        same single-face Quick check, "The Offline Club" unscoped — verbatim identical UI to CT-BFF-03
frame ref:     brain.html#f34-teach-scope (URL-trigger note)
layer guess:   same root cause as CT-BFF-03 — chapter-fork detection appears entirely non-functional on the Teach/Share door on this build, for BOTH trigger types
PRD AC:        AC-BRAIN-149

CT-BFF-05 — Confirmed chapter pick scopes the outward web-talk read too BLOCKED

Precondition unmet: CT-BFF-04 never confirmed a scoped identity (deliberately not clicked, to avoid a wrong-scope charge) — downstream consequence of CT-BFF-04's fail, not a new independent bug.

CT-BFF-06 — Connect-gate: "Add to Brain ▾" on a not-connected Google PASS

Precondition confirmed: Google disconnected via /connects before starting. Opened the Teach composer footer, clicked "⊕ Add to Brain" — dropdown opened with the full catalog exactly as specced (Google Doc, Google Sheet, separator, Upload a file, Paste text, Paste a link, Instagram profile/post screenshots, Moodboard coming-soon). Picked "Google Doc" → an inline nested ConnectionModal for Google appeared, URL stayed on /brain — no navigation to /connects.

CT-BFF-06: full Add-to-Brain dropdown catalog
CT-BFF-06: full Add-to-Brain dropdown catalog
CT-BFF-06: inline connect-gate modal, not a /connects navigation
CT-BFF-06: inline connect-gate modal, not a /connects navigation

CT-BFF-07 — Real Google OAuth round-trip resumes the SAME picker, no second click PASS (steps 1-3); step 4 weak

Step 1 PASS: clicked "Connect Google" → confirmed same-tab full-page navigation to accounts.google.com (not a popup).
Step 2 PASS: signed in as Peyton WP through the unverified-app warning and consent screen, redirected back to a CLEAN /brain URL (no leftover query params).
Step 3 PASS: WITHOUT any extra click, the Teach sheet's Google Picker auto-resumed showing REAL Drive files — no second "Add to Brain" click needed.
Step 4 not literally verified: the exact oauth-callback URL replay could not be captured (network log rolled over on the cross-origin navigation). A plain reload afterward did not spontaneously refire the picker — a weaker proxy consistent with working dedup, not the specified test.

Google left reconnected and Healthy at session end (Sheets/Docs/Drive scopes).

CT-BFF-07: Google account chooser
CT-BFF-07: Google account chooser
CT-BFF-07: unverified-app warning (expected, non-verified OAuth client)
CT-BFF-07: unverified-app warning (expected, non-verified OAuth client)
CT-BFF-07: consent screen
CT-BFF-07: consent screen
CT-BFF-07: Picker auto-resumed with real Drive files, no second click
CT-BFF-07: Picker auto-resumed with real Drive files, no second click
CT-BFF-07: /connects confirms Google Healthy at session end
CT-BFF-07: /connects confirms Google Healthy at session end

CT-BFF-08 — Google Doc with real content but no business name → proposals + identity ask PARTIAL FAIL

Fixture: a live Google Doc "QA CT-BFF-08 no-name FAQ" with real Q&A content, no business name anywhere.

Data In
Q: What time do you close?
A: 6pm most nights, later on weekends.
Q: Do you take walk-ins?
A: Yes, always.
Q: Can I bring a friend?
A: Of course, bring anyone.
Data Out
"We read this, but couldn't tell whose business it is. Share your website or your Instagram profile so we can find you — or type your business name and what you do below." — correctly names both remaining paths, but ZERO extracted FAQ proposal cards appeared anywhere on the panel (confirmed by full scroll).

"Try again" correctly revealed the composer underneath — not a dead end.

CT-BFF-08: identity ask shown, no proposals visible (scrolled to bottom)
CT-BFF-08: identity ask shown, no proposals visible (scrolled to bottom)
CT-BFF-08: Try again reveals composer
CT-BFF-08: Try again reveals composer
scenario:      CT-BFF-08
failed step:   2
expected:      proposals from the doc's Q&A land alongside the identity ask
actual:        only the identity ask renders; zero proposal cards anywhere on the panel (confirmed by full scroll)
frame ref:     brain.html#f34-share-staged-identify
layer guess:   possible content-extraction gap specific to the Google-Doc-via-picker ingestion path
PRD AC:        AC-BRAIN-150 (partial)

CT-BFF-09 — Regression: same doc source, but content DOES name the business FAIL

Fixture: a second live Google Doc "QA CT-BFF-09 named FAQ", business name IS present as the first words of the doc.

Data In
The Sunset Deck Bali - Q: What time do you close?
A: 6pm most nights, later on weekends.
Q: Do you take walk-ins?
A: Yes, always.
Q: Can I bring a friend?
A: Of course, bring anyone.
Data Out
Identical identity-ask copy to CT-BFF-08 — "Your business name" field still empty, NOT pre-filled with "The Sunset Deck Bali" despite it being the literal first four words of the document. Reproduced twice, including one fully isolated attempt (fresh reload, single action) to rule out stale state from CT-BFF-08.
CT-BFF-09: uploading the named-business Doc
CT-BFF-09: uploading the named-business Doc
CT-BFF-09: identical unscoped identity ask despite a named business in the doc (FAIL)
CT-BFF-09: identical unscoped identity ask despite a named business in the doc (FAIL)
scenario:      CT-BFF-09
failed step:   2
expected:      no identity ask; proposals land directly for confirm since a business name IS present in the doc content
actual:        identical identity-ask block as the no-name doc — confirmed twice, once fully isolated
frame ref:     no dedicated frame — prose oracle, AC-BRAIN-151
layer guess:   STRONG — the Google-Doc-via-"Add to Brain"-picker path never actually fetches/reads the Doc's real text content before running its business-name-presence check. Plausible unifying explanation for both CT-BFF-08 and CT-BFF-09.
PRD AC:        AC-BRAIN-151

CT-BFF-10 — "Add to Brain ▾" dropdown shows the full catalog, Google Sheet included PASS

Standalone /brain page. Full catalog confirmed top-to-bottom exactly as specced (same dropdown as CT-BFF-06's screenshot, Google Sheet present at the 2nd position). The Sheet-picker-opens-scoped-correctly sub-claim was not independently clicked through to confirm (ran out of time) — presence in the correct position is confirmed.

CT-BFF-11 — Same dropdown, opened from a Brain slide-over/focus-panel host NOT ATTEMPTED

Ran out of time in this walk. Neither the slide-over host nor the activation wizard's Brand Voice configure step (z=18500 fold-in) were tested. Needs a follow-up pass.

CT-BFF-12 — Real multi-font PDF upload extracts correctly FAIL

Fixture: the CT-BFF-09 Google Doc exported as PDF (real Google Docs PDF export, FlateDecode-encoded), uploaded via the Teach composer's file button.

Data In
QA CT-BFF-09 named FAQ.pdf (content = the Sunset Deck Bali Q&A above)
Data Out
Attempt 1: red banner "Edge Function returned a non-2xx status code" (verbatim). Retried once, same result. Attempt 2 (fresh composer, same file): NO error banner, but the composer instantly reset to a blank empty state with NO confirm card, NO draft — confirmed via the main /brain page showing no new step. Never reached a confirm card; the garbling check could not even be attempted.
CT-BFF-12: Edge Function returned a non-2xx status code, real PDF upload
CT-BFF-12: Edge Function returned a non-2xx status code, real PDF upload
CT-BFF-12: second attempt, silent reset to blank state
CT-BFF-12: second attempt, silent reset to blank state
CT-BFF-12: main /brain page confirms no draft was created
CT-BFF-12: main /brain page confirms no draft was created
scenario:      CT-BFF-12
failed step:   2 (upload real PDF via file button, expect organized draft with extracted text matching source verbatim)
expected:      extracted text legible, matches source Q&A verbatim, lands as organized unconfirmed draft
actual:        "Edge Function returned a non-2xx status code" OR silent no-op reset with zero draft created — never reached a confirm card
frame ref:     brain.html#f34-share-staged-pdf
layer guess:   backend — Edge Function itself erroring on PDF upload (or possibly on ALL uploads, see CT-BFF-13/14/15)
PRD AC:        AC-BRAIN-146

CT-BFF-13 — DOCX upload, same content, same pipeline FAIL

Same source doc exported as .docx, uploaded via the Teach composer file button.

Data In
QA CT-BFF-09 named FAQ.docx
Data Out
Identical "Edge Function returned a non-2xx status code" banner as the PDF case.
CT-BFF-13: identical error banner for DOCX upload
CT-BFF-13: identical error banner for DOCX upload
scenario:      CT-BFF-13
failed step:   1
expected:      extracted text matches verbatim, organized draft lands same as PDF case
actual:        "Edge Function returned a non-2xx status code" — identical failure mode to PDF
frame ref:     brain.html#f34-share-staged-pdf
layer guess:   same root cause as CT-BFF-12 — all four file-upload scenarios failed on this build, not four separate per-format bugs
PRD AC:        AC-BRAIN-146

CT-BFF-14 — TXT upload (regression) FAIL

Plain .txt file, uploaded via the Teach composer file button.

Data In
Q: What time do you close?
A: 6pm most nights, later on weekends.
Q: Do you take walk-ins?
A: Yes, always.
Data Out
NO error banner, but composer silently reset to blank with zero draft created — confirmed via the main /brain page.
CT-BFF-14: silent reset after TXT upload
CT-BFF-14: silent reset after TXT upload
CT-BFF-14: main /brain page confirms no change
CT-BFF-14: main /brain page confirms no change
scenario:      CT-BFF-14
failed step:   1
expected:      same pipeline as PDF/DOCX, no regression from the routing change (this format allegedly worked BEFORE #4341)
actual:        silent no-op, zero draft created
frame ref:     brain.html#f34-share-staged-pdf
layer guess:   same systemic upload-pipeline issue as CT-BFF-12/13 — TXT regressed too, not a PDF/DOCX-specific issue
PRD AC:        AC-BRAIN-146 (regression)

CT-BFF-15 — Unreadable PDF → honest-empty message, never a false success FAIL

A blank Google Doc (zero body text) exported to PDF, uploaded via the Teach composer file button.

Data In
Untitled document.pdf (zero body text)
Data Out
"Edge Function returned a non-2xx status code" (verbatim) — the specced honest-empty message ("PDF text extraction not available yet...") never appeared.
CT-BFF-15: generic error instead of the honest-empty message
CT-BFF-15: generic error instead of the honest-empty message
scenario:      CT-BFF-15
failed step:   1
expected:      "PDF text extraction not available yet. Please paste the text content instead."
actual:        "Edge Function returned a non-2xx status code" (verbatim) — generic technical error, not the specced honest-empty message
frame ref:     brain.html#f34-share-staged-pdf (failure sub-state)
layer guess:   whole upload Edge Function appears to be erroring uniformly regardless of input — a single systemic backend bug
PRD AC:        AC-BRAIN-147

CT-BFF-16 — Site-read door: HQ root with 2+ chapters gates on "which business is yours?" PASS — but flags a contradiction, see note

Full fresh wipe run specifically for this scenario (wallet checked ≥$15 before). After the wipe, a genuine first-run "Research my business" landing appeared with a dedicated URL field — the actual RESEARCH/site-read door, distinct from the Teach/Share composer.

Data In
https://www.theoffline-club.com (bare HQ root, via the dedicated Research field)
Data Out
"Your site — read... theoffline-club.com · 1 page" (after a transient, honest, no-charge "AI is at capacity" retry), THEN: "✦ We found more than one face on this site — which one is yours?" with TWO rows: "The part I run" (Host offline events and retreats to help people unplug from their digital devices and connect with others.) and "The whole business" (the whole business — other locations and offerings too). "That's me — run" stayed disabled until a row is picked.

Did NOT click through to confirm (closed via X) to avoid a charge — the gate-firing behavior itself was the thing under test.

IMPORTANT — needs Peyton's own re-test, not a closed-resolved verdict: this directly CONTRADICTS her own live-walk report of a straight-through read with no gate on this exact URL via this exact door. On this run the gate fired correctly. Possible explanations: non-determinism in the AI-based multi-face classifier (a false negative on her run), a URL-entry difference (trailing slash, www, etc.), a fix landing between her walk and this one outside this PR batch, or she may have used a different door than she thought. Do not mark this resolved purely on this one PASS.

CT-BFF-16: fresh Research my business landing
CT-BFF-16: fresh Research my business landing
CT-BFF-16: URL entered in the dedicated Research field
CT-BFF-16: URL entered in the dedicated Research field
CT-BFF-16: transient honest no-charge AI-capacity error
CT-BFF-16: transient honest no-charge AI-capacity error
CT-BFF-16: site read completed, gate pending
CT-BFF-16: site read completed, gate pending
CT-BFF-16: the two-row "which business is yours?" gate, firing correctly
CT-BFF-16: the two-row "which business is yours?" gate, firing correctly

CT-BFF-17 — "Keep my brain checked" is fully retired: footer card AND any separate modal PASS

Checked the /brain footer three separate times across the walk (pre-read, post-wipe, post-save) — zero "Keep my brain checked" card/toggle in any check. Walked a full research→save flow end-to-end via the Teach/Share door (theoffline-club.com, "Sounds like you? Save this read to your Brain." → Save) and watched for any interrupting modal — none appeared; the save completed directly to "50% of required" with no popup about recurring re-checks anywhere in the flow.

Note: this final flow ran through the Teach/Share door, so it inherited that door's chapter-fork bug (no scoping) and left a "Read confirmed" draft on Peyton WP's account — flagged in the account-state section below, relevant to brain-share-persist.md's queue note about needing a confirmed-free WP account.

CT-BFF-17: footer check, pre-read — no card
CT-BFF-17: footer check, pre-read — no card
CT-BFF-17: footer check, post-wipe — no card
CT-BFF-17: footer check, post-wipe — no card
CT-BFF-17: research→save flow completed with no interrupting modal
CT-BFF-17: research→save flow completed with no interrupting modal

Follow-up items (process, not scenario results)

Reset reliability gap — filed #4349: a week-old "Our read written" TLDR/recap for theoffline-club.com survived BOTH a pre-session state and a mid-session reset-brain-data.sh --execute run during CT-BFF-01/02, even though every table the script lists verified 0 rows. Likely a table (candidate: brain_read_notes) missing from the script's coverage — undermines the "empty Brain" precondition future walks on this account rely on.
QA fixtures left behind — flagging for cleanup, not deleting without asking: 2 named Google Docs ("QA CT-BFF-08 no-name FAQ", "QA CT-BFF-09 named FAQ") + their PDF/DOCX exports in Peyton WP's Google Drive, 2 orphaned blank "Untitled document" files, and local files in /Users/peytonty/Downloads/ ("QA CT-BFF-09 named FAQ.pdf/.docx", "QA CT-BFF-14 txt fixture.txt", "Untitled document.pdf"). All harmless, but someone with access to Peyton's actual Drive/Downloads should confirm before deleting.