Session handover — 2026-07-08 pt5¶
Continues from session-2026-07-08-pt4-handover.md (ADR-0009 Slice 4b-ii). Two
pieces of work this session: (1) Slice 4b-ii shipped (pt4); (2) a garvanbay
end-to-end fidelity pass across all 10 pages — the demo went HOLD → SHIP.
Priority note: 5-vs-6 reordering was parked (calibration wants the Slice-5 content
plane first); this pass is orthogonal demo-fidelity work.
garvanbay end-to-end — what changed (where to look)¶
First full-site scorecard pass (before: only home measured). HOLD (87.9, veto)
→ SHIP (composite 91.2, S 88.5, T 100, G_det 87.8, no veto). Three levers:
- Lever 1 — subpage intro-band drop (root-caused + fixed).
seed-from-build.jsnever wired the assembler's Hero-dedupe re-match callback, so every FCR subpage's page-title intro band (which loses Hero to the brandedGARVANBAY ACCOUNTINGband) was dropped from the seed. Fix committedf72a93e(seefix(cms-seed): wire Hero-dedupe re-match callback). Result: accountspreparation / management-accounting / payroll → S=100. - Lever 3 — no-booking
book-an-appointment. Was empty (0 blocks → dropped a hero → the veto). Authored hero + 5-service grid (distinct real images) + enquiry CTA. Veto gone. (S=39.7 — our grid consolidates live's separate service sections; structural, page is presentable.) - Lever 2 — home muted bands: STILL OPEN. Reseeded D1 with
tone:mutedand redeployed (freshglobal.css), but home still re-capturesmuted→default. Ruled out the@sourcegap and D1 divergence — the tone isn't reaching the rendered DOM. Needs deployed-DOM/adapter debugging next. See known-issues (both muted entries).
Deploy mechanics (important for next time)¶
- garvanbay's build inputs (
src/data/*.body.html) live only on EC2, and that checkout is 100+ commits behind + dirty. So the rebuild pulled the 10body.htmllocally and ran the current generator — do NOT build on EC2 (stale code). - Images: a rebuilt seed has raw
/assets/paths; the deployed D1/renderer use resolved R2 URLs, and the R2 key is a lossy hash you can't recompute. Resolved via an authoritative basename→URL map from R2 object metadata (scripts/.tmp/r2-map.mjs; 16 objects). Images never uploaded → text-only (intro bands) or re-sourced from an in-R2 sibling (booking cards). See known-patterns "Re-seeding a rebuilt CMS seed needs the AUTHORITATIVE basename→R2-URL map from object metadata". - Reseed/redeploy target the demo D1/worker on the personal CF account (wrangler
authed locally). Fixed sample seed committed at
apps/cms/seed/garvanbay.json; worker redeployed (versionbb2e95c8).
New known-patterns¶
- Re-seeding a rebuilt CMS seed needs the authoritative basename→R2-URL map from object metadata (image resolution; R2 key is lossy; never-uploaded → text-only).
- Re-matching a single-instance-dedupe loser must re-run dup-collapse — Wix responsive-doubles produce two losers that both re-match to duplicate blocks (4 removed post-hoc this session; pipeline fix is an open follow-up).
Residual / next priorities¶
Open, none blocking SHIP (all in known-issues "garvanbay end-to-end pass"):
1. Lever 2 muted-tone render bug (deployed DOM/adapter debug) — highest-value polish.
2. Re-match over-produces dups — fold dup-collapse re-run after re-match into
lib/assembler-fulldev/dedupe.js (fixes both lanes; interim seed post-process used).
3. company-secretarial / tax-and-advisory / accountants-waterford each drop 1 band.
4. book-an-appointment grid-vs-sections (split to per-service if the number matters).
5. Promote the R2-metadata map builder + the image-resolve script from scripts/.tmp/
to committed helpers when the next site is re-seeded from a rebuild.
ADR-0009 slice work itself (Slice 5 content plane / Slice 6 calibration) is unchanged and still the strategic next step once demo polish is where you want it.