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.
| 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.