Harden PyPI and GitHub release trust - #79
Conversation
…nly flow The hardened flow creates the GitHub release with the workflow's own GITHUB_TOKEN, and events raised by that token do not trigger other workflows — so docker.yml and release-corpus.yml would silently never run for a release. docker.yml already supports dispatch-with-tag; give release-corpus.yml the same tag input (verify at the tag, build the tag's tree, upload to the release), and update the release checklist and changelog entry to document the dispatch sequence. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The blocking `npm audit --audit-level=high` step in `make a11y` began failing on 2026-07-31 when this advisory (DoS via unbounded expansion in brace-expansion <1.1.17) was published against the locked transitive dependency — unrelated to this branch's changes, and it would fail any fresh CI run on main too. Lockfile-only bump via `npm audit fix`; `make a11y` (pa11y-ci, both surfaces) verified green locally after. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
MERGE-READY — draft — user must mark ready & merge. Verified 2026-07-31 at head c8f5b6e. CI evidence: all 15 checks pass at c8f5b6e (run 30672798xxx series; e.g. Does not itself trigger a release: the diff removes the Remediations pushed on this branch:
Local gates at c8f5b6e: ruff check/format, mypy, pytest (589 passed, 91.64% ≥ 90% coverage), docs-check, contract-check, i18n-check, pip-audit (clean), gitleaks (clean), Hold note: merging this PR is safe under the v0.9.0 hold — the v0.9.0 release itself remains held on upstream MobilityData/transit-operational-data-standard#156 (verified still OPEN today). Do not tag or dispatch a release; the first live exercise of this hardened flow should wait for the hold to clear, and release tags are human-only. |
…trust-local # Conflicts: # .github/workflows/pypi-publish.yml
Summary
Validation