• v2.4.5 2bec4e60bd

    v2.4.5
    Release / build-and-push (push) Successful in 5m11s
    Stable

    john-okeefe released this 2026-11-02 18:43:55 -05:00 | 0 commits to main since this release

    Bug Fixes

    • (admin) Rename 'Scan All Libraries' to 'Force Rescan All Libraries' (bb141cd)
    • (admin) Library row button renamed 'Scan' -> 'Force Rescan', per owner (b3a8cbd)
    • (devices) Pairing input moves into the Add Device modal (d15f115)
    • (devices) Pairing claim accepts urlencoded htmx form posts (0c31e9b)
    • (tests) Test-created devices and fixture dirs now meet the cleanup contract (7d88ec5)
    • (tests) Uuid-suffixed websocket collection self-deletes (06ec312)
    • (sync) Websocket events are per-user — chokepoint the fan-out (a431dfa)
    • (sync) Scan events keep instance-wide fan-out as the sanctioned BroadcastToAll (dd96399)

    Documentation

    • Remove speculative promise language, de-brand Android design analogy (7e2e1c4)
    • (nav) Administration section lives in docs/admin/; sidebar ordered by usability (393a00e)
    • (standard) Admin tier defined; promises require owner approval (20754f1)
    • (admin) Scanning page — the shallow vs. force taxonomy from source (89fc479)
    • (admin) Dashboard page — stats, watcher, Quick Actions, scan panel (ed550fa)
    • (admin) Processing issues page — per-library scan-failure ledger (88e3de6)
    • (admin) Archived items page — the missing-file lifecycle (ecb6a73)
    • (admin) Libraries page — the definition surface, with backlinks (3e55ddd)
    • (admin) Hash conflicts page — the duplicate-content queue (aee1aaf)
    • (admin) All-podcasts page — the maintenance view (5358474)
    • (admin) Users page — accounts, roles, last-admin guards (39b0ab0)
    • (admin) Settings page — every knob, what it does, and its range (607e5a1)
    • (admin) Admin-guide front door + Administration area in the portal (0d4698c)
    • (user) Koreader install delegated to KOReader's own documentation (5161356)
    • (dev) Delete developer/testing.md — contradicted current test doctrine (8a40349)
    • (dev) Websocket wire doc rewritten from source; endpoint doc ping claim fixed (e40be80)
    • (dev) Library-visibility rewritten for the RLS era (4bd2788)
    • (dev) Alpine-patterns rewritten around the CSP build (35b2109)
    • (dev) Developer portal rewritten; tier definition closed in the standard (ab5c52c)
    • (user) Pairing-code flow for device setup guides (5211edf)

    Features

    • (devices) Pairing codes replace the registration broadcast (8fbacd9)
    • (devices) Pair-a-device card replaces the pending registration list (fef79b1)

    Miscellaneous Tasks

    • (devices) Regenerate style.css after the modal move (e957d38)

    Tests

    • (devices) Integration coverage for the pairing-code flow (3e98fad)
    • (pins) Annotation lifecycles pin the restore GET, not just writes (2bec4e6)
    Downloads