Skip to content

ci: enforce conventional PR titles + author guidance - #39

Merged
pmaxhogan merged 1 commit into
mainfrom
ci/enforce-conventional-pr-titles
Jun 26, 2026
Merged

pmaxhogan merged 1 commit into
mainfrom
ci/enforce-conventional-pr-titles

Conversation

@pmaxhogan

Copy link
Copy Markdown
Owner

Why

This repo squash-merges and the squash subject is the PR title, which release-please parses as a Conventional Commit. A non-conventional title is silently dropped from the changelog - that's why #37 ("Comprehensive UI/UX overhaul ...") never made it into the 0.3.0 notes (the release-please step succeeded; the parse error was a non-fatal warning).

#37 itself has been backfilled to the 0.3.0 release PR (#19) via an empty feat: commit, so this PR is purely the going-forward guardrail.

What

  • .github/workflows/pr-title.yml - amannn/action-semantic-pull-request validates the PR title on opened/edited/synchronize/reopened. Job name Validate PR title; to be added to the main protection ruleset's required status checks so a bad title blocks merge.
  • CLAUDE.md (new, repo-level) - tells Claude to always title PRs as Conventional Commits, documents the squash -> release-please flow, allowed types, breaking-change syntax, and the empty-commit backfill recovery.
  • Repo setting flipped to squash = "Pull request title and description" so the linted PR title is authoritative for every PR (single-commit PRs no longer fall back to the lone commit message).

This PR's own title is the dogfood: the new check should run and pass on it.

🤖 Generated with Claude Code

Add a required PR-title check and repo CLAUDE.md so PR titles (which become
the squash commit subject release-please parses) are valid Conventional
Commits. See #37: a non-conventional squash subject was silently dropped from
the changelog.

- .github/workflows/pr-title.yml: amannn/action-semantic-pull-request gate
  (job "Validate PR title"), to be added to the main protection ruleset.
- CLAUDE.md: conventional-PR-title rules + release-please/backfill guidance.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017GadVxaYAAY1Q5tRMNucrM
@pmaxhogan pmaxhogan changed the title ci: enforce conventional PR titles + author guidance Comprehensive bad title with no type Jun 26, 2026
@pmaxhogan pmaxhogan changed the title Comprehensive bad title with no type ci: enforce conventional PR titles + author guidance Jun 26, 2026
@pmaxhogan
pmaxhogan merged commit 685fcf1 into main Jun 26, 2026
19 of 20 checks passed
@pmaxhogan
pmaxhogan deleted the ci/enforce-conventional-pr-titles branch June 26, 2026 14:57
@github-actions

Copy link
Copy Markdown
Contributor

Coverage

Area main this PR delta
Rust (lib crates) 76.57% 76.57% +0.00 (OK)
UI (vue/ts) 86.94% 86.94% +0.00 (OK)

Gate: passed - no coverage regression (epsilon 0.1 pp).

pmaxhogan added a commit that referenced this pull request Jun 26, 2026
…omment (#42)

Follow-up polish from the review of the PR-title enforcement work (the
gate itself shipped in #39; v0.3.0 is already released). No behavior
change - docs + one workflow comment.

## Changes
- **CLAUDE.md**
- Changelog-visible types by default are
`feat`/`fix`/`perf`/**`revert`**/**`deps`**, not just
`feat`/`fix`/`perf`.
- Warn that titling a real change with a *hidden* type
(`chore:`/`docs:`/`ci:`/...) passes the title gate but still produces no
changelog entry / no version bump - the #37 "silently dropped" failure,
self-inflicted. Pick the accurate type.
- State that a breaking change pre-1.0 bumps **minor** (0.x.0), not
major (`bump-minor-pre-major`).
- Note squash is the only enabled merge method (why branch commit
messages needn't be conventional).
- **`.github/workflows/release-please.yml`** - correct the stale
comment: `RELEASE_PLEASE_TOKEN` *is* configured, which is what lets
`pull_request` checks (incl. the `Validate PR title` gate) run on the
release PR despite GitHub's `GITHUB_TOKEN` recursion guard.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
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