From 0021101e4f336990c24d7d921d55beb5fcd490ea Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 30 Oct 2026 03:40:42 +0000 Subject: [PATCH 1/2] test(desktop): reproduce #27351 LAN host picks Hyper-V vEthernet over Wi-Fi Adds a failing test that reproduces pingdotgg/t3code#27351: with the reporter's Windows interface order, the Local network link advertises the vEthernet (Default Switch) address instead of the Wi-Fi address. Co-Authored-By: Claude Opus 5.5 --- .../src/backend/DesktopServerExposure.test.ts | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/apps/desktop/src/backend/DesktopServerExposure.test.ts b/apps/desktop/src/backend/DesktopServerExposure.test.ts index f53cde3e451d7..3d2170cbb10b3 100644 --- a/apps/desktop/src/backend/DesktopServerExposure.test.ts +++ b/apps/desktop/src/backend/DesktopServerExposure.test.ts @@ -238,6 +238,26 @@ describe("DesktopServerExposure", () => { ), ); + it.effect("advertises the Wi-Fi address ahead of Windows Hyper-V switches", () => + withHarness( + { + Tailscale: [{ address: "100.64.0.5", family: "IPv4", internal: false }], + "vEthernet (Default Switch)": [{ address: "172.25.80.1", family: "IPv4", internal: false }], + "vEthernet (WSL (Hyper-V firewall))": [ + { address: "172.24.144.1", family: "IPv4", internal: false }, + ], + "Wi-Fi": [{ address: "192.168.1.147", family: "IPv4", internal: false }], + }, + Effect.gen(function* () { + const serverExposure = yield* DesktopServerExposure.DesktopServerExposure; + yield* serverExposure.configureFromSettings({ port: 4173 }); + + const change = yield* serverExposure.setMode("network-accessible"); + assert.equal(change.state.advertisedHost, "192.168.1.147"); + }), + ), + ); + it.effect("persists tailscale serve preferences atomically and reports no-op updates", () => withHarness( emptyNetworkInterfaces, From 7f9248ba89501f0e2263b0906d70464a248285f0 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Fri, 30 Oct 2026 03:43:12 +0000 Subject: [PATCH 2/2] fix(desktop): LAN pairing link no longer advertises Hyper-V vEthernet adapters Fixes pingdotgg/t3code#27351 Co-Authored-By: Claude Opus 5.5 --- apps/desktop/src/backend/DesktopServerExposure.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/desktop/src/backend/DesktopServerExposure.ts b/apps/desktop/src/backend/DesktopServerExposure.ts index 8d178c605c4a6..7d1ba709b10f0 100644 --- a/apps/desktop/src/backend/DesktopServerExposure.ts +++ b/apps/desktop/src/backend/DesktopServerExposure.ts @@ -73,7 +73,7 @@ const isUsableLanIpv4Address = (address: string): boolean => // Private bridges and VM adapters are fallbacks; host bridges can carry the real LAN address. const HOST_ONLY_INTERFACE = - /^(bridge\d|utun|ipsec|ppp|tun|tap|wg|docker|br-|veth|virbr|vmnet|vboxnet|VirtualBox|VMware)/; + /^(bridge\d|utun|ipsec|ppp|tun|tap|wg|docker|br-|veth|virbr|vmnet|vboxnet|VirtualBox|VMware|vEthernet)/; const isHttpsEndpointUrl = (value: string): boolean => { try {