Problem
cli/pyproject.toml runs mypy in strict = true mode (line 51) but then disables it wholesale for 18 legacy modules via a single [[tool.mypy.overrides]] block with ignore_errors = true (lines 57-78). The baseline note (lines 45-48) records "85 errors in 18 legacy modules suppressed"; only localci.core.config and localci.core.models currently pass strict. Because CI enforces types by running mypy localci/ (.github/workflows/ci.yml:62) and pre-commit runs the same check (.pre-commit-config.yaml:34-36), every suppressed module ships with zero type enforcement — including the orchestration core. This issue scopes the cleanup to the non-CLI modules (orchestrator/core/utils) to keep the diff reviewable and avoid churn/conflicts in the CLI layer, which is left for a follow-up.
Acceptance Criteria
Implementation Notes
- The suppression is a single override block in
cli/pyproject.toml (lines 57-78). Delete the in-scope module names from the module = [ ... ] list rather than removing the whole block (the CLI modules must stay).
- In-scope (remove suppression, must type-clean):
localci.core.orchestrator, localci.core.progress, localci.core.queue_builder, localci.core.registry, localci.core.results, localci.core.serialization, localci.core.workflow, localci.utils.docker, localci.utils.resources, localci.utils.yq.
- Out of scope (leave suppressed):
localci.cli.analyze, localci.cli.config, localci.cli.list, localci.cli.logs, localci.cli.run.click_options, localci.cli.run.patcher, localci.cli.run.run_flow, localci.cli.status.
- Start with
localci.core.orchestrator — it is the flagship module and its types will surface the true annotations needed on its collaborators (queue_builder, registry, results, workflow), which reduces churn if done first.
- Gotcha:
localci.utils.resources needs types-psutil (already declared in the dev extra, pyproject.toml:28) to type-clean; ensure the dev environment installs the [dev] extra before running mypy locally.
- Verify with
cd cli && mypy localci/ (the exact CI invocation). Keep strict, warn_redundant_casts, and warn_unused_ignores on.
References
- Eval finding: Test 34 (type-safety) — "Suppressed type errors disable release discipline"
- Related files:
cli/pyproject.toml, .github/workflows/ci.yml, .pre-commit-config.yaml, cli/localci/core/orchestrator.py
Problem
cli/pyproject.tomlruns mypy instrict = truemode (line 51) but then disables it wholesale for 18 legacy modules via a single[[tool.mypy.overrides]]block withignore_errors = true(lines 57-78). The baseline note (lines 45-48) records "85 errors in 18 legacy modules suppressed"; onlylocalci.core.configandlocalci.core.modelscurrently pass strict. Because CI enforces types by runningmypy localci/(.github/workflows/ci.yml:62) and pre-commit runs the same check (.pre-commit-config.yaml:34-36), every suppressed module ships with zero type enforcement — including the orchestration core. This issue scopes the cleanup to the non-CLI modules (orchestrator/core/utils) to keep the diff reviewable and avoid churn/conflicts in the CLI layer, which is left for a follow-up.Acceptance Criteria
localci.core.orchestratoris removed from theignore_errorsoverride list and passesmypyunderstrict = truelocalci.core.progress,localci.core.queue_builder,localci.core.registry,localci.core.results,localci.core.serialization,localci.core.workflow— are removed from the override list and pass strict mypylocalci.utils.docker,localci.utils.resources,localci.utils.yq— are removed from the override list and pass strict mypy (drop the# for localci.utils.resources when it leaves ignore_errorsdev-dep comment caveat inpyproject.toml:28oncetypes-psutilis actually used)localci.cli.*modules remain in the override list (explicitly out of scope) so this PR does not touch CLI typingwarn_unused_ignores = true(pyproject.toml:54) stays green — no leftover# type: ignorecomments that are now redundantImplementation Notes
cli/pyproject.toml(lines 57-78). Delete the in-scope module names from themodule = [ ... ]list rather than removing the whole block (the CLI modules must stay).localci.core.orchestrator,localci.core.progress,localci.core.queue_builder,localci.core.registry,localci.core.results,localci.core.serialization,localci.core.workflow,localci.utils.docker,localci.utils.resources,localci.utils.yq.localci.cli.analyze,localci.cli.config,localci.cli.list,localci.cli.logs,localci.cli.run.click_options,localci.cli.run.patcher,localci.cli.run.run_flow,localci.cli.status.localci.core.orchestrator— it is the flagship module and its types will surface the true annotations needed on its collaborators (queue_builder,registry,results,workflow), which reduces churn if done first.localci.utils.resourcesneedstypes-psutil(already declared in thedevextra,pyproject.toml:28) to type-clean; ensure the dev environment installs the[dev]extra before running mypy locally.cd cli && mypy localci/(the exact CI invocation). Keepstrict,warn_redundant_casts, andwarn_unused_ignoreson.References
cli/pyproject.toml,.github/workflows/ci.yml,.pre-commit-config.yaml,cli/localci/core/orchestrator.py