docs(althing): check the hook list, not the version string
A version number cannot tell you what a stale plugin cost. 0.0.1 and 0.1.1 differ by two hooks and a script, so the runbook now carries a check that compares hook lists across cached versions and looks for pane-route.sh directly. Also records why this hid for five days, which is the more transferable half. A missing deploy surface does not present as an error -- it presents as "the migration needs manual work", and there was a ready explanation for that, because four of five seats were non-Claude and genuinely did need hand-holding. The seat that falsified the story was our own: a Claude Code seat that should have self-declared and did not, and it looked exactly like the other four. Nobody asked why the automatic path had not fired on the one seat it was built for. So: when a migration needs manual intervention, verify the automatic path was actually deployed before concluding it does not apply to your case.
This commit is contained in:
@@ -45,6 +45,36 @@ deployed. That is why every seat — including infra-ops' own Claude Code seat
|
||||
had to be hand-declared with a pid someone measured by hand, and why the
|
||||
`idle_cursor` pin from 3.2.1 would not have self-applied either.
|
||||
|
||||
### ⚠ Compare the HOOK LIST, not the version string
|
||||
|
||||
A version number cannot tell you what a stale plugin actually cost you. 0.0.1 and
|
||||
0.1.1 differ by **two hooks and a script**:
|
||||
|
||||
```bash
|
||||
for d in ~/.claude/plugins/cache/althing/althing/*/; do
|
||||
printf " %-8s hooks: %s pane-route.sh: %s\n" "$(basename "$d")" \
|
||||
"$(python3 -c "import json;print(list(json.load(open('$d/.claude-plugin/plugin.json'))['hooks'].keys()))")" \
|
||||
"$(test -f "$d/scripts/pane-route.sh" && echo yes || echo NO)"
|
||||
done
|
||||
```
|
||||
|
||||
Expect `['UserPromptSubmit', 'SessionStart', 'SessionEnd']` and `pane-route.sh: yes`.
|
||||
Anything less and pane routes are not being declared or released automatically.
|
||||
|
||||
### ⚠ WHY THIS HID FOR FIVE DAYS — the shape to recognise
|
||||
|
||||
**A missing deploy surface does not present as an error. It presents as
|
||||
"the migration needs manual work"** — and we had a ready explanation for that,
|
||||
because four of five seats were non-Claude and genuinely did need hand-holding.
|
||||
|
||||
The seat that falsified the story was **infra-ops' own**: a Claude Code seat that
|
||||
should have self-declared and didn't, and it looked exactly like the other four.
|
||||
Neither infra-ops nor forseti asked why the automatic path had not fired for the
|
||||
one seat it was supposed to work on.
|
||||
|
||||
⚠ **When a migration needs manual intervention, check whether the automatic path
|
||||
was ever deployed before concluding it does not apply to your case.**
|
||||
|
||||
**Use the supported CLI for the second hop.** `claude plugin update althing`
|
||||
(also `install` / `uninstall` / `list` / `details` / `validate` / `marketplace`).
|
||||
⚠ Do **not** hand-edit `~/.claude/plugins/installed_plugins.json` or fabricate a
|
||||
|
||||
Reference in New Issue
Block a user