You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Internal mypy debt has grown past its recorded budget: 108 errors in 36 files against 106 in 35 #917
Phase 16 S1 wired the public-surface mypy --strict gate and recorded the package-wide typing debt as a budget instead of a blocker: 106 errors across 35 files, measured with mypy 1.20.2 and ./.venv/bin/python -m mypy --ignore-missing-imports forgelm/, with growth past 106 named as the signal to act. That signal has fired, and nothing in CI enforces the budget, which is why the growth went unnoticed.
Condition or budget
"Growth past 106 is the signal to act" — met: the recorded command reports 108 errors in 36 files on 2026-10-09.
State today (re-checked 2026-10-09)
Re-measured on development with the recorded command and mypy 1.20.2: Found 108 errors in 36 files (checked 104 source files).
Related
#748 corrects the stale "47" in the Phase 16 plan (documentation only).
Acceptance criteria
The count is back to 106 or below, or the budget is re-baselined with a written reason.
Growth past the budget fails CI (a ratchet), so the next increase is caught when it happens.
The row is removed from the deferral table and the CHANGELOG names its ID (the table's removal contract).
Recorded in docs/roadmap/risks-and-decisions.md (read at f94595f) and re-checked against the code on 2026-10-09. The row leaves that table only when the fix is on main, the CHANGELOG names its ID and any promised guard exists.
Re-measured on 2026-10-21 with the recorded command (python -m mypy --ignore-missing-imports forgelm/, mypy 1.20.2) and a cold cache (--no-incremental): development reports 109 errors in 35 files. A warm incremental cache reported 108 for the same tree, so the budget command should say which of the two it means; a ratchet has to pin it.
#1046 clears the three errors that forgelm/judge.py contributed (an Any declaration, a re-bound variable, one cast), with no behaviour change. With it the cold count is 106 errors in 34 files, which meets the first acceptance criterion. The ratchet and the removal of the deferral row are still open.
Not counted by the recorded command and not touched: under --strictjudge.py has three more no-any-return findings, two of them in _parse_judge_json, which #1038 rewrites.
Activity
cemililik commentedon Oct 20, 2026
Re-measured on 2026-10-21 with the recorded command (
python -m mypy --ignore-missing-imports forgelm/, mypy 1.20.2) and a cold cache (--no-incremental):developmentreports 109 errors in 35 files. A warm incremental cache reported 108 for the same tree, so the budget command should say which of the two it means; a ratchet has to pin it.#1046 clears the three errors that
forgelm/judge.pycontributed (anAnydeclaration, a re-bound variable, onecast), with no behaviour change. With it the cold count is 106 errors in 34 files, which meets the first acceptance criterion. The ratchet and the removal of the deferral row are still open.Not counted by the recorded command and not touched: under
--strictjudge.pyhas three moreno-any-returnfindings, two of them in_parse_judge_json, which #1038 rewrites.Merge origin/development into fix/917-judge-mypy-budget
Merge origin/development into fix/917-judge-mypy-budget
fix(judge): clear the three mypy errors in judge.py that count agains…