Once these are in, we can make CI to fail when Ty check fails.
- #4851 —
https://github.com/leo-editor/leo-editor/pull/4851 — ty diagnostics 112 → 22 (rest are deprecation warnings). Mostly type annotations and real-bug fixes found along the way, plus removal of dead `p.archive()`. Also swaps ~26 per-line `# ty: ignore[invalid-method-override]` comments on Qt overrides for one global rule in `ty.toml` (Qt stub param names like `a0`/`a1` never match ours, not real Liskov issues).
- #4853 —
https://github.com/leo-editor/leo-editor/pull/4853 — replaces remaining deprecated stdlib calls (`os.system`/`os.spawn*`/`os.popen`, `codecs.open`, `Thread.setDaemon`) with `subprocess`/`open`/`.daemon`. Clears ty's last 22 diagnostics.
CI/mypy/ty/ruff clean on both. No manual testing done — worth checking:
- #4851: undo/redo, headline/body edits, tree redraw after headline change, graphcanvas.
- #4853: gitarchive, vim/xemacs bridges, open_shell, screenshots, viewrendered's PlantUML.