Patch release to harden LAN discovery/sync behavior and align launcher UX with install UX.
- Make
cipher.localbest-effort with mandatory IP fallback. - Enforce single authoritative host by default (
cipher upauto-join). - Lock task mutations when disconnected from authoritative daemon.
- Show ASCII banner on install and launch.
- Preserve separate GitHub and npm release tracks.
server.jsbin/cipher.jsscripts/postinstall.jsutils/runtimeState.jsutils/banner.js(new)utils/discoveryClient.js(new)hooks/useVanish.tscomponents/ActiveTasks.tsxcomponents/LandingPage.tsxApp.tsxREADME.mddocs/briefing/boot-sequence.mddocs/architecture/protocols.mdpackage.jsontests/cli-up-mode.test.js(new)tests/discovery-mdns.test.js(new)scripts/smoke/multidevice-sync.js(new)
- LAN probe false-positives could send clients to wrong host.
- Mutation lock may feel strict if a host is flaky.
- Browser restrictions may limit public-page reachability checks.
- Verify host with
/healthz+X-Cipher: 1before join. - Keep manual overrides:
--host,--join, and UI IP override. - Keep connect fallback UX explicit in landing page.
npm run buildnpx tsc --noEmitnpm run testnode scripts/smoke/multidevice-sync.jsnode bin/cipher.js up --hostnode bin/cipher.js statusnode bin/cipher.js stopnpm pack --dry-run