Skip to content

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)

  1. 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)
  2. location (a text run) in measurable children — the reason the old probe read zero-size is that Wix's #pinnedTopCenter container renders at height 0 while its children paint. New chrome.topbarContact extractor (lib/capture-section-backgrounds.js, additive peer of chrome.headerRaw, leaves the bg-only chrome.topbar untouched) + fill-if-empty overlay in lib/cms/seed-from-build.js. Deployed via surgical ec_globals read-mutate-write (never a reseed — the regenerated seed's SERVICE AREAS CTA 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).

  3. Hero variant real measurement — capability #1, committed (ADR-0009 Slice 3). On the v3 assets, classifyHeroVariant now measures WCP home = carousel (8 slides) — v2 read full-bleed — plus 10 services = side-image, 13 locations = full-bleed. Committed into the WCP seed (24 heroes, surgical, only variant added — render byte-identical until the Slice-5 asset half). garvanbay heroes stay full-bleed (zero-regression).

  4. Globals headerLayout/headerCta real numbers — capability #2 identify half (near-match scorecard contract; [lib/globals-diff.js]). The v3 re-capture (both live + a fresh ours-capture of wcp.dcathal.org) turned the pt2 n/a into real numbers: headerLayout agree (split-center = split-center, our deployed header matches live); headerCta mismatch (live null — pinned outside <header>, fast-follow #2 — vs ours SERVICE 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/headerCta numbers 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 committedscripts/.tmp/ is not gitignored, so session-end staged files explicitly). builds/* v3 captures regenerated (gitignored).

Next session (priority order)

  1. 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 actual video.wixstatic.com migration (#7, transform-seed-images.mjs branch) + carousel frames. Detector 2's asset-manifest.json already enumerates the gaps (350 flagged on WCP). This is the half that makes the carousel/video variants render, not just measure.
  2. 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 globals headerCta mismatch.
  3. Section-style density dimension + Slice 6 calibration (fit lib/calibration.json on 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).
  4. inline-left header routing — fast-follow #3 when the first portfolio site measures it.