build(check): parallelize the suite and lint workflows and Python (#302)

`make check` ran as one sequential recipe, so a full run took about seven
minutes at 8% CPU on a 16-core machine: most `tests/test_*.py` modules start
their own qmltestrunner, and they waited for each other. Every check is now its
own target, the Python suite is one target per module, and `make check` opts
into `-j$(JOBS)` with `--output-sync=target`. The same suite now finishes in
138s locally. Each target is also usable on its own for a narrow iteration
loop, which AGENTS.md already asked for without providing a command.

Add two checks that report findings without reformatting anything:
`check-workflows` runs actionlint over `.github/workflows`, and
`check-python-lint` runs pyflakes over `scripts` and `tests`. Both are clean on
the current tree. Both skip with a message when their tool is absent, matching
the existing appstream behavior, and CI installs both: pyflakes from the pinned
APT indexes, actionlint from its official release pinned by version and SHA-256
because Ubuntu 24.04 has no package for it.

`tests/test_check_targets.py` keeps the new target list honest: a check script
or a defined target that never reaches CHECK_TARGETS now fails the suite.

qmlformat stays out: 45 of 48 QML files predate it, so adopting it would
rewrite the tree and invalidate the literal source fragments that the parity
and security checks assert.

Documentation impact: updated AGENTS.md, CONTRIBUTING.md, the development guide
(checkout requirements, regression checks, CI dependency pinning), and the
changelog under Unreleased, since contributors' supported workflow changes.
TODO.md tracks no check-suite work and is unaffected.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
1cb4c35039Simone committed on 9/20/2026, 11:52:10 PM· committed by GitHubparent7f2ab79
7 files changedLine totals unavailable