• v2.1.0 86c4940426

    v2.1.0
    Release / build-and-push (push) Successful in 3m6s
    Stable

    john-okeefe released this 2026-10-21 15:08:01 -04:00 | 13 commits to main since this release

    Bug Fixes

    • (types) Clear web/src type and lint debt with real types (d7d1495)

    Other

    • Migrate web build to vite-plus 1.3.0 (8aeecaa)
    • Format web/src with oxfmt defaults (via vp fmt) (77cd268)
    • (toast) Warning toast uses the /90 opacity variant (86c4940)
    Downloads
  • v2.0.0 dd4cf1235c

    v2.0.0
    Release / build-and-push (push) Successful in 3m20s
    Stable

    john-okeefe released this 2026-10-20 22:26:04 -04:00 | 17 commits to main since this release

    Bug Fixes

    • (tests) Repair stale pins surfaced by the Phase 6 full-suite run (6152137)
    • (filters) Builder UX round one — incomplete rules, group removal, field menu (user report) (04b36f0)
    • (filters) Group mode reads AND/OR, connective labels toggle it (user report) (6f98ca4)
    • (filters) Value menu flash-on-click, empty state, sticky field filter (user report) (4c03116)
    • (filters) Browse with no rules works, popup under the input, no sticky headers (user report) (9c006a9)
    • (filters) Blank-typed browse 500 on id-valued fields (library/collection/added_by) (ab713e2)
    • (filters) Live count follows the top library picker (user report) (68701d6)
    • (filters) Operator table sent labels as wire values — every non-self-named operator was broken (user report) (4398726)
    • (tests) Wire settings registry into the test auth handler — unstick TestAdminCreateUser (19b9c7c)

    Features

    • (schema) Subtitle/explicit columns, authors+publishers arrays, float series numbers (646477a)
    • (scanner) Fix ABS sidecar series parsing; three-way series mapping; smart genre; language codes; title-derived series (7e4c97f)
    • (collections) Playlist auto-creation, position ordering, hide_finished, Up Next, dashboard eligibility (1dbb0ce)
    • (filters+ui) Per-element author/publisher filters, playlist toggles, Up Next API, reorder UI, dashboard badges (f94e747)
    • (filters+nav) Author navigation end-to-end — arrays on every media response, deep-linkable bookshelf filters, clickable authors (7537063)
    • (facets) Facet registry, Batch A server params, genre model v2, facets endpoint (7e586df)
    • (facets+ui) Clickable facet values everywhere, genre prettify, active-filter chips (bbedbfb)
    • (scanner) Manifest-gated sidecar change detection + playlist sync on change path (6750e9e)
    • (scanner) Quiet scans, enqueue coalescing, watcher probe, sibling cache (5245f29)
    • (scanner) Multifile folder/zip sidecar detection (faceted plan Phase 6) (2c5ad01)
    • (facets) All-facets panel with under-filter counts (faceted plan Phase 7) (f52bb6f)
    • (filters) Panel removal + All-Books field-values fix (faceted plan Phase 8) (ebb7f4a)
    • (filters) The rule builder — composed engines over the field registry (faceted plan Phase 9) (4ee24e7)
    • (filters) Per-row AND/OR (Excel-style chips) + browse-on-click value menus (user report) (c747f0a)
    • (scanner) Extractor-version (ev) mechanism — parser fixes reach old rows without a force rescan (faceted plan Phase 10) (91b0c45)
    • (issues) The honest processing-issues ledger — row-less import failures, self-healing resolution, family lens (faceted plan Phase 11) (9b5defc)
    • (scanner) Force rescan = original scan; feat(filters): the manually-edited filter (faceted plan Phase 13) (a42c6d4)

    Performance

    • (scanner) Bulk scan-state load — one query per library scan (693053a)

    Tests

    • Pin scan_extractor_version at the start of ev-sensitive tests (dd4cf12)
    Downloads
  • v1.17.1
    Release / build-and-push (push) Successful in 3m15s
    Stable

    john-okeefe released this 2026-10-19 12:46:39 -04:00 | 45 commits to main since this release

    Bug Fixes

    • (ui) Library restore no longer re-fires change on synced dropdowns (202a090)
    • (db) Total ordering for series OFFSET pagination (38efbff)

    Documentation

    • (agents) Record the dashboard sections rendering exception (18f52d2)

    Features

    • (css) Cross-document view transitions (f7dc818)

    Miscellaneous Tasks

    • (templ) Warn against change handlers on the bookshelf library select (1ce66b2)
    • (ui) Bump the main.js cache-bust stamp to v6 (a8641ab)

    Other

    • (series) Plain-text page indicator instead of the chip pill (f4414aa)

    Refactor

    • (series) Drop the TS rendering twin; library switch navigates SSR (3daa834)

    Tests

    • (series) Pin the SSR pagination contract under tied timestamps (220d97c)
    Downloads
  • v1.17.0
    Release / build-and-push (push) Successful in 3m29s
    Stable

    john-okeefe released this 2026-10-19 08:16:24 -04:00 | 54 commits to main since this release

    Documentation

    • (dev) Test-running policy + media-fixture rules; ignore testdata (ee98c0f)

    Features

    • (worker) Real per-job cancellation for the background job pool (b222075)
    • (scanner) ScanFolders honors its context; cancelling never archives (30ecdd4)
    • (scanner) POST /api/scanner/cancel/:jobId (admin) (5b81e19)
    • (admin) Cancel buttons for in-flight scans + cancelled state UI (e1153b2)
    • (audiobooks) Multi-file books (folder-of-tracks + zip) + exhaustive metadata ingestion (6216bd9)
    • (web) Multi-track audiobook player — per-track src switching, global-seconds position (79ce5ab)

    Tests

    • (scan) Cancellation endpoint semantics and mid-run safety (24228e7)
    Downloads
  • v1.16.1
    Release / build-and-push (push) Successful in 3m7s
    Stable

    john-okeefe released this 2026-10-18 16:50:51 -04:00 | 62 commits to main since this release

    Bug Fixes

    • (conflicts) The status filter, select-all, and bulk actions actually work (4a68fe7)
    • (ui) Library-switch overlay was fully opaque — the 'new page' wipe (a11b4a9)
    • (ui) Derive Library Type dropdowns from library_types — audiobooks was missing (9e83108)

    Documentation

    • (agents) Rendering-ownership rule — templ renders, JS decides what shows (1fdf306)

    Features

    • (web) Templ partials replace the last UI twins (collections grid, conflicts list) (f184459)
    • (matching) Family-lens scoping for book matching and linking (040c10a)
    • (ui) View Transitions crossfade for library switches (a31da89)
    • (matching) Match results as a scoped templ partial + enriched matches (327fc2c)
    • (sync) Unlinked-books queue — ingest, page route, dashboard banner (d74db03)

    Miscellaneous Tasks

    • (web) Library-admin inline script moves to admin.ts; rendering guardrail (506a04b)

    Tests

    • (templates) Pin the rendering partials — standalone render, OOB markers, empty state (cb4e892)
    Downloads
  • v1.16.0
    Release / build-and-push (push) Successful in 3m31s
    Stable

    john-okeefe released this 2026-10-18 12:12:37 -04:00 | 73 commits to main since this release

    Bug Fixes

    • (templ) Stop emitting literal { expr } text into attributes and body classes (b89eac2)

    Features

    • (themes) Omarchy catalog, 12 light themes, Dark/Light Appearance picker (d5bb874)
    Downloads
  • v1.15.1
    Release / build-and-push (push) Successful in 3m8s
    Stable

    john-okeefe released this 2026-10-17 22:55:43 -04:00 | 75 commits to main since this release

    Bug Fixes

    • (schema) Ship the two Batch-A upgrade ALTERs that 1.15.0 missed (0799cca)

    Miscellaneous Tasks

    • (db) Schema.go searches three levels up — replaces the tests-dir symlink (4f913da)
    Downloads
  • v1.15.0
    Release / build-and-push (push) Successful in 3m36s
    Stable

    john-okeefe released this 2026-10-17 22:13:00 -04:00 | 77 commits to main since this release

    Bug Fixes

    • (audio player + dashboard) Markdown bookmark notes, horizontal volume, transport glyphs, client-side badges (2c714dc)
    • (media-items) Normalize NOT NULL narrators on every write path (a222ef5)
    • (stats) Unambiguous chart x-labels + unit-carrying tooltips (b4ae423)
    • (conflicts) Resolution writes funnel through SaveProgress — audio position survives (8fc74c9)
    • (tests) Scope the sync_queue cleanup wipe to the test devices (d16ca4a)
    • (sync) The offline queue flush never processed anything — fix the enumerator + the dropped payload (6808c1b)
    • (bruno) Convert drifted body keys to body.data — CLI scenario runs now carry bodies (09b6693)
    • (annotations) Note LWW re-save 500'd — UserID missing from the sync update params (ff029f1)
    • (annotations) Bookmark and note PUTs land through the sync service (LWW by id) (7d698ea)
    • (annotations) LWW applies coalesce omitted fields — partial payloads no longer erase stored locators (edb4e60)
    • (sync) Offline detector wiped device name, auto_sync, and metadata on every transition (082a3e0)
    • (css) Native select popups follow the theme — color-scheme per scheme + themed option entries (8f05f11)
    • (api) Honor the request's origin as the writer label — app rows stop wearing "web" (45b8542)

    Documentation

    • (agents) Test-failure triage discipline — suspect the test first, but test edits stay asymmetric (de9e666)

    Features

    • (audiobooks) Batch A — foundation, m4b ingest, playback sync, web player (902cbe5)
    • (audiobooks) A2 — narrator metadata, audio-aware UX, player polish, bookmarks (86f0af6)
    • (audio player) Canonical audiobook transports + dropdown settings + volume panel (5cf3410)
    • (annotations + player) Bookmark rows in the banner, stacked volume panel, badge parity for comics/manga (89665fb)
    • (reader) Fullscreen mode; revert stacked volume; fix manga badges + ghost sidebar (73ae178)
    • (stats) Library tab — per-library inventory stats + audio-aware Reading tab (ce366b1)
    • (cards) Stamp active conflicts on collections, series, and preview JSON (b2b89ba)
    • (db) SearchMediaItemsUnifiedRow carries abridged + audio_metadata (c538efe)

    Miscellaneous Tasks

    • Delete dead progress handlers, no-op scar, split fused helper line (721139d)
    • (db) Sqlc regen — querier interface comment for the flush-enumerator fix (63a20dc)
    • (db) Retire the nine dead annotation plain queries + duplicate SQL line (00305ff)

    Refactor

    • (progress) SaveProgressRequest becomes the canonical PUT payload; GET serializes from the row (28bd323)
    • (progress) ProgressService required at construction; delete the 9 unreachable erase-fallbacks (e83c00f)
    • (cards) H2 foundation — cards.go, the one BookInfo construction site (1ce1b79)
    • (cards) Collections JSON detail + preview-adjacent ladder through the builder (2376593)
    • (cards) Smart-collection preview through the builder (c07dba4)
    • (cards) Series books JSON through the builder (2f9d5b8)
    • (cards) BuildSections through the builder (5adfb45)
    • (cards) Template search grid through the builder (0971e7d)
    • (cards) SSR series and tag pages through the builder (8c56c9d)
    • (cards) Bookshelf SSR through the builder — badges return to the bookshelf (bdad40e)
    • (cards) SSR collection detail ladder through the builder (a13b268)
    • (annotations) AnnotationService is a required constructor dependency (c579179)
    • (annotations) One LWW decision core + one tombstone gate + typed queue decoders (11609d1)
    • (utils) One PgTextString for the four pgtype.Text unwrappers (188ae07)
    • (devices) One Devices->DeviceInfo mapper for the five hand-built copies (58fbe37)
    • (conflicts) One ConflictDetail builder for the three row shapes (b47a2b8)
    • (collections) Rule evaluators take the real row; both 45-field converter twins deleted (18727fe)
    • (db) GetCollectionItemsForDashboard embeds the media row; excluded filter moves into SQL; third converter dies (77cf0b8)
    • (router) One WeekStatsData mapper for the dashboard page and week-widget fragment (87fc89a)
    • (hash-conflicts) One usage-counts reader for the API and SSR surfaces (2ba1e09)
    • (reader) One comic-likeness predicate — panel detection was a byte-identical twin (6b3bdef)
    • (opds) One acquisition-entry builder for the catalog and search feeds (29a5462)
    • (vis) H4.5 step 1 — LibraryService.VisibleLibrarySet, the canonical resolver; media endpoints migrated (1d12a64)
    • (vis) H4.5 step 2 — series endpoints on the canonical resolver (d2d92ef)
    • (vis) H4.5 step 3 — collections endpoint and the SSR helper on the canonical resolver (8dbaa8f)
    • (vis) H4.5 steps 4-5 — statistics and the three reader gates on the canonical resolver; core goes package-level (454938c)

    Tests

    • (contracts) Pin wire shapes before the canonical-types migrations (a2ea342)
    • (bruno) Sweep the collection against the actual route table (a85bc8a)
    • (contracts) CFI/context winner must land intact through conflict resolution (14cdbe7)
    • (contracts) Whitelist the unified row's two new keys on search rows (010c0cb)
    Downloads
  • v1.14.0
    Release / build-and-push (push) Successful in 2m56s
    Stable

    john-okeefe released this 2026-10-15 14:44:59 -04:00 | 132 commits to main since this release

    Features

    • (web) Reader chrome UX — intent-based reveal, reading actions dismiss (handoff item 7) (f2fd4db)

    Miscellaneous Tasks

    • (deps) Pin foliate-js f622841 — manual touch scrolling in scrolled layouts (a093529)
    Downloads
  • v1.13.0
    Release / build-and-push (push) Successful in 3m4s
    Stable

    john-okeefe released this 2026-10-15 12:11:50 -04:00 | 134 commits to main since this release

    Bug Fixes

    • (web) Scan progress — correct percentages, no layout shift, refresh-survivable (fd6f0e3)

    Features

    • (web) Book reviews — markdown, sibling of ratings, full API + page surface (2117ec6)
    • (koreader) Device bridge for ratings, reviews and reading-time stats (2517bae)
    Downloads