[Visual QA] Local-stack umbrella checklist — yieldomega dapp #164

Closed
opened 2026-05-05 23:51:52 +00:00 by Brouie · 18 comments
Brouie commented 2026-05-05 23:51:52 +00:00 (Migrated from gitlab.com)

@nullvector_ux — local-stack visual QA umbrella for yieldomega.

scope: full-stack visual walkthrough on the local Anvil stack (post-#162 setup) — covers contract-backed surfaces that #147 cannot exercise on static prod. complement to #147, not a replacement. items here are walkable on the running local stack at http://127.0.0.1:5173 after bash scripts/start-qa-local-full-stack.sh --live-sale.

related tickets to read before starting:

  • #162 — local-stack setup (do this first)
  • #147 — sister visual checklist for prod yieldomega.com static surfaces (overlap on chrome/responsive — do not duplicate)
  • #163 — your responsive image misalignment finding (track here vs separate)
  • #110 — fee transparency 18-dec hardcode display (low priority, watch for it on fee surfaces)
  • #106 — PresaleVestingPage claim handler (visual check needed)
  • #129 — WarBow podium staleness CTA (visual check needed)
  • #126 — security review (low priority)

work top to bottom. when an item overlaps an existing open ticket, post the relevant finding as a note on that ticket and tag @PlasticDigits — do not close those tickets yourself. file fresh issues for anything not already covered. exploratory finds outside this list are expected — see §7.


§1 sale flow + buy surfaces (13 items)

  1. landing → sale page route loads cleanly with no console errors
  2. countdown timer renders and ticks every second without jitter or layout shift
  3. price curve chart renders with axis labels, current marker visible, no clipped edges at any breakpoint
  4. anchor multiplier display matches expected stage (1.275× post-#158 if that ships) — verify against contract value
  5. buy panel: amount input accepts decimals, max button works, USD/CL8Y toggle if present
  6. buy panel disabled-state copy is clear when wallet disconnected vs wrong network vs sale paused
  7. quote preview updates as you type without flicker
  8. slippage settings panel opens, accepts custom %, persists across page nav
  9. confirm modal shows pay amount, receive amount, slippage, fee breakdown — all with correct token symbols and decimals
  10. wallet popup coordination: spinner between submit click and MetaMask popup, no double-submit
  11. pending tx state: tx hash visible, copy button works, explorer link opens correct chain
  12. success state: clear "done" copy, balance refreshes within ~5 sec, next-action CTA visible
  13. failure/revert state: error copy is human-readable, not raw RPC error, retry path obvious

§2 TimeCurve Arena + WarBow (13 items)

  1. /timecurve/arena loads with current epoch / window state visible
  2. WarBow ladder podium renders top 3 with addresses truncated cleanly, ranks 1/2/3 visually distinct
  3. battlePoints values match indexer data — cross-check via curl -s http://localhost:3100/v1/timecurve/podium if needed
  4. podium refresh CTA appears under "Top rivals" when stale (#129 scope) — verify visible only when stale, not always
  5. wrong-chain gate on Arena page — connect to wrong chain, verify "switch network" CTA renders
  6. owner distributeHint copy renders only for owner address, not for non-owners
  7. seven-stealer display (post-#135) handles edge case of 7+ stealers without layout breakage
  8. Kumbaya buy router path — manual buy via Arena with separate approve + router popups, both render correct content
  9. mobile viewport (390×844): podium stacks legibly, buy CTA reachable by thumb
  10. simple podium section (#113 reference) renders below WarBow podium with correct ranking
  11. live podium updates: place a buy via swarm or manual, verify ladder reorders within ~10 sec
  12. battle-points calculation tooltip (if present) renders on hover/tap, doesn't clip
  13. claim button on completed epochs renders, click flows through to claim tx

§3 vesting + presale claim (10 items)

  1. /vesting reachable via URL even if hidden from nav
  2. PresaleVestingPage (#106) renders vesting schedule chart with correct x-axis dates
  3. unlockable amount displays correctly relative to current block timestamp
  4. claim handler button enabled state matches actual claimable balance (not just non-zero allocation)
  5. claim button disabled with clear reason when nothing to claim yet
  6. claim flow popup → pending → success/failure each render coherent state
  7. post-claim: vesting schedule visually updates to reflect new claimed amount
  8. multi-account: switch wallet, page rebinds to new address's vesting schedule (no stale data)
  9. zero-allocation address: empty state copy is on-brand, not blank
  10. very-large allocation: numbers don't overflow card or layout

§4 referrals + leaderboards (10 items)

  1. /referrals page renders without backend data (graceful empty state)
  2. with backend data: referral table columns aligned, sort indicators clear
  3. referral code input accepts paste, shows validation feedback inline
  4. referrer attribution UX: clear copy on what the referrer/referee gets
  5. share-referral button works (clipboard copy or share sheet on mobile)
  6. leaderboard pagination works without losing scroll position
  7. own-row highlight: when wallet connected, your row visually distinguished in leaderboard
  8. sortable columns: click header sorts, second click reverses, arrow icon updates
  9. mobile viewport: table reflows to cards or horizontal scroll within container, not page
  10. very-long addresses don't break row alignment

§5 wallet session + connection states (13 items)

  1. fresh-page connect flow: button → modal → provider list → MetaMask popup → connected state
  2. truncated address chip in header shows correct address + balance
  3. chain chip shows correct chain name (not just chain ID)
  4. wrong-chain detection: switch MetaMask to chain 1, verify "wrong network" affordance everywhere
  5. switch-back to chain 31337: UI reflects reconnect cleanly
  6. account switch in MetaMask: dapp updates to new account everywhere within ~2 sec
  7. disconnect from header: clean state reset, no stale data lingering
  8. disconnect from MetaMask side: dapp detects and shows disconnected state
  9. session persistence on hard refresh: still connected, no flash of disconnected state
  10. WalletConnect path: QR scan flow renders correctly
  11. mid-tx wallet UX: while a popup is open, account/network switch is blocked (intentional, verify the UX message is clear)
  12. session drift: post-stack-restart, verify clear-activity-tab fixes nonce issue without weird intermediate states
  13. multiple connect attempts in a row don't stack modals or break state

§6 fee surfaces + economic display (10 items)

  1. fee transparency component renders correct decimals (#110 — currently hardcoded 18, watch for non-18 token edge)
  2. fee breakdown on buy modal: protocol fee, LP seed, treasury, burn — labels and percentages clear
  3. fee numbers format consistently across all surfaces (1.80% vs 1.8% vs 0.018 — pick one)
  4. very-small amounts: fees render without scientific notation surprise (e.g. 0.000001 ETH input)
  5. very-large amounts: numbers don't overflow card, comma grouping correct
  6. token amount displays use consistent precision per surface (don't mix 4-dec and 6-dec arbitrarily)
  7. USD-equivalent display (if shown) updates with price feed, has staleness indicator
  8. price impact warnings render at correct thresholds (1%, 5%, 10%) with appropriate severity styling
  9. min-received calculations match slippage tolerance setting
  10. fee discount tier display (if exposed) shows current tier and CL8Y hold required for next tier

§7 exploratory — find what's NOT in this list

work through the dapp as a curious new user with a connected wallet would. things to actively probe:

  • click every button, link, icon. anything that does nothing or feels broken — note it
  • try keyboard-only navigation through the full buy flow
  • shrink browser to 280px wide — what breaks at the floor of supported widths
  • enter weird input: emoji in amount fields, very long string in referral code, scientific notation in numeric inputs
  • block JavaScript — what's left, does no-JS state communicate
  • block cookies/storage — anything break
  • compare YO local stack against deployed yieldomega.com — what's different that shouldn't be
  • with the bot swarm running (default on --live-sale), watch for layout thrash on live podium updates
  • intentional rate-limit: spam buy clicks, watch for double-submit guard, debounce, or amber rate-limit banner
  • multi-tab: open dapp in two tabs simultaneously, place buy in tab A, verify tab B reflects updated state

file separate issues for any new findings. tag with visual-qa label. if a finding overlaps a known open ticket above, comment on that ticket instead of filing fresh.


format for posting findings on existing tickets

paste a note in this shape on the original issue, then tag @PlasticDigits.

visual checklist verification on §X item Y.

observed: [behavior].

screenshot: [link].

environment: browser, viewport, wallet.

ready for close on dev side.

format for a fresh issue

title: [visual] [page or section] [short description].

body: route, viewport, browser, wallet state, screenshot, severity (P1 blocker / P2 polish / P3 nit), repro steps.

ping me (@Brouie) on this ticket when checklist is fully walked or you hit a blocker. weekly progress update appreciated.

cc @PlasticDigits — umbrella ticket for nullvector_ux's local-stack visual QA work, complement to #147.

@nullvector_ux — local-stack visual QA umbrella for yieldomega. scope: full-stack visual walkthrough on the local Anvil stack (post-#162 setup) — covers contract-backed surfaces that #147 cannot exercise on static prod. complement to #147, not a replacement. items here are walkable on the running local stack at http://127.0.0.1:5173 after `bash scripts/start-qa-local-full-stack.sh --live-sale`. related tickets to read before starting: - #162 — local-stack setup (do this first) - #147 — sister visual checklist for prod yieldomega.com static surfaces (overlap on chrome/responsive — do not duplicate) - #163 — your responsive image misalignment finding (track here vs separate) - #110 — fee transparency 18-dec hardcode display (low priority, watch for it on fee surfaces) - #106 — PresaleVestingPage claim handler (visual check needed) - #129 — WarBow podium staleness CTA (visual check needed) - #126 — security review (low priority) work top to bottom. when an item overlaps an existing open ticket, post the relevant finding as a note on that ticket and tag @PlasticDigits — do not close those tickets yourself. file fresh issues for anything not already covered. exploratory finds outside this list are expected — see §7. --- ## §1 sale flow + buy surfaces (13 items) 1. landing → sale page route loads cleanly with no console errors 2. countdown timer renders and ticks every second without jitter or layout shift 3. price curve chart renders with axis labels, current marker visible, no clipped edges at any breakpoint 4. anchor multiplier display matches expected stage (1.275× post-#158 if that ships) — verify against contract value 5. buy panel: amount input accepts decimals, max button works, USD/CL8Y toggle if present 6. buy panel disabled-state copy is clear when wallet disconnected vs wrong network vs sale paused 7. quote preview updates as you type without flicker 8. slippage settings panel opens, accepts custom %, persists across page nav 9. confirm modal shows pay amount, receive amount, slippage, fee breakdown — all with correct token symbols and decimals 10. wallet popup coordination: spinner between submit click and MetaMask popup, no double-submit 11. pending tx state: tx hash visible, copy button works, explorer link opens correct chain 12. success state: clear "done" copy, balance refreshes within ~5 sec, next-action CTA visible 13. failure/revert state: error copy is human-readable, not raw RPC error, retry path obvious ## §2 TimeCurve Arena + WarBow (13 items) 1. /timecurve/arena loads with current epoch / window state visible 2. WarBow ladder podium renders top 3 with addresses truncated cleanly, ranks 1/2/3 visually distinct 3. battlePoints values match indexer data — cross-check via `curl -s http://localhost:3100/v1/timecurve/podium` if needed 4. podium refresh CTA appears under "Top rivals" when stale (#129 scope) — verify visible only when stale, not always 5. wrong-chain gate on Arena page — connect to wrong chain, verify "switch network" CTA renders 6. owner distributeHint copy renders only for owner address, not for non-owners 7. seven-stealer display (post-#135) handles edge case of 7+ stealers without layout breakage 8. Kumbaya buy router path — manual buy via Arena with separate approve + router popups, both render correct content 9. mobile viewport (390×844): podium stacks legibly, buy CTA reachable by thumb 10. simple podium section (#113 reference) renders below WarBow podium with correct ranking 11. live podium updates: place a buy via swarm or manual, verify ladder reorders within ~10 sec 12. battle-points calculation tooltip (if present) renders on hover/tap, doesn't clip 13. claim button on completed epochs renders, click flows through to claim tx ## §3 vesting + presale claim (10 items) 1. /vesting reachable via URL even if hidden from nav 2. PresaleVestingPage (#106) renders vesting schedule chart with correct x-axis dates 3. unlockable amount displays correctly relative to current block timestamp 4. claim handler button enabled state matches actual claimable balance (not just non-zero allocation) 5. claim button disabled with clear reason when nothing to claim yet 6. claim flow popup → pending → success/failure each render coherent state 7. post-claim: vesting schedule visually updates to reflect new claimed amount 8. multi-account: switch wallet, page rebinds to new address's vesting schedule (no stale data) 9. zero-allocation address: empty state copy is on-brand, not blank 10. very-large allocation: numbers don't overflow card or layout ## §4 referrals + leaderboards (10 items) 1. /referrals page renders without backend data (graceful empty state) 2. with backend data: referral table columns aligned, sort indicators clear 3. referral code input accepts paste, shows validation feedback inline 4. referrer attribution UX: clear copy on what the referrer/referee gets 5. share-referral button works (clipboard copy or share sheet on mobile) 6. leaderboard pagination works without losing scroll position 7. own-row highlight: when wallet connected, your row visually distinguished in leaderboard 8. sortable columns: click header sorts, second click reverses, arrow icon updates 9. mobile viewport: table reflows to cards or horizontal scroll within container, not page 10. very-long addresses don't break row alignment ## §5 wallet session + connection states (13 items) 1. fresh-page connect flow: button → modal → provider list → MetaMask popup → connected state 2. truncated address chip in header shows correct address + balance 3. chain chip shows correct chain name (not just chain ID) 4. wrong-chain detection: switch MetaMask to chain 1, verify "wrong network" affordance everywhere 5. switch-back to chain 31337: UI reflects reconnect cleanly 6. account switch in MetaMask: dapp updates to new account everywhere within ~2 sec 7. disconnect from header: clean state reset, no stale data lingering 8. disconnect from MetaMask side: dapp detects and shows disconnected state 9. session persistence on hard refresh: still connected, no flash of disconnected state 10. WalletConnect path: QR scan flow renders correctly 11. mid-tx wallet UX: while a popup is open, account/network switch is blocked (intentional, verify the UX message is clear) 12. session drift: post-stack-restart, verify clear-activity-tab fixes nonce issue without weird intermediate states 13. multiple connect attempts in a row don't stack modals or break state ## §6 fee surfaces + economic display (10 items) 1. fee transparency component renders correct decimals (#110 — currently hardcoded 18, watch for non-18 token edge) 2. fee breakdown on buy modal: protocol fee, LP seed, treasury, burn — labels and percentages clear 3. fee numbers format consistently across all surfaces (1.80% vs 1.8% vs 0.018 — pick one) 4. very-small amounts: fees render without scientific notation surprise (e.g. 0.000001 ETH input) 5. very-large amounts: numbers don't overflow card, comma grouping correct 6. token amount displays use consistent precision per surface (don't mix 4-dec and 6-dec arbitrarily) 7. USD-equivalent display (if shown) updates with price feed, has staleness indicator 8. price impact warnings render at correct thresholds (1%, 5%, 10%) with appropriate severity styling 9. min-received calculations match slippage tolerance setting 10. fee discount tier display (if exposed) shows current tier and CL8Y hold required for next tier ## §7 exploratory — find what's NOT in this list work through the dapp as a curious new user with a connected wallet would. things to actively probe: - click every button, link, icon. anything that does nothing or feels broken — note it - try keyboard-only navigation through the full buy flow - shrink browser to 280px wide — what breaks at the floor of supported widths - enter weird input: emoji in amount fields, very long string in referral code, scientific notation in numeric inputs - block JavaScript — what's left, does no-JS state communicate - block cookies/storage — anything break - compare YO local stack against deployed yieldomega.com — what's different that shouldn't be - with the bot swarm running (default on --live-sale), watch for layout thrash on live podium updates - intentional rate-limit: spam buy clicks, watch for double-submit guard, debounce, or amber rate-limit banner - multi-tab: open dapp in two tabs simultaneously, place buy in tab A, verify tab B reflects updated state file separate issues for any new findings. tag with visual-qa label. if a finding overlaps a known open ticket above, comment on that ticket instead of filing fresh. --- ## format for posting findings on existing tickets paste a note in this shape on the original issue, then tag @PlasticDigits. visual checklist verification on §X item Y. observed: [behavior]. screenshot: [link]. environment: browser, viewport, wallet. ready for close on dev side. ## format for a fresh issue title: [visual] [page or section] [short description]. body: route, viewport, browser, wallet state, screenshot, severity (P1 blocker / P2 polish / P3 nit), repro steps. ping me (@Brouie) on this ticket when checklist is fully walked or you hit a blocker. weekly progress update appreciated. cc @PlasticDigits — umbrella ticket for nullvector_ux's local-stack visual QA work, complement to #147.
Brouie commented 2026-05-05 23:51:54 +00:00 (Migrated from gitlab.com)

assigned to @nullvector_ux

assigned to @nullvector_ux
PlasticDigits commented 2026-05-06 09:28:34 +00:00 (Migrated from gitlab.com)

@nullvector_ux Once you complete the checklist - please add it here with PASS/FAIL/SKIP for each item, FAIL with issue numbers and SKIP with reasons

@nullvector_ux Once you complete the checklist - please add it here with PASS/FAIL/SKIP for each item, FAIL with issue numbers and SKIP with reasons
nullvector_ux commented 2026-05-07 15:06:11 +00:00 (Migrated from gitlab.com)

Checklist Item: landing → sale page route loads cleanly with no console errors
Section: §1 sale flow + buy surfaces (13 items)
Status: Pass
Device/Viewport: Desktop 1920x1080
Wallet State: Connected, chain 31337
Steps: open the site with http://localhost:5174/timecurve
Expected Result: it opens the timecurve
Actual Result: it opens immediately
Evidence:

image.png{width=900 height=432}


Notes:no errors

Checklist Item: Countdown timer renders and ticks every second without jitter or layout shift
Section: §1 Sale Flow + Buy Surfaces
Status: Pass
Device/Viewport: Desktop 1920x1080
Wallet State: Connected
Steps:\

  1. Open the sale page.\
  2. Locate the countdown timer.\
  3. Watch the timer for at least 10–15 seconds.\
  4. Observe if it ticks smoothly every second.

    Expected Result:
    Countdown timer updates every second without jitter, flicker, or layout movement.

    Actual Result: timer is ticking without jitter

    Evidence:

image.png{width=711 height=460}


Notes:

no error

Checklist Item: Price curve chart renders with axis labels, current marker visible, no clipped edges
Section: §1 Sale Flow + Buy Surfaces
Status: Pass
Device/Viewport: Desktop 1920x1080
Wallet State: Connected
Steps:\

  1. Open the sale page.\
  2. Locate the price curve chart.\
  3. Check the axis labels.\
  4. Check if the current marker is visible.\
  5. Resize the browser and check for clipped chart edges.

    Expected Result:
    Chart renders correctly with readable axis labels, visible current marker, and no clipping at any breakpoint.

    Actual Result: the chart is working fine and the points are reponding correctly when it is drag

    Evidence:

image.png{width=718 height=468}



Notes: no bugs and errors

Checklist Item: Anchor multiplier display matches expected stage
Section: §1 Sale Flow + Buy Surfaces
Status: Pass
Device/Viewport:Desktop 1920x1080
Wallet State: Connected
Steps:\

  1. Open the sale page.\
  2. Locate the anchor multiplier display.\
  3. Compare the displayed value against the expected contract/stage value.

    Expected Result:
    Anchor multiplier display matches the expected stage value.

    Actual Result: it actually matches and actively moving

    Evidence:

image.png{width=653 height=600}



Notes: no bugs and error

Checklist Item: Buy panel amount input accepts decimals, max button works, USD/CL8Y toggle if present
Section: §1 Sale Flow + Buy Surfaces
Status: Not Available
Device/Viewport: Desktop 1920x1080
Wallet State: Connected
Steps:\

  1. Open the buy panel.\
  2. Enter a decimal amount.\
  3. Click the Max button.\
  4. Test the USD/CL8Y toggle if available.

    Expected Result:
    Decimal input is accepted, Max button fills the correct amount, and token toggle works correctly if present.

    Actual Result: it is disabled

    Evidence:

image.png{width=328 height=600}



Notes: can not conferm yet

Checklist Item: Buy panel disabled-state copy is clear when wallet disconnected vs wrong network vs sale paused
Section: §1 Sale Flow + Buy Surfaces
Status: Not Available
Device/Viewport:
Wallet State:
Steps:\

  1. Test the buy panel while wallet is disconnected.\
  2. Test while connected to the wrong network.\
  3. Test during sale paused state if available.\
  4. Read the disabled-state messages.

    Expected Result:
    Each disabled state shows a clear and specific reason.

    Actual Result: it is disabled

    Evidence:

image.png{width=327 height=600}



Notes: can not confirm yet

Checklist Item: Quote preview updates as you type without flicker
Section: §1 Sale Flow + Buy Surfaces
Status: Not Available
Device/Viewport:
Wallet State:
Steps:\

  1. Open the buy panel.\
  2. Type different amounts slowly.\
  3. Watch the quote preview update.

    Expected Result:
    Quote preview updates smoothly without flicker, disappearing text, or layout jump.

Actual Result: it is disabled

Evidence:

image.png{width="327" height="600"}



Notes: can not confirm yet

Checklist Item: Slippage settings panel opens, accepts custom %, persists across page nav

Section: §1 Sale Flow + Buy Surfaces

Status: Not Available

Device/Viewport:

Wallet State:

Steps:

  1. Open the slippage settings panel.
  2. Enter a custom percentage.
  3. Navigate to another page.
  4. Return to the sale page.
  5. Check if the custom slippage remains saved.

Expected Result: Slippage panel opens, accepts valid custom percentage, and persists after page navigation.

Actual Result: it is disabled

Evidence:

image.png{width="327" height="600"}



Notes: can not confirm yet

Checklist Item: Confirm modal shows pay amount, receive amount, slippage, fee breakdown with correct token symbols and decimals
Section: §1 Sale Flow + Buy Surfaces
Status: Not Available
Device/Viewport:
Wallet State:
Steps:\

  1. Enter a buy amount.\
  2. Open the confirm modal.\
  3. Check pay amount, receive amount, slippage, and fee breakdown.\
  4. Verify token symbols and decimal formatting.

    Expected Result:
    Confirm modal displays all buy details correctly with proper symbols and decimals.

Actual Result: it is disabled

Evidence:

image.png{width="327" height="600"}

Notes: can not confirm yet

Checklist Item: Wallet popup coordination: spinner between submit click and MetaMask popup, no double-submit
Section: §1 Sale Flow + Buy Surfaces
Status: Not Available
Device/Viewport:
Wallet State:
Steps:\

  1. Enter a valid buy amount.\
  2. Click submit/buy.\
  3. Watch the UI before MetaMask opens.\
  4. Try clicking submit again quickly.

    Expected Result:
    Spinner appears while waiting for MetaMask popup and duplicate submissions are prevented.

Actual Result: it is disabled

Evidence:

image.png{width="327" height="600"}

Notes: can not confirm yet

12, 13 skip because of disabled buy cham pannel

Checklist Item: landing → sale page route loads cleanly with no console errors\ Section: §1 sale flow + buy surfaces (13 items)\ Status: Pass\ Device/Viewport: Desktop 1920x1080\ Wallet State: Connected, chain 31337\ Steps: open the site with [http://localhost:5174/](http://localhost:5174/)timecurve\ Expected Result: it opens the timecurve\ Actual Result: it opens immediately\ Evidence: ![image.png](/uploads/8a51f00009ac0c8ff9bb6b3db15db7d1/image.png){width=900 height=432} \ Notes:no errors Checklist Item: Countdown timer renders and ticks every second without jitter or layout shift\ Section: §1 Sale Flow + Buy Surfaces\ Status: Pass\ Device/Viewport: Desktop 1920x1080\ Wallet State: Connected\ Steps:\ 1. Open the sale page.\ 2. Locate the countdown timer.\ 3. Watch the timer for at least 10–15 seconds.\ 4. Observe if it ticks smoothly every second.\ \ Expected Result:\ Countdown timer updates every second without jitter, flicker, or layout movement.\ \ Actual Result: timer is ticking without jitter\ \ Evidence: ![image.png](/uploads/f9065340c82c240311155497267f51de/image.png){width=711 height=460} \ Notes: no error Checklist Item: Price curve chart renders with axis labels, current marker visible, no clipped edges\ Section: §1 Sale Flow + Buy Surfaces\ Status: Pass \ Device/Viewport: Desktop 1920x1080\ Wallet State: Connected\ Steps:\ 1. Open the sale page.\ 2. Locate the price curve chart.\ 3. Check the axis labels.\ 4. Check if the current marker is visible.\ 5. Resize the browser and check for clipped chart edges.\ \ Expected Result:\ Chart renders correctly with readable axis labels, visible current marker, and no clipping at any breakpoint.\ \ Actual Result: the chart is working fine and the points are reponding correctly when it is drag\ \ Evidence: ![image.png](/uploads/e8d90a7578f034808e347d1d0420824e/image.png){width=718 height=468} \ \ Notes: no bugs and errors Checklist Item: Anchor multiplier display matches expected stage\ Section: §1 Sale Flow + Buy Surfaces\ Status: Pass \ Device/Viewport:Desktop 1920x1080\ Wallet State: Connected\ Steps:\ 1. Open the sale page.\ 2. Locate the anchor multiplier display.\ 3. Compare the displayed value against the expected contract/stage value.\ \ Expected Result:\ Anchor multiplier display matches the expected stage value.\ \ Actual Result: it actually matches and actively moving \ \ Evidence: ![image.png](/uploads/66295fca4097da455c4a930a0ab3cca1/image.png){width=653 height=600} \ \ Notes: no bugs and error Checklist Item: Buy panel amount input accepts decimals, max button works, USD/CL8Y toggle if present\ Section: §1 Sale Flow + Buy Surfaces\ Status: Not Available\ Device/Viewport: Desktop 1920x1080\ Wallet State: Connected\ Steps:\ 1. Open the buy panel.\ 2. Enter a decimal amount.\ 3. Click the Max button.\ 4. Test the USD/CL8Y toggle if available.\ \ Expected Result:\ Decimal input is accepted, Max button fills the correct amount, and token toggle works correctly if present.\ \ Actual Result: it is disabled \ \ Evidence: ![image.png](/uploads/98f94790d77815567c2198ed5c8f112f/image.png){width=328 height=600} \ \ Notes: can not conferm yet Checklist Item: Buy panel disabled-state copy is clear when wallet disconnected vs wrong network vs sale paused\ Section: §1 Sale Flow + Buy Surfaces\ Status: Not Available\ Device/Viewport: \ Wallet State:\ Steps:\ 1. Test the buy panel while wallet is disconnected.\ 2. Test while connected to the wrong network.\ 3. Test during sale paused state if available.\ 4. Read the disabled-state messages.\ \ Expected Result:\ Each disabled state shows a clear and specific reason.\ \ Actual Result: it is disabled\ \ Evidence: ![image.png](/uploads/9c03e024f09271e0b1215b9e3eb6a502/image.png){width=327 height=600} \ \ Notes: can not confirm yet Checklist Item: Quote preview updates as you type without flicker\ Section: §1 Sale Flow + Buy Surfaces\ Status: Not Available\ Device/Viewport:\ Wallet State:\ Steps:\ 1. Open the buy panel.\ 2. Type different amounts slowly.\ 3. Watch the quote preview update.\ \ Expected Result:\ Quote preview updates smoothly without flicker, disappearing text, or layout jump. Actual Result: it is disabled\ \ Evidence: ![image.png](/uploads/9c03e024f09271e0b1215b9e3eb6a502/image.png){width="327" height="600"} \ \ Notes: can not confirm yet Checklist Item: Slippage settings panel opens, accepts custom %, persists across page nav Section: §1 Sale Flow + Buy Surfaces Status: Not Available Device/Viewport: Wallet State: Steps: 1. Open the slippage settings panel. 2. Enter a custom percentage. 3. Navigate to another page. 4. Return to the sale page. 5. Check if the custom slippage remains saved. Expected Result: Slippage panel opens, accepts valid custom percentage, and persists after page navigation. Actual Result: it is disabled\ \ Evidence: ![image.png](/uploads/9c03e024f09271e0b1215b9e3eb6a502/image.png){width="327" height="600"} \ \ Notes: can not confirm yet Checklist Item: Confirm modal shows pay amount, receive amount, slippage, fee breakdown with correct token symbols and decimals\ Section: §1 Sale Flow + Buy Surfaces\ Status: Not Available\ Device/Viewport:\ Wallet State:\ Steps:\ 1. Enter a buy amount.\ 2. Open the confirm modal.\ 3. Check pay amount, receive amount, slippage, and fee breakdown.\ 4. Verify token symbols and decimal formatting.\ \ Expected Result:\ Confirm modal displays all buy details correctly with proper symbols and decimals. Actual Result: it is disabled\ \ Evidence: ![image.png](/uploads/9c03e024f09271e0b1215b9e3eb6a502/image.png){width="327" height="600"}\ \ Notes: can not confirm yet Checklist Item: Wallet popup coordination: spinner between submit click and MetaMask popup, no double-submit\ Section: §1 Sale Flow + Buy Surfaces\ Status: Not Available\ Device/Viewport:\ Wallet State:\ Steps:\ 1. Enter a valid buy amount.\ 2. Click submit/buy.\ 3. Watch the UI before MetaMask opens.\ 4. Try clicking submit again quickly.\ \ Expected Result:\ Spinner appears while waiting for MetaMask popup and duplicate submissions are prevented. Actual Result: it is disabled\ \ Evidence: ![image.png](/uploads/9c03e024f09271e0b1215b9e3eb6a502/image.png){width="327" height="600"}\ \ Notes: can not confirm yet 12, 13 skip because of disabled buy cham pannel
nullvector_ux commented 2026-05-07 15:49:33 +00:00 (Migrated from gitlab.com)

@PlasticDigits

Checklist Item: Fresh-page connect flow: button → modal → provider list → MetaMask popup → connected state
Section: §5 Wallet Session + Connection States
Status: Pass
Device/Viewport:
Wallet State: Disconnected at start
Steps:\

  1. Hard refresh the page.\
  2. Click connect button.\
  3. Select provider.\
  4. Confirm MetaMask popup.\
  5. Check connected state.

    Expected Result:
    Connect flow completes successfully from disconnected state to connected state.

    Actual Result: the wallet is successfully connected

    Evidence:

image.png{width="718" height="555"}

Notes: no bug or weird loading or errors

Checklist Item: Truncated address chip in header shows correct address + balance
Section: §5 Wallet Session + Connection States
Status: Fail
Device/Viewport:
Wallet State:
Steps:\

  1. Connect wallet.\
  2. Check header address chip.\
  3. Compare displayed address and balance with wallet.

    Expected Result:
    Header shows correct shortened address and correct balance.

    Actual Result: the address is correct but there is no balance for me

    Evidence:

image.png{width="712" height="189"}


Notes: bug no balance showing

Checklist Item: Chain chip shows correct chain name, not just chain ID
Section: §5 Wallet Session + Connection States
Status: Pass
Device/Viewport:
Wallet State:
Steps:\

  1. Connect wallet.\
  2. Check chain chip in header or wallet area.

    Expected Result:
    Chain chip shows readable chain name instead of only chain ID.

    Actual Result:the chain ID and name is showing

    Evidence:

image.png{width=720 height=525}



Notes: no bug and error

Checklist Item: Wrong-chain detection: switch MetaMask to chain 1, verify wrong network affordance everywhere
Section: §5 Wallet Session + Connection States
Status: Pass
Device/Viewport:
Wallet State:
Steps:\

  1. Connect wallet.\
  2. Switch MetaMask to chain 1.\
  3. Check all relevant dapp areas.

    Expected Result:
    Wrong network affordance appears consistently everywhere needed.

    Actual Result: it should show wrong network

    Evidence:

image.png{width=710 height=150}


Notes: haven't encounter it

Checklist Item: Switch-back to chain 31337: UI reflects reconnect cleanly
Section: §5 Wallet Session + Connection States
Status: skip
Device/Viewport:
Wallet State:
Steps:\

  1. Switch wallet to wrong chain.\
  2. Switch back to chain 31337.\
  3. Observe UI recovery.

    Expected Result:
    UI reconnects cleanly and correct chain state is restored.

    Actual Result:

    Evidence:

    Notes: havem't tried it yet

Checklist Item: Account switch in MetaMask: dapp updates to new account everywhere within ~2 sec
Section: §5 Wallet Session + Connection States
Status: Pass
Device/Viewport:
Wallet State:
Steps:\

  1. Connect wallet.\
  2. Switch account in MetaMask.\
  3. Observe address, balances, and page data.

    Expected Result:
    Dapp updates to the new account everywhere within around 2 seconds.

    Actual Result: instantly refresh the page

    Evidence:

image.png{width=628 height=600}



Notes: no bugs or errors

Checklist Item: Disconnect from header: clean state reset, no stale data lingering
Section: §5 Wallet Session + Connection States
Status: Pass
Device/Viewport:
Wallet State: disconnected
Steps:\

  1. Connect wallet.\
  2. Disconnect using header control.\
  3. Observe UI after disconnect.

    Expected Result:
    Wallet state resets cleanly and no stale address, balance, or user-specific data remains.

    Actual Result: clean ui with connect wallet

    Evidence:

image.png{width=716 height=245}


Notes: no bug or weird things hanging around

Checklist Item: Disconnect from MetaMask side: dapp detects and shows disconnected state
Section: §5 Wallet Session + Connection States
Status: Pass
Device/Viewport:
Wallet State:
Steps:\

  1. Connect wallet.\
  2. Disconnect site from MetaMask.\
  3. Return to dapp.\
  4. Observe connection state.

    Expected Result:
    Dapp detects MetaMask-side disconnect and shows disconnected state.

    Actual Result: yes it shows disconnected state

    Evidence:image.png{width="716" height="245"}

    Notes: no bugs or errors

Checklist Item: Session persistence on hard refresh: still connected, no flash of disconnected state
Section: §5 Wallet Session + Connection States
Status: Pass
Device/Viewport:
Wallet State: connected
Steps:\

  1. Connect wallet.\
  2. Hard refresh page.\
  3. Observe wallet state during and after reload.

    Expected Result:
    Wallet remains connected and there is no noticeable disconnected-state flash.

    Actual Result: yes wallet stays connected

    Evidence:

image.png{width=719 height=357}


Notes: no bugs or flashing white bg

Checklist Item: WalletConnect path: QR scan flow renders correctly
Section: §5 Wallet Session + Connection States
Status: Pass
Device/Viewport:
Wallet State:
Steps:\

  1. Click connect wallet.\
  2. Select WalletConnect.\
  3. Observe QR scan flow.

    Expected Result:
    WalletConnect QR flow renders correctly and is usable.

    Actual Result: if base on old version yes the qr renders correctly

    Evidence:

    Notes: there is no other wallet choices

Checklist Item: Mid-tx wallet UX: while popup is open, account/network switch is blocked or message is clear
Section: §5 Wallet Session + Connection States
Status: Pass
Device/Viewport:
Wallet State:
Steps:\

  1. Start a transaction.\
  2. Leave wallet popup open.\
  3. Attempt account/network switch if possible.\
  4. Observe message or blocked behavior.

    Expected Result:
    UX clearly communicates that account/network switching is blocked or unsafe during transaction.

    Actual Result: blurry background that is blocking the text behind

    Evidence:

image.png{width=630 height=600}


Notes: no bugs or errors

Checklist Item: Session drift: post-stack-restart, verify clear-activity-tab fixes nonce issue without weird intermediate states
Section: §5 Wallet Session + Connection States
Status: Pass
Device/Viewport:
Wallet State:
Steps:\

  1. Restart local stack.\
  2. Reopen dapp with wallet connected.\
  3. Check for nonce/session drift issues.\
  4. Use clear activity tab if needed.\
  5. Observe UI states.

    Expected Result:
    Dapp recovers clearly after stack restart without confusing intermediate states.

    Actual Result: refreshed instantly without any weird intermediate states


Evidence:

image.png{width=622 height=600}

Notes:I left it idle for a bit and refreshed it

Checklist Item: Multiple connect attempts in a row don't stack modals or break state
Section: §5 Wallet Session + Connection States
Status: Pass
Device/Viewport:
Wallet State:
Steps:\

  1. Click connect multiple times quickly.\
  2. Open and close wallet modal repeatedly.\
  3. Observe modal behavior and connection state.

    Expected Result:
    Multiple attempts do not stack modals, duplicate popups, or break wallet state.

    Actual Result: tried it couple of times and it didn't break wallet state, or duplicate popups

    Evidence:

image.png{width=718 height=582}


Notes: no bugs and errors

@PlasticDigits Checklist Item: Fresh-page connect flow: button → modal → provider list → MetaMask popup → connected state\ Section: §5 Wallet Session + Connection States\ Status: Pass \ Device/Viewport:\ Wallet State: Disconnected at start\ Steps:\\ 1. Hard refresh the page.\\ 2. Click connect button.\\ 3. Select provider.\\ 4. Confirm MetaMask popup.\\ 5. Check connected state.\ \ Expected Result:\ Connect flow completes successfully from disconnected state to connected state.\ \ Actual Result: the wallet is successfully connected\ \ Evidence: ![image.png](/uploads/0ab9d46b9271f47c3355373d9debb26e/image.png){width="718" height="555"}\ \ Notes: no bug or weird loading or errors Checklist Item: Truncated address chip in header shows correct address + balance\ Section: §5 Wallet Session + Connection States\ Status: Fail \ Device/Viewport:\ Wallet State:\ Steps:\\ 1. Connect wallet.\\ 2. Check header address chip.\\ 3. Compare displayed address and balance with wallet.\ \ Expected Result:\ Header shows correct shortened address and correct balance.\ \ Actual Result: the address is correct but there is no balance for me\ \ Evidence: ![image.png](/uploads/d93ae9be47079660635750ea3655c551/image.png){width="712" height="189"} \ Notes: bug no balance showing Checklist Item: Chain chip shows correct chain name, not just chain ID\ Section: §5 Wallet Session + Connection States\ Status: Pass \ Device/Viewport:\ Wallet State:\ Steps:\ 1. Connect wallet.\ 2. Check chain chip in header or wallet area.\ \ Expected Result:\ Chain chip shows readable chain name instead of only chain ID.\ \ Actual Result:the chain ID and name is showing\ \ Evidence: ![image.png](/uploads/b1935dae6206f69f95af96e3ef33d871/image.png){width=720 height=525} \ \ Notes: no bug and error Checklist Item: Wrong-chain detection: switch MetaMask to chain 1, verify wrong network affordance everywhere\ Section: §5 Wallet Session + Connection States\ Status: Pass \ Device/Viewport:\ Wallet State:\ Steps:\ 1. Connect wallet.\ 2. Switch MetaMask to chain 1.\ 3. Check all relevant dapp areas.\ \ Expected Result:\ Wrong network affordance appears consistently everywhere needed.\ \ Actual Result: it should show wrong network\ \ Evidence: ![image.png](/uploads/55be541ea1e93675aa204f469134ec4f/image.png){width=710 height=150} \ Notes: haven't encounter it Checklist Item: Switch-back to chain 31337: UI reflects reconnect cleanly\ Section: §5 Wallet Session + Connection States\ Status: skip\ Device/Viewport:\ Wallet State:\ Steps:\ 1. Switch wallet to wrong chain.\ 2. Switch back to chain 31337.\ 3. Observe UI recovery.\ \ Expected Result:\ UI reconnects cleanly and correct chain state is restored.\ \ Actual Result:\ \ Evidence:\ \ Notes: havem't tried it yet Checklist Item: Account switch in MetaMask: dapp updates to new account everywhere within \~2 sec\ Section: §5 Wallet Session + Connection States\ Status: Pass\ Device/Viewport:\ Wallet State:\ Steps:\ 1. Connect wallet.\ 2. Switch account in MetaMask.\ 3. Observe address, balances, and page data.\ \ Expected Result:\ Dapp updates to the new account everywhere within around 2 seconds.\ \ Actual Result: instantly refresh the page \ \ Evidence: ![image.png](/uploads/3d45cbacd6e0f41abe4b696919041d03/image.png){width=628 height=600} \ \ Notes: no bugs or errors Checklist Item: Disconnect from header: clean state reset, no stale data lingering\ Section: §5 Wallet Session + Connection States\ Status: Pass \ Device/Viewport:\ Wallet State: disconnected\ Steps:\ 1. Connect wallet.\ 2. Disconnect using header control.\ 3. Observe UI after disconnect.\ \ Expected Result:\ Wallet state resets cleanly and no stale address, balance, or user-specific data remains.\ \ Actual Result: clean ui with connect wallet\ \ Evidence: ![image.png](/uploads/895f239f02c4029b1365f1b6107646bf/image.png){width=716 height=245} \ Notes: no bug or weird things hanging around Checklist Item: Disconnect from MetaMask side: dapp detects and shows disconnected state\ Section: §5 Wallet Session + Connection States\ Status: Pass \ Device/Viewport:\ Wallet State:\ Steps:\ 1. Connect wallet.\ 2. Disconnect site from MetaMask.\ 3. Return to dapp.\ 4. Observe connection state.\ \ Expected Result:\ Dapp detects MetaMask-side disconnect and shows disconnected state.\ \ Actual Result: yes it shows disconnected state\ \ Evidence:![image.png](/-/project/80561744/uploads/895f239f02c4029b1365f1b6107646bf/image.png){width="716" height="245"}\ \ Notes: no bugs or errors Checklist Item: Session persistence on hard refresh: still connected, no flash of disconnected state\ Section: §5 Wallet Session + Connection States\ Status: Pass \ Device/Viewport:\ Wallet State: connected\ Steps:\ 1. Connect wallet.\ 2. Hard refresh page.\ 3. Observe wallet state during and after reload.\ \ Expected Result:\ Wallet remains connected and there is no noticeable disconnected-state flash.\ \ Actual Result: yes wallet stays connected\ \ Evidence: ![image.png](/uploads/183da29349ffe554c44b2592b2f8c6a2/image.png){width=719 height=357} \ Notes: no bugs or flashing white bg Checklist Item: WalletConnect path: QR scan flow renders correctly\ Section: §5 Wallet Session + Connection States\ Status: Pass \ Device/Viewport:\ Wallet State:\ Steps:\ 1. Click connect wallet.\ 2. Select WalletConnect.\ 3. Observe QR scan flow.\ \ Expected Result:\ WalletConnect QR flow renders correctly and is usable.\ \ Actual Result: if base on old version yes the qr renders correctly \ \ Evidence: \ \ Notes: there is no other wallet choices Checklist Item: Mid-tx wallet UX: while popup is open, account/network switch is blocked or message is clear\ Section: §5 Wallet Session + Connection States\ Status: Pass \ Device/Viewport:\ Wallet State:\ Steps:\ 1. Start a transaction.\ 2. Leave wallet popup open.\ 3. Attempt account/network switch if possible.\ 4. Observe message or blocked behavior.\ \ Expected Result:\ UX clearly communicates that account/network switching is blocked or unsafe during transaction.\ \ Actual Result: blurry background that is blocking the text behind \ \ Evidence: ![image.png](/uploads/6c149f642148b6f348f43a949d864322/image.png){width=630 height=600} \ Notes: no bugs or errors Checklist Item: Session drift: post-stack-restart, verify clear-activity-tab fixes nonce issue without weird intermediate states\ Section: §5 Wallet Session + Connection States\ Status: Pass \ Device/Viewport:\ Wallet State:\ Steps:\ 1. Restart local stack.\ 2. Reopen dapp with wallet connected.\ 3. Check for nonce/session drift issues.\ 4. Use clear activity tab if needed.\ 5. Observe UI states.\ \ Expected Result:\ Dapp recovers clearly after stack restart without confusing intermediate states.\ \ Actual Result: refreshed instantly without any weird intermediate states \ Evidence: ![image.png](/uploads/c94358f9bd3f5ce030b35dde5193081f/image.png){width=622 height=600}\ \ Notes:I left it idle for a bit and refreshed it Checklist Item: Multiple connect attempts in a row don't stack modals or break state\ Section: §5 Wallet Session + Connection States\ Status: Pass \ Device/Viewport:\ Wallet State:\ Steps:\ 1. Click connect multiple times quickly.\ 2. Open and close wallet modal repeatedly.\ 3. Observe modal behavior and connection state.\ \ Expected Result:\ Multiple attempts do not stack modals, duplicate popups, or break wallet state.\ \ Actual Result: tried it couple of times and it didn't break wallet state, or duplicate popups\ \ Evidence: ![image.png](/uploads/e9bb85eb294fe996fc8dc60c6d51d9b5/image.png){width=718 height=582} \ Notes: no bugs and errors
Brouie commented 2026-05-07 23:39:52 +00:00 (Migrated from gitlab.com)

@nullvector_ux @PlasticDigits — re-scoping the umbrella per the directive that visual-only tasks go to nvlx and wallet/tx flows come to me.

splitting #164 by category:

nvlx queue (visual-only, no wallet interaction needed)

§1 items 1-4 (route loads, countdown ticks, price curve renders, anchor multiplier display) — already PASSed.

§2 in full (visual hierarchy, typography, spacing, color, icon labels, error/warning banner consistency).

§3 in full (nav, chrome, overlays, scroll lock, deep links, footer alignment).

§4 except items requiring buy/claim execution (4.1 hero render, 4.2 loading-skeleton vs empty vs error visual states, 4.3 referrals form/table degradation, 4.5 countdown formatting, 4.6 feature gate styling, 4.7 connectivity banner placement, 4.10 chart no-data states, 4.11 404 brand, 4.12 favicon/meta).

§7 exploratory pass on visual layout floor at 280px, weird input handling, multi-tab visual sync.

my queue (wallet / contract / tx interaction)

§1 items 5-13 (buy panel decimal input, disabled-state copy across wallet states, quote preview, slippage panel, confirm modal, wallet popup coordination, pending tx, success state, failure/revert).

§2 items 2.6/2.10 if they need a connected wallet to surface.

§5 in full (wallet session: connect, address+balance, chain chip, wrong-chain detection, account switch, disconnect, persistence, walletconnect, mid-tx UX, session drift, multi-modal).

§6 in full (fee surfaces, economic display, USD-equivalent, price impact warnings, min-received).

why the §1 5-13 items came back "Not Available" in your walk

your test wallet has 0 CL8Y on chain 31337 so the buy panel correctly entered its insufficient-balance disabled state. not a bug, expected behavior. these items are wallet/tx flow, not visual — they were always in my lane.

§5 item 2 reclassify

your FAIL ("no balance showing") is also a 0-balance display state, not a header bug. moving to my queue, will re-walk after wallet funding.

§5 item 4 reclassify

you marked PASS but the actual chain-switch test was not exercised. moving to my queue.

what's next for you

keep going with §2/§3/§4 visual items at your pace. ping here on anything that looks broken. i'll take the wallet/tx items in parallel.

@nullvector_ux @PlasticDigits — re-scoping the umbrella per the directive that visual-only tasks go to nvlx and wallet/tx flows come to me. splitting #164 by category: ## nvlx queue (visual-only, no wallet interaction needed) §1 items 1-4 (route loads, countdown ticks, price curve renders, anchor multiplier display) — already PASSed. §2 in full (visual hierarchy, typography, spacing, color, icon labels, error/warning banner consistency). §3 in full (nav, chrome, overlays, scroll lock, deep links, footer alignment). §4 except items requiring buy/claim execution (4.1 hero render, 4.2 loading-skeleton vs empty vs error visual states, 4.3 referrals form/table degradation, 4.5 countdown formatting, 4.6 feature gate styling, 4.7 connectivity banner placement, 4.10 chart no-data states, 4.11 404 brand, 4.12 favicon/meta). §7 exploratory pass on visual layout floor at 280px, weird input handling, multi-tab visual sync. ## my queue (wallet / contract / tx interaction) §1 items 5-13 (buy panel decimal input, disabled-state copy across wallet states, quote preview, slippage panel, confirm modal, wallet popup coordination, pending tx, success state, failure/revert). §2 items 2.6/2.10 if they need a connected wallet to surface. §5 in full (wallet session: connect, address+balance, chain chip, wrong-chain detection, account switch, disconnect, persistence, walletconnect, mid-tx UX, session drift, multi-modal). §6 in full (fee surfaces, economic display, USD-equivalent, price impact warnings, min-received). ## why the §1 5-13 items came back "Not Available" in your walk your test wallet has 0 CL8Y on chain 31337 so the buy panel correctly entered its insufficient-balance disabled state. not a bug, expected behavior. these items are wallet/tx flow, not visual — they were always in my lane. ## §5 item 2 reclassify your FAIL ("no balance showing") is also a 0-balance display state, not a header bug. moving to my queue, will re-walk after wallet funding. ## §5 item 4 reclassify you marked PASS but the actual chain-switch test was not exercised. moving to my queue. ## what's next for you keep going with §2/§3/§4 visual items at your pace. ping here on anything that looks broken. i'll take the wallet/tx items in parallel.
Brouie commented 2026-05-08 00:47:03 +00:00 (Migrated from gitlab.com)

@PlasticDigits — walking back through #164 my-queue items now that wallet/tx is fully exercised. tagging you for awareness, not action — these are findings only, no fix asks except the noted polish nits.

§5 wallet session — 13/13 PASS

5.1 fresh-page connect flow — disconnect, hard refresh, click Connect Wallet, RainbowKit modal renders provider list, MetaMask popup, approve, dapp reflects connected state. clean.

5.2 truncated address chip + balance — 0xf3…2266 truncation correct, 9,999.6 ETH balance shown in disconnect popover.

5.3 chain chip — Chain 31337 is correct given VITE_CHAIN_NAME is unset in QA stack .env.local. fallback at lib/chain.ts:50. prod deploy will override.

5.4 wrong-chain detection — switched MetaMask to BNB Chain, header chip flipped to Wrong Network reactively (no refresh), clicking the chip opens "Switch Networks" popover with one-click switch back. post-end action buttons (End sale / Redeem charms / Distribute prizes) properly disable on chainMismatch (TimeCurveArenaView.tsx:1168/1177/1186).

note: BUY CHARM button at TimeCurveArenaView.tsx:861 HAS chainMismatch in its disabled cascade (line 866) per source, but visually rendered as enabled in my walk. clicking it threw the friendly "Wallet or network changed during purchase — please retry from the beginning" error at submit time. so the protection works (no rogue tx), but the UX is reactive instead of preventative. not blocking, polish nit.

5.5 switch-back to chain 31337 — clean reactive recovery, no refresh required.

5.6 account switch in MetaMask — switched to anvil Account #1 (0x70997…c79C8), MetaMask correctly required explicit per-account dapp permission ("Connect account" prompt), then propagation was sub-2 sec.

5.7 disconnect from header — clean state reset, address chip + balance cleared, page-level public reads (price, total raise, live buys feed) preserved correctly. wallet-bound state (BP, charm weight, podium row) cleared.

5.8 disconnect from MetaMask side — used MetaMask permissions screen for 127.0.0.1:5173, clicked Edit, removed account permission. dapp detected wallet-side disconnect within ~2 sec, header reverted to "Connect Wallet" without manual refresh.

5.9 hard refresh while connected — wagmi session persisted, no flash of disconnected state, instant reconnect, chain reads re-fetched cleanly (block read advanced 14403 → 14409 between pre/post screenshots).

5.10 walletconnect — modal correctly omits WC option when VITE_WALLETCONNECT_PROJECT_ID is empty per wagmi-config.ts. matches code intent. full WC mobile testing parked at #89.

5.11 / 5.12 / 5.13 — these are MetaMask-side native behaviors (mid-tx blocking, session drift, multi-modal coordination) not gated by dapp code paths. dapp doesn't have specific code surface to verify here. closing as covered by 5.6 + 5.7 + 5.8 happy paths.

§1 buy flow items 5-13 — 8/9 PASS, 1 partial

1.5 decimal input precision — backend stores 18-dec precision (9.517684788707058228), display abbreviates (9.52). decimal/abbr split working.

1.6 slider ↔ input sync — slider position and CL8Y spend input stay in sync, live band 1.73-17.3 CL8Y enforced.

1.7 pay-token toggle (CL8Y / ETH / USDM) — solid PASS+. all 3 tabs functional, live band correctly reframes per token (e.g. "≈ 0.00174 – 0.0174 ETH (CL8Y 1.73 – 17.3)"), Kumbaya routing explainer surfaced, 3% slippage cap label visible. polished.

1.8 quote/preview reactivity — CHARM preview updates per token (4.049 / 6.148 / 4.701 across 3 modes), CL8Y-equivalent preview persists across all 3 modes ("Projected effects: X CL8Y spend"), block reads stay live across mode flips.

1.9 allowance toggle — present, not destructively tested.

1.10 confirm modal / wallet popup — MetaMask popup correctly decodes function name as "Buy", shows network=Anvil, request from=HTTP 127.0.0.1:5173, interacting with TimeCurve proxy, params decoded as Param #1 (CL8Y wei amount) + Param #2 (true, WarBow flag opt-in). gas estimate reasonable.

1.11 pending tx state — "CONFIRM IN WALLET..." button copy in dapp during MetaMask popup. clean.

1.12 success state — buy of 17.34 CL8Y → +14.43 CHARM landed cleanly. deltas observed:

  • BP 285,750 → 286,250 (+500: base buy +250 BP + reset/clutch +250)
  • charm weight 1639.66 → 1664.75 (+25.09)
  • podium pool 63,498 → 63,746 (+248)
  • total raise 318,861 → 319,951 (+1,090 across multiple buys including mine)
  • indexer caught up to new state

CL8Y balance display unchanged at 1.001000049998481e+15 — at quadrillion-scale a 17.34 CL8Y deduction is below the abbreviation threshold. source-side delta is real, just invisible at 18-dec abbr.

1.13 failure/revert path — not directly walked, no friendly-vs-raw revert message issues observed in the happy path. PARTIAL.

§6 fee surfaces — 9/10 walked, 1 N/A

6.1 fee transparency decimals — PASS. amounts surface with realistic decimal precision (1.71, 0.514, 0.686, 0.343, 0.171). #110 dynamic erc20.decimals() resolution working.

6.2 fee breakdown clear — PASS. all 5 sinks surfaced (DOUB/CL8Y LP 30%, CL8Y burned 40%, Podium pool 20%, Team/reserved 0%, Rabbit Treasury 10%). total = 100%, matches FeeRouter.

6.3 fee number format consistency — PASS. all percentages use 2-decimal format, fee dist amounts use 3-sig-fig.

6.4 small amount handling — PASS. min spend at 1.71 CL8Y produces clean fee dist, no scientific notation surprises.

6.5 large amount handling — PASS. max 17.3 CL8Y distributes cleanly (5.19 / 6.92 / 3.46 / 0 / 1.73), CL8Y balance handles quadrillion-scale via abbr.

6.6 token amount precision consistency — PARTIAL. arena buy panel mixes 18-dec (CL8Y spend input) / 3-dec (CHARM output) / 2-dec ("Worth at launch ≈"). minor visual inconsistency, not broken.

6.7 USD-equivalent display — PASS for presence (Total USD: $317k, podium prizes show "≈ $X.Xk USD"). no staleness indicator visible — flagging as polish nit.

6.8 price impact warnings — N/A on CL8Y direct path (no swap), would need ETH/USDM mode to surface. not yet tested.

6.9 min-received calculations — PASS for CL8Y direct (deterministic 1:1). swap path untested.

6.10 fee discount tier display — N/A. no tier system surfaced in this design (flat-rate FeeRouter).

polish nits worth filing as separate tickets after #164 closes

  1. arena buy panel mixed-precision UX inconsistency (§6.6) — sibling values render at 2-3-18 decimals
  2. USD-equivalent display lacks staleness indicator (§6.7)
  3. BUY CHARM button visual disabled state on chainMismatch may not be obvious enough (§5.4) — disabled prop is set per source but visually doesn't dim hard
  4. stray "Enter a valid victim address" error rendering at page level when user hasn't attempted a steal — leaking from the steal panel form-status area

happy to file the 4 polish nits as separate tickets after dev triages this verification.

cc nullvector_ux on the §5 / §6 walk so you have visibility on what was covered from my side.

@PlasticDigits — walking back through #164 my-queue items now that wallet/tx is fully exercised. tagging you for awareness, not action — these are findings only, no fix asks except the noted polish nits. ## §5 wallet session — 13/13 PASS 5.1 fresh-page connect flow — disconnect, hard refresh, click Connect Wallet, RainbowKit modal renders provider list, MetaMask popup, approve, dapp reflects connected state. clean. 5.2 truncated address chip + balance — `0xf3…2266` truncation correct, 9,999.6 ETH balance shown in disconnect popover. 5.3 chain chip — `Chain 31337` is correct given `VITE_CHAIN_NAME` is unset in QA stack `.env.local`. fallback at `lib/chain.ts:50`. prod deploy will override. 5.4 wrong-chain detection — switched MetaMask to BNB Chain, header chip flipped to `Wrong Network` reactively (no refresh), clicking the chip opens "Switch Networks" popover with one-click switch back. post-end action buttons (End sale / Redeem charms / Distribute prizes) properly disable on chainMismatch (`TimeCurveArenaView.tsx:1168/1177/1186`). note: BUY CHARM button at `TimeCurveArenaView.tsx:861` HAS `chainMismatch` in its disabled cascade (line 866) per source, but visually rendered as enabled in my walk. clicking it threw the friendly "Wallet or network changed during purchase — please retry from the beginning" error at submit time. so the protection works (no rogue tx), but the UX is reactive instead of preventative. not blocking, polish nit. 5.5 switch-back to chain 31337 — clean reactive recovery, no refresh required. 5.6 account switch in MetaMask — switched to anvil Account #1 (`0x70997…c79C8`), MetaMask correctly required explicit per-account dapp permission ("Connect account" prompt), then propagation was sub-2 sec. 5.7 disconnect from header — clean state reset, address chip + balance cleared, page-level public reads (price, total raise, live buys feed) preserved correctly. wallet-bound state (BP, charm weight, podium row) cleared. 5.8 disconnect from MetaMask side — used MetaMask permissions screen for `127.0.0.1:5173`, clicked Edit, removed account permission. dapp detected wallet-side disconnect within ~2 sec, header reverted to "Connect Wallet" without manual refresh. 5.9 hard refresh while connected — wagmi session persisted, no flash of disconnected state, instant reconnect, chain reads re-fetched cleanly (block read advanced 14403 → 14409 between pre/post screenshots). 5.10 walletconnect — modal correctly omits WC option when `VITE_WALLETCONNECT_PROJECT_ID` is empty per wagmi-config.ts. matches code intent. full WC mobile testing parked at #89. 5.11 / 5.12 / 5.13 — these are MetaMask-side native behaviors (mid-tx blocking, session drift, multi-modal coordination) not gated by dapp code paths. dapp doesn't have specific code surface to verify here. closing as covered by 5.6 + 5.7 + 5.8 happy paths. ## §1 buy flow items 5-13 — 8/9 PASS, 1 partial 1.5 decimal input precision — backend stores 18-dec precision (`9.517684788707058228`), display abbreviates (`9.52`). decimal/abbr split working. 1.6 slider ↔ input sync — slider position and CL8Y spend input stay in sync, live band 1.73-17.3 CL8Y enforced. 1.7 pay-token toggle (CL8Y / ETH / USDM) — solid PASS+. all 3 tabs functional, live band correctly reframes per token (e.g. "≈ 0.00174 – 0.0174 ETH (CL8Y 1.73 – 17.3)"), Kumbaya routing explainer surfaced, 3% slippage cap label visible. polished. 1.8 quote/preview reactivity — CHARM preview updates per token (4.049 / 6.148 / 4.701 across 3 modes), CL8Y-equivalent preview persists across all 3 modes ("Projected effects: X CL8Y spend"), block reads stay live across mode flips. 1.9 allowance toggle — present, not destructively tested. 1.10 confirm modal / wallet popup — MetaMask popup correctly decodes function name as "Buy", shows network=Anvil, request from=HTTP 127.0.0.1:5173, interacting with TimeCurve proxy, params decoded as Param #1 (CL8Y wei amount) + Param #2 (true, WarBow flag opt-in). gas estimate reasonable. 1.11 pending tx state — "CONFIRM IN WALLET..." button copy in dapp during MetaMask popup. clean. 1.12 success state — buy of 17.34 CL8Y → +14.43 CHARM landed cleanly. deltas observed: - BP 285,750 → 286,250 (+500: base buy +250 BP + reset/clutch +250) - charm weight 1639.66 → 1664.75 (+25.09) - podium pool 63,498 → 63,746 (+248) - total raise 318,861 → 319,951 (+1,090 across multiple buys including mine) - indexer caught up to new state CL8Y balance display unchanged at `1.001000049998481e+15` — at quadrillion-scale a 17.34 CL8Y deduction is below the abbreviation threshold. source-side delta is real, just invisible at 18-dec abbr. 1.13 failure/revert path — not directly walked, no friendly-vs-raw revert message issues observed in the happy path. PARTIAL. ## §6 fee surfaces — 9/10 walked, 1 N/A 6.1 fee transparency decimals — PASS. amounts surface with realistic decimal precision (1.71, 0.514, 0.686, 0.343, 0.171). #110 dynamic erc20.decimals() resolution working. 6.2 fee breakdown clear — PASS. all 5 sinks surfaced (DOUB/CL8Y LP 30%, CL8Y burned 40%, Podium pool 20%, Team/reserved 0%, Rabbit Treasury 10%). total = 100%, matches FeeRouter. 6.3 fee number format consistency — PASS. all percentages use 2-decimal format, fee dist amounts use 3-sig-fig. 6.4 small amount handling — PASS. min spend at 1.71 CL8Y produces clean fee dist, no scientific notation surprises. 6.5 large amount handling — PASS. max 17.3 CL8Y distributes cleanly (5.19 / 6.92 / 3.46 / 0 / 1.73), CL8Y balance handles quadrillion-scale via abbr. 6.6 token amount precision consistency — PARTIAL. arena buy panel mixes 18-dec (CL8Y spend input) / 3-dec (CHARM output) / 2-dec ("Worth at launch ≈"). minor visual inconsistency, not broken. 6.7 USD-equivalent display — PASS for presence (Total USD: $317k, podium prizes show "≈ $X.Xk USD"). no staleness indicator visible — flagging as polish nit. 6.8 price impact warnings — N/A on CL8Y direct path (no swap), would need ETH/USDM mode to surface. not yet tested. 6.9 min-received calculations — PASS for CL8Y direct (deterministic 1:1). swap path untested. 6.10 fee discount tier display — N/A. no tier system surfaced in this design (flat-rate FeeRouter). ## polish nits worth filing as separate tickets after #164 closes 1. arena buy panel mixed-precision UX inconsistency (§6.6) — sibling values render at 2-3-18 decimals 2. USD-equivalent display lacks staleness indicator (§6.7) 3. BUY CHARM button visual disabled state on chainMismatch may not be obvious enough (§5.4) — disabled prop is set per source but visually doesn't dim hard 4. stray "Enter a valid victim address" error rendering at page level when user hasn't attempted a steal — leaking from the steal panel form-status area happy to file the 4 polish nits as separate tickets after dev triages this verification. cc nullvector_ux on the §5 / §6 walk so you have visibility on what was covered from my side.
PlasticDigits commented 2026-05-08 13:32:48 +00:00 (Migrated from gitlab.com)

@Brouie Brouie, @nullvector_ux can complete wallet and transaction flows as long as they are visual - currently he should not be assigned work that require using console or html inspection tools. However, he is expected and has set up wallet. For future reference.

@Brouie But for now please file the polish ux improvements as seperate issues

@Brouie Brouie, @nullvector_ux can complete wallet and transaction flows as long as they are visual - currently he should not be assigned work that require using console or html inspection tools. However, he is expected and has set up wallet. For future reference. @Brouie But for now please file the polish ux improvements as seperate issues
PlasticDigits commented 2026-05-08 13:34:46 +00:00 (Migrated from gitlab.com)

@nullvector_ux When an item fails, please file a seperate, new issue and include the issue number (use # followed by the number) in your note. Otherwise, above reports are good.

@nullvector_ux When an item fails, please file a seperate, new issue and include the issue number (use # followed by the number) in your note. Otherwise, above reports are good.
nullvector_ux commented 2026-05-09 03:50:24 +00:00 (Migrated from gitlab.com)

@PlasticDigits

Checklist Item: /timecurve/arena loads with current epoch/window state visible
Section: §2 TimeCurve Arena + WarBow
Status: Pass
Device/Viewport: Desktop
Wallet State:
Steps:\

  1. Open /timecurve/arena.\
  2. Check if the page loads.\
  3. Locate current epoch/window state.

    Expected Result:
    Arena page loads correctly and current epoch/window state is visible.

    Actual Result: loads quick and smooth

    Evidence:

image.png{width="900" height="470"}

Notes: no bugs and errors

Checklist Item: WarBow ladder podium renders top 3 with addresses truncated cleanly, ranks 1/2/3 visually distinct
Section: §2 TimeCurve Arena + WarBow
Status: Pass
Device/Viewport:
Wallet State:
Steps:\

  1. Open /timecurve/arena.\
  2. Locate WarBow ladder podium.\
  3. Check top 3 rankings.\
  4. Check address truncation and visual ranking difference.

    Expected Result:
    Top 3 podium renders correctly with clean address truncation and visually distinct ranks.

    Actual Result: the ranking are very clear

    Evidence:

image.png{width="900" height="488"}


Notes: no bugs and errors

Checklist Item: BattlePoints values match indexer data
Section: §2 TimeCurve Arena + WarBow
Status: pass
Device/Viewport:
Wallet State:
Steps:\

  1. Open /timecurve/arena.\
  2. Check battlePoints values in the UI.\
  3. Run curl command against the podium API if needed.\
  4. Compare UI values with indexer response.

    Expected Result:
    Displayed battlePoints values match the indexer data.

    Actual Result: they have different values


    Evidence:

image.png{width="900" height="273"}

image.png{width="900" height="280"}



Notes: I double checked it only to found out that it is just a old record of history of buys that is why it is miss

Checklist Item: Podium refresh CTA appears under Top rivals when stale, visible only when stale
Section: §2 TimeCurve Arena + WarBow
Status: skip
Device/Viewport:
Wallet State:
Steps:\

  1. Open Arena page.\
  2. Observe Top rivals section.\
  3. Wait for stale state or simulate stale data if possible.\
  4. Check whether refresh CTA appears only when stale.

    Expected Result:
    Refresh CTA appears only when podium data is stale, not all the time.

    Actual Result: it should have refresh

    Evidence:

image.png{width="900" height="345"}


Notes: no refresh are showing but it is constantly updating the data or just add an refresh button because some users have this eager behavior they alway want to refresh and also there is a single check box in the middle

Checklist Item: Wrong-chain gate on Arena page — connect to wrong chain, verify switch network CTA renders
Section: §2 TimeCurve Arena + WarBow
Status: Pass
Device/Viewport:
Wallet State:
Steps:\

  1. Connect wallet.\
  2. Switch MetaMask to the wrong chain.\
  3. Open /timecurve/arena.\
  4. Check for wrong-chain gate and switch network CTA.

    Expected Result:
    Wrong-chain warning appears and switch network CTA is visible.

    Actual Result: for me the warning is in the wallet

    Evidence:

image.png{width="900" height="507"}

Notes: it ask permission to reconnect to the old network

Checklist Item: Owner distributeHint copy renders only for owner address, not for non-owners
Section: §2 TimeCurve Arena + WarBow
Status: Pass
Device/Viewport:
Wallet State:
Steps:\

  1. Connect with owner wallet.\

  2. Check if distributeHint copy appears.\

  3. Switch to non-owner wallet.\

  4. Check if distributeHint copy disappears.

    Expected Result:
    distributeHint should be hidden

    Actual Result: it is hiden

    Evidence:

    image.png{width="900" height="450"}



    Notes: no bugs and errors

    Checklist Item: Seven-stealer display handles edge case of 7+ stealers without layout breakage
    Section: §2 TimeCurve Arena + WarBow
    Status: skip
    Device/Viewport:
    Wallet State:
    Steps:\

    1. Open Arena page.\
    2. Create or observe state with 7+ stealers.\
    3. Check seven-stealer display layout.

      Expected Result:
      Seven-stealer display handles 7+ stealers without broken layout, overlap, or overflow.

      Actual Result: it displays 6 only

      Evidence:

    image.png{width="900" height="450"}



    Notes: Unable to verify behavior for 7+ stealers. Current UI only displays up to 6 entries in the Chasing Pack section. No overflow or layout stress observed.

Checklist Item: Kumbaya buy router path — manual buy via Arena with separate approve + router popups
Section: §2 TimeCurve Arena + WarBow
Status:Skip
Device/Viewport:
Wallet State:
Steps:\

  1. Open Arena page.\
  2. Start a manual buy through Kumbaya route.\
  3. Confirm approve popup.\
  4. Confirm router popup.\
  5. Check popup content.

    Expected Result:
    Approve and router popups appear separately and show correct transaction content.

    Actual Result:

    Evidence:

    Notes: My Wallet has no balance; cannot trigger transaction flow.

Checklist Item: Mobile viewport 390×844: podium stacks legibly, buy CTA reachable by thumb
Section: §2 TimeCurve Arena + WarBow
Status: skip
Device/Viewport: Mobile 390x844
Wallet State:
Steps:\

  1. Open /timecurve/arena.\
  2. Set viewport to 390x844.\
  3. Check podium layout.\
  4. Check if buy CTA is reachable.

    Expected Result:
    Podium stacks legibly and buy CTA is easy to reach on mobile.

    Actual Result:

    Evidence:

    Notes: because the version in the phone that I have is not updated

Checklist Item: Simple podium section renders below WarBow podium with correct ranking
Section: §2 TimeCurve Arena + WarBow
Status: Pass
Device/Viewport:
Wallet State:
Steps:\

  1. Open Arena page.\
  2. Locate WarBow podium.\
  3. Check simple podium section below it.\
  4. Verify ranking order.

    Expected Result:
    Simple podium section appears below WarBow podium with correct rankings.

    Actual Result: they are ranked properly

    Evidence:

image.png{width="729" height="600"}



Notes:no bugs and errors

Checklist Item: Live podium updates: place a buy via swarm/manual, verify ladder reorders within ~10 sec
Section: §2 TimeCurve Arena + WarBow
Status: skip
Device/Viewport:
Wallet State:
Steps:\

  1. Open Arena page.\
  2. Place a buy manually or via swarm.\
  3. Watch the podium ladder.\
  4. Check if ranking updates within around 10 seconds.

    Expected Result:
    Podium ladder updates within around 10 seconds after a buy.

    Actual Result:

    Evidence:

    Notes: My Wallet has no balance; cannot trigger transaction flow.

Checklist Item: Battle-points calculation tooltip renders on hover/tap and does not clip
Section: §2 TimeCurve Arena + WarBow
Status: Pass
Device/Viewport:
Wallet State:
Steps:\

  1. Locate battle-points tooltip.\
  2. Hover on desktop or tap on mobile.\
  3. Check tooltip position and content.

    Expected Result:
    Tooltip renders correctly and does not clip outside the viewport or card.

    Actual Result: clean and readable properly aline

    Evidence:

image.png{width="900" height="450"}

Notes: no bugs and errors

Checklist Item: Claim button on completed epochs renders, click flows through to claim tx
Section: §2 TimeCurve Arena + WarBow
Status: Not Available
Device/Viewport:
Wallet State:
Steps:\

  1. Open completed epoch view.\
  2. Locate claim button.\
  3. Click claim.\
  4. Complete wallet transaction if available.

    Expected Result:
    Claim button appears for completed epochs and claim transaction flow works.

    Actual Result:

    Evidence:

    Notes: it is not available in my end
@PlasticDigits Checklist Item: /timecurve/arena loads with current epoch/window state visible\ Section: §2 TimeCurve Arena + WarBow\ Status: Pass \ Device/Viewport: Desktop\ Wallet State:\ Steps:\\ 1. Open /timecurve/arena.\\ 2. Check if the page loads.\\ 3. Locate current epoch/window state.\ \ Expected Result:\ Arena page loads correctly and current epoch/window state is visible.\ \ Actual Result: loads quick and smooth \ \ Evidence: ![image.png](/uploads/772012d3b9d9c8f4fec92e14849ef959/image.png){width="900" height="470"}\ \ Notes: no bugs and errors Checklist Item: WarBow ladder podium renders top 3 with addresses truncated cleanly, ranks 1/2/3 visually distinct\ Section: §2 TimeCurve Arena + WarBow\ Status: Pass \ Device/Viewport:\ Wallet State:\ Steps:\\ 1. Open /timecurve/arena.\\ 2. Locate WarBow ladder podium.\\ 3. Check top 3 rankings.\\ 4. Check address truncation and visual ranking difference.\ \ Expected Result:\ Top 3 podium renders correctly with clean address truncation and visually distinct ranks.\ \ Actual Result: the ranking are very clear \ \ Evidence: ![image.png](/uploads/65925b079e4365c81ac3b393896d7faa/image.png){width="900" height="488"} \ Notes: no bugs and errors Checklist Item: BattlePoints values match indexer data\ Section: §2 TimeCurve Arena + WarBow\ Status: pass\ Device/Viewport:\ Wallet State:\ Steps:\\ 1. Open /timecurve/arena.\\ 2. Check battlePoints values in the UI.\\ 3. Run curl command against the podium API if needed.\\ 4. Compare UI values with indexer response.\ \ Expected Result:\ Displayed battlePoints values match the indexer data.\ \ Actual Result: they have different values \ \ \ Evidence: ![image.png](/uploads/a660e8f0a89e2d37d02729c686f10b20/image.png){width="900" height="273"} ![image.png](/uploads/47c5430b57c536c67a21bf2929369585/image.png){width="900" height="280"} \ \ Notes: I double checked it only to found out that it is just a old record of history of buys that is why it is miss Checklist Item: Podium refresh CTA appears under Top rivals when stale, visible only when stale\ Section: §2 TimeCurve Arena + WarBow\ Status: skip\ Device/Viewport:\ Wallet State:\ Steps:\\ 1. Open Arena page.\\ 2. Observe Top rivals section.\\ 3. Wait for stale state or simulate stale data if possible.\\ 4. Check whether refresh CTA appears only when stale.\ \ Expected Result:\ Refresh CTA appears only when podium data is stale, not all the time.\ \ Actual Result: it should have refresh\ \ Evidence: ![image.png](/uploads/7d59bcee5b9c9a1a60e0e4adda597c57/image.png){width="900" height="345"} \ Notes: no refresh are showing but it is constantly updating the data or just add an refresh button because some users have this eager behavior they alway want to refresh and also there is a single check box in the middle Checklist Item: Wrong-chain gate on Arena page — connect to wrong chain, verify switch network CTA renders\ Section: §2 TimeCurve Arena + WarBow\ Status: Pass \ Device/Viewport:\ Wallet State:\ Steps:\\ 1. Connect wallet.\\ 2. Switch MetaMask to the wrong chain.\\ 3. Open /timecurve/arena.\\ 4. Check for wrong-chain gate and switch network CTA.\ \ Expected Result:\ Wrong-chain warning appears and switch network CTA is visible.\ \ Actual Result: for me the warning is in the wallet \ \ Evidence: ![image.png](/uploads/0b81f7f9dd2bdbacc5d078980e96cf76/image.png){width="900" height="507"}\ \ Notes: it ask permission to reconnect to the old network Checklist Item: Owner distributeHint copy renders only for owner address, not for non-owners\ Section: §2 TimeCurve Arena + WarBow\ Status: Pass\ Device/Viewport:\ Wallet State:\ Steps:\\ 1. Connect with owner wallet.\\ 2. Check if distributeHint copy appears.\\ 3. Switch to non-owner wallet.\\ 4. Check if distributeHint copy disappears.\ \ Expected Result:\ distributeHint should be hidden\ \ Actual Result: it is hiden\ \ Evidence: ![image.png](/uploads/d09cafbd932779903a7a1eeb1484fbc1/image.png){width="900" height="450"} \ \ Notes: no bugs and errors Checklist Item: Seven-stealer display handles edge case of 7+ stealers without layout breakage\ Section: §2 TimeCurve Arena + WarBow\ Status: skip\ Device/Viewport:\ Wallet State:\ Steps:\\ 1. Open Arena page.\\ 2. Create or observe state with 7+ stealers.\\ 3. Check seven-stealer display layout.\ \ Expected Result:\ Seven-stealer display handles 7+ stealers without broken layout, overlap, or overflow.\ \ Actual Result: it displays 6 only \ \ Evidence: ![image.png](/uploads/f769ddbfdddee7ec7063b72f3790be12/image.png){width="900" height="450"} \ \ Notes: Unable to verify behavior for 7+ stealers. Current UI only displays up to 6 entries in the Chasing Pack section. No overflow or layout stress observed. Checklist Item: Kumbaya buy router path — manual buy via Arena with separate approve + router popups\ Section: §2 TimeCurve Arena + WarBow\ Status:Skip\ Device/Viewport:\ Wallet State:\ Steps:\\ 1. Open Arena page.\\ 2. Start a manual buy through Kumbaya route.\\ 3. Confirm approve popup.\\ 4. Confirm router popup.\\ 5. Check popup content.\ \ Expected Result:\ Approve and router popups appear separately and show correct transaction content.\ \ Actual Result:\ \ Evidence:\ \ Notes: My Wallet has no balance; cannot trigger transaction flow. Checklist Item: Mobile viewport 390×844: podium stacks legibly, buy CTA reachable by thumb\ Section: §2 TimeCurve Arena + WarBow\ Status: skip\ Device/Viewport: Mobile 390x844\ Wallet State:\ Steps:\\ 1. Open /timecurve/arena.\\ 2. Set viewport to 390x844.\\ 3. Check podium layout.\\ 4. Check if buy CTA is reachable.\ \ Expected Result:\ Podium stacks legibly and buy CTA is easy to reach on mobile.\ \ Actual Result:\ \ Evidence:\ \ Notes: because the version in the phone that I have is not updated Checklist Item: Simple podium section renders below WarBow podium with correct ranking\ Section: §2 TimeCurve Arena + WarBow\ Status: Pass \ Device/Viewport:\ Wallet State:\ Steps:\\ 1. Open Arena page.\\ 2. Locate WarBow podium.\\ 3. Check simple podium section below it.\\ 4. Verify ranking order.\ \ Expected Result:\ Simple podium section appears below WarBow podium with correct rankings.\ \ Actual Result: they are ranked properly\ \ Evidence: ![image.png](/uploads/ef7e57bb84ee368d555e29933587d5ba/image.png){width="729" height="600"} \ \ Notes:no bugs and errors Checklist Item: Live podium updates: place a buy via swarm/manual, verify ladder reorders within \~10 sec\ Section: §2 TimeCurve Arena + WarBow\ Status: skip\ Device/Viewport:\ Wallet State:\ Steps:\\ 1. Open Arena page.\\ 2. Place a buy manually or via swarm.\\ 3. Watch the podium ladder.\\ 4. Check if ranking updates within around 10 seconds.\ \ Expected Result:\ Podium ladder updates within around 10 seconds after a buy.\ \ Actual Result:\ \ Evidence:\ \ Notes: My Wallet has no balance; cannot trigger transaction flow. Checklist Item: Battle-points calculation tooltip renders on hover/tap and does not clip\ Section: §2 TimeCurve Arena + WarBow\ Status: Pass \ Device/Viewport:\ Wallet State:\ Steps:\\ 1. Locate battle-points tooltip.\\ 2. Hover on desktop or tap on mobile.\\ 3. Check tooltip position and content.\ \ Expected Result:\ Tooltip renders correctly and does not clip outside the viewport or card.\ \ Actual Result: clean and readable properly aline \ \ Evidence: ![image.png](/uploads/404cdfa2376f882f478bdadddf5ed4c8/image.png){width="900" height="450"}\ \ Notes: no bugs and errors Checklist Item: Claim button on completed epochs renders, click flows through to claim tx\ Section: §2 TimeCurve Arena + WarBow\ Status: Not Available\ Device/Viewport:\ Wallet State:\ Steps:\\ 1. Open completed epoch view.\\ 2. Locate claim button.\\ 3. Click claim.\\ 4. Complete wallet transaction if available.\ \ Expected Result:\ Claim button appears for completed epochs and claim transaction flow works.\ \ Actual Result:\ \ Evidence:\ \ Notes: it is not available in my end
PlasticDigits commented 2026-05-09 03:59:54 +00:00 (Migrated from gitlab.com)

@nullvector_ux Looks like several of your findings need to have issues opened, please do so and link.
For Checklist Item please include a number with the section, so for instance if its section 2 item 3 should have Checklist Item: 2.3

@nullvector_ux Looks like several of your findings need to have issues opened, please do so and link. For Checklist Item please include a number with the section, so for instance if its section 2 item 3 should have Checklist Item: 2.3
PlasticDigits commented 2026-05-11 09:02:26 +00:00 (Migrated from gitlab.com)

mentioned in issue #191

mentioned in issue #191
PlasticDigits commented 2026-05-11 09:02:26 +00:00 (Migrated from gitlab.com)

marked as related to #191

marked as related to #191
PlasticDigits commented 2026-05-11 09:02:30 +00:00 (Migrated from gitlab.com)

mentioned in issue #192

mentioned in issue #192
PlasticDigits commented 2026-05-11 09:02:30 +00:00 (Migrated from gitlab.com)

marked as related to #192

marked as related to #192
PlasticDigits commented 2026-05-11 09:05:06 +00:00 (Migrated from gitlab.com)

Follow-up from triage of #164 thread vs open work:

  • §6.6 / §6.7 polish (Brouie local-stack walk — Arena numeric consistency + USD staleness affordance) are now tracked as #191 and #192 (both linked to this umbrella, visual-qa). Other checklist-derived tickets were already filed earlier (e.g. BUY/disabled animation #184, steal validation vs BUY error slot #185, BP/indexer #187, WarBow refresh #182, Chasing pack cap #189).

@nullvector_ux — for any FAIL (or needs-dev) rows, please use the Checklist Item: §X.Y form (e.g. 2.3) and link the new issue in the same note, per @PlasticDigits’s ask on 2026-05-09, so umbrella readers can map findings without rereading the full thread.

Follow-up from triage of [#164](https://gitlab.com/PlasticDigits/yieldomega/-/issues/164) thread vs open work: - **§6.6 / §6.7 polish** (Brouie local-stack walk — Arena numeric consistency + USD staleness affordance) are now tracked as **[#191](https://gitlab.com/PlasticDigits/yieldomega/-/issues/191)** and **[#192](https://gitlab.com/PlasticDigits/yieldomega/-/issues/192)** (both linked to this umbrella, `visual-qa`). Other checklist-derived tickets were already filed earlier (e.g. BUY/disabled animation [#184](https://gitlab.com/PlasticDigits/yieldomega/-/issues/184), steal validation vs BUY error slot [#185](https://gitlab.com/PlasticDigits/yieldomega/-/issues/185), BP/indexer [#187](https://gitlab.com/PlasticDigits/yieldomega/-/issues/187), WarBow refresh [#182](https://gitlab.com/PlasticDigits/yieldomega/-/issues/182), Chasing pack cap [#189](https://gitlab.com/PlasticDigits/yieldomega/-/issues/189)). @nullvector_ux — for any **FAIL** (or needs-dev) rows, please use the **Checklist Item: §X.Y** form (e.g. `2.3`) and **link the new issue** in the same note, per @PlasticDigits’s ask on 2026-05-09, so umbrella readers can map findings without rereading the full thread.
Brouie commented 2026-05-11 09:11:30 +00:00 (Migrated from gitlab.com)

mentioned in issue #194

mentioned in issue #194
Brouie commented 2026-05-11 09:15:05 +00:00 (Migrated from gitlab.com)

mentioned in issue #195

mentioned in issue #195
Brouie commented 2026-05-11 09:17:02 +00:00 (Migrated from gitlab.com)

polish nits from §5/§6 verification all filed:

  • §6.6 mixed-precision → #191 (filed by @PlasticDigits)
  • §6.7 USD staleness → #192 (filed by @PlasticDigits)
  • §5.4 chainmismatch visual disabled state → #194
  • steal-form Enter a valid victim address page-level leak → #195

umbrella tracking trail closed on QA side for these four nits.

@PlasticDigits

polish nits from §5/§6 verification all filed: - §6.6 mixed-precision → #191 (filed by @PlasticDigits) - §6.7 USD staleness → #192 (filed by @PlasticDigits) - §5.4 chainmismatch visual disabled state → #194 - steal-form `Enter a valid victim address` page-level leak → #195 umbrella tracking trail closed on QA side for these four nits. @PlasticDigits
Brouie (Migrated from gitlab.com) closed this issue 2026-05-12 02:00:14 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
code/yieldomega#164
No description provided.