Remove: TimeCurve launchpad sale-end, redemption, presale, LP seed flows #243

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

Context

Remove TimeCurve launchpad sale-end, redemption, presale, and LP seed flows. Parent epic: #238.

Relevant files

  • contracts/src/TimeCurve.sol — endSale, redeemCharms, distributePrizes, LinearCharmPrice, MAX_SALE_ELAPSED_SEC, presale hooks
  • contracts/src/pricing/LinearCharmPrice.sol
  • contracts/src/vesting/DoubPresaleVesting.sol, PresaleCharmBeneficiaryRegistry.sol
  • contracts/src/sinks/DoubLPIncentives.sol
  • frontend/src/pages/timecurve/TimeCurveStakeAtLaunchSection.tsx
  • frontend/src/pages/PresaleVestingPage.tsx or /vesting route
  • docs/operations/final-signoff-and-value-movement.md

Acceptance criteria

  • No saleEnded / redeemCharms / distributePrizes / linear price schedule in v2
  • Presale vesting pages and env vars removed
  • LaunchGate/home launchpad copy replaced with arena entry (frontend/src/lib/surfaceContent.ts)

Verification checklist

  • Grep clean for redeemCharms, endSale, LinearCharmPrice, launchLiquidityAnchor
  • No /vesting route in production build
## Context Remove TimeCurve launchpad sale-end, redemption, presale, and LP seed flows. Parent epic: #238. ## Relevant files - `contracts/src/TimeCurve.sol` — `endSale`, `redeemCharms`, `distributePrizes`, `LinearCharmPrice`, `MAX_SALE_ELAPSED_SEC`, presale hooks - `contracts/src/pricing/LinearCharmPrice.sol` - `contracts/src/vesting/DoubPresaleVesting.sol`, `PresaleCharmBeneficiaryRegistry.sol` - `contracts/src/sinks/DoubLPIncentives.sol` - `frontend/src/pages/timecurve/TimeCurveStakeAtLaunchSection.tsx` - `frontend/src/pages/PresaleVestingPage.tsx` or `/vesting` route - `docs/operations/final-signoff-and-value-movement.md` ## Acceptance criteria - [ ] No `saleEnded` / `redeemCharms` / `distributePrizes` / linear price schedule in v2 - [ ] Presale vesting pages and env vars removed - [ ] LaunchGate/home launchpad copy replaced with arena entry (`frontend/src/lib/surfaceContent.ts`) ## Verification checklist - [ ] Grep clean for `redeemCharms`, `endSale`, `LinearCharmPrice`, `launchLiquidityAnchor` - [ ] No `/vesting` route in production build
PlasticDigits commented 2026-05-27 07:07:02 +00:00 (Migrated from gitlab.com)

marked as related to #238

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

mentioned in issue #238

mentioned in issue #238
PlasticDigits commented 2026-05-28 12:43:16 +00:00 (Migrated from gitlab.com)

Implementation complete

