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-demoon the personal1ceb…account (Cathaldempsey@gmail.com), served atemdash.dcathal.org(custom domain, Access-gated on/_emdash). Latest version2cea2052. - D1
replatform-emdash-demoreseeded from migratedseed.json(fcr.about images now scalar URL strings). Reseed needs a D1-scoped token (CF_API_TOKEN_REPLATFORMinfcr-dashboard/.env.local); theCF_API_TOKEN_CDtoken deploys but lacks D1 (7403). - R2
replatform-emdash-mediaunchanged.
Commits (branch spike-0-one-site-operational)¶
4886cfcscope v2 + WS-0 Access wiring ·7ea21b5WS-0 Gate 1 passed25112bcgenericblockrenderer ·5394c81native code+image renderersa41544cAccess role sync (→ narrowed bydde9cf2security fix)8ffcf5fOption A image field code + migrationffdf270About→content-2 routing ·63beb5fBase@container- (this session-end doc commit)
Next priorities¶
- Slug routing (
[slug].astro) — unblock the ~8 pages that 404. Small; completes "view every page". - Extend Option A to Hero / CTA-strip / Header image fields (mechanical repeat of the fcr.about fix).
- Contact form real submission + move
/contactonto FcrBlocks. - 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.