Session handover — 2026-07-07 pt2¶
Continues from session-2026-07-07-handover.md (ADR-0009 Slice 3 — imageSide).
This session: drove the second section-style dimension — alignment — end-to-end
on the CMS lane and deployed it to the garvanbay demo. One code commit
(b00c482) + this wiki commit.
What changed — where to look¶
- ADR-0009 alignment (
b00c482) — second dimension shipped, same rail as imageSide, CMS lane: lib/section-style.js+.validate.mjs— pureclassifyAlign(headingtext-align, paragraph-majority fallback;right/justify/ambiguous → omit), 25/25 locked.lib/capture-section-backgrounds.js— in-page_styleRaw.align(computedtext-alignof prominent heading + paragraph majority); stillschemaVersion: 2.- New universal render sink —
Sectionprimitive gainsalign→data-align- 6 unlayered global CSS rules that override each block's hard-coded alignment by attribute-specificity (0,3,0 > 0,1,0), absent attr = block default.
-
makeStyleLookup/transformer.js/apply-section-tones.jsstampalignonfcr.{about,cta-strip,service-grid,faq}(ALIGN_ELIGIBLE), identity-known only. Threaded through content-1/2, cta-wcp, services-1, faqs-1 + their 4 adapters. NewALIGN_FIELD(Auto/Left/Centre) select. -
Full contract + specifics in
docs/pipeline/section-style-contract.md(alignment row now Shipped, new "alignment — specifics" section;columnsis next).
Verified¶
- Classifier orientation confirmed against the live DOM — garvanbay home service
teasers measure
text-align: centerin a ~32%-wide side text column (content-2's exact shape), soalign=centerthere is a faithful correction, not a regression. - Zero-regression: re-capture → 0 tone / 0 imageSide diffs across 94 sections;
garvanbay seed stamp is align-additive only (0 tone/imagePosition churn); WCP
untouched. Build ships all 6
data-alignrules;astro check0 new errors. - Deployed + screenshot-verified — worker redeployed (version
e797c676) + surgical 7-row D1 patch; deployed demo renders content-2 teasers centred to match live, faqs left, hero/CTA unchanged; home's native 10th block preserved.
Two new known-patterns (see known-patterns.md)¶
- A measured section-style prop overrides a block's hard-coded alignment via attribute-specificity — not by editing each block.
- A style dimension that adds NEW render code needs a worker redeploy + a surgical
multi-row D1 patch — imageSide's D1-only UPDATE doesn't generalize (match by
_type+heading, not_key; preserve native blocks).
Next priority¶
ADR-0009 fan-out continues — columns is next (docs/pipeline/section-style-contract.md
order: imageSide → alignment → columns → density → header/topbar). columns needs a
new SectionGrid data-columns render surface and the team-grid/checklist
<Section> migration (they're raw <section>, so tone/density/columns/align are all
unsupported on them until migrated — the shared prerequisite). Or bring captured styling
to the per-site static lane when the first static launch is scoped.
Carried/open (see known-issues): surgical "sync-style-to-D1" should graduate from the
scratchpad to a committed fleet tool (new entry — reopen at the next dimension deploy or
ADR-0008 Slice 3); per-site static lane capture-consumption deferred (Option A, now covers
alignment too); garvanbay D1 diverges from seed (native block); section-band selection
deferred (2b-band); brand-detection nondeterminism; $card-sample reliability;
cross-account sharding unproven; per-site static @source + noindex blockers.