v1.6.26
fix(hook): Unregister symmetry + wsl.exe-prefix guard on Linux/default heuristics
Two review follow-ups to v1.6.25's drift-refresh fix.
Unregister symmetry. Three byte-exact startsWith(h.Command, binaryPath) call sites remained in the uninstall path while v1.6.25
converted every Register-time site to the content-heuristic. Concrete
failure mode: user registers observer-A at /tmp/observer-A, later runs
observer uninstall <tool> from observer-B at /usr/local/bin/observer
— the unregistrar sees observer-A's entries as foreign and leaves them
orphaned. The Register path's argument ("syntax distinctive enough that
collision is essentially impossible") applies equally to Uninstall.
Fix (internal/hook/register.go): filterClaudeGroups,
filterCodexGroups, and the unregisterCursor removal loop all switch
to isObserverClaudeEntry / isObserverCodexEntry /
isObserverCursorEntry. The now-redundant binaryPath parameter is
dropped from the two filter helpers and their call sites in
unregisterClaudeCode / unregisterCodex.
Three new tests pin the cross-binary uninstall path:
TestUnregisterClaudeCodeRemovesCrossBinaryEntries,
TestUnregisterCursorRemovesCrossBinaryEntries,
TestUnregisterCodexRemovesCrossBinaryEntries — each installs against
/tmp/observer-A then uninstalls from /usr/local/bin/observer and
asserts no observer-A entries remain.
wsl.exe-prefix guard on isObserverClaudeEntry + isObserverCursorEntry.
Pre-fix, the v1.6.25 content-heuristic matched ANY command containing
hook claude-code (or hook cursor) — including the wsl.exe-wrapped
shape that the Windows-bridge registrar (registerClaudeCodeWindows /
registerCursorWindows) writes. If a user has both observer modes
registered against the same settings.json (rare but possible after
switching from a WSL-launched to a Windows-native observer on the same
host), the Linux/default registrar would silently rewrite the WSL-bridge
entries into native shape — chronic entry flap if the user alternates
modes.
Fix: both Linux/default helpers now require the cmd NOT to start
with wsl.exe or MSYS_NO_PATHCONV=1 wsl.exe , mirroring
isObserverWindowsClaudeEntry / isObserverWindowsCursorEntry's
positive guard from the opposite direction. The two pairs now match
disjoint command shapes. Codex has no Windows-bridge variant so
isObserverCodexEntry is unchanged.
New TestObserverEntryHeuristicsAreDisjoint pins the contract: native
shape → only Linux/default helper returns true; wsl-wrapped shape (with
or without MSYS prefix) → only Windows helper returns true; foreign
command → neither.
go vet ./... clean. go test ./... all 51 packages green.
Downloads
Pre-built binaries for each supported platform are attached below. Linux variants bundle antigravity-bridge.exe next to the observer binary for WSL2 users of the Antigravity adapter.
| Platform | Asset |
|---|---|
| Linux x86_64 | observer-v1.6.26-linux-x64.tar.gz |
| Linux arm64 | observer-v1.6.26-linux-arm64.tar.gz |
| macOS x86_64 (Intel) | observer-v1.6.26-darwin-x64.tar.gz |
| macOS arm64 (Apple Silicon) | observer-v1.6.26-darwin-arm64.tar.gz |
| Windows x86_64 | observer-v1.6.26-win32-x64.zip |
Verify with sha256sum -c SHA256SUMS (or shasum -a 256 -c SHA256SUMS on macOS) from the directory containing the downloads.
Also available via npm: npm install -g @superbased/observer@1.6.26