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.
This commit is contained in:
2026-04-06 11:25:48 -04:00
parent ed71d771ea
commit 9fb6b480eb
19 changed files with 38 additions and 37 deletions

View File

@@ -2,7 +2,7 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## [0.3.0] - 2026-04-05 ## [0.3.0] - 2026-04-06
### Security ### Security
- Fixed a critical bug where a config parse failure on a configured instance would re-enable unauthenticated setup endpoints (filesystem browse, settings bundle) for any network client. - Fixed a critical bug where a config parse failure on a configured instance would re-enable unauthenticated setup endpoints (filesystem browse, settings bundle) for any network client.
@@ -89,7 +89,7 @@ All notable changes to this project will be documented in this file.
- All databases from v0.2.5 onwards upgrade automatically; no manual migration required. - All databases from v0.2.5 onwards upgrade automatically; no manual migration required.
### CI/CD & Tooling ### CI/CD & Tooling
- Nightly workflow: runs on every push to `main` after checks pass, builds all platforms, publishes `ghcr.io/brooklynloveszelda/alchemist:nightly` with `{VERSION}-nightly+{short-sha}` versioning. - Nightly workflow: runs on every push to `main` after checks pass, builds all platforms, publishes `ghcr.io/bybrooklyn/alchemist:nightly` with `{VERSION}-nightly+{short-sha}` versioning.
- Shared reusable `build.yml` workflow so nightly and release builds use identical pipelines. - Shared reusable `build.yml` workflow so nightly and release builds use identical pipelines.
- `actionlint` added to `just release-check`. - `actionlint` added to `just release-check`.
- E2E reliability suite (`just test-e2e`) runs in CI after the frontend check passes. - E2E reliability suite (`just test-e2e`) runs in CI after the frontend check passes.

2
Cargo.lock generated
View File

