diff --git a/internal/check-poster-wall-header-action.mjs b/internal/check-poster-wall-host-seams.mjs similarity index 64% rename from internal/check-poster-wall-header-action.mjs rename to internal/check-poster-wall-host-seams.mjs index 7dcd3d0ad..b9f002009 100644 --- a/internal/check-poster-wall-header-action.mjs +++ b/internal/check-poster-wall-host-seams.mjs @@ -1,14 +1,21 @@ #!/usr/bin/env node /** - * check-poster-wall-header-action.mjs: PosterWall's header sticker does what its headerAction prop says. + * check-poster-wall-host-seams.mjs: PosterWall's two host seams, headerAction and previewSrc, do what they + * say, and with neither set every wall behaves as before. * - * WHY. PosterWall's card header was hard-wired to "Show on map". A wall with no map beside it (the + * WHY (headerAction). PosterWall's card header was hard-wired to "Show on map". A wall with no map beside it (the * Poster Design gallery) needs the same card with a different action, so the header became a seam: * headerAction null (the default) keeps the "Show on map" TOGGLE; { labelKey, ariaKey } makes it a * plain button that emits 'header-action'. Every existing wall passes nothing, so the default path is * the one that must not move, and the new path must not leak the old one's side effects (a window * event a map would act on, aria-pressed, the is-last highlight). * + * WHY (previewSrc). The card's thumbnail was always the stored previews/.webp. A gallery of templates + * drawn from the library has no stored file and must show a library change, so the thumbnail can come + * from the host. A gallery renders many cards, so the seam is LAZY (only cards in view), ONE render at a + * time, cached per page, and bounded: no answer, a throw or a timeout falls back to the wall's + * "preview unavailable" placeholder, never a blank or an endless wait. + * * HOW. No browser (fleet policy). PosterWall has no