Repository navigation
## v1.26.0 (2026-10-02)
v1.26.0 (2026-10-02)
The parity audit's fix wave: every confirmed bug and divergence lands
The 2026-10-02 eight-agent parity audit (four reviewers, two bug hunters,
one compat-merge review, one claim verification -- 8/8 top claims confirmed)
found three shipped-code bugs, eleven confirmed divergences, and a gaps
list. This release fixes the bugs and the divergences users plausibly hit,
and records the rest in the roadmap's audit block.
set_book_storagestores upstream's bare data map (was the wrapped
{'timestamp', 'data'}entry, which Calibre's validating reader dropped
on every cquarry-written row), with upstream's guards reproduced
(str-only keys/values, the 1 MiB UTF-16 cap, newest-timestamp-wins) and
the missing read half shipping asget_book_storage.remove_bookcleansbooks_pages_linkandbook_storage-- the two
FK-cascade tables neitherbooks_delete_trgnor cquarry's
foreign-keys-off connection covered; the stranded pages row (its book
column is the PRIMARY KEY) brokemove_book_from_trashwith
IntegrityError on any library with page counts.get_categoriesfollows upstream'sis_category = normalizedrule
(direct-storage customs out -- their raw values made engine-unparseable
expressions), gains the identifiers category (one node per identifier
key), and escapes expression values for quotes/backslashes.- Search parity, claim-verified: bare-term sweeps match identifier
KEYS like upstream (the 1.18-1.25 spec sentence said otherwise and was
wrong about upstream);all:falseis upstream's sequential loop
(missing AT LEAST ONE swept field, not missing every);cover:is
numeric with exactly true/false special-cased (cover:1works,
cover:yesraises). - New author rows follow upstream's creation path: the name stores
with commas as the legacy pipe and the sort is
helpers.author_to_author_sort's flip under the default tweaks -- the
old verbatim defaults rested on a spec sentence that was factually
wrong about upstream. - Writer fidelity:
remove_formatqueues the pages rescan;
set_plugin_datajson.dumps's every payload (the str-verbatim
shortcut stored strings upstream's reader cannot decode);
set_conversion_optionswraps payloads in upstream's deterministic
protocol-2 frame (fresh rows were unreadable by Calibre's unpickling
reader);set_custom_series_indexwrites the link row's extra float
and fresh series assignments seed it at 1.0;
set_author_sort_namegainsupdate_books=Falseand its long-promised
honest no-op;copy_book_from_librarycarries a 0.0 series index
verbatim and its author-sort postprocess no longer rewrites existing
destination books. - Recorded, not adopted (roadmap audit block): the enum count-operator
gap, negativeNdaysago,loc:="X"'s contains-vs-exact degradation,
translated date vocabulary, the search-behavior prefs, upstream's
localized language node names, ICU sort keys, and the popularity/
first-letter sort parameters -- each dependency-bound or GUI-state-
bound, now named in spec §5 or the roadmap. - Housekeeping: the compat branch carries the merge-review erratum
(restored its own 1.18.0+py313.1 entry; suite count corrected to 653). - Suite: 672 tests (flat -- every fix reshaped existing pins rather than adding volume; the new pins replaced the wrong-shape ones one-for-one).