Skip to content

test(e2e): run the files of the suite on four workers on CI (FRU-268) - #285

Merged
sakuga-agent[bot] merged 4 commits into
mainfrom
fru-authfix/fru-268-e2e-workers
Oct 13, 2026
Merged

sakuga-agent[bot] merged 4 commits into
mainfrom
fru-authfix/fru-268-e2e-workers

Conversation

@sakuga-agent

@sakuga-agent sakuga-agent Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Stack: #285 → #286. Merge this one first. #286 changes the CI and is for Mathieu.

The E2E suite runs its files on four Playwright workers on CI, instead of one. Locally it stays at one worker. Part of FRU-268: make the E2E job of a pull request faster without losing coverage.

Measures (job e2e, wall time)

runs job Playwright flaky
main today, one worker 3 (1034, 1035, 1036) 13 min 19 to 13 min 29 12.3 min 0
This PR, four workers 3 (1042, 1044, 1052) 6 min 36 to 6 min 57, median 6 min 41 5.5 to 5.8 min 0

290 tests in each run. Runner time drops by the same half: one job, one runner.

What changes

  • playwright.config.ts: workers: process.env.CI ? 4 : 1. Files run side by side; the tests of one file still run in order in one worker (fullyParallel stays false). The specs already keep apart by the page address of each case (caseOf); the workers of the Cloud that the console specs start listen on a free port.
  • e2e/warm-up.ts: the console's Vite server is warmed up too, as its specs now start at the same moment.
  • apps/worker/src/linear-memory.ts (the in-memory Linear of pnpm dev and the E2E suite, refused in production): an issue takes its state and its replies by its rank on its page, not in the whole store. With four workers, another spec wrote between the five notes of overlay.spec.ts, and two of its tests failed (run 1040: "five statuses" got four, "a reply is not drawn as a bullet point" got no replies in three attempts). Test: gives the notes of one page their states and replies by their rank on that page (FRU-268) in app.test.ts, which fails on main. The conformance suite plants its two filler notes on the same page for other clients now.
  • e2e/console-frame.spec.ts: the control of "a change of workspace shows nothing of the workspace of before…" waits for the read of the new workspace with expect.poll. The title of the screen can come before its request; one run was faster than it (flaky once, run 1043).

No spec is kept in series, and none was skipped.

Not verified

  • The suite with four workers on a machine other than a GitHub runner (4 vCPU). Locally it stays at one.
  • More than three runs. A spec that depends on the order of files in one worker would show only now and then.
  • I ran no E2E locally: the lock was held by another agent.

🤖 Generated with Claude Code


Sakuga Review · Score de confiance : 4/5

Fusion possible : changement limité au store Linear en mémoire de dev et à la configuration E2E, sans impact sur la production.

Constats

  1. P2 Contrôle de l'absence relancé après l'attente e2e/console-frame.spec.ts:371
    L'assertion d'absence w1 est répétée après le poll, ce qui est utile. Mais l'absence initiale est mesurée avant que la requête w2 n'arrive : une requête w1 tardive passerait la première assertion et ne serait attrapée que par la seconde, sans garantie si elle arrive après. Correction : Garder uniquement la seconde assertion d'absence, après l'attente de w2, pour une mesure unique et plus fiable.
Résumé

La PR fait suivre l'état et les réponses des notes du Linear en mémoire par leur rang sur la page, puis passe les E2E à 4 workers sur CI. Elle ajoute un test unitaire de rang par page, adapte le test de conformité et réchauffe aussi la console dans le warm-up. Le code est cohérent : le champ page est ajouté au type et renseigné, et le calcul du rang est correct. Je n'ai pas pu vérifier l'isolation réelle des specs E2E entre elles.

Revues (2) · Dernier commit relu : test(e2e): measure the four workers again (FRU-... · Niveau balanced · anthropic/claude-sonnet-5.5 · 0,028 $

Mheaus and others added 2 commits October 13, 2026 16:52
The specs already stay apart by the page address of each case. The console
is warmed up too, as its specs now start at the same moment.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
…e page (FRU-268)

The E2E specs now run side by side, and each keeps to its own page. A
count over the whole store gave five notes of one page the same state
when another spec wrote in between.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Mheaus and others added 2 commits October 13, 2026 17:18
…-268)

The title of the screen can come before its request. One run on four
workers was faster than the request.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
@sakuga-agent
sakuga-agent Bot marked this pull request as ready for review October 13, 2026 15:39

@kento-review kento-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Score de confiance : 4/5 · ✅ Rien de bloquant · Fusion sans défaut confirmé : la PR peut être fusionnée après un regard sur les points non vérifiés, notamment la route /setup du console et le filtrage par client du store.

Niveau lite · anthropic/claude-haiku-5.5 · 0,002 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.

@kento-review kento-review Bot added the review: 4/5 Score de confiance de Sakuga Review (5 : prête à merger) label Oct 13, 2026
@sakuga-agent

sakuga-agent Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

On the four points the lite did not read:

  • /setup on the console: apps/console/app/routes.ts serves it (routes/setup.tsx), and e2e/console-kit.spec.ts already opens ${CONSOLE}/setup. The warm-up passed in the three runs (1042, 1044, 1052).
  • The fillers of the conformance suite: fetchSeedIssues in linear-memory.ts keeps the issues whose clientId is the one asked, so a read for acme does not see the fillers of filler_1 and filler_2. The memory subject passes the whole conformance file (store-conformance.test.ts, 161 tests with app.test.ts, 0 failed).
  • resetMemoryLinear empties the one list, so the rank on every page starts again at 1. The new test runs after the beforeEach that resets it, and fails on main.
  • The specs keep apart by caseOf (e2e/pin.ts): each test, retry and repetition opens its own ?case= address. Three runs on four workers: 290 passed, 0 flaky, 0 failed.

@sakuga-agent

sakuga-agent Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

@sakuga-review review balanced

@kento-review kento-review Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Score de confiance : 4/5 · ⚠️ Rien de bloquant · Fusion possible : changement limité au store Linear en mémoire de dev et à la configuration E2E, sans impact sur la production.

Niveau balanced · anthropic/claude-sonnet-5.5 · 0,028 $ · Le résumé, le diagramme et la liste des constats sont à la fin de la description de la PR.

@sakuga-agent

sakuga-agent Bot commented Oct 13, 2026

Copy link
Copy Markdown
Contributor Author

On the balanced finding (e2e/console-frame.spec.ts:371, keep only the second check that nothing of w1 was read): not changed. Both checks read the same asked list and must both hold, so removing the first one catches nothing more; the second one, after the wait for w2, is the one the finding asks for, and it is there. The first check was in the spec before this PR, at the moment the new screen is drawn, and I left it as its author wrote it. A request for w1 after the second check would pass either way: no assertion can wait for something that should never come, short of a fixed wait.

@sakuga-agent
sakuga-agent Bot merged commit bef3806 into main Oct 13, 2026
15 checks passed
@sakuga-agent
sakuga-agent Bot deleted the fru-authfix/fru-268-e2e-workers branch October 13, 2026 16:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

review: 4/5 Score de confiance de Sakuga Review (5 : prête à merger)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant