actionlint.yml and skill-docs.yml trigger on both push and pull_request
but declared no concurrency, so a same-repo PR branch update left stale
duplicate Workflow Lint / Skill Docs Freshness runs queued for superseded
commits. The heavier workflows (evals, windows-free-tests, make-pdf-gate,
version-gate, pr-title-sync) already cancel superseded runs.
Add a concurrency group with cancel-in-progress: true to both, keyed on
github.head_ref || github.ref_name (head_ref for pull_request, ref_name
as the push fallback). Add test/workflow-concurrency.test.ts, a static
gate-tier tripwire that fails if any push+pull_request workflow ships
without cancel-in-progress.
Fixes#2046
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>