Launch-day visual QA checklist — pre-launch render + post-launch rehydration #212
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#212
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?
Scope
Launch-day QA walk on production (https://yieldomega.com). Per dev direction, the focus is three pillars: UI glitches, rapid refresh/rehydration on action, and everything works.
This checklist is two-phase because sale opens on MegaETH mainnet when the countdown on the home page hits zero. Walk §1 + §2 + §5 (cold-load parts) now — those cover pre-launch surfaces, render integrity, and gated-copy honesty. Walk §3 + §4 (action + post-launch parts) once the countdown hits zero and sale is live.
You and the other reviewer are walking the same checklist in parallel — tick boxes independently on each copy. Coordinate only when a finding overlaps; cross-pollinate via inline comments.
§1 Pre-launch render pass (walkable now)
Each route should render coherently with the countdown live, no broken shells, no infinite spinners.
/cold load — page renders TimeCurve Simple (home and TimeCurve are the same surface). BUY / ARENA / AUDIT tab nav visible, BUY active. "About TimeCurve" disclosure visible. Countdown card on the left, "Buy CHARM will unlock automatically" card on the right./or/timecurve) — "TIMECURVE OPENS IN" header, big timer (HH:MM:SS), helper copy "Stay on this page — it switches to Live automatically", leprechaun + bunny illustration anchored bottom-left. Watch the timer tick for at least 2 minutes — no visual jumps, freezes, or restarts./timecurve: "This build (env)" + "Resolved addresses" + Indexer status pill ("Indexer v1.22.0 · latest indexed block N · live") + Canonical fee sinks card. Watch the indexer pill for 30 seconds — does the block number tick up? Does the "live" indicator stay green?/timecurve/arenacold load — top header card shows "YOUR RANK", "YOUR BP", "YOUR STEALS TODAY: 0/3", "STEALS REFRESH IN: HH:MM:SS". Pre-launch gating copy "WarBow actions unlock when the sale is live" is visible./timecurve/protocolcold load — PRE-LAUNCH pill + "PROTOCOL VIEW" title. CONTRACT READS card shows: Sale Start (LOCAL + UTC), Deadline (LOCAL + UTC), Ended: false, TOTAL RAISE: 0 CL8Y / $0.00, Current Min/Max Buy: —, Current Price Per Charm Wad: 1, Prizes Distributed: false. "Refreshed every ~1.5s" copy visible./timecurve/protocolIMMUTABLE PARAMETERS + WARBOW RULE CONSTANTS + INDEXER + OWNER + WIRED CONTRACTS + FEEROUTER SINKS cards all render with their respective constant tables filled in. Each card's "yellow dot" header indicator visible./referralscold load — page title "REFERRALS", "GUIDE NEW BUYERS THROUGH THE BURROW" banner with 4 info pills, "CLAIM YOUR GUIDE CODE" card with 1 CL8Y burn cost panel + new code input. Earnings card shows zero state for unregistered wallet./referralsGUIDE LEADERBOARD — header tile shows codes registered count, recorded referral buys: 0, total guide CHARM: 0. Below: list of registered wallets, all ranked #1 (correct — tied at 0 CHARM, dense-rank #204 fix). Each row shows wallet pill + "1 onchain code registered" + "0 recorded buys with this referrer code".§2 UI glitches — visual / layout / copy (walkable now)
/timecurvecountdown card — verify "Stay on this page — it switches to Live automatically" copy is fully readable. The leprechaun + bunny illustration should not visually cross / overlap the text./timecurve"Resolved addresses" block — verify each label and its value sit on the same row without overlapping. Labels: VITE_TIMECURVE_ADDRESS, VITE_REFERRAL_REGISTRY_ADDRESS, VITE_KUMBAYA_TIMECURVE_BUY_ROUTER. Values: corresponding 0x... addresses. If label text bleeds into value text, that is a finding./timecurve/protocolLIVE BUYS card — pre-launch shows "Waiting for the first buy of this round." plus a large cream block below. Confirm the empty-state height is intentional (matches design) and not unreasonable dead whitespace./timecurve/protocolFEEROUTER SINKS / RESERVE FEE ROUTING card — confirm it renders either the populated sinks list (DOUB/CL8Y LP 30%, CL8Y burned 40%, Podium pool 20%, Team 0%, Rabbit Treasury 10% with addresses) or the loading copy "Waiting for FeeRouter address…" — not flickering between both, not stuck on the loading copy past a few seconds.dc79c8or similar). Click the pill: wallet popover opens with avatar, full truncated address (0x70...79C8style), ETH balance, Copy Address, Disconnect. Verify the truncation pattern in the popover matches what's shown in the leaderboard own-row and elsewhere (same start/end character count)./and/referralson mobile widths./this-does-not-exist) — degrades to a branded under-construction / 404, not a raw error dump.§3 Rehydration on action (post-launch unless noted)
For each item, perform the action and watch the UI for a few seconds without manually reloading. The surface should update on its own; if it does not, that is a finding.
/referrals— type a code (3-16 letters/digits) in the "e.g. luck777" input, click "Register & burn CL8Y", confirm in wallet. After settlement, the claim card transitions from "CLAIM YOUR GUIDE CODE" to "YOUR GUIDE CODE CLAIMED!" showing your code + two share link rows (/timecurve/<code>+/?ref=<code>) with Copy buttons. No stuck spinner, no double-submit window./timecurve/arena— find an in-band target (your BP must be at most 1/2 the victim's and at least 1/10 — i.e. the victim sits in the 2×–10× band versus you). Submit the steal. Attacker and victim BP both update inside a few seconds on the hero card and the Arena leaderboard./timecurve/arenapopulates with the stealer's address. Submit revenge, confirm in wallet, BP swings reflect on both wallets.§4 Console + error paths (cold-load parts walkable now)
/,/timecurve,/timecurve/arena,/timecurve/protocol,/referralswith browser console open — no severity-error storms. Warnings are OK; errors are findings. Note any errors with route + line./timecurveon a flaky connection (or watch what happens during a brief network blip). The indexer pill should reflect the state honestly. No alarming banners. No full-page crash.§5 How to file findings
For each item you cannot tick, drop an inline comment on this issue with:
Launch-blockers found pre-launch should be pinged to @PlasticDigits in Telegram immediately, not just dropped here, so they have time to land a fix before the countdown hits zero. Polish + cosmetic findings stay inline.
assigned to @nullvector_ux
Pre-walked §2.3 (Resolved addresses overlap) on production at desktop width while filing this checklist. Confirming it is a real glitch — when you walk §2.3 you will see the label text rendered on top of the address text on two specific rows:
VITE_REFERRAL_REGISTRY_ADDRESSline: label_ADDRESSoverlays the start of the address, so the row readsVITE_REFERRAL_REGISTRY_ADDRESS_ADDRESSd146e85ce4a4b6f6be11877485766adaf7instead of label-then-address.VITE_KUMBAYA_TIMECURVE_BUY_ROUTERline: same shape — labelBUY_ROUTERoverlays the start of the address, readingVITE_KUMBAYA_TIMECURVE_BUY_ROUTERBUY_ROUTER55c5ea42345522d403c1742c75b61.VITE_TIMECURVE_ADDRESSline renders cleanly (shorter label).So when you hit §2.3 you can mark it FAIL with this evidence and move on. Severity is cosmetic / polish — the full address values are still in the DOM (you can copy them), it is the rendered layer collision that breaks the visual. Same rendering pattern appears in the second "Resolved protocol addresses" block inside the bottom
AGENT CARD: FOR AGENTS ONLYagent card.Both copies of this checklist will hit the same finding — no need to file a separate issue, just leave it as a §2.3 inline note here and we will batch with the rest.
marked the checklist item 1.1 / cold load — page renders TimeCurve Simple (home and TimeCurve are the same surface). BUY / ARENA / AUDIT tab nav visible, BUY active. "About TimeCurve" disclosure visible. Countdown card on the left, "Buy CHARM will unlock automatically" card on the right. as completed
marked the checklist item 1.3 Prize Podiums section — 4 podium cards visible (LAST BUY, WARBOW, DEFENDED STREAK, TIME BOOSTER). Each shows 3 medal rows with "0 CL8Y ≈ $0 USD" and "Score: —". Defended Streak rows show "No buy streaks until timer under 15 minutes!". No bare empty axes. as completed
marked the checklist item 1.2 Countdown card
/ or /timecurve— "TIMECURVE OPENS IN" header, big timerHH:MM:SS, helper copy "Stay on this page — it switches to Live automatically", leprechaun + bunny illustration anchored bottom-left. Watch the timer tick for at least 2 minutes — no visual jumps, freezes, or restarts. as completedmarked the checklist item 1.4 Agent Card: TimeCurve Simple — disclosure toggles open/closed. Expanded view shows "What this page shows", "Four podium rows", "High-signal calls", "Play skills", "Canonical docs", "Indexer routes used on Simple", and 4 Python pseudo-code blocks. Code blocks scroll horizontally without breaking page layout. as completed
marked the checklist item 1.6 /timecurve/arena cold load — top header card shows "YOUR RANK", "YOUR BP", "YOUR STEALS TODAY: 0/3", "STEALS REFRESH IN: HH:MM:SS". Pre-launch gating copy "WarBow actions unlock when the sale is live" is visible. as completed
marked the checklist item 1.7 Arena STEAL card copy mentions the 2×–10× Battle Points band explicitly (not the old "2× rule" phrasing). Empty-state line "No indexed in-band steal target yet (2×–10× your BP)" is present. as completed
marked the checklist item 1.8 Arena GUARD + REVENGE cards — Guard shows "Burn 10 CL8Y to reduce incoming steals by 90% for 6 hours", INACTIVE pill, "Activate guard" CTA. Revenge shows "No revenge available". as completed
marked the checklist item 1.9 /timecurve/protocol cold load — PRE-LAUNCH pill + "PROTOCOL VIEW" title. CONTRACT READS card shows: Sale Start
LOCAL \+ UTC, DeadlineLOCAL \+ UTC, Ended: false, TOTAL RAISE: 0 CL8Y / $0.00, Current Min/Max Buy: —, Current Price Per Charm Wad: 1, Prizes Distributed: false. "Refreshed every ~1.5s" copy visible. as completedmarked the checklist item 1.10 /timecurve/protocol IMMUTABLE PARAMETERS + WARBOW RULE CONSTANTS + INDEXER + OWNER + WIRED CONTRACTS + FEEROUTER SINKS cards all render with their respective constant tables filled in. Each card's "yellow dot" header indicator visible. as completed
marked the checklist item 1.11 /referrals cold load — page title "REFERRALS", "GUIDE NEW BUYERS THROUGH THE BURROW" banner with 4 info pills, "CLAIM YOUR GUIDE CODE" card with 1 CL8Y burn cost panel + new code input. Earnings card shows zero state for unregistered wallet. as completed
marked the checklist item 1.12 /referrals GUIDE LEADERBOARD — header tile shows codes registered count, recorded referral buys: 0, total guide CHARM: 0. Below: list of registered wallets, all ranked #1 (correct — tied at 0 CHARM, dense-rank #204 fix). Each row shows wallet pill + "1 onchain code registered" + "0 recorded buys with this referrer code". as completed
marked the checklist item 1.5 Bottom of /timecurve: "This build (env)" + "Resolved addresses" + Indexer status pill
\"Indexer v1\.22\.0 · latest indexed block N · live\"+ Canonical fee sinks card. Watch the indexer pill for 30 seconds — does the block number tick up? Does the "live" indicator stay green? as completedmarked the checklist item 2.1 No horizontal scroll on any route at desktop / tablet / mobile widths unless an intentional wide artifact exists (Python code blocks in agent cards are the deliberate exception). as completed
marked the checklist item 2.2 /timecurve countdown card — verify "Stay on this page — it switches to Live automatically" copy is fully readable. The leprechaun + bunny illustration should not visually cross / overlap the text. as completed
marked the checklist item 2.4 /timecurve/protocol LIVE BUYS card — pre-launch shows "Waiting for the first buy of this round." plus a large cream block below. Confirm the empty-state height is intentional
matches designand not unreasonable dead whitespace. as completedmarked the checklist item 2.6 Header wallet pill
top\-rightshows truncated address (e.g. dc79c8 or similar). Click the pill: wallet popover opens with avatar, full truncated address0x70\.\.\.79C8 style, ETH balance, Copy Address, Disconnect. Verify the truncation pattern in the popover matches what's shown in the leaderboard own-row and elsewhere (same start/end character count). as completedmarked the checklist item 2.7 Header wallet popover positioning — when you click the wallet pill, does the popover anchor cleanly to the pill, or does it float at screen-center? Flag if positioning feels off. as completed
marked the checklist item 2.8 Click the chain pill
e\.g\. \"MegaETH\": a Switch Networks modal opens showing "MegaETH — Connected" with a green dot. ESC closes it. Outside click closes it. X button closes it. as completedmarked the checklist item 2.9 Cards, panels, and grids hold consistent gutters at every breakpoint. No collapsed columns, no stranded headings, no orphaned CTAs. as completed
marked the checklist item 2.10 Long addresses and numeric values wrap or truncate per design — no overflow pushing layout sideways. as completed
marked the checklist item 2.11 Numerals
countdown HH:MM:SS, steals refresh timer, leaderboard CHARM, address rowsuse stable digit widths — no jitter or layout flicker on tick. as completedmarked the checklist item 2.12 Sticky header
TimeCurve / Referrals tab nav \+ chain pill \+ wallet pilldoes not obscure content when scrolling long pages. as completedmarked the checklist item 2.14 Audio dock — Black Hills "Emerald Gate" or whatever track is playing — play / pause control affordance obvious, dock does not overlap leaderboard rows or primary CTAs on narrow widths. as completed
marked the checklist item 2.13 Mobile viewport — header reflows correctly
stacked tabs, not hamburger, audio dock visible, no horizontal scroll. Walk / and /referrals on mobile widths. as completedmarked the checklist item 2.15 Hover, default, disabled, and active button states are visually distinguishable. Disabled CTAs
e\.g\. Activate guard pre\-launch, Submit finalizeWarbowPodium without owner wallethave a clear reason exposed nearby. as completedFor 2.5, if it is constantly refreshing/flickering and not settling into one stable state, then the final decision is:
Status: Fail
Because the checklist says it should render either:
Populated sinks list
or
“Waiting for FeeRouter address…”
But it should not flicker between both, and it should not stay unstable.
Use this QA note:
Checklist Item: 2.5
Section:
/timecurve/protocol— FeeRouter Sinks / Reserve Fee Routing cardStatus: Fail
Device/Viewport: Desktop
Wallet State: Connected / Not required
Steps: Opened
/timecurve/protocoland observed the Reserve Fee Routing and wired contracts card for several seconds.Expected Result: The card should settle into either the populated sinks list or the loading copy “Waiting for FeeRouter address…”. It should not flicker between states or stay unstable.
Actual Result: The card keeps refreshing/flickering and does not settle into a stable display.
Evidence: Observed during online test
Notes: This appears to be a UI/data-loading stability issue for the FeeRouter sinks card. both are few seconds apart taken
2.16 Failed--Any unknown route (e.g.
/this-does-not-exist) — degrades to a branded under-construction / 404, not a raw error dump.Findings: Just a blank page
marked the checklist item 4.1 Walkable now. Cold load of /, /timecurve, /timecurve/arena, /timecurve/protocol, /referrals with browser console open — no severity-error storms. Warnings are OK; errors are findings. Note any errors with route + line. as completed
marked the checklist item 4.2 Walkable now. Re-check console after each wallet connect, account switch, chain switch. as completed
marked the checklist item 4.3 Walkable now. Force a wrong-network state and watch console + network tab — the page does not retry indefinitely against the wrong chain; reads should pause cleanly. as completed
marked the checklist item 4.4 Walkable now. Indexer hiccup simulation — open /timecurve on a flaky connection (or watch what happens during a brief network blip). The indexer pill should reflect the state honestly. No alarming banners. No full-page crash. as completed
mentioned in issue #214
Re-walked §2.5 on production /timecurve/protocol — FeeRouter Sinks card holds the populated sinks list stable (DOUB/CL8Y LP 30%, CL8Y burned 40%, Podium 20%, Team 0%, Rabbit 10% with addresses). WIRED CONTRACTS card also holds all 5 addresses stable. No flicker observed across ~60s.
Looks like
edc5831(keep last good RPC rows on TimeCurve protocol view) +b424099(shared protocol reads context, cut duplicate RPC polling) +8c19e44(hold buy cooldown CTA across flaky nextBuyAllowedAt multicalls) landed the fix between nxlv's walk and now.The SALE STATE card description now bakes the behavior into the UI: "Intermittent per-call multicall failures keep displaying the last successful row so sale state, total raise, live charts, and FeeRouter sinks do not flicker."
§2.5 reads PASS at current production state. Leaving the item ticked.
marked the checklist item 2.5 /timecurve/protocol FEEROUTER SINKS / RESERVE FEE ROUTING card — confirm it renders either the populated sinks list
DOUB/CL8Y LP 30%, CL8Y burned 40%, Podium pool 20%, Team 0%, Rabbit Treasury 10% with addressesor the loading copy "Waiting for FeeRouter address…" — not flickering between both, not stuck on the loading copy past a few seconds. as completed