Skip to content

Session handover — 2026-07-12

Shipped the build half of capability-backlog #2 — the header/logo layout — as a bounded, measured, portfolio-wide capability and deployed it live to WCP. This was the priority #1 from session-2026-07-11-pt2-handover.md. Went build-first (user call): the identify half (globals into the scorecard) stays deferred, so the header was verified by rendered artifact, not a scorecard number.

What shipped (deployed live this session)

WCP's header now renders split-center on wcp.dcathal.org — nav items flank the centered logo on one row (HOME FARMING COMMERCIAL | logo | RESIDENTIAL GALLERY CONTACT US) with a SERVICE AREAS CTA pill, matching live. garvanbay stays stacked-center, byte-identical.

The capability (ADR-0009 Slice 3, header dimension):

  • A bounded layout enum on the shared header-wcp block — stacked-center (default = garvanbay/FCR-typical) · split-center (WCP) — a variant prop on the one block, not header-wcp-vs-header-1 block-switching.
  • Measured on the design plane, not the matcher (the matcher is geometry-blind in the seed path): in-page chrome.headerRaw (logo bbox, nav-item centroids, navTop) → pure lib/section-style.js#classifyHeaderLayout → the enum. Proven on the live 1440px geometry of both sites (WCP→split, garvanbay→stacked); 9 new validate cases anchored on those measurements.
  • Threaded end-to-end: seed-from-build stamps fcr.header.layout + CTA from the homepage chrome; transformer fromHeader, fcr.header schema (layout select + ctaText/ctaHref), the Header.astro adapter, and the header-wcp render.
  • inline-left (fulldev header-1) is recognised by the classifier, routing deferred.

Rationale + the reusable lessons: new known-patterns entry "The capture plane is the authority for header layout too" (the geometry-blind-seed-path trap generalised to the header; a Wix header CTA pinned outside <header>; keeping a shared block's default branch verbatim so the other consumer is byte-identical).

Wiki changes

  • ADR-0009 — Slice 3 tracker appended (header layout landing; append-mostly).
  • known-patterns.md — one new entry (capture-plane authority for header layout).
  • known-issues.md — new "Header dimension — three fast-follows" entry (topbar field extraction · header-CTA auto-detection · inline-left routing) + the deferred identify half (globals into the scorecard), each with a reopen trigger.
  • capability-backlog.md — #2 marked layout half deployed.
  • section-style-contract.md — header/topbar row reconciled to what shipped (stacked-center/split-center, header-wcp layout prop) + status.
  • apps/cms/seed/waterfordcountypainters.json — header reconciled (layout:split-center
  • CTA) so seed ↔ live D1 match.

State

Committed to master this session-end: the capability code + the five wiki files + the WCP seed reconciliation + this handover. Live WCP written: worker redeployed (version b4e7a6a4-8d7a-43a2-8d37-783a3e29a260, carries the new header-wcp) + a surgical ec_globals site-row patch (header layout + CTA; all 6 globals blocks preserved, no pages touched). Recovery anchor: D1 Time Travel bookmark 00000077-00000000-000050a6-25af9b7f80559ca2fcefe2707d703927 (pre-write); pre-write globals snapshot in the session scratchpad. garvanbay worker/D1 untouched (still runs pre-slice header code; stacked render unaffected). Left alone (untracked/unrelated): infra/ (undecided ownership — known-issues), .claude/settings.local.json, scripts/.tmp/, apps/cms/scripts/.tmp/.

Next session (priority order)

  1. Capability #2 fast-follows (known-issues "Header dimension — three fast-follows"). Highest-leverage: TopBar field extraction (WCP's live email/location/ social-hrefs the seed dropped — likely a capture-plane miss, same class as the header layout) closes the visible "phone-only topbar" gap. Then header-CTA auto-detection (pinned outside <header>).
  2. Capability #2 identify half — globals into the scorecard. The chrome.headerRaw geometry this slice added is the raw material; fold in as an additive reporting projection (like variant-mismatch/asset-manifest), vetoes/thresholds → Slice 6.
  3. Capability backlog #1/#4/#6 — hero carousel+video variant (asset half → Slice 5), video gallery, matcher precision.
  4. Slice 6 calibration — fit lib/calibration.json on the 30–50-site batch; promote hero-variant/scrim/textTone (and the two reporting detectors' vetoes) to scored then.