docs(repo): record that the merged subject must be the validated one - #69
Merged
Conversation
You own some of the paths this pull request changes@justinmerrell, this pull request touches paths you are a code owner for. Your authorship waives the code-owner review requirement — GitHub cannot request a review from a pull request's author — so nobody is automatically notified about these changes:
Double-check they are intentional. If you want a second pair of eyes, request a review manually. (Automated notice from the codeowners-notice workflow — ADR 0015.) |
`squash_merge_commit_title` was GitHub's default, `COMMIT_OR_PR_TITLE`, under which a pull request with exactly one commit lands that commit's subject rather than the title `Conventional PR title` validated. Normalising the title did nothing about Dependabot's commit message, so #67 landed on main as `build(deps-dev): Bump the tooling group across 1 directory with 5 updates` after being validated as `bump` — ADR 0016 decision 3 was true of every pull request and false of every merge. It was never only the bot's problem. Any single-commit pull request landed a subject that only the local commit-msg hook had seen, and that hook checks the type, not the case. The setting is now PR_TITLE. Being a repository setting rather than a ruleset field, nothing in .github/rulesets/ can carry it, so it is recorded as invariant 7 in RULESETS.md — with the command to verify it, alongside the two other invariants that are only visible against live GitHub state. Signed-off-by: Justin Merrell <merrelljustin@gmail.com>
justinmerrell
force-pushed
the
docs/squash-title-invariant
branch
from
August 25, 2026 17:17
df25a28 to
a117779
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The setting change is already applied; this records it where a reader will find
it. This one touches
.github/rulesets/, an owned path — but you own it, soauthorship waives the requirement and the notice workflow posted the sticky
comment instead. Both halves of ADR 0015 behaving as designed.
What was wrong
squash_merge_commit_titlewas GitHub's default,COMMIT_OR_PR_TITLE. Underthat, a pull request with exactly one commit lands that commit's subject
rather than the title
Conventional PR titlevalidated. Normalising the PRtitle does nothing about Dependabot's commit message, which stays capitalised.
#67 is the proof, already on
main:ADR 0016 decision 3 was therefore true of every pull request and false of every
merge.
It was never only the bot's problem. Any single-commit pull request landed a
subject that only the local
commit-msghook had seen, and that hook checksthe type, not the case — so
feat(component): Add restartPolicywould sailthrough from a human too.
What changed
squash_merge_commit_titleis nowPR_TITLE, so the string CI validates andthe string that reaches
mainare the same string, for everyone.Being a repository setting rather than a ruleset field, nothing in
.github/rulesets/can carry it — so it joins invariants 5 and 6 as one thatis only visible against live GitHub state, with the command to verify it.
ADR 0016 gains it as decision 4.
Checklist
git commit -s)task ci:lintpasses locally