garrytan / garrytan/gstack

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

Open
#527 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
133k
Forks
19.9k
Avg merge
18h 46m
Merged PRs (30d)
26

Description

## Problem

The `/ship` skill (Step 4: Version bump) uses a line-count heuristic to auto-decide bump level:

- **MICRO**: <50 lines changed
- **PATCH**: 50+ lines changed (auto)
- **MINOR**: asks user — "major features or significant architectural changes"
- **MAJOR**: asks user — milestones/breaking changes

In practice, MINOR is never triggered because the heuristic only measures _how much_ changed, not _what kind_ of change it is. Every real session exceeds 50 lines, so PATCH is always auto-picked without prompting.

## Real-world example

Over 23 sessions on a product app (keel), the version went from `0.1.0.0` to `0.1.23.0`. During that time, the following shipped — all as PATCH bumps:

- Full health score engine (7 components, 112 tests)
- Reports/P&L screen (3 tabs, AI narrative)
- Score breakdown page
- Coaching signal detection layer (8 detectors)
- PDF statement import (Claude Vision)
- Accounts management page
- Budget builder

Every one of these warranted a MINOR bump. None was ever asked about.

## Suggestion

Consider a smarter heuristic that triggers the MINOR ask, e.g.:

- Branch name starts with `feat/` or contains a feature identifier
- New route/page files detected in the diff (e.g. `app/*/page.tsx`)
- New database tables or schema files added
- Diff exceeds a higher threshold (e.g. 500+ lines)
- New test files added (signals a meaningful new module)

Any of these would be a better signal than line count alone for "should we ask about MINOR?"

## Context

- gstack v0.12.2.0
- Ship skill Step 4 (line ~1526 in SKILL.md)
- The 4-digit version format is fine — the issue is purely that the auto-decide logic never escalates to MINOR

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.