Skip to content

1.0.12 — an uninstall that stops hiding, and a warning that stopped naming what it forbade

Latest

Choose a tag to compare

@ReidenXerx ReidenXerx released this 17 Aug 15:34

1.0.11 was tagged but never published to npm, so its changes ship here. If you are coming from
1.0.10, this release contains both.

Fixed — a stealth uninstall left bearing wired in, and hid that it had

git status came back clean, so the repo looked untouched. It was not: eleven guards were still
registered in .claude/settings.local.json, every one of them pointing at a hook script the same
uninstall had just deleted — a failed spawn on every session start, prompt and tool call.

mergeClaudeSettings writes to settings.local.json under stealth and settings.json otherwise;
removeClaudeSettings only ever knew the second. The visible path was fine, which is why no
existing test saw it — they all install visibly.

Two things made it worse than a leftover file:

  • The concealment survived too. removeExclude() existed and was imported into kit.mjs, and
    was never called. So the leftovers stayed hidden and git status reported clean — the repo
    looked uninstalled precisely because the hiding mechanism outlived the thing it hid.
  • .bearing/contract.md was never recorded. 21KB of generated contract, written at install and
    absent from manifest.files, so uninstall could not know it owned it (NS-22).

All three fixed, with the negative control: a user's own hooks, permissions and .git/info/exclude
entries survive untouched.

Fixed — the block named npx gitnexus analyze in order to forbid it

Reported with a screenshot. The block correctly said node scripts/bearing-agent.mjs refresh, and
the agent ran npx gitnexus analyze anyway — because bearing told it to. The message ended "Run
yourself — never ask the user to run npx gitnexus analyze"
, and the only concrete command in that
sentence is the one it meant to prohibit, so it reads as the instruction. Following it lands on
the raw indexer and reintroduces the npx invocation the command resolver exists to remove. Naming a
command in order to forbid it is naming it; the message now names none.

The same screenshot showed the agent passing --skip-agents-md by hand, which bearing should do
itself under stealth. analyze writes its stats block into AGENTS.md / CLAUDE.md and the
stabilizer strips it after — but in between, the repo is dirty, so anything reading git status
in that window sees bearing having modified tracked files. Not writing it beats writing and
reverting. Passed on every stealth tier; the stabilizer stays as the net for an indexer run bearing
did not launch.