Rename timecurve-* CSS classes and public art paths to arena-* #280

Closed
opened 2026-06-02 13:45:11 +00:00 by PlasticDigits · 11 comments
PlasticDigits commented 2026-06-02 13:45:11 +00:00 (Migrated from gitlab.com)

Summary

Rename remaining timecurve-* CSS class names, data-testids, and public art paths to arena-* (or neutral Arena naming) so the frontend matches Arena v2 product language after TimeCurve v1 retirement (#266).

Scope: Naming and asset paths only — no onchain, indexer HTTP, or route changes.

Explicitly out of scope for #266 — tracked here as follow-up hygiene.


Current codebase

Routes and env (already Arena v2)

Lingering timecurve identifiers (~80+ references in frontend/)

Category Examples Notes
CSS classes timecurve-protocol-page, timecurve-buy-projected-effects, timecurve-simple-agent-card frontend/src/index.css (keyframes timecurve-spot-pulse, timecurve-stake-*, scene url("/art/scenes/timecurve-arena.jpg"))
Components ArenaProtocolPage.tsx, ArenaBuyProjectedEffects.tsx, ArenaSimpleAgentCard.tsx Class names predate rename
Public art /art/icons/timecurve-podium-*.png, /art/scenes/timecurve-protocol.jpg, timecurve-arena.jpg Referenced in arenaUi.tsx, ArenaSimplePodiumSection.tsx
E2E / tests data-testid="timecurve-simple-agent-card", podium icon path assertions frontend/e2e/, *.test.tsx
Comments / docs in tree frontend/public/art/README.md, formatTimer.ts Catalog still says “TimeCurve”
Revert strings revertMessage.ts (~36 hits) May include onchain revert text — do not rename contract revert strings

What is not legacy product code

  • /timecurve redirects in LaunchGate — keep until analytics show zero traffic (separate from CSS rename).
  • Historical art folders e.g. frontend/public/art/timecurve-launch-brief/ — archive or rename with redirects if URLs are bookmarked.

Why this is needed

  1. Product truth: Participants and operators see “Time Arena”; timecurve-* in DOM/CSS implies deprecated v1 launchpad (#266).
  2. Agent / contributor grep noise: Mixed naming slows refactors and causes mistaken “TimeCurve still active” conclusions.
  3. E2E stability: data-testid renames must be coordinated with Playwright selectors in one PR train.
  4. Asset hygiene: Icon filenames under public/art/icons/ should match Arena branding for CDN/cache clarity.

Constraints and guardrails

  • No behavior change — visual parity only; no economics or API changes.
  • Do not reintroduce TimeCurve sale-end, FeeRouter, vesting UI (#243, #244, #266).
  • Preserve legacy URL redirects (/timecurve → /arena) — unrelated to class rename.
  • Onchain revert messages in revertMessage.ts must stay byte-accurate to contract strings.
  • AGPL-3.0; one PR should be reviewable — consider phased sub-PRs: (1) CSS + TSX classes, (2) public art file renames + compatibility symlinks or Vite aliases, (3) docs.
  • Cache busting: Art paths use ?v=1 in places — bump query or rename consistently.

Relevant files

Layer Files
Styles frontend/src/index.css
Arena UI frontend/src/pages/arena/*.tsx, arenaUi.tsx
Layout frontend/src/layout/RootLayout.tsx
Public assets frontend/public/art/ (scenes, icons, README)
E2E frontend/e2e/arena.spec.ts, anvil-arena-*.spec.ts, navigation.spec.ts
Docs docs/frontend/arena-views.md, docs/frontend/design.md, YO-DOUB-Launch-UX-Flows.md
Invariants Add optional INV-FRONTEND-*-ARENA-CSS-NAMING in docs/testing/invariants-and-business-logic.md

Phase 1 — TSX + CSS (single PR)

  1. Define mapping table timecurve-* → arena-* (document in MR).
  2. Rename classes in TSX and index.css together (avoid orphan CSS).
  3. Update data-testid values and Playwright selectors in the same commit.
  4. Run npm test, npm run build, bash scripts/e2e-anvil.sh (or Playwright arena specs).

Phase 2 — Public art paths

  1. Rename files under frontend/public/art/icons/timecurve-podium-* → arena-podium-* (and scenes).
  2. Either:
    • Hard rename + update all imports (preferred), or
    • Copy + 301 via Vite public duplicate files for one release (if external hotlinking is a concern).
  3. Update frontend/public/art/README.md catalog.

Phase 3 — Docs / guardrails

  1. Cross-link issue in .cursor/skills/yieldomega-guardrails/SKILL.md item 9 footnote.
  2. Grep CI: fail on new timecurve- class names in frontend/src (optional scripts/check-arena-naming.sh).

Exclusions

  • Do not rename LaunchGate /timecurve route paths (redirects).
  • Do not rename revertMessage.ts entries that mirror Solidity revert reasons.
  • Kumbaya env VITE_KUMBAYA_TIMECURVE_BUY_ROUTER — separate issue / already legacy alias; optional alias removal.

Acceptance criteria

  • No timecurve- CSS class or data-testid in frontend/src/pages/arena/** (allowlist documented for redirects-only strings).
  • Podium/icon art served from arena-* paths (or documented symlink shim with removal date).
  • npm test and npm run build green.
  • Playwright arena + navigation specs green.
  • rg 'timecurve-' frontend/src/pages/arena → zero matches (except comments pointing to historical docs, if any).
  • Visual spot-check: /arena and /arena/protocol unchanged layout (before/after screenshots in MR).

Test plan — functional paths

# Path Expected
1 /arena Simple view Podium icons, timer hero, buy card render
2 /arena/protocol AUDIT Protocol scene, raise card, donate pools
3 Mobile 390×844 /arena No broken background images
4 Agent card data-testid E2E/agents can open footer agent panel
5 Deep link /timecurve Still redirects to /arena (unchanged)
6 Production build npm run build No 404 for renamed assets in dist/

Test plan — attack / abuse vectors

Vector Test Expected
Broken asset open redirect Request old /art/icons/timecurve-podium-last-buy.png 404 or explicit redirect; no arbitrary URL load
XSS via class rename No user-controlled strings in new class names Static identifiers only
CSS confusion / clickjacking z-index and overlay classes unchanged Same stacking as before rename
Cache poisoning Bump ?v= on moved assets Clients fetch new files

Verification criteria

  • npm run typecheck, npm run lint, npm test, npm run build pass.
  • bash scripts/e2e-anvil.sh or npx playwright test e2e/arena.spec.ts e2e/navigation.spec.ts pass.
  • Optional grep gate: rg 'timecurve-' frontend/src --glob '*.tsx' --glob '*.css' → empty (per allowlist).
  • Manual QA: checklist row in docs/testing/manual-qa-checklists.md (new §) or appendix to #266 sign-off.
  • Relates to #266; does not close #266 unless bundled by maintainers.
## Summary Rename remaining **`timecurve-*`** CSS class names, `data-testid`s, and public art paths to **`arena-*`** (or neutral Arena naming) so the frontend matches **Arena v2** product language after TimeCurve v1 retirement ([#266](https://gitlab.com/PlasticDigits/yieldomega/-/issues/266)). **Scope:** Naming and asset paths only — **no** onchain, indexer HTTP, or route changes. **Explicitly out of scope for #266** — tracked here as follow-up hygiene. --- ## Current codebase ### Routes and env (already Arena v2) - Play: **`/arena`**; AUDIT: **`/arena/protocol`**; legacy **`/timecurve/*`** redirects ([`frontend/src/app/LaunchGate.tsx`](frontend/src/app/LaunchGate.tsx)). - Env: **`VITE_TIME_ARENA_ADDRESS`** only ([`frontend/src/lib/addresses.ts`](frontend/src/lib/addresses.ts), [`scripts/check-frontend-vite-env.sh`](scripts/check-frontend-vite-env.sh)). ### Lingering `timecurve` identifiers (~80+ references in `frontend/`) | Category | Examples | Notes | |----------|----------|--------| | **CSS classes** | `timecurve-protocol-page`, `timecurve-buy-projected-effects`, `timecurve-simple-agent-card` | [`frontend/src/index.css`](frontend/src/index.css) (keyframes `timecurve-spot-pulse`, `timecurve-stake-*`, scene `url("/art/scenes/timecurve-arena.jpg")`) | | **Components** | [`ArenaProtocolPage.tsx`](frontend/src/pages/arena/ArenaProtocolPage.tsx), [`ArenaBuyProjectedEffects.tsx`](frontend/src/pages/arena/ArenaBuyProjectedEffects.tsx), [`ArenaSimpleAgentCard.tsx`](frontend/src/pages/arena/ArenaSimpleAgentCard.tsx) | Class names predate rename | | **Public art** | `/art/icons/timecurve-podium-*.png`, `/art/scenes/timecurve-protocol.jpg`, `timecurve-arena.jpg` | Referenced in [`arenaUi.tsx`](frontend/src/pages/arena/arenaUi.tsx), [`ArenaSimplePodiumSection.tsx`](frontend/src/pages/arena/ArenaSimplePodiumSection.tsx) | | **E2E / tests** | `data-testid="timecurve-simple-agent-card"`, podium icon path assertions | [`frontend/e2e/`](frontend/e2e/), `*.test.tsx` | | **Comments / docs in tree** | [`frontend/public/art/README.md`](frontend/public/art/README.md), [`formatTimer.ts`](frontend/src/pages/arena/formatTimer.ts) | Catalog still says “TimeCurve” | | **Revert strings** | [`revertMessage.ts`](frontend/src/lib/revertMessage.ts) (~36 hits) | May include **onchain** revert text — **do not rename** contract revert strings | ### What is *not* legacy product code - **`/timecurve` redirects** in `LaunchGate` — keep until analytics show zero traffic (separate from CSS rename). - **Historical art folders** e.g. `frontend/public/art/timecurve-launch-brief/` — archive or rename with redirects if URLs are bookmarked. --- ## Why this is needed 1. **Product truth:** Participants and operators see “Time Arena”; `timecurve-*` in DOM/CSS implies deprecated v1 launchpad ([#266](https://gitlab.com/PlasticDigits/yieldomega/-/issues/266)). 2. **Agent / contributor grep noise:** Mixed naming slows refactors and causes mistaken “TimeCurve still active” conclusions. 3. **E2E stability:** `data-testid` renames must be coordinated with Playwright selectors in one PR train. 4. **Asset hygiene:** Icon filenames under `public/art/icons/` should match Arena branding for CDN/cache clarity. --- ## Constraints and guardrails - **No behavior change** — visual parity only; no economics or API changes. - **Do not reintroduce** TimeCurve sale-end, FeeRouter, vesting UI ([#243](https://gitlab.com/PlasticDigits/yieldomega/-/issues/243), [#244](https://gitlab.com/PlasticDigits/yieldomega/-/issues/244), [#266](https://gitlab.com/PlasticDigits/yieldomega/-/issues/266)). - **Preserve** legacy URL redirects (`/timecurve` → `/arena`) — unrelated to class rename. - **Onchain revert messages** in `revertMessage.ts` must stay byte-accurate to contract strings. - **AGPL-3.0**; one PR should be reviewable — consider phased sub-PRs: (1) CSS + TSX classes, (2) public art file renames + compatibility symlinks or Vite aliases, (3) docs. - **Cache busting:** Art paths use `?v=1` in places — bump query or rename consistently. --- ## Relevant files | Layer | Files | |-------|--------| | **Styles** | [`frontend/src/index.css`](frontend/src/index.css) | | **Arena UI** | [`frontend/src/pages/arena/*.tsx`](frontend/src/pages/arena/), [`arenaUi.tsx`](frontend/src/pages/arena/arenaUi.tsx) | | **Layout** | [`frontend/src/layout/RootLayout.tsx`](frontend/src/layout/RootLayout.tsx) | | **Public assets** | [`frontend/public/art/`](frontend/public/art/) (scenes, icons, README) | | **E2E** | [`frontend/e2e/arena.spec.ts`](frontend/e2e/arena.spec.ts), [`anvil-arena-*.spec.ts`](frontend/e2e/), [`navigation.spec.ts`](frontend/e2e/navigation.spec.ts) | | **Docs** | [`docs/frontend/arena-views.md`](docs/frontend/arena-views.md), [`docs/frontend/design.md`](docs/frontend/design.md), [`YO-DOUB-Launch-UX-Flows.md`](YO-DOUB-Launch-UX-Flows.md) | | **Invariants** | Add optional `INV-FRONTEND-*-ARENA-CSS-NAMING` in [`docs/testing/invariants-and-business-logic.md`](docs/testing/invariants-and-business-logic.md) | --- ## Recommended direction ### Phase 1 — TSX + CSS (single PR) 1. Define mapping table `timecurve-*` → `arena-*` (document in MR). 2. Rename classes in TSX and `index.css` together (avoid orphan CSS). 3. Update `data-testid` values and Playwright selectors in the **same commit**. 4. Run `npm test`, `npm run build`, `bash scripts/e2e-anvil.sh` (or Playwright arena specs). ### Phase 2 — Public art paths 1. Rename files under `frontend/public/art/icons/timecurve-podium-*` → `arena-podium-*` (and scenes). 2. Either: - **Hard rename** + update all imports (preferred), or - **Copy + 301** via Vite `public` duplicate files for one release (if external hotlinking is a concern). 3. Update [`frontend/public/art/README.md`](frontend/public/art/README.md) catalog. ### Phase 3 — Docs / guardrails 1. Cross-link issue in [`.cursor/skills/yieldomega-guardrails/SKILL.md`](.cursor/skills/yieldomega-guardrails/SKILL.md) item 9 footnote. 2. Grep CI: fail on **new** `timecurve-` class names in `frontend/src` (optional `scripts/check-arena-naming.sh`). ### Exclusions - Do **not** rename `LaunchGate` `/timecurve` route paths (redirects). - Do **not** rename `revertMessage.ts` entries that mirror Solidity revert reasons. - `Kumbaya` env `VITE_KUMBAYA_TIMECURVE_BUY_ROUTER` — separate issue / already legacy alias; optional alias removal. --- ## Acceptance criteria - [ ] No `timecurve-` **CSS class** or **`data-testid`** in `frontend/src/pages/arena/**` (allowlist documented for redirects-only strings). - [ ] Podium/icon art served from `arena-*` paths (or documented symlink shim with removal date). - [ ] `npm test` and `npm run build` green. - [ ] Playwright arena + navigation specs green. - [ ] `rg 'timecurve-' frontend/src/pages/arena` → zero matches (except comments pointing to historical docs, if any). - [ ] Visual spot-check: `/arena` and `/arena/protocol` unchanged layout (before/after screenshots in MR). --- ## Test plan — functional paths | # | Path | Expected | |---|------|----------| | 1 | `/arena` Simple view | Podium icons, timer hero, buy card render | | 2 | `/arena/protocol` AUDIT | Protocol scene, raise card, donate pools | | 3 | Mobile 390×844 `/arena` | No broken background images | | 4 | Agent card `data-testid` | E2E/agents can open footer agent panel | | 5 | Deep link `/timecurve` | Still redirects to `/arena` (unchanged) | | 6 | Production build `npm run build` | No 404 for renamed assets in `dist/` | --- ## Test plan — attack / abuse vectors | Vector | Test | Expected | |--------|------|----------| | **Broken asset open redirect** | Request old `/art/icons/timecurve-podium-last-buy.png` | 404 or explicit redirect; no arbitrary URL load | | **XSS via class rename** | No user-controlled strings in new class names | Static identifiers only | | **CSS confusion / clickjacking** | z-index and overlay classes unchanged | Same stacking as before rename | | **Cache poisoning** | Bump `?v=` on moved assets | Clients fetch new files | --- ## Verification criteria - [ ] `npm run typecheck`, `npm run lint`, `npm test`, `npm run build` pass. - [ ] `bash scripts/e2e-anvil.sh` or `npx playwright test e2e/arena.spec.ts e2e/navigation.spec.ts` pass. - [ ] Optional grep gate: `rg 'timecurve-' frontend/src --glob '*.tsx' --glob '*.css'` → empty (per allowlist). - [ ] Manual QA: checklist row in [`docs/testing/manual-qa-checklists.md`](docs/testing/manual-qa-checklists.md) (new §) or appendix to #266 sign-off. - [ ] Relates to [#266](https://gitlab.com/PlasticDigits/yieldomega/-/issues/266); does not close #266 unless bundled by maintainers.
PlasticDigits commented 2026-06-02 13:45:19 +00:00 (Migrated from gitlab.com)

marked as related to #266

marked as related to #266
ghost1 commented 2026-06-03 11:29:59 +00:00 (Migrated from gitlab.com)

mentioned in commit bdcf177d283e0177568ccadb9ee3db4c28673f84

mentioned in commit bdcf177d283e0177568ccadb9ee3db4c28673f84
PlasticDigits commented 2026-06-03 11:30:27 +00:00 (Migrated from gitlab.com)

Implementation complete (branch pushed)

Work is on cursor/arena-css-naming-280-9ea9 (merged locally to main; main push is protected — merge via MR).

What changed

  • TSX/CSS: timecurve-* class names and data-testids in frontend/src/pages/arena/** → arena-* (matches rules already in index.css).
  • Public art: Git-renamed podium PNGs, scene JPEGs (arena-simple.jpg, arena-protocol.jpg, arena-arena.jpg), header-arena.png; cache-bust rank icons to ?v=2.
  • Fix: Code already referenced arena-simple.jpg while the file was still timecurve-simple.jpg (broken hero scene).
  • Guardrails: scripts/check-arena-naming.sh (CI scripts-smoke), INV-FRONTEND-280-ARENA-CSS-NAMING, arena-views §280, manual QA §280, guardrails skill item 9.

Unchanged: /timecurve redirects in LaunchGate.tsx; onchain revert strings in revertMessage.ts.

Verification checklist (QA)

  • bash scripts/check-arena-naming.sh → exit 0
  • cd frontend && npm run typecheck && npm run lint && npm test && npm run build
  • /arena — podium icons, timer hero scene, buy card layout unchanged
  • /arena/protocol — protocol backdrop + donate pools
  • Footer data-testid="arena-simple-agent-card" opens agent panel + site links
  • /timecurve still redirects to /arena
  • GET /art/icons/arena-podium-last-buy.png → 200; GET /art/icons/timecurve-podium-last-buy.png → 404
  • Optional: npx playwright test e2e/arena.spec.ts e2e/navigation.spec.ts e2e/footer-site-links.spec.ts (5 workers)

Automated run (agent)

Item Command Result
Naming gate bash scripts/check-arena-naming.sh PASS
Typecheck npm run typecheck PASS
Lint npm run lint PASS (existing warnings)
Unit tests npm test PASS
Build npm run build PASS

Follow-ups (optional)

  • Rename frontend/public/art/timecurve-launch-brief/ archive folder when bookmark traffic is zero.
  • header-icons-prompts.json still documents header-timecurve slug (generator metadata only).

Please have the QA agent team run the checklist above on the MR branch before merge.

Issue left open until MR is merged and sign-off recorded.

## Implementation complete (branch pushed) Work is on **`cursor/arena-css-naming-280-9ea9`** (merged locally to `main`; `main` push is protected — merge via MR). ### What changed - **TSX/CSS:** `timecurve-*` class names and `data-testid`s in `frontend/src/pages/arena/**` → `arena-*` (matches rules already in `index.css`). - **Public art:** Git-renamed podium PNGs, scene JPEGs (`arena-simple.jpg`, `arena-protocol.jpg`, `arena-arena.jpg`), `header-arena.png`; cache-bust rank icons to `?v=2`. - **Fix:** Code already referenced `arena-simple.jpg` while the file was still `timecurve-simple.jpg` (broken hero scene). - **Guardrails:** `scripts/check-arena-naming.sh` (CI `scripts-smoke`), **`INV-FRONTEND-280-ARENA-CSS-NAMING`**, [arena-views §280](docs/frontend/arena-views.md#arena-css-naming-gitlab-280), [manual QA §280](docs/testing/manual-qa-checklists.md#manual-qa-issue-280), guardrails skill item 9. **Unchanged:** `/timecurve` redirects in `LaunchGate.tsx`; onchain revert strings in `revertMessage.ts`. ### Verification checklist (QA) - [ ] `bash scripts/check-arena-naming.sh` → exit 0 - [ ] `cd frontend && npm run typecheck && npm run lint && npm test && npm run build` - [ ] `/arena` — podium icons, timer hero scene, buy card layout unchanged - [ ] `/arena/protocol` — protocol backdrop + donate pools - [ ] Footer `data-testid="arena-simple-agent-card"` opens agent panel + site links - [ ] `/timecurve` still redirects to `/arena` - [ ] `GET /art/icons/arena-podium-last-buy.png` → 200; `GET /art/icons/timecurve-podium-last-buy.png` → 404 - [ ] Optional: `npx playwright test e2e/arena.spec.ts e2e/navigation.spec.ts e2e/footer-site-links.spec.ts` (5 workers) ### Automated run (agent) | Item | Command | Result | |------|---------|--------| | Naming gate | `bash scripts/check-arena-naming.sh` | PASS | | Typecheck | `npm run typecheck` | PASS | | Lint | `npm run lint` | PASS (existing warnings) | | Unit tests | `npm test` | PASS | | Build | `npm run build` | PASS | ### Follow-ups (optional) - Rename `frontend/public/art/timecurve-launch-brief/` archive folder when bookmark traffic is zero. - `header-icons-prompts.json` still documents `header-timecurve` slug (generator metadata only). Please have the QA agent team run the checklist above on the MR branch before merge. Issue left **open** until MR is merged and sign-off recorded.
ghost1 commented 2026-06-03 11:38:49 +00:00 (Migrated from gitlab.com)

mentioned in commit 79845f7d76

mentioned in commit 79845f7d76c0f6499ee82d7f3fbe794a8e0f5d31
PlasticDigits commented 2026-06-03 11:38:52 +00:00 (Migrated from gitlab.com)

mentioned in merge request !408

mentioned in merge request !408
PlasticDigits commented 2026-06-03 11:54:46 +00:00 (Migrated from gitlab.com)

mentioned in commit 5a4177b34d

mentioned in commit 5a4177b34d13e3dfd07a02ffb6a41c0b59c1a876
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-06-03 11:54:47 +00:00
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 13:29:24 +00:00 (Migrated from gitlab.com)

mentioned in issue #284

mentioned in issue #284
PlasticDigits commented 2026-06-03 13:41:14 +00:00 (Migrated from gitlab.com)

mentioned in issue #286

mentioned in issue #286
PlasticDigits commented 2026-06-06 09:35:21 +00:00 (Migrated from gitlab.com)

mentioned in issue #298

mentioned in issue #298
PlasticDigits commented 2026-06-13 07:02:54 +00:00 (Migrated from gitlab.com)

mentioned in issue #309

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