Skip to content

Point the skills root at --data-root, not at the running bundle - #687

Merged
MongLong0214 merged 1 commit into
mainfrom
fix-686-skills-root
Aug 15, 2026
Merged

Point the skills root at --data-root, not at the running bundle#687
MongLong0214 merged 1 commit into
mainfrom
fix-686-skills-root

Conversation

@MongLong0214

Copy link
Copy Markdown
Owner

Closes #686.

installedPath resolves against the bundle that is executing. That is right when
the bundle is the installed one, and wrong the moment it is not:

node <checkout>/dist/commitlore.mjs hermes install --data-root ~/.local/share/commitlore …

skills:
  external_dirs:
    - "/private/tmp/…/scratchpad/cl-main/hermes/skills"    # the checkout

--data-root was supplied and the MCP entry honoured its wrapper. The skills
root did not.

Why this is worse than a wrong path

The config is now bound to a tree that will be deleted or switched. When it goes,
the skills vanish while mcp_servers stays valid — the half-configured state
#684 was about, reached through a different door, and the same misnamed refusal
would follow.

The resolution

When the data root holds this version's skills, that is the answer. Otherwise the
running bundle's location, which is the case installedPath was always correct
for — an installation invoking itself, which is most runs. An explicit
--skills-dir still wins.

Why no test caught it

Every existing Hermes test supplies skillsDir explicitly, so the derivation was
never exercised. It was found by installing v1.0.0 against a real Hermes profile
while verifying #684 — the only place it could have been found.

test/hermes-skills-root.test.ts covers both directions. Negative control:
restoring the old resolution makes the data-root case fail.

Canonical artifact 424da7f4.

installedPath resolves against the bundle that is executing. That is right when
the bundle is the installed one, and wrong the moment it is not: running a
checkout's dist/ while --data-root pointed at the real installation wrote the
checkout's path into a permanent Hermes config.

The damage is not a missing file today. It is a config bound to a tree that will
be deleted or switched, after which the skills vanish while mcp_servers stays
valid -- the half-configured state #684 was about, reached through a different
door. The same wrong-name refusal would follow.

So when the data root holds this version's skills, that is the answer. The
bundle's own location stays as the fallback for the case it was always correct
for, an installation invoking itself, and an explicit --skills-dir still wins.

Found while verifying #684 against a real Hermes profile, which is the only place
it could have been found: every test until now supplied skillsDir explicitly and
so never exercised the derivation.

Verified by restoring the old resolution -- the data-root case fails.

Limit: a permanent config never records a path that belongs to one invocation
Blast: module
Undo: easy
Certainty: firm
Provenance: authored
Record-Id: r-686skil
@github-actions

Copy link
Copy Markdown

CommitLore — record lint

Trailers: clean — 1 commit in origin/main..4ccb541cddb30a6aa9a400f89e081a6d345d0de5
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 adbe186 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
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.

hermes install derives the skills root from its own location, not --data-root

1 participant