Frontend: Wallet profile modal on address click #258

Closed
opened 2026-05-27 07:07:46 +00:00 by PlasticDigits · 44 comments
PlasticDigits commented 2026-05-27 07:07:46 +00:00 (Migrated from gitlab.com)

Context

Replace participant address explorer links with wallet stats modal. Parent epic: #238.

Relevant files

  • frontend/src/components/AddressInline.tsx
  • frontend/src/components/MegaScannerAddressLink.tsx — explorer for contracts only
  • New: WalletProfileModal.tsx, useWalletStats.ts
  • frontend/src/lib/indexerApi.ts

Acceptance criteria

  • Click participant address → modal with stats from GET /v1/arena/wallet/{address}/stats
  • Sections: Overview, Podium wins, Spending, XP/Level, WarBow, Referrals, Fun facts
  • Secondary link "View on explorer" inside modal
  • Loading/error/offline states (#96)
  • Mobile layout (#201)

Verification checklist

  • Manual QA on live buy row + podium rankings
  • Keyboard focus trap + WCAG (#97)
## Context Replace participant address explorer links with wallet stats modal. Parent epic: #238. ## Relevant files - `frontend/src/components/AddressInline.tsx` - `frontend/src/components/MegaScannerAddressLink.tsx` — explorer for contracts only - New: `WalletProfileModal.tsx`, `useWalletStats.ts` - `frontend/src/lib/indexerApi.ts` ## Acceptance criteria - [ ] Click participant address → modal with stats from `GET /v1/arena/wallet/{address}/stats` - [ ] Sections: Overview, Podium wins, Spending, XP/Level, WarBow, Referrals, Fun facts - [ ] Secondary link "View on explorer" inside modal - [ ] Loading/error/offline states (#96) - [ ] Mobile layout (#201) ## Verification checklist - [ ] Manual QA on live buy row + podium rankings - [ ] Keyboard focus trap + WCAG (#97)
PlasticDigits commented 2026-05-27 07:07:47 +00:00 (Migrated from gitlab.com)

marked as related to #238

marked as related to #238
PlasticDigits commented 2026-05-27 07:08:01 +00:00 (Migrated from gitlab.com)

mentioned in issue #238

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

mentioned in issue #262

mentioned in issue #262
PlasticDigits commented 2026-05-28 13:59:05 +00:00 (Migrated from gitlab.com)

Implementation summary

  • WalletProfileModal.tsx, useWalletStats.ts, AddressInline onOpenProfile hook.

Acceptance criteria

  • Modal + stats API wiring
  • All live buy rows wired to open modal (wire onOpenProfile in feeds follow-up)

Verification checklist

  • Manual QA on podium/buy rows after wiring
## Implementation summary - `WalletProfileModal.tsx`, `useWalletStats.ts`, `AddressInline` `onOpenProfile` hook. ## Acceptance criteria - [x] Modal + stats API wiring - [ ] All live buy rows wired to open modal (wire `onOpenProfile` in feeds follow-up) ## Verification checklist - [ ] Manual QA on podium/buy rows after wiring
PlasticDigits commented 2026-05-28 14:47:51 +00:00 (Migrated from gitlab.com)

mentioned in commit d1daf8cd4b

mentioned in commit d1daf8cd4ba5ac668abad1e3bd2a31e2bc60688a
PlasticDigits commented 2026-06-01 03:20:17 +00:00 (Migrated from gitlab.com)

Must implement all live buy rows wired to open modal (onOpenProfile)

Must implement all live buy rows wired to open modal (onOpenProfile)
PlasticDigits commented 2026-06-01 03:27:33 +00:00 (Migrated from gitlab.com)

mentioned in commit ecb45770d0

mentioned in commit ecb45770d06ea5f3a648001945aa01641f4dcebe
PlasticDigits commented 2026-06-01 03:27:40 +00:00 (Migrated from gitlab.com)

Implementation complete (#258 follow-up)

Wired onOpenProfile / onOpenWalletProfile through all participant-address surfaces that show live buy activity or podium rankings. Clicking a wallet address now opens WalletProfileModal (indexer GET /v1/arena/wallet/{address}/stats); explorer links remain only inside the modal.

What changed

  • /arena (TimeArenaPage) — passes profile opener to ArenaSimplePage: podium winner addresses + “Just +Xs by …” timer extension chip
  • /arena/protocol (ArenaProtocolPage) — live buy ticker (ArenaLiveBuysActivitySection) + existing donate-pools recent donors
  • LiveBuyRow, TimerHeroLiveBuys, ArenaBuyModals — profile prop plumbed for hero strip / all-buys modal when those surfaces are mounted
  • LiveBuyRow — profile button clicks no longer bubble to row “view details” handler
  • Docs: INV-FRONTEND-258-WALLET-PROFILE, arena-views § wallet-profile, guardrails + play-skills cross-links

Commit: ecb4577 on main

Verification checklist

  • /arena — click a podium winner address → profile modal opens with stats (or loading/error when indexer offline)
  • /arena — after a timer-extending buy, click buyer on “Just +Xs by …” chip → modal opens
  • /arena/protocol — click buyer on a live buy ticker row → modal opens (tx hash link still opens explorer)
  • /arena/protocol — click donor on donate-pools recent list → modal opens
  • Modal View on explorer secondary link works
  • Keyboard: profile button focusable; modal close via Escape / backdrop
  • Mobile layout on ticker + podium rows (#201)
  • Unit tests: LiveBuyRow.test.tsx, ArenaLiveBuysActivitySection.test.tsx, ArenaSimplePodiumSection.test.tsx

QA request

Please have the QA agent team run the checklist above on a build with VITE_INDEXER_URL pointed at a populated arena indexer.

Issue left open pending QA sign-off.

## Implementation complete (#258 follow-up) Wired **`onOpenProfile`** / **`onOpenWalletProfile`** through all participant-address surfaces that show live buy activity or podium rankings. Clicking a wallet address now opens **`WalletProfileModal`** (indexer `GET /v1/arena/wallet/{address}/stats`); explorer links remain only inside the modal. ### What changed - **`/arena` (`TimeArenaPage`)** — passes profile opener to **`ArenaSimplePage`**: podium winner addresses + “Just +Xs by …” timer extension chip - **`/arena/protocol` (`ArenaProtocolPage`)** — live buy ticker (**`ArenaLiveBuysActivitySection`**) + existing donate-pools recent donors - **`LiveBuyRow`**, **`TimerHeroLiveBuys`**, **`ArenaBuyModals`** — profile prop plumbed for hero strip / all-buys modal when those surfaces are mounted - **`LiveBuyRow`** — profile button clicks no longer bubble to row “view details” handler - Docs: **`INV-FRONTEND-258-WALLET-PROFILE`**, [arena-views § wallet-profile](docs/frontend/arena-views.md#wallet-profile-modal-gitlab-258), guardrails + play-skills cross-links **Commit:** `ecb4577` on `main` ### Verification checklist - [ ] **`/arena`** — click a podium winner address → profile modal opens with stats (or loading/error when indexer offline) - [ ] **`/arena`** — after a timer-extending buy, click buyer on “Just +Xs by …” chip → modal opens - [ ] **`/arena/protocol`** — click buyer on a live buy ticker row → modal opens (tx hash link still opens explorer) - [ ] **`/arena/protocol`** — click donor on donate-pools recent list → modal opens - [ ] Modal **View on explorer** secondary link works - [ ] Keyboard: profile button focusable; modal close via Escape / backdrop - [ ] Mobile layout on ticker + podium rows (#201) - [ ] Unit tests: `LiveBuyRow.test.tsx`, `ArenaLiveBuysActivitySection.test.tsx`, `ArenaSimplePodiumSection.test.tsx` ### QA request Please have the QA agent team run the checklist above on a build with `VITE_INDEXER_URL` pointed at a populated arena indexer. Issue left **open** pending QA sign-off.
PlasticDigits commented 2026-06-01 03:41:14 +00:00 (Migrated from gitlab.com)

mentioned in issue #255

mentioned in issue #255
PlasticDigits commented 2026-06-01 09:11:24 +00:00 (Migrated from gitlab.com)

mentioned in commit 5278e1a207

mentioned in commit 5278e1a20716dd41dd14bb27ee23d2b12c9849e6
PlasticDigits commented 2026-06-01 09:11:39 +00:00 (Migrated from gitlab.com)

Implementation update (#258 — modal sections complete)

Prior wiring of onOpenProfile through live buy rows and podium rankings was already on main (ecb4577). This follow-up completes the modal content and styling per acceptance criteria.

Commit: 5278e1a on main

What changed

  • WalletProfileModalSections.tsx — modular sections: Overview, Podium wins, Spending, XP/Level, WarBow, Referrals, Fun facts (all fields from GET /v1/arena/wallet/{address}/stats)
  • walletProfileFormat.ts — podium label mapping, win-rate / timestamp formatters
  • WalletProfileModal.tsx — native <dialog> focus trap (Escape / backdrop close), loading + error + indexer-unset states (#96), mobile-responsive layout (#201)
  • CSS — wallet-profile-modal + address-inline__profile-btn styles
  • Tests: WalletProfileModalSections.test.tsx, walletProfileFormat.test.ts (plus existing LiveBuyRow / ticker / podium wiring tests)
  • Docs: INV-FRONTEND-258-WALLET-PROFILE, arena-views § wallet-profile, guardrails + play-time-arena-doub cross-links

Verification checklist

  • /arena — click podium winner address → modal with all seven sections populated (or loading/error when indexer offline)
  • /arena — click buyer on “Just +Xs by …” timer extension chip → modal opens
  • /arena/protocol — click buyer on live buy ticker row → modal opens (tx hash still opens explorer)
  • /arena/protocol — click donor on donate-pools recent list → modal opens
  • Modal View on explorer secondary link works
  • Keyboard: profile button focusable; modal closes via Escape / backdrop; focus stays in dialog (#97)
  • Mobile layout on ticker + podium rows (#201)
  • Unit tests pass: npm test -- WalletProfileModalSections walletProfileFormat LiveBuyRow ArenaLiveBuysActivitySection ArenaSimplePodiumSection

QA request

Please have the QA agent team run the checklist above on a build with VITE_INDEXER_URL pointed at a populated arena indexer.

Issue left open pending QA sign-off.

## Implementation update (#258 — modal sections complete) Prior wiring of `onOpenProfile` through live buy rows and podium rankings was already on `main` (`ecb4577`). This follow-up completes the **modal content** and styling per acceptance criteria. **Commit:** `5278e1a` on `main` ### What changed - **`WalletProfileModalSections.tsx`** — modular sections: Overview, Podium wins, Spending, XP/Level, WarBow, Referrals, Fun facts (all fields from `GET /v1/arena/wallet/{address}/stats`) - **`walletProfileFormat.ts`** — podium label mapping, win-rate / timestamp formatters - **`WalletProfileModal.tsx`** — native `<dialog>` focus trap (Escape / backdrop close), loading + error + indexer-unset states (#96), mobile-responsive layout (#201) - **CSS** — `wallet-profile-modal` + `address-inline__profile-btn` styles - **Tests:** `WalletProfileModalSections.test.tsx`, `walletProfileFormat.test.ts` (plus existing `LiveBuyRow` / ticker / podium wiring tests) - **Docs:** `INV-FRONTEND-258-WALLET-PROFILE`, [arena-views § wallet-profile](docs/frontend/arena-views.md#wallet-profile-modal-gitlab-258), guardrails + [play-time-arena-doub](skills/play-time-arena-doub/SKILL.md) cross-links ### Verification checklist - [ ] **`/arena`** — click podium winner address → modal with all seven sections populated (or loading/error when indexer offline) - [ ] **`/arena`** — click buyer on “Just +Xs by …” timer extension chip → modal opens - [ ] **`/arena/protocol`** — click buyer on live buy ticker row → modal opens (tx hash still opens explorer) - [ ] **`/arena/protocol`** — click donor on donate-pools recent list → modal opens - [ ] Modal **View on explorer** secondary link works - [ ] Keyboard: profile button focusable; modal closes via Escape / backdrop; focus stays in dialog (#97) - [ ] Mobile layout on ticker + podium rows (#201) - [ ] Unit tests pass: `npm test -- WalletProfileModalSections walletProfileFormat LiveBuyRow ArenaLiveBuysActivitySection ArenaSimplePodiumSection` ### QA request Please have the QA agent team run the checklist above on a build with `VITE_INDEXER_URL` pointed at a populated arena indexer. Issue left **open** pending QA sign-off.
PlasticDigits commented 2026-06-01 10:51:37 +00:00 (Migrated from gitlab.com)

mentioned in issue #260

mentioned in issue #260
PlasticDigits commented 2026-06-02 14:28:58 +00:00 (Migrated from gitlab.com)

GitLab #258 verification (Cloud Agent)

Verified Frontend: Wallet profile modal on address click against issue body, comments, INV-FRONTEND-258-WALLET-PROFILE, arena-views § wallet-profile, and guardrails/play-skill cross-links on main (7d7d3da).

Issue left open per QA sign-off workflow.


Acceptance criteria

Item Result How verified
Click participant address → modal loads GET /v1/arena/wallet/{address}/stats PASS Playwright on /arena/protocol live-buy ticker; curl http://127.0.0.1:3100/v1/arena/wallet/0xf39f…/stats returned aggregates after Anvil buy
Sections: Overview, Podium wins, Spending, XP/Level, WarBow, Referrals, Fun facts PASS npm test -- WalletProfileModalSections walletProfileFormat LiveBuyRow ArenaLiveBuysActivitySection ArenaSimplePodiumSection (20/20); Playwright asserted all seven headings in open modal
Secondary View on explorer inside modal PASS Playwright: link target=_blank, href matches 0x… address
Loading / error / indexer-unset (#96) PASS (code) WalletProfileModal.tsx branches: WalletProfileLoadingState, WalletProfileErrorState when indexerUnset or query error — not re-run with indexer stopped this session
Mobile layout (#201) PASS Playwright viewport 390×844: profile button + modal visible on protocol ticker

Verification checklist (issue comments)

Check Result How verified
/arena — podium winner address → modal SKIP No settled podium winner in minimal Anvil QA data; wiring covered by ArenaSimplePodiumSection.test.tsx (onOpenWalletProfile → profile button)
/arena — “Just +Xs by …” timer chip → modal FAIL Chip data-testid="arena-simple-last-extension" never rendered: GET /v1/arena/buys JSON omits actual_seconds_added while DB row has 120 (idx_arena_buy). ArenaSimplePage only shows chip when actual_seconds_added > 0 or timer_hard_reset
/arena/protocol — live buy ticker buyer → modal PASS Playwright (see above); tx hash link remains separate explorer anchor
/arena/protocol — donate-pools recent donor → modal FAIL No indexed donations in session (recent.length == 0); attempted topUpPodiumPools after stack disruption — not re-validated in browser
Modal keyboard: focusable profile button; Escape closes (#97) PASS Playwright: toBeFocused() on profile button; Escape closes <dialog>
Unit tests listed in issue PASS cd frontend && npm test -- WalletProfileModalSections walletProfileFormat LiveBuyRow ArenaLiveBuysActivitySection ArenaSimplePodiumSection

Invariants & docs

Item Result
INV-FRONTEND-258-WALLET-PROFILE ↔ tests ↔ arena-views anchor PASS
.cursor/skills/yieldomega-guardrails/SKILL.md §9a PASS
skills/README.md + play-time-arena-doub/SKILL.md cross-links PASS

Infra notes (this VM)

  • Docker required vfs storage driver; QA stack needed PATH=/usr/local/cargo/bin:… (Cargo ≥ 1.85) for indexer build.
  • Bot swarm skipped (web3 / venv); buys seeded manually via cast.

Follow-ups (optional)

  1. Indexer/API: Include actual_seconds_added (and related buy-row fields) in GET /v1/arena/buys so the /arena “Just +Xs by …” chip can render and be QA’d end-to-end.
  2. CI: Add a focused Playwright spec (mock wallet + populated indexer) for wallet-profile open/close on /arena and /arena/protocol.
  3. QA script: bash scripts/verify-wallet-profile-anvil.sh mirroring other arena verify scripts (buy + optional topUpPodiumPools + Playwright smoke).
## GitLab #258 verification (Cloud Agent) Verified **Frontend: Wallet profile modal on address click** against issue body, comments, `INV-FRONTEND-258-WALLET-PROFILE`, [arena-views § wallet-profile](docs/frontend/arena-views.md#wallet-profile-modal-gitlab-258), and guardrails/play-skill cross-links on `main` (`7d7d3da`). **Issue left open** per QA sign-off workflow. --- ### Acceptance criteria | Item | Result | How verified | |------|--------|----------------| | Click participant address → modal loads `GET /v1/arena/wallet/{address}/stats` | **PASS** | Playwright on `/arena/protocol` live-buy ticker; `curl http://127.0.0.1:3100/v1/arena/wallet/0xf39f…/stats` returned aggregates after Anvil buy | | Sections: Overview, Podium wins, Spending, XP/Level, WarBow, Referrals, Fun facts | **PASS** | `npm test -- WalletProfileModalSections walletProfileFormat LiveBuyRow ArenaLiveBuysActivitySection ArenaSimplePodiumSection` (20/20); Playwright asserted all seven headings in open modal | | Secondary **View on explorer** inside modal | **PASS** | Playwright: link `target=_blank`, `href` matches `0x…` address | | Loading / error / indexer-unset ([#96](https://gitlab.com/PlasticDigits/yieldomega/-/issues/96)) | **PASS** (code) | `WalletProfileModal.tsx` branches: `WalletProfileLoadingState`, `WalletProfileErrorState` when `indexerUnset` or query error — not re-run with indexer stopped this session | | Mobile layout ([#201](https://gitlab.com/PlasticDigits/yieldomega/-/issues/201)) | **PASS** | Playwright viewport 390×844: profile button + modal visible on protocol ticker | --- ### Verification checklist (issue comments) | Check | Result | How verified | |-------|--------|----------------| | `/arena` — podium winner address → modal | **SKIP** | No settled podium winner in minimal Anvil QA data; wiring covered by `ArenaSimplePodiumSection.test.tsx` (`onOpenWalletProfile` → profile button) | | `/arena` — “Just +Xs by …” timer chip → modal | **FAIL** | Chip `data-testid="arena-simple-last-extension"` never rendered: `GET /v1/arena/buys` JSON omits `actual_seconds_added` while DB row has `120` (`idx_arena_buy`). `ArenaSimplePage` only shows chip when `actual_seconds_added > 0` or `timer_hard_reset` | | `/arena/protocol` — live buy ticker buyer → modal | **PASS** | Playwright (see above); tx hash link remains separate explorer anchor | | `/arena/protocol` — donate-pools recent donor → modal | **FAIL** | No indexed donations in session (`recent.length == 0`); attempted `topUpPodiumPools` after stack disruption — not re-validated in browser | | Modal keyboard: focusable profile button; Escape closes ([#97](https://gitlab.com/PlasticDigits/yieldomega/-/issues/97)) | **PASS** | Playwright: `toBeFocused()` on profile button; `Escape` closes `<dialog>` | | Unit tests listed in issue | **PASS** | `cd frontend && npm test -- WalletProfileModalSections walletProfileFormat LiveBuyRow ArenaLiveBuysActivitySection ArenaSimplePodiumSection` | --- ### Invariants & docs | Item | Result | |------|--------| | `INV-FRONTEND-258-WALLET-PROFILE` ↔ tests ↔ arena-views anchor | **PASS** | | `.cursor/skills/yieldomega-guardrails/SKILL.md` §9a | **PASS** | | `skills/README.md` + `play-time-arena-doub/SKILL.md` cross-links | **PASS** | --- ### Infra notes (this VM) - Docker required `vfs` storage driver; QA stack needed `PATH=/usr/local/cargo/bin:…` (Cargo ≥ 1.85) for indexer build. - Bot swarm skipped (`web3` / venv); buys seeded manually via `cast`. --- ### Follow-ups (optional) 1. **Indexer/API:** Include `actual_seconds_added` (and related buy-row fields) in `GET /v1/arena/buys` so the `/arena` “Just +Xs by …” chip can render and be QA’d end-to-end. 2. **CI:** Add a focused Playwright spec (mock wallet + populated indexer) for wallet-profile open/close on `/arena` and `/arena/protocol`. 3. **QA script:** `bash scripts/verify-wallet-profile-anvil.sh` mirroring other arena verify scripts (buy + optional `topUpPodiumPools` + Playwright smoke).
PlasticDigits commented 2026-06-02 14:50:47 +00:00 (Migrated from gitlab.com)

mentioned in issue #282

mentioned in issue #282
PlasticDigits commented 2026-06-02 14:50:47 +00:00 (Migrated from gitlab.com)

marked as related to #282

marked as related to #282
ghost1 commented 2026-06-03 11:33:07 +00:00 (Migrated from gitlab.com)

mentioned in commit b39b47dbac116e49949ee0e17b96823471c491e3

mentioned in commit b39b47dbac116e49949ee0e17b96823471c491e3
PlasticDigits commented 2026-06-03 11:40:13 +00:00 (Migrated from gitlab.com)

mentioned in issue #283

mentioned in issue #283
PlasticDigits commented 2026-06-03 11:40:13 +00:00 (Migrated from gitlab.com)

marked as related to #283

marked as related to #283
ghost1 commented 2026-06-03 12:05:49 +00:00 (Migrated from gitlab.com)

mentioned in commit 1b207c5ac8

mentioned in commit 1b207c5ac8495ceb8b9430dfd357042a731c780b
PlasticDigits commented 2026-06-03 12:06:15 +00:00 (Migrated from gitlab.com)

mentioned in merge request !406

mentioned in merge request !406
PlasticDigits commented 2026-06-03 12:28:24 +00:00 (Migrated from gitlab.com)

mentioned in merge request !410

mentioned in merge request !410
PlasticDigits commented 2026-06-03 13:20:13 +00:00 (Migrated from gitlab.com)

mentioned in issue #230

mentioned in issue #230
PlasticDigits commented 2026-06-03 13:26:59 +00:00 (Migrated from gitlab.com)

mentioned in issue #278

mentioned in issue #278
ghost1 commented 2026-06-03 13:28:57 +00:00 (Migrated from gitlab.com)

mentioned in commit 56dc6d76e4

mentioned in commit 56dc6d76e47694da40ae938dbf9b28ed22dfac5b
PlasticDigits commented 2026-06-03 13:29:33 +00:00 (Migrated from gitlab.com)

mentioned in issue #285

mentioned in issue #285
ghost1 commented 2026-06-03 13:36:30 +00:00 (Migrated from gitlab.com)

mentioned in commit 05dac2661e

mentioned in commit 05dac2661e02f0464a94357cdc27015139fee5d8
PlasticDigits commented 2026-06-03 13:37:07 +00:00 (Migrated from gitlab.com)

mentioned in merge request !414

mentioned in merge request !414
PlasticDigits commented 2026-06-03 13:37:29 +00:00 (Migrated from gitlab.com)

GitLab #258 verification (Cloud Agent)

Verified Frontend: Wallet profile modal on address click on main (6d520e7). Prior Cloud Agent FAILs (#282 actual_seconds_added, donate-pools donor) are resolved on current main.

Issue left open — doc cross-link fix in draft MR !414; product QA sign-off after merge.


Acceptance criteria

Item Result How verified
Click participant address → modal + GET /v1/arena/wallet/{address}/stats PASS Playwright /arena/protocol live-buy ticker; curl http://127.0.0.1:3100/v1/arena/wallet/0x70997970c51812dc3a010c7d01b50e0d17dc79c8/stats
Sections: Overview, Podium wins, Spending, XP/Level, WarBow, Referrals, Fun facts PASS Playwright (seven headings in modal); npm test -- WalletProfileModalSections walletProfileFormat
Secondary View on explorer PASS Playwright: target=_blank, href matches address
Loading / error / indexer-unset (#96) PASS (code) WalletProfileModal.tsx / WalletProfileModalSections.tsx
Mobile layout (#201) PASS Playwright viewport 390×844

Verification checklist (issue comments)

Check Result How verified
/arena — podium winner address → modal SKIP No settled podium winner in minimal Anvil QA; wiring: ArenaSimplePodiumSection.test.tsx
/arena — “Just +Xs by …” chip → modal PASS Playwright [data-testid=arena-simple-last-extension] (requires actual_seconds_added on buys — now present)
/arena/protocol — live buy ticker buyer → modal PASS Playwright
/arena/protocol — donate-pools recent donor → modal PASS Playwright on [data-testid=arena-protocol-donate-pools-recent] after topUpPodiumPools
Keyboard (#97) PASS Profile button focusable; Escape closes <dialog>
Unit tests PASS npm test -- WalletProfileModalSections walletProfileFormat LiveBuyRow ArenaLiveBuysActivitySection ArenaSimplePodiumSection indexerApi (42 tests)

Invariants & docs

Item Result
INV-FRONTEND-258-WALLET-PROFILE / #282 / #283 PASS — bash scripts/verify-wallet-profile-anvil.sh
Guardrails §9a, arena-views anchor, play-time-arena-doub PASS
skills/README.md #258 link FIX — MR !414

Follow-ups (optional)

  • Promote Playwright wallet-profile spec into frontend/e2e/ for CI.
  • Extend verify-wallet-profile-anvil.sh with a settled podium winner for end-to-end podium-address QA.
## GitLab #258 verification (Cloud Agent) Verified **Frontend: Wallet profile modal on address click** on `main` (`6d520e7`). Prior Cloud Agent FAILs (#282 `actual_seconds_added`, donate-pools donor) are **resolved** on current `main`. **Issue left open** — doc cross-link fix in draft MR !414; product QA sign-off after merge. --- ### Acceptance criteria | Item | Result | How verified | |------|--------|----------------| | Click participant address → modal + `GET /v1/arena/wallet/{address}/stats` | **PASS** | Playwright `/arena/protocol` live-buy ticker; `curl http://127.0.0.1:3100/v1/arena/wallet/0x70997970c51812dc3a010c7d01b50e0d17dc79c8/stats` | | Sections: Overview, Podium wins, Spending, XP/Level, WarBow, Referrals, Fun facts | **PASS** | Playwright (seven headings in modal); `npm test -- WalletProfileModalSections walletProfileFormat` | | Secondary **View on explorer** | **PASS** | Playwright: `target=_blank`, `href` matches address | | Loading / error / indexer-unset ([#96](https://gitlab.com/PlasticDigits/yieldomega/-/issues/96)) | **PASS** (code) | `WalletProfileModal.tsx` / `WalletProfileModalSections.tsx` | | Mobile layout ([#201](https://gitlab.com/PlasticDigits/yieldomega/-/issues/201)) | **PASS** | Playwright viewport 390×844 | --- ### Verification checklist (issue comments) | Check | Result | How verified | |-------|--------|----------------| | `/arena` — podium winner address → modal | **SKIP** | No settled podium winner in minimal Anvil QA; wiring: `ArenaSimplePodiumSection.test.tsx` | | `/arena` — “Just +Xs by …” chip → modal | **PASS** | Playwright `[data-testid=arena-simple-last-extension]` (requires `actual_seconds_added` on buys — now present) | | `/arena/protocol` — live buy ticker buyer → modal | **PASS** | Playwright | | `/arena/protocol` — donate-pools recent donor → modal | **PASS** | Playwright on `[data-testid=arena-protocol-donate-pools-recent]` after `topUpPodiumPools` | | Keyboard ([#97](https://gitlab.com/PlasticDigits/yieldomega/-/issues/97)) | **PASS** | Profile button focusable; `Escape` closes `<dialog>` | | Unit tests | **PASS** | `npm test -- WalletProfileModalSections walletProfileFormat LiveBuyRow ArenaLiveBuysActivitySection ArenaSimplePodiumSection indexerApi` (42 tests) | --- ### Invariants & docs | Item | Result | |------|--------| | `INV-FRONTEND-258-WALLET-PROFILE` / #282 / #283 | **PASS** — `bash scripts/verify-wallet-profile-anvil.sh` | | Guardrails §9a, arena-views anchor, play-time-arena-doub | **PASS** | | `skills/README.md` #258 link | **FIX** — MR [!414](https://gitlab.com/PlasticDigits/yieldomega/-/merge_requests/44) | --- ### Follow-ups (optional) - Promote Playwright wallet-profile spec into `frontend/e2e/` for CI. - Extend `verify-wallet-profile-anvil.sh` with a settled podium winner for end-to-end podium-address QA.
PlasticDigits commented 2026-06-03 13:39:33 +00:00 (Migrated from gitlab.com)

mentioned in merge request !415

mentioned in merge request !415
PlasticDigits commented 2026-06-03 13:43:36 +00:00 (Migrated from gitlab.com)

mentioned in commit 6b8d381700

mentioned in commit 6b8d3817007a0e6379001594be784b48c109bda9
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-06-03 13:43:36 +00:00
ghost1 commented 2026-06-03 13:49:11 +00:00 (Migrated from gitlab.com)

mentioned in commit 6c13b43205

mentioned in commit 6c13b4320501198916e85c31221ddf49ab6086c9
ghost1 commented 2026-06-03 13:54:12 +00:00 (Migrated from gitlab.com)

mentioned in commit 0d408509b1

mentioned in commit 0d408509b18af25b2f23cac382e55fb6062d216e
PlasticDigits commented 2026-06-03 13:54:44 +00:00 (Migrated from gitlab.com)

mentioned in merge request !416

mentioned in merge request !416
PlasticDigits commented 2026-06-03 14:01:02 +00:00 (Migrated from gitlab.com)

mentioned in commit 9baac170e5

mentioned in commit 9baac170e50cf851e863740ae135912782e3772e
PlasticDigits commented 2026-06-06 09:35:11 +00:00 (Migrated from gitlab.com)

mentioned in issue #294

mentioned in issue #294
PlasticDigits commented 2026-06-08 08:45:13 +00:00 (Migrated from gitlab.com)

mentioned in commit 9f376dced2

mentioned in commit 9f376dced29da3a676dad42dcf5a826e5025a01f
PlasticDigits commented 2026-06-08 08:45:13 +00:00 (Migrated from gitlab.com)

mentioned in commit 1aee028f49

mentioned in commit 1aee028f49cc26089ba3641883572cbd0ee0b536
PlasticDigits commented 2026-06-08 08:45:13 +00:00 (Migrated from gitlab.com)

mentioned in commit 80ed641837

mentioned in commit 80ed641837d56a330ab8228873fe499680e6e260
PlasticDigits commented 2026-06-13 07:02:53 +00:00 (Migrated from gitlab.com)

mentioned in issue #309

mentioned in issue #309
PlasticDigits commented 2026-06-13 07:34:27 +00:00 (Migrated from gitlab.com)

mentioned in issue #318

mentioned in issue #318
PlasticDigits commented 2026-06-13 08:00:38 +00:00 (Migrated from gitlab.com)

mentioned in merge request !457

mentioned in merge request !457
project_80561744_bot_5118c68a88bff95eacb6ab1c47c19cae commented 2026-06-14 02:57:14 +00:00 (Migrated from gitlab.com)

mentioned in merge request !482

mentioned in merge request !482
PlasticDigits commented 2026-06-19 04:27:45 +00:00 (Migrated from gitlab.com)

mentioned in issue #336

mentioned in issue #336
PlasticDigits commented 2026-06-19 06:35:34 +00:00 (Migrated from gitlab.com)

mentioned in merge request !509

mentioned in merge request !509
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#258
No description provided.