Skip to content

fix: add feature-signal detection to ship version bump heuristic#573

Open
claygeo wants to merge 1 commit intogarrytan:mainfrom
claygeo:fix/ship-minor-version-heuristic
Open

fix: add feature-signal detection to ship version bump heuristic#573
claygeo wants to merge 1 commit intogarrytan:mainfrom
claygeo:fix/ship-minor-version-heuristic

Conversation

@claygeo
Copy link
Copy Markdown

@claygeo claygeo commented Mar 27, 2026

Problem

The /ship skill (Step 4: Version bump) uses a line-count-only heuristic:

  • MICRO: < 50 lines
  • PATCH: 50+ lines (auto)
  • MINOR: asks user (but the ask never triggers automatically)

In practice, MINOR is never auto-triggered because every real session exceeds 50 lines, so PATCH is always auto-picked. Over 23 sessions on a real product, features like full health score engines, reports pages, coaching signal layers, and PDF import all shipped as PATCH bumps.

Solution

Add feature-signal detection before the line-count check. If ANY of these signals are detected, the skill asks the user about MINOR instead of auto-picking PATCH:

  • New route/page files (e.g. app/*/page.tsx, pages/*.ts)
  • New DB migration/schema files
  • New test files alongside new source files
  • Branch name starting with feat/
  • 500+ lines changed
  • New modules/packages added

The MICRO and MAJOR thresholds are unchanged. PATCH still auto-picks when there are no feature signals and < 500 lines.

Changes

  • ship/SKILL.md.tmpl — Updated Step 4 auto-decide heuristic
  • ship/SKILL.md — Regenerated from template

Test Plan

  • Run /ship on a branch with feat/ prefix → should ask about MINOR
  • Run /ship on a branch that adds new app/*/page.tsx files → should ask about MINOR
  • Run /ship on a branch with a 30-line config tweak → should auto-pick MICRO
  • Run /ship on a branch with a 60-line bug fix (no feature signals) → should auto-pick PATCH

Closes #527

The version bump auto-decide logic uses only line count (< 50 =
MICRO, 50+ = PATCH) to pick the bump level. MINOR is never
auto-triggered — it only fires when the user is asked, but the ask
never happens because PATCH catches everything above 50 lines.

This caused real feature work (new pages, new engines, new modules)
to ship as PATCH bumps across 23+ sessions.

The fix adds feature-signal detection before the line-count check:
- New route/page files (e.g. app/*/page.tsx, pages/*.ts)
- New DB migration/schema files
- New test files alongside new source files
- Branch name starting with feat/
- 500+ lines changed (large scope)
- New modules/packages added

If ANY signal is detected, the skill ASK the user about MINOR
instead of auto-picking PATCH. This preserves auto-decide for
genuine patches while surfacing the MINOR question for real features.

Closes garrytan#527
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Ship skill: MINOR version never auto-triggers — line-count heuristic insufficient

1 participant