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)¶
- Floating CTA/social → CMS globals —
lib/cms/transformer.js(registerfromFloatingCTA/fromFloatingSocialinGLOBAL_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 buildexit 0, check-renderers pass, render-probe confirmed both blocks); not deployed. - Detector 1 — variant-mismatch (reporting) —
lib/structural-diff.jsvariantMismatchbucket (decisive-dim disagrees on critical-role sections; scope{tone, imageSide}— the scoredDIMS), surfaced vialib/scorecard.js;scorecard-gate.jscomment-stub only;calibration.jsonuntouched. Additive: S byte-identical,structural-diff.validate.mjs96/96. Flags WCP commercial-painting hero (tone default→dark) + FAQ-on-navy. - Detector 2 — asset-manifest (reporting) — NEW
lib/cms/asset-manifest.js(pure) lib/capture-section-backgrounds.jsassets:{videos,slides}(schemaVersion 2→3)lib/cms/seed-from-build.jsasset-manifest.jsonsidecar +transform-seed-images.mjsgap-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 frombody.htmlcloses 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)¶
- 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.
- ~~Deferred wiki touch-ups~~ — DONE at this /session-end (commit follows
6bc7a95): the "CMS lane silently drops FloatingCTA/FloatingSocial" entry inknown-issues.mdmarked resolved-in-build/deploy-pending; the two detectors +capability-backlog.mdnoted in ADR-0009 + a new known-patterns entry; nav updated; published site rebuilt + deployed. Delete the known-issue entry once WCP is redeployed. - 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.
- 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.