Skip to content

Session handover — 2026-07-04

Pointer note. Today turned the CMS from a single-page render demo into a write-path-proven, operator-usable one-site deployment: a non-developer can log in, edit, publish, and manage/place images on the live site. All work is on branch spike-0-one-site-operational (not yet merged to master).

Branch / publish note

Everything below — code and wiki updates — is committed on spike-0-one-site-operational. The published wiki (replatform-docs.pages.dev) builds from origin/master, so these ADR / known-patterns / known-issues edits won't appear on the published wiki until the branch merges to master. Read the source files on the branch until then.

What changed — where to look

New planning artifacts (not ADRs): - scope-2026-07-04-one-site-operational.md — the "one site materially operational" scope (v2, pressure-tested by deep-reasoner + Codex). Records Gate 1/2 passed, the SEV-1 blockers, remaining workstreams. - spike-0-auth-cloudflare-access.md — Cloudflare Access click-through runbook + the passing config.

Decisions: - ADR-0006 (new) — CMS admin auth = Cloudflare Access. First-login = Admin (no provisioning script); Access scoped to /_emdash; public site ungated; account-move is a config swap. - ADR-0005 followup "Option A" — operator-editable image fields use emdash media_picker + scalar URL string (not the {src, originalName} object, which showed blank in the editor). Migration migrate-about-imageurl-to-string.mjs; provenance moves to R2 metadata. Scoped to fcr.about. - ADR-0004 "Editor-surface followups" — native PT renderers (Prose/Code/Image), About→content-2 side-by-side routing honoring imagePosition, and the @container requirement in Base.astro.

known-patterns.md — 6 new entries: emdash-is-headless; media_picker stores a URL string (image fields must be scalar); SectionSplit needs a container-query context; native PT types need FcrBlocks renderers; Access roleMapping:{} crashes OTP logins; subagent .output is 0 bytes until complete.

known-issues.md — new "CMS one-site milestone — open workstreams": slug routing (~8 pages 404), image-field migration only covers fcr.about, two-image-models reconciliation, contact form (in-scope, unbuilt), Access policy breadth, reseed-vs-admin source-of-truth.

Deployed state

  • Worker replatform-emdash-demo on the personal 1ceb… account (Cathaldempsey@gmail.com), served at emdash.dcathal.org (custom domain, Access-gated on /_emdash). Latest version 2cea2052.
  • D1 replatform-emdash-demo reseeded from migrated seed.json (fcr.about images now scalar URL strings). Reseed needs a D1-scoped token (CF_API_TOKEN_REPLATFORM in fcr-dashboard/.env.local); the CF_API_TOKEN_CD token deploys but lacks D1 (7403).
  • R2 replatform-emdash-media unchanged.

Commits (branch spike-0-one-site-operational)

  • 4886cfc scope v2 + WS-0 Access wiring · 7ea21b5 WS-0 Gate 1 passed
  • 25112bc generic block renderer · 5394c81 native code+image renderers
  • a41544c Access role sync (→ narrowed by dde9cf2 security fix)
  • 8ffcf5f Option A image field code + migration
  • ffdf270 About→content-2 routing · 63beb5f Base @container
  • (this session-end doc commit)

Next priorities

  1. Slug routing ([slug].astro) — unblock the ~8 pages that 404. Small; completes "view every page".
  2. Extend Option A to Hero / CTA-strip / Header image fields (mechanical repeat of the fcr.about fix).
  3. Contact form real submission + move /contact onto FcrBlocks.
  4. Decide branch → master merge (and whether the spike branch is the working line going forward).

Milestone framing and the full gate list live in scope-2026-07-04-one-site-operational.md.