Skip to content

skillup plan

Report what each segment's version should be, given the conventional commits that touched it. Changes nothing.

skillup plan [--path <dir>]
Flag Default Meaning
-p, --path . Repository root — the directory holding .claude-plugin/marketplace.json
--output text text or json. Inherited from the root command; plan is the only command that honours it.

Output

One line per segment that is not simply correct:

$ skillup plan --path .
  alpha      0.4.0    -> 0.5.0    (minor, 3 commit(s))
  bravo      0.22.0   ahead of its commits (they warrant 0.22.1) — left alone
  charlie    1.2.0    2 commit(s) since 1.2.0, none releasing — ships to nobody

When every segment is correct it says so, in one line.

The states

State Reported? Meaning
raise yes The manifest is behind. skillup apply will write the new version.
ahead yes The manifest is above what the commits warrant — someone set it deliberately. Left alone.
inert yes Commits touched the segment but none of them release, so it ships to nobody. Reported, not failed on.
satisfied no Releasing commits exist and the manifest is already at the version they warrant.
none no Nothing has touched the segment since its baseline commit.

satisfied and none are both "nothing to do", but they are not the same thing and the JSON keeps them apart: one segment has been bumped for its changes, the other has had no changes.

JSON output

--output json emits the full plan for every segment, including the states the text renderer stays quiet about. This is the interface to script against.

$ skillup plan --path . --output json
[
  {
    "segment": {
      "Name": "phpboyscout-cicd",
      "Dir": "plugins/phpboyscout-cicd"
    },
    "current": "0.8.0",
    "baseline_commit": "c6a366ea2f58c63cb7c170a05fedb476b261990d",
    "commits_considered": 0,
    "bump": "none",
    "next": "0.8.0",
    "action": "none"
  }
]
Field Meaning
segment.Name The segment's name, from the catalogue entry
segment.Dir Its directory, relative to --path
current The version in plugin.json right now
baseline_commit The commit where that version was last changed. Empty if the manifest has no history.
commits_considered How many commits touched the segment since the baseline — all of them, not only the releasing ones
bump major, minor, patch or none — the largest warranted by those commits
next The version bump produces from the baseline
action One of the states above
reasons One line per releasing commit: short SHA, subject, bump. Omitted when empty.

The two keys under segment are capitalised where every other key is lower-snake. That is an inconsistency in the output rather than a convention — match it as written.

Exit codes

Always 0, in every state — including raise. plan reports; check is the one that fails.