Sharing carries one thing the desktop never exposed at all: the listening port (`listenPort`), what other peers dial when they download from you. Unset means the client's own 50300 (`DEFAULT_LISTEN_PORT`; bind walks forward a few ports if it is taken); the app asks the router to forward it over UPnP and falls back to the server relaying the connection, and a change applies on the next connect — on mobile data the carrier's NAT blocks incoming connections whatever the number is. `set_settings` only assigns a port that is Some, so it can be changed but never taken back to unset: the phone walk saves a spare number and then 50300, which is the port an unset config already used. The dev flavour gets one more row under This phone: Diagnostics (`screens/Diagnostics.svelte`), the desktop's Ctrl+Shift+D overlay as a screen — process and system CPU, memory, the network rates, the track playing with its loudness correction, the tracks the pre-buffer is fetching, and how big the play history has grown (`debug_stats`, `play_row_count`), polled once a second while it is open and never otherwise. `devBuild` in `util.js` is the gate: Vite's own DEV flag, true only for the build that loads from the dev server over the cable, so the embedded build the phone keeps has no row to tap. The GPU counters are Windows PDH and the private commit is a Win32 call, so neither is on the screen — off Windows they report None and 0.