- allocate engine workspace on the repository drive when os.tmpdir() is cross-drive on Windows
- resolve RUNNER_TEMP on GitHub Actions to align workspace drive with checkout
- strip Win32 \\?\ verbatim prefixes to ensure Tauri resource normalizer compatibility
- execute node scripts/tauri-command.js build directly instead of npm run tauri build --
- prevent PowerShell from consuming -- on Windows runners and triggering npm version print
- maintain cross-platform build parity across macOS, Linux, and Windows
- Restore 24px bottom margin on .settings-network-panel .mac-settings-group and add defensive top margin on subsequent section titles to prevent card collision with section headings
- Unify Identity section within the network-settings-panel-general tabpanel to fix ARIA containment and layout hierarchy
- Guard system proxy status note to avoid empty border rows during idle and display contextual status icons with settings-network-note styling
- Align Site Logins validation error messages to the input column in the two-column grid
- Make Integrations step guide cards flexible with min-h-[190px] to prevent vertical text clipping across translations and large font sizes
- discover active macOS dynamic store proxies via scutil before networksetup
- treat missing registry keys and unavailable probe tools as clean absence instead of hard error
- support two-part versions and tag-exact asset patterns in BtbN FFmpeg updates
- normalize BtbN n-prefixed FFmpeg versions in sidecar status checks
- require Node 22.12 across local and CI execution
- make lifecycle and persistence suites repeat-safe
- add a five-repeat race gate with filesystem module caching
- update supported npm packages and compatible Cargo locks
- move direct base64 encoding to scalar-only 0.23.1
- preserve Aria2 torrent payload encoding with an exact regression test
- Bundle updated aria2c binary with TUN/Fake-IP address translation matching and default DHT bootstrap nodes
- Fallback to 32-bit transaction ID correlation for UDP tracker replies and DHT messages when upstream rewrites return IP
- Cache UDP tracker connection IDs for both rewritten and original addresses to unblock pending announces
- Default to public DHT bootstrap routers on startup to eliminate zero-node routing table starvation
- Update engines.lock.json checksum for the staged aarch64-apple-darwin aria2c sidecar
- keep magnet probe cleanup and resolver fallback inside absolute deadlines
- route provider media and playlists only through HTTP(S)
- enforce scheduler ID, time-format, and running-state invariants across persistence
- isolate Companion release tag checks from ambient Git configuration
- Use NativeAsyncResolver as primary for queue transfers and magnet probes when route contract is available
- Fall back to standard system resolver options on stock Aria2 builds without custom flags
- Guarantee minimum 5s cleanup reserve budget to prevent zero-duration probe cleanup timeouts
- Prevent Aria2 single-threaded main loop freezing under TUN proxies (ref #38)
- update BtbN FFmpeg autobuild URLs and SHA-256 digests in engine-sources.lock.json to 2026-09-02 release
- upgrade sha1 to 0.11 to deduplicate with tungstenite and eliminate duplicate sha1 0.10.7 and digest 0.10.7 crates
- bump rustls (0.23.43), sysinfo (0.39.6), thiserror (2.0.20), keepawake (0.6.1), rusqlite (0.40.2), and log (0.4.34) in Cargo.toml
- update platform-specific native keyring store dependencies for macOS (1.0.2) and Linux (1.0.1)
- update Cargo.lock transitive dependencies including trash (5.2.7), mio (1.2.3), open (5.4.3), sigchld (0.2.5), and toml (1.1.5)
- keep base64 pinned to 0.22 to preserve alignment with the Tauri and Hyper ecosystem
- Keep normal and Torrent transfers on the system resolver while preserving proxy routing.\n- Gate the alternate magnet resolver on the optional Firelink capability and disable its default target policy for system-route transfers.\n- Allow stock Windows/Linux engine payloads and make the metadata timeout regression deterministic.
- Keep hostname resolution on the active OS, TUN, proxy, or Aria2 route while blocking literal local targets.\n- Propagate and attest the Firelink Aria2 resolver and network-policy contract across normal, Torrent, and magnet paths.\n- Fence magnet probe cleanup, redirect/range policy, lifecycle races, and engine staging with regression and smoke coverage.
- keep reqwest metadata on its supported proxy route and require Aria2 asynchronous DNS
- fence magnet probe ownership and delayed RPC cleanup without cross-transfer removal
- validate Torrent DHT nodes, web seeds, proxy inputs, and literal IPv4/IPv6 targets
- extend regression and smoke coverage for issue #38
Refs: #38
- Bind new replacement fingerprints to file contents and open-handle identity.\n- Preserve legacy recovery state and keep hashing off async and IPC threads.\n- Refs: #39
- Point the Browser submodule at the pushed Companion Edge-preparation commit 20e677d.
- Keep the Firelink 1.4.0 desktop compatibility contract aligned with the extension.
- Keep issue #39 open pending Edge Add-ons upload and Microsoft certification.
- Share literal-target policy and route selection across metadata, Aria2, Torrent, and yt-dlp paths.
- Start direct Aria2 resolution with system DNS and fence a bounded alternate resolver fallback.
- Validate Torrent trackers/web seeds and harden magnet probe cleanup and lifecycle handling.
- Add route, resolver, fallback, and smoke coverage without changing browser IPC payloads.
Refs: #38
- Fixes#37.
- Mark username-only and username-without-password edits for credential recovery immediately.
- Keep in-memory and persisted retry behavior aligned without reusing stale request credentials.
Refs #37.
- Keep the transparent Properties window renderer-owned at its rounded corners without native shadow bleed.
- Keep the complete custom caption-control rail outside Tauri drag hit-testing so every button area receives clicks.
- Retry credential-marked downloads through a fresh lifecycle with restored keychain credentials or a safe credentialless request.
- Preserve keychain consent boundaries, sanitize unavailable request credentials, and retain retryable errors when recovery fails.
- Remove the obsolete manual credentialless retry confirmation and keep all start/resume entry points consistent.
- Issue #37: Windows still overflowed when startup IPC ran from the WebView2 load callback.
- Release the renderer startup gate on the next event-loop task after load returns.
- Keep logger and console forwarding behind the same post-load boundary.
Fixes#37.
- Issue #37: Windows 1.4.0 exited with STATUS_STACK_OVERFLOW before showing the main window.
- Gate lazy entrypoint imports, Zustand persistence, logger initialization, and console forwarding until WebView2 document load.
- Preserve the native Ready reveal and pending-window restore lifecycle across platforms.
- Show a closeable startup error if the main entrypoint cannot load.
Fixes#37.
- Issue #37: Windows 1.4.0 exited before showing its main window.\n- Keep the logger state read independent of WebViewWindow extraction during WebView2 bootstrap.\n- Preserve main-window authorization for logging mutations and keep the process-wide pause state consistent across renderers.\n\nFixes #37.
- Issue #37: keep the Windows host hidden, unfocused, and non-activatable while WebView2 is constructed.\n- Restore focusability and reveal the main window only after Tauri reports Ready.\n- Preserve queued startup restores on non-Windows instead of clearing them before servicing.\n\nFixes #37.
- Keep the Windows WebView host hidden and unfocused during native construction.\n- Queue deep-link, torrent, single-instance, and extension restore requests until Tauri is ready.\n- Reveal and focus the main window through one startup-safe path.\n\nFixes #37.
- Keep the main WebView2 window unfocused during native construction.
- Remove the synchronous post-build focus request that caused the Windows stack overflow.
- Refs #37.
- Create the main Windows WebView without requesting focus until the native window exists.\n- Keep hidden Properties WebViews unfocused until their reveal path.\n- Make packaged smoke checks observe startup stability and clean up lingering Unix helpers.\n- Refs #37
- Issue #37: allow Windows AppData junctions to resolve before the main window starts.
- Keep reparse-point rejection for user-selected download and recovery paths.
- Add Windows junction coverage and v1.3.1 schema migration data-preservation coverage.
- recursively prune empty Torrent output directories without deleting unrelated content
- handle metadata-named directories and fail closed on links or substitutions
- flush current persisted status after in-flight dispatch before Delete File removal
- add recursive cleanup and persistence race regressions
- advance Companion to the Firefox paused-download handoff fix\n- keep the desktop checkout paired with Companion main\n- preserve the existing Add modal metadata feedback changes
- advance the Browser Companion to the published handoff fix
- show Fetching state while optional magnet metadata is loading
- surface failed magnet metadata without blocking transfer-ready magnets
- preserve regression coverage for cross-layer state transitions
- allow pre-admission staged and paused magnets to remove without ownership
- inspect exact cached Torrent outputs and sidecars before bypassing the guard
- fail closed for malformed metadata and admitted lifecycles
- cover missing, unrelated, partial, and malformed asset cases
- recognize direct magnet schemes and keep metadata parents out of terminal completion
- adopt validated followed payload GIDs with bounded, lifecycle-fenced reconciliation
- route direct Torrent DNS through the system resolver for TUN clients
- make magnet preview optional and repair stale fallback drafts
- release paused handoff permits and show peer-wait state consistently
- cover the lifecycle and failure paths with Torrent smokes and regression tests
- admit valid magnets immediately while keeping metadata refresh optional
- fence Torrent recovery, diagnostics, and allocation presentation by lifecycle
- avoid false peer-wait claims when telemetry is missing or malformed
- stabilize Properties metric label/value layout for narrow and RTL windows
Tests:
- npm test -- --run
- npm run build
- npm run check:i18n
- node --test scripts/*.node-test.js
- cargo test --all-targets
- npm run smoke:torrent
- npm run smoke:torrent:failure-paths
- git diff --check
- Treat the persisted staged row as its own legacy ownership claim
- Keep cross-download and ambiguous ownership conflicts fail-closed
- Cover persisted self-claim cleanup and changed-target protection