What we did

  • Removed TimeCurve.sol and launchpad lifecycle: no endSale, redeemCharms, distributePrizes, LinearCharmPrice, presale vesting, MAX_SALE_ELAPSED_SEC, sale scheduling
  • Replaced core buy path with TimeArena (DOUB-priced, always-on / paused, Last Buy timer)
  • Frontend: removed /vesting, PresaleVestingPage, TimeCurveStakeAtLaunchSection; home card → Time Arena in surfaceContent.ts
  • Indexer: sale_state trimmed to arena fields (deadline_sec, total_doub_raised, paused) polling TimeArena
  • launchplan-timecurve.md marked superseded; WarBow CL8Y removed (follow-up #252)

Acceptance criteria for closing

  • No saleEnded / redeemCharms / distributePrizes / linear price schedule in v2 contracts
  • Presale vesting pages and env vars removed from frontend .env.example
  • Launch/home copy points to arena entry

Verification checklist

  • Grep redeemCharms|endSale|LinearCharmPrice|launchLiquidityAnchor — zero in contracts/src (some frontend may still reference legacy ABI until #256)
  • No /vesting route in app routes
  • TimeArena.t.sol buy + timer tests pass on Anvil-shaped deploy
## Implementation complete ### What we did - Removed `TimeCurve.sol` and launchpad lifecycle: no `endSale`, `redeemCharms`, `distributePrizes`, `LinearCharmPrice`, presale vesting, `MAX_SALE_ELAPSED_SEC`, sale scheduling - Replaced core buy path with `TimeArena` (DOUB-priced, always-on / `paused`, Last Buy timer) - Frontend: removed `/vesting`, `PresaleVestingPage`, `TimeCurveStakeAtLaunchSection`; home card → **Time Arena** in `surfaceContent.ts` - Indexer: `sale_state` trimmed to arena fields (`deadline_sec`, `total_doub_raised`, `paused`) polling `TimeArena` - `launchplan-timecurve.md` marked superseded; WarBow CL8Y removed (follow-up #252) ### Acceptance criteria for closing - [x] No `saleEnded` / `redeemCharms` / `distributePrizes` / linear price schedule in v2 contracts - [x] Presale vesting pages and env vars removed from frontend `.env.example` - [x] Launch/home copy points to arena entry ### Verification checklist - [ ] Grep `redeemCharms|endSale|LinearCharmPrice|launchLiquidityAnchor` — zero in `contracts/src` (some frontend may still reference legacy ABI until #256) - [x] No `/vesting` route in app routes - [x] `TimeArena.t.sol` buy + timer tests pass on Anvil-shaped deploy
PlasticDigits commented 2026-05-29 03:24:02 +00:00 (Migrated from gitlab.com)

mentioned in issue #263

mentioned in issue #263
PlasticDigits commented 2026-05-29 08:06:25 +00:00 (Migrated from gitlab.com)

mentioned in issue #264

mentioned in issue #264
PlasticDigits commented 2026-05-29 08:09:36 +00:00 (Migrated from gitlab.com)

marked as related to #266

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

mentioned in issue #266

mentioned in issue #266
PlasticDigits commented 2026-05-30 13:34:02 +00:00 (Migrated from gitlab.com)

mentioned in commit 597a889a5b

mentioned in commit 597a889a5b73315235b530f8b064c805c110219d
PlasticDigits commented 2026-05-30 13:34:09 +00:00 (Migrated from gitlab.com)

Verification complete (agent, worktree issue/243-timecurve-removal)

Verified TimeCurve launchpad sale-end, redemption, presale, and LP-seed removal against issue acceptance criteria. Merged verification/doc touch-ups to main (392a099).

What was verified

  • contracts/src grep clean for redeemCharms, endSale, LinearCharmPrice, launchLiquidityAnchor — no matches; TimeCurve.sol, presale vesting contracts, and DoubLPIncentives absent from tree
  • No /vesting route — LaunchGate.tsx has no vesting surface; production build has no /vesting path string; browser shows branded 404 at /vesting
  • TimeArena.t.sol — 40 tests pass (buy, timer, CRED, XP, WarBow, podium top-up)
  • Presale UI removed — no PresaleVestingPage, no presale env vars in frontend/.env.example
  • Home → Arena entry — HOME_SURFACE_CARDS[0].to is /arena (was /timecurve redirect); unit test added
  • Visual QA — local frontend on Anvil: home card “Time Arena”, /arena mounts BUY/AUDIT + timer/podiums; /timecurve still redirects to /arena

Doc / invariant updates (this pass)

Known non-blockers (out of scope for #243)

  • Frontend legacy ABI strings (redeemCharms in agent card / session bridge) remain until frontend cleanup #256
  • Historical ops/audit docs still mention v1 TimeCurve for archaeology
  • GET /v1/arena/timers returned chain_timer_unavailable on this stack while /v1/status showed ingestion live — infra poll state, not a launchpad-lifecycle regression; did not restart infra per instructions

Manual re-check checklist

  • rg 'redeemCharms|endSale|LinearCharmPrice|launchLiquidityAnchor' contracts/src → empty
  • rg 'PresaleVestingPage|path.*vesting' frontend/src → empty (route-level)
  • cd contracts && forge test --match-contract TimeArena → green
  • cd frontend && npm run build → no /vesting in dist/
  • Browser: /vesting → 404; / home card → /arena; /timecurve → redirect /arena
  • frontend/.env.example has arena addresses only (no VITE_DOUB_PRESALE_VESTING_*)

All acceptance criteria from the issue body and prior implementation comment pass. Closing.

## Verification complete (agent, worktree `issue/243-timecurve-removal`) Verified TimeCurve launchpad sale-end, redemption, presale, and LP-seed removal against issue acceptance criteria. Merged verification/doc touch-ups to `main` (`392a099`). ### What was verified - **`contracts/src` grep clean** for `redeemCharms`, `endSale`, `LinearCharmPrice`, `launchLiquidityAnchor` — no matches; `TimeCurve.sol`, presale vesting contracts, and `DoubLPIncentives` absent from tree - **No `/vesting` route** — `LaunchGate.tsx` has no vesting surface; production build has no `/vesting` path string; browser shows branded 404 at `/vesting` - **`TimeArena.t.sol`** — 40 tests pass (buy, timer, CRED, XP, WarBow, podium top-up) - **Presale UI removed** — no `PresaleVestingPage`, no presale env vars in `frontend/.env.example` - **Home → Arena entry** — `HOME_SURFACE_CARDS[0].to` is `/arena` (was `/timecurve` redirect); unit test added - **Visual QA** — local frontend on Anvil: home card “Time Arena”, `/arena` mounts BUY/AUDIT + timer/podiums; `/timecurve` still redirects to `/arena` ### Doc / invariant updates (this pass) - **`INV-REMOVAL-243-NO-LAUNCHPAD-LIFECYCLE`** in [`docs/testing/invariants-and-business-logic.md`](docs/testing/invariants-and-business-logic.md) - Superseded banner on [`docs/operations/final-signoff-and-value-movement.md`](docs/operations/final-signoff-and-value-movement.md) → Arena v2 / `#243` - Glossary crosslink → [`arena-v2.md`](docs/product/arena-v2.md) - Removed stale `/vesting` from `INV-FRONTEND-95` / `INV-FRONTEND-223` - Play skills already note no v1 `endSale` gates ([#243](skills/script-with-timecurve-local/SKILL.md)) ### Known non-blockers (out of scope for #243) - Frontend legacy ABI strings (`redeemCharms` in agent card / session bridge) remain until frontend cleanup **#256** - Historical ops/audit docs still mention v1 TimeCurve for archaeology - `GET /v1/arena/timers` returned `chain_timer_unavailable` on this stack while `/v1/status` showed ingestion live — infra poll state, not a launchpad-lifecycle regression; did **not** restart infra per instructions ### Manual re-check checklist - [ ] `rg 'redeemCharms|endSale|LinearCharmPrice|launchLiquidityAnchor' contracts/src` → empty - [ ] `rg 'PresaleVestingPage|path.*vesting' frontend/src` → empty (route-level) - [ ] `cd contracts && forge test --match-contract TimeArena` → green - [ ] `cd frontend && npm run build` → no `/vesting` in `dist/` - [ ] Browser: `/vesting` → 404; `/` home card → `/arena`; `/timecurve` → redirect `/arena` - [ ] `frontend/.env.example` has arena addresses only (no `VITE_DOUB_PRESALE_VESTING_*`) All acceptance criteria from the issue body and prior implementation comment pass. Closing.
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-05-30 13:34:13 +00:00
PlasticDigits commented 2026-06-01 10:48:22 +00:00 (Migrated from gitlab.com)

mentioned in issue #274

mentioned in issue #274
PlasticDigits commented 2026-06-01 12:28:49 +00:00 (Migrated from gitlab.com)

mentioned in issue #276

mentioned in issue #276
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-13 07:34:27 +00:00 (Migrated from gitlab.com)

mentioned in issue #319

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

mentioned in merge request !472

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