UX verification checklist — DOUB launch flows (approved via cl8y-ecosystem-qa #9) #38
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:open_issues
agents
agent:security_audit
agent:verify
area
timecurve
arena
arena-v2
audit
block:feature_review
block:security
bug
contracts
design
devops
docs
documentation
enhancement
epic
feature
frontend
indexer
low priority
megaeth
operations
ops
performance
QA
qa checklist
referrals
removal
security
smart-contracts
tech-debt
testing
time-arena
timecurve
visual-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
code/yieldomega#38
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
@PlasticDigits approved via cl8y-ecosystem-qa#9. Full checklist committed at
specs/YO-DOUB-Launch-UX-Flows.mdin cl8y-ecosystem-qa (commit 556fdc0).Scope
Frontend UX verification for YO's DOUB launch on MegaETH devnet → mainnet. Covers the full pre-launch / live-sale / post-sale lifecycle plus cross-cutting concerns (mobile, a11y, error states).
Flows identified (15 total)
Pre-launch
Live sale
Post-sale / adjacent
Cross-cutting
Notable calls
Hand-off
Intended for whoever picks up manual UX QA. Checklist is self-contained per flow. Log findings as new YO issues, tag @Brouie for triage.
Full spec: https://gitlab.com/PlasticDigits/cl8y-ecosystem-qa/-/blob/main/specs/YO-DOUB-Launch-UX-Flows.md
mentioned in issue #59
mentioned in issue #61
mentioned in issue #72
Partial walkthrough today on
7b0f37dSKIP+KUMBAYA stack with sale live. Evidence below for F-01 through F-08; F-09 through F-15 deferred to a follow-up session.F-01 Pre-launch gate — PASS
Set VITE_LAUNCH_TIMESTAMP to 1 hour ahead, restarted Vite. Hit all 7 routes with hard-refresh:
Countdown ticked consistently across navigations (~30s deltas across screenshots). Branded shell rendered on all gated routes (YIELDOMEGA logo, DOUB LAUNCHES IN, Telegram/X.com/Docs/Agent Skills CTAs). Console issues observed were standard background noise (MetaMask/Backpack provider conflict, wagmi WC project ID empty notice, AudioContext autoplay) — none gate-specific.
F-02 Launch moment — PASS
Set VITE_LAUNCH_TIMESTAMP to 60s ahead, restarted Vite, opened / and watched live. At 00:00:00 the gate flipped without manual reload:
Idle-stale-timer check skipped (would need hours at gate).
F-03 First-time visitor, sale live — PASS
Disconnected wallet via MetaMask, refreshed /timecurve as no-wallet visitor:
F-04 Wallet connect during live sale — PASS
Reconnected wallet:
F-05 Buy charms (CL8Y -> TimeCurve) — PASS
Direct CL8Y buy path exercised:
Below-MIN UX item not separately exercised (slider doesn't visibly let you go below MIN; would need manual amount input to test).
F-06 Timer-extension buy — PASS
Across 4 successful buys today (1 Kumbaya path A, 1 Kumbaya path B, 2 CL8Y direct):
Urgency-class transition not exercised (timer at 23+ hours, nowhere near deadline). Would need warp setup which is ground we already covered in #83.
F-07 WarBow PvP — PASS
Arena tab walkthrough on connected wallet:
F-08 Podium standings — PASS
All 4 categories rendered with correct % breakdowns:
Each category shows 1st/2nd/3rd rows with correct empty-state copy: 'Largest reserve slice in category' / 'Reserve payout preview' + decimal/abbr 0. No broken rows.
Bonus: Live Battle Feed shows MOMENTUM SHIFT rows with full enrichment (amount + decimal/abbr + 'added 120s · moved to 500 BP · Base buy +250 BP · charms 1 · BP 500 · block 10 · tx 0x059eb9c3...').
Bonus: Indexer status bar 'Indexer v1.8.0 · latest indexed block 10 · live' renders with version + block + green status pill.
Bonus: Canonical fee sinks (Protocol Detail) shows the 30/40/20/0/10 split per buy: 'DOUB/CL8Y LP (locked) 0.302 · CL8Y burned (sale proceeds) 0.403 · Podium pool 0.201 · Team / reserved 0 · Rabbit Treasury 0.101'. That's the F-05 fee preview spec line, surfaced in Protocol Detail not the buy panel.
Deferred to follow-up session (7)
Spec drift to flag (not a launch-blocker)
Notes on stack mode
Most flows above were exercised on SKIP_ANVIL_RICH_STATE=1 + YIELDOMEGA_DEPLOY_KUMBAYA=1. F-09 partial used full rich-state mode. Cycled stack 4 times today across #75/#84/#82/F-09 work.
Picking up F-09 live signed redeem and F-10 through F-15 next session.
cc @PlasticDigits
mentioned in issue #88
mentioned in issue #90
mentioned in issue #39
mentioned in issue #91
mentioned in issue #92
Continued walkthrough yesterday on
799cf6fSKIP+KUMBAYA+NO_COOLDOWN stack. Evidence below for F-09 through F-12; F-13 / F-14 / F-15 deferred to a follow-up session.F-09 Stake-at-launch / live signed redeem — PASS
Walked on the post-end stack pivot (chain warp 85500s + endSale() called from deployer keypair, status 1, SaleEnded event emitted). State pre-redeem on the running stack:
deadline()past chain ts,ended()=true,charmRedemptionEnabled()=true0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266:charmWeight()=3e18(3 CHARM),charmsRedeemed()=falsetotalCharmWeight=3e18,totalTokensForSale=1e24Live signed
redeemCharms()from deployer wallet. Post-tx state:charmsRedeemed(0xf3...2266)flipped false → true (one-way, confirms guards from B4)charmWeight(0xf3...2266)=3e18preserved post-redeem (NOT zeroed — confirms contract semantics flagged in 0428 as a spec note: only the redeemed flag flips, weight is kept for historical reference)1,000,000e18(1M DOUB) — pro-rata math correct (totalTokensForSale * charmWeight / totalCharmWeight = 1e24 * 3 / 3 = 1e24)Filed cosmetic follow-up #90 — "Already redeemed" / stake-at-launch panel shows historical CHARM held + worth-at-launch projection, not the actual DOUB amount received.
F-10 DoubPresaleVesting — GAP, filed as #92
No
/vestingroute in the frontend, noDoubPresaleVestingdeployment inDeployDev.s.sol, no UI surface for vesting checklist verification. Filed as #92 with suggested resolution: deploy DoubPresaleVesting in DeployDev fixture + add /vesting route + wire claim/schedule UI.F-11 External venue placeholders — PARTIAL PASS, filed as #91
/collection— PASS. Clean UnderConstruction-style placeholder, same shell + mascot system, "Open TimeCurve" CTA wired./rabbit-treasury— PASS. Same placeholder pattern, CTA wired./referrals— SPEC DRIFT. Route is fully built and functional: referral registration form live, 5% bonus read direct from chain, CL8Y burn flow wired. Spec lists this route as "under construction." Filed as #91 to align spec to implementation.F-12 Kumbaya / Sir external venue placeholders — PASS
/kumbaya— PASS. Clean external-venue placeholder with proper trust framing, build-time hint env vars, "Outbound route ready, live depth readout not wired yet" status banner. Matches spec./sir— PASS. Same pattern as/kumbaya. Matches spec.Deferred (next session)
cc @PlasticDigits
mentioned in issue #93
Walked deferred F-13 / F-14 / F-15 (partial) on
282eb62SKIP+KUMBAYA+NO_COOLDOWN stack today. Closing #38.This builds on yesterday's partial close note (F-09 PASS / F-10 GAP filed as #92 / F-11 partial PASS + spec drift filed as #91 / F-12 PASS).
F-13 — Mobile layout (390x844): PASS with 1 finding
Walked all 10 routes at iPhone 12 Pro preset (390x844) via Chrome DevTools device emulation:
/— PASS/timecurve— PASS/timecurve/arena— PASS/timecurve/protocol— PASS/rabbit-treasury— PASS/collection— PASS/referrals— PASS/kumbaya— PASS/sir— PASS/vesting— PASSLayouts all reflow correctly to mobile width. Nav menu collapses appropriately. Cards stack vertically. Sliders, inputs, and CTAs remain tap-target sized.
Finding filed as #93 — the global "Canonical fee sinks (read-only)" panel that appears on every route truncates each sink address (40 char hex) at the right edge with no scroll affordance, no tap-to-expand, no copy-to-clipboard, and no ellipsis indicator. Mobile users cannot read or verify the sink addresses on the most trust-sensitive read-only panel. P2 medium, single-component fix.
F-14 — Error states: 2 PASS + 2 findings
F-14.1 — Wrong chain: PASS indicator + finding filed (#95)
Switched MetaMask from Chain 31337 to BNB Chain. YO header pill correctly flipped to "Wrong Network" indicator. Indicator works.
However, finding filed as #95: the "Wrong Network" pill is informational only. The BUY CHARM CTA stayed clickable, frontend built buy calldata against
0x59b670e9fA9D0A427751Af201D676719a970857b(the Anvil TimeCurve proxy address) and shipped the tx to MetaMask on BSC mainnet. Two saves prevented impact:But the underlying gap is real: write-action CTAs (BUY CHARM, Register & burn CL8Y, Claim DOUB, etc.) are not gated on chainId match. Filed as MEDIUM-HIGH severity because at TGE users will be juggling MegaETH + BSC + ETH mainnet to bridge, and a wrong-chain BUY CHARM click is a plausible everyday mistake.
F-14.2 — RPC down: PASS
Disconnected the SSH tunnel forwarding for port 8545 to simulate RPC unreachability. Hard-refreshed
/timecurve. Frontend correctly degraded:0xf3...2266)Safe degraded state. Users cannot interact with stale data. Polish nit (no explicit "RPC offline / retrying" copy to differentiate fresh-page-load from mid-session-disconnect) was noted but not severe enough to file.
F-14.3 — Indexer down: finding filed (#96)
Disconnected the SSH tunnel forwarding for port 3100 only (kept 8545 + 5173 alive). Frontend behavior:
net::ERR_CONNECTION_REFUSEDerrors in ~10 seconds, all targeting:3100/v1/timecurve/chain-timer,/buys, etc., aggressive retry with no backoffReal user-trust gap: a user with degraded indexer connectivity sees "Waiting for the first buy" and may think they're early when 100+ buys have actually happened (just can't fetch them). Filed as #96 MEDIUM with multiple resolution options (explicit offline banner, stale-data badges, exponential backoff, distinguish empty-vs-offline copy).
F-14.4 — Wallet mismatch synthesis: PASS
Switched MetaMask active account from deployer
0xf39Fd6...2266to personal test wallet0xc46b15...0650mid-session. Frontend correctly:accountsChangedevent0xf3...2266to0xc4...065050000000to0(personal wallet has 0 CL8Y on this fresh stack)No frozen old-wallet data, no stale balance display. PASS.
F-15 — Accessibility: PARTIAL with 1 finding (#97); full audit deferred post-TGE
F-15.1 — Keyboard focus visibility: finding filed (#97)
Tabbed through the page from a focused position. Focus moves correctly through interactive elements (verified via
document.activeElementpolling in console — element changes on each Tab) but no visible focus indicator appears on any element. Click-to-focus works (focus styles applied on mouse interaction) but Tab-to-focus is silently invisible.WCAG 2.4.7 (Focus Visible, Level AA) violation. Filed as #97 with a one-rule CSS fix recommendation (
:focus-visiblerule on interactive selectors with appropriate outline + offset).F-15.2 — Full a11y audit deferred to post-TGE
Semantic markup audit, ARIA label coverage, screen reader announcements, color contrast checks, and keyboard interaction patterns (Enter to submit, Escape to close modals, arrow keys on sliders, etc.) were not exhaustively walked this session due to time pressure on TGE day. The keyboard focus-visible finding (#97) is the most critical and is filed. The remaining a11y items are deferred to a dedicated post-TGE audit session.
#38 closure summary
15 of 15 F-flow rows walked across the two-day session (yesterday + today):
note_3296...)note_3301812521)Issues filed during #38 walkthrough:
Closing #38. The full F-flow checklist is exercised, every gap that surfaced is now either fixed (and verified) or filed with severity + suggested resolution.
cc @PlasticDigits
mentioned in issue #115