The printed page number is read anyway for ordering, so use it to keep
count of what has actually been captured.
PageCoverage turns the folios in pages/ into a span [low, high] with one
state per page: captured, needs re-capture (a page file that exists but is
blank - the folio was read, the body was not), or missing (no page file at
all). The shelf, book and capture screens surface it, and the book list
interleaves the gaps in folio order, so a page that was skipped or came out
blank sits exactly where the reader would look for it. A photo holding no
text at all has no folio to attribute; it stays in failed/ and is listed
separately as unreadable.
A one- or two-line half is not a text block, so PageNumberDetector's
top/bottom band test could never recognise a folio on the very page this
feature cares about - a body that failed to OCR, leaving only its page
number. Sparse halves now accept an isolated bare number sitting in the
outer margin.
98 unit tests, 0 failures (was 83). Verified end to end on the Pixel 7:
"Pages 42-51 - 7 of 10 captured - 3 to shoot", with page 47 flagged for
re-capture and 48/49 reported missing.