Skip to content

Session handover — 2026-07-11

Single-thread session: reframed the WCP work from per-site polish to a capability process, ran the first capability-gap audit, and shipped 3 capabilities (all committed, none deployed). The wiki was fully updated at /session-end (known-issues, ADR-0009, known-patterns, nav) and the published site rebuilt + deployed; the substance is captured in capability-backlog.md.

The reframe

The goal is not to hand-tune a reference site's scorecard number (per-site polish teaches the pipeline nothing). It is a process that identifies missing capabilities and makes them available portfolio-wide. Reference sites (garvanbay/WCP/trimtech) are forcing functions, not polish jobs. The Wix API-for-assets step stays after the 3 sites, before 50+, scoped by the asset manifest the audit produces. Full rationale + the living backlog: capability-backlog.md.

Audit finding (CONFIRMED in code)

The identify machinery catches absence (drops → criticalSectionDropped; unmatched → genericFallbackCritical; missing images → loud-fail) but is blind by construction to two modes — mis-render (matched, wrong variant) and asset-drop (non-image asset never captured/migrated). Two detectors close them.

What shipped (committed this session; NOT deployed)

  1. Floating CTA/social → CMS globalslib/cms/transformer.js (register fromFloatingCTA/fromFloatingSocial in GLOBAL_TRANSLATORS + drop-guards mirroring the static lane). Everything downstream already existed. Closes the CMS-lane silent-drop (~48 warns/run → 0). Build-verified (npm run build exit 0, check-renderers pass, render-probe confirmed both blocks); not deployed.
  2. Detector 1 — variant-mismatch (reporting)lib/structural-diff.js variantMismatch bucket (decisive-dim disagrees on critical-role sections; scope {tone, imageSide} — the scored DIMS), surfaced via lib/scorecard.js; scorecard-gate.js comment-stub only; calibration.json untouched. Additive: S byte-identical, structural-diff.validate.mjs 96/96. Flags WCP commercial-painting hero (tone default→dark) + FAQ-on-navy.
  3. Detector 2 — asset-manifest (reporting) — NEW lib/cms/asset-manifest.js (pure)
  4. lib/capture-section-backgrounds.js assets:{videos,slides} (schemaVersion 2→3)
  5. lib/cms/seed-from-build.js asset-manifest.json sidecar + transform-seed-images.mjs gap-enumeration (asset-migration-gaps.json). Verified with a live v3 re-capture. Flags WCP home hero video (raw, unmigrated) + collapsed 8-slide hero carousel. Limitation: gallery-video drops aren't caught by the live <video> count (Wix renders posters) — authoritative signal is supplied-ref status + the migration-gap enumeration; sourcing expected-videos from body.html closes it (deferred).

Both detectors are reporting-only; gate vetoes (criticalVariantMismatch, assetDropCritical) + thresholds + promoting hero-variant/scrim/textTone to scored DIMS are deferred to Slice 6 calibration (calibration.json still fitted:false).

Next session (priority order)

  1. Deploy the 3 shipped pieces — the FloatingCTA globals only appear on the WCP worker after a rebuild + D1 reseed (run the graft-divergence check first per known-patterns; WCP is clean/never-edited). Detectors are reporting-only → no deploy.
  2. ~~Deferred wiki touch-ups~~ — DONE at this /session-end (commit follows 6bc7a95): the "CMS lane silently drops FloatingCTA/FloatingSocial" entry in known-issues.md marked resolved-in-build/deploy-pending; the two detectors + capability-backlog.md noted in ADR-0009 + a new known-patterns entry; nav updated; published site rebuilt + deployed. Delete the known-issue entry once WCP is redeployed.
  3. Slice 6 calibration — wire both detector vetoes into the gate + fit thresholds on the 30–50-site batch; promote hero-variant/scrim to scored DIMS then.
  4. WCP backlog #1/#2/#4/#6 (capability-backlog.md) — hero carousel+video variant, header/logo placement + globals-in-scorecard, video gallery, matcher mis-classification.

State

Committed to master this session: transformer.js, structural-diff.js, scorecard.js, scorecard-gate.js, structural-diff.validate.mjs, capture-section-backgrounds.js, seed-from-build.js, transform-seed-images.mjs, NEW asset-manifest.js, NEW capability-backlog.md, this handover. Nothing deployed; no D1 touched; committed WCP seed pristine. Left alone (untracked/unrelated): infra/ (undecided ownership — known-issues), .claude/settings.local.json, scripts/.tmp/, apps/cms/scripts/.tmp/. Verification was performed by each implementing agent (build / validate / live re-capture) — not independently re-run this session due to budget.