From b95b9eb1649d47bba2e2cf11ce1accba8fa88c31 Mon Sep 17 00:00:00 2001 From: carlos-alm <127798846+carlos-alm@users.noreply.github.com> Date: Thu, 26 Mar 2026 17:27:28 -0600 Subject: [PATCH 1/2] fix(skills): treat internal-scope feat commits as patch in /release 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/skills/release/SKILL.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.claude/skills/release/SKILL.md b/.claude/skills/release/SKILL.md index 4cae4656..68e234c6 100644 --- a/.claude/skills/release/SKILL.md +++ b/.claude/skills/release/SKILL.md @@ -46,9 +46,15 @@ Scan **every commit message** between the last tag and HEAD. Apply these rules i | Condition | Bump | |-----------|------| | 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** | | Everything else (`fix:`, `refactor:`, `perf:`, `chore:`, `docs:`, `test:`, `ci:`, etc.) | **patch** | +**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` + +For example, `feat(titan): first full pipeline run` is internal tooling — patch. But `feat(cfg): control-flow graph generation` is user-facing — minor. + Given the current version `MAJOR.MINOR.PATCH` from `package.json`, compute the new version: - **major** → `(MAJOR+1).0.0` - **minor** → `MAJOR.(MINOR+1).0` From 4d9c3ace8892975958d5fccc7b51c973dc5d58df Mon Sep 17 00:00:00 2001 From: carlos-alm <127798846+carlos-alm@users.noreply.github.com> Date: Thu, 26 Mar 2026 19:42:53 -0600 Subject: [PATCH 2/2] fix(skills): clarify minor-bump wording, alphabetize scopes, add patch example (#642) --- .claude/skills/release/SKILL.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.claude/skills/release/SKILL.md b/.claude/skills/release/SKILL.md index 68e234c6..91fcdbf7 100644 --- a/.claude/skills/release/SKILL.md +++ b/.claude/skills/release/SKILL.md @@ -46,12 +46,12 @@ Scan **every commit message** between the last tag and HEAD. Apply these rules i | Condition | Bump | |-----------|------| | 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):` **with a user-facing scope** | **minor** | +| Any `feat:` commit **or** any `feat(scope):` where the scope is **not** in the internal list below | **minor** | | Everything else (`fix:`, `refactor:`, `perf:`, `chore:`, `docs:`, `test:`, `ci:`, etc.) | **patch** | **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` +`architect`, `bench`, `ci`, `claude`, `deps-audit`, `dogfood`, `hooks`, `housekeep`, `release`, `review`, `skills`, `test-health`, `titan` For example, `feat(titan): first full pipeline run` is internal tooling — patch. But `feat(cfg): control-flow graph generation` is user-facing — minor. @@ -63,6 +63,8 @@ Given the current version `MAJOR.MINOR.PATCH` from `package.json`, compute the n Print the detected bump reason and the resolved version, e.g.: > Detected **minor** bump (found `feat:` commits). Version: 3.1.0 → **3.2.0** +> Detected **patch** bump (all `feat` commits use internal scopes: `titan`, `skills`). Version: 3.4.0 → **3.4.1** + Use the resolved version as `VERSION` for all subsequent steps. If `$ARGUMENTS` was provided, use it directly as `VERSION`.