Add SSH-authenticated transports with independent settings, protocol-aware menus and snippets, and tmux session persistence.
Restore eligible iOS workspaces from encrypted transport checkpoints without adding a macOS recovery entry. Include schema migrations and regression coverage.
Add extensible remote session backends, safe ownership and restore handling, and pane-scoped shell integration over the existing SSH connection.
Keep iOS workspaces in memory and rebuild expired Activity targets on demand. Integrate session selection into Connection Journey with consistent controls, cancellation behavior, and localized counts.
Localize German, French, and Korean demo content and capture workflows. Preserve real software keyboards and invariant numeric parsing during captures. Sort language choices by code and update the published documentation and marketing asset submodules.
Centralize route lookup, progress fencing, reconnect scheduling, and authentication continuation while retaining channel-specific teardown and persistence policies.
Validate architecture boundaries, authentication, reconnect, routing, and new regression coverage. The full macOS suite had two timing failures; both passed focused reruns.
Consolidate code that existed twice and drop code nothing reaches.
- SSH: hoist the duplicated ASCII hex-nibble decoder out of
RemoteCharsetConverter and SSHPTYChannel into SSHWireEncoding.hexDigit.
- Transcript: AgentToolDetail.Tint shares BatchTint's vocabulary, so the
byte-identical detailColor map now delegates to batchColor.
- Commerce: replace ProPaywallState's unreachable default branch and its
`preconditionFailure("Handled above")` with an exhaustive switch the
compiler can prove complete.
- Strings: delete the unreferenced Workspace.closePaneAction (the live help
text uses closePane) and its orphan catalog entry.
- Drop the unused SwiftData and UniformTypeIdentifiers imports.
Co-Authored-By: Claude Code <noreply@anthropic.com>
The toggle describes behavior in tray terms rather than as a hidden
launch, so rename the string to "Start minimized to system tray" and
sync the Japanese and both Chinese translations.
Co-Authored-By: Claude Code <noreply@anthropic.com>
Remove the transfer forwarding adapter, borrowed SFTP channel scheduling,
legacy assistant send entry points, unreachable Telnet password state,
unused Tailscale APIs, and unused host deletion impact projections.
Migrate behavioral tests to current paths and cover SFTP passphrase saving.
Validation: Swift formatting and shared-copy/localization checks passed.
The macOS test run reported failures in ConnectionStatusIconLayoutTests
and AgentRuntimeTests; investigation and iOS validation remain pending.
Update TailscaleKit to 1.0.2, align the state namespace with the app identifier, and verify scoped cleanup in signed macOS and iOS app hosts.
BREAKING CHANGE: Existing legacy Tailscale Keychain state is not migrated. Sign in again to create device-local Data Protection Keychain state.
Reuse card content across macOS and iOS with platform-sized icons and matching card heights. Add the shared Color field below Package and preserve selection, drag, and execution behavior.
Migrate stored snippets to V51 and write color in Vault V2 while retaining V1 decoding and guarding against lossy V1 writes.
Validation: macOS focused snippet, migration, architecture, and localization tests pass; 30 iOS focused tests pass; Swift format and localization checks pass. Full macOS testing also reports failures in unchanged KeyExport, MCP, and Agent suites.
Derive groupScopedV2 host UUIDs from the group, MagicDNS suffix and stable
node ID. Remove experimental identity compatibility and Tailnet conflict
handling, and hide unavailable Metrics hosts while retaining configuration.
Keep saved enrollments active until Save. Retire unsaved login candidates
on Logout or Discard, including repeated replacement logins, while preserving
the original enrollment. Use the same behavior in New and Edit forms.
Validation: 94 focused tests, iOS Simulator build, Swift formatting and
AppStrings/Chinese localization checks passed. The default suite still has
9 failures in untouched notification, agent and key export tests.
BREAKING CHANGE: Tailscale only accepts groupScopedV2 identities. Remove
old Tailscale test data before using this build; no ID migration is provided.