-
released this
2026-10-14 16:02:46 -04:00 | 137 commits to main since this releaseBug Fixes
- (tests) Sync-integration cleanup wiped the shared reading_history table (
199d82c) - (dashboard) Week widget left the wiped container — it now survives library switches (
f981e72)
Documentation
- (agents) Stats-build gotchas — end-of-day anchoring (2nd occurrence), dev-DB probe pollution, DeviceID is not always a device (
be10adc)
Features
- (stats) Reading statistics — session capture wired + /stats page + widget + per-book card (
6457fba) - (stats) Per-device reading breakdown + device attribution on progress syncs (
7a604c2) - (dashboard) Collapsible This Week widget, library-scoped + switch-surviving; title into the subbar (
0914c93)
Other
- (dashboard) Tighten the gap between the week widget and the first shelf (4rem → ~1.25rem) (
9bc149f)
Refactor
- (stats) 'Web / unsynced' bucket label → 'Web'; analytics tests isolated from the live reader (
5a2c158)
Downloads
- (tests) Sync-integration cleanup wiped the shared reading_history table (
-
released this
2026-10-14 12:09:12 -04:00 | 145 commits to main since this releaseDocumentation
- (agents) Templ attribute-interpolation, settings-cache, collection-routing gotchas (
8de8883)
Features
- (collections) Smart (dynamic) collections — rules evaluated live at render (
0a7fbd6)
Downloads
- (agents) Templ attribute-interpolation, settings-cache, collection-routing gotchas (
-
released this
2026-10-14 11:31:20 -04:00 | 147 commits to main since this releaseFeatures
- (auth) Data-driven password requirement checkers (
df556d8)
Downloads
- (auth) Data-driven password requirement checkers (
-
released this
2026-10-14 09:49:20 -04:00 | 148 commits to main since this releaseBug Fixes
- (web) Viewport meta on all admin/profile pages; admin users page reworked for mobile (
300866c) - (web) Admin users list reworked to the library-management card pattern (
f3c9d4b) - (web) Password requirement indicators on registration and admin create-user (
bc6ce41) - (auth) New users inherit the system-wide default timezone (
740213f) - (tz) Server-side timezone conversion for all user-facing time displays (
1601548) - (tz) JWT context stub carries the user's timezone (
0772f06) - (web) Profile save gives visible feedback (HX-Refresh) (
57d83fd) - (web) Profile save silently died under htmx 2 — invalid-JSON hx-headers (
505fc48) - (web) Admin users cards redesigned for mobile readability (
2a6e4b9) - (web) Profile modal always displayed UTC — Timezone never mapped (
dc353b0) - (web) Field-mapping + fragile-hx-vals sweep across profile and library surfaces (
320f310) - (nas) Refuse deletes while library storage is unreachable; real file removal; stat cache (
17274bb) - (make) Restore .PHONY declaration dropped by the guidelines cleanup (
d95814d)
Documentation
- Retire PROJECT_GUIDELINES.md — library-visibility rule now in AGENTS.md + dev docs (
f42720a)
Features
- (security) Library visibility enforced at the source; per-library series; annotation ownership; admin user creation (
431fec0)
Other
- Pin foliate-js 7796b05 — pdf text-layer dedupe on re-render (v0.5.3) (
97fbdf1)
Downloads
- (web) Viewport meta on all admin/profile pages; admin users page reworked for mobile (
-
released this
2026-10-13 09:15:45 -04:00 | 164 commits to main since this releaseBug Fixes
- (sync) Anchor device highlight ranges to selection text (
bb3aef5) - (reader) Emit two-subpath range CFIs for multi-node highlights (
93a468b)
Miscellaneous Tasks
Tests
- (sync) Add manual repro harness for CRE-to-CFI highlight conversion (
03a6040)
Downloads
- (sync) Anchor device highlight ranges to selection text (
-
released this
2026-10-11 21:13:31 -04:00 | 169 commits to main since this releaseBug Fixes
- (web) PDF rect-edge adjust — a start-edge drag pins the far edge (
361fdaa) - (web) Detail banner — a failed annotation fetch must not wipe its rows (
8acaedd) - (web) PDF adjust text recompute — overlap-based glyph dedupe (
dbeefb3) - (web) Endpoint handles verified end-to-end — multi-line extent saved (5 rects, clean text); note: footnote markers between lines are geometrically included by design (
db3b5b3) - (server) Cache-Control no-cache on /static — heuristic caching served stale bundles (
a3ecac3) - (web) PDF adjust handles — create once, reposition only (
93f020f) - (web) PDF adjust — three compounding coordinate/table bugs, found by instrumented drag (
1c20940) - (web) Raise the adjust teardrops — tips rest above the glyph tops (
19619ef) - (web) PDF adjust — remove the leftover line-band filter from the endpoint drag (
cbdddc0)
Features
- (web) PDF highlight extent adjustment — rect-edge grips with word-token snap (
4d1fb05) - (web) PDF adjust v2 — re-selection replaces the extent; vertical grip clamp (
f69e659) - (web) Adjust handles float above the text with tips marking the boundary (
a28ae5c) - (web) Endpoint handles drag vertically — full 2D tip-aimed targeting (
5a0d9e0)
Downloads
- (web) PDF rect-edge adjust — a start-edge drag pins the far edge (
-
released this
2026-10-10 10:30:48 -04:00 | 182 commits to main since this releaseBug Fixes
- (web) Banner highlight delete; retention wording states the days (
f45adc6) - (web) Mirrored handle teardrops — end handle points right (
0708a1f) - (web) Facedown teardrop handles (standard Android selection fashion) (
ffe6906) - (web) Rich markdown notes get block structure — paragraphs, quotes, lists, code (
bbecd1e) - (web) Banner highlight-note dialog prefilled; explicit note boundary; pencil on every note row (
44c0e56) - (server) Kobo markup panic — wire LibraryService into the test harness, guard typed-nil resolver (
208fc2c) - (server) Ghost 401 must abort the chain — c.JSON's nil error let the request continue (
679e0f9)
Features
- (web) Note editing at the reader slider and book banner; Deleted rename (
5275f2b) - (web) Highlight extent adjustment — draggable handles with word/punctuation snap (
c8e8581) - (web) Note-attached badge on banner highlight rows — corner stroke glyph (
b8db1d1) - (dashboard) Global (All Libraries) preferences scope (
25d4445) - (web) Dashboard All Libraries view saves the global scope (
b1de0da) - (web) 'a' keyboard shortcut toggles the annotations drawer (
31f9390) - (server) System collections become permanent — soft-delete + in-place restore + query_type-keyed provisioning (
7ce7321) - (server) POST /api/media-items answers honestly on a duplicate file_path (
da13898) - (server) Progress locator coherence — percentage-only writes clear stale anchors (
69516ae) - (server) Ghost-session guard — JWTs for deleted users stop authenticating (
9cd6356)
Miscellaneous Tasks
- (server) Delete dead ParseEbook 501 placeholder (
1a2d42a) - (server) Delete dead unrouted UpdateUniversalProgress handler (
4f05a23)
Other
- (web) Drop the NOTE label from the expanded boundary — divider reads on its own (user review) (
d5d8e3e) - (web) Location-note rows lose the color bar — only highlights carry a color (user review) (
f83b361)
Tests
- (dashboard) Align test seed naming with the canonical Title-case set + fix stale expectations (
e7ccd7b) - (server) Runs leave no residue — auto-cleanup for every resource the suite creates (
843f35b) - (server) Comic negative-case assertions target display values, not admin-modal labels (
18969a0) - (server) Fixture collisions fixed, stale contract asserts re-anchored, gofmt — suite now fully green (
f24a2d6)
Downloads
- (web) Banner highlight delete; retention wording states the days (
-
released this
2026-10-04 23:29:25 -04:00 | 207 commits to main since this releaseFeatures
Downloads
-
released this
2026-10-04 00:08:25 -04:00 | 209 commits to main since this releaseBug Fixes
- (scanner) Classify .docx as reflowable — was landing format_group unknown (
f262994) - (compose) Publish db on loopback only — was reachable from any LAN (
b03ed9a) - (rescan) UpdateMediaItem re-derives format flags — force rescan reclassifies rows (
fb21d52)
Features
- Registration_enabled admin setting — hides signup surfaces, gates the API (
b9f7977)
Other
- Pin foliate-js ac699e7 — RTF + PalmDOC support (fork v0.5.0) (
25981fc) - Drop DOC and LIT from the pipeline (deliberately unsupported)
.IMAGE — extensions removed from AllowedExtensions (scan gate),
bookExtensions, MimeTypes and sync/format.go maps: .doc/.lit files
are no longer scanned or indexed. classifyFormatGroup gains the
RTF and PDB reflowable arms that were missing when those rungs
shipped (rows only reclassify on creation). Scanner docs updated.DOC + LIT have no credible JS tooling (mammoth is docx-only; LIT
needs LZX and its DRM variants are dead) and text-extraction-only
support would misrepresent what the reader can do. Verified: probe
.doc/.lit files watched but never scanned; probe .txt control
scanned; TestClassifyFormatGroup extended and passing.Docs change granted in-session by the user (extensions + format
docs). (7283992)- Pin foliate-js b7597d6 — paginator teardown-race guards (v0.5.1+0.5.2) (
6aaefe2)
Downloads
- (scanner) Classify .docx as reflowable — was landing format_group unknown (
-
released this
2026-10-02 21:31:55 -04:00 | 216 commits to main since this releaseBug Fixes
- (auth) GetProfile reads the user row — the JWT context stub has no theme (
217f411)
Documentation
- (user) Android app guide — LAN setup and the Android 16+ local-network permission (
b4b1dea) - Drop AZW3 from documented format expectations (
0be70f0) - (bruno) Document the 100k note content limit (
ad1ad11)
Features
- (search) Publisher_filter for the media search endpoint (
3d88f0b) - (auth) GetProfile returns the account theme (
4fde2a6) - (notes) Raise annotation text limit from 10,000 to 100,000 chars (
1205526) - (reader) Note length counter and save guards in the reader UI (
66dd6c8)
Miscellaneous Tasks
Downloads
- (auth) GetProfile reads the user row — the JWT context stub has no theme (