CI: dedicated frontend-e2e-indexer-outage job (#215 follow-up) #219

Closed
opened 2026-05-29 05:35:40 +00:00 by PlasticDigits · 9 comments
PlasticDigits commented 2026-05-29 05:35:40 +00:00 (Migrated from gitlab.com)

Summary

Add a dedicated CI job that runs Playwright market-data-down specs in isolation: indexer HTTP stopped (or unreachable), LocalTerra + Vite dev server up, E2E_INDEXER_OUTAGE=1. Today these specs are opt-in only (#215) and not executed in default CI — regressions on trade/charts (and future /limits) outage UX are invisible in pipelines.

Related: #215 (option B — stronger E2E), #201 (strict chain — must not flake), gaps/GAP_1780023683.md §5.2.


Current codebase

Opt-in Playwright specs (not in default CI)

Spec Route Assertions
e2e/trade-indexer-outage.spec.ts /trade/:pair trade-indexer-outage-banner, trade-tape-unavailable, trade-chart-unavailable, trade-book-unavailable-bid/ask
e2e/charts-indexer-outage.spec.ts /charts charts-market-data-outage-banner, no env URLs

Both use:

test.skip(process.env.E2E_INDEXER_OUTAGE !== '1', 'Set E2E_INDEXER_OUTAGE=1 with indexer stopped')

Manual run (documented in docs/testing.md § Frontend E2E — indexer outage):

# Stop indexer on :3001, then:
E2E_INDEXER_OUTAGE=1 npx playwright test e2e/trade-indexer-outage.spec.ts
E2E_INDEXER_OUTAGE=1 npx playwright test e2e/charts-indexer-outage.spec.ts

CI today (.github/workflows/test.yml)

Job Indexer Playwright
e2e Not started — LocalTerra + deploy-dex-local.sh only npm run test:e2e — strict tx + smoke; requires indexer up for indexer-backed smoke paths
frontend-charts-integration Started on :3001 for Vitest integration No Playwright
indexer Unit/integration Rust tests No Playwright

Gap: No job that (1) starts full stack including indexer, (2) verifies strict E2E still pass with indexer up, then (3) stops indexer and runs outage specs — or a separate job that only runs outage specs without touching the strict e2e job's assumptions.

Playwright config

  • playwright.config.ts: workers: 5 (do not change without stability review — .cursor/rules/playwright-workers.mdc)
  • webServer: Vite on :3000; globalSetup provisions LocalTerra dev wallet when chain required
  • Projects: e2e-smoke, e2e-tx — outage specs are not in a dedicated project today (they skip unless env set)

Vitest coverage (CI)

  • Charts/Trader/Pool outage banners covered in npm run test:run (#215)
  • Does not replace browser-level outage assertions (banner visibility, panel layout)

Why this is needed

  1. CI guard: Copy/testid drift on outage banners was only caught manually after #215.
  2. Release confidence: Market-data-down is a common production failure mode; automated regression reduces support burden.
  3. Agent velocity: Third-party agents need a green pipeline target for outage E2E, not ad-hoc “stop indexer locally.”
  4. Gap analysis: gaps/GAP_1780023683.md lists opt-in outage E2E as a testing gap.

Constraints and guardrails

  • Do not flake default e2e job (#201): Outage specs must not run in the same job pass that expects indexer HTTP unless the job explicitly stops the indexer after indexer-dependent smoke tests — prefer a separate job frontend-e2e-indexer-outage (or similar).
  • Isolation: Stopping indexer must not affect parallel jobs; job should bind indexer to localhost and stop only that process.
  • Playwright workers: Keep 5 workers unless measured otherwise.
  • No secrets in logs: Do not print VITE_INDEXER_URL in CI failure artifacts beyond existing env patterns.
  • Runtime budget: Job should reuse existing deploy/indexer bootstrap patterns where possible (deploy-dex-local.sh, charts job indexer start) — avoid duplicating 90s health loops without caching.
  • Skip policy: Outage specs must remain skipped when E2E_INDEXER_OUTAGE is unset so local npm run test:e2e behavior unchanged.
  • Optional scope: Include charts-indexer-outage + trade-indexer-outage at minimum; add limits-indexer-outage when [#limits P2 issue] lands.

Relevant files

CI / scripts

Specs

Docs / skills


Option A — Separate workflow job (preferred)

  1. Add job frontend-e2e-indexer-outage (needs: frontend or standalone) with steps:
    • LocalTerra up + deploy-dex-local.sh
    • Start indexer on 127.0.0.1:3001 (reuse charts-integration indexer env: FACTORY_ADDRESS, CORS_ORIGINS, migrations + seed as needed for trade pair)
    • npx playwright install chromium
    • Run smoke subset or health check that indexer responds (optional sanity)
    • Stop indexer process (pkill / kill pid file)
    • E2E_INDEXER_OUTAGE=1 npx playwright test e2e/trade-indexer-outage.spec.ts e2e/charts-indexer-outage.spec.ts with PLAYWRIGHT_BASE_URL / webServer as today
  2. Add playwright project e2e-indexer-outage with testMatch: **/*-indexer-outage.spec.ts and grep invert on default projects so npm run test:e2e unchanged.
  3. Document make test-e2e-indexer-outage for local parity.

Option B — Post-step in existing e2e job (higher risk)

  • After npm run test:e2e, stop indexer and run outage specs — only if strict suite does not require indexer for final assertions. Not recommended without audit of all smoke specs.

Indexer stop mechanism

  • Record PID from nohup start; kill before outage tests; verify /api/v1/overview returns connection refused.

Acceptance criteria

  • New CI job runs on merge requests / main (define trigger with existing workflow paths filters).
  • Job runs trade + charts indexer-outage specs with E2E_INDEXER_OUTAGE=1 and passes when indexer is stopped.
  • Default e2e job behavior unchanged (no new skips, no indexer stop).
  • docs/testing.md documents job name, local reproduction, and env vars.
  • Playwright config documents e2e-indexer-outage project (if added).
  • Job failure artifacts include indexer log tail on setup failure (mirror charts job).

Test plan (functional paths)

Path Layer Action Expected
CI job green GitHub Actions MR with only docs change vs frontend outage touch Job runs when appropriate paths change
Indexer up phase CI / local curl overview before stop 200 OK
Indexer stopped CI / local curl overview after stop Connection refused / failed
Trade outage spec Playwright E2E_INDEXER_OUTAGE=1 + stopped indexer Banner + panel testids visible
Charts outage spec Playwright Same charts-market-data-outage-banner visible
Default e2e CI e2e job No E2E_INDEXER_OUTAGE Outage specs skipped; strict suite unchanged
Local dev Manual npm run test:e2e without env Outage specs skipped (0 failures)
make target Shell make test-e2e-indexer-outage (if added) Same as CI locally

Test plan (attack vectors / misuse)

Vector Test Expected guard
Flaky strict e2e Run e2e job 3× on same commit No new failures from indexer stop leaking
Race: indexer still up Outage spec runs before stop completes Job fails fast with retry or health check after stop
Wrong pair in trade spec Missing E2E_TRADE_PAIR / factory deploy Clear failure; use deploy script pair or seed
CORS / wrong VITE_INDEXER_URL Browser cannot reach indexer when up Sanity step catches before stop
Parallel workers + shared indexer 5 workers hit UI while indexer down Read-only outage specs — no tx; should be stable
False green Spec runs with indexer still up Assert banner appears (would fail if indexer serves data)

Verification criteria

  • GitHub Actions job green on main after merge.
  • Confirm e2e job still green on same pipeline.
  • Local reproduction documented and tested once: start qa stack → run new make target → pass.
  • docs/testing.md#frontend-e2e-indexer-outage links to CI job and supersedes “opt-in only” wording where appropriate.
  • Skills updated for agent playbooks.
## Summary Add a **dedicated CI job** that runs Playwright **market-data-down** specs in isolation: indexer HTTP stopped (or unreachable), LocalTerra + Vite dev server up, `E2E_INDEXER_OUTAGE=1`. Today these specs are **opt-in only** ([#215](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/215)) and **not** executed in default CI — regressions on trade/charts (and future `/limits`) outage UX are invisible in pipelines. **Related:** [#215](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/215) (option **B** — stronger E2E), [#201](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/201) (strict chain — must not flake), `gaps/GAP_1780023683.md` §5.2. --- ## Current codebase ### Opt-in Playwright specs (not in default CI) | Spec | Route | Assertions | |------|-------|------------| | [`e2e/trade-indexer-outage.spec.ts`](frontend-dapp/e2e/trade-indexer-outage.spec.ts) | `/trade/:pair` | `trade-indexer-outage-banner`, `trade-tape-unavailable`, `trade-chart-unavailable`, `trade-book-unavailable-bid/ask` | | [`e2e/charts-indexer-outage.spec.ts`](frontend-dapp/e2e/charts-indexer-outage.spec.ts) | `/charts` | `charts-market-data-outage-banner`, no env URLs | Both use: ```ts test.skip(process.env.E2E_INDEXER_OUTAGE !== '1', 'Set E2E_INDEXER_OUTAGE=1 with indexer stopped') ``` **Manual run** (documented in [docs/testing.md § Frontend E2E — indexer outage](docs/testing.md#frontend-e2e-indexer-outage)): ```bash # Stop indexer on :3001, then: E2E_INDEXER_OUTAGE=1 npx playwright test e2e/trade-indexer-outage.spec.ts E2E_INDEXER_OUTAGE=1 npx playwright test e2e/charts-indexer-outage.spec.ts ``` ### CI today ([`.github/workflows/test.yml`](.github/workflows/test.yml)) | Job | Indexer | Playwright | |-----|---------|------------| | **`e2e`** | **Not started** — LocalTerra + `deploy-dex-local.sh` only | `npm run test:e2e` — strict tx + smoke; **requires indexer up** for indexer-backed smoke paths | | **`frontend-charts-integration`** | Started on `:3001` for Vitest integration | No Playwright | | **`indexer`** | Unit/integration Rust tests | No Playwright | **Gap:** No job that (1) starts full stack including indexer, (2) verifies strict E2E still pass with indexer **up**, then (3) stops indexer and runs outage specs — or a **separate** job that only runs outage specs without touching the strict `e2e` job's assumptions. ### Playwright config - [`playwright.config.ts`](frontend-dapp/playwright.config.ts): `workers: 5` (do not change without stability review — [`.cursor/rules/playwright-workers.mdc`](.cursor/rules/playwright-workers.mdc)) - `webServer`: Vite on `:3000`; `globalSetup` provisions LocalTerra dev wallet when chain required - Projects: `e2e-smoke`, `e2e-tx` — outage specs are **not** in a dedicated project today (they skip unless env set) ### Vitest coverage (CI) - Charts/Trader/Pool outage banners covered in `npm run test:run` ([#215](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/215)) - Does **not** replace browser-level outage assertions (banner visibility, panel layout) --- ## Why this is needed 1. **CI guard:** Copy/testid drift on outage banners was only caught manually after [#215](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/215). 2. **Release confidence:** Market-data-down is a common production failure mode; automated regression reduces support burden. 3. **Agent velocity:** Third-party agents need a green pipeline target for outage E2E, not ad-hoc “stop indexer locally.” 4. **Gap analysis:** `gaps/GAP_1780023683.md` lists opt-in outage E2E as a testing gap. --- ## Constraints and guardrails - **Do not flake default `e2e` job ([#201](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/201)):** Outage specs must **not** run in the same job pass that expects indexer HTTP unless the job explicitly stops the indexer **after** indexer-dependent smoke tests — prefer a **separate job** `frontend-e2e-indexer-outage` (or similar). - **Isolation:** Stopping indexer must not affect parallel jobs; job should bind indexer to localhost and stop only that process. - **Playwright workers:** Keep **5** workers unless measured otherwise. - **No secrets in logs:** Do not print `VITE_INDEXER_URL` in CI failure artifacts beyond existing env patterns. - **Runtime budget:** Job should reuse existing deploy/indexer bootstrap patterns where possible (`deploy-dex-local.sh`, charts job indexer start) — avoid duplicating 90s health loops without caching. - **Skip policy:** Outage specs must remain skipped when `E2E_INDEXER_OUTAGE` is unset so local `npm run test:e2e` behavior unchanged. - **Optional scope:** Include `charts-indexer-outage` + `trade-indexer-outage` at minimum; add `limits-indexer-outage` when [#limits P2 issue] lands. --- ## Relevant files **CI / scripts** - [`.github/workflows/test.yml`](.github/workflows/test.yml) — new job definition - [`scripts/deploy-dex-local.sh`](scripts/deploy-dex-local.sh) - [`scripts/test-charts-integration.sh`](scripts/test-charts-integration.sh) (indexer bootstrap reference) - [`Makefile`](Makefile) — optional `test-e2e-indexer-outage` target - [`frontend-dapp/playwright.config.ts`](frontend-dapp/playwright.config.ts) — optional `e2e-indexer-outage` project with `testMatch` glob **Specs** - [`frontend-dapp/e2e/trade-indexer-outage.spec.ts`](frontend-dapp/e2e/trade-indexer-outage.spec.ts) - [`frontend-dapp/e2e/charts-indexer-outage.spec.ts`](frontend-dapp/e2e/charts-indexer-outage.spec.ts) **Docs / skills** - [`docs/testing.md`](docs/testing.md) — replace “opt-in only” with CI job name + local equivalent - [`docs/frontend.md` § Market data loading & outage](docs/frontend.md#market-data-loading-outage) - [`skills/AGENTS_FRONTEND_MARKET_DATA_OUTAGE.md`](skills/AGENTS_FRONTEND_MARKET_DATA_OUTAGE.md) - [`skills/AGENTS_E2E_STRICT_CHAIN.md`](skills/AGENTS_E2E_STRICT_CHAIN.md) — clarify separation from outage job --- ## Recommended direction **Option A — Separate workflow job (preferred)** 1. Add job `frontend-e2e-indexer-outage` (needs: `frontend` or standalone) with steps: - LocalTerra up + `deploy-dex-local.sh` - Start indexer on `127.0.0.1:3001` (reuse charts-integration indexer env: `FACTORY_ADDRESS`, `CORS_ORIGINS`, migrations + seed as needed for trade pair) - `npx playwright install chromium` - Run **smoke subset** or health check that indexer responds (optional sanity) - **Stop** indexer process (`pkill` / kill pid file) - `E2E_INDEXER_OUTAGE=1 npx playwright test e2e/trade-indexer-outage.spec.ts e2e/charts-indexer-outage.spec.ts` with `PLAYWRIGHT_BASE_URL` / `webServer` as today 2. Add `playwright` project `e2e-indexer-outage` with `testMatch: **/*-indexer-outage.spec.ts` and `grep` invert on default projects so `npm run test:e2e` unchanged. 3. Document `make test-e2e-indexer-outage` for local parity. **Option B — Post-step in existing e2e job (higher risk)** - After `npm run test:e2e`, stop indexer and run outage specs — **only** if strict suite does not require indexer for final assertions. Not recommended without audit of all smoke specs. **Indexer stop mechanism** - Record PID from `nohup` start; `kill` before outage tests; verify `/api/v1/overview` returns connection refused. --- ## Acceptance criteria - [ ] New CI job runs on merge requests / `main` (define trigger with existing workflow `paths` filters). - [ ] Job runs trade + charts indexer-outage specs with `E2E_INDEXER_OUTAGE=1` and **passes** when indexer is stopped. - [ ] Default `e2e` job behavior unchanged (no new skips, no indexer stop). - [ ] `docs/testing.md` documents job name, local reproduction, and env vars. - [ ] Playwright config documents `e2e-indexer-outage` project (if added). - [ ] Job failure artifacts include indexer log tail on setup failure (mirror charts job). --- ## Test plan (functional paths) | Path | Layer | Action | Expected | |------|-------|--------|----------| | CI job green | GitHub Actions | MR with only docs change vs frontend outage touch | Job runs when appropriate paths change | | Indexer up phase | CI / local | curl overview before stop | 200 OK | | Indexer stopped | CI / local | curl overview after stop | Connection refused / failed | | Trade outage spec | Playwright | `E2E_INDEXER_OUTAGE=1` + stopped indexer | Banner + panel testids visible | | Charts outage spec | Playwright | Same | `charts-market-data-outage-banner` visible | | Default e2e | CI `e2e` job | No `E2E_INDEXER_OUTAGE` | Outage specs skipped; strict suite unchanged | | Local dev | Manual | `npm run test:e2e` without env | Outage specs skipped (0 failures) | | make target | Shell | `make test-e2e-indexer-outage` (if added) | Same as CI locally | --- ## Test plan (attack vectors / misuse) | Vector | Test | Expected guard | |--------|------|----------------| | **Flaky strict e2e** | Run `e2e` job 3× on same commit | No new failures from indexer stop leaking | | **Race: indexer still up** | Outage spec runs before stop completes | Job fails fast with retry or health check after stop | | **Wrong pair in trade spec** | Missing `E2E_TRADE_PAIR` / factory deploy | Clear failure; use deploy script pair or seed | | **CORS / wrong VITE_INDEXER_URL** | Browser cannot reach indexer when up | Sanity step catches before stop | | **Parallel workers + shared indexer** | 5 workers hit UI while indexer down | Read-only outage specs — no tx; should be stable | | **False green** | Spec runs with indexer still up | Assert banner appears (would fail if indexer serves data) | --- ## Verification criteria - [ ] GitHub Actions job green on `main` after merge. - [ ] Confirm `e2e` job still green on same pipeline. - [ ] Local reproduction documented and tested once: start qa stack → run new make target → pass. - [ ] `docs/testing.md#frontend-e2e-indexer-outage` links to CI job and supersedes “opt-in only” wording where appropriate. - [ ] Skills updated for agent playbooks.
PlasticDigits commented 2026-05-29 05:35:41 +00:00 (Migrated from gitlab.com)

marked as related to #215

marked as related to #215
PlasticDigits commented 2026-05-29 06:49:32 +00:00 (Migrated from gitlab.com)

mentioned in commit f6bc8c5645

mentioned in commit f6bc8c56459876a6b0874e0699670cba3660d7cb
PlasticDigits commented 2026-05-29 06:49:48 +00:00 (Migrated from gitlab.com)

Implementation complete (merged to main @ f6bc8c5)

Added a dedicated CI job for market-data-down Playwright so outage UX regressions are caught without touching the strict e2e job (#201).

What changed

  • CI: New GitHub Actions job frontend-e2e-indexer-outage in .github/workflows/test.yml — Postgres + LocalTerra + deploy-dex-local.sh + indexer build → sanity GET /api/v1/overview → stop indexer → E2E_INDEXER_OUTAGE=1 Playwright (trade-, charts-, limits-indexer-outage specs via project glob).
  • Playwright: Project e2e-indexer-outage (**/*-indexer-outage.spec.ts); excluded from e2e-smoke / default npm run test:e2e.
  • Scripts: scripts/test-e2e-indexer-outage.sh, scripts/lib/e2e-trade-pair-from-deploy.sh (resolves E2E_TRADE_PAIR from .qa-deploy-stamp / factory LCD).
  • Make: make test-e2e-indexer-outage for local parity with CI.
  • Docs / agents: docs/testing.md#frontend-e2e-indexer-outage, docs/frontend.md, gaps/GAP_1780023683.md §5.2, skills/AGENTS_E2E_INDEXER_OUTAGE.md (new), cross-links in AGENTS_E2E_STRICT_CHAIN.md and AGENTS_FRONTEND_MARKET_DATA_OUTAGE.md.

Verification checklist

  • GitHub Actions: frontend-e2e-indexer-outage green on main pipeline for f6bc8c5
  • Same pipeline: default e2e job still green (no indexer stop, outage specs not in default projects)
  • Local: make test-e2e-indexer-outage after deploy-dex-local.sh + cargo build --release in indexer/
  • curl -sf http://127.0.0.1:3001/api/v1/overview fails after script stops indexer, before Playwright
  • Trade spec: trade-indexer-outage-banner + panel trade-*-unavailable testids visible
  • Charts spec: charts-market-data-outage-banner visible, no env URLs in DOM
  • Limits spec: limits-market-data-outage-banner visible (#218)
  • npm run test:e2e without E2E_INDEXER_OUTAGE: outage specs not executed (project excluded)

@brouie — please verify CI + spot-check local make test-e2e-indexer-outage when you have a moment. Leaving this issue open until confirmed.

## Implementation complete (merged to `main` @ f6bc8c5) Added a **dedicated CI job** for market-data-down Playwright so outage UX regressions are caught without touching the strict `e2e` job ([#201](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/201)). ### What changed - **CI:** New GitHub Actions job `frontend-e2e-indexer-outage` in `.github/workflows/test.yml` — Postgres + LocalTerra + `deploy-dex-local.sh` + indexer build → sanity `GET /api/v1/overview` → stop indexer → `E2E_INDEXER_OUTAGE=1` Playwright (`trade-`, `charts-`, `limits-indexer-outage` specs via project glob). - **Playwright:** Project `e2e-indexer-outage` (`**/*-indexer-outage.spec.ts`); excluded from `e2e-smoke` / default `npm run test:e2e`. - **Scripts:** `scripts/test-e2e-indexer-outage.sh`, `scripts/lib/e2e-trade-pair-from-deploy.sh` (resolves `E2E_TRADE_PAIR` from `.qa-deploy-stamp` / factory LCD). - **Make:** `make test-e2e-indexer-outage` for local parity with CI. - **Docs / agents:** `docs/testing.md#frontend-e2e-indexer-outage`, `docs/frontend.md`, `gaps/GAP_1780023683.md` §5.2, `skills/AGENTS_E2E_INDEXER_OUTAGE.md` (new), cross-links in `AGENTS_E2E_STRICT_CHAIN.md` and `AGENTS_FRONTEND_MARKET_DATA_OUTAGE.md`. ### Verification checklist - [ ] GitHub Actions: `frontend-e2e-indexer-outage` **green** on `main` pipeline for f6bc8c5 - [ ] Same pipeline: default **`e2e`** job still **green** (no indexer stop, outage specs not in default projects) - [ ] Local: `make test-e2e-indexer-outage` after `deploy-dex-local.sh` + `cargo build --release` in `indexer/` - [ ] `curl -sf http://127.0.0.1:3001/api/v1/overview` fails after script stops indexer, before Playwright - [ ] Trade spec: `trade-indexer-outage-banner` + panel `trade-*-unavailable` testids visible - [ ] Charts spec: `charts-market-data-outage-banner` visible, no env URLs in DOM - [ ] Limits spec: `limits-market-data-outage-banner` visible ([#218](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/218)) - [ ] `npm run test:e2e` without `E2E_INDEXER_OUTAGE`: outage specs **not executed** (project excluded) @brouie — please verify CI + spot-check local `make test-e2e-indexer-outage` when you have a moment. Leaving this issue **open** until confirmed.
PlasticDigits commented 2026-05-30 06:15:04 +00:00 (Migrated from gitlab.com)

mentioned in commit 578b61c9cf

mentioned in commit 578b61c9cf1f67f14afcda883f2ed8747611643c
PlasticDigits commented 2026-05-30 06:15:04 +00:00 (Migrated from gitlab.com)

mentioned in commit 806ea78ca6

mentioned in commit 806ea78ca6154282b3fc8a9f9511048585e9c684
PlasticDigits commented 2026-05-30 06:15:45 +00:00 (Migrated from gitlab.com)

Verification (#219) — fixes pushed to main (578b61c)

Verified GitLab #219 in worktree verify/issue-219 against running LocalTerra + Postgres QA stack. The dedicated frontend-e2e-indexer-outage job and docs/skills were already on main; local make test-e2e-indexer-outage initially failed — fixes merged below.

What was wrong (fixed on main)

  1. test-e2e-indexer-outage.sh only killed its own PID — with QA indexer on :3001, stop did not make the API unreachable. Added scripts/lib/indexer-port.sh to stop all listeners on the sanity port.
  2. Shared host auto-restart on :3001 caused false greens during Playwright. After sanity on :3001, the browser now uses OUTAGE_E2E_INDEXER_URL (default http://127.0.0.1:39991, nothing listening).
  3. Global setup mint/seed raced local bots; outage runs now wait for LCD only and optionally re-stop :3001 when needed.
  4. Slow React Query / fetch retries delayed outage banners — VITE_E2E_INDEXER_OUTAGE=1 disables query retries and shortens indexer fetch timeout for outage Playwright only.
  5. limits-indexer-outage.spec.ts used getByRole('option').first() (placeholder) — now uses selectLimitPairByFactoryIndex(page, 0).

Local verification (pass)

  • make test-e2e-indexer-outage — 3/3 passed (trade, charts, limits indexer-outage specs)
  • Outage specs excluded from e2e-smoke project listing without E2E_INDEXER_OUTAGE
  • Indexer restarted afterward via scripts/e2e-start-indexer.sh (QA stack left up; no frontend left running)

Checklist for @brouie (CI + sign-off)

  • GitHub Actions frontend-e2e-indexer-outage green on main after 578b61c
  • Same pipeline: default e2e job still green (no outage specs, indexer not stopped)
  • docs/testing.md#frontend-e2e-indexer-outage matches job + make test-e2e-indexer-outage
  • Optional: MR touching only docs/** still triggers workflow when paths allow

Status: Leaving open — cannot confirm GitHub Actions green from this host (no GitHub remote / gh repo). Please close after CI checklist passes.

/cc @brouie

## Verification (#219) — fixes pushed to `main` (`578b61c`) Verified GitLab **#219** in worktree `verify/issue-219` against running LocalTerra + Postgres QA stack. The dedicated **`frontend-e2e-indexer-outage`** job and docs/skills were already on `main`; local `make test-e2e-indexer-outage` initially **failed** — fixes merged below. ### What was wrong (fixed on `main`) 1. **`test-e2e-indexer-outage.sh` only killed its own PID** — with QA indexer on `:3001`, stop did not make the API unreachable. Added [`scripts/lib/indexer-port.sh`](scripts/lib/indexer-port.sh) to stop all listeners on the sanity port. 2. **Shared host auto-restart on `:3001`** caused false greens during Playwright. After sanity on `:3001`, the browser now uses **`OUTAGE_E2E_INDEXER_URL`** (default `http://127.0.0.1:39991`, nothing listening). 3. **Global setup** mint/seed raced local bots; outage runs now wait for LCD only and optionally re-stop `:3001` when needed. 4. **Slow React Query / fetch retries** delayed outage banners — `VITE_E2E_INDEXER_OUTAGE=1` disables query retries and shortens indexer fetch timeout for outage Playwright only. 5. **`limits-indexer-outage.spec.ts`** used `getByRole('option').first()` (placeholder) — now uses `selectLimitPairByFactoryIndex(page, 0)`. ### Local verification (pass) - `make test-e2e-indexer-outage` — **3/3 passed** (trade, charts, limits indexer-outage specs) - Outage specs **excluded** from `e2e-smoke` project listing without `E2E_INDEXER_OUTAGE` - Indexer restarted afterward via `scripts/e2e-start-indexer.sh` (QA stack left up; no frontend left running) ### Checklist for @brouie (CI + sign-off) - [ ] GitHub Actions **`frontend-e2e-indexer-outage`** green on `main` after `578b61c` - [ ] Same pipeline: default **`e2e`** job still green (no outage specs, indexer not stopped) - [ ] `docs/testing.md#frontend-e2e-indexer-outage` matches job + `make test-e2e-indexer-outage` - [ ] Optional: MR touching only `docs/**` still triggers workflow when paths allow ### Agent / doc cross-links - [`skills/AGENTS_E2E_INDEXER_OUTAGE.md`](skills/AGENTS_E2E_INDEXER_OUTAGE.md) — invariants (sanity `:3001`, browser dead port, workers=5) - [`skills/AGENTS_E2E_STRICT_CHAIN.md`](skills/AGENTS_E2E_STRICT_CHAIN.md) — separation from strict job - [`skills/AGENTS_FRONTEND_MARKET_DATA_OUTAGE.md`](skills/AGENTS_FRONTEND_MARKET_DATA_OUTAGE.md) **Status:** Leaving **open** — cannot confirm GitHub Actions green from this host (no GitHub remote / `gh` repo). Please close after CI checklist passes. /cc @brouie
PlasticDigits commented 2026-05-30 06:17:29 +00:00 (Migrated from gitlab.com)

mentioned in issue #234

mentioned in issue #234
PlasticDigits commented 2026-05-30 09:12:09 +00:00 (Migrated from gitlab.com)

We are not using github actions/gitlab, so do not verify item one from checklist only 2, 34

We are not using github actions/gitlab, so do not verify item one from checklist only 2, 34
PlasticDigits commented 2026-05-30 12:20:05 +00:00 (Migrated from gitlab.com)

Verification complete — GitLab #219

Verified in worktree verify/issue-219 @ 3e7a175 against healthy LocalTerra + Postgres QA stack (infra restarted ~22m prior; RPC via localterra-host-curl.sh, indexer via :3001/api/v1/overview).

Per maintainer note: GitHub Actions / GitLab CI not run on this host — skipped pipeline-only checklist items; all local acceptance + verification criteria pass.

What was verified

Check Result
Infra health (LocalTerra RPC, Postgres, indexer overview) OK before run
make test-e2e-indexer-outage 3/3 passed (trade, charts, limits *-indexer-outage.spec.ts, ~10s)
Indexer sanity → stop → unreachable on :3001 Confirmed in script output before Playwright
Browser uses OUTAGE_E2E_INDEXER_URL (:39991) after stop Set by scripts/test-e2e-indexer-outage.sh
Outage specs excluded from e2e-smoke / default npm run test:e2e playwright test --list --project=e2e-smoke lists no *-indexer-outage specs
Playwright project e2e-indexer-outage + workers=5 frontend-dapp/playwright.config.ts
make test-e2e-indexer-outage Make target Makefile → scripts/test-e2e-indexer-outage.sh
Port-wide indexer stop (indexer-port.sh) Reused QA indexer on :3001, stopped all listeners
Docs + skills cross-linked docs/testing.md#frontend-e2e-indexer-outage, docs/frontend.md, skills/AGENTS_E2E_INDEXER_OUTAGE.md, AGENTS_E2E_STRICT_CHAIN.md, AGENTS_FRONTEND_MARKET_DATA_OUTAGE.md, gaps/GAP_1780023683.md
Reference workflow job spec .github/workflows/test.yml → frontend-e2e-indexer-outage (reference only)

Post-run

  • Indexer restarted via scripts/e2e-start-indexer.sh — :3001 overview OK
  • QA infra left up; no frontend dev server left running

Checklist for sign-off

  • Local: make test-e2e-indexer-outage passes after deploy + release indexer build
  • Indexer unreachable on :3001 after script stop, before Playwright
  • Trade spec: trade-indexer-outage-banner + trade-*-unavailable testids
  • Charts spec: charts-market-data-outage-banner, no env URLs in DOM
  • Limits spec: limits-market-data-outage-banner (#218)
  • Default npm run test:e2e / e2e-smoke unchanged (outage project excluded)
  • docs/testing.md#frontend-e2e-indexer-outage documents job name, env vars, local repro
  • Agent skills document invariants (AGENTS_E2E_INDEXER_OUTAGE.md)
  • GitHub Actions frontend-e2e-indexer-outage green on main (external CI — not verified here)
  • Same pipeline: default e2e job still green (external CI — not verified here)

No code changes required; verify/issue-219 merged to main (already at 3e7a175).

## Verification complete — GitLab #219 Verified in worktree `verify/issue-219` @ `3e7a175` against healthy LocalTerra + Postgres QA stack (infra restarted ~22m prior; RPC via `localterra-host-curl.sh`, indexer via `:3001/api/v1/overview`). Per maintainer note: **GitHub Actions / GitLab CI not run** on this host — skipped pipeline-only checklist items; all **local** acceptance + verification criteria pass. ### What was verified | Check | Result | |-------|--------| | Infra health (LocalTerra RPC, Postgres, indexer overview) | OK before run | | `make test-e2e-indexer-outage` | **3/3 passed** (trade, charts, limits `*-indexer-outage.spec.ts`, ~10s) | | Indexer sanity → stop → unreachable on `:3001` | Confirmed in script output before Playwright | | Browser uses `OUTAGE_E2E_INDEXER_URL` (`:39991`) after stop | Set by `scripts/test-e2e-indexer-outage.sh` | | Outage specs **excluded** from `e2e-smoke` / default `npm run test:e2e` | `playwright test --list --project=e2e-smoke` lists no `*-indexer-outage` specs | | Playwright project `e2e-indexer-outage` + workers=5 | `frontend-dapp/playwright.config.ts` | | `make test-e2e-indexer-outage` Make target | `Makefile` → `scripts/test-e2e-indexer-outage.sh` | | Port-wide indexer stop (`indexer-port.sh`) | Reused QA indexer on `:3001`, stopped all listeners | | Docs + skills cross-linked | `docs/testing.md#frontend-e2e-indexer-outage`, `docs/frontend.md`, `skills/AGENTS_E2E_INDEXER_OUTAGE.md`, `AGENTS_E2E_STRICT_CHAIN.md`, `AGENTS_FRONTEND_MARKET_DATA_OUTAGE.md`, `gaps/GAP_1780023683.md` | | Reference workflow job spec | `.github/workflows/test.yml` → `frontend-e2e-indexer-outage` (reference only) | ### Post-run - Indexer restarted via `scripts/e2e-start-indexer.sh` — `:3001` overview OK - QA infra left up; no frontend dev server left running ### Checklist for sign-off - [x] Local: `make test-e2e-indexer-outage` passes after deploy + release indexer build - [x] Indexer unreachable on `:3001` after script stop, before Playwright - [x] Trade spec: `trade-indexer-outage-banner` + `trade-*-unavailable` testids - [x] Charts spec: `charts-market-data-outage-banner`, no env URLs in DOM - [x] Limits spec: `limits-market-data-outage-banner` ([#218](https://gitlab.com/PlasticDigits/cl8y-dex-terraclassic/-/issues/218)) - [x] Default `npm run test:e2e` / `e2e-smoke` unchanged (outage project excluded) - [x] `docs/testing.md#frontend-e2e-indexer-outage` documents job name, env vars, local repro - [x] Agent skills document invariants (`AGENTS_E2E_INDEXER_OUTAGE.md`) - [ ] GitHub Actions `frontend-e2e-indexer-outage` green on `main` *(external CI — not verified here)* - [ ] Same pipeline: default `e2e` job still green *(external CI — not verified here)* No code changes required; `verify/issue-219` merged to `main` (already at `3e7a175`).
PlasticDigits (Migrated from gitlab.com) closed this issue 2026-05-30 12:20:08 +00:00
Sign in to join this conversation.
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/cl8y-dex-terraclassic#219
No description provided.