Skip to content

Session handover — 2026-07-17 pt2

Two things, both closing a loop rather than opening one. A "new Wix CMS API" was evaluated and dropped (it is data collections, not the missing videos, and empty for FCR by construction). Then the corpus-independent half of ADR-0009 Slice 6 shipped — the calibration instrument is built and validated, so fitting is one command the moment a labelled corpus exists. Nothing was fitted; production calibration.json is byte-unchanged at fitted:false.

Where to look

  • ADR-0010 — new fifth amendment + Slice G (DROPPED). The Wix Data ("CMS") API is the structured-data content plane, NOT media/VOD and NOT the media-id join; empty for FCR because the portfolio was built without the code editor. Recorded as a why-not so it isn't re-chased.
  • known-issues — the calibration entry gains a "Slice 6 instrument … done 2026-07-17" paragraph: what shipped, the reopen trigger (unchanged — the labelled corpus), and the finding that both local anchors are veto-held → zero ship labels.
  • ADR-0009 — Slice 6 tracker row moved from Planned to "Instrument done; corpus + labels remain the gate."
  • known-patterns — two new entries at the end of Components/pipeline: "A vendor API is defined by its RESOURCE LIST, not its URL path" and "A calibration instrument is buildable AHEAD of its corpus — but a precision-first ship cut needs ≥1 ship-labelled positive."
  • New code (untracked → committed this session): scripts/batch-scorecard.mjs, lib/calibration-fit.js, scripts/fit-calibration.mjs, lib/calibration-fit.validate.mjs, calibration/{README.md, labels.template.csv, feature-matrix.json}.

What shipped

The Slice 6 calibration instrument (steps 3 + 5 of five; steps 2 + 4 need EC2 + human time and were not startable from a 2-build tree).

  • scripts/batch-scorecard.mjs — aggregates per-site fidelity-scorecard.jsoncalibration/feature-matrix.json, loud-skips any missing/partial-axis scorecard (never a silent partial row). --selftest 11 checks.
  • lib/calibration-fit.js (pure) — logistic P(ship) on {S,T,G_det}; τ_ship at the lowest cut with ship-precision ≥ 0.98 on held-out folds (precision-first: a false ship = brand damage); τ_hold at Youden's J; floors + vetoes fit separately and reported; manual-budget rollup. Every degenerate input (no ship labels, single class, zero-variance axis) degrades loudly to fitted:false + a null cut.
  • scripts/fit-calibration.mjs — CLI; hard-refuses to write lib/calibration.json (exit 2) — promotion is a reviewed step, not a fit side effect.
  • lib/calibration-fit.validate.mjs — synthetic separable → achievable ≥0.98 cut; degenerate no-ship → fitted:false; positive control on the two anchors (read exactly, clear every seed floor, rank high, vetoes surface — the contract §4 sanity anchor). All four suites green; scorecard-gate.validate.mjs still green (regression guard — no shared surface touched, so the Phase-3 check is N/A and declared).

The honest parts

  • A scoped done-criterion shifted for a real reason. The positive control was scoped as "garvanbay ship-band, WCP needs-polish-band." The current artifacts show both anchors veto-held (garvanbay criticalSectionDropped, WCP videoDebt), so I implemented §4's actual claim instead — the metric must rank known-good sites high on the axes (both clear every floor; composites 89.4 / 87.2), with vetoes as the separate gate §4 fits independently. Faithful, arguably more correct than the wording.
  • Why this makes the corpus non-optional. Both anchors veto-held ⇒ zero clean ship labels locally ⇒ a 2-site fit is impossible not for sample size but because the precision-first cut has no ship positive to learn from. The fitter demonstrates this by refusing on the 2-anchor run. This is the standing argument against ever promoting a small-n fit to the gate.

Next

  1. The Slice 6 corpus lane — the whole remaining gate. Pick 30–50 representative sites → batch-build on EC2 (run-fulldev-batch.sh) → batch-scorecard → fill the label CSV (calibration/labels.template.csv) → fit-calibration → review the candidate → only if fitted:true and precision holds, promote to calibration.json and wire scorecard-gate.js to consume pShipCut. Site selection + labels are Cathal's; the build is EC2-bound.
  2. The Wix Video app status (Cathal, still open) — unchanged from 07-17 pt1. Gates ~24 of 27 missing videos + WCP's videoDebt HOLD. Re-run the playback measurement first if it comes back; re-scope videoDebt if it stays dead. Do not relax the veto first.
  3. Still open from earlier: the cta-band segmentation slice needs one more site with an orphaned band (node scripts/measure-two-band-wrappers.js --all on the next crawl); garvanbay /contact hero HOLD; the aligner's role-aware anchoring.