-
released this
2026-10-17 22:13:00 -04:00 | 77 commits to main since this releaseBug 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
- (audio player + dashboard) Markdown bookmark notes, horizontal volume, transport glyphs, client-side badges (