Adopt Conventional Commits and make the rules binding - #985
Conversation
CONTRIBUTING.md banned Conventional Commits outright. Its load-bearing argument was that nothing here generates from commit types, because release notes were hand-written in CHANGELOG.md. Notes are moving to generated, so that premise goes. Subjects become <type>(<scope>): <description>, keeping the component as the scope. The bans that were right are kept verbatim: ticket IDs, status tags, filenames in subjects. A short note records that the policy changed so it is not re-litigated from older git log entries. Co-Authored-By is now banned explicitly, on any artifact, whoever wrote the change. AGENTS.md states that the rules bind humans and agents equally and that a violating pull request is declined rather than fixed in review. Its inline copy of the prefix rules is gone — a second copy is one that goes stale. CL-7880
5b7eb8b to
9f35b5d
Compare
Flipping CONTRIBUTING.md alone would have left the repo fighting itself. The style skill — loaded by builder and other agents — banned subject prefixes outright and listed `feat: add retry logic` as a bad example, so agents would keep writing subjects the new rule declines. The review skill would then flag the compliant ones as prefix violations. Updated together: the style skill now specifies the type/scope form and keeps the ticket-ID, status-tag and filename bans; the review skill flags a missing or unrecognized type instead of flagging types themselves; the implement skill and the builder director prompt stop telling workers the title is a plain-English sentence; the PR template matches. CONTRIBUTING.md also states the consequence directly, so the README can point at it rather than making a claim the source of truth does not. CL-7880
|
Audit: Needs-work, with the three should-fix items addressed on this branch where they belong. Fit: making Conventional Commits binding is sound now that its premise holds — #986 (merged) generates release notes from merged PRs, so commit types finally drive something. Rule keeps the good parts of the old style (imperative subject, ticket/filename bans) and only adds type+scope. Fix notes (c7ceaa2): (1) the release forms said |
Closes CL-7880.
Summary
CONTRIBUTING.mdbanned Conventional Commits. This reverses that, and says so in the file rather than quietly flipping it.The banned-prefix list named every type, and a dedicated section argued the case. Its first and load-bearing argument was:
That premise is what #984 removes. Once notes are generated from merged pull requests, "we generate nothing from commit types" stops being true here.
What changed
Subjects become
<type>(<scope>): <description>, with the component as the scope —executor: add retrybecomesfeat(executor): add retry. Types, breaking-change forms, and the release/release-note forms are spelled out.The bans that were right are kept verbatim: ticket IDs, status tags, filenames in subjects, abbreviations. The old rule's other arguments were answered rather than ignored — a scoped subject still stands alone years later, which was the real requirement.
Co-Authored-Byis now banned explicitly, on any artifact, whoever or whatever wrote the change.Enforcement
AGENTS.mdpreviously said "MUST followCONTRIBUTING.md" with no consequence attached. It now states the rules bind humans and agents equally and that a violating pull request is declined, not fixed in review.Its inline copy of the prefix rules is deleted rather than updated. That copy is exactly how the two files could disagree, and it would have been stale the moment this landed.
Two things for the reviewer
A decision is still open. Whether "declined" is a review norm or a CI check on the PR title. Left as an explicit Outcome item on the issue — a norm nobody enforces is how the current rule ended up contradicted in practice.
The open branches were rewritten to comply with the rule as it stands. #979, #980, #981, #986, #987, #988 and this PR all originally carried Conventional Commits subjects, against
CONTRIBUTING.mdas written today. Rather than merge them under a rule they broke, all eight commits were rewritten to plain imperative subjects and the PR titles with them — trees verified byte-identical to before the rewrite.So nothing is blocked on merge order, and
git logstays consistent either way. Once this lands, new work uses the scoped form; everything before it reads as it always did.Testing
Docs only.
bun run lintandtsc --noEmitclean via the pre-commit gate.