Files
alchemist/Cargo.toml
bybrooklyn 9fb6b480eb chore: release v0.3.0
Since v0.2.9, Alchemist gains the first stable 0.3.0 release with:

Security:
- Fixed a critical bug where a config parse failure on a configured instance could re-enable unauthenticated setup endpoints.
- Session cookies are no longer marked Secure by default, restoring plain HTTP and LAN login flows unless ALCHEMIST_COOKIE_SECURE=true is set.
- Restricted /api/fs/* filesystem browsing to loopback clients during initial setup.
- Hardened proxy header handling with explicit trust configuration.

Library and encoding:
- Added per-library transcoding profiles with built-in presets.
- Added lossless MP4/MOV to MKV remuxing when a file is already in the target codec.
- Added subtitle sidecar extraction for text subtitle tracks.
- Added stream rules for commentary stripping, language filtering, and default-track retention.
- Added optional VMAF quality gating.
- Added duplicate detection in Library Intelligence.
- Added Library Doctor health scanning.
- Added mirrored output roots.

Job management:
- Added Skipped and Archived tabs.
- Added sort controls for jobs.
- Added per-job priority promotion.
- Added live retry countdowns.
- Added structured skip explanations.
- Added structured failure explanations.

Engine control:
- Added Background, Balanced, and Throughput runtime modes with manual overrides.
- Added drain mode.
- Added boot-time auto-analysis of queued jobs.

UI redesign:
- Replaced page h1 blocks with a compact engine control strip.
- Restructured the dashboard around compact stats, savings, and recent activity.
- Grouped log viewer entries by job.
- Rebuilt the setup wizard inside the main shell.
- Redesigned library selection around recommendations and chips.
- Replaced custom stats bars with Recharts area and bar charts.
- Merged hardware into Transcoding settings.
- Merged notifications and automation into one tab.
- Improved mobile navigation and jobs layout.
- Tightened typography and token usage across the design system.
- Added analyzing shimmer states and protected terminal job states from poll overwrites.

Reliability and stability:
- Added exponential retry backoff.
- Cleaned orphaned temp outputs and subtitle sidecar temp files on startup.
- Fixed infinite analysis loops and boot-analysis pagination.
- Kept the engine running when the queue drains so new watcher jobs are picked up.
- Serialized analysis passes and dropped overlapping watcher-triggered passes.
- Added job stall detection.
- Fixed graceful shutdown on Ctrl+C and SIGTERM.
- Added log retention pruning.
- Added auth session cleanup.
- Cached /api/system/resources for 500ms.
- Added a Drop guard for in_flight_jobs.
- Stopped re-probing completed job detail source files when encode_stats already exist.

Hardware and encoding:
- Fixed Apple VideoToolbox encodes with -allow_sw 1, yuv420p conversion, and hvc1 tagging.
- Switched Intel Arc selection to VAAPI-first with QSV as last resort.
- Improved audio planning so lossless codecs transcode while common Atmos/EAC3 tracks can copy.
- Added libopus runtime fallback to AAC when libopus is unavailable.
- Surfaced fuller FFmpeg failure logs and VideoToolbox-specific failure explanations.

Backend architecture:
- Upgraded to Rust 2024 and MSRV 1.85.
- Upgraded sqlx to 0.8 and rand to 0.9.
- Removed async-trait in favor of native async fn traits with trait-variant where needed.
- Split server.rs into focused submodules.
- Moved ffprobe execution to tokio::process::Command with a timeout.
- Split high-volume and low-volume broadcast channels.
- Hardened cancellation-lock recovery and stderr truncation.
- Added warnings for invalid notification and schedule JSON plus safer analysis pagination limits.

Database:
- Extended decisions with structured reason codes and payload JSON.
- Added job_failure_explanations with legacy fallback support.
- Added indexes for structured explanation filtering.
- Preserved automatic upgrades from 0.2.5 onward.

CI/CD and tooling:
- Added nightly workflows using the shared build pipeline.
- Added actionlint to release checks.
- Added the Playwright reliability suite to CI.
- Documented and validated the Windows contributor workflow.
- Expanded just release-check to cover fmt, clippy, tests, actionlint, web verify, docs build, E2E, and backend build.
- Standardized release binaries and checksums.
- Published multi-arch Docker images for linux/amd64 and linux/arm64.

Release metadata and docs cleanup:
- Bumped Cargo, VERSION, web, web-e2e, and docs manifests to 0.3.0.
- Updated stable changelog dates and nightly image references.
- Removed stale RC-era Windows wording from the README and docs.
- Clarified that the Windows core contributor path is supported while broader utility and release recipes remain Unix-first.
- Clarified that AMD AV1 remains outside the validated 0.3.0 support matrix.
- Aligned Docker Compose, Helm, and release-facing docs on ghcr.io/bybrooklyn/alchemist.
2026-04-06 11:25:48 -04:00

53 lines
1.3 KiB
TOML

[package]
name = "alchemist"
version = "0.3.0"
edition = "2024"
rust-version = "1.85"
license = "GPL-3.0"
build = "build.rs"
[features]
default = ["embed-web"]
embed-web = []
[lib]
name = "alchemist"
[[bin]]
name = "alchemist"
path = "src/main.rs"
[dependencies]
tokio = { version = "1", features = ["full"] }
clap = { version = "4.4", features = ["derive"] }
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
walkdir = "2"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
anyhow = "1.0"
sqlx = { version = "0.8", features = ["runtime-tokio-rustls", "sqlite", "macros", "chrono", "migrate"] }
chrono = { version = "0.4", features = ["serde"] }
num_cpus = "1.16"
inquire = { version = "0.7" }
futures = { version = "0.3" }
toml = "0.8"
axum = { version = "0.7", features = ["macros"] }
rayon = "1.10"
tokio-stream = { version = "0.1", features = ["sync"] }
thiserror = "2.0.17"
notify = { version = "6" }
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] }
rust-embed = { version = "8", features = ["axum"] }
mime_guess = "2.0"
argon2 = "0.5.3"
rand = "0.9"
sysinfo = "0.32"
uuid = { version = "1", features = ["v4"] }
sha2 = "0.10"
trait-variant = "0.1.2"
[dev-dependencies]
http-body-util = "0.1"
tower = { version = "0.5", features = ["util"] }