Skip to content

ci: refine changelog gate to user-facing changes only#701

Merged
Orinks merged 1 commit into
devfrom
feat/changelog-gate-overrides
May 28, 2026
Merged

ci: refine changelog gate to user-facing changes only#701
Orinks merged 1 commit into
devfrom
feat/changelog-gate-overrides

Conversation

@Orinks
Copy link
Copy Markdown
Owner

@Orinks Orinks commented May 28, 2026

Problem

The changelog gate treated every file under src/ as user-facing, so purely internal changes (like the recent 64-bit handle-typing fix in single_instance.py) still demanded a release note. No path rule can perfectly separate user-facing behavior from internal plumbing — the same file holds both at different times — so the fix is a tighter default plus a human override.

Changes

Tighter default

  • Exclude the generated src/accessiweather/weather_gov_api_client/ client from the user-facing set (checked before the src/ prefix).
  • .github/, tests/, docs/, and most of scripts/ were already exempt — unchanged.

Escape hatches (for the internal changes a path list can't classify)

  • PRs: a skip-changelog label skips the Check CHANGELOG entry step via the workflow if: guard. For non-PR events the labels expression is null, so pushes still run the gate.
  • Direct pushes: a Changelog: none / [skip changelog] commit trailer. The gate passes only when every non-merge commit in the range carries the marker, so a marker can't silently exempt a change set that also contains user-facing work.

Tests / docs

  • Unit tests for the generated-client exclusion and the all-commits opt-out rule.
  • Both escape hatches documented in .github/workflows/README.md.
  • skip-changelog label created in the repo.

This PR dogfoods the change: changelog_tools.py, ci.yml, and the tests are all correctly classified as non-user-facing, so it needs no changelog entry of its own.

🤖 Generated with Claude Code

The gate previously treated every file under src/ as user-facing, so purely
internal changes (e.g. handle-typing fixes) still demanded a release note.
Path classification can't perfectly tell user-facing behavior from internal
plumbing, so this adds both a tighter default and a human override:

- Exclude the generated weather_gov_api_client/ from the user-facing set.
- Honor a `skip-changelog` PR label (ci.yml `if:` guard) for internal PRs.
- Honor a `Changelog: none` / `[skip changelog]` commit trailer for direct
  pushes, but only when every non-merge commit in the range carries it, so a
  marker can't mask a user-facing commit.

Adds unit tests for the exclusion and the all-commits opt-out rule, and
documents both escape hatches in the workflow README.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Orinks Orinks merged commit 209ad04 into dev May 28, 2026
3 checks passed
@Orinks Orinks deleted the feat/changelog-gate-overrides branch May 28, 2026 22:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant