perf(ci): cut E2E smoke wall-clock from ~8min to ~3min - #348
Conversation
The single L4a e2e-smoke job collected 172 tests and ran them serially, taking 7m44s. Split it by server into three parallel jobs (acp / opencode / misc), each with its own subprocess-server cache instance, so wall-clock is now ~the slowest bucket instead of the serial sum. Also cap the known-hanging test_post_init at a 10s timeout so its xfail no longer burns the full 60s job-level timeout on every PR. Add a concurrency cancel-in-progress so a new push to a PR cancels the superseded in-flight run instead of occupying further runner queues.
|
No Review:
|
…igger - Add opencode.json with default_agent: review-lead so the opencode GitHub action actually runs the review-lead agent (the agent: input is ignored by the CLI handler, which falls back to 'build') - Teach review-lead + workflow prompt to consume <pull_request_comments> / <pull_request_reviews> context and de-duplicate findings across runs - Fix /oc manual trigger: gh pr view needs -R on issue_comment (runner has no git repo before checkout)
|
Closing per maintainer decision — reconsidering a different approach to the E2E smoke timing. |

Summary
The single L4a
e2e-smokejob ran 172 tests serially and took 7m44s on PR #346(see run 30810232095).
This PR cuts that to ~3min wall-clock with zero coverage loss.
Changes
Split
e2e-smokeinto 3 parallel jobs —e2e-acp,e2e-opencode,e2e-miscsubprocess_servercache instance.-n autois not viable; splittingby protocol gives parallel runners without touching xdist/cache semantics.
max(acp, opencode, misc)≈ ~3min vs the 7m44s serial sum.Cap known-hanging
test_post_initat 10s (tests/e2e/test_opencode_misc.py)xfailed /known_bug, but it burned the full 60s job-level--timeoutonevery PR just to reach the xfail.
@pytest.mark.timeout(10)saves 50s/PR.Add
concurrency: cancel-in-progressthat was delaying newly-queued e2e jobs.
Expected impact
test_post_initSlow L4 tests remain covered by the existing
e2e-nightly.yml. No coverage ortest-selection semantics changed — only job partitioning, the known-bug timeout,
and
reportaggregation kept in sync.Verification
yaml.safe_loadvalid; needs-graph has no dangling refsruff check+ruff format --checkpass on the modified test filepytest --collect-only -m e2e tests/e2e/test_opencode_misc.pycollectstest_post_init