You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
changelog-gate: package-root testing-conventions.toml demands a fragment it can never warrant #974
internals/checks/src/checks/changelog_gate/decide.py::_is_exempt treats every non-test file under packages/<pkg>/ as source. Since #933 both SDK packages carry a gate config at their root:
packages/python/testing-conventions.toml
packages/ts/testing-conventions.toml
Neither is exempt, so any edit to them — narrowing an [e2e] scope, nudging a coverage floor, adding an exemption — fails changelog-gate unless the author remembers a skip-changelog: line. #971 needed exactly that on both of its commits.
Why these are not source
The distinguishing test the maintainer already applied to READMEs in #932 item 4 is does it ship in the published artifact:
READMEs ship in all three published artifacts (PyPI long-description, npm tarball, crate), which is why release-ci.yml deliberately does not exclude them while it does exclude fragment dirs.
Gate config fails that test in both packages. The maturin wheel carries only the dirsql package, and packages/ts/.npmignore keeps the tarball to the built output — a testing-conventions.toml at the package root reaches no user, so no user-facing change can ever follow from editing one. That puts it with changelog.d/ and e2e-attestations/, both already exempt, rather than with READMEs.
The escape hatch works, but it is the wrong instrument here: skip-changelog: is meant for the occasional no-observable-change PR, and this makes it a standing requirement for a file class that is never changelog-worthy. A forgotten trailer produces a red gate whose fix is a commit-message amend, which is exactly the friction the gate's actionable-error rule exists to avoid.
Proposed change
Add one clause to _is_exempt, alongside the fragment-dir and receipt-dir entries:
Package-root only — a hypothetical testing-conventions.toml nested deeper under a package would not match, and should not.
Worth deciding at the same time whether the sibling repo-tooling configs deserve the same treatment for consistency; they sit outside packages/, so the gate never sees them today and nothing changes either way.
Work involved
Behavior change, so normal red/green: a red colocated test in decide_test.py asserting the path is exempt, pushed and observed red in CI, then the one-line implementation. unit mutation is diff-scoped and will mutate the new clause, so the test needs to assert both directions (the package-root path exempt, a nested or differently-named path not).
Notes
Surfaced in #971 (#933), which introduced the two files. Related but distinct: #944 covers the same files matching putitoutthere's publish globs, which is a release-cost question rather than a gate question — the two want separate fixes in separate places.
Activity
fix(checks): exempt a package-root testing-conventions.toml from the …