You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ship 1.5.0, and fail when the version stops describing the payload
A packaging audit found the label covering three different trees. Both manifests
said 1.4.0 while the installable payload sat nine commits ahead of that tag —
including a whole new hook. `VSTACK_REF=v1.4.0` got the tag; the unpinned
bootstrap and the plugin marketplace both take the default branch. Three lanes,
three trees, one version, and a changelog describing none of what the last two
actually delivered.
Check 24 is the fix that outlives this release. It does not demand that HEAD
always be a release — only that if a tag exists with the version the manifests
declare, the installable payload is identical to it. Between releases you bump
the version and it goes quiet until that version is tagged. It went red on its
first run, which is why 1.5.0 exists.
Docs and tests are deliberately outside its scope: they change constantly without
changing what a stranger receives.
Two smaller things from the same audit. NOTICE still named two MIT upstreams
after gstack's notice was vendored as the third — the notice was present, the
cross-reference to it was not. And the README described the plugin lane as
shipping "the routing hook" when hooks.json declares two: routing, and a Stop
gate that stays inert until a repo's verify.sh is trusted.
1.5.0 itself is the second external review's findings: the cloud gate that was
installed and never ran, credentials exported into every shell, a guard adapted
from gstack and armed by default, a pinned bootstrap that 404'd for tags, six
skills pointing at skills this port does not vendor, and a first screen that led
with the widest lane instead of the narrowest.
verify.sh 26/26, falsifiability 27/27, matrix 19/19, doctor and drift green.
Copy file name to clipboardExpand all lines: .claude-plugin/marketplace.json
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -10,7 +10,7 @@
10
10
"plugins": [
11
11
{
12
12
"name": "vstack",
13
-
"version": "1.4.0",
13
+
"version": "1.5.0",
14
14
"source": "./claude",
15
15
"description": "26 skills that fire without a slash command, 8 agents, 14 commands, and the session hook that routes situations to skills. Most skills are ported from pstack and Superpowers — see claude/skills/ATTRIBUTION.md for per-skill source and license.",
[ -z"$drift" ] && ok "declared version matches what installs (v$mv_)" \
907
+
|| bad "declared version matches what installs" \
908
+
"$(printf 'the manifests say v%s but the payload has moved since that tag:\n%s\nbump the version and changelog it, or the plugin and unpinned lanes ship something v%s never described'"$mv_""$(printf '%s'"$drift"| sed 's/^/ /'| head -10)""$mv_")"
909
+
fi
910
+
else
911
+
skip "declared version matches what installs""git or jq not installed"
912
+
fi
913
+
884
914
echo
885
915
# Accounting. Every declared check must have reported either a result or a skip. A check
886
916
# that throws a shell error mid-body, or is wrapped in a conditional with no else, silently
Copy file name to clipboardExpand all lines: claude/.claude-plugin/plugin.json
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
{
2
2
"name": "vstack",
3
-
"version": "1.4.0",
3
+
"version": "1.5.0",
4
4
"description": "Skills that fire on the situation instead of a slash command, plus the subagents, commands, and session hook that make them fire. Verification gates, parallel fan-out, code review, and writing discipline.",
0 commit comments