v0.8.0
What's Changed
Changed
- Upgraded daemon dependencies: zbus 4→5, rusqlite 0.31→0.40, dirs 5→6.
Fixed
- Single-instance daemon. The bus name is now requested with
DoNotQueueinstead ofReplaceExisting | AllowReplacement. If the name is already owned, the daemon exits cleanly instead of running without owning it (zbus 5 returnsInQueueasOk) or stealing the name and leaving the previous instance running as an orphan (zbus does not terminate a replaced owner). - Real SQLite errors are no longer swallowed as "not found".
upsert_item's dedup lookup andget_thumbnail/get_raw_itemnow distinguish a missing row (Ok(None)) from a genuine error (propagated), viaoptional(). - Daemon supervisor: a guard prevents spawning two daemons when an in-flight name-owner check overlaps a backoff retry, and the exit handler ignores foreign/stale subprocess exits so restart accounting can't be corrupted.
- Panel: clearing history (or a
HistoryClearedsignal) now invalidates the active search snapshot so scrolling can't render stale rows; the scroll-into-view idle is guarded against a destroyed panel.
Internal
- clippy pedantic/nursery cleanup across the daemon, with
#[allow]+ rationale for the intentional lints (the single-writer lock hold, zbus interfaceasync).
This release is the dependency-upgrade + hardening pass, backed by a full re-review of the daemon (concurrency, zbus 5 / rusqlite 0.40 correctness, single-instance semantics) and a confirming pass over the extension.
See CHANGELOG.md for full details.