Retire TimeCurve v1 surfaces — routes, indexer aliases, env, and legacy UX #266

Closed
opened 2026-05-29 08:09:34 +00:00 by PlasticDigits · 34 comments
PlasticDigits commented 2026-05-29 08:09:34 +00:00 (Migrated from gitlab.com)

Summary

Remove remaining TimeCurve v1 launchpad surfaces from the product, indexer HTTP API, frontend routes/naming, deploy env, and contributor docs — after Arena v2 (TimeArena) is the sole live game contract. This is the cross-repo retirement umbrella; contract deletion is largely done (#243); docs cleanup is tracked in #263.

Coordinate with: #264 (Arena frontend buy/router migration) — retirement should not leave /timecurve/arena on TimeCurve ABI; finish #264 first or in the same release train.

Parent epic: #238.


Current codebase

Contracts (mostly retired)

  • contracts/src/ ships Arena v2 only: TimeArena, PodiumVaults, AdminSellVault, Doubloon, PlayCred, ReferralRegistry, TimeArenaBuyRouter, fixtures.
  • No TimeCurve.sol, FeeRouter, RabbitTreasury, or Leprechaun in contracts/src/.
  • DeployDev.s.sol deploys Arena stack only.
  • Legacy still in repo: deploy scripts (scripts/deploy-megaeth-contracts.sh), DeployProduction references, fork tests, public ABIs under frontend/public/abis/TimeCurve*.json, README mainnet TimeCurve proxy row.

Indexer (Arena-primary, TimeCurve-named HTTP)

  • Ingestion decodes Arena v2 + ReferralRegistry only (INV-INDEXER-260-NO-TIMECURVE-DECODE).
  • Registry watches TimeArena, PodiumVaults, AdminSellVault, ReferralRegistry.
  • Legacy HTTP paths remain, e.g.:
    • GET /v1/timecurve/sale-state — head-RPC snapshot reused for Simple session (sale_state.rs)
    • GET /v1/timecurve/chain-timer, platform-usage, warbow/battle-feed, etc.
  • Arena-native routes exist: GET /v1/arena/buys, timers, podium-pool-donations, etc.

Frontend (mixed naming and routes)

Route Today Issue
/ (post-launch) TimeArenaPage OK — rename internals optional
/arena Simple Arena (TimeCurveSimplePage + bridge) Uses VITE_TIMECURVE_ADDRESS alias + arenaV2SaleSessionBridge
/timecurve Redirect → /arena Legacy path kept
/timecurve/arena TimeCurvePage → useTimeCurveArenaModel (TimeCurve ABI) Must migrate or remove (#264)
/timecurve/protocol AUDIT (TimeCurveProtocolPage) TimeCurve-named components; donate pools card works
/vesting Presale vesting (if routed) #243 scope
  • addresses.ts: timeCurve alias from VITE_TIMECURVE_ADDRESS ?? VITE_TIME_ARENA_ADDRESS.
  • Hundreds of TimeCurve* filenames and CSS classes (timecurve-*).
  • Kumbaya env: VITE_KUMBAYA_TIMECURVE_BUY_ROUTER (TimeCurve-era name).
  • FeeTransparency already Arena vault copy when VITE_TIME_ARENA_ADDRESS set.

Docs / ops / skills


Why this is needed

  1. Product truth: Arena v2 is always-live; there is no TimeCurve sale-end, CHARM redemption, or FeeRouter CL8Y buy path. Keeping TimeCurve routes and env names confuses operators, agents, and participants.
  2. Safety: A misconfigured VITE_TIMECURVE_ADDRESS pointing at an old proxy while /arena uses VITE_TIME_ARENA_ADDRESS can re-enable wrong ABI reads (#264 addresses Advanced view; retirement removes the alias footgun).
  3. Indexer clarity: Dual /v1/timecurve/* and /v1/arena/* APIs duplicate concepts; frontend should consume arena routes only for game state.
  4. Maintenance cost: E2E, manual QA, and agent skills still mention retired flows — grep noise blocks confident refactors.

Constraints and guardrails

  • Do not reintroduce Leprechaun (#241), Rabbit/Burrow (#242), TimeCurve sale-end/redemption (#243), FeeRouter five-sink CL8Y (#244).
  • Preserve /vesting + DoubPresaleVesting only if product still requires claims on mainnet — otherwise fold into #243 and remove here.
  • Onchain authority unchanged: TimeArena economics per arena-v2.md.
  • AGPL-3.0; one SQL transaction per block for indexer (#140).
  • Production indexer guards (#142, #156).
  • Breaking changes OK for env vars and HTTP paths if versioned (x-schema-version bump) and documented in deploy runbooks.
  • Historical mainnet data: indexer may still serve read-only legacy tables for archived TimeCurve txs if needed — separate from removing decode of new blocks (already off). Do not delete historical DB tables without migration plan.

Relevant files

Layer Files
Routing frontend/src/app/LaunchGate.tsx, RootLayout.tsx, surfaceContent.ts, footerSiteLinks.ts
Pages to remove/redirect TimeCurveBranchPage.tsx, legacy stake/redemption sections, TimeCurveProtocolDoubProjectionSection.tsx (sale projection)
Env / addresses addresses.ts, .env.example, scripts/check-frontend-vite-env.sh, scripts/e2e-anvil.sh, scripts/start-local-anvil-stack.sh
Indexer HTTP indexer/src/api.rs, sale_state.rs, api_arena.rs, indexer/README.md
Kumbaya naming kumbayaRoutes.ts, timeCurveKumbayaSingleTx.ts
ABIs / artifacts frontend/public/abis/TimeCurve*.json, TimeCurveBuyRouter.json (keep only if historical pages remain)
Deploy / registry indexer/address-registry.megaeth-mainnet.json, scripts/deploy-megaeth-contracts.sh, scripts/write-production-registry-from-broadcast.sh
Docs #263 files + docs/frontend/arena-views.md, docs/integrations/kumbaya.md
Tests / E2E frontend/e2e/timecurve*.spec.ts, timecurve-live-buys-modals.spec.ts — rename or retire

Phase A — Product routes (breaking OK)

  1. Canonical routes: /arena (play), /arena/protocol or /protocol (AUDIT) — drop /timecurve/* or 301 to arena equivalents in LaunchGate.
  2. Remove /timecurve/arena after #264 merges Advanced features into shared Arena session or redirect to /arena with sub-nav query.
  3. Env: require VITE_TIME_ARENA_ADDRESS (+ vault vars); remove VITE_TIMECURVE_ADDRESS from checklists and scripts.
  4. Rename user-visible “TimeCurve” → “Time Arena” where still shown (hero titles, subnav).

Phase B — Indexer HTTP migration

  1. Add/rename GET /v1/arena/sale-state (or extend GET /v1/arena/timers) with fields Simple session needs; deprecate GET /v1/timecurve/sale-state (410 or redirect doc).
  2. Migrate platform-usage / WarBow feed to arena semantics (DOUB spends) or mark deprecated.
  3. Bump x-schema-version; document in README.

Phase C — Code hygiene

  1. Delete unused TimeCurve ABIs and frontend modules tied to sale-end/redemption/envelope curve.
  2. Rename files incrementally (TimeCurveSimplePage → ArenaSimplePage) or one-shot rename PR — team preference; avoid dual names long-term.
  3. Update play skills to GET /v1/arena/* only.
  4. Trim deploy guide to Arena + TimeArenaBuyRouter (coordinate env rename with #264).

Phase D — Docs (#263)

Land doc deletion in parallel or as sub-task — do not block route removal on full invariant file rewrite.


Acceptance criteria

  • No production route requires VITE_TIMECURVE_ADDRESS.
  • /timecurve paths redirect or 404 with clear migration note (no empty outlets).
  • Simple + Advanced play surfaces read TimeArena only (no timeCurveReadAbi for session state).
  • Frontend indexer reads use /v1/arena/* for timers/sale snapshot (not /v1/timecurve/sale-state).
  • scripts/check-frontend-vite-env.sh validates Arena env only.
  • Grep contracts/src stays clean of TimeCurve / FeeRouter implementations.
  • Retired E2E specs removed or rewritten for /arena only.
  • README quick-reference reflects TimeArena proxy addresses (not TimeCurve launchpad).
  • #243 items either done or explicitly deferred with issue link (vesting, presale pages).

Test plan — functional paths

# Path Expected
1 Visit /timecurve Lands on /arena (or documented redirect)
2 Visit /timecurve/arena Redirect to /arena or equivalent Advanced tab
3 Visit /timecurve/protocol AUDIT page at new canonical URL
4 make check-frontend-env with only Arena vars Pass
5 Anvil stack start Writes VITE_TIME_ARENA_* only
6 Indexer GET /v1/arena/timers + sale fields Powers Simple UI without timecurve path
7 Deep link old URL bookmark Still reaches correct content (redirect)
8 /vesting Per #243: removed or still works independently

Automated: npm test, cargo test, ANVIL_E2E=1 arena specs; grep CI job or script for forbidden strings (buyFeeRoutingEnabled on Arena, redeemCharms, endSale in frontend src).


Test plan — attack / abuse vectors

Vector Test Expected
Wrong env alias Set only legacy VITE_TIMECURVE to random contract App fails closed / does not send buys to wrong ABI
Stale indexer path Point frontend at deprecated /v1/timecurve/sale-state after removal 404 handled — no fake “sale active” UI
Open redirect New redirects only to same-origin arena routes No arbitrary URL redirects
Historical ABI phishing UI never loads retired TimeCurve write ABI for /arena Only timeArenaReadAbi / router ABI

Verification criteria

  • CI green across contracts (unchanged), indexer, frontend.
  • Manual QA checklist updated — no /timecurve/arena TimeCurve-only rows.
  • rg -l 'VITE_TIMECURVE_ADDRESS' frontend scripts → empty or migration shim with deprecation comment + removal date.
  • Indexer README lists canonical Arena HTTP table; timecurve paths marked deprecated/removed.
  • Deploy runbook for next mainnet release uses Arena registry fields only.
  • Close or link child issues: #243, #263, #256, #264.

Out of scope

  • Mainnet decommission of deployed TimeCurve proxy (onchain artifact may remain forever).
  • Full CSS/class rename (timecurve-* → arena-*) — optional follow-up if too large for one PR.
  • Indexer ingest of PodiumFunded / SeedFunded / AdminVaultFunded — separate issue (buy funding events).
## Summary Remove remaining **TimeCurve v1 launchpad** surfaces from the product, indexer HTTP API, frontend routes/naming, deploy env, and contributor docs — after **Arena v2** (`TimeArena`) is the sole live game contract. This is the **cross-repo retirement** umbrella; contract deletion is largely done ([#243](https://gitlab.com/PlasticDigits/yieldomega/-/issues/243)); docs cleanup is tracked in [#263](https://gitlab.com/PlasticDigits/yieldomega/-/issues/263). **Coordinate with:** [#264](https://gitlab.com/PlasticDigits/yieldomega/-/work_items/264) (Arena frontend buy/router migration) — retirement should not leave `/timecurve/arena` on TimeCurve ABI; finish #264 first or in the same release train. Parent epic: [#238](https://gitlab.com/PlasticDigits/yieldomega/-/issues/238). --- ## Current codebase ### Contracts (mostly retired) - `contracts/src/` ships **Arena v2 only**: `TimeArena`, `PodiumVaults`, `AdminSellVault`, `Doubloon`, `PlayCred`, `ReferralRegistry`, `TimeArenaBuyRouter`, fixtures. - **No** `TimeCurve.sol`, `FeeRouter`, `RabbitTreasury`, or `Leprechaun` in `contracts/src/`. - [`DeployDev.s.sol`](contracts/script/DeployDev.s.sol) deploys Arena stack only. - **Legacy still in repo:** deploy scripts ([`scripts/deploy-megaeth-contracts.sh`](scripts/deploy-megaeth-contracts.sh)), [`DeployProduction`](contracts/script/) references, fork tests, public ABIs under `frontend/public/abis/TimeCurve*.json`, README mainnet TimeCurve proxy row. ### Indexer (Arena-primary, TimeCurve-named HTTP) - Ingestion decodes **Arena v2 + ReferralRegistry only** (`INV-INDEXER-260-NO-TIMECURVE-DECODE`). - Registry watches `TimeArena`, `PodiumVaults`, `AdminSellVault`, `ReferralRegistry`. - **Legacy HTTP paths remain**, e.g.: - `GET /v1/timecurve/sale-state` — head-RPC snapshot reused for Simple session ([`sale_state.rs`](indexer/src/sale_state.rs)) - `GET /v1/timecurve/chain-timer`, `platform-usage`, `warbow/battle-feed`, etc. - Arena-native routes exist: `GET /v1/arena/buys`, `timers`, `podium-pool-donations`, etc. ### Frontend (mixed naming and routes) | Route | Today | Issue | |-------|--------|--------| | `/` (post-launch) | `TimeArenaPage` | OK — rename internals optional | | `/arena` | Simple Arena (`TimeCurveSimplePage` + bridge) | Uses `VITE_TIMECURVE_ADDRESS` **alias** + `arenaV2SaleSessionBridge` | | `/timecurve` | Redirect → `/arena` | Legacy path kept | | `/timecurve/arena` | `TimeCurvePage` → `useTimeCurveArenaModel` (TimeCurve ABI) | **Must migrate or remove** ([#264](https://gitlab.com/PlasticDigits/yieldomega/-/work_items/264)) | | `/timecurve/protocol` | AUDIT (`TimeCurveProtocolPage`) | TimeCurve-named components; donate pools card works | | `/vesting` | Presale vesting (if routed) | [#243](https://gitlab.com/PlasticDigits/yieldomega/-/issues/243) scope | - [`addresses.ts`](frontend/src/lib/addresses.ts): `timeCurve` alias from `VITE_TIMECURVE_ADDRESS` ?? `VITE_TIME_ARENA_ADDRESS`. - Hundreds of `TimeCurve*` filenames and CSS classes (`timecurve-*`). - Kumbaya env: `VITE_KUMBAYA_TIMECURVE_BUY_ROUTER` (TimeCurve-era name). - [`FeeTransparency`](frontend/src/components/FeeTransparency.tsx) already Arena vault copy when `VITE_TIME_ARENA_ADDRESS` set. ### Docs / ops / skills - [`docs/operations/deployment-guide.md`](docs/operations/deployment-guide.md) — still TimeCurve/UUPS/buy-router centric. - Play skills reference `GET /v1/timecurve/sale-state` as fallback. - [`docs/onchain/fee-routing-and-governance.md`](docs/onchain/fee-routing-and-governance.md) — FeeRouter (retired [#244](https://gitlab.com/PlasticDigits/yieldomega/-/issues/244)). - Invariant file still ~1.6k lines of v1 anchors ([#263](https://gitlab.com/PlasticDigits/yieldomega/-/issues/263)). --- ## Why this is needed 1. **Product truth:** Arena v2 is always-live; there is no TimeCurve sale-end, CHARM redemption, or FeeRouter CL8Y buy path. Keeping TimeCurve routes and env names confuses operators, agents, and participants. 2. **Safety:** A misconfigured `VITE_TIMECURVE_ADDRESS` pointing at an old proxy while `/arena` uses `VITE_TIME_ARENA_ADDRESS` can re-enable wrong ABI reads ([#264](https://gitlab.com/PlasticDigits/yieldomega/-/work_items/264) addresses Advanced view; retirement removes the alias footgun). 3. **Indexer clarity:** Dual `/v1/timecurve/*` and `/v1/arena/*` APIs duplicate concepts; frontend should consume **arena** routes only for game state. 4. **Maintenance cost:** E2E, manual QA, and agent skills still mention retired flows — grep noise blocks confident refactors. --- ## Constraints and guardrails - **Do not reintroduce** Leprechaun ([#241](https://gitlab.com/PlasticDigits/yieldomega/-/issues/241)), Rabbit/Burrow ([#242](https://gitlab.com/PlasticDigits/yieldomega/-/issues/242)), TimeCurve sale-end/redemption ([#243](https://gitlab.com/PlasticDigits/yieldomega/-/issues/243)), FeeRouter five-sink CL8Y ([#244](https://gitlab.com/PlasticDigits/yieldomega/-/issues/244)). - **Preserve** `/vesting` + `DoubPresaleVesting` **only if** product still requires claims on mainnet — otherwise fold into [#243](https://gitlab.com/PlasticDigits/yieldomega/-/issues/243) and remove here. - **Onchain authority unchanged:** `TimeArena` economics per [`arena-v2.md`](docs/product/arena-v2.md). - **AGPL-3.0**; one SQL transaction per block for indexer ([#140](https://gitlab.com/PlasticDigits/yieldomega/-/issues/140)). - **Production indexer guards** ([#142](https://gitlab.com/PlasticDigits/yieldomega/-/issues/142), [#156](https://gitlab.com/PlasticDigits/yieldomega/-/issues/156)). - **Breaking changes OK** for env vars and HTTP paths **if** versioned (`x-schema-version` bump) and documented in deploy runbooks. - **Historical mainnet data:** indexer may still serve **read-only** legacy tables for archived TimeCurve txs if needed — separate from removing decode of new blocks (already off). Do not delete historical DB tables without migration plan. --- ## Relevant files | Layer | Files | |-------|--------| | **Routing** | [`frontend/src/app/LaunchGate.tsx`](frontend/src/app/LaunchGate.tsx), [`RootLayout.tsx`](frontend/src/layout/RootLayout.tsx), [`surfaceContent.ts`](frontend/src/lib/surfaceContent.ts), [`footerSiteLinks.ts`](frontend/src/lib/footerSiteLinks.ts) | | **Pages to remove/redirect** | [`TimeCurveBranchPage.tsx`](frontend/src/pages/TimeCurveBranchPage.tsx), legacy stake/redemption sections, [`TimeCurveProtocolDoubProjectionSection.tsx`](frontend/src/pages/timecurve/TimeCurveProtocolDoubProjectionSection.tsx) (sale projection) | | **Env / addresses** | [`addresses.ts`](frontend/src/lib/addresses.ts), [`.env.example`](frontend/.env.example), [`scripts/check-frontend-vite-env.sh`](scripts/check-frontend-vite-env.sh), [`scripts/e2e-anvil.sh`](scripts/e2e-anvil.sh), [`scripts/start-local-anvil-stack.sh`](scripts/start-local-anvil-stack.sh) | | **Indexer HTTP** | [`indexer/src/api.rs`](indexer/src/api.rs), [`sale_state.rs`](indexer/src/sale_state.rs), [`api_arena.rs`](indexer/src/api_arena.rs), [`indexer/README.md`](indexer/README.md) | | **Kumbaya naming** | [`kumbayaRoutes.ts`](frontend/src/lib/kumbayaRoutes.ts), [`timeCurveKumbayaSingleTx.ts`](frontend/src/lib/timeCurveKumbayaSingleTx.ts) | | **ABIs / artifacts** | `frontend/public/abis/TimeCurve*.json`, `TimeCurveBuyRouter.json` (keep only if historical pages remain) | | **Deploy / registry** | [`indexer/address-registry.megaeth-mainnet.json`](indexer/address-registry.megaeth-mainnet.json), [`scripts/deploy-megaeth-contracts.sh`](scripts/deploy-megaeth-contracts.sh), [`scripts/write-production-registry-from-broadcast.sh`](scripts/write-production-registry-from-broadcast.sh) | | **Docs** | [#263](https://gitlab.com/PlasticDigits/yieldomega/-/issues/263) files + [`docs/frontend/arena-views.md`](docs/frontend/arena-views.md), [`docs/integrations/kumbaya.md`](docs/integrations/kumbaya.md) | | **Tests / E2E** | [`frontend/e2e/timecurve*.spec.ts`](frontend/e2e/), [`timecurve-live-buys-modals.spec.ts`](frontend/e2e/timecurve-live-buys-modals.spec.ts) — rename or retire | --- ## Recommended direction ### Phase A — Product routes (breaking OK) 1. **Canonical routes:** `/arena` (play), `/arena/protocol` or `/protocol` (AUDIT) — drop `/timecurve/*` or 301 to arena equivalents in `LaunchGate`. 2. **Remove** `/timecurve/arena` **after** [#264](https://gitlab.com/PlasticDigits/yieldomega/-/work_items/264) merges Advanced features into shared Arena session **or** redirect to `/arena` with sub-nav query. 3. **Env:** require `VITE_TIME_ARENA_ADDRESS` (+ vault vars); **remove** `VITE_TIMECURVE_ADDRESS` from checklists and scripts. 4. Rename user-visible “TimeCurve” → “Time Arena” where still shown (hero titles, subnav). ### Phase B — Indexer HTTP migration 1. Add/rename `GET /v1/arena/sale-state` (or extend `GET /v1/arena/timers`) with fields Simple session needs; deprecate `GET /v1/timecurve/sale-state` (410 or redirect doc). 2. Migrate `platform-usage` / WarBow feed to arena semantics (DOUB spends) or mark deprecated. 3. Bump `x-schema-version`; document in README. ### Phase C — Code hygiene 1. Delete unused TimeCurve ABIs and frontend modules tied to sale-end/redemption/envelope curve. 2. Rename files incrementally (`TimeCurveSimplePage` → `ArenaSimplePage`) **or** one-shot rename PR — team preference; avoid dual names long-term. 3. Update play skills to `GET /v1/arena/*` only. 4. Trim deploy guide to Arena + `TimeArenaBuyRouter` (coordinate env rename with #264). ### Phase D — Docs ([#263](https://gitlab.com/PlasticDigits/yieldomega/-/issues/263)) Land doc deletion in parallel or as sub-task — do not block route removal on full invariant file rewrite. --- ## Acceptance criteria - [ ] No production route requires `VITE_TIMECURVE_ADDRESS`. - [ ] `/timecurve` paths redirect or 404 with clear migration note (no empty outlets). - [ ] Simple + Advanced play surfaces read **TimeArena** only (no `timeCurveReadAbi` for session state). - [ ] Frontend indexer reads use **`/v1/arena/*`** for timers/sale snapshot (not `/v1/timecurve/sale-state`). - [ ] `scripts/check-frontend-vite-env.sh` validates Arena env only. - [ ] Grep `contracts/src` stays clean of `TimeCurve` / `FeeRouter` implementations. - [ ] Retired E2E specs removed or rewritten for `/arena` only. - [ ] README quick-reference reflects TimeArena proxy addresses (not TimeCurve launchpad). - [ ] [#243](https://gitlab.com/PlasticDigits/yieldomega/-/issues/243) items either done or explicitly deferred with issue link (vesting, presale pages). --- ## Test plan — functional paths | # | Path | Expected | |---|------|----------| | 1 | Visit `/timecurve` | Lands on `/arena` (or documented redirect) | | 2 | Visit `/timecurve/arena` | Redirect to `/arena` or equivalent Advanced tab | | 3 | Visit `/timecurve/protocol` | AUDIT page at new canonical URL | | 4 | `make check-frontend-env` with only Arena vars | Pass | | 5 | Anvil stack start | Writes `VITE_TIME_ARENA_*` only | | 6 | Indexer `GET /v1/arena/timers` + sale fields | Powers Simple UI without timecurve path | | 7 | Deep link old URL bookmark | Still reaches correct content (redirect) | | 8 | `/vesting` | Per #243: removed **or** still works independently | **Automated:** `npm test`, `cargo test`, `ANVIL_E2E=1` arena specs; grep CI job or script for forbidden strings (`buyFeeRoutingEnabled` on Arena, `redeemCharms`, `endSale` in frontend src). --- ## Test plan — attack / abuse vectors | Vector | Test | Expected | |--------|------|----------| | **Wrong env alias** | Set only legacy `VITE_TIMECURVE` to random contract | App fails closed / does not send buys to wrong ABI | | **Stale indexer path** | Point frontend at deprecated `/v1/timecurve/sale-state` after removal | 404 handled — no fake “sale active” UI | | **Open redirect** | New redirects only to same-origin arena routes | No arbitrary URL redirects | | **Historical ABI phishing** | UI never loads retired TimeCurve write ABI for `/arena` | Only `timeArenaReadAbi` / router ABI | --- ## Verification criteria - [ ] CI green across contracts (unchanged), indexer, frontend. - [ ] Manual QA checklist updated — no `/timecurve/arena` TimeCurve-only rows. - [ ] `rg -l 'VITE_TIMECURVE_ADDRESS' frontend scripts` → empty or migration shim with deprecation comment + removal date. - [ ] Indexer README lists canonical Arena HTTP table; timecurve paths marked deprecated/removed. - [ ] Deploy runbook for next mainnet release uses Arena registry fields only. - [ ] Close or link child issues: #243, #263, #256, #264. --- ## Out of scope - Mainnet decommission of deployed TimeCurve **proxy** (onchain artifact may remain forever). - Full CSS/class rename (`timecurve-*` → `arena-*`) — optional follow-up if too large for one PR. - Indexer ingest of `PodiumFunded` / `SeedFunded` / `AdminVaultFunded` — separate issue (buy funding events).
PlasticDigits commented 2026-05-29 08:09:35 +00:00 (Migrated from gitlab.com)

marked as related to #238

marked as related to #238
PlasticDigits commented 2026-05-29 08:09:36 +00:00 (Migrated from gitlab.com)

marked as related to #243

marked as related to #243
PlasticDigits commented 2026-05-29 08:09:37 +00:00 (Migrated from gitlab.com)

marked as related to #263

marked as related to #263
PlasticDigits commented 2026-05-29 08:09:37 +00:00 (Migrated from gitlab.com)

marked as related to #256

marked as related to #256
PlasticDigits commented 2026-05-29 08:09:38 +00:00 (Migrated from gitlab.com)

marked as related to #264

marked as related to #264
PlasticDigits commented 2026-05-29 08:15:04 +00:00 (Migrated from gitlab.com)

mentioned in issue #269

mentioned in issue #269
PlasticDigits commented 2026-05-29 08:15:27 +00:00 (Migrated from gitlab.com)

Remove vesting, presalevesting - no longer needed.
Do not serve historical data from before this update
Fully clean the codebase of the old version.

Remove vesting, presalevesting - no longer needed. Do not serve historical data from before this update Fully clean the codebase of the old version.
PlasticDigits commented 2026-05-29 08:37:40 +00:00 (Migrated from gitlab.com)

mentioned in commit abd8a5d039

mentioned in commit abd8a5d03936d1f9b2d98f0a53d5deeaea9cb06f
PlasticDigits commented 2026-05-29 08:37:40 +00:00 (Migrated from gitlab.com)

mentioned in commit 90dd7c6e46

mentioned in commit 90dd7c6e46ebadc5d3eabe3c0a3646288016ba85
PlasticDigits commented 2026-05-29 08:38:02 +00:00 (Migrated from gitlab.com)

Merged to main (abd8a5d)

Retired TimeCurve v1 product surfaces per issue scope and latest note (remove vesting/presale paths, no legacy indexer HTTP for game state, full Arena-only frontend routing).

What landed

  • Routes: /arena (play), /arena/protocol (AUDIT); /timecurve/* → redirects (referral slugs → /arena/{code})
  • Env: VITE_TIME_ARENA_ADDRESS + vault/registry required; VITE_TIMECURVE_ADDRESS removed from scripts/check-frontend-vite-env.sh and Anvil writers
  • Indexer client: browser uses GET /v1/arena/* only; legacy /v1/timecurve/* and WarBow HTTP stubs return null
  • Removed: TimeCurvePage / timeCurveArena/*, presale vesting UI, platform-usage & WarBow refresh AUDIT sections, public TimeCurve*.json ABIs
  • Docs/skills: INV-FRONTEND-266-* invariants, arena-views.md, play-active-time-arena → /v1/arena/timers

Verification checklist (please confirm)

  • bash scripts/check-frontend-vite-env.sh passes with Arena-only frontend/.env.local
  • Visit /timecurve → /arena; /timecurve/protocol → /arena/protocol
  • /arena buy flow works (DOUB); indexer live buys when VITE_INDEXER_URL set
  • curl $INDEXER/v1/arena/timers and /v1/arena/buys OK (no reliance on /v1/timecurve/*)
  • npm test + npm run build in frontend/ green
  • No VITE_TIMECURVE_ADDRESS in deploy runbooks for next release

@brouie — please verify on staging/mainnet config when you have a moment. Leaving issue open until sign-off.

## Merged to `main` (`abd8a5d`) Retired TimeCurve v1 product surfaces per issue scope and latest note (remove vesting/presale paths, no legacy indexer HTTP for game state, full Arena-only frontend routing). ### What landed - **Routes:** `/arena` (play), `/arena/protocol` (AUDIT); `/timecurve/*` → redirects (referral slugs → `/arena/{code}`) - **Env:** `VITE_TIME_ARENA_ADDRESS` + vault/registry required; `VITE_TIMECURVE_ADDRESS` removed from `scripts/check-frontend-vite-env.sh` and Anvil writers - **Indexer client:** browser uses `GET /v1/arena/*` only; legacy `/v1/timecurve/*` and WarBow HTTP stubs return null - **Removed:** `TimeCurvePage` / `timeCurveArena/*`, presale vesting UI, platform-usage & WarBow refresh AUDIT sections, public `TimeCurve*.json` ABIs - **Docs/skills:** `INV-FRONTEND-266-*` invariants, `arena-views.md`, `play-active-time-arena` → `/v1/arena/timers` ### Verification checklist (please confirm) - [ ] `bash scripts/check-frontend-vite-env.sh` passes with Arena-only `frontend/.env.local` - [ ] Visit `/timecurve` → `/arena`; `/timecurve/protocol` → `/arena/protocol` - [ ] `/arena` buy flow works (DOUB); indexer live buys when `VITE_INDEXER_URL` set - [ ] `curl $INDEXER/v1/arena/timers` and `/v1/arena/buys` OK (no reliance on `/v1/timecurve/*`) - [ ] `npm test` + `npm run build` in `frontend/` green - [ ] No `VITE_TIMECURVE_ADDRESS` in deploy runbooks for next release @brouie — please verify on staging/mainnet config when you have a moment. Leaving issue **open** until sign-off.
PlasticDigits commented 2026-05-30 13:35:06 +00:00 (Migrated from gitlab.com)

mentioned in issue #245

mentioned in issue #245
PlasticDigits commented 2026-06-01 10:51:28 +00:00 (Migrated from gitlab.com)

mentioned in issue #260

mentioned in issue #260
PlasticDigits commented 2026-06-01 13:14:15 +00:00 (Migrated from gitlab.com)

mentioned in issue #277

mentioned in issue #277
ghost1 commented 2026-06-02 13:25:12 +00:00 (Migrated from gitlab.com)

mentioned in commit 725c291a29

mentioned in commit 725c291a29d24f609eaab5ce6c559a832f1af958
PlasticDigits commented 2026-06-02 13:25:53 +00:00 (Migrated from gitlab.com)

mentioned in merge request !399

mentioned in merge request !399
ghost1 commented 2026-06-02 13:30:36 +00:00 (Migrated from gitlab.com)

mentioned in issue #278

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

mentioned in issue #279

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

mentioned in issue #280

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

marked as related to #279

marked as related to #279
PlasticDigits commented 2026-06-02 13:45:19 +00:00 (Migrated from gitlab.com)

marked as related to #280

marked as related to #280
PlasticDigits commented 2026-06-02 13:46:43 +00:00 (Migrated from gitlab.com)

mentioned in commit 62368f0079

mentioned in commit 62368f00797af447a925f26d73605dc52253b916
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-03 11:38:53 +00:00 (Migrated from gitlab.com)

mentioned in merge request !408

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

mentioned in issue #283

mentioned in issue #283
ghost1 commented 2026-06-03 13:29:19 +00:00 (Migrated from gitlab.com)

mentioned in commit ce8befc988

mentioned in commit ce8befc9883a40145301ee1c34fd615eee7b064f
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:30:12 +00:00 (Migrated from gitlab.com)

mentioned in merge request !412

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

Agent verification (#266) — 2026-06-03

Verified TimeCurve v1 retirement on main per issue acceptance criteria and the merged-work checklist in the issue description. One E2E gap was fixed in !412 (draft).

Summary

Area Result
Routes / redirects PASS — /timecurve, /timecurve/arena, /timecurve/protocol, /timecurve/:code → arena equivalents (Playwright)
Env PASS — bash scripts/check-frontend-vite-env.sh with Arena-only .env.local; no VITE_TIMECURVE_ADDRESS in app or Anvil writers
Indexer HTTP PASS — GET /v1/arena/timers + /v1/arena/buys return 200; /v1/timecurve/* returns 404
Frontend PASS — npm test (535), typecheck, lint, build
Contracts src PASS — no TimeCurve / FeeRouter implementations under contracts/src/
Vesting PASS — no /vesting route (per author note)
Indexer smoke PASS — bash scripts/verify-podium-live-anvil.sh
E2E referral paths FAIL → fixed — e2e/referral-path.spec.ts still expected /timecurve/:code URLs; updated in MR !412

How verified

  • glab issue view 266 --comments + invariants INV-FRONTEND-266-*
  • Local Anvil + Postgres (:5433) + indexer (:3101) + Vite (:5173)
  • curl indexer endpoints; Playwright navigation, arena, referral-path specs
  • rg for forbidden env/strings

Follow-ups

  • Product/staging sign-off (@brouie) on live mainnet config
  • Merge !412 for E2E alignment
  • Optional: tidy frontend/public/art/README.md stale TimeCurvePage.tsx references
  • Full ANVIL_E2E=1 bash scripts/e2e-anvil.sh on CI when convenient

Leaving issue open until MR merges and staging sign-off.

## Agent verification (#266) — 2026-06-03 Verified **TimeCurve v1 retirement** on `main` per issue acceptance criteria and the merged-work checklist in the issue description. One E2E gap was fixed in [!412](https://gitlab.com/PlasticDigits/yieldomega/-/merge_requests/42) (draft). ### Summary | Area | Result | |------|--------| | Routes / redirects | **PASS** — `/timecurve`, `/timecurve/arena`, `/timecurve/protocol`, `/timecurve/:code` → arena equivalents (Playwright) | | Env | **PASS** — `bash scripts/check-frontend-vite-env.sh` with Arena-only `.env.local`; no `VITE_TIMECURVE_ADDRESS` in app or Anvil writers | | Indexer HTTP | **PASS** — `GET /v1/arena/timers` + `/v1/arena/buys` return 200; `/v1/timecurve/*` returns **404** | | Frontend | **PASS** — `npm test` (535), `typecheck`, `lint`, `build` | | Contracts src | **PASS** — no `TimeCurve` / `FeeRouter` implementations under `contracts/src/` | | Vesting | **PASS** — no `/vesting` route (per author note) | | Indexer smoke | **PASS** — `bash scripts/verify-podium-live-anvil.sh` | | E2E referral paths | **FAIL → fixed** — `e2e/referral-path.spec.ts` still expected `/timecurve/:code` URLs; updated in MR !412 | ### How verified - `glab issue view 266 --comments` + invariants `INV-FRONTEND-266-*` - Local Anvil + Postgres (:5433) + indexer (:3101) + Vite (:5173) - `curl` indexer endpoints; Playwright `navigation`, `arena`, `referral-path` specs - `rg` for forbidden env/strings ### Follow-ups - Product/staging sign-off (@brouie) on live mainnet config - Merge [!412](https://gitlab.com/PlasticDigits/yieldomega/-/merge_requests/42) for E2E alignment - Optional: tidy `frontend/public/art/README.md` stale `TimeCurvePage.tsx` references - Full `ANVIL_E2E=1 bash scripts/e2e-anvil.sh` on CI when convenient **Leaving issue open** until MR merges and staging sign-off.
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-03 13:41:14 +00:00 (Migrated from gitlab.com)

marked as related to #286

marked as related to #286
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-06-03 13:49:41 +00:00
PlasticDigits commented 2026-06-03 13:49:42 +00:00 (Migrated from gitlab.com)

mentioned in commit d07870d33e

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

mentioned in merge request !418

mentioned in merge request !418
PlasticDigits commented 2026-06-08 08:45:12 +00:00 (Migrated from gitlab.com)

mentioned in commit 1952a8c930

mentioned in commit 1952a8c93056cb1df5b1cae45dd55b91ab53ae04
PlasticDigits commented 2026-06-14 05:45:06 +00:00 (Migrated from gitlab.com)

mentioned in issue #319

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