1.0.12 — an uninstall that stops hiding, and a warning that stopped naming what it forbade
Latest1.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 intokit.mjs, and
was never called. So the leftovers stayed hidden andgit statusreported clean — the repo
looked uninstalled precisely because the hiding mechanism outlived the thing it hid. .bearing/contract.mdwas never recorded. 21KB of generated contract, written at install and
absent frommanifest.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.