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

141 lines
6.7 KiB
Markdown

# 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:
```text
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.