Skip to content

v0.3.1 — Startup and transport reliability

Latest

Choose a tag to compare

@abruption abruption released this 19 Oct 05:48
e934fa4

Fixes and diagnostics

  • Startup readiness (#25 / #36): wait through transient NoState/Starting within a bounded 30-second backend phase. Wait for the local API before explicit login/auth, distinguish authentication/approval/query failures, and inspect machine approval even when the authentication command fails or times out.
  • Execution context (#26 / #37): doctor reports installation/runtime access, read-only filesystems and socket visibility in the current environment. Missing/inaccessible sockets receive independent GUI-terminal guidance rather than implying the daemon is stopped everywhere.
  • Proxy apply recovery (#32 / #35): validate the private log before stopping the daemon and retain its descriptor for both replacement and rollback.
  • CONNECT bytes (#33 / #35): preserve raw tunnel bytes buffered with the upstream CONNECT response. Unexpected pre-handshake bytes on the TLS-intercepting port443 path are rejected explicitly.
  • WebSocket framing (#34 / #35): reject masked/reserved-bit frames, invalid control frames, malformed lengths and continuation sequencing before releasing invalid payload or sending pong; retain valid fragmentation and interleaved controls.

Implementation PRs: #35, #36, #37. Release preparation: #38.

Tailscale remains pinned to 1.102.4. All four source companions are required for installation: tailscale-setup.sh, shim.py, dots-ts, dots_proxy.py. ZIP/tar.gz contain the tracked source tree; SHA256SUMS covers both archives and the four individual assets.

Validation and limitations

The integrated candidate passed 178 offline tests on each of Linux Python3.11 and3.13, plus Bash syntax and ShellCheck. Focused compatibility checks also passed on actual Python3.8/3.13. Codex re-reviews of the final implementation/integrated candidate reported no additional findings. Regression coverage uses disposable files, inert process-control mocks, fake CLI states and isolated socket peers.

This release does not establish a new live v0.3.1 deployment, VM-replacement recovery or successful live auth-key enrollment. Startup after environment replacement remains manual. The bounded watchdog experiment is separate #20 research and is not installed by this release. Automatic updates, full WebSocket UTF-8/close-status validation and a new frame-memory limit are outside this patch.

Existing installations are not upgraded automatically. Use the staged update and rollback procedure, preserve authentication state and SSH/CA keys, retain an independent cloud GUI terminal and verify external SSH with strict host-key checking after applying the update.

Guides: English · 한국어.

Release commit and verification

This release packages e934fa4f9c160fb6d2352e4d78ebe1adf2f65874. Final main CI.

SHA-256

03bfb67f39142e60666c1acd4e57b11e45848253225e71a89fd0d3e995d0e7a4  dots-tailscale-v0.3.1.zip
07e6b86b136a70cf9dc02466e7e53a89716e0dded0a7f3704d8f79ccb03d2ef2  dots-tailscale-v0.3.1.tar.gz
aec47c732817d704192fc42c2eb5a4eb27df8504c3852b69b3a57054b4fe5e01  tailscale-setup.sh
c0c55c45fbd9126e860b56d0d0359c0c87f8b39ef5d4da4a9560522452ac8c65  shim.py
7f4915d2b501201dae71fd3bae3abdc855e646194a959afbc16fe9d5d0b74857  dots-ts
2b74af2e175d12300196cab008062ba1098e12bc208d617e3fe63c23c2613390  dots_proxy.py