# Session 0047.0 — Transcript > Date: 2026-05-30 > Start: 2026-05-30T11-02 (PST implied) > Status: **PLACEHOLDER — claimed at session start; finalized at session end.** > > This file reserves session ID 0047. The driver replaces this body > with the full transcript before publishing, and renames the file to > its final SESSION-0047.0-TRANSCRIPT-2026-05-30T11-02--.md form. --- ## Launch prompt ``` OHM driver session. Read ~/git/ohm-infra/SESSION-PROTOCOL.md and ~/projects/wiggleverse/ohm-rfc/ROADMAP.md (Phase F / Track Δ, #37–#42) first. Claim your session id via claim-session-id.sh --start . Session 0046 recorded the operator's Track-Δ design decisions into the docs (engineering handbook §10 + ohm-rfc ROADMAP). Nothing was built — all of Track Δ is GATED ON flotilla v1. The decided shape: - Two-tier testing (handbook §10.3 / ROADMAP #38, #40): env-agnostic suite (one BASE_URL + mail-sink API URL). Tier 1 = local Docker per-PR (no VM); Tier 2 = PPE as the deploy gate. The #40 N−1/N compat gate runs first in Tier-1 Docker, PPE as prod-like confirmation. - #37 PPE = COMPLETELY SEPARATE infra (handbook §10.1 / ROADMAP #37): own GCP micro instance + separate gcloud stack (own project/config) + own Gitea at ppe.git.wiggleverse.org colocated on the PPE VM. NOT colocated on prod; only flotilla's code-deploy gesture crosses over. Auth in tests = OTC (OAuth caveat resolved, #5 shipped). - #38 Tier-1 Gitea = stub for the fast inner loop, real Gitea for the gate (Tier 2 uses PPE's own Gitea). Scaffold OPEN at rfc-app PR #4 (branch session-0046/e2e-tier1-scaffold, e2e/ dir, NOT a release). - #42 auto-rollback = always-on VM-side watcher (systemd daemon, DB-free rollback only; bounded carve-out from flotilla laptop-only). - Open follow-on (not decided): self-host PROD Gitea on the prod VM too. CONFIRM flotilla v1 timing with the operator before standing up ANYTHING on a VM (PPE micro instance, the PPE/prod Gitea, DNS). Work that does NOT need the VM and can proceed now: flesh out rfc-app PR #4 toward a passing Tier-1 suite (Dockerfiles + the (B) gitea stub + the (A) gitea bootstrap + real selectors) — that's #38. Heads-up: 0046 hit a wedged Gitea merge-queue (persistent 405); harness Bash/Read corruption; verify git state against committed blobs; --max-time on every curl; check git branch -r --contains before assuming PR merge path. ```