Verification: #65 TimeCurveBuyRouter — live router-set state via DeployKumbayaAnvilFixtures
Follow-up tracker for the live-stack items deferred from #65 source closure on Monday 2026-04-27.
## Background
#65 closed today on source + selective live verification:
- forge test --match-contract TimeCurveBuyRouterTest: 3/3 passing (test_buyViaKumbaya_stable_creditsAlice, test_buyViaKumbaya_eth_creditsAlice, test_buyFor_revertsWhenRouterUnset)
- forge: 191/191 full suite passing
- Live cast confirmed AC2 default state and AC4 unauthorized-call revert on the default stack
- AnvilKumbayaFixture.sol L109 documents walk-from-CL8Y-output direction for multi-hop exactOutput (AC3)
- TimeCurve.sol L344 _buyForExternal gate: require(msg.sender == timeCurveBuyRouter && timeCurveBuyRouter != address(0), 'TimeCurve: not buy router')
## Scope (deferred)
The default scripts/start-local-anvil-stack.sh and contracts/script/anvil_rich_state.sh do NOT call DeployKumbayaAnvilFixtures, so timeCurveBuyRouter remains 0 on a fresh stack. The router-set verification items need that fixtures script run separately.
- [ ] Run DeployKumbayaAnvilFixtures: confirm console logs TimeCurveBuyRouter address (KUMBAYA_BUY_ROUTER per anvil_deploy_dev.sh L13/L59)
- [ ] cast call timeCurveBuyRouter() on TimeCurve proxy returns the deployed router address (not zero)
- [ ] Live USDM two-hop quoteExactOutput sanity: quote for CL8Y←WETH←USDM matches actual exactOutput execution within rounding
- [ ] Live buyViaKumbaya tx via the deployed router: produces Buy event with correct buyer attribution (msg.sender=router, but Buy.buyer=participant)
- [ ] Owner setTimeCurveBuyRouter(address(0)) live: subsequent buyFor reverts with 'TimeCurve: not buy router' even from previously-set router address (re-disable path)
- [ ] Confirm Buy event flagPlanted field correctly mirrors plantWarBowFlag arg passed through buyFor → _buy
## Pre-conditions
- Live Anvil stack on 1bdbda8+
- DeployKumbayaAnvilFixtures executed (manual until / unless folded into start-local-anvil-stack.sh)
- Wallet for participant txs
## Acceptance
All 6 rows produce evidence (cast output, tx hash, or event receipt screenshot) and either PASS or have a filed sub-issue. cc @PlasticDigits
issue