Retire TimeCurve v1 surfaces — routes, indexer aliases, env, and legacy UX #266
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:open_issues
agents
agent:security_audit
agent:verify
area
timecurve
arena
arena-v2
audit
block:feature_review
block:security
bug
contracts
design
devops
docs
documentation
enhancement
epic
feature
frontend
indexer
low priority
megaeth
operations
ops
performance
QA
qa checklist
referrals
removal
security
smart-contracts
tech-debt
testing
time-arena
timecurve
visual-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
code/yieldomega#266
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
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/arenaon 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.TimeCurve.sol,FeeRouter,RabbitTreasury, orLeprechaunincontracts/src/.DeployDev.s.soldeploys Arena stack only.scripts/deploy-megaeth-contracts.sh),DeployProductionreferences, fork tests, public ABIs underfrontend/public/abis/TimeCurve*.json, README mainnet TimeCurve proxy row.Indexer (Arena-primary, TimeCurve-named HTTP)
INV-INDEXER-260-NO-TIMECURVE-DECODE).TimeArena,PodiumVaults,AdminSellVault,ReferralRegistry.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.GET /v1/arena/buys,timers,podium-pool-donations, etc.Frontend (mixed naming and routes)
/(post-launch)TimeArenaPage/arenaTimeCurveSimplePage+ bridge)VITE_TIMECURVE_ADDRESSalias +arenaV2SaleSessionBridge/timecurve/arena/timecurve/arenaTimeCurvePage→useTimeCurveArenaModel(TimeCurve ABI)/timecurve/protocolTimeCurveProtocolPage)/vestingaddresses.ts:timeCurvealias fromVITE_TIMECURVE_ADDRESS??VITE_TIME_ARENA_ADDRESS.TimeCurve*filenames and CSS classes (timecurve-*).VITE_KUMBAYA_TIMECURVE_BUY_ROUTER(TimeCurve-era name).FeeTransparencyalready Arena vault copy whenVITE_TIME_ARENA_ADDRESSset.Docs / ops / skills
docs/operations/deployment-guide.md— still TimeCurve/UUPS/buy-router centric.GET /v1/timecurve/sale-stateas fallback.docs/onchain/fee-routing-and-governance.md— FeeRouter (retired #244).Why this is needed
VITE_TIMECURVE_ADDRESSpointing at an old proxy while/arenausesVITE_TIME_ARENA_ADDRESScan re-enable wrong ABI reads (#264 addresses Advanced view; retirement removes the alias footgun)./v1/timecurve/*and/v1/arena/*APIs duplicate concepts; frontend should consume arena routes only for game state.Constraints and guardrails
/vesting+DoubPresaleVestingonly if product still requires claims on mainnet — otherwise fold into #243 and remove here.TimeArenaeconomics perarena-v2.md.x-schema-versionbump) and documented in deploy runbooks.Relevant files
frontend/src/app/LaunchGate.tsx,RootLayout.tsx,surfaceContent.ts,footerSiteLinks.tsTimeCurveBranchPage.tsx, legacy stake/redemption sections,TimeCurveProtocolDoubProjectionSection.tsx(sale projection)addresses.ts,.env.example,scripts/check-frontend-vite-env.sh,scripts/e2e-anvil.sh,scripts/start-local-anvil-stack.shindexer/src/api.rs,sale_state.rs,api_arena.rs,indexer/README.mdkumbayaRoutes.ts,timeCurveKumbayaSingleTx.tsfrontend/public/abis/TimeCurve*.json,TimeCurveBuyRouter.json(keep only if historical pages remain)indexer/address-registry.megaeth-mainnet.json,scripts/deploy-megaeth-contracts.sh,scripts/write-production-registry-from-broadcast.shdocs/frontend/arena-views.md,docs/integrations/kumbaya.mdfrontend/e2e/timecurve*.spec.ts,timecurve-live-buys-modals.spec.ts— rename or retireRecommended direction
Phase A — Product routes (breaking OK)
/arena(play),/arena/protocolor/protocol(AUDIT) — drop/timecurve/*or 301 to arena equivalents inLaunchGate./timecurve/arenaafter #264 merges Advanced features into shared Arena session or redirect to/arenawith sub-nav query.VITE_TIME_ARENA_ADDRESS(+ vault vars); removeVITE_TIMECURVE_ADDRESSfrom checklists and scripts.Phase B — Indexer HTTP migration
GET /v1/arena/sale-state(or extendGET /v1/arena/timers) with fields Simple session needs; deprecateGET /v1/timecurve/sale-state(410 or redirect doc).platform-usage/ WarBow feed to arena semantics (DOUB spends) or mark deprecated.x-schema-version; document in README.Phase C — Code hygiene
TimeCurveSimplePage→ArenaSimplePage) or one-shot rename PR — team preference; avoid dual names long-term.GET /v1/arena/*only.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
VITE_TIMECURVE_ADDRESS./timecurvepaths redirect or 404 with clear migration note (no empty outlets).timeCurveReadAbifor session state)./v1/arena/*for timers/sale snapshot (not/v1/timecurve/sale-state).scripts/check-frontend-vite-env.shvalidates Arena env only.contracts/srcstays clean ofTimeCurve/FeeRouterimplementations./arenaonly.Test plan — functional paths
/timecurve/arena(or documented redirect)/timecurve/arena/arenaor equivalent Advanced tab/timecurve/protocolmake check-frontend-envwith only Arena varsVITE_TIME_ARENA_*onlyGET /v1/arena/timers+ sale fields/vestingAutomated:
npm test,cargo test,ANVIL_E2E=1arena specs; grep CI job or script for forbidden strings (buyFeeRoutingEnabledon Arena,redeemCharms,endSalein frontend src).Test plan — attack / abuse vectors
VITE_TIMECURVEto random contract/v1/timecurve/sale-stateafter removal/arenatimeArenaReadAbi/ router ABIVerification criteria
/timecurve/arenaTimeCurve-only rows.rg -l 'VITE_TIMECURVE_ADDRESS' frontend scripts→ empty or migration shim with deprecation comment + removal date.Out of scope
timecurve-*→arena-*) — optional follow-up if too large for one PR.PodiumFunded/SeedFunded/AdminVaultFunded— separate issue (buy funding events).marked as related to #238
marked as related to #243
marked as related to #263
marked as related to #256
marked as related to #264
mentioned in issue #269
Remove vesting, presalevesting - no longer needed.
Do not serve historical data from before this update
Fully clean the codebase of the old version.
mentioned in commit
abd8a5d039mentioned in commit
90dd7c6e46Merged 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
/arena(play),/arena/protocol(AUDIT);/timecurve/*→ redirects (referral slugs →/arena/{code})VITE_TIME_ARENA_ADDRESS+ vault/registry required;VITE_TIMECURVE_ADDRESSremoved fromscripts/check-frontend-vite-env.shand Anvil writersGET /v1/arena/*only; legacy/v1/timecurve/*and WarBow HTTP stubs return nullTimeCurvePage/timeCurveArena/*, presale vesting UI, platform-usage & WarBow refresh AUDIT sections, publicTimeCurve*.jsonABIsINV-FRONTEND-266-*invariants,arena-views.md,play-active-time-arena→/v1/arena/timersVerification checklist (please confirm)
bash scripts/check-frontend-vite-env.shpasses with Arena-onlyfrontend/.env.local/timecurve→/arena;/timecurve/protocol→/arena/protocol/arenabuy flow works (DOUB); indexer live buys whenVITE_INDEXER_URLsetcurl $INDEXER/v1/arena/timersand/v1/arena/buysOK (no reliance on/v1/timecurve/*)npm test+npm run buildinfrontend/greenVITE_TIMECURVE_ADDRESSin deploy runbooks for next release@brouie — please verify on staging/mainnet config when you have a moment. Leaving issue open until sign-off.
mentioned in issue #245
mentioned in issue #260
mentioned in issue #277
mentioned in commit
725c291a29mentioned in merge request !399
mentioned in issue #278
mentioned in issue #279
mentioned in issue #280
marked as related to #279
marked as related to #280
mentioned in commit
62368f0079mentioned in issue #282
mentioned in merge request !408
mentioned in issue #283
mentioned in commit
ce8befc988mentioned in issue #284
mentioned in merge request !412
Agent verification (#266) — 2026-06-03
Verified TimeCurve v1 retirement on
mainper issue acceptance criteria and the merged-work checklist in the issue description. One E2E gap was fixed in !412 (draft).Summary
/timecurve,/timecurve/arena,/timecurve/protocol,/timecurve/:code→ arena equivalents (Playwright)bash scripts/check-frontend-vite-env.shwith Arena-only.env.local; noVITE_TIMECURVE_ADDRESSin app or Anvil writersGET /v1/arena/timers+/v1/arena/buysreturn 200;/v1/timecurve/*returns 404npm test(535),typecheck,lint,buildTimeCurve/FeeRouterimplementations undercontracts/src//vestingroute (per author note)bash scripts/verify-podium-live-anvil.she2e/referral-path.spec.tsstill expected/timecurve/:codeURLs; updated in MR !412How verified
glab issue view 266 --comments+ invariantsINV-FRONTEND-266-*curlindexer endpoints; Playwrightnavigation,arena,referral-pathspecsrgfor forbidden env/stringsFollow-ups
frontend/public/art/README.mdstaleTimeCurvePage.tsxreferencesANVIL_E2E=1 bash scripts/e2e-anvil.shon CI when convenientLeaving issue open until MR merges and staging sign-off.
mentioned in issue #286
marked as related to #286
mentioned in commit
d07870d33ementioned in merge request !418
mentioned in commit
1952a8c930mentioned in issue #319