Skip to content

skillup check

The CI gate. Exits non-zero when a segment's version is behind what its commits warrant, or when the catalogue and the segments on disk disagree.

skillup check [--path <dir>]
Flag Default Meaning
-p, --path . Repository root

Output

Names the segment, the version it should be, and the commits that warrant it — then the two commands that fix it:

$ skillup check --path .
  my-segment               is 0.3.0 but its commits warrant 0.4.0 (minor)
      a1b2c3d4 feat(my-segment): add a thing (minor)

  To fix, on your branch:

      skillup apply --path .
      git add -u && git commit --amend --no-edit   # or a new commit

  The version is what ships a segment: both harnesses cache by
  <marketplace>/<plugin>/<version> and neither resolves a git ref, so a
  version that does not move withholds your change from every consumer.

ERRO a segment's version is behind what its commits warrant hints="run `skillup apply` and commit the result alongside your change; a version that does not move withholds the change from every consumer"

Segment names are padded to 24 characters, and only releasing commits are listed underneath — a chore: that touched the segment is counted but not named.

The guidance goes to stdout, above the error. In a CI log the last line is a red ERRO, and whoever scrolls to it wants an instruction rather than a diagnosis.

Consistency

check also reports disagreements between marketplace.json and the segments on disk. All of them exit non-zero, and they are reported before any version finding — a segment nobody can install is a worse problem than one that is merely behind.

Problem Message Why it matters
Catalogue version disagrees with plugin.json catalogue says 0.9.0 but plugin.json says 0.3.0 — the catalogue wins for resolution, so consumers get 0.9.0 The catalogue wins, so plugin.json is not the answer consumers get
Catalogue version is not semver catalogue declares version "not-semver", which is not semver Nothing can resolve it
Segment on disk the catalogue never lists present on disk but absent from marketplace.json — nobody can install it Nobody can install it

The catalogue's version field is optional. Where an entry omits it there is nothing to disagree with, and only plugin.json matters.

The unlisted-segment scan looks in <path>/plugins/ specifically, and only counts directories containing .claude-plugin/plugin.json. A marketplace that keeps its segments somewhere else gets no finding here.

A missing directory is an error, not a finding

A catalogue entry whose source points at a directory that is not there does not appear in the table above. It aborts the run before the consistency pass is reached:

$ skillup check --path .
ERRO reading plugins/ghost/.claude-plugin/plugin.json: open plugins/ghost/.claude-plugin/plugin.json: no such file or directory

Still exit 1, so the gate holds — but you get one hard error naming the first broken entry rather than a list, and no version findings at all until it is fixed.

Exit codes

Code Meaning
0 Every segment is at the version its commits warrant, and the catalogue agrees
1 A segment is behind, the catalogue disagrees, or a manifest could not be read

An inert segment — commits but nothing releasing — does not fail. Failing on it would make chore: unusable inside a segment. Nor does an ahead one: a human set that version deliberately.