Skip to content

Wire Claude Code, and make an unwired host impossible to add - #690

Merged
MongLong0214 merged 1 commit into
mainfrom
fix-689-claude-host
Aug 15, 2026
Merged

Wire Claude Code, and make an unwired host impossible to add#690
MongLong0214 merged 1 commit into
mainfrom
fix-689-claude-host

Conversation

@MongLong0214

Copy link
Copy Markdown
Owner

Closes #689. Makes #688 reachable.

claude-code appeared in neither hosts nor notDetected:

hosts:       codex · gemini-cli · cursor · windsurf · opencode · hermes
notDetected: []
claude CLI:  present

install.sh defines has_claude_code and wire_claude_code and calls neither
(grep -c wire_claude_code install.sh → 1, the definition). The CLI enumeration
had 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_code was correct and unreachable.

The guard took three attempts, and the failures are the point

  1. Filtering hosts by no underscore dropped wire_claude_code along with
    wire_codex_mcp — the guard excluded the case it was written for.
  2. Asserting the name appears in the enumeration passed while claude-code
    appeared only inside a helper nothing called: the defect itself, wearing the
    test as clothes.
  3. It now asserts on dispatchnotDetected.push('<host>') or a row in the
    candidate 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-cli in the enumeration) is
written 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.

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
@github-actions

Copy link
Copy Markdown

CommitLore — record lint

Trailers: clean — 1 commit in origin/main..78beb48d00eb9a62bdb6056f424fdd234de81c82
Active constraints: not read — commitlore: git log --follow accepts exactly one pathspec, so renames are not followed for 6 paths; query one path at a time to follow its rename chain (6 changed paths)

Trailer violations fail this check. Active constraints are informational — they are what the repository already decided, not a verdict on this PR.

@MongLong0214
MongLong0214 merged commit c0e909b into main Aug 15, 2026
12 checks passed
@MongLong0214 MongLong0214 mentioned this pull request Aug 15, 2026
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

claude-code is wired by nothing, and appears in neither hosts nor notDetected

1 participant