Skip to content

Commit 1cf523b

Browse files
committed
Update the layers that enforce the commit rule, not just the doc
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
1 parent 9f35b5d commit 1cf523b

6 files changed

Lines changed: 40 additions & 19 deletions

File tree

‎.github/PULL_REQUEST_TEMPLATE.md‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Fixes #123
1818
Partial work: Related to CL-1234
1919
No tracker: delete this comment block and leave no magic-word line.
2020

21-
Do not put CL-… or #N in the PR title. Commit subjects stay plain English
22-
with no ticket IDs — see CONTRIBUTING.md.
21+
Do not put CL-… or #N in the PR title. Commit subjects are Conventional
22+
Commits — <type>(<scope>): <description> — with no ticket IDs. See
23+
CONTRIBUTING.md.
2324
-->

‎CONTRIBUTING.md‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,9 @@ hand, not for the person reviewing this PR today.
135135

136136
## Pull requests
137137

138+
These rules bind humans and agents alike. **A pull request that does not follow
139+
them will be declined** rather than fixed in review.
140+
138141
### Scope (MUST)
139142

140143
1. One concern per PR. See scope discipline in `AGENTS.md`.

‎plugins/corbits-skills/skills/implement/SKILL.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ Run `make` (or the project's equivalent full pipeline: format, lint, build, test
113113

114114
Update `activeForm` to "Committing: {subject}".
115115

116-
Create the commit. Follow the commit message conventions from the `style` skill. Include the test in the same unit of work as the implementation — same commit when committing — one logical unit — and update the docs when the commit changes documented behavior. Worker-chain branch/PR convention: branch name carries the issue id, the PR body ends with `Fixes CL-…` and carries no AI-attribution lines (CONTRIBUTING: title stays a plain-English sentence, body is Summary/Verification).
116+
Create the commit. Follow the commit message conventions from the `style` skill. Include the test in the same unit of work as the implementation — same commit when committing — one logical unit — and update the docs when the commit changes documented behavior. Worker-chain branch/PR convention: branch name carries the issue id, the PR body ends with `Fixes CL-…` and carries no AI-attribution lines (CONTRIBUTING: title is a Conventional Commits subject, body is Summary/Verification).
117117

118118
### Step 5: Critique Loop
119119

‎plugins/corbits-skills/skills/review/SKILL.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ git log <base>..HEAD --format='%s'
257257

258258
Scan for:
259259

260-
- **Prefix violations.** Any subject starting with a `word:`, `[tag]`, or `(scope)` pattern. Includes Conventional Commits (`feat:`, `fix:`), component or scope prefixes (`Anthropic adapter:`, `mm:`, `[X86]`), ticket IDs (`INTR-79:`), and status tags (`WIP:`). Project convention is plain English sentences; any prefix is a violation regardless of how idiomatic it looks in other ecosystems.
260+
- **Subject-form violations.** Project convention is Conventional Commits: `<type>(<scope>): <description>` with type from `feat`, `fix`, `perf`, `refactor`, `test`, `docs`, `build`, `ci`, `chore`, `style`. Flag a subject with no type (`Anthropic adapter: handle 429s`, `Add retry logic`), an unrecognized type, a ticket ID (`INTR-79:`), or a status tag (`WIP:`, `[urgent]`). Do **not** flag `feat:`/`fix:`-style prefixes themselves — those are the convention.
261261
- **Filename or path references.** Tokens that look like file paths or extensions (`server.ts`, `INFERENCE.md`, `src/foo/bar.py`). The diff lists what changed; subjects describe the change, not the file.
262262
- **Trailing punctuation.** Subjects ending with `.`, `!`, or `?`.
263263
- **Vague subjects.** "Update code," "Fix bug," "Misc changes," "Address review."

‎plugins/corbits-skills/skills/style/SKILL.md‎

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -104,37 +104,54 @@ git log origin/main --format='%s' | head -20
104104

105105
The existing commits document the project's actual subject convention — verb tense, level of detail, voice, capitalization. Match what is there.
106106

107-
The project's log can override the no-prefix rule below, but only when the recent history is **predominantly** prefixed in a single consistent convention — i.e., the prefix is the obvious shape of the last ~20 commits, not a minority pattern visible in a few. Mixed signals fall through to the no-prefix rule; tie goes to no prefix.
107+
**Conventional Commits.** Summary lines follow
108+
[Conventional Commits 1.0.0](https://www.conventionalcommits.org/en/v1.0.0/):
108109

109-
**No subject prefixes.** Summary lines are plain English sentences that start with a verb and describe the change directly. Do not prefix the subject with anything — no tag, no scope, no category, no ticket ID, no severity marker. This is a flat rule across every prefix convention, including:
110+
```text
111+
<type>(<scope>): <description>
112+
```
113+
114+
- **Type** — one of `feat`, `fix`, `perf`, `refactor`, `test`, `docs`, `build`,
115+
`ci`, `chore`, `style`
116+
- **Scope** — the component the change lives in. Omit only when the change
117+
genuinely spans the whole project
118+
- **Description** — plain English, imperative, starts with a verb, describes
119+
the change directly
120+
- **Breaking changes** — `!` after the type/scope, or a `BREAKING CHANGE:`
121+
footer
122+
123+
Everything after the colon still obeys the rules below: no abbreviations, no
124+
trailing punctuation, no filenames, self-contained.
125+
126+
**Still banned as subject prefixes**, before or instead of the type:
110127

111-
- Conventional Commits: `feat:`, `fix:`, `chore:`, `docs:`, `refactor:`, `test:`
112-
- Scope or component prefixes: `Anthropic adapter:`, `mm:`, `[X86]`, `drivers/net:`, `frontend:`
113128
- Ticket IDs: `INTR-79:`, `JIRA-1234:`, `#456:`
114129
- Status or severity tags: `WIP:`, `[urgent]`, `(security):`
115-
116-
Several of these patterns are widespread in well-known projects (Linux kernel, LLVM, Conventional-Commits-adopting projects) and feel idiomatic from sheer exposure. They are still banned here. Familiarity is not a justification.
130+
- Bare component prefixes with no type: `Anthropic adapter:`, `mm:`, `[X86]`,
131+
`drivers/net:`, `frontend:` — the component belongs in the scope, so
132+
`mm: fix leak` becomes `fix(mm): fix leak`
117133

118134
Summary lines also use no abbreviations and do not end with punctuation.
119135

120136
**Good examples:**
121137

122138
```
123-
Add retry logic for failed network requests
124-
Fix race condition in transaction verification
125-
Document API response format
139+
feat(executor): add retry logic for failed network requests
140+
fix(inference): resolve race condition in transaction verification
141+
docs(api): document response format
142+
perf(glob): stop rescanning ignored directories
126143
```
127144

128145
**Bad examples:**
129146

130147
```
131-
feat: add retry logic (Conventional Commits prefix)
132-
Anthropic adapter: handle 429s (component-scope prefix)
148+
Add retry logic (no type or scope)
149+
feat: add retry logic (no scope, and says nothing specific)
150+
Anthropic adapter: handle 429s (bare component, no type)
133151
INTR-79: add retry logic (ticket-ID prefix)
134152
[WIP] refactor the parser (status tag)
135-
Update code (too vague)
136-
Fix bug in server.ts (filename in subject)
137-
Document INFERENCE.md updates (filename in subject)
153+
chore: update code (too vague)
154+
fix: bug in server.ts (filename in subject)
138155
```
139156

140157
**Self-contained:**

‎src/agent/directors/builder/package.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ For implementation work, run the repository-defined typecheck command and releva
8181

8282
**Don't shortcut verify.** The value is in the discipline. Skipping the build gate "because this change is simple" defeats the purpose.
8383

84-
**Keep units focused.** Deliver a working tree that satisfies the brief and report. Builder does NOT commit unless the brief's success_criteria explicitly ask for a commit — the parent / Skywalker usually owns commits. Prefer: working tree + report envelope. Worker-chain branch/PR convention for the parent's handoff: branch name carries the issue id, the PR body ends with \`Fixes CL-…\` and carries no AI-attribution lines (CONTRIBUTING: title stays a plain-English sentence, body is Summary/Verification only).
84+
**Keep units focused.** Deliver a working tree that satisfies the brief and report. Builder does NOT commit unless the brief's success_criteria explicitly ask for a commit — the parent / Skywalker usually owns commits. Prefer: working tree + report envelope. Worker-chain branch/PR convention for the parent's handoff: branch name carries the issue id, the PR body ends with \`Fixes CL-…\` and carries no AI-attribution lines (CONTRIBUTING: title is a Conventional Commits subject, body is Summary/Verification only).
8585

8686
**Discovered extra work** belongs under Blockers / Findings for a future unit — finish the current brief first.
8787

0 commit comments

Comments
 (0)