Guard malformed Torrent metadata before it can disrupt the daemon. Refresh the locked engine hashes and keep regression coverage for a concurrent active transfer.
- Fence progress events with download lifecycle and Aria2 control epochs.
- Keep queue ownership, retries, and connection handling consistent through transfer races.
- Preserve browser and deep-link inputs through startup, including login-item query failures.
- Report allocation from native evidence and improve tray lifecycle handling.
- Add queue, transfer, UI, and packaged smoke regressions.
- Persist valid progress checkpoints and reject stale media events across restarts.
- Fence shutdown and daemon recovery by exit generation; retain interrupted media IDs until recovery completes.
- Preserve queue order and ignore stale proxy failures during queue starts.
- Serialize torrent cache cleanup with active cache and probe ownership.
- Add regression coverage for persistence, queue, shutdown, and recovery races.
- update i18next, React i18n, Lucide, and compatible npm and Cargo locks
- refresh Windows and Linux FFmpeg 9.0.2 archives with verified hashes
- report compatible npm wanted versions and handle nested, duplicate, and optional packages
- update Node and Rust CI pins and document Windows 10 22H2 qualification
- Pin the deep-link Linux compatibility fix and reject unsupported Safari cookie sources.
- Preserve and serialize scheduler run boundaries, stop acknowledgements, and shutdown journal admission.
- Serialize macOS LaunchAgent plists and manage only Firelink-owned entries.
- Fix Companion cross-frame media ranking and keep request context attached to the winning observation.
- Update Tauri, React, i18n, and test tooling packages
- Use secret-aware clipboard writes for pairing tokens
- Refresh Windows and Linux FFmpeg sources
- Run descendant cancellation in a dedicated integration test executable.
- Use Windows process-handle state to verify descendant termination.
- Refs #44
- Encode Linux autostart Exec paths and preserve Add row selection across discovery.
- Queue media discovery updates during busy flows and bound session registries.
- Journal terminal completions across shutdown and restore Aria2 dispatch state safely.
- Add accessible Add row controls and lifecycle regression coverage.
Refs #44
- Add persisted browser-specific profile paths for issue #44.
- Carry profile identity through metadata, playlist, enqueue, and media retry paths.
- Validate paths and show translated path-redacted errors while retaining Netscape fallback.
- Inspect launcher permissions from stored SquashFS metadata.
- Pin and checksum the runtime embedded during AppImage packaging.
- Cover metadata validation and release tool inputs with regression tests.
- Keep the Tauri mock regression off Windows runners that cannot launch the harness.
- Retain Windows compilation and supported native integration coverage.
- Capture request identity before async work and reject stale picker flows before and after every async prompt step.
- Preserve selected directory paths with meaningful whitespace while treating blank picker values as cancellation.
- Add coverage for the single batch prompt, cancellation values, and stale request races.
Addresses an issue reported by a user on X where starting downloads with "Ask where to save when adding downloads" enabled caused repeated folder selection prompts in an apparent loop for multi-item additions.
- Replace per-item folder picker loop in AddDownloadsModal with a single prompt per submission transaction
- Add resolveAddWindowPromptOptions and resolveAddWindowPromptRoot helpers to determine dialog title and avoid category scatter or duplicate nested batch folders
- Robustly handle string, array, and whitespace picker return values
- Guard against zombie completion across modal unmounts or stale requests
- Correctly propagate approved path to finalLocation, useSharedDestination, and modal state
- Add unit tests covering prompt options and root resolution
Harden browser handoff, tray, scheduler, and downloader recovery paths.
- Add an explicit yt-dlp default-format choice after eligible metadata failures
- Fence startup and Add-window work against pause, persistence, and exit races
- Persist scheduler tracking before acknowledging triggers and surface tray failures
- Preserve final download state through Aria2 shutdown and prevent stale tray replay
- Cover restart, allocation, queue, scheduler, and exit lifecycle regressions
- Normalize and verify launcher, AppDir, and GTK hook permissions before and after repacking.
- Reject unsupported target triples before deriving or deleting payload paths.
- Align the published AppImage filename with catalog discovery and document the host glibc floor.
- Add regression coverage for permission, layout, symlink, and target traversal failures.
- Update Tauri 2 JavaScript and Cargo dependencies; remove unused JS filesystem plugin.
- Refresh verified Windows/Linux FFmpeg sources and pin workflow actions.
- Test supported Node lines, move native jobs to Node 24, and target the macOS 27 runner.
- Build patched Windows Aria2 with MSYS2 UCRT64 and fingerprint the selected environment.
- Wrap status summaries without clipping on narrow workspaces.
- Preserve sidebar row identity and update category counts only with download state changes.
- Serialize Speed Limiter updates after settings hydration and await durable persistence.
- Isolate the live-limit and settings-save commands in a small IPC handler.
- Keep Issue #42 open for follow-up runtime validation.
- Generate an isolated audio/video fixture and verify split, merge, and decoding.\n- Package, read, remux, and decode HLS and DASH streams.\n- Run the smoke against each staged FFmpeg in the native CI matrix.
- Update lucide-react, Vite, Vitest, and thiserror dependency locks.\n- Refresh Windows and Linux FFmpeg locks to verified upstream archives.\n- Keep transitive updates within supported dependency ranges.
- make browser media handoff immediate with bounded, replay-safe discovery
- fence native and frontend acknowledgement, rejection, lifecycle, and stale retry paths
- add secure yt-dlp cookie-file authentication with read-only arguments and cache identity
- wire settings, metadata, queue, i18n, bindings, and the published Companion gitlink
- add regression coverage for delayed, failed, ambiguous, and replayed media flows
- Register per-user startup on Windows, XDG autostart on Linux, and SMAppService with a macOS fallback.
- Keep login launches hidden with tray recovery and synchronize OS-backed state through typed IPC.
- Add accessible localized settings UI and regression coverage.
- Refs #40: recognize yt-dlp missing browser cookie databases on macOS, Linux, and Windows.
- Preserve the one-shot fallback across metadata, playlist metadata, and final downloads.
- Add positive and negative classifier coverage without changing explicit auth or format errors.
- Detect direct HLS, DASH, and Smooth Streaming manifests with explicit Add-window media modes.
- Harden duplicate replacement, browser-handoff lifecycle, and native media-header/referrer validation.
- Integrate the reviewed Companion discovery implementation at Extensions/Browser.
- Issue #40: implement the short-term media-download plan.
- Issue #39: keep the related handoff work linked for follow-up.
- return identified 503 responses until pairing-token hydration and frontend readiness
- preserve terminal invalid-token and ambiguous-delivery status boundaries
- advance the Companion submodule to the hardened Firefox capture implementation