-
Fixed: the pairing page 404'd for anyone using a Node version manager.
GET /pairservedclient/pair.htmlwithres.sendFileand no options.
With noroot,sendapplies its defaultdotfiles: "ignore"to every
segment of the absolute path — including segments of the install location,
which the request never chose. Node from nvm, fnm, volta or asdf lives under
~/.nvm,~/.fnm,~/.volta,~/.asdf, so a global install put the file
behind a dot segment and the route answered 404 with nothing missing and
nothing unreadable. The URLsurface pairprints is the only way to add a
phone or a second screen, so for those users the feature did not exist.
Broken in every release through 0.2.4. It survived because CI runners and
containers install Node at/usr/local, which has no dot segment — every
test environment was immune, and only a real version-manager install shows
it. This is the same defect already fixed for artifact files under
~/.surface(SEND_FILE_OPTS); the/pairroute was missed. -
test:source-hygienenow asserts that everyres.sendFileinserver/
passes a dotfiles option. A functional test cannot catch this without a
dot-path install, so the call shape is asserted instead — which covers the
next call site rather than only this one. -
Test harness: a slow CI runner no longer looks like a broken server.
waitForReadyhad a fixed 15s boot budget and no way to tell a slow start
from a dead process, so it failed release 0.2.4's master run on a healthy
server while the identical job passed on the concurrent tag run and on every
other platform. The budget is now 60s (SURFACE_TEST_READY_TIMEOUT_MS
overrides), and it takes the child handle: a server that exits during boot is
reported the instant it dies, with its exit code and stderr tail, rather than
waiting out the clock. Measured on a deliberately fatal start — 322ms with
the real reason, versus 15s of "did not become ready". Test-only; the
published package contains no test files.