5.12 — Charts and stats blocks (anywhere they appear) show explicit "no data" states rather than empty axes that look broken. #200

Closed
opened 2026-05-13 03:09:59 +00:00 by nullvector_ux · 18 comments
nullvector_ux commented 2026-05-13 03:09:59 +00:00 (Migrated from gitlab.com)

@PlasticDigits

Checklist Item: 5.12
Section: Charts / Stats / Empty Data States
Status: Fail
Device/Viewport: Desktop
Wallet State: Connected / no data state
Steps: Opened the stats/chart section with no available data.
Expected Result: The chart or stats block should show an explicit no-data message instead of an empty or unclear state.
Actual Result: The section only shows a dash —, which does not clearly explain that there is no data available.
Evidence:

image.png{width=900 height=317}

image.png{width=900 height=364}


Notes: Recommend replacing — with a clearer empty-state message such as “No data yet” or “No earnings yet.”

@PlasticDigits **Checklist Item:** 5.12\ **Section:** Charts / Stats / Empty Data States\ **Status:** Fail\ **Device/Viewport:** Desktop\ **Wallet State:** Connected / no data state\ **Steps:** Opened the stats/chart section with no available data.\ **Expected Result:** The chart or stats block should show an explicit no-data message instead of an empty or unclear state.\ **Actual Result:** The section only shows a dash `—`, which does not clearly explain that there is no data available.\ **Evidence:** ![image.png](/uploads/603ad82db962bfbb1938a7eab079acb1/image.png){width=900 height=317} ![image.png](/uploads/9827074686156c9b7b463493db9e47a4/image.png){width=900 height=364} \ **Notes:** Recommend replacing `—` with a clearer empty-state message such as “No data yet” or “No earnings yet.”
nullvector_ux commented 2026-05-13 03:12:08 +00:00 (Migrated from gitlab.com)

changed the description

changed the description
PlasticDigits commented 2026-05-13 04:31:55 +00:00 (Migrated from gitlab.com)

mentioned in commit d4c1f880d41d3cc9a986a5c285da5730fd8f8b17

mentioned in commit d4c1f880d41d3cc9a986a5c285da5730fd8f8b17
PlasticDigits commented 2026-05-13 04:32:22 +00:00 (Migrated from gitlab.com)

