Session 21 — 2026-09-01 — Sheri's real book: verify + repair (birthday 9/13)
Bert promised Sheri's issues fixed today. Target: the actual book, "Happy 95th
Birthday Mom" (honoree Grandma Diggs, owner [email protected], Small
Square, 38 tributes / 17 photos, book 9278971d, share NTDCWU).
Findings on her stored photos (all 17 downloaded and analyzed)
| Class | Count | Cause | Outcome |
|---|---|---|---|
| HEIC files | 3 (Erin Renée, Feb) | Browsers + react-pdf cannot decode HEIC → black/blank in PDF. Uploaded before the 7/31 resize guard existed. | Repaired: converted to upright JPEG (pillow-heif, EXIF applied, 2400px, q90), uploaded alongside originals, photo_urls repointed. Originals untouched. |
| Solid-black JPEG | 1 (Sheri, 7/8: 1783526707029-9riusv.jpg, 18KB, 2048x1536, 100% black) |
File was damaged before upload. Unrecoverable by software. | Photo Fixer now flags it (below); Sheri must re-send or remove. This is the black box on her page 22. |
| EXIF orientation 6 | 4 (Shirill) | Handled by the render normalizer since 8/21. | No action; verified upright in the PDF. |
Verification (Playwright vs production, prod-walkthrough.cjs)
- New
pdfcodephase: pulls a book's PDF from/preview/<share_code>under the admin session (books RLS:is_admin()SELECT). Her PDF: 24 pages, zero[Name]literals, all repaired HEIC photos render, orientation-6 photos embedded upright, auto layout tiling correct (5-photo tribute tiles at ~139pt on the 540pt page). Only remaining dark image = the damaged source file. - Regression
shoot: 14/14 PASS, no FAILs (Playwright browsers reinstalled after 1.58.2 update). - New
blackcheckphase: submits a solid-black JPEG through the public form and asserts the Fixer badge appears. PASS, screenshot captured.
Changes shipped (1784047, c81da4b)
- Photo Fixer flags damaged uploads: samples each photo (32x32 canvas, mean luminance < 8/255) and shows a red "This photo is blank — the file arrived damaged" badge with re-send/remove guidance, instead of printing a black box silently.
- Walkthrough phases
pdfcode+blackcheck; not-found check fixed (hidden div).
Platform-wide HEIC sweep
13 more stored HEICs found in two other books (46612846, 7c4926fe — early
"Family" books, Erin/Sheri contributors). Same convert + repoint applied.
select ... where url ~* '\.hei[cf]$' now returns 0 rows platform-wide.
Note: the contributor form has blocked undecodable files with a clear message
since 7/31; the dropzone copy still advertises HEIC (works in Safari, which
re-encodes; Chrome cannot decode → clear error). Local tooling added for the
repair: pillow-heif (pip, local only, not an app dependency).
What Sheri still has to do (only one thing)
Replace or remove the damaged photo on her own tribute (the second photo, black square). The Fixer now points at it. Everything else in the book is print-ready; the 9/13 birthday has 12 days of margin for a Lulu order.
Data changes on prod (all additive/reversible)
- Storage: 16 new
-conv.jpgobjects (3 her book + 13 other books); no originals deleted or overwritten. submissions.photo_urlsrepointed on 6 submissions (SQLarray_replace).- Bert's test book: QA tributes (
Playwright QA,Layout QA Pair,Blank Photo QA) set tohidden.