Fix forbidden sale copy and wire WarBow wallet profile modal #318

Closed
opened 2026-06-13 07:34:26 +00:00 by PlasticDigits · 10 comments
PlasticDigits commented 2026-06-13 07:34:26 +00:00 (Migrated from gitlab.com)

Parent

Gap analysis follow-up from #309.

Current codebase

  • ArenaSimplePage.tsx L1131–1132: "The sale has not opened yet." — forbidden per content audit (#298).
  • Play route is / (LaunchGate.tsx); /arena redirects; docs still say /arena in places.
  • ArenaWarbowHeroPanel.tsx: PlayerIdentity without onOpenProfile → explorer links instead of wallet profile modal (#258).
  • TimeArenaPage.tsx wires profile modal; ArenaSimplePage passes onOpenWalletProfile to timer components but not WarBow panel.

Why needed

Approved: Fix forbidden sale copy; fix WarBow wallet profile gap; align user-facing framing with always-live arena.

Constraints / guardrails

  • INV-FRONTEND-298-UX-DOCS-E2E — no "sale" framing on play surface.
  • Use arenaSimplePhase.ts language ("Arena live", "Arena Opens In").
  • Profile modal via WalletProfileModal / onOpenWalletProfile pattern from ArenaTimerPodiumCarousel.

Relevant files

  • frontend/src/pages/arena/ArenaSimplePage.tsx
  • frontend/src/pages/arena/ArenaWarbowHeroPanel.tsx
  • frontend/src/pages/arena/TimeArenaPage.tsx
  • frontend/src/pages/arena/useArenaSaleSession.ts (error strings)
  • frontend/src/lib/revertMessage.ts
  • frontend/src/app/LaunchGate.tsx
  • docs/testing/frontend-content-audit.md
  1. Replace sale copy with always-live / pre-launch language consistent with arenaSimplePhase.ts.
  2. Add onOpenWalletProfile prop to ArenaWarbowHeroPanel; thread from ArenaSimplePage.
  3. Extend surfaceContent.test.ts or add page test to forbid \bsale\b on console pre-launch copy.
  4. Audit useArenaSaleSession and revertMessage.ts for play-surface sale strings.

Acceptance criteria

  • No user-visible "sale" on / play console (pre-launch and live states).
  • WarBow rival rows open wallet profile modal.
  • Static or unit test guards forbidden copy.

Test plan

  • cd frontend && npm run typecheck && npm test.
  • cd frontend && npm run lint.
  • bash scripts/e2e-anvil.sh smoke on / if copy changes affect E2E selectors.

Attack / abuse test plan

  • N/A (UX); ensure profile modal does not leak private keys or bypass wallet connect.

Verification criteria

  • surfaceContent.test.ts or new test fails on reintroduced "sale" string.
  • Manual: WarBow target click opens profile, not explorer.
## Parent Gap analysis follow-up from [#309](https://gitlab.com/PlasticDigits/yieldomega/-/issues/309). ## Current codebase - `ArenaSimplePage.tsx` L1131–1132: **"The sale has not opened yet."** — forbidden per content audit (#298). - Play route is `/` (`LaunchGate.tsx`); `/arena` redirects; docs still say `/arena` in places. - `ArenaWarbowHeroPanel.tsx`: `PlayerIdentity` without `onOpenProfile` → explorer links instead of wallet profile modal (#258). - `TimeArenaPage.tsx` wires profile modal; `ArenaSimplePage` passes `onOpenWalletProfile` to timer components but not WarBow panel. ## Why needed Approved: Fix forbidden sale copy; fix WarBow wallet profile gap; align user-facing framing with always-live arena. ## Constraints / guardrails - `INV-FRONTEND-298-UX-DOCS-E2E` — no "sale" framing on play surface. - Use `arenaSimplePhase.ts` language ("Arena live", "Arena Opens In"). - Profile modal via `WalletProfileModal` / `onOpenWalletProfile` pattern from `ArenaTimerPodiumCarousel`. ## Relevant files - `frontend/src/pages/arena/ArenaSimplePage.tsx` - `frontend/src/pages/arena/ArenaWarbowHeroPanel.tsx` - `frontend/src/pages/arena/TimeArenaPage.tsx` - `frontend/src/pages/arena/useArenaSaleSession.ts` (error strings) - `frontend/src/lib/revertMessage.ts` - `frontend/src/app/LaunchGate.tsx` - `docs/testing/frontend-content-audit.md` ## Recommended direction 1. Replace sale copy with always-live / pre-launch language consistent with `arenaSimplePhase.ts`. 2. Add `onOpenWalletProfile` prop to `ArenaWarbowHeroPanel`; thread from `ArenaSimplePage`. 3. Extend `surfaceContent.test.ts` or add page test to forbid `\bsale\b` on console pre-launch copy. 4. Audit `useArenaSaleSession` and `revertMessage.ts` for play-surface sale strings. ## Acceptance criteria - [ ] No user-visible "sale" on `/` play console (pre-launch and live states). - [ ] WarBow rival rows open wallet profile modal. - [ ] Static or unit test guards forbidden copy. ## Test plan - `cd frontend && npm run typecheck && npm test`. - `cd frontend && npm run lint`. - `bash scripts/e2e-anvil.sh` smoke on `/` if copy changes affect E2E selectors. ## Attack / abuse test plan - N/A (UX); ensure profile modal does not leak private keys or bypass wallet connect. ## Verification criteria - `surfaceContent.test.ts` or new test fails on reintroduced "sale" string. - Manual: WarBow target click opens profile, not explorer.
PlasticDigits commented 2026-06-13 07:34:43 +00:00 (Migrated from gitlab.com)

mentioned in issue #309

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

mentioned in commit f0207c04e3

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

mentioned in merge request !457

mentioned in merge request !457
PlasticDigits commented 2026-06-13 09:27:16 +00:00 (Migrated from gitlab.com)

mentioned in commit 1ade1e1b40

mentioned in commit 1ade1e1b4038ceafa9e3d35d5af84314222c78c8
project_80561744_bot_5118c68a88bff95eacb6ab1c47c19cae commented 2026-06-13 14:13:18 +00:00 (Migrated from gitlab.com)

mentioned in merge request !469

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

mentioned in merge request !482

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

Verification — GitLab #318

Result: Implementation was missing on main; fixes pushed in !482. Issue left open until MR merge.

Acceptance criteria

Item Result How verified
No user-visible "sale" on / play console PASS Replaced The sale has not opened yet… with preLaunchBuyGateMessage(); arenaSimplePhase.test.ts + arenaCommandConsoleStatic.test.ts; Playwright body scan on preview
WarBow rival rows open wallet profile modal PASS (wiring) / SKIP (live targets) onOpenWalletProfile threaded to ArenaWarbowHeroPanel → PlayerIdentity.onOpenProfile; static test asserts wiring; Playwright SKIP — no indexed rivals without full stack buys
Static/unit test guards forbidden copy PASS preLaunchBuyGateMessage test; revertMessage.test.ts TimeArena arena framing

Automated test plan

Command Result
cd frontend && npm run typecheck PASS
cd frontend && npm run lint PASS (0 errors)
cd frontend && npm test PASS (635 tests)
bash scripts/e2e-anvil.sh PASS (6/6 anvil arena specs)
bash scripts/verify-cloud-postgres.sh PASS

Follow-ups

  • Playwright E2E for WarBow rival profile click when indexed targets exist on Anvil (post-merge QA enhancement).
## Verification — GitLab #318 **Result:** Implementation was missing on `main`; fixes pushed in [!482](https://gitlab.com/PlasticDigits/yieldomega/-/merge_requests/112). Issue left **open** until MR merge. ### Acceptance criteria | Item | Result | How verified | |------|--------|--------------| | No user-visible "sale" on `/` play console | **PASS** | Replaced `The sale has not opened yet…` with `preLaunchBuyGateMessage()`; `arenaSimplePhase.test.ts` + `arenaCommandConsoleStatic.test.ts`; Playwright body scan on preview | | WarBow rival rows open wallet profile modal | **PASS** (wiring) / **SKIP** (live targets) | `onOpenWalletProfile` threaded to `ArenaWarbowHeroPanel` → `PlayerIdentity.onOpenProfile`; static test asserts wiring; Playwright SKIP — no indexed rivals without full stack buys | | Static/unit test guards forbidden copy | **PASS** | `preLaunchBuyGateMessage` test; `revertMessage.test.ts` TimeArena arena framing | ### Automated test plan | Command | Result | |---------|--------| | `cd frontend && npm run typecheck` | **PASS** | | `cd frontend && npm run lint` | **PASS** (0 errors) | | `cd frontend && npm test` | **PASS** (635 tests) | | `bash scripts/e2e-anvil.sh` | **PASS** (6/6 anvil arena specs) | | `bash scripts/verify-cloud-postgres.sh` | **PASS** | ### Follow-ups - Playwright E2E for WarBow rival profile click when indexed targets exist on Anvil (post-merge QA enhancement).
PlasticDigits commented 2026-06-14 05:12:14 +00:00 (Migrated from gitlab.com)

mentioned in commit 5bc5822a41

mentioned in commit 5bc5822a412a947701810cd7737f3d438a4befe5
PlasticDigits commented 2026-06-14 05:12:14 +00:00 (Migrated from gitlab.com)

mentioned in commit f398cab132

mentioned in commit f398cab1323fa99f06885098f6ac25a2c0140481
PlasticDigits commented 2026-06-14 05:41:50 +00:00 (Migrated from gitlab.com)

Verification — GitLab #318

Result: PASS — implementation merged on main via !482. Re-verified on current main (6b857630).

Acceptance criteria

Item Result How verified
No user-visible "sale" on / play console (pre-launch and live) PASS ArenaSimplePage uses preLaunchBuyGateMessage() (no \bsale\b in source); arenaSimplePhase.test.ts, arenaPlaySurfaceCopy.test.ts, arenaCommandConsoleStatic.test.ts, surfaceContent.test.ts
WarBow rival rows open wallet profile modal PASS (wiring) / SKIP (live click) onOpenWalletProfile threaded ArenaSimplePage → ArenaWarbowHeroPanel → PlayerIdentity.onOpenProfile; static tests in arenaPlaySurfaceCopy.test.ts + arenaCommandConsoleStatic.test.ts. Live Playwright click SKIP — Anvil E2E has no indexed WarBow rivals without full-stack buys
Static/unit test guards forbidden copy PASS preLaunchBuyGateMessage test; revertMessage.test.ts TimeArena arena framing; arenaPlaySurfaceCopy.test.ts sale-session error scan

Automated test plan

Command Result
cd frontend && npm run typecheck PASS
cd frontend && npm run lint PASS (0 errors, 2 pre-existing warnings)
cd frontend && npm test PASS (672 tests)
bash scripts/e2e-anvil.sh PASS (7/7 Anvil arena + referrals specs on /)
bash scripts/verify-cloud-postgres.sh PASS

Manual verification

  • Forbidden copy: grep -i sale frontend/src/pages/arena/ArenaSimplePage.tsx — no matches; pre-launch gate uses arena framing (The arena has not opened yet…).
  • WarBow profile wiring: source inspection confirms onOpenProfile={onOpenWalletProfile} on rival PlayerIdentity rows; nested profile button uses stopPropagation / listbox role="option" pattern from #318 MR.

Follow-ups

  • Add Playwright E2E for WarBow rival profile click when indexed targets exist on Anvil (post-merge QA enhancement).
## Verification — GitLab #318 **Result:** **PASS** — implementation merged on `main` via [!482](https://gitlab.com/PlasticDigits/yieldomega/-/merge_requests/112). Re-verified on current `main` (`6b857630`). ### Acceptance criteria | Item | Result | How verified | |------|--------|--------------| | No user-visible "sale" on `/` play console (pre-launch and live) | **PASS** | `ArenaSimplePage` uses `preLaunchBuyGateMessage()` (no `\bsale\b` in source); `arenaSimplePhase.test.ts`, `arenaPlaySurfaceCopy.test.ts`, `arenaCommandConsoleStatic.test.ts`, `surfaceContent.test.ts` | | WarBow rival rows open wallet profile modal | **PASS** (wiring) / **SKIP** (live click) | `onOpenWalletProfile` threaded `ArenaSimplePage` → `ArenaWarbowHeroPanel` → `PlayerIdentity.onOpenProfile`; static tests in `arenaPlaySurfaceCopy.test.ts` + `arenaCommandConsoleStatic.test.ts`. Live Playwright click **SKIP** — Anvil E2E has no indexed WarBow rivals without full-stack buys | | Static/unit test guards forbidden copy | **PASS** | `preLaunchBuyGateMessage` test; `revertMessage.test.ts` TimeArena arena framing; `arenaPlaySurfaceCopy.test.ts` sale-session error scan | ### Automated test plan | Command | Result | |---------|--------| | `cd frontend && npm run typecheck` | **PASS** | | `cd frontend && npm run lint` | **PASS** (0 errors, 2 pre-existing warnings) | | `cd frontend && npm test` | **PASS** (672 tests) | | `bash scripts/e2e-anvil.sh` | **PASS** (7/7 Anvil arena + referrals specs on `/`) | | `bash scripts/verify-cloud-postgres.sh` | **PASS** | ### Manual verification - **Forbidden copy:** `grep -i sale frontend/src/pages/arena/ArenaSimplePage.tsx` — no matches; pre-launch gate uses arena framing (`The arena has not opened yet…`). - **WarBow profile wiring:** source inspection confirms `onOpenProfile={onOpenWalletProfile}` on rival `PlayerIdentity` rows; nested profile button uses `stopPropagation` / listbox `role="option"` pattern from #318 MR. ### Follow-ups - Add Playwright E2E for WarBow rival profile click when indexed targets exist on Anvil (post-merge QA enhancement).
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-06-14 05:41:51 +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#318
No description provided.