Claim button not rendered for completed epochs (Arena + WarBow) #188

Closed
opened 2026-05-09 09:30:34 +00:00 by nullvector_ux · 7 comments
nullvector_ux commented 2026-05-09 09:30:34 +00:00 (Migrated from gitlab.com)

@PlasticDigits

Section

§2 TimeCurve Arena + WarBow

  1. claim button on completed epochs renders, click flows through to claim tx

Status

Not Available


Device / Viewport

Desktop (Chrome)


Wallet State

Connected wallet (0 balance)


Steps to Reproduce

  1. Open /timecurve/arena.
  2. Navigate to podium / winners section.
  3. Look for any completed epoch view.
  4. Attempt to locate a Claim button.
  5. Attempt to trigger claim flow.

Expected Result

  • Completed epochs should display a Claim button.
  • Clicking the button should:
    • Open wallet (e.g., MetaMask)
    • Trigger a claim transaction
    • Allow user to complete reward claim

Actual Result

  • No completed epoch state is visible.
  • No Claim button is rendered anywhere in the UI.
  • No claim transaction flow can be triggered.

Notes

Claim functionality appears unavailable in the current environment.
It is unclear whether:

  • Completed epochs are not being generated, or
  • Claim UI is not implemented/rendered

Suggested Labels

bug, frontend, arena, warbow, wallet, feature-gap

### @PlasticDigits ### Section §2 TimeCurve Arena + WarBow 13. claim button on completed epochs renders, click flows through to claim tx --- ### Status Not Available --- ### Device / Viewport Desktop (Chrome) --- ### Wallet State Connected wallet (0 balance) --- ### Steps to Reproduce 1. Open `/timecurve/arena`. 2. Navigate to podium / winners section. 3. Look for any completed epoch view. 4. Attempt to locate a Claim button. 5. Attempt to trigger claim flow. --- ### Expected Result * Completed epochs should display a Claim button. * Clicking the button should: * Open wallet (e.g., MetaMask) * Trigger a claim transaction * Allow user to complete reward claim --- ### Actual Result * No completed epoch state is visible. * No Claim button is rendered anywhere in the UI. * No claim transaction flow can be triggered. --- ### Notes Claim functionality appears unavailable in the current environment.\ It is unclear whether: * Completed epochs are not being generated, or * Claim UI is not implemented/rendered --- ### Suggested Labels bug, frontend, arena, warbow, wallet, feature-gap
nullvector_ux commented 2026-05-09 09:31:56 +00:00 (Migrated from gitlab.com)

changed the description

changed the description
PlasticDigits commented 2026-05-09 10:25:28 +00:00 (Migrated from gitlab.com)

mentioned in commit 9ec87be683

mentioned in commit 9ec87be683aaefd0a5acb14f08757ffd1f4b2305
PlasticDigits commented 2026-05-09 10:26:04 +00:00 (Migrated from gitlab.com)

Fix merged (main @ 5ca00ec)

What changed

  • Root cause: Phase saleExpiredAwaitingEnd (timer past deadline, TimeCurve.ended() still false) kept the Arena Standings layout, so End sale / settlement CTAs were hidden until saleEnded — after endSale only.
  • Fix: /timecurve/arena status panel now treats saleExpiredAwaitingEnd \|\| saleEnded as the settlement surface: End sale while ended == false; Redeem charms + Distribute prizes always visible, disabled (with title + copy) until ended is true — matching onchain require(ended) for redeemCharms / distributePrizes.
  • Docs: INV-FRONTEND-188-ARENA-SETTLEMENT in docs/testing/invariants-and-business-logic.md; docs/frontend/timecurve-views.md; manual QA §188; docs/testing/strategy.md; skills/play-timecurve-warbow/SKILL.md; skills/README.md; guardrails item 34.

Verification checklist (for @nullvector_ux)

  • Repro Timer expired badge / phase with ended == false (e.g. Anvil warp past deadline, no endSale yet).
  • On /timecurve/arena, panel shows Round over — settle onchain / End sale first (not only live standings).
  • End sale present + enabled (wrong-network gate only).
  • Redeem charms visible, disabled, helper text until after End sale.
  • After End sale, Redeem follows existing gates; End sale control hidden.

