fix(skills): treat internal-scope feat commits as patch in /release#642
fix(skills): treat internal-scope feat commits as patch in /release#642carlos-alm merged 3 commits intomainfrom
Conversation
The release skill's auto-detect logic treated any feat: commit as a minor bump. Internal dev tooling scopes (titan, skills, hooks, ci, bench, dogfood, etc.) are not user-facing features and should not trigger a minor version bump. Add an explicit exclusion list so these scopes count as patch.
|
Claude finished @carlos-alm's task —— View job Reviewing PR #642Tasks:
Root Cause AnalysisProblem Being Solved: The Why This Approach: Adding an explicit exclusion list for internal development scopes is the right approach. It preserves the semantic meaning of conventional commits while recognizing that not all "features" are customer-facing. The approach is:
Risk Assessment: ✅ Low Risk - This is a documentation/process change to an internal skill, not production code. Configuration Change Detection✅ No configuration relaxation - This change actually makes the version detection logic MORE strict and precise, not more permissive. Test Integrity✅ No test changes - This is purely documentation for an internal Claude skill. Code QualityThe changes are well-structured:
Minor suggestion: The scope list could be alphabetized for easier maintenance, but current order is acceptable. Backlog Compliance
Critical ConcernsNone. This is a straightforward, well-reasoned fix to an internal process. Final Recommendation
Minor improvement: Consider alphabetizing the scope list for easier maintenance in future updates. |
Greptile SummaryThis PR fixes the Confidence Score: 5/5Safe to merge — the fix is correct, targeted, and prior review concerns are fully resolved. Single-file documentation/instruction change with no code execution risk. The bump logic is sound: bare feat: → minor, feat(internal-scope): → patch, feat(user-facing-scope): → minor. Edge cases (breaking-change takes priority, mixed batches behave correctly) are all handled. Both prior review threads have been addressed. The only remaining item is a P2 style nit on the minor-bump example output string. No files require special attention. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Scan commits since last tag] --> B{Any BREAKING CHANGE\nor ! suffix?}
B -- Yes --> MAJOR[Bump: MAJOR]
B -- No --> C{Any feat commit?}
C -- No --> PATCH[Bump: PATCH]
C -- Yes --> D{feat with scope?}
D -- No bare feat: --> MINOR[Bump: MINOR]
D -- Yes feat scope: --> E{Scope in internal list?\narchitect, bench, ci, claude,\ndeps-audit, dogfood, hooks,\nhousekeep, release, review,\nskills, test-health, titan}
E -- Yes internal scope --> PATCH
E -- No user-facing scope --> MINOR
Reviews (2): Last reviewed commit: "Merge branch 'main' into fix/release-ski..." | Re-trigger Greptile |
.claude/skills/release/SKILL.md
Outdated
| |-----------|------| | ||
| | Any commit has a `BREAKING CHANGE:` or `BREAKING-CHANGE:` footer, **or** uses the `!` suffix (e.g. `feat!:`, `fix!:`, `refactor!:`) | **major** | | ||
| | Any commit uses `feat:` or `feat(scope):` | **minor** | | ||
| | Any commit uses `feat:` or `feat(scope):` **with a user-facing scope** | **minor** | |
There was a problem hiding this comment.
Qualifier ambiguity for bare
feat: commits
The updated table cell reads: Any commit uses \feat:` or `feat(scope):` with a user-facing scope. The trailing qualifier can be read as applying to both alternatives — implying that even a bare feat:commit (no scope) needs a "user-facing scope" to trigger minor. The intent is clearly that barefeat:is always minor; onlyfeat(scope):` is filtered by the exclusion list.
A small reword prevents the AI from mis-reading this:
| | Any commit uses `feat:` or `feat(scope):` **with a user-facing scope** | **minor** | | |
| | Any `feat:` commit **or** any `feat(scope):` where the scope is **not** in the internal list below | **minor** | |
There was a problem hiding this comment.
Fixed. Reworded the table row to: "Any feat: commit or any feat(scope): where the scope is not in the internal list below". This removes the ambiguity — bare feat: is clearly always minor.
.claude/skills/release/SKILL.md
Outdated
|
|
||
| **Internal scopes — treat as patch, not minor:** The following scopes represent internal developer tooling and infrastructure, not user-facing features. A `feat:` commit with one of these scopes counts as a **patch**, not a minor bump: | ||
|
|
||
| `titan`, `skills`, `hooks`, `claude`, `ci`, `bench`, `dogfood`, `release`, `housekeep`, `review`, `deps-audit`, `test-health`, `architect` |
There was a problem hiding this comment.
claude scope missing from PR description
The added scope list includes claude (between hooks and ci), but the PR description's summary omits it. If claude is intentionally internal, the PR description should be corrected for traceability; if it was accidentally added, it should be removed from the skill.
| `titan`, `skills`, `hooks`, `claude`, `ci`, `bench`, `dogfood`, `release`, `housekeep`, `review`, `deps-audit`, `test-health`, `architect` | |
| `titan`, `skills`, `hooks`, `ci`, `bench`, `dogfood`, `release`, `housekeep`, `review`, `deps-audit`, `test-health`, `architect` |
(Remove claude if it wasn't meant to be included, or leave as-is and update the PR description.)
There was a problem hiding this comment.
The \ scope is intentional — commits like \ are internal tooling, not user-facing features. I've kept it in the list and alphabetized all scopes for easier maintenance (addressing Claude bot's suggestion as well).
|
Addressed the outside-diff comment about missing patch-from-internal-feat example (lines 63-64). Added a second example:
Also addressed Claude bot's suggestion to alphabetize the scope list. All three Greptile P2 items + Claude's minor suggestion are now resolved in commit 4d9c3ac. |
|
Addressed the remaining nit from Greptile's re-review: the minor-bump example on line 64 now reads \ instead of , which correctly covers both bare \ and scoped \ triggers. Fixed in 2f58d2d. |
Summary
/releaseskill's auto-detect logic treated anyfeat:commit as a minor bumptitan,skills,hooks,ci,bench,dogfood,release,housekeep,review,deps-audit,test-health,architect) are not user-facing featuresfeat(titan):etc. count as patch, not minorThis caused PR #639 to incorrectly bump to v3.5.0 instead of v3.4.1 (corrected in #641).
Test plan
/releasewith no version arg on a branch containingfeat(titan):commits — should detect patch, not minor