Skip to content

fix(web): Tailscale HTTPS no longer says "Start Tailscale" while it runs - #24638

Closed
root-daemon wants to merge 3 commits into
pingdotgg:mainfrom
root-daemon:fix/tailscale-https-cli-missing-copy
Closed

root-daemon wants to merge 3 commits into
pingdotgg:mainfrom
root-daemon:fix/tailscale-https-cli-missing-copy

Conversation

@root-daemon

@root-daemon root-daemon commented Oct 25, 2026 •

Copy link
Copy Markdown

Problem

Settings → Connections → Tailscale HTTPS asks users to start Tailscale when the desktop already advertises its adapter IP but cannot read its MagicDNS name. This commonly happens when the Tailscale CLI is unavailable to a macOS app launched from the Dock.

Change

Use the existing advertised Tailscale IP to show the original implementation's MagicDNS/CLI guidance. Keep the network-access-off message and existing MagicDNS controls unchanged. No additional CLI probes, wire fields, or provider changes.

Preserves @root-daemon's original commit, merges main, and removes the single-use IP helper and an overly specific comment about the failure cause. Fixes https://git.cafe/pingdotgg/t3code/issues/15919.

Scope and approval

Maintainer-directed takeover for https://git.cafe/pingdotgg/t3code/issues/15919. This only corrects misleading diagnostic copy using data the desktop already advertises; no CLI lookup or networking behavior changes.

Verification

  • Blacksmith: vp run check:changed 278588a61a3a passes format, lint, both knip passes, affected typechecks, and the focused test suite (10 tests).
  • Restoring main's logic produces one failure and nine passes; the fixed logic passes all ten. Covers adapter-only, no address, and network access off with a cached IP.
  • Real dev app in system Chrome, simulated desktop IPC: checked adapter-only, no-address, network-off, and MagicDNS-present states. Inspected light 1440×1000 and dark 900×900 layouts. Existing MagicDNS switch remains present.
  • Unverified here: native Electron IPC, a real Tailscale daemon, and macOS Dock/PATH behavior. The captures prove the real settings renderer with matching IPC data, not a live tailnet integration.

Before, with main's message logic and an advertised adapter IP:

Before: advertised Tailscale IP still says Start Tailscale

After, with the same adapter IP:

After: advertised Tailscale IP shows MagicDNS and CLI guidance

Built with GPT-6.1-Sol in the Codex harness on T3 Code.

