Docs: remove TimeCurve/FeeRouter mentions from satellite docs
Summary
Finish the Arena v2 documentation migration by removing or rewriting stale TimeCurve / FeeRouter / v1 launchpad prose that remains in satellite docs (everything outside the already-trimmed docs/testing/invariants-and-business-logic.md). Parent cleanup: #263 (closed) (bulk invariant deletion + anchor CI). Epic: #238 (closed).
Goal: Operators, QA, agents, and contributors reading docs/, skills/, and .cursor/skills/ must not be instructed to configure, test, or preserve retired v1 economics (TimeCurve.endSale, FeeRouter.distributeFees, idx_timecurve_*, VITE_FEE_ROUTER_*, /timecurve/* QA paths).
Current codebase
Already aligned (do not regress)
| Layer | Arena v2 state |
|---|---|
| Contracts (dev/prod deploy) | DeployDev.s.sol / DeployProduction.s.sol deploy TimeArena + vaults only (#259 (closed)) |
| Indexer | Arena-only decode; GET /v1/arena/*; no TimeCurve* DecodedEvent variants (#260 (closed)) |
| Frontend | Primary route /arena; VITE_TIME_ARENA_ADDRESS (#256 (closed)); .env.example has no VITE_FEE_ROUTER_* |
| Invariant corpus | ~362 lines; TimeArena v2 INV-TIME-ARENA-* table; scripts/check-doc-anchors.sh green (#263 (closed)) |
| Fee routing doc | docs/onchain/fee-routing-and-governance.md rewritten for DOUB 40/30/30 (#244 (closed)) |
| Bots | bots/timearena/ (not bots/timecurve/) (#245 (closed)) |
Stale surface (grep snapshot on main)
docs/: ~45 files, ~255TimeCurve|FeeRoutertoken matches (many are full sections, not one-line cross-links).skills/: 3 files (mostly “legacy removed” notes — verify wording)..cursor/skills/: guardrails already list retired components; confirm no operator steps cite v1 paths.
High-impact offenders (non-exhaustive)
| File | Problem |
|---|---|
docs/qa/QA-onboarding-gitlab-issue-body.md |
Entire onboarding + checklist still TimeCurve page, VITE_TIMECURVE_ADDRESS, VITE_FEE_ROUTER_ADDRESS, bots/timecurve, distributePrizes / five-sink FeeRouter tables |
docs/indexer/design.md |
timecurve_buys, idx_timecurve_*, GET /v1/timecurve/*, WarBow CL8Y / sale-state sections superseded by Arena ingest |
docs/integrations/kumbaya.md |
Large “Legacy TimeCurve product flow” block; TimeCurveBuyRouter live-sale checklist; mixed Arena + v1 operator steps |
docs/onchain/cl8y-flow-audit.md |
CL8Y matrix centered on TimeCurve / FeeRouter public flows (historical audit, not Arena DOUB) |
docs/operations/deployment-guide.md |
Retired v1 deploy block (~60+ mentions) — needs collapsed “historical mainnet snapshot only” pointer or move to docs/operations/archive/ only if product agrees (default: delete per #263 (closed) policy) |
docs/operations/final-signoff-and-value-movement.md |
Post-end gates, verify-timecurve-post-end-gates-anvil.sh |
docs/operations/pause-and-final-signoff.md |
TimeCurve pause / redemption gates |
docs/onchain/security-and-threat-model.md |
FeeRouter / TimeCurve threat rows |
docs/testing/qa-local-full-stack.md |
TimeCurveBuyRouter registry + verify-timecurve-buy-router-anvil.sh |
docs/testing/contract-fork-smoke.md |
TimeCurveForkTest as primary example |
docs/agent-phases.md, docs/agent-implementation-phases.md |
Phase prompts referencing TimeCurve surfaces |
docs/product/vision.md, docs/glossary.md |
TimeCurve as flagship primitive |
docs/frontend/design.md |
Three-route TimeCurve sub-nav |
docs/architecture/repository-layout.md |
Lists TimeCurve in active layout |
scripts/qa/README.md |
“TimeCurve page and fee-router panel” |
Contracts note: TimeCurve.sol / FeeRouter.sol may remain in tree for history/fork tests — out of scope unless doc claims they are deployed on current dev path.
Why this is needed
- #263 (closed) follow-up: Bulk invariant deletion is done; satellite docs still teach v1 sale lifecycle, FeeRouter five-sink splits, and
idx_timecurve_*indexer work — contradictingarena-v2.mdandinvariants§260. - Operator / QA safety: Onboarding still requires
VITE_FEE_ROUTER_ADDRESSand TimeCurve page smoke — causes failed env checks and wrong-route testing on Arena v2 stacks. - Agent automation: Cursor guardrails + play skills point at Arena, but phase docs and QA body pull agents back to
endSale/redeemCharms/ FeeRouter rescue paths (#241 (closed)–#244 (closed)). - Link hygiene: Broken or misleading anchors waste review time;
check-doc-anchors.shonly coversinvariants-and-business-logic.md#…— satellite links to deleted anchors may still exist.
Constraints and guardrails
- Delete, do not duplicate Arena content — same policy as #263 (closed): no
docs/testing/archive/stubs that repeatarena-v2.md. - Keep legitimate historical references only when labeled retired in ≤1 short paragraph + link to #238 (closed) / #243 (closed) / #244 (closed) — not full runbooks.
- Preserve Arena v2 cross-links:
TimeArena,TimeArenaBuyRouter,GET /v1/arena/*,VITE_TIME_ARENA_ADDRESS,VITE_KUMBAYA_TIME_ARENA_BUY_ROUTER, play skills underskills/. - Keep ReferralRegistry + DoubPresaleVesting docs/tests; strip TimeCurve-attached presale boost / sale semantics only (#263 (closed) constraint 4).
- MegaETH mainnet snapshot: If retaining a minimal “legacy mainnet addresses” note in ops docs, it must not read as the active deploy path — point to #259 (closed) Arena redeploy.
- Env vars: Do not reintroduce
VITE_FEE_ROUTER_*in.env.exampleor operator checklists;VITE_TIMECURVE_ADDRESSmay remain as documented legacy alias for e2e only (e2e-anvil.md). - AGPL unchanged; docs-only issue.
- Scripts: Deprecate or redirect
verify-timecurve-*in docs toverify-time-arena-buy-router-anvil.sh; script deletion is optional separate PR if still wrapped.
Relevant files
Must touch (priority)
docs/qa/QA-onboarding-gitlab-issue-body.md— rewrite for/arena,bots/timearena, Arena env varsdocs/indexer/design.md— Arena tables/routes onlydocs/integrations/kumbaya.md— Arena-first; delete legacy TimeCurve flow sectiondocs/testing/qa-local-full-stack.mddocs/onchain/cl8y-flow-audit.md— relocate to “historical v1 CL8Y” or trimdocs/operations/final-signoff-and-value-movement.mddocs/operations/pause-and-final-signoff.mddocs/onchain/security-and-threat-model.mddocs/agent-phases.md,docs/agent-implementation-phases.mddocs/product/vision.md,docs/glossary.mddocs/frontend/design.mddocs/architecture/repository-layout.md,docs/architecture/data-flows.mddocs/testing/contract-fork-smoke.mdscripts/qa/README.md
Likely touch
docs/operations/deployment-guide.md— collapse retired v1 blockdocs/operations/stage2-run-log.md,docs/operations/stage3-mainnet-operator-runbook.mddocs/product/referrals.md,docs/product/primitives.md— remove TimeCurve-only anchorsdocs/testing/ci.md,docs/testing/local-swap-testing.mddocs/README.md,docs/contracts/foundry-and-megaeth.mdskills/README.md, play skills — ensure zeroplay-timecurve-*resurrection
Verification / CI
- Extend
scripts/check-doc-anchors.shor addscripts/check-doc-retired-terms.shfor operator-facing paths (see acceptance criteria) docs/testing/strategy.md— document new grep gates
Recommended solution direction
- Inventory:
rg -l 'TimeCurve|FeeRouter|idx_timecurve|VITE_FEE_ROUTER|redeemCharms|endSale' docs/ skills/ .cursor/→ tier P0 (operator/QA/agent) vs P1 (historical audit). - Rewrite P0 to Arena vocabulary:
/arena,TimeArena,GET /v1/arena/*,YIELDOMEGA_TIME_ARENA_ADDRESS,make check-frontend-envchecks for arena addresses only. - Delete P1 bodies or replace with one-line “retired — see #243 (closed)/#244 (closed)” + link to
arena-v2.md. - QA onboarding: Replace embedded TimeCurve checklist with pointers to
manual-qa-checklists.md§260 / Arena play skills. - Indexer design: Single “Arena v2 ingest” section; move any v1 event names to a ≤20-line historical appendix or delete.
- Kumbaya doc: Split file — top = Arena v2 (
TimeArenaBuyRouter); bottom historical section removed (not moved). - Grep gate in CI (optional): fail if
docs/qa/,docs/testing/qa-local-full-stack.md,docs/agent-phases.mdcontainFeeRouterorTimeCurve.endSale(allowlistinvariantsnegative-test rows andfee-routing“Retired” paragraph). - Cross-link
yieldomega-guardrailsSKILL andskills/README.mdfrom updated onboarding.
Acceptance criteria
-
rg 'VITE_FEE_ROUTER|FeeRouter\.distributeFees|TimeCurve\.endSale|redeemCharms|idx_timecurve' docs/qa/ docs/testing/qa-local-full-stack.md docs/agent-phases.md docs/agent-implementation-phases.md→ zero matches. -
rg -l 'TimeCurve|FeeRouter' docs/count reduced by ≥50% vs baseline (~45 files / ~255 mentions); no file indocs/qa/ordocs/agent-phases.mdcontains standalone v1 operator instructions. -
docs/qa/QA-onboarding-gitlab-issue-body.mddescribes/arena,bots/timearena, andVITE_TIME_ARENA_ADDRESS(not TimeCurve page / FeeRouter panel). -
docs/indexer/design.mddocumentsidx_arena_*andGET /v1/arena/*only; noGET /v1/timecurve/*as active API. -
docs/integrations/kumbaya.mdhas no “Legacy TimeCurve product flow” section longer than a one-line retired pointer. - Operator-facing docs do not instruct running
verify-timecurve-post-end-gates-anvil.shor configuring five-sink FeeRouter for current dev deploy. -
bash scripts/check-doc-anchors.shstill passes; no new brokeninvariants-and-business-logic.md#…links from edited files. -
skills/and.cursor/skills/yieldomega-guardrails/SKILL.mdagree with post-edit doc map.
Test plan — documentation paths
| Path | Steps | Expected |
|---|---|---|
| P0 grep gate | Run acceptance rg commands from repo root |
Zero hits in operator/agent paths |
| QA onboarding dry-run | New engineer follows updated QA body on Anvil stack | Lands on /arena, make check-frontend-env passes without FeeRouter vars |
| Agent smoke | Cursor agent with guardrails asked “how do I run local QA?” | Cites start-qa-local-full-stack.sh, /arena, bots/timearena — not TimeCurve page |
| Indexer doc vs code | Compare design.md to indexer/src/decoder.rs + api_arena.rs |
Documented tables/routes match Arena-only code |
| Kumbaya E2E doc | Follow e2e-anvil.md + kumbaya.md |
ETH pay uses TimeArenaBuyRouter; no live-sale TimeCurve.ended() prerequisite |
| Link crawl | rg 'invariants-and-business-logic\.md#' docs/ + sample GitLab render |
No dead anchors |
| Skills index | Read skills/README.md |
Only play-*-time-arena* play skills |
Test plan — misuse / abuse vectors (doc integrity)
| Vector | Risk | Test |
|---|---|---|
| Revived FeeRouter env | Operator sets VITE_FEE_ROUTER_* from QA body |
rg 'VITE_FEE_ROUTER' docs/qa docs/testing/qa-local-full-stack.md → zero |
| Wrong-route QA | QA tests /timecurve or “TimeCurve page” instead of /arena |
Updated QA body checklist requires /arena mount |
| Indexer regression doc | Contributor re-adds idx_timecurve_buy tasks |
design.md grep idx_timecurve → zero or historical appendix only |
| Sale-end harness | Someone runs post-end gate script from ops doc | `rg 'post-end-gates |
| Agent phase drift | Phase prompts reference TimeCurve.t.sol for arena economics |
agent-phases.md cites TimeArena.t.sol / anvil-arena-* |
| Partial edit | File header says Arena v2 but body still FeeRouter tables | Full-file read of P0 files |
| Broken cross-links | Skills point at deleted doc anchors | check-doc-anchors.sh + manual skills link check |
Verification criteria (definition of done)
- Quantitative: P0
rggates in acceptance criteria all zero;docs/TimeCurve|FeeRoutermention count ≤125 (~50% reduction) unless justified in issue close comment. - Qualitative: Reviewer confirms no operator doc presents v1 five-sink routing or sale-end lifecycle as current behavior without a retired label.
- Automated:
bash scripts/check-doc-anchors.shpasses; if newcheck-doc-retired-terms.shadded, it passes in CI. - Regression:
cd indexer && cargo testandcd frontend && npm testunchanged (docs-only).bash scripts/e2e-anvil.shpasses on clean host (no doc-driven env drift). - Epic linkage: Close comment lists files touched count and any deferred items (e.g. shrinking
deployment-guide.mdretired block into external archive).
Related
- Parent: #263 (closed)
- Epic: #238 (closed)
- Retired stacks: #243 (closed), #244 (closed)
- Arena deploy: #259 (closed)