Repository navigation
fix(host): say when Ace Helper needs a restart to use Tailscale - #555
Merged
Merged
Conversation
The host reads its tailnet once at startup; its tailnet listeners, peer watch, directory entry, and owner login all follow from that read, so a live re-read would mean rebinding them. Instead, diagnostics flag a running tailnet the host did not start on, Settings → Team shows "Restart needed" with a Restart button, and channel creation says to restart instead of to start Tailscale. Refs #539
This was referenced Oct 22, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Addresses gap g4 from the onboarding map: Tailscale and identity are read once. Refs #539 (does not close it: the host still needs a restart, but now says so).
The host reads its tailnet and owner login once at startup (
catalog.ts), and everything tailnet-facing follows from that read inserve(): the team listeners bound to the tailnet address, the HTTPS certificate, the peer watch, the directory entry and lobby presence, andcatalog.user, which decides who the local owner is for every access check. A live re-read would mean rebinding listeners and changing the owner of a running host, which is far from a small change. So this PR makes the UI and the failure tell the truth instead:diagnosticscompares the running tailnet with the one the host started on and setstailscale.restartwhen they differ (Tailscale came on later, or the tailnet changed).Restart Ace Helper: it started before Tailscale was running.(orRestart ace servefor a command-line host) when Tailscale is running now, instead ofStart Tailscale first.Smoke-tested with a source host (
ace serve --port 4411 --loopback, isolatedACE_HOME/ACE_CONFIG_HOME/keychain service) and atailscaleshim first onPATHthat reportsStoppeduntil a flag file exists, then defers to the real CLI:offline, create fails with "Start Tailscale first";runningwithrestart: true, create fails with "Restart ace serve: …";restartflag, create succeeds.Not verified: the Settings → Team row and its Restart button were not exercised in the desktop app (types and lint pass); real Tailscale was never toggled.
Built in Ace
No. Claude Code worked on this outside Ace, in a lane, because the user was away and it ran unattended from a terminal session; no Ace channel was driving it. Tracked under dogfooding #5.