perf(ci): raise pabot integration parallelism cap min(2)->min(6)
CI / lint (pull_request) Successful in 37s
CI / push-validation (pull_request) Successful in 22s
CI / helm (pull_request) Successful in 27s
CI / build (pull_request) Successful in 32s
CI / quality (pull_request) Successful in 45s
CI / typecheck (pull_request) Successful in 1m20s
CI / security (pull_request) Successful in 1m21s
CI / unit_tests (pull_request) Successful in 4m19s
CI / docker (pull_request) Successful in 1m19s
CI / integration_tests (pull_request) Successful in 7m45s
CI / coverage (pull_request) Successful in 8m18s
CI / status-check (pull_request) Successful in 3s

integration_tests was throttled to `min(2, _default_processes())` (commit
92e258535, a flaky-stabilization measure). Evidence from a cached CI run shows
the suite does ~47min of work serialized through 2 pabot lanes on a 32-core
runner -> ~24min wall (exactly 2x == 2 lanes), the chronic ~21-30min seen
across recent runs. It is linearly parallelism-bound.

Raise the cap to `min(6, _default_processes())`: ~4x more lanes -> projected
~6-8min wall, while staying well short of per-core fan-out (the runner reports
32 cores; behave already uses all of them). The cap is kept (not removed)
because the suite makes live LLM calls — ~149 HTTP 429 rate-limit responses
were observed even at 2-way, and unbounded fan-out would spike 429/OOM flakes
(the exact failure 92e258535 was masking). 6 is a deliberate middle ground;
TEST_PROCESSES / --processes still override.

Updates the now-stale "<=2 processes" docstrings on integration_tests and
slow_integration_tests. Behave/unit_tests parallelism (_default_processes(),
uncapped) is unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-01 22:32:43 -04:00
parent 8119043837
commit 11c0fd11d5
+14 -9
View File
@@ -52,8 +52,12 @@ def _pabot_parallel_args(posargs: list[str]) -> list[str]:
return []
# Integration tests are significantly heavier than unit tests and can
# become unstable on shared runners when pabot fans out aggressively.
# Keep default parallelism conservative (<=2) unless explicitly overridden.
pabot_default = min(2, _default_processes())
# Cap parallelism at 6: at the prior <=2 the ~47min suite serialized to
# ~24min wall on a 32-core runner (2x speedup == 2 lanes); 6 lanes cut
# that to ~6-8min while staying well short of the per-core fan-out that
# triggers LLM 429 rate-limits / OOM flakes. Override via
# TEST_PROCESSES / --processes.
pabot_default = min(6, _default_processes())
return ["--processes", str(pabot_default)]
@@ -256,9 +260,10 @@ def build(session: nox.Session):
def integration_tests(session: nox.Session):
"""Run Robot Framework integration tests (parallel via pabot).
Defaults to conservative parallelism (<=2 processes) to avoid
resource pressure in CI. Override via PABOT_PROCESSES or by passing
--processes/--processes=N in session arguments.
Defaults to parallelism capped at 6 processes (min(6, cpus)) to avoid
resource pressure / LLM 429 flakes in CI while still using the runner.
Override via TEST_PROCESSES or by passing --processes/--processes=N in
session arguments.
"""
session.install("-e", ".[tests]")
session.env["CLEVERAGENTS_AUTO_APPLY_MIGRATIONS"] = "true"
@@ -346,10 +351,10 @@ def slow_integration_tests(session: nox.Session):
"""Run Robot Framework slow integration tests (parallel via pabot).
Runs all tests tagged ``slow`` that are excluded from the standard
``integration_tests`` session. Defaults to conservative parallelism
(<=2 processes) to avoid resource pressure in CI. Override via
TEST_PROCESSES or by passing --processes/--processes=N in session
arguments.
``integration_tests`` session. Defaults to parallelism capped at 6
processes (min(6, cpus)) to avoid resource pressure / LLM 429 flakes in
CI. Override via TEST_PROCESSES or by passing --processes/--processes=N
in session arguments.
"""
session.install("-e", ".[tests]")
session.env["CLEVERAGENTS_AUTO_APPLY_MIGRATIONS"] = "true"