Quality release. Bulk actions land for users curating large libraries (the painful-after-CSV-import flow), the silent library-scan bug is fixed, and backend coverage jumps from 34% to 53% to quiet codecov and harden the regression safety net.
Added
- Multi-select / bulk actions on Authors, Books, and Wanted (#12) — row checkboxes with "Select all on this page" in table headers (and overlay checkboxes on grid cards), plus a sticky
BulkActionBarfooter that appears whenever any items are selected. Authors support Monitor / Unmonitor / Search / Delete; Books additionally support Set Ebook / Set Audiobook; Wanted supports Search / Unmonitor / Blocklist (marks book as skipped and unmonitored). Three new endpoints:POST /api/v1/author/bulk,POST /api/v1/book/bulk,POST /api/v1/wanted/bulk. All return a per-ID result map at HTTP 200 so partial failures (e.g. a stale ID) report inline without aborting the rest of the batch.
Changed
- Backend test coverage raised to ≥50% (52.8% total) — new
_test.gofiles added forinternal/db,internal/downloader/qbittorrent,internal/metadata(aggregator),internal/metadata/googlebooks,internal/metadata/hardcover,internal/metadata/openlibrary,internal/notifier, andinternal/scheduler. No production code was modified.
Fixed
- Manual library scan silently aborted (#55) —
POST /api/v1/library/scanspawned the scan goroutine with the HTTP request context, which Go cancels the moment the 202 response is sent; the scan now usescontext.WithoutCancelso it always runs to completion.