Update (GitLab #200 — empty stats / charts)

Implemented explicit loading / empty / wallet-gated copy for player-facing stat tiles and chart-adjacent regions instead of a bare em dash (INV-FRONTEND-200-EMPTY-STATS). Merged to main (commit d4c1f88).

What changed

  • EmptyDataPlaceholder + statFromContractRead / statFromOptionalString (frontend/src/components/EmptyDataPlaceholder.tsx, frontend/src/lib/statDisplayFromContractRead.tsx + Vitest).
  • Arena: WhatMattersSection (requires isConnected), StandingsVisuals empty buy-history message (data-testid="standings-visuals-empty"), rate-board loading strings, wallet balance placeholder, secondary stats grid (WarBow leader, podium pool, streak), steal BP cards.
  • Simple: live podium Prize not projected yet; Your stake at launch placeholders.
  • Referrals: zero indexed CHARM banner (data-testid="referrals-earnings-zero-banner").
  • Docs: invariants §200, timecurve-views §200, skills/README.md, .cursor/skills/yieldomega-guardrails/SKILL.md item 52.

Verification checklist (for QA)

  • Arena → What matters now: disconnect wallet → CHARM weight + Battle Points show connect hint, not —.
  • Arena → What matters now: connect on slow RPC → stats show Loading… then numeric values.
  • Arena → Standings: with no indexed buy history for the round, see No chart data yet block (standings-visuals-empty), not a blank gap.
  • Arena → rate board: before price reads resolve, hero shows Loading live price… / Loading launch price…; DOUB-at-launch shows explanatory placeholder until totals load.
  • Simple → Live reserve podiums: without prize preview, CL8Y cell shows Prize not projected yet.
  • Simple → Your stake at launch: before reads, tiles show Loading… / loads with… messages (not —).
  • Referrals → Referral program CHARM: connected wallet with zero indexed CHARM → top No indexed referral CHARM yet banner appears.

Requesting verification from @nullvector_ux — leaving this issue open until you sign off on checklist 5.12.

## Update (GitLab #200 — empty stats / charts) Implemented explicit **loading / empty / wallet-gated** copy for player-facing stat tiles and chart-adjacent regions instead of a bare em dash (**`INV-FRONTEND-200-EMPTY-STATS`**). Merged to `main` (commit `d4c1f88`). ### What changed - **`EmptyDataPlaceholder`** + **`statFromContractRead` / `statFromOptionalString`** (`frontend/src/components/EmptyDataPlaceholder.tsx`, `frontend/src/lib/statDisplayFromContractRead.tsx` + Vitest). - **Arena:** `WhatMattersSection` (requires `isConnected`), `StandingsVisuals` empty buy-history message (`data-testid="standings-visuals-empty"`), rate-board loading strings, wallet balance placeholder, secondary stats grid (WarBow leader, podium pool, streak), steal BP cards. - **Simple:** live podium **Prize not projected yet**; **Your stake at launch** placeholders. - **Referrals:** zero indexed CHARM banner (`data-testid="referrals-earnings-zero-banner"`). - **Docs:** [invariants §200](docs/testing/invariants-and-business-logic.md#frontend-stats-charts-empty-states-gitlab-200), [timecurve-views §200](docs/frontend/timecurve-views.md#stats-charts-empty-states-gitlab-200), [`skills/README.md`](skills/README.md), [`.cursor/skills/yieldomega-guardrails/SKILL.md`](.cursor/skills/yieldomega-guardrails/SKILL.md) item 52. ### Verification checklist (for QA) - [ ] **Arena → What matters now:** disconnect wallet → CHARM weight + Battle Points show **connect** hint, not `—`. - [ ] **Arena → What matters now:** connect on slow RPC → stats show **Loading…** then numeric values. - [ ] **Arena → Standings:** with **no** indexed buy history for the round, see **No chart data yet** block (`standings-visuals-empty`), not a blank gap. - [ ] **Arena → rate board:** before price reads resolve, hero shows **Loading live price…** / **Loading launch price…**; DOUB-at-launch shows explanatory placeholder until totals load. - [ ] **Simple → Live reserve podiums:** without prize preview, CL8Y cell shows **Prize not projected yet**. - [ ] **Simple → Your stake at launch:** before reads, tiles show **Loading…** / **loads with…** messages (not `—`). - [ ] **Referrals → Referral program CHARM:** connected wallet with **zero** indexed CHARM → top **No indexed referral CHARM yet** banner appears. Requesting verification from @nullvector_ux — **leaving this issue open** until you sign off on checklist 5.12.
PlasticDigits commented 2026-05-13 15:13:34 +00:00 (Migrated from gitlab.com)

mentioned in commit 4cb5798419

mentioned in commit 4cb579841913389241031acd04e25f82c3417eef
nullvector_ux commented 2026-05-14 02:30:20 +00:00 (Migrated from gitlab.com)

Verification checklist (for QA) @PlasticDigits

  • Arena → What matters now: disconnect wallet → CHARM weight + Battle Points show connect hint, not —.

  • Arena → What matters now: connect on slow RPC → stats show Loading… then numeric values.

  • Arena → Standings: with no indexed buy history for the round, see No chart data yet block (standings-visuals-empty), not a blank gap.

    • Simple → Your stake at launch: before reads, tiles show Loading… / loads with… messages (not —).
    • Referrals → Referral program CHARM: connected wallet with zero indexed CHARM → top No indexed referral CHARM yet banner appears.
  • Arena → rate board: before price reads resolve, hero shows Loading live price… / Loading launch price…; DOUB-at-launch shows explanatory placeholder until totals load.

  • Simple → Live reserve podiums: without prize preview, CL8Y cell shows Prize not projected yet.

    image.png{width=831 height=131}

    Simple → Live reserve podiums The "indexer-backed snapshot" is blingking/glitching on local

### Verification checklist (for QA) @PlasticDigits * [x] **Arena → What matters now:** disconnect wallet → CHARM weight + Battle Points show **connect** hint, not `—`. * [x] **Arena → What matters now:** connect on slow RPC → stats show **Loading…** then numeric values. * [x] **Arena → Standings:** with **no** indexed buy history for the round, see **No chart data yet** block (`standings-visuals-empty`), not a blank gap. * [x] **Simple → Your stake at launch:** before reads, tiles show **Loading…** / **loads with…** messages (not `—`). * [x] **Referrals → Referral program CHARM:** connected wallet with **zero** indexed CHARM → top **No indexed referral CHARM yet** banner appears. * [x] **Arena → rate board:** before price reads resolve, hero shows **Loading live price…** / **Loading launch price…**; DOUB-at-launch shows explanatory placeholder until totals load. * [ ] **Simple → Live reserve podiums:** without prize preview, CL8Y cell shows **Prize not projected yet**. ![image.png](/uploads/b3873ea04149c95198a60b9151ab2dce/image.png){width=831 height=131} **Simple → Live reserve podiums** The "indexer-backed snapshot" is blingking/glitching on local
PlasticDigits commented 2026-05-14 13:48:24 +00:00 (Migrated from gitlab.com)

@nullvector_ux Actually that pill should just be deleted

@nullvector_ux Actually that pill should just be deleted
PlasticDigits commented 2026-05-14 13:53:40 +00:00 (Migrated from gitlab.com)

mentioned in commit 2a7bfbb26b

mentioned in commit 2a7bfbb26b1227d70b9e313e77d5ed4e06b7a8a5
PlasticDigits commented 2026-05-14 13:54:10 +00:00 (Migrated from gitlab.com)

Update — Simple Live reserve podiums (GitLab #200 follow-up)

Removed the PageSection actions pill on TimeCurveSimplePodiumSection that alternated “Indexer-backed snapshot” / “Refreshing podiums…”. It was contributor-facing wording and flickered whenever podium reads refetched locally.

Merged to main: 2a7bfbb — drops the pill + related CSS (podium-live-pulse), removes the podiumRefreshing prop, adds INV-FRONTEND-200-NO-INDEXER-PILL next to INV-FRONTEND-200-EMPTY-STATS in docs/testing/invariants-and-business-logic.md, updates docs/frontend/timecurve-views.md, .cursor/skills/yieldomega-guardrails/SKILL.md, skills/README.md, and skills/play-timecurve-doubloon/SKILL.md. Vitest: full frontend suite green.

Verification checklist (QA / @nullvector_ux)

  • Open /timecurve with VITE_INDEXER_URL set (local stack or staging).
  • Scroll to Live reserve podiums — confirm no uppercase pill / pulsing dot appears in the section header (no “Indexer-backed snapshot”, no “Refreshing podiums…”).
  • Let the page sit through several podium refetch cycles — confirm no flicker where that pill used to be.
  • Confirm Prize not projected yet / footnotes / USD affordance copy still behave as before (checklist 5.12 empty-state work unchanged).

Leaving the issue open for your sign-off on 5.12 + this follow-up.

## Update — Simple Live reserve podiums (GitLab #200 follow-up) Removed the **`PageSection` actions** pill on **`TimeCurveSimplePodiumSection`** that alternated **“Indexer-backed snapshot”** / **“Refreshing podiums…”**. It was contributor-facing wording and flickered whenever podium reads refetched locally. **Merged to `main`:** `2a7bfbb` — drops the pill + related CSS (`podium-live-pulse`), removes the `podiumRefreshing` prop, adds **`INV-FRONTEND-200-NO-INDEXER-PILL`** next to **`INV-FRONTEND-200-EMPTY-STATS`** in [`docs/testing/invariants-and-business-logic.md`](docs/testing/invariants-and-business-logic.md#frontend-stats-charts-empty-states-gitlab-200), updates [`docs/frontend/timecurve-views.md`](docs/frontend/timecurve-views.md#stats-charts-empty-states-gitlab-200), [`.cursor/skills/yieldomega-guardrails/SKILL.md`](.cursor/skills/yieldomega-guardrails/SKILL.md), [`skills/README.md`](skills/README.md), and [`skills/play-timecurve-doubloon/SKILL.md`](skills/play-timecurve-doubloon/SKILL.md). Vitest: full `frontend` suite green. ### Verification checklist (QA / @nullvector_ux) - [ ] Open **`/timecurve`** with **`VITE_INDEXER_URL`** set (local stack or staging). - [ ] Scroll to **Live reserve podiums** — confirm **no** uppercase pill / pulsing dot appears in the section header (no **“Indexer-backed snapshot”**, no **“Refreshing podiums…”**). - [ ] Let the page sit through several podium refetch cycles — confirm **no** flicker where that pill used to be. - [ ] Confirm **Prize not projected yet** / footnotes / USD affordance copy still behave as before (**checklist 5.12** empty-state work unchanged). Leaving the issue **open** for your sign-off on **5.12** + this follow-up.
nullvector_ux commented 2026-05-14 14:30:35 +00:00 (Migrated from gitlab.com)

Verification checklist (QA / @nullvector_ux) @PlasticDigits

  • Open /timecurve with VITE_INDEXER_URL set (local stack or staging).

  • Scroll to Live reserve podiums — confirm no uppercase pill / pulsing dot appears in the section header (no “Indexer-backed snapshot”, no “Refreshing podiums…”).

  • Let the page sit through several podium refetch cycles — confirm no flicker where that pill used to be.

  • Failed, No sign of "Prize not projected ye"

    Confirm Prize not projected yet / footnotes / USD affordance copy still behave as before (checklist 5.12 empty-state work unchanged).

image.png{width=827 height=135}

### Verification checklist (QA / @nullvector_ux) @PlasticDigits * [x] Open **`/timecurve`** with **`VITE_INDEXER_URL`** set (local stack or staging). * [x] Scroll to **Live reserve podiums** — confirm **no** uppercase pill / pulsing dot appears in the section header (no **“Indexer-backed snapshot”**, no **“Refreshing podiums…”**). * [x] Let the page sit through several podium refetch cycles — confirm **no** flicker where that pill used to be. * [x] Failed, No sign of "**Prize not projected ye**" Confirm **Prize not projected yet** / footnotes / USD affordance copy still behave as before (**checklist 5.12** empty-state work unchanged). ![image.png](/uploads/1f85333afbd8b0ebc84c82fdbd144d98/image.png){width=827 height=135}
Brouie commented 2026-05-15 04:51:13 +00:00 (Migrated from gitlab.com)

Re-walked Live reserve podiums on /timecurve against the local stack to follow up on the open item 4 from the 2a7bfbb2 checklist (Confirm "Prize not projected yet" / footnotes / USD affordance copy still behaves as before).

The copy IS rendering on all four podium cards.

Section structure observed (top to bottom):

  1. Header band: "RESERVE PODIUMS / LIVE RESERVE PODIUMS / Four v1 prize races mirrored from the indexer (~1s head poll). Your wallet gets a magenta ring."
  2. Four podium cards in a 2x2 grid:
    • LAST BUY — 3 rows, each "PRIZE NOT PROJECTED YET CL8Y" pill + indexed wallet (0x61097b...c295, 0xfabb0a...694a, 0x976ea7...0aa9)
    • WARBOW — 3 rows, each "PRIZE NOT PROJECTED YET CL8Y" pill + "Awaiting wallet"
    • DEFENDED STREAK — 3 rows, each "PRIZE NOT PROJECTED YET CL8Y" pill + "Awaiting wallet"
    • TIME BOOSTER — 3 rows, each "PRIZE NOT PROJECTED YET CL8Y" pill + indexed wallets (0xdf3e18...7097, 0x709979...79c8, 0x23618e...1e8f)
  3. Footer copy: "Last Buy shows a running prediction from indexed purchases until the sale ends; other tracks follow live onchain leaderboards. Animations respect reduced motion." + "≈ USD uses a static CL8Y → USDM display shape (0.98×, not a live oracle)."

The "Prize not projected yet" copy is the empty-state replacement for what would otherwise be a bare — on the prize cell — exactly the 5.12 fix shipped under INV-FRONTEND-200-EMPTY-STATS. Footnotes + USD affordance copy are also intact (visible in footer block).

Looks like item 4 of the 2a7bfbb2 follow-up checklist passes. The earlier "No sign of 'Prize not projected yet'" miss was a scroll-position artifact — the copy lives inside the podium card rows underneath the section header band, not in the header band itself.

@nullvector_ux feel free to scroll past the LIVE RESERVE PODIUMS header band on your end and the "PRIZE NOT PROJECTED YET" pills should be visible on each podium row.

@PlasticDigits — 5.12 + the 2a7bfbb2 follow-up both look complete from this walk.

Re-walked Live reserve podiums on `/timecurve` against the local stack to follow up on the open item 4 from the `2a7bfbb2` checklist (Confirm "Prize not projected yet" / footnotes / USD affordance copy still behaves as before). The copy IS rendering on all four podium cards. Section structure observed (top to bottom): 1. Header band: "RESERVE PODIUMS / LIVE RESERVE PODIUMS / Four v1 prize races mirrored from the indexer (~1s head poll). Your wallet gets a magenta ring." 2. Four podium cards in a 2x2 grid: - **LAST BUY** — 3 rows, each "PRIZE NOT PROJECTED YET CL8Y" pill + indexed wallet (`0x61097b...c295`, `0xfabb0a...694a`, `0x976ea7...0aa9`) - **WARBOW** — 3 rows, each "PRIZE NOT PROJECTED YET CL8Y" pill + "Awaiting wallet" - **DEFENDED STREAK** — 3 rows, each "PRIZE NOT PROJECTED YET CL8Y" pill + "Awaiting wallet" - **TIME BOOSTER** — 3 rows, each "PRIZE NOT PROJECTED YET CL8Y" pill + indexed wallets (`0xdf3e18...7097`, `0x709979...79c8`, `0x23618e...1e8f`) 3. Footer copy: "Last Buy shows a running prediction from indexed purchases until the sale ends; other tracks follow live onchain leaderboards. Animations respect reduced motion." + "≈ USD uses a static CL8Y → USDM display shape (0.98×, not a live oracle)." The "Prize not projected yet" copy is the empty-state replacement for what would otherwise be a bare `—` on the prize cell — exactly the 5.12 fix shipped under `INV-FRONTEND-200-EMPTY-STATS`. Footnotes + USD affordance copy are also intact (visible in footer block). Looks like item 4 of the `2a7bfbb2` follow-up checklist passes. The earlier "No sign of 'Prize not projected yet'" miss was a scroll-position artifact — the copy lives inside the podium card rows underneath the section header band, not in the header band itself. @nullvector_ux feel free to scroll past the LIVE RESERVE PODIUMS header band on your end and the "PRIZE NOT PROJECTED YET" pills should be visible on each podium row. @PlasticDigits — 5.12 + the `2a7bfbb2` follow-up both look complete from this walk.
Brouie commented 2026-05-15 04:52:38 +00:00 (Migrated from gitlab.com)

image.png{width=447 height=353}

![image.png](/uploads/ad7a8992ac6bd92b3d4d7b141ea93aaa/image.png){width=447 height=353}
nullvector_ux commented 2026-05-15 05:36:18 +00:00 (Migrated from gitlab.com)

Passed - Confirm Prize not projected yet / footnotes / USD affordance copy still behave as before (checklist 5.12 empty-state work unchanged).

image.png{width=760 height=600}

Passed - Confirm **Prize not projected yet** / footnotes / USD affordance copy still behave as before (**checklist 5.12** empty-state work unchanged). ![image.png](/uploads/9fc6c4c017c5a8403635a770c36b1f7e/image.png){width=760 height=600}
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-05-15 06:10:56 +00:00
PlasticDigits commented 2026-05-21 04:41:43 +00:00 (Migrated from gitlab.com)

mentioned in issue #229

mentioned in issue #229
PlasticDigits commented 2026-05-21 05:42:47 +00:00 (Migrated from gitlab.com)

mentioned in issue #231

mentioned in issue #231
PlasticDigits commented 2026-05-21 12:59:04 +00:00 (Migrated from gitlab.com)

mentioned in issue #233

mentioned in issue #233
PlasticDigits commented 2026-05-21 13:21:02 +00:00 (Migrated from gitlab.com)

mentioned in issue #234

mentioned in issue #234
PlasticDigits commented 2026-05-27 07:07:44 +00:00 (Migrated from gitlab.com)

mentioned in issue #257

mentioned in issue #257
PlasticDigits commented 2026-05-27 14:33:22 +00:00 (Migrated from gitlab.com)

mentioned in issue #262

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