Issue left open for your confirmation.

## Fix merged (main @ 5ca00ec) ### What changed - **Root cause:** Phase `saleExpiredAwaitingEnd` (timer past `deadline`, `TimeCurve.ended()` still false) kept the Arena **Standings** layout, so **End sale** / settlement CTAs were hidden until `saleEnded` — after `endSale` only. - **Fix:** `/timecurve/arena` status panel now treats **`saleExpiredAwaitingEnd \|\| saleEnded`** as the **settlement** surface: **End sale** while `ended == false`; **Redeem charms** + **Distribute prizes** always visible, **disabled** (with `title` + copy) until `ended` is true — matching onchain `require(ended)` for `redeemCharms` / `distributePrizes`. - **Docs:** `INV-FRONTEND-188-ARENA-SETTLEMENT` in `docs/testing/invariants-and-business-logic.md`; `docs/frontend/timecurve-views.md`; manual QA §188; `docs/testing/strategy.md`; `skills/play-timecurve-warbow/SKILL.md`; `skills/README.md`; guardrails item 34. ### Verification checklist (for @nullvector_ux) - [ ] Repro **Timer expired** badge / phase with **`ended == false`** (e.g. Anvil warp past deadline, no `endSale` yet). - [ ] On **`/timecurve/arena`**, panel shows **Round over — settle onchain** / **End sale first** (not only live standings). - [ ] **End sale** present + enabled (wrong-network gate only). - [ ] **Redeem charms** visible, **disabled**, helper text until after **End sale**. - [ ] After **End sale**, **Redeem** follows existing gates; **End sale** control hidden. Issue left **open** for your confirmation.
nullvector_ux commented 2026-05-09 14:47:08 +00:00 (Migrated from gitlab.com)
  • Repro Timer expired badge / phase with ended == false (e.g. Anvil warp past deadline, no endSale yet).
  • On /timecurve/arena, panel shows Round over — settle onchain / End sale first (not only live standings).

@PlasticDigits

For this 3 I havent seen any buttons even if theres time left of round end

  • End sale present + enabled (wrong-network gate only).
  • Redeem charms visible, disabled, helper text until after End sale.
  • After End sale, Redeem follows existing gates; End sale control hidden.

image.png{width=900 height=469}

* [x] Repro **Timer expired** badge / phase with **`ended == false`** (e.g. Anvil warp past deadline, no `endSale` yet). * [x] On **`/timecurve/arena`**, panel shows **Round over — settle onchain** / **End sale first** (not only live standings). @PlasticDigits For this 3 I havent seen any buttons even if theres time left of round end * [ ] **End sale** present + enabled (wrong-network gate only). * [ ] **Redeem charms** visible, **disabled**, helper text until after **End sale**. * [ ] After **End sale**, **Redeem** follows existing gates; **End sale** control hidden. ![image.png](/uploads/ce88f0984212592eb2d6236cd6c6aa17/image.png){width=900 height=469}
Brouie commented 2026-05-11 02:41:01 +00:00 (Migrated from gitlab.com)

verified at HEAD 5ca00ec — full pass on all 5 checklist items.

source spot-checks (9/9):

  • doccomment at TimeCurveArenaView.tsx:107 cites #188 — saleEnded || saleExpiredAwaitingEnd is settlement surface
  • phase-driven heading at :1155 (Round over — settle onchain)
  • three-state subheader at :1159 — Redeem and settle / End sale first / Competitive surface
  • helper copy at :1174 matches spec
  • End sale button at :1190
  • Redeem charms button at :1200-1206 with title Run End sale onchain first — redeemCharms requires TimeCurve.ended().
  • Distribute prizes button at :1215-1221 with title Run End sale onchain first — distributePrizes requires TimeCurve.ended().
  • explanatory helper at :1226 (Redeem charms and Distribute prizes stay disabled until End sale succeeds…)
  • phase enum extended at :1453 to include saleExpiredAwaitingEnd

tests:

  • vitest 307/307 pass

