Follow-up to #61 (which wired ruff check into CI). Two deferred pieces:
1. ruff format + re-enable E501
ruff check currently ignores E501 (line length) because 43 of the hits are intentionally long LLM tool/schema description strings a formatter won't split. Adopt ruff format as the code line-length authority (it reformats ~24 files / ~1780-line diff , do it as its own focused commit), then drop the E501 ignore and add ruff format --check to CI.
2. mypy
mypy isn't a dev dependency yet. Adding it surfaces 20 real type errors in 6 files (e.g. agent/monitor.py:415,436 pass a dict where RootCause is expected , Pydantic coerces at runtime but the static type is wrong). Add mypy to the dev extras, fix the 20 errors, and wire mypy src/ into the Python CI job.
Both were split out of #61 to keep that PR focused on making the CI Lint job actually lint.
Follow-up to #61 (which wired
ruff checkinto CI). Two deferred pieces:1. ruff format + re-enable E501
ruff checkcurrently ignores E501 (line length) because 43 of the hits are intentionally long LLM tool/schema description strings a formatter won't split. Adoptruff formatas the code line-length authority (it reformats ~24 files / ~1780-line diff , do it as its own focused commit), then drop theE501ignore and addruff format --checkto CI.2. mypy
mypyisn't a dev dependency yet. Adding it surfaces 20 real type errors in 6 files (e.g.agent/monitor.py:415,436pass adictwhereRootCauseis expected , Pydantic coerces at runtime but the static type is wrong). Addmypyto the dev extras, fix the 20 errors, and wiremypy src/into the Python CI job.Both were split out of #61 to keep that PR focused on making the CI Lint job actually lint.