Commit Graph

  • db96ea91cd refactor(audio-player): one source for the speed list (plan §5) main John O'Keefe 2026-10-21 21:08:15 -04:00
  • 408a972665 fix(audio-player): playback speed silently reverted to 1x on every reload John O'Keefe 2026-10-21 21:08:06 -04:00
  • 6508abc00f docs(agents): the doctrine — tests never run against a real server John O'Keefe 2026-10-21 20:25:26 -04:00
  • 3ed852515b test(helpers): setSystemSettingRestored — leave shared settings as found John O'Keefe 2026-10-21 20:24:44 -04:00
  • f62b46fb15 test(integration): route regression tests for the audio_metadata guards John O'Keefe 2026-10-21 20:24:09 -04:00
  • 35d8ba32e5 fix(media): metadata editor save no longer wipes audio_metadata John O'Keefe 2026-10-21 20:23:42 -04:00
  • 80bfc1a77b fix(scanner): re-extraction is write-after-success — no NULL audio_metadata John O'Keefe 2026-10-21 20:22:57 -04:00
  • 970beee4b8 fix(pwa): add the manifest icons the manifest always referenced John O'Keefe 2026-10-21 20:22:28 -04:00
  • fa5b952c54 fix(audio-reader): valid doctype — page loaded in quirks mode John O'Keefe 2026-10-21 20:21:58 -04:00
  • ff17d14694 fix(book-detail): hero backdrop — templ double-escapes style values John O'Keefe 2026-10-21 20:21:33 -04:00
  • 807899b137 fix(reader): arrows stay page turns while the progress slider holds focus John O'Keefe 2026-10-21 20:21:07 -04:00
  • 6791d611f0 fix(vite): guard cleanStaleChunks — vp test deleted every built chunk John O'Keefe 2026-10-21 20:20:41 -04:00
  • e5315f1b94 test(web): vitest suites for markdown, filters, password rules, api, storage, toast John O'Keefe 2026-10-21 15:34:29 -04:00
  • 86c4940426 style(toast): warning toast uses the /90 opacity variant v2.1.0 John O'Keefe 2026-10-21 14:46:26 -04:00
  • d7d1495753 fix(types): clear web/src type and lint debt with real types John O'Keefe 2026-10-21 14:17:02 -04:00
  • 77cd268f4e style: format web/src with oxfmt defaults (via vp fmt) John O'Keefe 2026-10-21 13:18:24 -04:00
  • 8aeecaa0ef Experiment: migrate web build to vite-plus 1.3.0 John O'Keefe 2026-10-21 09:27:59 -04:00
  • dd4cf1235c test: pin scan_extractor_version at the start of ev-sensitive tests v2.0.0 John O'Keefe 2026-10-20 22:19:29 -04:00
  • a42c6d4f75 feat(scanner): force rescan = original scan; feat(filters): the manually-edited filter (faceted plan Phase 13) John O'Keefe 2026-10-20 22:05:42 -04:00
  • 9b5defcb31 feat(issues): the honest processing-issues ledger — row-less import failures, self-healing resolution, family lens (faceted plan Phase 11) John O'Keefe 2026-10-20 19:38:02 -04:00
  • 19b9c7c9b8 fix(tests): wire settings registry into the test auth handler — unstick TestAdminCreateUser John O'Keefe 2026-10-20 19:02:26 -04:00
  • 91b0c45dd4 feat(scanner): extractor-version (ev) mechanism — parser fixes reach old rows without a force rescan (faceted plan Phase 10) John O'Keefe 2026-10-20 18:24:08 -04:00
  • 43987262a6 fix(filters): operator table sent labels as wire values — every non-self-named operator was broken (user report) John O'Keefe 2026-10-20 17:14:26 -04:00
  • 68701d6b94 fix(filters): live count follows the top library picker (user report) John O'Keefe 2026-10-20 16:52:08 -04:00
  • ab713e2feb fix(filters): blank-typed browse 500 on id-valued fields (library/collection/added_by) John O'Keefe 2026-10-20 16:44:50 -04:00
  • 9c006a9a2f fix(filters): browse with no rules works, popup under the input, no sticky headers (user report) John O'Keefe 2026-10-20 16:01:10 -04:00
  • 4c03116ec7 fix(filters): value menu flash-on-click, empty state, sticky field filter (user report) John O'Keefe 2026-10-20 15:36:31 -04:00
  • c747f0a76c feat(filters): per-row AND/OR (Excel-style chips) + browse-on-click value menus (user report) John O'Keefe 2026-10-20 15:25:57 -04:00
  • 6f98ca4c22 fix(filters): group mode reads AND/OR, connective labels toggle it (user report) John O'Keefe 2026-10-20 15:09:44 -04:00
  • 04b36f0563 fix(filters): builder UX round one — incomplete rules, group removal, field menu (user report) John O'Keefe 2026-10-20 15:04:19 -04:00
  • 4ee24e7152 feat(filters): the rule builder — composed engines over the field registry (faceted plan Phase 9) John O'Keefe 2026-10-20 14:49:50 -04:00
  • ebb7f4a5b0 feat(filters): panel removal + All-Books field-values fix (faceted plan Phase 8) John O'Keefe 2026-10-20 12:20:51 -04:00
  • f52bb6f073 feat(facets): all-facets panel with under-filter counts (faceted plan Phase 7) John O'Keefe 2026-10-20 08:24:36 -04:00
  • 6152137156 fix(tests): repair stale pins surfaced by the Phase 6 full-suite run John O'Keefe 2026-10-19 22:33:08 -04:00
  • 2c5ad014c0 feat(scanner): multifile folder/zip sidecar detection (faceted plan Phase 6) John O'Keefe 2026-10-19 22:32:52 -04:00
  • 5245f292ca feat(scanner): quiet scans, enqueue coalescing, watcher probe, sibling cache John O'Keefe 2026-10-19 20:35:07 -04:00
  • 6750e9e0dc feat(scanner): manifest-gated sidecar change detection + playlist sync on change path John O'Keefe 2026-10-19 20:17:57 -04:00
  • 693053a9f5 perf(scanner): bulk scan-state load — one query per library scan John O'Keefe 2026-10-19 19:22:40 -04:00
  • bbedbfb13f feat(facets+ui): clickable facet values everywhere, genre prettify, active-filter chips John O'Keefe 2026-10-19 18:59:36 -04:00
  • 7e586df48a feat(facets): facet registry, Batch A server params, genre model v2, facets endpoint John O'Keefe 2026-10-19 18:59:23 -04:00
  • 7537063cb7 feat(filters+nav): author navigation end-to-end — arrays on every media response, deep-linkable bookshelf filters, clickable authors John O'Keefe 2026-10-19 16:16:58 -04:00
  • f94e7472b4 feat(filters+ui): per-element author/publisher filters, playlist toggles, Up Next API, reorder UI, dashboard badges John O'Keefe 2026-10-19 15:43:59 -04:00
  • 1dbb0ce406 feat(collections): playlist auto-creation, position ordering, hide_finished, Up Next, dashboard eligibility John O'Keefe 2026-10-19 15:25:40 -04:00
  • 7e4c97f639 feat(scanner): fix ABS sidecar series parsing; three-way series mapping; smart genre; language codes; title-derived series John O'Keefe 2026-10-19 14:34:42 -04:00
  • 646477afad feat(schema): subtitle/explicit columns, authors+publishers arrays, float series numbers John O'Keefe 2026-10-19 14:17:50 -04:00
  • f7dc8189a1 feat(css): cross-document view transitions v1.17.1 John O'Keefe 2026-10-19 12:40:44 -04:00
  • a8641ab343 chore(ui): bump the main.js cache-bust stamp to v6 John O'Keefe 2026-10-19 12:40:31 -04:00
  • 1ce66b2213 chore(templ): warn against change handlers on the bookshelf library select John O'Keefe 2026-10-19 12:40:13 -04:00
  • 18f52d240b docs(agents): record the dashboard sections rendering exception John O'Keefe 2026-10-19 12:40:02 -04:00
  • 220d97cfe0 test(series): pin the SSR pagination contract under tied timestamps John O'Keefe 2026-10-19 12:39:47 -04:00
  • 38efbff7e1 fix(db): total ordering for series OFFSET pagination John O'Keefe 2026-10-19 12:39:32 -04:00
  • f4414aa5b6 style(series): plain-text page indicator instead of the chip pill John O'Keefe 2026-10-19 12:39:20 -04:00
  • 3daa834a94 refactor(series): drop the TS rendering twin; library switch navigates SSR John O'Keefe 2026-10-19 12:39:09 -04:00
  • 202a090811 fix(ui): library restore no longer re-fires change on synced dropdowns John O'Keefe 2026-10-19 12:38:50 -04:00
  • ee98c0fb3b docs(dev): test-running policy + media-fixture rules; ignore testdata v1.17.0 John O'Keefe 2026-10-19 07:54:55 -04:00
  • 79ce5ab89d feat(web): multi-track audiobook player — per-track src switching, global-seconds position John O'Keefe 2026-10-19 07:54:45 -04:00
  • 6216bd9bcf feat(audiobooks): multi-file books (folder-of-tracks + zip) + exhaustive metadata ingestion John O'Keefe 2026-10-19 07:54:28 -04:00
  • 24228e7147 test(scan): cancellation endpoint semantics and mid-run safety John O'Keefe 2026-10-18 18:02:45 -04:00
  • e1153b2c4b feat(admin): cancel buttons for in-flight scans + cancelled state UI John O'Keefe 2026-10-18 18:02:34 -04:00
  • 5b81e19f2f feat(scanner): POST /api/scanner/cancel/:jobId (admin) John O'Keefe 2026-10-18 18:02:25 -04:00
  • 30ecdd4bf3 feat(scanner): ScanFolders honors its context; cancelling never archives John O'Keefe 2026-10-18 18:02:19 -04:00
  • b2220756e2 feat(worker): real per-job cancellation for the background job pool John O'Keefe 2026-10-18 18:02:11 -04:00
  • d74db03cf3 feat(sync): unlinked-books queue — ingest, page route, dashboard banner v1.16.1 John O'Keefe 2026-10-18 16:45:48 -04:00
  • 9e831085ef fix(ui): derive Library Type dropdowns from library_types — audiobooks was missing John O'Keefe 2026-10-18 16:38:03 -04:00
  • 327fc2c0f9 feat(matching): match results as a scoped templ partial + enriched matches John O'Keefe 2026-10-18 16:00:04 -04:00
  • a31da89df5 feat(ui): View Transitions crossfade for library switches John O'Keefe 2026-10-18 16:00:04 -04:00
  • a11b4a9cc4 fix(ui): library-switch overlay was fully opaque — the 'new page' wipe John O'Keefe 2026-10-18 13:16:35 -04:00
  • 040c10ac76 feat(matching): family-lens scoping for book matching and linking John O'Keefe 2026-10-18 13:10:57 -04:00
  • 4a68fe7cab fix(conflicts): the status filter, select-all, and bulk actions actually work John O'Keefe 2026-10-18 12:42:50 -04:00
  • cb4e892b10 test(templates): pin the rendering partials — standalone render, OOB markers, empty state John O'Keefe 2026-10-18 12:30:55 -04:00
  • 506a04b55d chore(web): library-admin inline script moves to admin.ts; rendering guardrail John O'Keefe 2026-10-18 12:28:50 -04:00
  • f1844591b4 feat(web): templ partials replace the last UI twins (collections grid, conflicts list) John O'Keefe 2026-10-18 12:28:25 -04:00
  • 1fdf306f2d docs(agents): rendering-ownership rule — templ renders, JS decides what shows John O'Keefe 2026-10-18 12:28:25 -04:00
  • b89eac22e3 fix(templ): stop emitting literal { expr } text into attributes and body classes v1.16.0 John O'Keefe 2026-10-18 12:08:20 -04:00
  • d5bb874651 feat(themes): Omarchy catalog, 12 light themes, Dark/Light Appearance picker John O'Keefe 2026-10-18 12:08:07 -04:00
  • 4f913da0b1 chore(db): schema.go searches three levels up — replaces the tests-dir symlink v1.15.1 John O'Keefe 2026-10-17 22:51:55 -04:00
  • 0799cca3e6 fix(schema): ship the two Batch-A upgrade ALTERs that 1.15.0 missed John O'Keefe 2026-10-17 22:46:01 -04:00
  • 45b8542e25 fix(api): honor the request's origin as the writer label — app rows stop wearing "web" v1.15.0 John O'Keefe 2026-10-17 21:44:13 -04:00
  • 8f05f1116e fix(css): native select popups follow the theme — color-scheme per scheme + themed option entries John O'Keefe 2026-10-17 20:12:54 -04:00
  • 454938c31f refactor(vis): H4.5 steps 4-5 — statistics and the three reader gates on the canonical resolver; core goes package-level John O'Keefe 2026-10-17 17:35:43 -04:00
  • 8dbaa8f810 refactor(vis): H4.5 step 3 — collections endpoint and the SSR helper on the canonical resolver John O'Keefe 2026-10-17 17:32:11 -04:00
  • d2d92efd10 refactor(vis): H4.5 step 2 — series endpoints on the canonical resolver John O'Keefe 2026-10-17 17:31:23 -04:00
  • 1d12a64915 refactor(vis): H4.5 step 1 — LibraryService.VisibleLibrarySet, the canonical resolver; media endpoints migrated John O'Keefe 2026-10-17 17:30:11 -04:00
  • 29a546229d refactor(opds): one acquisition-entry builder for the catalog and search feeds John O'Keefe 2026-10-17 17:23:33 -04:00
  • 6b3bdef052 refactor(reader): one comic-likeness predicate — panel detection was a byte-identical twin John O'Keefe 2026-10-17 17:16:11 -04:00
  • 2ba1e0960b refactor(hash-conflicts): one usage-counts reader for the API and SSR surfaces John O'Keefe 2026-10-17 17:15:14 -04:00
  • 010c0cb287 test(contracts): whitelist the unified row's two new keys on search rows John O'Keefe 2026-10-17 16:57:20 -04:00
  • c538efe722 feat(db): SearchMediaItemsUnifiedRow carries abridged + audio_metadata John O'Keefe 2026-10-17 16:55:04 -04:00
  • 87fc89a816 refactor(router): one WeekStatsData mapper for the dashboard page and week-widget fragment John O'Keefe 2026-10-17 16:54:21 -04:00
  • 77cf0b827b refactor(db): GetCollectionItemsForDashboard embeds the media row; excluded filter moves into SQL; third converter dies John O'Keefe 2026-10-17 16:51:30 -04:00
  • 18727fef93 refactor(collections): rule evaluators take the real row; both 45-field converter twins deleted John O'Keefe 2026-10-17 16:48:39 -04:00
  • b47a2b86a7 refactor(conflicts): one ConflictDetail builder for the three row shapes John O'Keefe 2026-10-17 16:42:37 -04:00
  • 58fbe372e2 refactor(devices): one Devices->DeviceInfo mapper for the five hand-built copies John O'Keefe 2026-10-17 16:39:12 -04:00
  • 082a3e0c3c fix(sync): offline detector wiped device name, auto_sync, and metadata on every transition John O'Keefe 2026-10-17 16:38:00 -04:00
  • 188ae076ab refactor(utils): one PgTextString for the four pgtype.Text unwrappers John O'Keefe 2026-10-17 16:36:58 -04:00
  • 00305ffc7b chore(db): retire the nine dead annotation plain queries + duplicate SQL line John O'Keefe 2026-10-17 16:30:38 -04:00
  • edb4e60679 fix(annotations): LWW applies coalesce omitted fields — partial payloads no longer erase stored locators John O'Keefe 2026-10-17 16:03:49 -04:00
  • 11609d13d1 refactor(annotations): one LWW decision core + one tombstone gate + typed queue decoders John O'Keefe 2026-10-17 15:56:24 -04:00
  • 7d698ea0d8 fix(annotations): bookmark and note PUTs land through the sync service (LWW by id) John O'Keefe 2026-10-17 15:53:12 -04:00
  • c579179fee refactor(annotations): AnnotationService is a required constructor dependency John O'Keefe 2026-10-17 15:47:57 -04:00