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, ~255 TimeCurve|FeeRouter token 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

  1. #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 — contradicting arena-v2.md and invariants §260.
  2. Operator / QA safety: Onboarding still requires VITE_FEE_ROUTER_ADDRESS and TimeCurve page smoke — causes failed env checks and wrong-route testing on Arena v2 stacks.
  3. 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)).
  4. Link hygiene: Broken or misleading anchors waste review time; check-doc-anchors.sh only covers invariants-and-business-logic.md#… — satellite links to deleted anchors may still exist.

Constraints and guardrails

  1. Delete, do not duplicate Arena content — same policy as #263 (closed): no docs/testing/archive/ stubs that repeat arena-v2.md.
  2. Keep legitimate historical references only when labeled retired in ≤1 short paragraph + link to #238 (closed) / #243 (closed) / #244 (closed) — not full runbooks.
  3. Preserve Arena v2 cross-links: TimeArena, TimeArenaBuyRouter, GET /v1/arena/*, VITE_TIME_ARENA_ADDRESS, VITE_KUMBAYA_TIME_ARENA_BUY_ROUTER, play skills under skills/.
  4. Keep ReferralRegistry + DoubPresaleVesting docs/tests; strip TimeCurve-attached presale boost / sale semantics only (#263 (closed) constraint 4).
  5. 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.
  6. Env vars: Do not reintroduce VITE_FEE_ROUTER_* in .env.example or operator checklists; VITE_TIMECURVE_ADDRESS may remain as documented legacy alias for e2e only (e2e-anvil.md).
  7. AGPL unchanged; docs-only issue.
  8. Scripts: Deprecate or redirect verify-timecurve-* in docs to verify-time-arena-buy-router-anvil.sh; script deletion is optional separate PR if still wrapped.

Relevant files

Must touch (priority)

Likely touch

Verification / CI


  1. Inventory: rg -l 'TimeCurve|FeeRouter|idx_timecurve|VITE_FEE_ROUTER|redeemCharms|endSale' docs/ skills/ .cursor/ → tier P0 (operator/QA/agent) vs P1 (historical audit).
  2. Rewrite P0 to Arena vocabulary: /arena, TimeArena, GET /v1/arena/*, YIELDOMEGA_TIME_ARENA_ADDRESS, make check-frontend-env checks for arena addresses only.
  3. Delete P1 bodies or replace with one-line “retired — see #243 (closed)/#244 (closed)” + link to arena-v2.md.
  4. QA onboarding: Replace embedded TimeCurve checklist with pointers to manual-qa-checklists.md §260 / Arena play skills.
  5. Indexer design: Single “Arena v2 ingest” section; move any v1 event names to a ≤20-line historical appendix or delete.
  6. Kumbaya doc: Split file — top = Arena v2 (TimeArenaBuyRouter); bottom historical section removed (not moved).
  7. Grep gate in CI (optional): fail if docs/qa/, docs/testing/qa-local-full-stack.md, docs/agent-phases.md contain FeeRouter or TimeCurve.endSale (allowlist invariants negative-test rows and fee-routing “Retired” paragraph).
  8. Cross-link yieldomega-guardrails SKILL and skills/README.md from 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.mdzero matches.
  • rg -l 'TimeCurve|FeeRouter' docs/ count reduced by ≥50% vs baseline (~45 files / ~255 mentions); no file in docs/qa/ or docs/agent-phases.md contains standalone v1 operator instructions.
  • docs/qa/QA-onboarding-gitlab-issue-body.md describes /arena, bots/timearena, and VITE_TIME_ARENA_ADDRESS (not TimeCurve page / FeeRouter panel).
  • docs/indexer/design.md documents idx_arena_* and GET /v1/arena/* only; no GET /v1/timecurve/* as active API.
  • docs/integrations/kumbaya.md has 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.sh or configuring five-sink FeeRouter for current dev deploy.
  • bash scripts/check-doc-anchors.sh still passes; no new broken invariants-and-business-logic.md#… links from edited files.
  • skills/ and .cursor/skills/yieldomega-guardrails/SKILL.md agree 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)

  1. Quantitative: P0 rg gates in acceptance criteria all zero; docs/ TimeCurve|FeeRouter mention count ≤125 (~50% reduction) unless justified in issue close comment.
  2. Qualitative: Reviewer confirms no operator doc presents v1 five-sink routing or sale-end lifecycle as current behavior without a retired label.
  3. Automated: bash scripts/check-doc-anchors.sh passes; if new check-doc-retired-terms.sh added, it passes in CI.
  4. Regression: cd indexer && cargo test and cd frontend && npm test unchanged (docs-only). bash scripts/e2e-anvil.sh passes on clean host (no doc-driven env drift).
  5. Epic linkage: Close comment lists files touched count and any deferred items (e.g. shrinking deployment-guide.md retired block into external archive).