Wire Claude Code, and make an unwired host impossible to add - #690
Merged
Conversation
claude-code appeared in neither hosts nor notDetected. install.sh defines has_claude_code and wire_claude_code and calls neither; the enumeration had no branch for it. So the plugin cache went untouched by every release and nothing said so -- notDetected: [] read as "every host was detected", which is how a missing host stays missing. That is worse than #660, which at least reported the wrong thing. This reported nothing, so there was nothing to disbelieve. The enumeration now handles it the way it handles Hermes: refresh the marketplace, then install, healthy only when the install succeeds. Adding a marketplace that is already present is a no-op, so without the refresh a reinstall reinstates the same version -- that is the whole of #660, and it also means #688's fix to wire_claude_code was correct and unreachable. The guard took three attempts and each failure is worth more than the fix. Filtering hosts by "no underscore" dropped wire_claude_code along with wire_codex_mcp -- the guard excluded the case it existed for. Then checking that the name appears in the enumeration passed while claude-code appeared only inside a helper nothing called, which is the defect itself wearing the test as clothes. It now asserts on dispatch: notDetected.push('<host>') or a row in the candidate table, both written only where a host is actually handled. The shell/CLI name difference for gemini is written down rather than worked around. A guard that cannot express a legitimate difference becomes noise and then gets deleted. Limit: a host is wired or reported undetected, never absent Blast: system Undo: easy Certainty: firm Provenance: authored Record-Id: r-689host
CommitLore — record lintTrailers: clean — 1 commit in Trailer violations fail this check. Active constraints are informational — they are what the repository already decided, not a verdict on this PR. |
This was referenced Aug 15, 2026
Merged
MongLong0214
added a commit
that referenced
this pull request
Aug 15, 2026
Five fixes have been sitting on main since v1.0.0 and none of them has reached
anyone. They are all defects at the install and distribution boundary, and that
boundary has exactly one delivery mechanism: a release.
#683 the release workflow failing on a release that already exists
#684 hermes install refusing the config it wrote
#687 the skills root taken from the running bundle instead of --data-root
#688 an installed plugin treated as a reason to stop rather than upgrade
#690 claude-code wired by nothing, in neither hosts nor notDetected
Measured rather than assumed: re-installing with main's install.sh still left the
plugin cache at 0.8.0 and claude-code out of both lists, because the enumeration
that #690 fixed is compiled into the binary being installed -- and that binary is
v1.0.0.
dist is unchanged and the canonical digest is identical to before the bump. The
version is read from package.json at runtime rather than compiled in. Rebuilt
through the canonical builder and verified rather than assumed, the same as
v1.0.0.
Thirty-eight pins across nine files. The installers and READMEs carry the tag in
URLs that resolve only once the tag exists, so this is one commit and the tag
goes on it.
This is the first release cut under release-gate 6c, which asks for an upgrade
over the previous version rather than a fresh install. The five fixes above are
why that section exists.
Limit: a distribution-boundary fix reaches nobody until it is released
Blast: system
Undo: costly
Certainty: firm
Provenance: authored
Record-Id: r-rel101
MongLong0214
added a commit
that referenced
this pull request
Aug 16, 2026
… back install.sh defined seven has_/wire_ host pairs and called none of them. Host wiring moved to the CLI enumeration and the shell copy stayed behind, reading as the source of truth: #689 happened because claude-code was named there and absent from the enumeration, and two people read the shell as authoritative hours apart on the same day. Nineteen functions, 291 lines, removed by measuring references and repeating until nothing new fell to zero. Dead code that is obviously dead costs nothing; this answered questions. Deleting it revealed a real divergence. wire_codex_plugin was reachable only from wire_codex, so install.sh has not installed the Codex plugin for some time while install.ps1 has. The plugin registers the marketplace and installs commitlore@commitlore -- the same layer as the Claude plugin, not something the MCP registration covers. Windows users got it and everyone else did not (#697). It lands in the enumeration rather than back in the shell. Both installers delegate host wiring there, which is why the shell block was dead, so putting it there makes the platforms agree by construction instead of by two copies staying in step. The Claude plugin is handled the same way for the same reason. install.ps1 keeps its own call for now: the command is idempotent by design, and running it twice is strictly better than the asymmetry it replaces. Consolidating is left on #697. The guards moved with the code. test/agent-configs.test.ts asserted host config paths were present in install.sh -- presence, not reachability, which is how a dead block kept looking alive. They now assert against the file that writes them. #690's coverage guard becomes an internal consistency check: a host that can be wired can be reported undetected, or its absence is silent. Limit: one owner per host step, in the place both installers call Blast: system Undo: costly Certainty: firm Provenance: authored Record-Id: r-691dead
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #689. Makes #688 reachable.
claude-codeappeared in neitherhostsnornotDetected:install.shdefineshas_claude_codeandwire_claude_codeand calls neither(
grep -c wire_claude_code install.sh→ 1, the definition). The CLI enumerationhad no branch. So the plugin cache went untouched by every release and nothing
said so —
notDetected: []reads as every host was detected.Worse than #660, which reported the wrong thing. This reported nothing, so there
was nothing to disbelieve.
The fix
Handled the way Hermes is: refresh the marketplace, then install, healthy only if
the install succeeds. Adding a marketplace that is already present is a no-op, so
without the refresh a reinstall reinstates the same version — that is #660, and
it is also why #688's fix to
wire_claude_codewas correct and unreachable.The guard took three attempts, and the failures are the point
wire_claude_codealong withwire_codex_mcp— the guard excluded the case it was written for.claude-codeappeared only inside a helper nothing called: the defect itself, wearing the
test as clothes.
notDetected.push('<host>')or a row in thecandidate table, both written only where a host is actually handled.
Verified in both directions: 15 passing with the branch, 2 failing without it.
The shell/CLI name difference for
gemini(gemini-cliin the enumeration) iswritten down as an alias rather than worked around. A guard that cannot express a
legitimate difference becomes noise and then gets deleted.
Canonical artifact
c312755d.