Fact 119
For Mercury’s sync-failed state, Priya required an actionable retry button and help documentation with simplified product-level copy. Marcus required no raw vendor errors, normalized auth/permissions, source-unavailable/timeout, and unknown/retry buckets, plus idempotent retry behavior that prevents duplicate jobs on double-click.
Source evidence (1)
000604Jun 19, 2023 / 17:34 UTC-07:00
The new Figma export has Priya’s product comments and Marcus’s readiness concerns tangled together again. Figma comment export File: Mercury / Activation empty states Page: Activation empty + transitional states Section: v7 review Exported: 2023-06-19 17:18 PT Thread C-214 — Frame: 01 / No source connected (admin) Status: open 2023-06-19 15:07 Priya: Let’s make this state do exactly one job: get an admin to connect a real source. Primary CTA should be “Connect a data source.” Secondary can be the setup guide. Do not put sample import on this card in a way that reads as activation. 2023-06-19 15:16 Marcus: Implementation constraint: if sample import lives on the same surface, people will read it as the path that clears setup. That puts us right back into the activation-event confusion we just cleaned up. If it exists at all in v0.2, it needs separate styling and separate event names. 2023-06-19 15:22 Priya: Yep. If we keep it anywhere, label it preview only. No success state, no “you’re ready,” no green check off sample data. Thread C-215 — Frame: 02 / Invited member before first source Status: open 2023-06-19 15:11 Priya: This should not be a generic blank page. User should understand: the workspace exists, but an admin still needs to connect the first source. If they are not an admin, do not tease a CTA they cannot complete. 2023-06-19 15:19 Marcus: I need us to distinguish “member lacks permission” from “org has no source yet.” We can get org_has_connected_source from the server, but I do not want client-side role guessing off the session token. That will flicker on refresh and create false CTAs. 2023-06-19 15:25 Priya: Server check is fine. Product requirement is just that the user lands in a coherent explanatory state instead of dead air. 2023-06-19 15:33 Marcus: Then release note is: wait for server role/source state before rendering this branch. I would rather show a short loading state than the wrong action. Thread C-216 — Frame: 03 / First sync queued Status: open 2023-06-19 15:14 Priya: This is transitional, not empty, but it still needs to feel reassuring. Copy should say we found the source and the first live sync is running. No fake percentage unless we actually know progress. 2023-06-19 15:28 Marcus: We do not know percent and we do not know ETA tightly enough to promise one. I’m okay with neutral copy like “This usually takes a couple of minutes.” Not okay with a countdown, stepper, or anything that suggests resumable precision. 2023-06-19 15:36 Priya: Agree on no countdown. Let’s add a docs link only if the state runs long enough; otherwise it feels noisy. 2023-06-19 15:41 Marcus: Need a threshold decision for when queued becomes “taking longer than usual.” Right now QA cannot test that state because there is no agreed timeout. Thread C-217 — Frame: 04 / Sync failed Status: open 2023-06-19 15:20 Priya: This state needs to be actionable, not just apologetic. Retry button plus help docs. Please keep the copy product-level; users should not see connector internals splashed at them. 2023-06-19 15:30 Marcus: Hard yes on no raw vendor errors. For implementation I need normalized buckets before release: - auth / permissions - source unavailable / timeout - unknown / retry Also retry needs to be idempotent; double-click cannot create duplicate jobs. 2023-06-19 15:44 Priya: Good with those buckets as long as the user-facing copy stays simplified. We do not need five different flavors of failure on day one. 2023-06-19 15:49 Marcus: Unresolved on whether support contact appears in this state or only docs. I would prefer docs only in v0.2 unless support routing is wired. Thread C-218 — Frame: 05 / Sample data path Status: open 2023-06-19 15:26 Priya: I’m removing the version where sample data drops the user into an activated-looking success card. That is explicitly not the activation bar. 2023-06-19 15:29 Marcus: Thank you. If sample import remains anywhere in v0.2, it should be a sandbox / preview branch with its own copy and no shared “activated” treatment. 2023-06-19 15:35 Priya: Exactly. Sample import can help people explore, but it cannot masquerade as a live source connection. Thread C-219 — Cross-frame comment on header and explanatory copy Status: open 2023-06-19 15:32 Priya: Let’s not expose internal measurement language in the UI. We do not need to tell users “activation = real_source_connected or first_live_sync_completed within 7 days.” Translate that into normal language. 2023-06-19 15:40 Marcus: Fine for product copy. But I still need the event mapping nailed down behind the scenes so engineering, QA, and Anna are testing the same thing. Especially: invite_sent is supporting activity only, not activation, and sample_import_completed stays out. 2023-06-19 15:45 Priya: No disagreement there. User copy should talk about connecting a real source and seeing the first live data arrive. Thread C-220 — Mobile width on invited-member and failure states Status: open 2023-06-19 16:02 Marcus: Current invited-member body copy wraps badly at small widths and pushes the CTA below the fold on iPhone SE. Same issue on the longer failure copy with docs link. 2023-06-19 16:08 Priya: I’ll shorten both. I would rather cut words than shrink type. 2023-06-19 16:11 Marcus: Works for me. I just need final strings before we freeze QA screenshots. Thread C-221 — CTA labels across states Status: resolved 2023-06-19 16:15 Priya: Locking CTA labels for now: - no source: “Connect a data source” - invited member: “View setup guide” - queued: no primary CTA - failed: “Try again” 2023-06-19 16:19 Marcus: No implementation objection. Those are all mechanically safe. 2023-06-19 16:20 Priya marked thread resolved. Thread C-222 — Post-sync success framing Status: open 2023-06-19 16:34 Priya: No celebratory success card until a real source is connected and the first live data is actually through. I do not want invite accepted or sample data to feel equivalent. 2023-06-19 16:42 Marcus: That’s fine. I just need us to decide whether the user sees the success treatment on real_source_connected, on first_live_sync_completed, or only once both are true in practice. Those are different checkpoints for engineering and QA. 2023-06-19 16:48 Priya: Product intent is: success should map to “your real data is here,” not “we created an org for you.” If engineering needs a tighter trigger definition for the first pass, flag it for next review rather than filling the gap with a fake happy path. Create an internal decision note from this that separates product decisions from release-readiness constraints, and list the unresolved items we need to take into the next review. Keep it as working-team material, not a post.
Message 000604 in history