Group cells in the Readest Library view rendered as FakeCover even when
their child books had perfectly good cloud covers — the queue that
fetches <hash>.png covers was only primed for cloud-only book entries
on the visible page, so children of group entries were never requested.
A later partial composite (3/4 covers) was also written to a
content-fingerprinted disk cache and kept serving forever, since the
fingerprint stayed the same after the 4th cover landed.
Two fixes wired together:
- libraryitem.set_visible_hashes now expands visible group entries to
include their first-N children's hashes, so trigger_download's
visibility filter no longer rejects them.
- group_covers.child_cover_bb queues a cloud-cover download when the
fallback path misses for a cloud-present book. Capped at 4 per group
by the existing cells_for(shape) limit.
Disk caching of composites is dropped entirely; mosaics are recomposed
in memory each paint. New spec/library/group_covers_spec.lua locks the
contract for URI round-trip, child_cover_bb's missing-cover branches,
and libraryitem's group-children expansion.
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>