Summary
scripts/install-relayfile-mount (run automatically by npm run build) has a local-dist fallback that can never win: it expects ../relayfile/dist/relayfile-mount-darwin-arm64 (flat, arch-suffixed filename), but relayfile's Makefile writes dist/darwin_arm64/relayfile-mount (arch subdirectory, unsuffixed). The layouts have never matched, so every install silently falls through to the stale GitHub release.
Impact (real incident, 2026-06-06)
During the #206 mount-contract rollout, a locally-built binary from merged relayfile main (relayfile#243) was installed to pear/bin/relayfile-mount — then a routine npm run build re-ran this script and silently replaced it with the v0.8.10 release (pre-#243), respawning mounts on the old broken contract mid-incident. Cost ~30 min of confusion and a third binary reinstall.
Fix
Align the two layouts (either side works):
- teach the script to probe
../relayfile/dist/<GOOS>_<GOARCH>/relayfile-mount (Makefile layout), or
- have relayfile's Makefile also emit the flat arch-suffixed name the script expects.
Also log which source (local dist vs release vs marker) actually won, so a silent fallback is visible.
Related
Sibling issue: installFromFile in-place copy / macOS signature SIGKILL. Found during the 2026-06-05/06 double-pathing incident (pear docs/specs/2026-06-05-integration-events-debug-handoff.md follow-on work).
Summary
scripts/install-relayfile-mount(run automatically bynpm run build) has a local-dist fallback that can never win: it expects../relayfile/dist/relayfile-mount-darwin-arm64(flat, arch-suffixed filename), but relayfile's Makefile writesdist/darwin_arm64/relayfile-mount(arch subdirectory, unsuffixed). The layouts have never matched, so every install silently falls through to the stale GitHub release.Impact (real incident, 2026-06-06)
During the #206 mount-contract rollout, a locally-built binary from merged relayfile main (relayfile#243) was installed to
pear/bin/relayfile-mount— then a routinenpm run buildre-ran this script and silently replaced it with the v0.8.10 release (pre-#243), respawning mounts on the old broken contract mid-incident. Cost ~30 min of confusion and a third binary reinstall.Fix
Align the two layouts (either side works):
../relayfile/dist/<GOOS>_<GOARCH>/relayfile-mount(Makefile layout), orAlso log which source (local dist vs release vs marker) actually won, so a silent fallback is visible.
Related
Sibling issue: installFromFile in-place copy / macOS signature SIGKILL. Found during the 2026-06-05/06 double-pathing incident (pear
docs/specs/2026-06-05-integration-events-debug-handoff.mdfollow-on work).