Context
PR #18891's e2e-engine job printed 98 passed (5.1m), then The action 'Run e2e (engine tier)' has timed out after 5 minutes. That is a red over a run with no failing test (reported by @neo-opus-grace, 14:26Z). The five minutes are deliberate: .github/workflows/test-e2e.yml caps the tier's test step there ("Time — the ceiling is five minutes of test time"), and 30 minutes only for a dispatch.
Test time per file in that run (job 105628849328), largest first:
| Spec |
Tests |
Time |
grid/RowPinning |
1 |
47.1 s |
colors/tearOutMatrix |
3 |
24.1 s |
grid/CellEditingExample |
12 |
23.4 s |
grid/CellEditingPooling |
10 |
20.5 s |
grid/CellEditingLockedBodies |
4 |
18.0 s |
grid/TreeBigData |
5 |
15.6 s |
The grid cell-editing witnesses of #18762 sum to about 82 s (CellEditingTab 10.7 s and CellEditingStoreActivity 9.8 s included).
The Problem
The tier grows with every witness it gains, and the step budget is fixed. Once a run crosses it, every pull request that selects the tier is red whatever its diff, and a rerun only helps if the run happens to come in under five minutes. Raising the ceiling postpones the same red to the next growth, and it lengthens the one step every such pull request waits on, which is what the ceiling bounds.
The Architectural Reality
test-e2e.yml, job e2e-engine: one runner, --workers=1. It is serial by measurement, because the tier drives real windows and geometry that parallel workers on one runner perturb. Step timeout-minutes is 5 on pull_request and push, and 30 on workflow_dispatch, where a probe with repeatEach is meant to run long (#18505).
- The selection is
buildScripts/util/e2eCiSelection.mjs --paths, and --summary states the population the tier certifies.
- No rule on
dev requires the e2e-engine context (gh api repos/neomjs/neo/rules/branches/dev: deletion, non_fast_forward, copilot_code_review, code_scanning), and no file outside the workflow names it.
classify-test-scope.yml selects the tier for a diff touching test-e2e.yml, so the fixing pull request runs the new shape itself.
The Fix
Run the gate as two Playwright shards (--shard=N/2), each on its own runner, each still --workers=1, and each under the same five-minute step budget. A dispatch stays a single shard, so a probe's tally keeps its whole denominator. Each shard names its failure artifact after itself, and the tier's coverage summary is written once.
Acceptance Criteria
Out of Scope
- Moving specs to another tier, or making individual specs faster (
RowPinning's single 47 s arm is its own question).
Avoided Traps
- Raising the ceiling: it postpones the red to the next growth and lengthens the wait it exists to bound.
- More workers on one runner: the tier is serial because parallel workers perturb its geometry.
Related
#18762 · #18891 · #18408 (this runner) · #18505 (dispatch as a measuring instrument) · #17783
Decision Record impact: none.
Live latest-open sweep: the latest 20 open issues at 2026-09-18T14:32Z, and an all-state search for e2e shard, five-minute and engine tier timed out: no equivalent (#18408 created the runner). A2A: @neo-opus-grace sent this fork to me as the budget's owner at 14:26Z, and nobody else has claimed it.
Origin Session ID: 6ed6621f-e2e4-4b9d-9a95-744679cb3c59
Retrieval Hint: "e2e engine tier five-minute step budget shard timed out all tests passed"
Context
PR #18891's
e2e-enginejob printed98 passed (5.1m), thenThe action 'Run e2e (engine tier)' has timed out after 5 minutes. That is a red over a run with no failing test (reported by @neo-opus-grace, 14:26Z). The five minutes are deliberate:.github/workflows/test-e2e.ymlcaps the tier's test step there ("Time — the ceiling is five minutes of test time"), and 30 minutes only for a dispatch.Test time per file in that run (job 105628849328), largest first:
grid/RowPinningcolors/tearOutMatrixgrid/CellEditingExamplegrid/CellEditingPoolinggrid/CellEditingLockedBodiesgrid/TreeBigDataThe grid cell-editing witnesses of #18762 sum to about 82 s (
CellEditingTab10.7 s andCellEditingStoreActivity9.8 s included).The Problem
The tier grows with every witness it gains, and the step budget is fixed. Once a run crosses it, every pull request that selects the tier is red whatever its diff, and a rerun only helps if the run happens to come in under five minutes. Raising the ceiling postpones the same red to the next growth, and it lengthens the one step every such pull request waits on, which is what the ceiling bounds.
The Architectural Reality
test-e2e.yml, jobe2e-engine: one runner,--workers=1. It is serial by measurement, because the tier drives real windows and geometry that parallel workers on one runner perturb. Steptimeout-minutesis 5 onpull_requestandpush, and 30 onworkflow_dispatch, where a probe withrepeatEachis meant to run long (#18505).buildScripts/util/e2eCiSelection.mjs --paths, and--summarystates the population the tier certifies.devrequires thee2e-enginecontext (gh api repos/neomjs/neo/rules/branches/dev: deletion, non_fast_forward, copilot_code_review, code_scanning), and no file outside the workflow names it.classify-test-scope.ymlselects the tier for a diff touchingtest-e2e.yml, so the fixing pull request runs the new shape itself.The Fix
Run the gate as two Playwright shards (
--shard=N/2), each on its own runner, each still--workers=1, and each under the same five-minute step budget. A dispatch stays a single shard, so a probe's tally keeps its whole denominator. Each shard names its failure artifact after itself, and the tier's coverage summary is written once.Acceptance Criteria
Out of Scope
RowPinning's single 47 s arm is its own question).Avoided Traps
Related
#18762 · #18891 · #18408 (this runner) · #18505 (dispatch as a measuring instrument) · #17783
Decision Record impact: none.
Live latest-open sweep: the latest 20 open issues at 2026-09-18T14:32Z, and an all-state search for
e2e shard,five-minuteandengine tier timed out: no equivalent (#18408 created the runner). A2A: @neo-opus-grace sent this fork to me as the budget's owner at 14:26Z, and nobody else has claimed it.Origin Session ID: 6ed6621f-e2e4-4b9d-9a95-744679cb3c59 Retrieval Hint: "e2e engine tier five-minute step budget shard timed out all tests passed"