Connect-Tab Role-Row Consistency

First full execution — 2026-08-27 · plan authored 2026-08-10, never previously run
Overall: MIXED 7 scenarios substantially PASS 2 concrete FAILs 4 BLOCKED / not attempted

The plan: Check that every "Connect an app" row on the platform — across all four activatable assistants, before and after activation — follows the new two-control design: a badge that shows which app(s) are in play (with a dropdown arrow only when there are 2+ apps), and a separate status button that only handles connect/disconnect, never mixed together.

What we tested: Walked the Connect screen for On-Brand Support, Waitlist + Launch, Retreat Booking, and Workshop Booking — both the "setting it up" screen and the "already running" screen for the two assistants that are live. Opened every badge and every status menu we could safely open without touching a real connection or a live booking assistant someone else was actively testing.

What we found: The core redesign works — rows for a single app (WhatsApp, AI Model) never show an unnecessary dropdown, and rows for multiple apps (Waitlist's WhatsApp + Resend, Storage's Google Sheets/Supabase/MystFlo) do. But we found two real inconsistencies: (1) the "Choose a different AI model" option shows up on the AI Model menu even though there's nothing to switch to yet — it should be hidden, not just grayed out; (2) the "Disconnect" option on the Waitlist assistant's Communication row (which has 2 apps behind it) looks identical to a normal, one-click single-app disconnect — missing the visual warning that it should ask which app first. We also found a likely-fixed bug: the "Switch account" menu item on an active assistant now correctly explains "pause first" instead of just doing it — that looked broken in the plan's notes from two weeks ago, and it isn't broken anymore.

What we fixed: Nothing — this is a read-only QA walk. Findings are flagged below for follow-up, not filed as new issues (that's a team-lead call per this plan's scope).

