You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Ideas become discussions: public ideas support comments, replies, likes and liker lists; the reader gains side-by-side drawer and floating modal modes, 280–720 px draggable width, reading margin shifting, bottom composer, and custom card styles.
Structured search expressions: library search supports combining plain words with exact author:, tag:, etc. filters, boolean operators (&, |, !), and interactive condition chips.
Simplified identity & database architecture: legacy guest database identity and obsolete instance settings are fully retired; anonymous reading is client-only, and hidden content display is isolated per local account.
Upload duplicate warning: uploading a file that matches an existing book prompts before creating a separate copy.
Added
Reader ideas become discussions for collected shared books: eligible readers can publish public ideas bound to the exact source listing and version, with comments, one-level replies, likes and liker lists. Deleting a comment removes it and promotes surviving replies to top level without placeholders. Visibility defaults to the account's last successful choice and stays private until published.
Reader ideas can be viewed in a side-by-side drawer sidebar or floating modal, with draggable width adjustment (280–720 px), bottom composer, reading margin shifting, and custom card layout styles.
New showFriendIdeas reader setting (synced across devices, defaults to on): shows other readers' idea markers without ever hiding your own. Revision mismatches disable markers and jumps instead of misplacing them.
Library search takes one expression that mixes ordinary words with exact author:, series:, tag:, shelf:, category:, format: and status: conditions, combined with &, |, ! and parentheses. Names match exactly, and an unknown or malformed value reports the position to fix instead of replacing the results.
The search box validates a draft against the real list before applying it, suggests names already in the library and shows one removable chip per condition. It applies on Enter, the search button, or 300 ms after typing stops rather than on every keystroke, and exiting restores the previous filters, page and scroll position.
Uploading a file that matches an existing book now names it and waits for an explicit continue before adding a separate copy.
Changed
"Show hidden items" is remembered separately for each account in the current browser, defaults to off, and returns to the previous choice after refresh or signing in again. It is not synced across devices.
Signing out or losing the session immediately hides private hidden content while keeping the account's local preference. Switching accounts never inherits another account's choice, and guests cannot reveal hidden items.
Turning off hidden display while reading a hidden private book saves pending progress before leaving the reader; failed saves keep the reader open for retry.
The instance owner is the one account named by instance.ownerUserId; the owner/member role is derived per request instead of stored on the account, and no account holds a guest role.
Anonymous readers no longer have a database account. GET /api/v1/auth/me answers { user: null, guest: true }, guest preferences and progress stay in the local browser, and personal data, downloads, exports and every change require a real account.
Fixed
Searching cross-paragraph selections with multi-line whitespace from idea menus and annotations now correctly matches occurrences in book search.
Chinese font stacks now include common Windows face names, which may change the physical font actually rendered; Latin-first fonts still lead with the CJK companion chain.
AI "save as idea" now shows loading feedback and offers a retry when its settings fail to load, instead of silently doing nothing.
Hidden-display changes now clear related list, search, detail, recent-reading, taxonomy, annotation and statistics caches, preventing stale hidden content from remaining visible.
Hidden private-book links no longer reuse hidden-inclusive cached details when display is off; direct links never enable hidden display automatically.
Filter reset affordances in the library context bar and the view menu are now icon buttons.
Dismissing a finished update now clears its record so the entry returns on refresh, and interrupted updates no longer show later steps as done; failed dismissals stay open for retry while closing an active update keeps it running in the background.
A failed system update no longer rolls back to a snapshot from another release, an unknown manifest format or one without an instance owner; the current database and the pending update are left untouched.
Upgrade notes
The old shared browser preference is not migrated to any account. Each account starts with hidden display off until explicitly enabled.
This switch controls display only. Book, shelf and tag hide flags and shared-library permissions are unchanged; it is not an unlock credential, and no PIN is introduced.
Migration 0040 retires the legacy guest identity, users.role and instance_settings. It runs once, cannot be undone in place, and stops rather than deleting data it does not recognise: back up DATA_DIR completely first, and never boot an older release against a migrated database. It also turns registration and guest access off once, which the owner can re-enable.
Migration 0041 adds idea discussion tables (idea_comments, idea_likes, idea_comment_likes), idea provenance columns (source_library_book_version_id, revision_id, edited_at) and an author-cleanup trigger. It applies automatically on boot and, like 0040, cannot be undone in place.
Snapshots now record formatVersion: 2 with the instance row. Earlier snapshots stay listable and deletable but only roll back to the release they came from.