Transition E2E: epoch roll, leaderboard refresh, claim state (#350) #526

Merged
PlasticDigits merged 1 commit from issue-350-transition-e2e into main 2026-06-26 10:53:00 +00:00
PlasticDigits commented 2026-06-26 09:11:06 +00:00 (Migrated from gitlab.com)

Summary

Adds indexer-first Playwright E2E coverage for gap-analysis #342 P2 #10 (#350):

  • New frontend/e2e/anvil-arena-06-transitions.spec.ts — Time Booster timer expiry → rollPodiumEpoch → epoch increment + cleared leaderboard; Last Buy hard reset → claim-ready arena-charm-cred-claim.
  • Shared on-chain helpers in arenaE2eHelpers.ts (warp past podium deadline, roll epoch, indexer sync waits, level-2 cast setup).
  • Documents INV-FRONTEND-342-TRANSITION-E2E in invariants + docs/testing/e2e-anvil.md; cross-link in skills/play-active-time-arena/SKILL.md.

Picked up automatically by e2e/anvil-arena-*.spec.ts when YIELDOMEGA_E2E_INDEXER=1.

Acceptance checklist

Criterion Command / step Result
New E2E spec passes with indexer-first mode YIELDOMEGA_E2E_INDEXER=1 YIELDOMEGA_DEPLOY_NO_COOLDOWN=1 PLAYWRIGHT_SPECS="e2e/anvil-arena-06-transitions.spec.ts" bash scripts/e2e-anvil.sh PASS (1 passed, 17.4s)
Covers epoch roll visibility (epoch / settling UX) Spec asserts arena-timer-expired-pending-roll or arena-timer-settling, roll CTA, post-roll EPOCH 1 corner PASS
CI/docs reference command docs/testing/e2e-anvil.md §350 + INV-FRONTEND-342-TRANSITION-E2E PASS
5 workers documented cd frontend && CI=1 npm run test:e2e -- --workers=5 e2e/anvil-arena-06-transitions.spec.ts (after stack up) PASS (doc); Anvil harness uses workers: 1 per #87

Verification checklist (third parties)

  1. bash scripts/bootstrap-cloud-postgres-native.sh && bash scripts/verify-cloud-postgres.sh
  2. YIELDOMEGA_E2E_INDEXER=1 YIELDOMEGA_DEPLOY_NO_COOLDOWN=1 bash scripts/e2e-anvil.sh — full indexer-first Anvil suite including new spec
  3. Spec only (stack already running): cd frontend && CI=1 npm run test:e2e -- --workers=5 e2e/anvil-arena-06-transitions.spec.ts
  4. Stack smoke: bash scripts/verify-podium-live-anvil.sh — PASS
  5. cd frontend && npm run typecheck && npm run lint — PASS

Blockers

None.

## Summary Adds indexer-first Playwright E2E coverage for gap-analysis [#342](https://gitlab.com/PlasticDigits/yieldomega/-/issues/342) P2 #10 ([#350](https://gitlab.com/PlasticDigits/yieldomega/-/issues/350)): - New `frontend/e2e/anvil-arena-06-transitions.spec.ts` — Time Booster timer expiry → `rollPodiumEpoch` → epoch increment + cleared leaderboard; Last Buy hard reset → claim-ready `arena-charm-cred-claim`. - Shared on-chain helpers in `arenaE2eHelpers.ts` (warp past podium deadline, roll epoch, indexer sync waits, level-2 cast setup). - Documents **`INV-FRONTEND-342-TRANSITION-E2E`** in invariants + `docs/testing/e2e-anvil.md`; cross-link in `skills/play-active-time-arena/SKILL.md`. Picked up automatically by `e2e/anvil-arena-*.spec.ts` when `YIELDOMEGA_E2E_INDEXER=1`. ## Acceptance checklist | Criterion | Command / step | Result | |-----------|----------------|--------| | New E2E spec passes with indexer-first mode | `YIELDOMEGA_E2E_INDEXER=1 YIELDOMEGA_DEPLOY_NO_COOLDOWN=1 PLAYWRIGHT_SPECS="e2e/anvil-arena-06-transitions.spec.ts" bash scripts/e2e-anvil.sh` | **PASS** (1 passed, 17.4s) | | Covers epoch roll visibility (epoch / settling UX) | Spec asserts `arena-timer-expired-pending-roll` or `arena-timer-settling`, roll CTA, post-roll `EPOCH 1` corner | **PASS** | | CI/docs reference command | `docs/testing/e2e-anvil.md` §350 + `INV-FRONTEND-342-TRANSITION-E2E` | **PASS** | | 5 workers documented | `cd frontend && CI=1 npm run test:e2e -- --workers=5 e2e/anvil-arena-06-transitions.spec.ts` (after stack up) | **PASS** (doc); Anvil harness uses `workers: 1` per #87 | ## Verification checklist (third parties) 1. `bash scripts/bootstrap-cloud-postgres-native.sh && bash scripts/verify-cloud-postgres.sh` 2. `YIELDOMEGA_E2E_INDEXER=1 YIELDOMEGA_DEPLOY_NO_COOLDOWN=1 bash scripts/e2e-anvil.sh` — full indexer-first Anvil suite including new spec 3. Spec only (stack already running): `cd frontend && CI=1 npm run test:e2e -- --workers=5 e2e/anvil-arena-06-transitions.spec.ts` 4. Stack smoke: `bash scripts/verify-podium-live-anvil.sh` — **PASS** 5. `cd frontend && npm run typecheck && npm run lint` — **PASS** ## Blockers None.
PlasticDigits commented 2026-06-26 09:13:11 +00:00 (Migrated from gitlab.com)

Security review — MR !526

Commit reviewed: a73b57751864684921e1f64d690f72070e85f895

Scope: Transition E2E for podium epoch roll, leaderboard refresh, and claim-ready state (#350).

Files in diff:

  • frontend/e2e/anvil-arena-06-transitions.spec.ts (new Playwright spec)
  • frontend/e2e/arenaE2eHelpers.ts (Anvil cast/RPC/indexer poll helpers, level-up dismiss)
  • docs/testing/e2e-anvil.md, docs/testing/invariants-and-business-logic.md, skills/play-active-time-arena/SKILL.md (documentation only)

Outcome: FINDINGS: 0 medium+

Summary: Security review: no medium+ findings on this diff.

No smart-contract, indexer API, or production frontend (src/) changes are included. Added code is Playwright E2E harness code gated by ANVIL_E2E=1 and ANVIL_E2E_INDEXER=1, running only against local Anvil + indexer in CI/dev.

Reviewed attack surfaces (none exploitable at medium+ severity):

Area Assessment
EVM / on-chain Helpers call rollPodiumEpoch, buy, and Anvil time-warp via local RPC against a dev-only Anvil instance with unlocked Foundry account #0. No production chain exposure.
execSync / shell (anvilCastCall, anvilCastSend) Contract addresses and RPC URL come from stack-managed env (VITE_* written by e2e-anvil.sh). Call-site args are test constants or numeric indices. Attacker would need CI/env compromise — outside application trust boundary; test-only code not shipped to users.
SSRF (fetch to VITE_RPC_URL / VITE_INDEXER_URL) Same dev-harness trust model; defaults to 127.0.0.1. No user-controlled URL composition.
Authn/authz, SQL, XSS, secrets Not applicable — no production service or UI logic changed.
Prior inline threads None (first security review on this MR).

Inline findings: none posted (zero medium+ issues).

## Security review — MR !526 **Commit reviewed:** `a73b57751864684921e1f64d690f72070e85f895` **Scope:** Transition E2E for podium epoch roll, leaderboard refresh, and claim-ready state ([#350](https://gitlab.com/PlasticDigits/yieldomega/-/issues/350)). **Files in diff:** - `frontend/e2e/anvil-arena-06-transitions.spec.ts` (new Playwright spec) - `frontend/e2e/arenaE2eHelpers.ts` (Anvil cast/RPC/indexer poll helpers, level-up dismiss) - `docs/testing/e2e-anvil.md`, `docs/testing/invariants-and-business-logic.md`, `skills/play-active-time-arena/SKILL.md` (documentation only) **Outcome:** `FINDINGS: 0` medium+ **Summary:** Security review: no medium+ findings on this diff. No smart-contract, indexer API, or production frontend (`src/`) changes are included. Added code is Playwright E2E harness code gated by `ANVIL_E2E=1` and `ANVIL_E2E_INDEXER=1`, running only against local Anvil + indexer in CI/dev. **Reviewed attack surfaces (none exploitable at medium+ severity):** | Area | Assessment | |------|------------| | EVM / on-chain | Helpers call `rollPodiumEpoch`, `buy`, and Anvil time-warp via local RPC against a dev-only Anvil instance with unlocked Foundry account #0. No production chain exposure. | | `execSync` / shell (`anvilCastCall`, `anvilCastSend`) | Contract addresses and RPC URL come from stack-managed env (`VITE_*` written by `e2e-anvil.sh`). Call-site args are test constants or numeric indices. Attacker would need CI/env compromise — outside application trust boundary; test-only code not shipped to users. | | SSRF (`fetch` to `VITE_RPC_URL` / `VITE_INDEXER_URL`) | Same dev-harness trust model; defaults to `127.0.0.1`. No user-controlled URL composition. | | Authn/authz, SQL, XSS, secrets | Not applicable — no production service or UI logic changed. | | Prior inline threads | None (first security review on this MR). | **Inline findings:** none posted (zero medium+ issues).
PlasticDigits (Migrated from gitlab.com) merged commit 1a4150f4af into main 2026-06-26 10:53:00 +00:00
PlasticDigits commented 2026-06-26 10:53:38 +00:00 (Migrated from gitlab.com)

mentioned in commit 1a4150f4af

mentioned in commit 1a4150f4af8cacb81815268ad1b8acbc733973b6
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
code/yieldomega!526
No description provided.