Readiness call: About 75% proven. The row-shape contract holds up cleanly everywhere we could look. The two real misses are both small, targeted UI fixes. Three things still need a dedicated, single-owner re-run: the multi-app "Disconnect" click-through (stopped short for safety — it risks the account's one shared WhatsApp connection), the narrow-screen (375/768px) layout check (the shared browser window made resizing unreliable), and the Retreat Booking pre/post label check (no Retreat Booking instance is active to compare against).

Environment notes

This walk ran concurrently with another QA session testing the WhatsApp booking flow on the same account, in the same Chrome browser (separate tabs). A real $1.75 Workshop Booking run landed mid-walk from that other session — the wallet balance drop from $210.44 → $208.69 is theirs, not caused by anything clicked here. One unplanned full session logout occurred mid-walk (not triggered by this session) and was used as a genuine window to run the guest-mode steps for real. resize_window calls to test 375px did not reliably change the shared window's actual rendered viewport, so the 640px stack-boundary scenario is marked environment-blocked rather than faked. Two destructive-risk clicks (a live multi-app Disconnect, and pausing a currently-in-use booking assistant) were deliberately stopped short of completion — see the relevant scenarios below.

Scenario results

CT-CONNECT-01 — Guest pre-activation shape sweep PASS (1–6) BLOCKED (7)

#Result
1PASS — /explore renders signed-out, no auth redirect
2PASS — On-Brand Support: Communication/AI Model/Alerts rows, none carry a caret, no Storage row
3PASS — Waitlist + Launch: Communication badge "WhatsApp Business + Resend ▾" WITH caret; Storage badge "Google Sheets ▾" WITH caret
4PARTIAL — in-place expansion confirmed, but ONE flat "2 apps" list instead of two headed pick-groups; Gmail visible ("coming soon") though the plan says it should be hidden
5PASS — Retreat Booking: TWO rows, not legacy V1 checkmark list
6PASS — Workshop Booking: same shape, closes V4 suspicion
7BLOCKED — width repeat not reliably executable (shared window)

CT-CONNECT-02 — Program/Retreat Launch Kit NOT RE-RUN

Left as the plan's own note marks it: stale, superseded by tmpl-wmkt01-test-plan.md §12.

CT-CONNECT-03 — Logged-in pre-activation, real connected state PASS (1–4) BLOCKED (5)

#Result
1PASS — real "Connected ⌄" status, Communication caret present
2PASS — Storage status menu: plain "Disconnect" (no ellipsis, muted), helper text points to the badge instead
3PASS — Storage badge expands into a real radiogroup (MystFlo Storage / Google Sheet / Supabase); did not change selection
4PASS — Retreat Booking: TWO rows confirmed
5BLOCKED — width repeat not executed

CT-CONNECT-04 — 9P3X no-caret sweep + WSBK01 via Personalize gate MIXED

#Result
1PASS — no caret on any of the three rows, no Storage row
2PASS — AI Model badge does nothing on tap
3FAIL — AI Model status menu contains a disabled "Switch account…" item — the plan requires it never appear here (see finding below)
4PASS — Workshop Booking: Communication no caret, Storage caret
5PASS (by inspection) — same component family as On-Brand Support's Communication row
6BLOCKED — width repeat not executed
On-Brand Support AI Model status menu showing a disabled Switch account item
CT-CONNECT-04 step 3 — FAIL evidence. The AI Model row's status menu shows "View connection", "Disconnect" (disabled), and "Switch account…" (disabled, "MystFlo AI is the default option at the moment."). The plan requires this menu never contain a "Switch account…" item on this row — AiModelPicker is meant to carry its own distinct, sanctioned AI-model switcher, not the generic account-switcher label even in a disabled state.

CT-CONNECT-05 — Post-activation Connect tab MIXED

#Result
1PASS — identical shape to pre-activation, no V2 boxed cards
2PASS — no caret on either single-app row
3NOTABLE — "Switch account…" opens a muted "Pause to switch this connection" explainer instead of acting directly. The plan (dated 2026-08-10) says this is confirmed NOT BUILT pending #3120 and expects the item to be plain/always-enabled. What's live today already matches the intended design — likely #3120 shipped since the plan was written
4Not directly tested — no broken connection exists to confirm Reconnect independently
5BLOCKED — no Active Retreat Booking instance on this account
6BLOCKED — width repeat not executed
Workshop Booking post-activation Pause to switch this connection explainer
CT-CONNECT-05 step 3 — positive finding. Clicking the muted "Switch account…" item on an Active instance opens: "Pause to switch this connection — Switching mid-run risks a message or a charge landing on the wrong account. Pause this assistant to connect a different one — or, if this connection is wrong entirely, start a new instance instead." with "Pause to switch" / "Start a new instance →" actions. This matches the intended Active-state mockup behavior the plan says is NOT BUILT — recommend confirming/closing #3120. Did not click "Pause to switch" (would have paused a live, in-use instance).

CT-CONNECT-06 — Paused unmutes Switch account PARTIAL

Step 1's premise (menu shows Switch account MUTED with an explainer, not acting directly) is already true today per CT-CONNECT-05 step 3 — this contradicts the plan's "expected to fail" framing pending #3120.

NOT ATTEMPTED — SAFETY Steps 2–5 (actually pause/resume the instance) were deliberately skipped: this is one of only two Active instances on the shared account, and it logged a real booking 11 minutes before this scenario ran from the concurrent parallel session. Pausing it mid-flow risked breaking their test.

CT-CONNECT-07 — RTBK01 label consistency PASS (pre) BLOCKED (post)

#Result
1–2PASS — pre-activation Communication label reads exactly "Communication", NOT the DB's literal "Where guests message you"
3–4BLOCKED — no Active Retreat Booking instance exists to compare the post-activation label against; this is the same open item the plan's own team-lead notes flagged as highest priority
5PASS — Storage row carries a caret even with one real destination (internal-only exception, task #5, confirmed)
Retreat Booking Connect step showing Communication label
CT-CONNECT-07 steps 1–2 — PASS evidence. Pre-activation, the Communication row's label reads "Communication" — the hypothesized DB-literal-label bug does not manifest here. The post-activation comparison remains open, blocked on an Active Retreat Booking instance.

CT-CONNECT-08 — WAITL1 multi-app disambiguation MIXED

#Result
1PASS — badge "WhatsApp Business + Resend ▾" with caret
2PARTIAL — functionally correct three-state health, but one flat list not two headed groups; Gmail visible not hidden
3PASS — collapses cleanly
4FAIL — status button menu reads plain "Disconnect", no ellipsis — visually identical to a normal single-app disconnect with no signal it opens a which-app picker first
5–7NOT ATTEMPTED — SAFETY — clicking through risks immediately disconnecting the account's one real, shared WhatsApp Business connection (used by 2 assistants, one mid-flow in the concurrent session)
Waitlist and Launch Communication row expanded showing WhatsApp, Resend, and Gmail coming soon
CT-CONNECT-08 step 2 / CT-CONNECT-01 step 4 — evidence. Expanding the Communication badge shows one flat "COMMUNICATION — 2 APPS" list (WhatsApp Business · Resend · Gmail "coming soon") rather than two separately-headed pick-groups. WhatsApp shows Connected, Resend shows a white Connect button — functionally correct three-state health. Gmail is visible here though the plan's row-inventory table says it should be hidden per the T453 CASA-audit gate.
Waitlist and Launch Communication status button menu showing plain Disconnect with no ellipsis
CT-CONNECT-08 step 4 — FAIL evidence. The status button's menu shows plain "Disconnect" — no ellipsis. The plan requires "Disconnect…" here specifically to signal that clicking it opens a which-app disambiguation picker rather than disconnecting immediately. This click was not completed for safety (see notes above).

CT-CONNECT-09 — Copy rules (expiring/expired, no "token") BLOCKED (no fixture)

Re-checked at execution as instructed: the Connects hub shows all 6 connections ("MystFlo AI", "MystFlo Storage", "WhatsApp Business", "Google Workspace", "Stripe", "Slack") reading Healthy. No warning/critical connection exists right now.

CT-CONNECT-10 — 640px stack boundary, all six row species BLOCKED (environment)

resize_window to 375×800 reported success but did not reliably change the tab's actual rendered viewport in this shared browser window (screenshot stayed 1456×821 afterward; window.innerWidth/outerWidth read inconsistent values). Forcing a real resize risked corrupting the concurrent session's own in-flight responsive layout. Needs a dedicated, non-shared browser window.

New findings for follow-up

Known gaps re-confirmed (cite, don't re-file)

Full scenario detail, Data In/Data Out, and environment context: docs/testing/click-through/connect-tab-consistency-findings-2026-08-27.md.