Session handover — 2026-09-04¶
Continues 2026-09-03.
The three remaining "cheap" defect classes from the inventory — 5 headings, 3 tick lists, 2 hero scrim — are fixed in the pipeline and proved on all 64 corpus seeds. Each was measured before it was touched, with a purpose-built instrument that walks every crawled page and attributes the defect to the matcher that produced it, and each fix was proved by regenerating all 64 seeds and diffing the text of every page against the previous output. The wiki's untested hypotheses for classes 5 and 2 were both wrong about the mechanism — right about the observation, as usual — which is why the measuring came first.
Where to look¶
known-issues — the "DEFECT-CLASS INVENTORY" entry now carries a status bullet per class. Read the three new ones; each states the measured population, the mechanisms, what shipped, the proof, and what is not fixed by name:
- Class 5 — 38% of 2,760 visible headings never arrived as a block heading, on 54 sites.
Five mechanisms, one shared rule (
pickHeading). 1,038 → 855. - Class 3 — tick lists are a repeated vector icon beside short lines, not
<ul>s or "✔" characters; 153 sections on 28 sites, invisible to every matcher. 0 → 102 land in a list-capable render; a list beside prose is now two blocks. - Class 2 — the pipeline already had measured scrim and text-colour dims; the live capture measures both wrongly on exactly the flagged heroes (reads the h-tag, not the authored span; misses Wix's declared overlay). 25 white headings were stamped dark. 410/410 pages text-identical after the fix; only hero fields change.
known-patterns — six new entries, all under Components / pipeline and Sections / matchers. The two to read first: "A hero dimension can be MEASURED and still wrong" (a shared probe error the S axis cannot see, and the precedence now written down for three sources of one dimension) and "A matcher-output change can RESURRECT duplicate blocks through dedupe's heading-equality coincidence" plus its addendum "Matched is not carried — the second time" (two dedupe relaxations tried today, both lost text, both reverted). The others: the largest-heading rule; icon lists and the About + checklist continuation; and the payload-promotion pitfall a Codex review caught before it shipped.
ADR-0009 — a dated followup records the bounded exception to §4's capture authority for the hero dims.
scripts/ — four instruments promoted from the scratchpad so the method survives the
session: measure-headings.cjs, measure-lists.cjs, measure-heroes.cjs, and
diff-seeds.cjs (per-page bag-of-words: text may move between fields, never vanish). The
regen loop is one line over corpus-crawl/*/ calling seed-from-build.js --out.
What shipped¶
| commit | what |
|---|---|
067ab64 |
fixes 5 + 3 + 2: heading pick, icon-list checklists with columns, hero scrim/text colour from the site's own CSS; four instruments; wiki |
Nothing was deployed. The live workers (garvanbay, WCP) are unchanged and still noindex;
the fixes are seed-pipeline changes. The CMS build passes with the new fcr.checklist.columns
field and the lever audit measures it alive (4/4 values distinct, all 30 levers pass).
What proved the three fixes¶
- Class 5. Side-labels 4→0, watermark glyphs 4→0, card-title-as-heading 25→0, heading tags
the matcher never read 184→0. 312 of 410 pages byte-identical; every one of the 37 that lost
a word is a fabricated
Contactdefault replaced, a duplicated card title dropped, a swap inside a multi-heading section, or a duplicate block removed. garvanbay 11/11 identical. - Class 3. Multi-column lists rendering single-column in About 87→0; items kept 74→82%.
356/410 identical; all 19 "losses" are WCP items that appeared twice (About body + nested
usp-bar) now appearing once. Static lane emits
content-1+checklistwithcolumns: 3. - Class 2. 410/410 identical; 78 hero field changes and nothing else.
translate.smoke48/5 unchanged throughout the day.
The honest parts¶
- Two dedupe relaxations were tried and both lost text. A matcher-independent "pure wrapper
holding two matched bands" drop rule lost words on 18 pages; a "same heading, any matcher"
relaxation for pure wrappers lost words on 8. Same lesson both times: a nested section being
matched does not mean its block carries every word. Both reverted; the safe fix keeps the
old coincidence intact (a pure wrapper takes the heading its first h1/h2-bearing band picks).
Because of this, a pure
<ul>section stays About-with-bullets rather than a Checklist. - The class-5 metric's "dedupe loser" row grew 127→300 during class 3 — the dropped nested column duplicates' 20-23px items count as heading candidates. Accounting, not regression: every other row is equal or better. Read that instrument with the row excluded.
- Codex caught a real bug the diff could never see: four matchers could promote their payload paragraph (a quote, an address) to the heading — the words move fields, none vanish. Fixed before it shipped; recorded as a pattern.
- garvanbay's hero scrims change on purpose (home
strong→light, six subpagesstrong→medium): the measured tiers replace a guess that painted every hero ~70% dark. Live garvanbay's home hero is the image at 76% over black. Eyeball on the next deploy. - Captures were not re-run. The corrected text-colour probe in
capture-section-backgrounds.jsis inert until everysection-backgrounds.jsonis regenerated; the seed-time read from the crawled HTML is what carries the corpus today. - Working tree leftovers, deliberately not committed:
.claude/settings.local.json(tracked, modified before this session, and — Codex's point — grants broadgit push/rm -rf/npm runallowances plus machine paths; decide whether it should be gitignored),AGENTS.md(appeared untracked mid-session; not this session's), and the same scratch directories as yesterday.corpus-crawl/*/seed.jsonare stale (2026-09-03 16:57); today's regenerations were written to the scratchpad and are gone with it.
Next session¶
- Re-read the 12 inventory pairs side by side. That is the reopen trigger for classes 1, 8, 5, 3 and 2 together — one pass covers all five. If a class is still visible on more than a third of them, the fix was wrong. The class-3 and class-2 fixes change how WCP and garvanbay render, so those two are the first to look at.
- Classes 4, 6, 7, 9 — matcher and asset work. Today produced measured leads, not
hypotheses: southsidemovers' flat-band hero is a 31px title against Hero's 32px proxy plus
CTAStrip outscoring Hero 0.6 to 0.55; FAQ's
h3 ≥ 3rule eats sections that are h3-titled lists (bestcover keeps 23% of a 22-item list); Gallery and TeamGrid take icon lists with identical decorative icons (23 sections). Measure withmeasure-lists.cjs/measure-heroes.cjsbefore scoping. - Deploy-noindex loop — unchanged from yesterday; still blocked on which score it closes against. The three instruments are candidates for the defect checklist it needs.
- Re-capture the 64 sites so the probe fix lands and the capture stops contradicting the sites' own CSS; then measure whether the seed-time override is still needed.
- Mobile hero letterbox — untouched today.
Decisions for the owner¶
- Mobile target, cookie/consent + mail, which score the agent loop closes against — all still open from previous handovers.
- garvanbay hero scrims — lighter now, by measurement. Confirm on a deploy or say to keep the darker guess.
.claude/settings.local.json— tracked and permissive; gitignore it or narrow it.