When the tailscale CLI cannot be run (on macOS it is often missing from
the app's PATH), the desktop still finds the Tailscale IP from the
network adapter but gets no MagicDNS name, and the HTTPS row told users
to start Tailscale. With a Tailscale IP present, it now says Tailscale is
running and its MagicDNS name could not be read.

Fixes pingdotgg#15919
@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Oct 25, 2026
@maria-rcks
maria-rcks marked this pull request as ready for review October 26, 2026 20:20
@coderabbitai

coderabbitai Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between 278588a and 2ba046f.

Files selected for processing: 3
  • apps/web/src/components/settings/ConnectionsSettings.logic.test.ts
  • apps/web/src/components/settings/ConnectionsSettings.logic.ts
  • apps/web/src/components/settings/ConnectionsSettings.tsx

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review.

Walkthrough

The Tailscale HTTPS settings row now uses advertised endpoints to distinguish an unavailable MagicDNS endpoint from a Tailscale instance that is not running. Tests cover the related guidance messages.

Changes: Tailscale endpoint guidance

Layer / File(s) Summary
Select and display missing-endpoint guidance
apps/web/src/components/settings/ConnectionsSettings.logic.ts, apps/web/src/components/settings/ConnectionsSettings.tsx, apps/web/src/components/settings/ConnectionsSettings.logic.test.ts
The helper accepts advertised endpoints and reports MagicDNS-read guidance when a Tailscale IP endpoint exists. The settings row passes the endpoints to the helper. Tests cover enabled network access, disabled network access with a cached IP, and no Tailscale address.

Priority: Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix · Severity of issue fixed: Low

Possibly related issues

  • pingdotgg/t3code#17362 — The issue concerns Tailscale HTTPS remaining in setup after Tailscale connects late. This change adjusts the message for a related state where a Tailscale IP exists but MagicDNS is unavailable.

Possibly related PRs

  • pingdotgg/t3code#24943 — This PR changes Tailscale endpoint resolution and MagicDNS probing used by this change to select the settings message.

Suggested reviewers: mnigos

Merge Risk: Low · up to 2ba04

The guidance can briefly be inaccurate after Tailscale stops, but the change remains mergeable with awareness of that limitation.

Pre-merge checks: Passed 4
Check name Status Explanation
Title check Passed The title follows conventional commit format and names the specific user-facing change: the Tailscale HTTPS row no longer says "Start Tailscale" while Tailscale is running. The changeset matches this:…
Linked Issues check Passed Issue [#15919] requires the Tailscale HTTPS row to stop claiming that Tailscale is stopped when a Tailscale IP is advertised. missingTailscaleEndpointDescription now detects tailscale-ip: endpoint…
Out of Scope Changes check Passed The diff changes only the Tailscale HTTPS message selection, passes the existing advertised endpoints into that selection, and adds focused tests. The changes support issue [#15919] and preserve the e…
Description check Passed The pull request description includes all required sections: Problem, Change, Scope and approval, and Verification. It explains the issue, implementation, linked issue and approval basis, focused test…
Full details: Title check

Explanation

The title follows conventional commit format and names the specific user-facing change: the Tailscale HTTPS row no longer says "Start Tailscale" while Tailscale is running. The changeset matches this: missingTailscaleEndpointDescription now takes the endpoint list and reports MagicDNS-read failure when a tailscale-ip endpoint exists. The title is concise and specific, and a teammate scanning history would understand the primary change.

Full details: Linked Issues check

Explanation

Issue [#15919] requires the Tailscale HTTPS row to stop claiming that Tailscale is stopped when a Tailscale IP is advertised. missingTailscaleEndpointDescription now detects tailscale-ip: endpoints and shows MagicDNS and CLI guidance. It preserves the Network access message when access is off and the start message when no Tailscale address exists. Tests cover all three cases. The issue suggests bundle-path lookup and/or a diagnostic message; this change implements the diagnostic path without adding a CLI probe.

Full details: Out of Scope Changes check

Explanation

The diff changes only the Tailscale HTTPS message selection, passes the existing advertised endpoints into that selection, and adds focused tests. The changes support issue [#15919] and preserve the existing Network access and no-address behavior. No unrelated provider, wire, or CLI changes are present.

Full details: Description check

Explanation

The pull request description includes all required sections: Problem, Change, Scope and approval, and Verification. It explains the issue, implementation, linked issue and approval basis, focused test results, manual checks, limitations, screenshots, and the agent and harness used.

Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

Copy link
Copy Markdown
Collaborator

Note

Written by gpt-6.1-sol on behalf of Maria

thanks @root-daemon. your adapter-IP fallback correctly addresses the misleading message without extra CLI probes. i kept your commit, merged main, removed the single-use predicate helper and the overly specific failure-cause comment, and added coverage for network access being off with a cached IP. the original MagicDNS controls and actions stay intact.

verification on 2ba046fe104e13088816767facdcc65beef39e6c:

  • blacksmith vp run check:changed 278588a61a3a: format, lint, knip, affected typechecks, and all 10 focused tests pass. main's logic fails the adapter-only case.
  • GitHub CI passes, including build/typecheck, web tests, unit tests, and all eight server shards. the automatic bot review generated no actionable findings. two independent GPT-6.1-Sol reviews found no issues on this head.
  • checked the real settings renderer with simulated desktop IPC for adapter-only, no IP, network off, and MagicDNS present. inspected light 1440×1000 and dark 900×900 layouts. both screenshots use matching data.
  • unverified: real Electron IPC, a live Tailscale daemon, and macOS Dock/PATH behavior. preview deployment workflows were not run.

marked ready for Maria's review. no labels changed, no rebase, no force-push.

before: advertised Tailscale IP still says Start Tailscale

after: advertised Tailscale IP shows MagicDNS and CLI guidance

@juliusmarminge juliusmarminge added bugfix Fix PR opened by an issue lead; enters the PR loop pr:gate-failed A land gate failed labels Oct 27, 2026

maria-rcks commented Oct 28, 2026 •

Copy link
Copy Markdown
Collaborator

Note

Written by gpt-6.1-sol on behalf of Maria

Verified in a real dev environment

partial verification on head 2ba046fe104e13088816767facdcc65beef39e6c. the changed tailscale message remains unverified.

  • inspected the diff, description, discussion, and all three pr commits. the pr is open; none is authored by juliusmarminge or t3dotgg.
  • installed and ran github/main (49a9e80e0b) in /home/user/main, then stopped its captured process group before installing and running the exact pr head. only one dev server ran at a time, with isolated state.
  • used the repo playwright with /usr/bin/google-chrome, real pairing authentication, and the running web/server stack. created a project pointing at the real main git worktree through the app.
  • completed a real codex gpt-6.1-sol follow-up turn through the composer. it ran git commands and returned 49a9e80e0b, with tracked files clean. persisted run: codex, gpt-6.1-sol, completed, with a ready checkpoint. an initial turn used the default astra model; the follow-up explicitly used sol.
  • nearby behavior: created a pairing code in settings, consumed it in an independent chrome context, and saw authorized clients increase from one to two. also exercised read-only/standard permission presets and cancelled the pairing dialog.
  • inspected the screenshots and recording. uploaded video playback and seeking passed in the t3 preview player.

short runtime transcript (credentials omitted):

main: vp i; background vp run dev
[dev-runner] serverPort=16733 webPort=8693 baseDir=/home/user/main/.t3
chrome: window.desktopBridge -> undefined; tailscale https row absent
stop main by captured process group 17778
pr: git rev-parse HEAD -> 2ba046fe104e13088816767facdcc65beef39e6c
pr: vp i; background vp run dev (isolated T3CODE_HOME)
[dev-runner] serverPort=13773 webPort=5733 baseDir=/home/user/t3code/.t3
persisted run: codex / gpt-6.1-sol / completed
provider tool result: 49a9e80e0b; tracked files clean
independent chrome context: paired successfully
authorized clients: 1 -> 2

main web settings, showing the desktop tailscale row is unavailable here:

main web settings without desktop tailscale controls

real codex turn result on the pr dev app

pr settings after successful pairing from a second chrome context

settings navigation and pairing permission presets with cancellation

Not verified

the adapter-present / magicdns-unreadable tailscale state could not be reproduced on main or exercised on this pr. this linux vm has no tailscale cli, authenticated tailnet, or tailscale adapter address. the changed row is gated behind the real electron desktop bridge, which chrome does not have. no simulated ipc, injected endpoints, fake adapter, mocks, or fixtures were used.

these captures prove the real web, provider, and pairing paths, not the tailscale copy fix. native electron ipc, tailscale https/serve setup and disable, macos dock/path behavior, windows, native ios/android, and remote/relay/tunnel connections remain unverified. completing the requested proof needs the desktop app connected to a real tailnet with an adapter address while cli/magicdns lookup is unavailable, followed by no-address and network-access-off checks.

no source changes, commits, pushes, labels, or pr metadata changes. observed existing ci: 25 successful checks, zero pending/failing; checks were not rerun because no source changed. both task dev servers are stopped after evidence capture.

@t3dotgg

t3dotgg commented Oct 29, 2026

Copy link
Copy Markdown
Member

Note

🤖 Claude Opus 5.5 responding on behalf of Theo

Superseded by #26757, which folds in the "Start Tailscale" copy fix. You are credited with a Co-authored-by trailer. Closing this so the two don't conflict.

@t3dotgg t3dotgg closed this Oct 29, 2026
@juliusmarminge juliusmarminge removed the pr:gate-failed A land gate failed label Oct 29, 2026
t3dotgg added a commit that referenced this pull request Nov 2, 2026
… no pairing code

Squashed onto the latest main. Tailscale sign-in now follows the managed
policy: without remote clients the desktop app keeps it off, `t3 up` refuses
it, the server will not start with it, and Tailscale sessions are signed out
at startup. Serve off uses main's per-path command, and the device block
migration moves to 78.

Folds in #25529, #24849, #23605, #24943, #25351, #15027, #26170 and #24638.

Co-authored-by: maria-rcks <maria@kuuro.net>
Co-authored-by: Tin Zeljar <35663757+Zheruel@users.noreply.github.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Victor <263261067+only21mil@users.noreply.github.com>
Co-authored-by: tiliakoos <73005126+tiliakoos@users.noreply.github.com>
Co-authored-by: Srivishal Sivasubramanian <47695678+root-daemon@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugfix Fix PR opened by an issue lead; enters the PR loop size:S 10-29 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants