Repository navigation
v0.4.0 adds package identity, release checks, optional local notices and verified manual updates. It includes PR #41 (#27) and PR #42 (#28–#30).
What's new
- Package identity:
dots-ts version [--json]separates the package version, source integrity and Tailscale binary version. Unknown metadata is reported honestly; private keys and node-state contents are not hashed. - Release checks:
dots-ts update checkcompares stable releases from this repository with bounded downloads, explicit platform proxy selection and validated release/asset metadata. - Local notices: opt-in cached notifications support expiry and deduplication. The startup hook performs no network calls and preserves startup results and raw CLI/JSON output.
- Manual updates:
dots-ts update applyruns a verified fixed release or reviewed local bundle in a detached worker. It backs up code only, journals progress, restarts the identified shim, and restores the previous code on failure. Identity and proxy configuration remain in place.
Files and compatibility
The package still uses four executable sources:
tailscale-setup.shshim.pydots-tsdots_proxy.py
Keep source-manifest.json from the same release alongside all four files. New installs validate this bundle. ZIP and tar.gz archives include the complete tagged repository; the four sources and manifest are also individual assets. SHA256SUMS covers both archives and all five individual files.
Tailscale remains 1.102.4. Manual apply requires Linux, Python 3.9 or newer, pidfd support and an independently accessible recovery terminal. This updater handles the fixed source bundle; changing the Tailscale binary version is outside its scope.
Existing v0.2/v0.3 installations without a trusted manifest are not silently upgraded or assigned a guessed version. Review their provenance and follow the usage guide. The first v0.4.0 publication also supplies the manifest required by the new release-check contract; older releases without it are correctly refused as verified update bundles.
Verification
- The implementation passed 256 offline tests on both Linux Python 3.11 and 3.13, with Bash syntax, ShellCheck and manifest checks. Final implementation PR CI.
- Claude Code Opus 5.5 independent review identified three required fixes; they were corrected and its follow-up reported no remaining required fixes before live validation.
- Codex automatic code and security reviews of #42 completed without findings on the final implementation commit.
- The reviewed
0.4.0-devsource candidate passed normal apply, intentional startup-failure rollback, checksum mismatch refusal and separate fresh strict-host-key SSH/DERP checks in Dots. See the dated validation record. - The stable release changes version metadata and release-facing documentation, not those reviewed executable sources. Exact release commit CI and uploaded artifact verification are recorded during publication.
Operating limits
appliedmeans local readiness and source-manifest consistency, not end-to-end application readiness. Verify external SSH separately.- Checksums establish consistency with the supplied bundle, not independent publisher authentication.
- Incomplete transactions and uncertain process identity require manual review. Keep the recovery terminal available; do not clear a journal merely to force another update.
- Notifications do not install updates or register a scheduler. VM replacement still needs an independent start mechanism; #20 remains open.
- Publishing this release does not replace a running Dots installation. The earlier live trial used development metadata; deployment of the final stable package is a separate operation.
Release artifacts
Tag v0.4.0 points to 5772d0b8cc5f23eec0c6fe73def2a2f40ca1610b. The release commit checks passed 256 tests on each Linux Python runtime. Both archives were compared byte-for-byte with all 48 tagged files; SHA256SUMS covers the archives, four source files and manifest.
Post-publication Dots deployment
On 2026-10-21, the user's Dots installation was explicitly upgraded to the stable 0.4.0 package. Its four sources and manifest match the published release assets exactly; updater status is applied. Fresh strict-host-key SSH and DERP ping succeeded, the public node/SSH identity and proxy configuration stayed unchanged, and the existing watchdog remained healthy. Tailscale remains 1.102.4.
The direct --tag request through the shared platform proxy returned the structured rate_limited error before replacement. The already verified public release assets were therefore transferred from the maintainer's device using SCP and applied as a local bundle. No GitHub credentials were copied into Dots. This verifies the released bundle deployment; it does not claim a successful GitHub API download from the rate-limited Dots egress.