Skip to content

Session handover — 2026-09-02

A single question — is the emdash save race still real? — answered by measurement, and then acted on: it is fixed in 0.35.0, so apps/cms was upgraded and waterfordcountypainters deployed on it. One deploy in this session broke live WCP and was rolled back; the cause was ours, not emdash's, and the guard that prevents a repeat shipped with the upgrade.

Where to look

  • ADR-0013 — new section "Decision-4 blocker CLEARED". The self-service editability promise this ADR rests on is no longer at risk; the before/after measurement table lives there, along with why the obvious changelog line (#2457) is not the fix.
  • known-issues — three changes:
  • "Operator editability" under Header / nav menu is closed (was the standing upstream blocker since 2026-07-08).
  • new "emdash 0.35.0 rollout" under the CMS fleet section — the mixed-version fleet, the per-site one-way door (a 0.35.0 worker migrates its D1 050 → 070 on first request and a worker rollback does not undo it), the anchor commands, and the two 0.34.0 behaviour changes not yet exercised.
  • a dated correction on the baked-seed identity entry: "WCP's admin now runs under its own name" is false — it still says garvanbay, because the name is a stored D1 settings row, not the baked seed.
  • known-patterns — the "Saved ✓ that never persists" entry is resolved with the version-pair measurement and a durable lesson about reading the PR, not the changelog line; plus two new entries (a gitignored file as a load-bearing build input, and Windows MAX_PATH breaking miniflare's D1); plus a correction to the stale dev-bypass URL.

What shipped

  • Commit 2c6b7d8 (branch emdash-0.35.0-upgrade) — emdash + @emdash-cms/cloudflare 0.28.1 → 0.35.0, lockfile regenerated, and a build-only PUBLIC_MEDIA_BASE assertion in apps/cms/astro.config.mjs, in the same place and for the same reason as the baked-seed guard. Proven both directions: refuses with .dev.vars moved aside, passes against the real file.
  • WCP deployed on 0.35.0 — worker bb306aae. Render matches the pre-upgrade capture exactly (20 imgs / 16 r2: refs / 12 sections / 0 placeholders); D1 at 070 with content intact (25 pages / 1 global); admin loads behind Access; one PUT per save, edit persists.
  • Recovery anchors for WCP, all still valid: builds/waterfordcountypainters.ie/d1-pre-035-export.sql, Time Travel bookmark 00000143-00000000-000050d9-ad2028862ecca8af9edd4e4c097f2152, rollback version 1a9d6a45.

The honest parts

  • The first deploy broke the live site and had to be rolled back. It took WCP from 20 images to 2. The cause was not 0.35.0: the build was made in a git worktree, which does not carry the gitignored .dev.vars, so Astro inlined PUBLIC_MEDIA_BASE as undefined and every r2: ref died. The hasMedia block guard then hid the loss entirely — 18 images gone with no loud-fail placeholder. Worse, the identical symptom had been diagnosed locally earlier in the same session and written off as "a worktree artifact, not a regression"; the build then shipped that exact cause. The assertion in 2c6b7d8 exists so this cannot recur.
  • The rollback was executed by Cathal, not by the session — the harness blocked the rollback command mid-incident. Worth knowing that recovery may need a human hand on the keyboard.
  • The fleet is now mixed: WCP on 0.35.0, everything else on 0.28.1 (i.e. still carrying the save race). That is a deliberate, staged position, not an oversight.
  • emdash-0.35.0-upgrade is not merged. Until it is, master says 0.28.1 while WCP serves 0.35.0 — a rebuild from master would silently downgrade it. Merging is the first item below.
  • The scorecard was not re-run against the upgraded WCP. Render-neutrality was established by a direct pre/post capture diff of the deployed homepage, which is a narrower claim than a scorecard pass.
  • Nothing here touches the Slice-6 critical path. The corpus gate is still waiting on human labels.

Next

  1. Merge emdash-0.35.0-upgrade into master (or decide not to and roll WCP back) — the drift is the one actively dangerous item.
  2. Cathal's labels — unchanged as the sole remaining Slice-6 blocker: open calibration/review.html, label the 15 SHIP candidates, save calibration/labels.csv, then fit-calibration → review → promote only if fitted:true and precision holds.
  3. Before upgrading any further site, take its D1 export + Time Travel bookmark + rollback version id. garvanbay has none and is the other scorecard reference.
  4. Fix WCP's admin branding (D1 settings row, surgical — never a reseed).
  5. Optional: re-run the scorecard on the upgraded WCP to convert "render-neutral by capture diff" into a scored result.