diff --git a/0055/SESSION-0055.0-TRANSCRIPT-2026-06-01T03-00--2026-06-01T03-35.md b/0055/SESSION-0055.0-TRANSCRIPT-2026-06-01T03-00--2026-06-01T03-35.md new file mode 100644 index 0000000..523c5ba --- /dev/null +++ b/0055/SESSION-0055.0-TRANSCRIPT-2026-06-01T03-00--2026-06-01T03-35.md @@ -0,0 +1,127 @@ +# Session 0055.0 — Transcript + +> Date: 2026-06-01 +> Start: 2026-06-01T03-00 (PST implied) +> Goal (as it emerged): not launched as an OHM driver session — opened as a +> conceptual Q&A comparing the OHM/flotilla self-hosted stack against a PaaS +> like Vercel. It became a **flotilla SPEC design session**: the "which Vercel +> wins could we adopt?" thread converged on per-PR preview environments, and +> the operator asked for that to be specified. +> +> Outcome: **Added a fully-fleshed §19.2 candidate — "Per-PR preview +> environments" — to `ohm-rfc-app-flotilla/SPEC.md`, committed on a branch, +> merged `--no-ff` to `main`, and pushed to `origin`.** Two design decisions +> were settled into the entry by the operator: (1) the §10 deploy audit trail +> is **production-only** — neither per-PR previews nor PPE write to it; and (2) +> previews use **SQLite only**, the same engine as production, which is exactly +> what makes them cheap — no dual-engine/Postgres path. Along the way we +> assessed (and rejected, for now) the idea of dual SQLite+Postgres support in +> rfc-app. +> +> **Scope note (transcript-honest):** this is **pure-flotilla doc work with no +> OHM actuation** — no deploy, no §13 record edit, no `ohm-rfc` operation. Per +> SESSION-PROTOCOL the transcript expectation *softens* for exactly this case; +> this transcript exists because the operator asked for one at session end. The +> ID was therefore claimed at publish time (the protocol's late-claim path), +> not at true session start. +> +> **Timestamp caveat:** the `03-00` start is anchored to the first commit of +> the session (`912e828` at 03:03) and the preceding Q&A; the work actually +> opened a few minutes earlier. A concurrent session published `0054` +> (03-24/03-25) while this one was already in flight — expected under advisory +> numbering; the `claim-session-id.sh` push allocated `0055` race-free. + +--- + +## Pre-session state + +- `ohm-rfc-app-flotilla` at `main` = `70ba3b0` (flotilla v1.6.0 merged), clean + tree. SPEC.md at 1875 lines; §19.2 held the post-v1 candidate queue. +- rfc-app checkout present at `~/projects/wiggleverse/rfc-app` + (HEAD `a3f48ba`), used read-only this session to assess the DB layer. +- No preview-environment concept anywhere in flotilla; v1 has two long-lived + environments only (production VM + PPE, a single serialized lane). + +## Arc + +### Arc 1 — Q&A: the OHM/flotilla stack vs. Vercel +Walked the advantages (ownership/no-lock-in, real persistent backend, flat +predictable cost, secret discipline under operator control, mission-fit +sovereignty, arbitrary architecture) against where Vercel wins (zero ops, +push-deploy + preview envs + instant rollback, edge CDN, autoscaling, frontend +DX). Bottom line: the app's *shape* (stateful backend, modest predictable +traffic) is the opposite of Vercel's sweet spot; flagged Cloud Run as the +"Vercel-like ergonomics without leaving the sovereignty model" middle path. + +### Arc 2 — Which Vercel wins to adopt +Ranked the adoptable ones: per-PR previews (highest value), one-command +rollback (flotilla half-has it via pinning), edge CDN via the existing +Cloudflare relationship (cheapest win), atomic/zero-downtime deploys. Operator +zeroed in on **per-PR deployments with synthetic data in a DB** — PPE's single +lane can't do parallel/isolated review. + +### Arc 3 — Draft the spec +Read SPEC §3/§5/§8/§10/§12/§13/§19.2 to match conventions, then added the +**"Per-PR preview environments"** §19.2 candidate (placed after its cousin +"Private-branch deploys"): problem statement, proposed `preview up/down/ +list/show` verb surface, runtime options (Cloud Run recommended over +VM-containers), seeded-DB model, test-secret posture (zero real secret bytes — +*strengthens* §3 invariant 1), the invariant-5 trigger tension, and the +cross-section touchpoints. + +### Arc 4 — Decision: audit trail is production-only +Explained the §10 deploy-history audit trail's purpose (append-only provenance: +who/what/when/which-config for every prod deploy, secret-redacted; combined with +`git log .rfc-app-version` + `gcloud secrets versions list` for full +reconstruction) — and disambiguated it from the unrelated `flotilla audit` +Patchwatch radar (§12.4). Operator decided: **previews and PPE never write the +§10 trail — production only**, so `deploy log` stays high-signal. Recorded as +**settled** in the entry. + +### Arc 5 — Dual SQLite+Postgres? Investigated, rejected for now +Operator asked how hard it'd be to support both engines. Inspected rfc-app's DB +layer: raw stdlib `sqlite3` (no ORM) in `backend/app/db.py` with a module-level +singleton connection; **23 raw `.sql` migrations** (~1,300 lines) and **28 of +43 app modules** issuing raw SQL. Quantified the SQLite-isms at the query sites +(`datetime()`/`strftime` in 21 files, `lastrowid` in 12, `ON CONFLICT` in 8, +`INSERT OR REPLACE/IGNORE` in 3, case-sensitive-`LIKE` hazard in 3), plus the +structural mismatches (strict vs. dynamic typing, placeholder style, the +singleton-conn-vs-pool concurrency model). Conclusion: dual-support is +**medium-high effort + a permanent maintenance tax**, and rfc-app §4.2 already +frames Postgres as a *future one-way migration*, not a dual-support goal. + +### Arc 6 — Decision: stay SQLite; previews are cheap because of it +Operator: remove the Postgres framing entirely. Rewrote the candidate's DB +paragraph — previews bake a seeded `.sqlite` (synthetic data) into the image +and die with the container; prod and previews share **one engine**, which is +precisely what makes per-PR previews cheap. No dual-engine/Postgres path to +build or maintain; Postgres remains a hypothetical future one-way migration, +never a prerequisite for previews. + +### Arc 7 — Ship +Confirmed the entry internally consistent. Committed `912e828` on branch +`spec/preview-environments-candidate`, merged `--no-ff` (`4c6781f`) to `main`, +deleted the branch, pushed `5cf5ecd..4c6781f` to `origin/main`. + +## Artifacts + +- `ohm-rfc-app-flotilla/SPEC.md` §19.2 — new "Per-PR preview environments" + candidate (+85 lines). Merge commit `4c6781f` on `main`, pushed to origin. + +## What this session did NOT do + +- No OHM deploy, no §13 deployment-record edit, no `ohm-rfc` operation, no + rfc-app release. rfc-app was read-only (DB-layer assessment). +- Did not start the preview feature's build — it remains a §19.2 candidate + that "earns its session" when concurrent PR review becomes PPE's bottleneck. +- Did not act on the two open forks (Cloud Run vs VM-container runtime; the + invariant-5 trigger question) — left for the build session by design. + +## Handoff + +The preview-environments candidate is specced and on `main`. When it earns a +build session, the two open decisions are runtime (Cloud Run strongly favored — +also the on-ramp for a broader Cloud Run migration, gated on containerizing +rfc-app) and the invariant-5 trigger (operator-typed `preview up --pr=N` first +cut, deferring auto-on-PR to the hosted-flotilla shift). The DB and +audit-trail questions are already settled (SQLite-only; production-only trail). diff --git a/0055/SESSION-0055.0-TRANSCRIPT-2026-06-01T03-00--INPROGRESS.md b/0055/SESSION-0055.0-TRANSCRIPT-2026-06-01T03-00--INPROGRESS.md deleted file mode 100644 index da34042..0000000 --- a/0055/SESSION-0055.0-TRANSCRIPT-2026-06-01T03-00--INPROGRESS.md +++ /dev/null @@ -1,15 +0,0 @@ -# Session 0055.0 — Transcript - -> Date: 2026-06-01 -> Start: 2026-06-01T03-00 (PST implied) -> Status: **PLACEHOLDER — claimed at session start; finalized at session end.** -> -> This file reserves session ID 0055. The driver replaces this body -> with the full transcript before publishing, and renames the file to -> its final SESSION-0055.0-TRANSCRIPT-2026-06-01T03-00--.md form. - ---- - -## Launch prompt - -_(launch prompt not captured at claim time)_