live walk on fresh stack at HEAD:

  • warped anvil chain time past deadline with bots killed first to prevent buy-extension races
  • phase transitioned to saleExpiredAwaitingEnd — TIMER EXPIRED badge rendered, Round over — settle onchain heading visible
  • End sale button visible and enabled (yellow CTA)
  • Redeem charms button visible, disabled visual state, helper title present on hover
  • Distribute prizes button visible, disabled visual state, helper title present on hover
  • explanatory helper line Redeem charms and Distribute prizes stay disabled until End sale succeeds — redeemCharms and distributePrizes require ended == true on TimeCurve. rendered
  • called endSale() — phase transitioned to saleEnded
  • post-end state: Redeem charms button enabled, Distribute prizes button enabled, settlement panel copy flipped to Redeem and settle, Your claim preview updated from — to 9.54k DOUB

@nullvector_ux — your earlier walk hit the timer-expired surface but on /timecurve (Simple page), not /timecurve/arena where the settlement panel lives. the Simple page intentionally points you to Arena via the hint Anyone can call endSale() now — see the Arena view. for any future runs, refresh /timecurve/arena after the timer hits zero and you'll see the End sale / Redeem charms / Distribute prizes panel.

one small nit caught during walk — separate ticket: during saleExpiredAwaitingEnd the BUY CHARM card copy reads The sale has not started yet. which is pre-sale copy reused. should say something like Timer expired. Sale awaits settlement. for the post-deadline state. low priority polish, will file separately.

ready for close on your side @PlasticDigits

verified at HEAD 5ca00ec — full pass on all 5 checklist items. source spot-checks (9/9): - doccomment at TimeCurveArenaView.tsx:107 cites #188 — `saleEnded || saleExpiredAwaitingEnd` is settlement surface - phase-driven heading at :1155 (`Round over — settle onchain`) - three-state subheader at :1159 — `Redeem and settle` / `End sale first` / `Competitive surface` - helper copy at :1174 matches spec - End sale button at :1190 - Redeem charms button at :1200-1206 with title `Run End sale onchain first — redeemCharms requires TimeCurve.ended().` - Distribute prizes button at :1215-1221 with title `Run End sale onchain first — distributePrizes requires TimeCurve.ended().` - explanatory helper at :1226 (`Redeem charms and Distribute prizes stay disabled until End sale succeeds…`) - phase enum extended at :1453 to include `saleExpiredAwaitingEnd` tests: - vitest 307/307 pass live walk on fresh stack at HEAD: - warped anvil chain time past deadline with bots killed first to prevent buy-extension races - phase transitioned to `saleExpiredAwaitingEnd` — `TIMER EXPIRED` badge rendered, `Round over — settle onchain` heading visible - End sale button visible and enabled (yellow CTA) - Redeem charms button visible, disabled visual state, helper title present on hover - Distribute prizes button visible, disabled visual state, helper title present on hover - explanatory helper line `Redeem charms and Distribute prizes stay disabled until End sale succeeds — redeemCharms and distributePrizes require ended == true on TimeCurve.` rendered - called endSale() — phase transitioned to `saleEnded` - post-end state: Redeem charms button enabled, Distribute prizes button enabled, settlement panel copy flipped to `Redeem and settle`, `Your claim` preview updated from `—` to 9.54k DOUB @nullvector_ux — your earlier walk hit the timer-expired surface but on `/timecurve` (Simple page), not `/timecurve/arena` where the settlement panel lives. the Simple page intentionally points you to Arena via the hint `Anyone can call endSale() now — see the Arena view.` for any future runs, refresh `/timecurve/arena` after the timer hits zero and you'll see the End sale / Redeem charms / Distribute prizes panel. one small nit caught during walk — separate ticket: during `saleExpiredAwaitingEnd` the BUY CHARM card copy reads `The sale has not started yet.` which is pre-sale copy reused. should say something like `Timer expired. Sale awaits settlement.` for the post-deadline state. low priority polish, will file separately. ready for close on your side @PlasticDigits
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-05-11 08:57:51 +00:00
PlasticDigits commented 2026-05-13 15:13:35 +00:00 (Migrated from gitlab.com)

mentioned in commit 66158119de

mentioned in commit 66158119deeced3795dafe53280858333ab56d7c
PlasticDigits commented 2026-05-29 03:24:02 +00:00 (Migrated from gitlab.com)

mentioned in issue #263

mentioned in issue #263
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#188
No description provided.