Repository navigation
Releases: VirInvictus/Carrel
Release list
v0.9.10: ## 0.9.10 (2026-09-15)
0.9.10 (2026-09-15)
The final-blitz release: the audit lane executed, the guard hardened, the contract synced
The 2026-09-13 final audit's ranked list, worked top-down in one release.
Fork-side touches are logged under the cross-repo grant (#117): the series
double-render fix and the read-guard cleanup (e7949b95, cec662ab), plus the
vendored theme (ac000655). Fork suite 86 green throughout.
- The decorator counts are restated as wording (the HIGH). The
correction-of-the-correction: the figures were family counts of
@login_required_if_no_anoall along (39 across 5 modules at the 0.6.26
base; 37 still upstream-side plus the fork's own 5 at HEAD, 42 across 10),
and no doc said which spelling it meant. Spec 11.1/11.2 now name it and
note admin.py's 94 route protections ride upstream's wrapper decorators;
the 0.9.9 entry carries a dated erratum; README says the same in one
breath. - The dropdown menu is themed. The Bootstrap
.dropdown-menuon the
detail page (multi-format Download, Read/Listen in Browser) was the last
stock-white surface; one rule block (black2 ground, hairline border, gray
mono items, orange hover) in the canonical sheet, vendored by
just sync-theme, verified against the real bootstrap cascade on a
scratch page. Latent on the live instance until a 2+-format book exists
(today's library has none); recorded so nobody expects to see it tomorrow. - The cover read tick keeps its icon font.
.badge.glyphiconre-pins
Glyphicons Halflings past the mono badge rules (0-2-0 had beaten 0-1-0);
the \e013 checkmark no longer depends on an installed Nerd Font.
Computed style verified on the live app. - check-theme is hardened, and guards itself. The full 148-name colour
list (whitesmoke no longer sails through), the modern notation set
refused (oklch/lab/lch/hwb/color/color-mix/light-dark/device-cmyk), raw
hex outside :root fails outright (the old check subtracted root_hexes, so
a declared mid-file hex passed),--monopinned symmetrically with
--serif, brace-aware :root extraction, var() resolution, and the
fork's icon.png/favicon.ico re-rendered and byte-compared when
rsvg-convert and magick exist (render determinism verified; graceful
skip on CI, whose actions also bump to checkout/setup-python v7 and run
the new--selftest: 24 reintroduced bypass classes, each refused).
Verified the old way too: every bypass class reintroduced into the real
sheet failed the run. The CI gate now checks the fork out beside this
repo (the 2026-09-15 answer to the coupling question), so the icon
byte-diff runs on CI and Carrel CI reddens on fork icon drift by
design; the rendered pair stays local. - The GitHub presentation batch is executed. Releases for v0.9.7,
v0.9.8 and v0.9.9 are cut from their tags, verbatim bodies
(--notes-from-tag); the v0.9.7 body publishes its recorded em-dash
as-is, the 2026-09-15 answer to the force-push question (the tag is the
immutable record; nothing forward-facing carries the character). The
README gains a Screenshots section hotlinking the fork's six images from
smallscope(the coupling is stated right under the heading), the repo
description now names Carrel-calibre-web, the topics swap landed (docs,
just and gpl-30 out; design-system, typography and reading-room in), and
the never-initialized wiki is off. - The ledger grows its missing rows.
.page-countand.reader-state
join the flex-order, measure, and hairline lists (they rendered serif
white against the rule's own comment); the deadfooterselector is
gone; the sheet header scopes its "only sheet" claim (the EPUB reader
and /basic are recorded exceptions); the ramp comment and spec 4.3 tell
the truth together now: steps 4 to 5 clear 4.5:1, gold 3 measures
4.37:1 and its values are stated outside the fill. - The contract catches up (spec amendments, one reviewable batch). §2's
venv self-contradiction reworded; §4.1 says the caliBlur sheets are not
served (the theme-1 conditional stays for the rebase diff) and records
the /basic stock-skin exception with the Kindle-path answer (decision
#106, 2026-09-14: /basic is not a device surface; the Oasis reads
through Calibre's own server and KOReader's integration); §4.4 records
the 2px chart micro-radii exception and the grid series line's mono
register; §5.3 states the write-guard's real breadth (any linked read
column, not just enums; the dead enum branch deleted fork-side); §6.2
gains the series-ledger line; the seven stray curly apostrophes of the
cquarry-1.1 paste seam are straightened. Last revised moves to
2026-09-15 (v0.9.10). - Fork touches under grant #117, logged in both repos. The upstream
"Book N of SERIES" detail line is removed (the Carrel ledger was
rendering the same fact twice; spec 6.2 carries the line), the vendored
sheet is refreshed, and the read-guard's redundant enum branch is gone.
Suite 86 green after each; the fork's patchnotes carry the blitz log. - Docs and hygiene. The 0.5.0 entry gets its dated erratum (the engine
was cquarry's, not "CalibreQuarry's"; the v2.6+ floor named no release
that ever existed); the 0.9.9 decision anchors are named in words; the
roadmap's stale Phase 0/13 headers and the below/above pointer are
fixed; the Browse-verdict sign-off box is closed as decided-and-shipped;
the 12 dash surrogates and the apostrophe seam are recast;
README/CLAUDE/CI point at the script docstring instead of restating the
guard four times;*.bakis ignored and the ruff cache is gone. The
compoundjust syncrecipe vendors both assets then runs both guards,
and a barejustis inert. The report-only selector-vs-DOM linter lands
clean on the live tree (just lint-selectors; it never gates). - Gates answered and executed this release. The GitHub presentation
batch (above), the CI sibling checkout (above), the historical-correction
policy (inline dated errata, decided once; the 0.5.0 and 0.9.9 entries
and now the 0.7.0 entry carry theirs), the spec spelling convention
(Canadian English, recorded in the spec header, the split normalized),
the .gitignore prune (to the library, editor/OS, and scratch blocks),
and the push itself (standing blitz grant). Still Brandon's: the six
1.0 sign-off boxes and the DNF marking, recorded as reopen conditions
inproject.done.
v0.9.9: ## 0.9.9 (2026-09-13)
0.9.9 (2026-09-13)
The Categories reposition lands; the contract syncs to the decisions
The 2026-09-12 decision session's Carrel lane, executed as one release
across both repos. The code half is fork 0.6.41; this repo carries the
contract and the theme.
- The sidebar re-balances (fork 0.6.41). A compact Categories
section renders beneath Wings, above Saved Searches, per decision 32;
the tree itself is unchanged, only its position and register (the
theme's compact rows ship through the canonical sheet, vendored by
just sync-theme). While in the sidebar's code, palette.py's three
ORM reads (authors, series, tags) moved to cquarryget_entities(),
so the Ctrl-K index is served from the same source as the about-page
counts, making the decision note's "served from the cquarry category
counts" true. Fork suite 73 green (two new tests: the sidebar order
pin, the palette/get_entities lockstep pin); the README screenshots
are re-photographed for the new order, with the library's checksum
identical around the session. - The single_user.py decorator correction is real now. The roadmap
claimed the 154/10 comment fix shipped in 230c42bc; the six-lens audit
found the file still carrying it. Fork 0.6.41 lands the correction:
39 upstream across 5 modules, 42 across 10 at smallscope HEAD. - The contract syncs to the decided state. spec §6.3's
common_filters bullet records the deviation as accepted (decision 33)
instead of parked; §4.6 describes the reader theme as shipped, with
the right hex (dragonBlack3); the header's Last revised moves to
2026-09-13. README and CI describe the 31-hex pin that Phase 13
actually ships instead of the retired:rootdeclaration guard. The
glued checkbox in the roadmap is split, Phases 12 and 13 now sit in
phase order above the sign-off section, and the cquarry three-version
skew (venv dist-info 1.8.0, editable tree 1.20.0, CI pin 1.17.0) is
recorded as a noted hazard with its fix shapes. - Theme hygiene. The duplicated category-tree badge block folds
away (the.navigation .badgerule already covered it) and a no-op
hover restatement is dropped.just checkandjust check-theme
green.
v0.9.8: ## 0.9.8 (2026-09-11)
0.9.8 (2026-09-11)
The contract catches up: the data-layer swap, the sealing release, a hardened guard
Carrel ships no application code; every code change lives in the fork
(Carrel-calibre-web, smallscope, release 0.6.40). What moved here:
- spec §6.3 is new: the cquarry data layer. The fork's own Phase 7
(0.6.30-0.6.39) moved the read surfaces to cquarry'slist_booksbehind
clean-room adapters, and no contract document recorded any of it. The
new section names the adapter, the surfaces on cquarry, the
invalidation rule, what deliberately stays on the ORM or the app DB,
and the common_filters deviation with its decision parked for Brandon. - The Phase 13 sealing release is executed (fork 0.6.40). Eight
admin-machinery routes sealed (the updater kill chain was two
unauthenticated requests with self-mintable CSRF), the send/convert
chain and TaskBackupMetadata refused in code, per-name fault isolation
for wings and saved searches, OPDS offset/search/pagination hardening,
honest SearchError-vs-LibraryUnavailable failure classes, and the
mode=ro attach plus harness-vs-main blueprint parity pinned as
committed tests. clean_html.py is upstream byte-for-byte again, about.py
lost its quote reflow, and the fork's logo derivatives are regenerated
(the Wave artwork had survived in them since the 2026-08-09 fix).
Fork suite 71 green, from 108 executions for 60 unique tests. - The stale contract lines are synced. The §6.2 removal table is
repainted with the full seal lists; the decorator counts are corrected
(39 upstream across 5 modules; 42 across 10 at smallscope HEAD); the
§8.2 floor says cquarry 1.11.1+ editable; the §3 version clause is true
again; the dead search.py row is gone from §5.3; §12.3 records the
analytics ride-along; the four surviving em-dashes are recast (the
0.9.7 entry's stays baked into the pushed v0.9.7 tag: fixing it is a
tag force-push call, not taken). - The theme guard is hardened. The palette is pinned (31 hexes from
spec §4.2 plus §4.3's ramp) instead of derived from:root, which was
a proven bypass; rgb()/hsl()/named colours are refused;:rootis
found wherever it sits; and the fork'sicon.svgis diffed against
logo.svgwhen the sibling checkout exists.just sync-logois the
recipe that keeps the derivatives true. Verified Phase 11 style, each
bypass reintroduced. - Decisions recorded. The homelab auth question is answered: the
LAN-trust posture stands (spec §11.3; revisit only if the instance
leaves the LAN). The fork's three audit remainders are routed: the
audio-branch swap boxed with its work shape,/basic_bookboxed low
priority, the deferred OPDS items waived. - Phase numbering, disambiguated: the fork's "Phase 7" is its own
data-layer swap (0.6.30-0.6.39); this repo's Phase 7 is the single-user
shim (spec §11). Both are recorded in this file by contract; the fork's
releases below named 0.6.30 "Phase 7 begins" while this repo's Phase 7
section is something else entirely.
v0.9.7: ## 0.9.7 (2026-09-03)
0.9.7 (2026-09-03)
Phase 7 begins in the fork (0.6.30): the swap's first increments
The contract repo's note for the fork's 0.6.30: the NEW-AUDIT Stage 6
boundary map is written into cquarry's roadmap, and the fork landed the
first data-layer swaps — series awareness through get_entities +
get_all_series, cover resolution through get_cover_path via a shared
mtime-keyed quarry() in library_cache, and an acquisition-pace ledger
on /statistics computed by cquarry.analytics. Theme untouched this
round; check-theme green.