@@ -13,7 +13,7 @@ dependencies = [
[[package]] [[package]]
name = "alchemist" name = "alchemist"
version = "0.3.0-rc.3" version = "0.3.0"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"argon2", "argon2",

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "alchemist" name = "alchemist"
version = "0.3.0-rc.3" version = "0.3.0"
edition = "2024" edition = "2024"
rust-version = "1.85" rust-version = "1.85"
license = "GPL-3.0" license = "GPL-3.0"

View File

@@ -114,14 +114,15 @@ just build
Alchemist requires Rust 1.85 or later (MSRV). Use `rustup update stable` to ensure you are on a recent toolchain, and make sure FFmpeg is installed separately. Alchemist requires Rust 1.85 or later (MSRV). Use `rustup update stable` to ensure you are on a recent toolchain, and make sure FFmpeg is installed separately.
For Windows local development in RC.2: For Windows local development:
```bash ```bash
just install-w just install-w
just dev just dev
just check
``` ```
The broader `just` release and utility recipes are still Unix-first in RC.2. The core contributor path is supported on Windows. Broader release and utility recipes remain Unix-first.
## First Run ## First Run

View File

@@ -5,14 +5,14 @@
Use the repo bump script for version changes: Use the repo bump script for version changes:
```bash ```bash
just bump 0.3.0-rc.2 just bump <next-rc-version>
``` ```
Then complete the release-candidate preflight: Then complete the release-candidate preflight:
1. Update `CHANGELOG.md` and `docs/docs/changelog.md`. 1. Update `CHANGELOG.md` and `docs/docs/changelog.md`.
2. Run `just release-check`. 2. Run `just release-check`.
3. Verify the repo version surfaces all read `0.3.0-rc.2`. 3. Verify the repo version surfaces all read `<next-rc-version>`.
4. Complete the manual smoke checklist: 4. Complete the manual smoke checklist:
- Docker fresh install over plain HTTP, including login and first dashboard load - Docker fresh install over plain HTTP, including login and first dashboard load
- One packaged binary install and first-run setup - One packaged binary install and first-run setup
@@ -22,9 +22,9 @@ Then complete the release-candidate preflight:
- `just install-w` - `just install-w`
- `just dev` - `just dev`
- `just check` - `just check`
- Note that broader utility and release recipes remain Unix-first for RC.2. - Note that broader utility and release recipes remain Unix-first unless documented otherwise.
6. Commit the release-prep changes and merge them to `main`. 6. Commit the release-prep changes and merge them to `main`.
7. Create the annotated tag `v0.3.0-rc.2` on the exact merged commit. 7. Create the annotated tag `v<next-rc-version>` on the exact merged commit.
## Stable promotion ## Stable promotion
@@ -38,7 +38,7 @@ Promote to stable only after the RC burn-in is complete and the same automated p
- Packaged binary first-run - Packaged binary first-run
- Upgrade from the most recent `0.2.x` or `0.3.0-rc.x` - Upgrade from the most recent `0.2.x` or `0.3.0-rc.x`
- Encode, skip, failure, and notification verification - Encode, skip, failure, and notification verification
5. Re-run the Windows contributor verification checklist if Windows parity changed after RC.2. 5. Re-run the Windows contributor verification checklist if Windows parity changed after the last RC.
6. Confirm release notes, docs, and hardware-support wording match the tested release state. 6. Confirm release notes, docs, and hardware-support wording match the tested release state.
7. Merge the stable release commit to `main`. 7. Merge the stable release commit to `main`.
8. Create the annotated tag `v0.3.0` on the exact merged commit. 8. Create the annotated tag `v0.3.0` on the exact merged commit.

View File

@@ -1 +1 @@
0.3.0-rc.3 0.3.0

View File

@@ -2,7 +2,7 @@
replicaCount: 1 replicaCount: 1
image: image:
repository: ghcr.io/brooklynloveszelda/alchemist repository: ghcr.io/bybrooklyn/alchemist
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
tag: "latest" tag: "latest"

View File

@@ -1,6 +1,6 @@
services: services:
alchemist: alchemist:
image: ghcr.io/brooklynloveszelda/alchemist:latest image: ghcr.io/bybrooklyn/alchemist:latest
container_name: alchemist container_name: alchemist
restart: unless-stopped restart: unless-stopped
ports: ports:

View File

@@ -3,7 +3,7 @@ title: Changelog
description: Release history for Alchemist. description: Release history for Alchemist.
--- ---
## [0.3.0] - 2026-04-05 ## [0.3.0] - 2026-04-06
### Security ### Security
- Fixed a critical bug where a config parse failure on a configured instance would re-enable unauthenticated setup endpoints (filesystem browse, settings bundle) for any network client. - Fixed a critical bug where a config parse failure on a configured instance would re-enable unauthenticated setup endpoints (filesystem browse, settings bundle) for any network client.
@@ -90,7 +90,7 @@ description: Release history for Alchemist.
- All databases from v0.2.5 onwards upgrade automatically; no manual migration required. - All databases from v0.2.5 onwards upgrade automatically; no manual migration required.
### CI/CD & Tooling ### CI/CD & Tooling
- Nightly workflow: runs on every push to `main` after checks pass, builds all platforms, publishes `ghcr.io/brooklynloveszelda/alchemist:nightly` with `{VERSION}-nightly+{short-sha}` versioning. - Nightly workflow: runs on every push to `main` after checks pass, builds all platforms, publishes `ghcr.io/bybrooklyn/alchemist:nightly` with `{VERSION}-nightly+{short-sha}` versioning.
- Shared reusable `build.yml` workflow so nightly and release builds use identical pipelines. - Shared reusable `build.yml` workflow so nightly and release builds use identical pipelines.
- `actionlint` added to `just release-check`. - `actionlint` added to `just release-check`.
- E2E reliability suite (`just test-e2e`) runs in CI after the frontend check passes. - E2E reliability suite (`just test-e2e`) runs in CI after the frontend check passes.

View File

@@ -24,7 +24,7 @@ Hardware support:
- NVIDIA: RTX 30/40 class NVENC - NVIDIA: RTX 30/40 class NVENC
- Intel: 12th gen+ for AV1 encode - Intel: 12th gen+ for AV1 encode
- AMD: RDNA 2+ depending on driver/FFmpeg stack; not release-validated for `0.3.0-rc.1` - AMD: RDNA 2+ depending on driver/FFmpeg stack; available but not part of the validated `0.3.0` AV1 support matrix
- Apple: M3+ - Apple: M3+
- CPU: always available through SVT-AV1 - CPU: always available through SVT-AV1

View File

@@ -20,7 +20,7 @@ git clone https://github.com/bybrooklyn/alchemist.git
cd alchemist cd alchemist
just install # macOS / Linux bootstrap just install # macOS / Linux bootstrap
just install-w # Windows bootstrap just install-w # Windows bootstrap
just dev # supported on both paths in RC.2 just dev # supported on macOS, Linux, and Windows
``` ```
## Common tasks ## Common tasks
@@ -28,24 +28,24 @@ just dev # supported on both paths in RC.2
```bash ```bash
just install # macOS / Linux bootstrap just install # macOS / Linux bootstrap
just install-w # Windows bootstrap just install-w # Windows bootstrap
just check # supported on both paths in RC.2 just check # supported on macOS, Linux, and Windows
just test # cargo test just test # cargo test
just test-e2e # Playwright reliability suite just test-e2e # Playwright reliability suite
just db-reset # wipe dev DB, keep config just db-reset # wipe dev DB, keep config
just db-reset-all # wipe DB and config (re-triggers wizard) just db-reset-all # wipe DB and config (re-triggers wizard)
just bump 0.3.0-rc.2 # bump version in all files just bump <version> # bump version in all repo version files
just update 0.3.0-rc.2 # full guarded release flow just update <version> # full guarded release flow (Unix-first)
``` ```
## Windows support in RC.2 ## Windows contributor support
Windows contributor support in RC.2 covers the core path: Windows contributor support covers the core path:
- `just install-w` - `just install-w`
- `just dev` - `just dev`
- `just check` - `just check`
The following remain Unix-first for now and are deferred to RC.3 or later: The following remain Unix-first for now:
- broader `just` utility recipes such as database and Docker helpers - broader `just` utility recipes such as database and Docker helpers
- release-oriented guarded flows such as `just update` - release-oriented guarded flows such as `just update`

View File

@@ -11,7 +11,7 @@ Alchemist is GPLv3 open source. Contributions are welcome.
- [`CONTRIBUTING.md`](https://github.com/bybrooklyn/alchemist/blob/main/CONTRIBUTING.md) for licensing and contribution terms - [`CONTRIBUTING.md`](https://github.com/bybrooklyn/alchemist/blob/main/CONTRIBUTING.md) for licensing and contribution terms
- [`RELEASING.md`](https://github.com/bybrooklyn/alchemist/blob/main/RELEASING.md) for release and RC checklists - [`RELEASING.md`](https://github.com/bybrooklyn/alchemist/blob/main/RELEASING.md) for release and RC checklists
RC.2 adds a supported Windows contributor path for `just install-w`, Windows contributors have a supported path for `just install-w`,
`just dev`, and `just check`. Other `just` recipes are still Unix-first. `just dev`, and `just check`. Other `just` recipes are still Unix-first.
## Reporting bugs ## Reporting bugs

View File

@@ -30,7 +30,7 @@ deterministic scoring policy. Override in
|--------|-----|------|-------|-------| |--------|-----|------|-------|-------|
| NVIDIA NVENC | RTX 30/40 | Maxwell+ | All | Best for speed | | NVIDIA NVENC | RTX 30/40 | Maxwell+ | All | Best for speed |
| Intel QSV | 12th gen+ | 6th gen+ | All | Best for power efficiency | | Intel QSV | 12th gen+ | 6th gen+ | All | Best for power efficiency |
| AMD VAAPI/AMF | RDNA 2+ on compatible driver/FFmpeg stacks | Polaris+ | All | Linux VAAPI / Windows AMF; HEVC/H.264 are the release-validated AMD paths for `0.3.0-rc.1` | | AMD VAAPI/AMF | RDNA 2+ on compatible driver/FFmpeg stacks | Polaris+ | All | Linux VAAPI / Windows AMF; HEVC/H.264 are the validated AMD paths for `0.3.0` |
| Apple VideoToolbox | M3+ | M1+/T2 | All | Binary install recommended | | Apple VideoToolbox | M3+ | M1+/T2 | All | Binary install recommended |
| CPU | All | All | All | Always available | | CPU | All | All | All | Always available |

View File

@@ -7,9 +7,9 @@ AMD uses VAAPI on Linux and AMF on Windows. Set
**Settings → Hardware → Preferred Vendor** to `amd` if you **Settings → Hardware → Preferred Vendor** to `amd` if you
want to pin it instead of using auto detection. want to pin it instead of using auto detection.
For `0.3.0-rc.1`, treat AMD AV1 as driver and FFmpeg-stack AMD AV1 remains driver- and FFmpeg-stack-dependent and is
dependent rather than release-validated. HEVC and H.264 are not part of the validated `0.3.0` support matrix. HEVC and
the recommended AMD paths for this release candidate. H.264 are the recommended AMD paths for `0.3.0`.
## Supported hardware ## Supported hardware
@@ -17,7 +17,7 @@ the recommended AMD paths for this release candidate.
|------|---------| |------|---------|
| H.264 | Polaris+ | | H.264 | Polaris+ |
| HEVC | Polaris+ | | HEVC | Polaris+ |
| AV1 | RDNA 2+ on compatible driver/FFmpeg stacks; not release-validated in `0.3.0-rc.1` | | AV1 | RDNA 2+ on compatible driver/FFmpeg stacks; available but not part of the validated `0.3.0` support matrix |
## Linux ## Linux

View File

@@ -87,15 +87,15 @@ just build
Requires Rust 1.85+. Run `rustup update stable` first. Requires Rust 1.85+. Run `rustup update stable` first.
For Windows local development in RC.2: For Windows local development:
```bash ```bash
just install-w just install-w
just dev just dev
``` ```
Windows contributor support in RC.2 is limited to the core `install/dev/check` Windows contributor support covers the core `install/dev/check` path.
path. Broader `just` release and utility recipes remain Unix-first. Broader `just` release and utility recipes remain Unix-first.
## Nightly builds ## Nightly builds

View File

@@ -37,7 +37,7 @@ FFmpeg expert.
|--------|-----|------|-------|-------| |--------|-----|------|-------|-------|
| NVIDIA NVENC | RTX 30/40 | Maxwell+ | All | Best for speed | | NVIDIA NVENC | RTX 30/40 | Maxwell+ | All | Best for speed |
| Intel QSV | 12th gen+ | 6th gen+ | All | Best for power efficiency | | Intel QSV | 12th gen+ | 6th gen+ | All | Best for power efficiency |
| AMD VAAPI/AMF | RDNA 2+ on compatible driver/FFmpeg stacks | Polaris+ | All | Linux VAAPI / Windows AMF; HEVC/H.264 are the release-validated AMD paths for `0.3.0-rc.1` | | AMD VAAPI/AMF | RDNA 2+ on compatible driver/FFmpeg stacks | Polaris+ | All | Linux VAAPI / Windows AMF; HEVC/H.264 are the validated AMD paths for `0.3.0` |
| Apple VideoToolbox | M3+ | M1+ / T2 | All | Binary install recommended | | Apple VideoToolbox | M3+ | M1+ / T2 | All | Binary install recommended |
| CPU (SVT-AV1/x265/x264) | All | All | All | Always available | | CPU (SVT-AV1/x265/x264) | All | All | All | Always available |

View File

@@ -1,6 +1,6 @@
{ {
"name": "alchemist-docs", "name": "alchemist-docs",
"version": "0.3.0-rc.3", "version": "0.3.0",
"private": true, "private": true,
"packageManager": "bun@1.3.5", "packageManager": "bun@1.3.5",
"scripts": { "scripts": {

View File

@@ -1,6 +1,6 @@
{ {
"name": "alchemist-web-e2e", "name": "alchemist-web-e2e",
"version": "0.3.0-rc.3", "version": "0.3.0",
"private": true, "private": true,
"packageManager": "bun@1", "packageManager": "bun@1",
"type": "module", "type": "module",

View File

@@ -1,6 +1,6 @@
{ {
"name": "alchemist-web", "name": "alchemist-web",
"version": "0.3.0-rc.3", "version": "0.3.0",
"private": true, "private": true,
"packageManager": "bun@1", "packageManager": "bun@1",
"type": "module", "type": "module",