#351/#357 stopped documentation-only PRs from running the acceptance matrix. They still run the full three-OS test matrix, the cross-compile, and semgrep — roughly 20 minutes of compute to validate a markdown file. #350's original complaint was broader than the half that was fixed.
The trap, recorded so it is not rediscovered: these are required status contexts. A matrix job skipped by a job-level if: never expands its matrix, so the per-leg contexts are never created and the PR becomes permanently unmergeable — that is exactly what #351 shipped and #357 repaired. The working pattern is the one #357 established: let the matrix expand, and put the condition on every step so each leg still reports.
ci.yml's changes job already computes the predicate; this is applying its existing output to more jobs.
#351/#357 stopped documentation-only PRs from running the acceptance matrix. They still run the full three-OS test matrix, the cross-compile, and semgrep — roughly 20 minutes of compute to validate a markdown file. #350's original complaint was broader than the half that was fixed.
The trap, recorded so it is not rediscovered: these are required status contexts. A matrix job skipped by a job-level
if:never expands its matrix, so the per-leg contexts are never created and the PR becomes permanently unmergeable — that is exactly what #351 shipped and #357 repaired. The working pattern is the one #357 established: let the matrix expand, and put the condition on every step so each leg still reports.ci.yml'schangesjob already computes the predicate; this is applying its existing output to more jobs.