Play-route transition state model and UX (#343) #519
No reviewers
Labels
No labels
agent:fix_bugfix
agent:fix_conflicts
agent:fix_security
agent:gap_analysis
agent:implement
agent:open_issues
agents
agent:security_audit
agent:verify
area
timecurve
arena
arena-v2
audit
block:feature_review
block:security
bug
contracts
design
devops
docs
documentation
enhancement
epic
feature
frontend
indexer
low priority
megaeth
operations
ops
performance
QA
qa checklist
referrals
removal
security
smart-contracts
tech-debt
testing
time-arena
timecurve
visual-qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
code/yieldomega!519
Loading…
Reference in a new issue
No description provided.
Delete branch "issue-343-play-route-transition-ux"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Implements GitLab #343 — play-route podium transition state model and UX for
/:live,unarmed,expired-pending-roll,settling,epoch-advanced,syncing) derived from indexerGET /v1/arena/timers+ podium epochs (#344 ingest lag).chainNowSecwall-vs-chain skew fromuseArenaHeroTimer(extractedarenaChainNow.ts) — no more splitblock_timestamp_secanchors between polls.aria-busy(not a silent frozen00:00); optional permissionlessrollPodiumEpochCTA behindChainMismatchWriteBarrier.INV-FRONTEND-343-TRANSITION-UX.Acceptance checklist
arenaTransitionState.test.ts(expired-pending-roll / settling / live)chainNowSecskewarenaChainNow.test.ts,indexerFirstDisplay.test.ts,ArenaTimerChips.test.tsxarena-views.mdindexerFirstDisplay.test.ts(unchanged indexer-first guards)data-testidhooks for settling / pending-rollarena-timer-expired-pending-roll,arena-timer-settling,arena-timer-epoch-advanced,arena-podium-roll-ctacd frontend && npm run typecheck && npm run lint && npm testThird-party verification
cd frontend && npm run typecheck && npm run lint && npm testbash scripts/start-qa-local-full-stack.sh --no-swarm --no-frontendcd frontend && npm run dev— openhttp://127.0.0.1:5173/cast rpc anvil_increaseTime …or buy until expiry)data-testid="arena-timer-expired-pending-roll") and optional Roll epoch CTA00:00and chip timer during expiry)Related: #342 (parent gap analysis). E2E transition spec remains sibling follow-up.
Security review — MR !519
Commit reviewed:
e05dae569dcc9e0c4f67fcf44966a371854fe7e4(base2b5d0240)Scope: Play-route podium transition state model (
arenaTransitionState.ts,arenaChainNow.ts,usePodiumEpochLatch.ts), hero/chip timer UX wiring, and new permissionlessrollPodiumEpochCTA (ArenaPodiumRollCta.tsx). Docs/tests/invariant rows only — no indexer, contract, or dependency changes in this diff.Method: Traced indexer-sourced fields (
podium_deadlines_sec,last_buy_deadline_sec,indexed_through_block,read_block_number,podium_epochs) through the pure derivation layer to UI sinks and the wagmi write path; verified on-chainTimeArena.rollPodiumEpochenforcescategory < NUM_PODIUM_CATEGORIESandblock.timestamp > podiumDeadline[category]withnonReentrant. Checked prior MR discussion threads (none).Outcome:
FINDINGS: 0medium+Inline threads: none
Notes (informational, below reporting threshold)
ArenaPodiumRollCta:contractIndexis sourced from static carousel slot constants (0–3), gated byChainMismatchWriteBarrier, wallet-connected check, andsession.arenaPaused. On-chain guards reject early rolls and out-of-range categories; a compromised indexer can at worst prompt a reverting tx (gas grief), consistent with the existing indexer-first display trust model (INV-FRONTEND-301).isSuspiciousDeadline: Corrupt/malicious far-future deadlines degrade tosyncingrather than inflated live countdowns — defensive, not exploitable.TimeArena.rollPodiumEpoch; this MR only surfaces an optional user-initiated write.Security review: no medium+ findings on this diff.
mentioned in commit
304744cae2