Skip to content

Session handover — 2026-09-03

Continues 2026-09-02 pt4.

This was the day the plan changed. The owner looked at the corpus side by side — live site beside our rebuild, 38 pairs — and said none of them are shippable. The machine had said 15. That single act voids the calibration Slice 6 was waiting six sessions for, and it redirects the work: not "tune the score", but fix what is visibly wrong in every rebuild, then deploy behind noindex and let an agent loop close the rest against a score. The second half of the day started on the fixes: two of the five cheap defect classes are done and proved; three are untouched.

Where to look

known-issues — read these five in this order, they are one argument:

  • "Deploy-noindex + agent-driven fix loop — this REORDERS the critical path" — the owner's direction and what it changes.
  • "Do we need our own setup/deploy and our own scoring UI?" — mostly no; review.html already exists and now shows live beside ours.
  • "THE CALIBRATION IS VOID — the owner labelled 0/38 shippable, and the machine said 15" — the composite is ranking something, but not shippability.
  • "DEFECT-CLASS INVENTORY — what is actually wrong with the rebuilds" — twelve classes from reading 12 pairs closely, ranked by how often they appear. Now carries a status block: classes 1 (footer stub) and 8 (paragraphs shattered) are FIXED with measurements; classes 2, 3, 5 are labelled untested hypothesis with a reopen trigger. This is the work queue for the next session.
  • "EXPERIMENT — first agent-loop pass on criticalSectionDropped" — the veto that was holding 33 sites was largely a false positive.

Also today, on mobile: the "Mobile is UNMEASURED" entry gained three follow-ups — there is no phone-width test by construction (everything runs at 1440×900), the garvanbay hero letterbox is reproduced (hero band 390×553, image 390×215, cause not fully found), and scripts/probe-mobile.mjs now measures 10 corpus sites at a real device profile — and corrected two claims made earlier the same day (the "38% crop" figure was invented; measured is 11%).

known-patterns — five new entries. The one to read first is "Globals reach the transformer TRANSLATED, sections reach it RAW": it is why a one-line footer bug diagnosed in May sat unfixed for four months — the footer rendered, as a stub, so every count said it was present. The others: verifying a shared primitive by rendering the old inputs with Astro's scoped hash normalised out; Wix's three paragraph-break conventions and why a sentence splitter destroys all of them; a phone-sized viewport is not a phone; and a tooling trap (doubled backslashes are halved in heredocs) that cost time twice.

What shipped

commit what
dee69c1 "do we need our own deploy + scoring UI?" — mostly no, one already exists
2393e52 deploy-noindex + agent fix loop reorders the critical path
4e1e0b6 experiment: criticalSectionDropped is largely a false positive
38158a0 7429474 8c21be0 mobile: no test by construction; probe added; hero letterbox reproduced
e57a9b8 review.html shows live beside ours (links alone were unusable)
ddcc768 calibration is void — owner 0/38, machine 15
af83fd1 the defect-class inventory, 12 classes from 12 pairs
81707a1 fixes 1 + 8: footer restored (matcher, transformer, schema, primitive, adapter), paragraph structure kept (both splitters + br-aware matchers)

Nothing was deployed today. The fixes are pipeline changes, proved on regenerated seeds and a rendered regression fixture; the live workers (garvanbay, WCP) are unchanged and still noindex.

What proved the two fixes

  • Footer. All 64 corpus seeds regenerated against HEAD's: design credit 0 → 44 sites, socials 0 → 24, footer logo 0 → 13, legal links 0 → 9, badges 0 → 13, columns 105 → 178. Copyright 0/63 is faithful — no corpus home page carries a © line. Only fcr.footer blocks changed. garvanbay's old footer node and the old static-lane props render DOM-identical before and after; the one CSS change is the column count becoming a variable. The CMS builds with all 23 block types renderable.
  • Paragraphs. 1,168 corpus bodies: rendered paragraphs 4,308 → 2,881 and zero bodies changed a character — only where the breaks fall. translate.smoke 48 pass / 5 fail before and after (the 5 are pre-existing). rmla.ie assembled in the static lane renders the CTA body as one paragraph.

The honest parts

  • The calibration Slice 6 waited six sessions for is dead on arrival. Not because the labels never came — because when they came they were 0/38, and a precision cut needs at least one positive. The instrument measures section presence and tone; the owner judges what is inside the section. Nine of twelve defect classes leave the section present.
  • Two of my own claims were corrected within hours, again (yesterday it was also two). The "38% hero crop" was hand-arithmetic from an assumed box; measured, 11%. The mobile probe caught it. The pattern across two days is the same: a number stated before it was measured.
  • A bug the wiki had correctly diagnosed in May was still there. "Footer credit never reaches the seed — credit vs partnerLogos, one-line fix." It was one line, and it was right, and nobody did it because the footer rendered. The fix today was not one line — the schema, primitive and adapter had no fields for any of it — but the diagnosis was.
  • The paragraph fix needed three attempts to be right, and two of the wrong attempts passed: source newlines after <br> read as a double break (split "See how we" off as a heading), and a NUL sentinel the HTML parser silently dropped (produced the old output, no error). The zero-character-change check is what caught both. Keep it.
  • Working tree leftovers not committed, on purpose: calibration/pairs/ (41 JPEGs, an earlier form of the shots/ that review.html now uses — delete or ignore), the peer's apps/cms/seed/wcp-scan.json / apps/cms/sites/wcp-scan.jsonc, infra/, apps/cms/scripts/.tmp/, scripts/.tmp/. calibration/labels.csv had been wiped to its header row by something this session; restored from HEAD.

Next session

  1. Classes 5, 3, 2 in that order — headings, tick lists, hero scrim. Each has a concrete case in the inventory status block and an untested mechanism. Regenerate the 64 seeds and diff against the previous set after each; the scratchpad scripts are gone with the session, but the method is one loop over corpus-crawl/*/ calling seed-from-build.js --out.
  2. Re-read the 12 inventory pairs after the five are done. That is the reopen trigger for every hypothesis, and the only check the owner trusts.
  3. Deploy-noindex loop — the reordered critical path. Blocked on nothing technical now that the score is known to be blind; blocked on deciding what score the agent loop closes against. The inventory's twelve classes are the candidate list.
  4. Mobile hero: cause still not fully found (hero-4.astro image height inside the absolute band). Owner-visible on a phone today.

Decisions for the owner

  • Mobile target — Wix mobile is a separately authored view; do we match it, or a sane responsive default? Every mobile measurement is provisional until this is answered.
  • Cookie/consent and mail system — still open from previous handovers.
  • Which score does the agent loop close against once deploy-noindex is live. The composite is void for shippability; the defect inventory is a checklist, not a score.