Repository navigation
Conversation
…PEC-605) Live onboarding test: getting a Tailscale key onto an existing server meant a provider console plus hand-editing a key into a long line. Owner decision 2026-10-08 (#550): Home-Assistant-style setup page instead — no key, no chat. - v3/deploy/setup-page.py: stdlib-only host-side helper. Runs `tailscale up` without a key, shows its login link only after the one-time setup code, polls until the tailnet address answers, then exits; 30-min timeout. Makes up and prints a code (XXXX-XXXX-XXXX, no look-alikes) if none given. - get-palaia.sh: no PALAIA_TSKEY and not yet on a tailnet -> setup page (embedded verbatim, temporary ufw rule if ufw is active, stdin detached). - cloud-init.yaml: PALAIA_SETUP_CODE is the one thing to fill in; a filled TAILSCALE_AUTH_KEY still wins. Guard matches the marker word only. - palaia-install skill: Steps 2-6 around the setup page; the assistant makes up the code; key path kept for technical users (incl. "palaia" as the key description); 3c offers recreating an empty server first. - Tests: setup page run for real against a fake tailscale; embeds are byte-identical; guard picks page vs key; user-data size <= 32 KiB. - SPEC-605 + IMPLEMENTATION row; deploy README. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Second review (Codex, read-only) plus own check, all verified in the code: - Pending login is dropped (`tailscale logout`) whenever the page ends without a join, so an old login link cannot pull the server into someone else's network later. - SIGTERM/SIGHUP run the same clean-up; the `tailscale up` child is waited for and killed if needed. - At most 32 concurrent connections, 10 s request timeout — a flood of idle connections cannot lock the owner out. - cloud-init: an emptied TAILSCALE_AUTH_KEY counts as "no key" (it used to skip the code-protected page). - Installer: ufw rule only added/removed when it did not exist before, removed on interrupt too (trap); the code goes through the environment (sudo --preserve-env), never as a command argument. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
Author
|
Second review (Codex gpt-6-astra, read-only, security focus): 5 findings, all verified against the code and fixed in d9408fc — unbounded connection threads (now 32 max, 10 s timeout), SIGTERM/SIGHUP skipping clean-up, emptied cloud-init key bypassing the code page, installer deleting a pre-existing ufw rule, setup code visible in sudo arguments. Own addition: the pending Tailscale login is dropped ( |
…(SPEC-605) Cloud-server steps 2/3, the after-boot note and the existing-server text in all five onboarding languages now describe the setup code and the one-time setup page; no key to create. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Closes #550 once the live onboarding run is green.
Live onboarding test 2026-10-08: on an existing server with password login and a chat-only assistant, the only route left was the provider's web console plus hand-editing a Tailscale key into a long line. Owner decision: Home-Assistant-style setup page — no key, no terminal for the key, nothing secret through the chat.
What
v3/deploy/setup-page.py(SPEC-605): host-side, stdlib-only. Runstailscale upwithout a key, serveshttp://<server>:8420/— code form → "Connect with Tailscale" (the login link Tailscale printed) → "Done, palaia at http://:8420/". Wrong code: nothing, 1 s delay. Exits 0 when joined, 1 on 30-min timeout; port closed,tailscale upchild terminated. Makes up and prints a code ifPALAIA_SETUP_CODEis empty.get-palaia.sh: no key and not on a tailnet → setup page (embedded verbatim; temporary ufw rule when ufw is active; stdin detached because the script itself arrives on stdin).PALAIA_TSKEYunchanged.cloud-init.yaml:PALAIA_SETUP_CODEis the one thing to fill in; a filledTAILSCALE_AUTH_KEYstill wins; guard matches the marker word, so the old "replace every placeholder" trap is gone. 20 KB (< Hetzner's 32 KiB; AWS's 16 KB is noted in the README).main.Verified
pytest tests/deploy tests/clients tests/test_version_drift.py tests/docs_sitegreen; docs vitest 20 passed; ruff clean.test_setup_page.pyruns the real script against a faketailscale: no link without the code (page and status), link with it, done + exit 0 after "login", timeout exit 1 + port closed, already-joined skip, generated code format. Embeds byte-identical; guard picks page vs key (bash-executed);dash -non the installer; heredoc round-trips through| dash.Not verified (first live run is the onboarding test on the owner's VPS)
sudo env …, realtailscale uplogin link format).Open
v3/site/docs/src/i18n/onboarding/*.json) still describes the key flow — see question in Setup page: join the tailnet in the browser — no key, no terminal, nothing through the chat #550.🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.