Conversation
Owner
ajslater
commented
May 21, 2026
- Fixes
- Fix "Last Read" column in table view crashing.
- Ignore dotfiles.
- Features
- Select by range in multi-select with shift+click.
Each MetadataText value rendered with `overflow-y: scroll`, which forces a scrollbar even when no max-height is set. Chromium-based Edge on Windows draws classic scrollbar arrow buttons on every forced scrollbar, producing visible up/down chevrons next to single-line values like the publisher, bookmark progress, and date. Other Chromium browsers don't draw the arrows, so this only manifested on Edge. Switch to `overflow-y: auto` so the scrollbar only appears for the two fields that actually need it (Summary and Review, which have `max-height: 100`). The `isOverflow` measurement still works since it compares `clientHeight` to `scrollHeight`, which is identical under `auto`. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Override v-window's default touch handlers in the horizontal pager so left/right swipes route through ``routeToDirection`` instead of trying to flip between the (disabled) v-window items. Mirrors the keyboard arrow behavior, so RTL handling is automatic via ``normalizeDirection``. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ty (#768) JanitorCleanupFavoritesTask was wired into janitor dispatch, nightly queueing, and the admin task map, but missing from _SCRIBE_TASK_PRIORITY. When the task hit the scribe queue, tuple.index() raised ValueError, the put silently failed, and "Cleanup Orphans Favorites" stayed pending forever. Add it to the priority tuple and align Bookmarks/Settings ordering with _NIGHTLY_TASK_CLASSES so the two tuples stay in sync. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
compute_group_intersections issued Count(F("bookmark_updated_at")) against
Comic, but the column is a per-user-filtered Max(bookmark__updated_at)
aggregate — not a Comic field — so Django raised FieldError as soon as a
group page was rendered in table view with the Last Read column visible.
Drop the broken scalar-paths entry and extend
_annotate_bookmark_updated_at to attach the existing aggregate to group
querysets in table view; the cell display reads it via getattr. bmua_is_max
stays bound to the primary branch so the JsonGroupArray fallback keeps
covering Comic rows that didn't get the scalar.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Add a small central registry in codex/librarian/fs/filters.py (_IGNORED_BASENAMES + _IGNORED_BASENAME_PREFIXES) consulted by both the poller's DiskSnapshot walker and the watchfiles filter via is_ignored_basename / is_ignored_path. Seeded with the "." prefix so hidden trees (.git, .DS_Store, .Trashes, .Spotlight-V100, …) are pruned from every traversal; extending the registry to cover @eadir, __MACOSX, Thumbs.db, desktop.ini, etc. is a one-line edit with no walker or filter changes. CodexWatchFilter now takes the watched library_paths so the check can run relative to each library root — libraries whose own path is hidden (/Users/aj/.archive/comics) still poll their contents. The filter is also rebuilt per watch-loop iteration so a restart() propagates path-set updates instead of freezing them at process startup. expand_dir_added prunes ignored directories in place via the os.walk dirnames idiom so freshly-added trees never enqueue events from inside a hidden subtree. Pre-existing rows imported before this filter existed remain in the DB until cleaned by hand or by a future janitor pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Plain click still toggles a single card / row and sets it as the anchor. Shift-click extends from the anchor to the target through the page's displayed order, filling the range with selected = true (not a toggle — matches Gmail / Finder / VS Code). The target becomes the new anchor so successive shift-clicks chain naturally. Anchor lives in the browser-select-many store (lastAnchorKey) and invalidates implicitly: a findIndex == -1 on either endpoint (post-paginate, post-sort, post-reload) falls back to a plain toggle, so callers never need to clear the anchor on navigation. clearSelection / deactivate also reset it. A new private _visibleItems() helper is the single source of truth for "displayed order" — rows in table mode, groups + books in cover mode — and selectAll now uses it too. The range can span the groups + books boundary naturally in cover mode. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.