1.30.0 (2026-11-03)
Features
- doctor: warn when the mixer can't read the library mount (7050ac4)
- library: accept replaced files without clearing their analysis (9f4b3c0)
- library: explicit flag and clean shows (#2215) (48845fe)
- library: forward the replaced-file answers from the API (ddf19c9)
- library: keep each track's file path, format, size and bitrate from the walk (666f6d9)
- library: opt-in track-level Last.fm tags (#2216) (3a752cf)
- library: score CLAP sound descriptors and show them to the operator (#2214) (9b24b17)
- music: keep Navidrome's Report Real Path on for SUB/WAVE's players (05dd74e)
- search: Firecrawl as a web-search backend (#2128) (4b9d015)
- skills: feed item age cap, dates to the DJ, and further feeds per skill (#2184) (53dac49)
- stems: purge orphan stem dirs, on one Stems settings page (#2178) (5a9d539)
- stems: separate a held pick's missing stems while it waits (opt-in) (#2250) (c246de5)
Bug Fixes
- analyzer: keep the file facts from the analyzer's own walk (7fcbd87)
- analyzer: write shared stems and transition clips 777/666 (#2177) (01efbd2)
- app: back off a stream that dies just after it starts playing (#2209) (971ab33)
- ci: hold the CLI release until its images are on GHCR (#2220) (1f8ec72)
- cli: hand compose the moved version pin on the first update (#2199) (7045c21), closes #2196
- cli: ship the clack input patch in release builds (#2227) (de7f29a)
- dj: never air a stand-in line such as "placeholder" (#2183) (ba76ff9)
- edge: stop the stream's Basic challenge opening a sign-in dialog over the web player (#2193) (d41f752)
- library: add each migration's columns under the write lock (#2251) (001aee3)
- library: add the file columns under the write lock (4c444f8)
- library: ask the mixer about each local pick's own file (#2232) (d3aad51)
- library: count tail vocals in the instrumental verdict (#2218) (2d81aff)
- library: give Last.fm tags an Auto choice, and keep it through a save (#2241) (06f7d6b), closes #2233
- library: give the file facts one cleaning rule (4329bf9)
- library: hold a mass replaced-file clear, and ignore future file dates (4a0f276)
- library: judge a replaced file against its oldest measurement (f64c2f4)
- library: keep a hold visible after the run ends (01c259f)
- library: make an accept stick for a file dated ahead (e454010)
- library: re-analyse a file replaced at the same path (fd30e16)
- library: re-embed a vector when a later measurement moves its Sound: words (#2240) (5cac768), closes #2236
- library: read a walk that runs out of pages as partial, and reword the size-only log (a02ed47)
- library: say what actually stopped a replaced-file read (9c11074)
- library: say when Reconcile leaves replaced files on hold (ff394c1)
- liquidsoap: the sweep no longer steps the level when it engages or mid-blend (#2210) (81d6883)
- liquidsoap: transition gains ignore the per-track liq_amplify (#2179) (996320a)
- music: accept more private suffixes for the Navidrome password (8c205fe)
- music: let the password reach any private host (d2d2fa3)
- music: play a mapped real path only when the file proves it is the track (#2247) (1c4a9ff)
- music: play a real Navidrome path off the library mount (7d688fa)
- music: play from disk only once the mixer proves it can read the mount (ecd0472)
- music: send the Navidrome password only over https or to a local host (fef659b)
- music: stop stripping a real path at three segments (37457b7)
- music: warn in the Doctor when Navidrome refuses the login (e60e66c)
- requests: look a named track up from the listener's words (#2200) (e06e48b), closes #2195
- scheduler: roll the show at the station's top of the hour, not the container's (#2246) (29df0d2), closes #2234
- search: Tavily and Brave refuse another provider's key in the shared slot (#2231) (b4d5d59), closes #2223
- stems: drop the sweep warning's claim that nothing is evicted (#2230) (533b7b3), closes #2225
- stems: keep the budget figure when a replaced file drops its stems (7b97a09)
- stems: release a quarantined stem dir only for the same recording (#2228) (9721211), closes #2224
- web,app: the right station password tunes a stopped listener back in (#2217) (1aa7c34)
- web: back off a connection that dies just after it starts playing (#2194) (bc5c125)
- web: the Stats page uses the admin's type scale (#2212) (d101562)
Performance
Documentation
- library: document the replaced-file answers and their limits (3a0fa5b)
- library: say how to read the file facts, and what a backup now holds (4656742)
- schemas: correct the count of converted settings keys (9e4411e)