Skip to content

Commit d9047a5

Browse files
Release v1.37.0: fix dispatch-tool undercount and heredoc/$VAR write over-count
task_count only ever matched tool_use blocks named "Task"; this build's SDK names the dispatch tool "Agent". Delegation and agent-naming mandates were silently inert across every install (70 Agent dispatches read as 0). Also fixes the v1.36.0 Bash-write extractor reading heredoc bodies and $VAR redirect targets as real writes (measured 53->34 dirs, 83->60 exts on a real transcript), and adds prove-it-works, a Stop-hook check standing in for a skill trigger that cannot be matched from the user's prompt.
1 parent a2d7f46 commit d9047a5

4 files changed

Lines changed: 50 additions & 4 deletions

File tree

.claude-plugin/marketplace.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"plugins": [
1111
{
1212
"name": "vstack",
13-
"version": "1.36.0",
13+
"version": "1.37.0",
1414
"source": "./claude",
1515
"description": "28 skills that fire without a slash command, 14 agents, 15 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.",
1616
"category": "workflow"

CHANGELOG.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,52 @@ Versions follow [semver](https://semver.org). The version lives in two manifests
44
`.claude-plugin/marketplace.json` and `claude/.claude-plugin/plugin.json`, and check 13 of
55
`.claude/verify.sh` fails when they disagree.
66

7+
## 1.37.0 — 2026-08-23
8+
9+
**The delegation and agent-naming mandates counted a tool name that does not exist in this
10+
build.**
11+
12+
`skill-mandate.sh`'s `task_count` matched only `tool_use` blocks named `Task`, the classic Claude
13+
Code CLI's dispatch-tool name. This build's SDK calls the same tool `Agent`. Measured against a
14+
real 15MB transcript: 70 `Agent` dispatches, 0 `Task` matches. Two mandates read that count: the
15+
breadth/delegation mandate reported "zero subagents" over a session that ran 70 of them, and the
16+
agent-naming mandate -- gated on that same count being >= 1 -- was structurally unable to ever
17+
fire and had never fired in any install since it shipped, despite call-sign naming being a
18+
specific, standing request from the repo owner. The enforcement was inert and silent, and silence
19+
reads like compliance. Fixed by counting `Task` or `Agent`. `TaskCreate` was checked and
20+
deliberately excluded: its `.input` shape is `{subject, description, activeForm}`, a checklist
21+
item, not a dispatch call.
22+
23+
Second defect in the same hook: the Bash-write path extractor added in v1.36.0 was reading
24+
write-shaped lines out of heredoc *bodies* as if this session had performed them, and treating
25+
any `$VAR`-containing redirect target as a real file. A `cat > /tmp/check35.sh <<'CHK' ... CHK`
26+
block whose fixture body happened to contain `$g_empty/app/src/C.tsx` was reported as TypeScript
27+
someone had written. On the same transcript: dir_count 53 -> 34, ext_count 83 -> 60, extracted
28+
paths 345 -> 241, and the breadth mandate goes from firing on phantom writes to completely silent
29+
on a session that made one real edit. `emit()` now drops any candidate containing an unexpanded
30+
`$`, and a heredoc body is suppressed only once its opening line already matched a write rule --
31+
so `cat >file <<EOF` (body is inert file content) is suppressed but `python3 - <<PY` (body is
32+
executed and its real `open(..., 'w')` call is a genuine write) still counts. Latency cost: +74ms
33+
(+13%) on the same transcript.
34+
35+
Also added: `prove-it-works`, a Stop-hook check on the assistant's own closing claim.
36+
`principle-prove-it-works` scored 0/10 on its own fixture prompt because its trigger -- "apply
37+
before declaring any task or fix done" -- is a condition on the assistant's forthcoming speech
38+
act, not on anything in the user's prompt a skill matcher can score against. The equivalent check
39+
now runs directly in the Stop hook, at the moment that condition is actually about: a turn that
40+
edits a file and closes with a completion claim ("done", "it works now", "all tests pass", and
41+
similar bounded phrasings), with zero Bash/Read/Task/Agent tool_use anywhere in the turn to back
42+
it up, blocks naming `prove-it-works`. Deliberately generous in the silent direction -- any Bash
43+
or Read call counts as evidence regardless of what it did or when in the turn it ran, relative to
44+
the edit -- because a mandate that produces a false block teaches users to disable the whole gate.
45+
46+
Falsification: `tests/test-breadth-mandate.sh` PROOFs 7-9 cover prove-it-works (blocks on zero
47+
evidence; silent after a real Bash call; silent on a purely conversational claim with no edit).
48+
PROOFs 10-12 cover the two dispatch-hook fixes (Agent dispatch suppresses the breadth mandate the
49+
same as Task; zero Task AND zero Agent still trips it; a `$VAR`-containing Bash write target is
50+
not counted). All 12 proofs pass; the pre-fix hook was falsified by hand against the same
51+
fixtures and restored byte-identical.
52+
753
## 1.36.0 — 2026-08-23
854

955
**The breadth mandate counted Write, Edit and NotebookEdit tool calls and nothing else, so every

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ cd ~/Projects/vstack && ./install.sh
5858
Pin a release rather than tracking `main`:
5959

6060
```bash
61-
curl -fsSL https://raw.githubusercontent.com/itsvedantkumar/vstack/v1.36.0/bootstrap.sh -o bootstrap.sh
62-
VSTACK_REF=v1.36.0 bash bootstrap.sh # installs that tag, not main
61+
curl -fsSL https://raw.githubusercontent.com/itsvedantkumar/vstack/v1.37.0/bootstrap.sh -o bootstrap.sh
62+
VSTACK_REF=v1.37.0 bash bootstrap.sh # installs that tag, not main
6363
```
6464

6565
Removing it restores what was there before: `./uninstall.sh --yes` puts every file it replaced

claude/.claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vstack",
3-
"version": "1.36.0",
3+
"version": "1.37.0",
44
"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.",
55
"author": {
66
"name": "Vedant Kumar"

0 commit comments

Comments
 (0)