Session handover — 2026-07-12 pt3¶
Executed pt2's "Next session" priority #1: a single v3 re-capture of WCP +
garvanbay unlocked all three deferred halves at once, exactly as
session-2026-07-12-pt2-handover.md
predicted — hero carousel/video variant real measurement, topbar
email/location capture, and globals headerLayout/headerCta real
live-vs-ours numbers. The topbar half is the one real render improvement and was
deployed to WCP live D1 + rendered-verified; the other two are
measurement/reporting that landed cleanly.
What shipped (code + data; one live D1 write)¶
- Topbar email/location — capability #2 fast-follow #1 CLOSED
(known-issues "Header dimension"; known-patterns
"A zero-height pinned container hides its measurable children from the bg probe").
A live-DOM pre-flight proved the post-JS topbar exposes email (a
mailto:link) -
location (a text run) in measurable children — the reason the old probe read
zero-sizeis that Wix's#pinnedTopCentercontainer renders at height 0 while its children paint. Newchrome.topbarContactextractor (lib/capture-section-backgrounds.js, additive peer ofchrome.headerRaw, leaves the bg-onlychrome.topbaruntouched) + fill-if-empty overlay inlib/cms/seed-from-build.js. Deployed via surgicalec_globalsread-mutate-write (never a reseed — the regenerated seed'sSERVICE AREASCTA is empty because it's pinned outside<header>, fast-follow #2, so a reseed would revert it). Live WCP topbar now renders phone·email·location; garvanbay overlay a faithful no-op (its matcher already had the fields → byte-identical). -
Hero variant real measurement — capability #1, committed (ADR-0009 Slice 3). On the v3
assets,classifyHeroVariantnow measures WCP home =carousel(8 slides) — v2 readfull-bleed— plus 10 services =side-image, 13 locations =full-bleed. Committed into the WCP seed (24 heroes, surgical, onlyvariantadded — render byte-identical until the Slice-5 asset half). garvanbay heroes stayfull-bleed(zero-regression). -
Globals
headerLayout/headerCtareal numbers — capability #2 identify half (near-match scorecard contract; [lib/globals-diff.js]). The v3 re-capture (both live + a fresh ours-capture ofwcp.dcathal.org) turned the pt2n/ainto real numbers:headerLayoutagree (split-center=split-center, our deployed header matches live);headerCtamismatch (livenull— pinned outside<header>, fast-follow #2 — vs oursSERVICE AREAS), honestly surfaced.
Two landmines: (a) the brand-nondeterminism landmine never fired — the
section-background capture only reads theme.json (both themes untouched, brands
preserved); only theme-extractor.js re-derives brand and it wasn't run. (b) The
reseed-revert landmine was caught: a regen/reseed drops the capture-invisible
manual SERVICE AREAS CTA → surgical read-mutate-write throughout.
Wiki changes¶
- ADR-0009 — Slice 3 tracker appended (v3 re-capture + three-half landing; append-mostly).
- known-patterns.md — one new entry (zero-height pinned container hides its children from the bg probe; measure the run, land by read-mutate-write not reseed).
- known-issues.md — fast-follow #1 marked CLOSED (kept
as a stable handle; #2/#3 unchanged); globals identify paragraph updated (real
headerLayout/headerCtanumbers now surface). - capability-backlog.md — pt3 three-half landing note
- closing line (#1 real measurement done, #2 email/location + globals numbers done).
- near-match-scorecard-contract.md — globals projection now carries v3 numbers.
State¶
Committed to master this session-end: lib/capture-section-backgrounds.js
(topbarContact extractor), lib/cms/seed-from-build.js (topbar overlay),
apps/cms/seed/waterfordcountypainters.json (surgical: topbar email/location + 24
hero variants), + the five wiki files + this handover. One live write: WCP
ec_globals topbar patched (email + location) via surgical read-mutate-write —
header CTA + native operator block preserved, rendered-verified. No worker
redeploy (topbar content is D1, read at request time). No garvanbay change
(variants left uncommitted to avoid churning the SHIP anchor — they stamp on its
next regen; topbar overlay a no-op). Left alone (untracked/unrelated): infra/
(undecided ownership — known-issues), .claude/settings.local.json,
scripts/.tmp/ + apps/cms/scripts/.tmp/ (throwaway probes/patch scripts, not
committed — scripts/.tmp/ is not gitignored, so session-end staged files
explicitly). builds/* v3 captures regenerated (gitignored).
Next session (priority order)¶
- Hero asset plane — Slice 5 / Wix API (capability #1's remaining half). WCP
home is now measured
carousel(8 slides) + the service heroes/gallery carry videos — the actualvideo.wixstatic.commigration (#7,transform-seed-images.mjsbranch) + carousel frames. Detector 2'sasset-manifest.jsonalready enumerates the gaps (350 flagged on WCP). This is the half that makes the carousel/video variants render, not just measure. - Header-CTA auto-detection — fast-follow #2 (the pinned-layer walker: a
button-styled link in the header Y-band but outside
<header>, guarding topbar/floating false-positives). Same shape as trimtech "pinned-layer children escape coverage" — building it once unblocks both, and closes the last globalsheaderCtamismatch. - Section-style density dimension + Slice 6 calibration (fit
lib/calibration.jsonon the 30–50-site batch; promote hero-variant/scrim/textTone to scored dims and turn on the reporting-projection vetoes — variant-mismatch, asset-manifest, globals — there). inline-leftheader routing — fast-follow #3 when the first portfolio site measures it.