Severity: 🟡 Medium (performance; thread pool exhaustion)
@query parallel mode has a hard cap of 8 workers (renderer.py:645):
with ThreadPoolExecutor(max_workers=min(len(pending), 8)) as executor:
@services parallel mode (render.parallel_services: True, config.py:25) should have a matching cap. Locate the @services pre-scan/parallel block (likely directives/services.py) and apply max_workers=min(N, cfg.render.parallel_max_workers or 8).
Also add render.parallel_max_workers: 8 to DEFAULT_CONFIG so both @query and @services honor a single tunable.
Acceptance criteria
- Code search: every
ThreadPoolExecutor(...) in the codebase uses the same parallel_max_workers knob.
- Test: setting
parallel_max_workers: 2 caps both @query and @services at 2 concurrent workers.
Severity: 🟡 Medium (performance; thread pool exhaustion)
@queryparallel mode has a hard cap of 8 workers (renderer.py:645):@servicesparallel mode (render.parallel_services: True,config.py:25) should have a matching cap. Locate the @services pre-scan/parallel block (likelydirectives/services.py) and applymax_workers=min(N, cfg.render.parallel_max_workers or 8).Also add
render.parallel_max_workers: 8toDEFAULT_CONFIGso both@queryand@serviceshonor a single tunable.Acceptance criteria
ThreadPoolExecutor(...)in the codebase uses the sameparallel_max_workersknob.parallel_max_workers: 2caps both@queryand@servicesat 2 concurrent workers.