PR 28975, head e5736f91574085e7b49eaa01b686a2f50e9f92c0 Baseline github/main d8a829e5ec Linux Chrome /usr/bin/google-chrome, repo Playwright, hosted web-client mode. One dev stack at a time. Web 8693, server 16733. Separate isolated T3 homes. All project creation, pairing, route changes and turns used the real UI. MAIN: paired http://[::ffff:127.0.0.1]:16733 Settings -> Environments -> Routes: LAN / In use / Connected UI -> WebSocket -> PeerLinks.link: PeerLinkError: http://[::ffff:127.0.0.1]:16733 is plain http, which would send the link credentials unencrypted. Codex gpt-6.1-sol returned LOOPBACK_MAIN_OK. PR: paired the same address to the real PR server. Settings -> Environments -> Routes: This device / In use / Connected UI -> WebSocket -> PeerLinks.link: PeerLinkError: That address is this environment. The HTTP gate now passes and the self-link guard still rejects. Codex gpt-6.1-sol ran git rev-parse --show-toplevel and returned: LOOPBACK_PR_OK /home/user/main NEIGHBORS: Added http://127.0.0.1:16733 as a route through the UI, then reloaded. Both saved routes showed This device; mapped route remained In use. Removed the mapped route through the UI; ordinary loopback became In use. Codex gpt-6.1-sol follow-up returned LOOPBACK_FOLLOWUP_OK. CLI PeerLinks -> live HTTP descriptor: mapped and ordinary loopback both hit the self-link guard. Mapped LAN http://[::ffff:192.168.1.10]:16733 remained rejected as plain HTTP. BLACKSMITH: vp test run packages/shared/src/hostClassification.test.ts packages/client-runtime/src/connection/routes.test.ts apps/server/src/peer/PeerLinks.test.ts apps/web/src/browser/browserTargetResolver.test.ts apps/web/src/browserFaviconLogic.test.ts apps/web/src/browserHistoryStore.test.ts packages/shared/src/preview.test.ts 7 files, 100 tests passed. vp run check:changed 1d626d02d95f9a2343553f6498037ee82290d304 Passed: format, lint, knip, affected typechecks (33 packages), selected tests (12). LIMITS: No native iOS/Android, Electron, macOS/Windows, tunnel/relay, or cross-device linking. No completed link to a distinct second server: this task allowed one dev server. Learned-route suppression for a reported mapped-loopback endpoint was not observed end to end: the real server already omits these endpoints. No fabricated descriptors used.