Verification: #55 pause + signoff — post-end gate live walkthrough
Follow-up tracker for items deferred from #55 source + selective live verification on Sunday/Monday. ## Background #55 closed today on cf6fe19 + f2500ec source + selective live verification: - **Source review (Sunday note):** unified _requireSaleInteractionsEnabled at TimeCurve.sol L295 covers both buy and WarBow paths, charmRedemption + reservePodiumPayouts gates wired at L656-657 and prize-distribution path - **Live cast verification (today):** - cast send setBuyFeeRoutingEnabled(false) -> cast call buy(1e18) reverts with exact 'TimeCurve: sale interactions disabled' (matches L295 helper revert string) - cast send setBuyFeeRoutingEnabled(true) -> cast call buy(1e18) reverts past gate with custom error 0xfb8f41b2 ERC20InsufficientAllowance (proves buy logic now reachable) - cast send setBuyFeeRoutingEnabled(false) -> cast call warbowSteal(addr, false) reverts with same exact 'TimeCurve: sale interactions disabled' (proves L295 helper is unified across both buy and WarBow paths via cf6fe19) - **Test pass:** forge 191/191 (includes pause/signoff suite) ## Scope (deferred to follow-up live walkthrough) These items need a stack where ended=true (sale ended state), which the SKIP_ANVIL_RICH_STATE=1 path doesn't produce. anvil_rich_state.sh provides the post-end state. - [ ] charmRedemptionEnabled = false on a post-end stack: redeemCharms reverts with 'TimeCurve: charm redemptions disabled' (gates check is at L657 *after* the L656 ended check; can only be exercised once sale is ended) - [ ] charmRedemptionEnabled flip to true: redeemCharms succeeds for a buyer with non-zero charmWeight - [ ] reservePodiumPayoutsEnabled = false on a post-end stack with non-zero prize pool: distributePrizes reverts with the corresponding gate string - [ ] reservePodiumPayoutsEnabled flip to true: distributePrizes succeeds, prizes flow to podium winners ## Out of scope / explicit non-QA items Per dev framing on #55: - Per-buy CL8Y routing scope (TBD product row) - Rabbit Treasury Pausable as separate ceremony - Implementation child issues per pause-and-final-signoff.md tables These are stakeholder/governance signoffs and TBD product decisions — not QA-actionable in this issue. They should track as separate issues if/when they become concrete. ## Pre-conditions - Live Anvil stack with anvil_rich_state.sh executed (post-end state with ended=true) - Owner private key for setCharmRedemptionEnabled / setReservePodiumPayoutsEnabled toggles - Buyer addresses with non-zero charmWeight from rich-state setup - Optional: at least one prize-eligible address for reservePodiumPayouts side ## Acceptance All 4 rows produce evidence (cast tx hash + revert string or success log) and either PASS or have a filed sub-issue. cc @PlasticDigits
issue