Files
Firelink/CROSS_PLATFORM_CHECKLIST.md
T
NimBold f603b74a99 feat(release): add cross-platform packaging
Add target-aware engine provisioning, platform package configs, and CI/release verification for macOS arm64, Windows x64, and Linux AppImage.
2026-06-23 21:26:51 +03:30

6.7 KiB

Firelink Cross-Platform Release Checklist

Audit date: 2026-06-23

Targets:

  • macOS arm64
  • Windows x64
  • Linux x64 AppImage

Current status

Target Implementation Validation
macOS arm64 Complete Native build, packaged-engine verification, and packaged launch smoke passed
Windows x64 Complete Payload provision/static verification passed; native CI and clean-machine QA pending
Linux x64 AppImage Complete Payload provision/static verification passed; native CI and desktop-matrix QA pending

Windows/Linux publication remains blocked until native GitHub Actions and clean-machine QA pass. macOS distribution is intentionally unsigned and unnotarized because no Apple Developer account is planned.

Implemented foundations

  • Central target triple, executable suffix, trusted system PATH, engine naming, and path-comparison helpers.
  • Target-aware engine resolver for development and packaged resources.
  • Absolute yt-dlp downloader/tool paths. Unix symlink staging removed.
  • Official PyInstaller onedir yt-dlp payloads retained for every target.
  • Checksum-pinned source archives, payload manifests, target-only staging, and packaged-resource verification.
  • macOS Keychain, Windows Credential Manager, and Linux Secret Service keyring backends.
  • Session-only browser pairing fallback when native credential storage is unavailable.
  • OS standard directories plus synchronously persisted user-approved download roots.
  • Windows reserved filename sanitization and platform-correct duplicate path comparison.
  • Platform-specific Tauri window and bundle configuration.
  • Native CI matrix and release jobs for unsigned macOS DMG, unsigned Windows NSIS, and Linux AppImage.
  • Linux deep-link registration without native messaging.
  • Platform-aware scheduler permissions, tray/menu labels, dock badge, notifications, proxy behavior, and sleep prevention.
  • Cancellable delayed post-queue system actions with active-transfer recheck.
  • Bounded local logging enabled by default, secret/home-path redaction, and safe export naming.
  • Third-party notices and engine provenance locks included in packages.

Engine payloads

Required names:

macOS arm64
aria2c-aarch64-apple-darwin
yt-dlp-aarch64-apple-darwin
ffmpeg-aarch64-apple-darwin
deno-aarch64-apple-darwin

Windows x64
aria2c-x86_64-pc-windows-msvc.exe
yt-dlp-x86_64-pc-windows-msvc.exe
ffmpeg-x86_64-pc-windows-msvc.exe
deno-x86_64-pc-windows-msvc.exe

Linux x64
aria2c-x86_64-unknown-linux-gnu
yt-dlp-x86_64-unknown-linux-gnu
ffmpeg-x86_64-unknown-linux-gnu
deno-x86_64-unknown-linux-gnu

Supply-chain files:

  • engines.lock.json: committed macOS payload hashes.
  • engine-sources.lock.json: Windows/Linux archive URLs and hashes.
  • scripts/provision-engines.js: download, checksum, extract, normalize, and manifest.
  • scripts/stage-engines.js: verify and stage one target.
  • scripts/verify-binaries.js: architecture, runtime layout, linkage, version, startup, and aria2 RPC checks.

yt-dlp must remain launcher plus adjacent _internal. Onefile builds are rejected. Warm startup target remains below eight seconds; current macOS warm --version measured about 0.23 seconds.

Filesystem and permissions

  • Download authorization uses canonical paths and approved roots; no hardcoded /Volumes.
  • Folder-dialog selections are approved synchronously in backend before enqueue, avoiding settings-persistence races.
  • Open, reveal, replace, and delete operations remain constrained to Firelink-owned paths.
  • ~, Windows separators, missing leaf components, symlinks, and case rules are handled per platform.
  • Scheduler automation permission controls appear only on macOS. Windows/Linux show honest system-policy behavior.
  • Sleep prevention uses platform backend behavior and surfaces errors.
  • Browser pairing survives credential-store failure only for current session and reports that state.

Desktop integration

  • macOS: dock badge, menu-bar wording, transparent sidebar window, unsigned/unnotarized release.
  • Windows: system tray wording, Mica window config, NSIS installer, SmartScreen warning expected while unsigned.
  • Linux: system tray wording, opaque decorated window, AppImage, runtime deep-link registration.
  • Notifications request permission and surface denial/errors. Sound names are platform-specific where verified.
  • Post-queue sleep/shutdown/restart waits ten seconds, can be cancelled, and aborts if transfers resume.

Logging and privacy

  • Logging starts enabled and rotates at 10 MB with three retained files.
  • Authorization, cookies, signed URL queries, tokens, and home paths are redacted.
  • Export avoids exposing source log directory paths.
  • Logs remain local unless user explicitly exports them.

Browser integration

  • Existing authenticated loopback HTTP integration remains.
  • Responses identify Firelink through X-Firelink-Server.
  • Pairing tokens use native credential storage where available.
  • No native-messaging dependency is introduced.

Validation completed

  • Frontend: 31 tests passed.
  • Rust: 82 unit tests passed, 1 network-dependent test ignored.
  • Download engine: 5 integration tests passed.
  • Queue manager: 17 integration tests passed.
  • TypeScript/Vite production build passed.
  • Rust/TypeScript binding generation passed.
  • Windows and Linux payload provisioning plus static architecture/runtime-layout verification passed.
  • macOS target staging, engine runtime/RPC verification, release .app build, packaged-resource verification, notice layout, and outside-repository launch smoke passed.
  • Workflow YAML parsing and git diff --check passed.

Native QA still required

Windows x64

  • Run CI/release jobs on windows-latest.
  • Install NSIS output on clean Windows 11 x64.
  • Verify SmartScreen flow, tray, notifications, sleep prevention, file dialogs, path case behavior, Credential Manager persistence, browser handoff, media download, pause/resume, replace/delete, scheduler, and uninstall.

Linux x64

  • Run CI/release jobs on Ubuntu 22.04.
  • Launch extracted AppImage under X11 and Wayland desktops.
  • Verify Secret Service present and absent behavior, tray support variance, notifications, sleep inhibition, file dialogs, deep links, browser handoff, media download, pause/resume, replace/delete, scheduler, and AppImage portability.

macOS arm64

  • Test downloaded unsigned artifact on a clean machine.
  • Confirm documented Finder/Privacy & Security approval flow.
  • Verify first-launch unsigned-engine delay, notifications, menu bar, sleep prevention, scheduler automation permission, browser handoff, and media download.

Release decision

Implementation phase is complete. Release certification is not complete until native Windows/Linux workflows and clean-machine QA pass. Failures found there must be fixed at root before publication.