ci/woodpecker/pr/ci Pipeline was canceled
Ships fleet/bin/mosaic in the framework so the T106 shipped-first launcher contract survives split-home layouts. The shipped npm mosaic resolves from the passwd real home instead of $HOME: under a seat home (HOME=seat dir) the operator's npm prefix is still found, so 'HOME=<seat-home> fleet/bin/mosaic --version' returns the shipped version. The $HOME/.npm-global candidate is consulted only when the passwd lookup fails, and then every path component must be a non-symlink (secure descriptor traversal; a planted descriptor is refused without execution). T106 behavior preserved verbatim: worktree builds are MOSAIC_CLI_WORKTREE opt-in only, health-checked, shipped fallback on doubt; MOSAIC_FLEET_CLI_OFF forces pure pass-through; no runnable candidate exits 127 with the documented stderr line; stale worktree candidates never regain default precedence (without the opt-in env the worktree path is never read). Manifest: fleet/bin/** added to the [framework] section so the updater and installer both own the subtree (manifest-parity 17/17 green). Hermetic suite test-mosaic-launcher.sh covers the split-home positive, typed failure, stale-worktree non-precedence, opt-in healthy/unhealthy, OFF pass-through, and descriptor-refusal arms. Marker T110-DISPATCH-TOPHER-1N2O.