diff --git a/0057/SESSION-0057.0-TRANSCRIPT-2026-06-01T05-40--2026-06-01T06-00.md b/0057/SESSION-0057.0-TRANSCRIPT-2026-06-01T05-40--2026-06-01T06-00.md new file mode 100644 index 0000000..10228b0 --- /dev/null +++ b/0057/SESSION-0057.0-TRANSCRIPT-2026-06-01T05-40--2026-06-01T06-00.md @@ -0,0 +1,252 @@ +# Session 0057.0 — Transcript + +> Date: 2026-06-01 +> Goal: launch-app Slice 1 — extract `flotilla-core` from `ohm-rfc-app-flotilla`, +> de-OHM it, and prove OHM still deploys through it (launch-app SPEC §7). +> +> Outcome: **Slice 1 verified green.** The extraction was already committed when +> this session opened (`flotilla-core` v0.1.0 + `ohm-rfc-app-flotilla` v1.8.0 thin +> shim, roadmap marked DONE, SPEC-feedback note written). This session's +> contribution was **independent end-to-end re-verification against OHM's live +> deployment**, pushing the feature branch to origin (it was local-only), and +> producing the Slice 2 handoff. No code was changed; no transcript-affecting +> secret ever entered the session. +> +> Highlights: +> - flotilla-core 315 tests green; OHM shim 7 tests green. +> - §7.3 regression oracle proven against the **live** OHM VM: live state DB read +> unchanged, live pin `0.31.3` validated against the de-OHM'd `(0,2,3)` floor, 8 +> secret refs resolved (zero bytes), live `/api/health` → HTTP 200 v0.31.3 ok. +> - Branch `slice1-extract-flotilla-core` pushed to origin; PR not yet opened/merged. +> - SPEC feedback (8 items) captured in `launch-app/SLICE-1-SPEC-FEEDBACK.md`; the +> load-bearing one is §5.2 (the engine needs a state store, not just the toml). + +--- + +## Pre-session state + +This session is anchored in `ohm-rfc-app-flotilla`. The launch prompt was the +Slice 1 brief from `launch-app/ROADMAP.md` ("extract flotilla-core, de-OHM, prove +OHM still deploys"). When the session opened, the work was **already committed**: + +| Repo / artifact | State at session open | +| --- | --- | +| `~/projects/wiggleverse/flotilla-core` | `cf22fc8` — flotilla-core **v0.1.0**, package `flotilla_core`, 315 tests, CI under `.gitea/workflows/test.yml`. **No git remote configured.** | +| `ohm-rfc-app-flotilla` branch `slice1-extract-flotilla-core` | `8c03538` — **v1.8.0**, reduced to a 3-file thin shim (`__init__`, `context.py`, `cli.py`) + 7 shim tests; `-9120/+283` vs `main`. 1 ahead / 0 behind `main`. **Local-only (not pushed).** | +| `ohm-rfc-app-flotilla` `main` | still the pre-extraction fat package. | +| `launch-app/ROADMAP.md` | Slice 1 already marked ✅ DONE (2026-06-01). | +| `launch-app/SLICE-1-SPEC-FEEDBACK.md` | already written (8 items). | +| OHM live | deployed v0.31.3, healthy; pin `0.31.3`. | + +So the build work predates this session's visible context (a prior run earlier +today). This session treated the on-disk state as **unverified** and re-checked +every load-bearing claim rather than trusting the roadmap checkbox (SPEC §4.1 +spirit: read the world, don't trust a checkbox). + +--- + +## Plan + +- [x] Read the suite SPEC (§5, §7, §9, §10), ROADMAP Slice 1, the SPEC-feedback note. +- [x] Verify both test suites actually pass (flotilla-core + OHM shim). +- [x] Confirm flotilla-core carries **no** OHM/rfc-app behavioral defaults (§7.2). +- [x] Run the §7.3 "OHM-still-deploys" proof against OHM's **live** deployment. +- [x] Push the feature branch so a PR can be opened. +- [x] Surface the open operator gestures + deliver the Slice 2 handoff prompt. + +--- + +## Turn-by-turn arc + +### Arc 1 — read the rulebook, reconcile the surprise + +Read `launch-app/SPEC.md` (§7 flotilla-core, §5 deployment.toml contract, §9 +invariants, §10 out-of-scope), the ROADMAP (Slice 1), and the rulebook +(`engineering/README.md`). Hit the surprise immediately: `git log` showed +`8c03538 flotilla v1.8.0: become a thin shim over flotilla-core` and the roadmap +already read ✅ DONE. Decided the honest move was to **verify, not rebuild** — and +to be transparent that the build predates this session. + +### Arc 2 — verify the extraction is real and the shim is thin + +- `flotilla-core`: `.venv/bin/python -m pytest -q` → **315 passed**. +- OHM shim: flotilla-core is editable-installed (`Editable project location: + …/flotilla-core`); `pytest -q` → **7 passed**. +- Read the shim: `context.py` builds an `OHM_CONTEXT` (`AppContext`) carrying + OHM's historical names (`~/.ohm-rfc-app-flotilla` / `ohm-rfc-app-flotilla.db` / + `OHM_RFC_APP_FLOTILLA_DATA_DIR`), the pin floor `(0,2,3)`, the rfc-app lockfile + paths, and the user-agent; `cli.py` just calls `flotilla_core.cli.build_cli(OHM_CONTEXT)`. +- Grepped flotilla-core for leaked app-specifics: the only OHM/rfc-app strings + left are **docstrings** and the **org-wide** `git.wiggleverse.org` Gitea default + (generic, override-able via `pin_source_host` / `[app].gitea_host`). + `DEFAULT_CONTEXT` has **no pin floor** and neutral `flotilla` names. §7.2 holds. + +### Arc 3 — the §7.3 regression oracle, against the LIVE deployment + +The real proof is not the new tests — it's OHM's existing deployment working +through the core unchanged. Ran read-only / dry gestures through the **shim CLI** +against OHM's live state (gcloud pinned via `CLOUDSDK_ACTIVE_CONFIG_NAME=wiggleverse`): + +| Seam | Command | Result | +| --- | --- | --- | +| Live state DB | `deployment show ohm-rfc-app` | full record read unchanged — `pin_source_*`, `corpus_repo`, `app_source_repo=ben.stull/rfc-app`, `gitea_read_secret_ref=wiggleverse-ohm/ohm-rfc-app-gitea-read-token` | +| Live pin (real Gitea + private read-token via gcloud) | `pin show ohm-rfc-app` | **0.31.3** — fetched + validated against the de-OHM'd `(0,2,3)` floor | +| Secret refs | `secret list ohm-rfc-app` | 8 references (ANTHROPIC_API_KEY … WEBHOOK_EMAIL_BOUNCE_SECRET) — **zero bytes** (§8.3) | +| Live health | `deploy status ohm-rfc-app` | **HTTP 200 version=0.31.3 status=ok** | +| Full 9-phase walk (stubbed) | shim test `test_full_deploy_walks_all_nine_phases` | phases 1–9 all `succeeded`, "deployed v0.3.0" | + +Live pin (`0.31.3`) and live health version (`0.31.3`) match — the running OHM +deployment reasons end-to-end through the extracted engine unchanged. §7.3 met. + +### Arc 4 — push the branch, surface the plate, hand off + +The feature branch was local-only. Pushed it: `git push -u origin +slice1-extract-flotilla-core` (Gitea printed the PR-create link). Did **not** +open the PR or create the flotilla-core remote — both are operator gestures +(SPEC §8.4: repo-creation/merge is operator-only), and merging the shim before +flotilla-core is consumable would leave `main` unable to resolve +`flotilla-core>=0.1.0`. Delivered the open follow-ups and the Slice 2 prompt in +chat (handoff before publish, per protocol §3). + +--- + +## Cut state (end of session) + +| | | +| --- | --- | +| `flotilla-core` | `cf22fc8` v0.1.0 — 315 tests green; **local-only, no remote yet** | +| `ohm-rfc-app-flotilla` | branch `slice1-extract-flotilla-core` @ `8c03538` v1.8.0 — **pushed to origin**; PR not opened; not merged to `main` | +| `ohm-rfc-app-flotilla` `main` | unchanged (pre-extraction fat package) | +| OHM live | **untouched** — deploys v0.31.3, healthy (read-only verification only) | +| ohm-rfc pin | `0.31.3` (unchanged) | +| `launch-app/SLICE-1-SPEC-FEEDBACK.md` | present, 8 items | + +| Slice 1 ledger | Status | +| --- | --- | +| Extract generic 9-phase engine → `flotilla-core` consuming `deployment.toml` | ✅ done (pre-session), verified | +| De-OHM: drop rfc-app pin floor → optional config | ✅ (floor now on `OHM_CONTEXT`; `DEFAULT_CONTEXT` has none) | +| De-OHM: generalize audit lockfiles | ✅ (lockfile paths on `AppContext`) | +| De-OHM: parameterize data-dir / DB-filename / user-agent | ✅ (all on `AppContext`) | +| §7.3 OHM-still-deploys proof | ✅ verified against live OHM | +| Push branch + open PR | 🟡 branch pushed; PR + merge on operator plate | + +--- + +## §19.2 / SPEC candidates surfaced + +All captured in `engineering/launch-app/SLICE-1-SPEC-FEEDBACK.md` — must be +settled in the SPEC before/as part of Slice 2: + +1. **§5.2 too strong (biggest gap):** the engine needs a separate local **state + store** (deploy history, health snapshots, the in-progress deploy lock) — not + reconstructable from `deployment.toml`. §5.2 should say config comes from the + toml but the core owns its own state store. +2. **§3.2/§5.1 canonicity:** is `deployment.toml` re-read each deploy, or imported + once into the registry? Slice 1 shipped one-time import + left OHM + registry-canonical. Recommendation: toml-canonical for new apps. +3. **§5.1 missing Gitea host** for the pin read (defaulted to `git.wiggleverse.org`). +4. **§5.1 missing private-repo read token** (`gitea_read_secret_ref`) — distinct + from `[secrets]`; it's flotilla's own read credential. +5. **§5.1 collapses content-repo vs source-repo** into one `repo`; fine for a + single-repo app (wiggle-snip) but the SPEC should say so; OHM's split is grandfathered. +6. **§5.3 needs a new read-only `gcloud config configurations describe`** capability + to check `vm.project == gcloud_config project` (the existing guard only checks the name). +7. **§3.3/§5.3 One-Name `-ppe` derivation** is a new pre-prod convention, not a + universal invariant; `validate` applies only to `define-deployment`-authored records. +8. **§7.1 "9-phase engine" undersells it:** the extraction also pulled in pin, + secrets, audit, webhooks, plan — it's "the operator-CLI engine." Minor wording. + +--- + +## What lands on the operator's plate + +Hard ordering — **do not merge the shim before #1**, or a from-scratch install of +`main` can't resolve `flotilla-core>=0.1.0`. + +1. **Publish flotilla-core** (no remote yet). Create the Gitea repo, then: + ```bash + cd ~/projects/wiggleverse/flotilla-core + git remote add origin ssh://git@git.wiggleverse.org:2222/wiggleverse/flotilla-core.git + git push -u origin main + ``` + Then decide how the shim consumes it (tagged release vs `git+ssh` pin) and + update `ohm-rfc-app-flotilla/pyproject.toml` (`flotilla-core>=0.1.0`, currently + satisfied only by the local editable install). +2. **Open + merge the shim PR** to `main` (Gitea web) — *after* #1. + Link: https://git.wiggleverse.org/wiggleverse/ohm-rfc-app-flotilla/pulls/new/slice1-extract-flotilla-core +3. **Patchwatch runner image** (`runner/Dockerfile`) needs `flotilla-core` in its + build context before its next rebuild. + +(This session did not create the flotilla-core remote or merge — operator-only.) + +--- + +## Prompt the operator can paste into the next Claude Code session + +``` +# launch-app Slice 2 — deployment.toml schema + define-deployment (SPEC §5, §6.6) + +Reserve your own session ID (claim-session-id.sh) — the number is advisory. + +Slice 1 is done and verified: flotilla-core v0.1.0 is extracted at +~/projects/wiggleverse/flotilla-core (315 tests green), ohm-rfc-app-flotilla is a +thin shim over it (v1.8.0, branch slice1-extract-flotilla-core pushed, PR NOT yet +opened/merged), and OHM re-deploys through the core unchanged (live DB + pin +0.31.3 + 8 secret refs + live /api/health 200 all proven, Session 0057). + +## Read first +- SPEC: ~/projects/wiggleverse/engineering/launch-app/SPEC.md (§5 contract, §5.3 validation, §6.6, §8 UX) +- Roadmap: ~/projects/wiggleverse/engineering/launch-app/ROADMAP.md (Slice 2) +- **SLICE-1-SPEC-FEEDBACK.md (same dir)** — 8 issues that MUST be settled in the + SPEC before/as part of this slice. +- The core's loader: flotilla-core/flotilla_core/deployment_toml.py (load() + + sync_to_registry() shipped in Slice 1) and registry.py. +- Fixture: ~/projects/wiggleverse/wiggle-snip (single-repo app — the §5.1 happy path). + +## Task +1. FIRST correct the SPEC per SLICE-1-SPEC-FEEDBACK.md (own commit, guide §3.2). + Load-bearing settlements before writing validate: + - §5.2: flotilla-core owns a separate local STATE store (history/health/lock); + deployment.toml is config only. + - §3.2/§5.1 canonicity: toml re-read each deploy vs imported once. (Slice 1 + shipped one-time import; recommendation = toml-canonical for new apps.) + - Add to §5.1: a Gitea host, optional [app].gitea_read_secret_ref for private + repos, and a note that §5.1 assumes the single-repo shape (OHM's split is grandfathered). + - §5.3: vm.project==gcloud_config project needs a NEW read-only + `gcloud config configurations describe`; validate applies only to + define-deployment-authored records, not legacy/imported ones. +2. Firm up the §5.1 schema + build the fail-closed validate verb (§5.3): each rule + prints pass/fail + remediation; the orchestrator gates provision-vm on it. +3. Build define-deployment: the topology+names interview deriving everything from + the One Name (§3.3), emitting + validating the record, following the §8 UX + contract (probe→default→ask→validate→explain). NEVER ask for secret bytes (§8.3). + +## Tests (part of the slice) +- Each §5.3 rule rejects a crafted-bad record with the right message. +- A good record validates + round-trips through flotilla-core's loader. +- Dogfood: define-deployment produces a valid deployment.toml for wiggle-snip. + +## Scope guard +Pre-prod, single environment. NO slots/ramp/promote/rollback/compat-gate — guide §10. + +## Process +Spec-driven, cite section numbers in commits; branch + PR (Gitea, no gh CLI). +Hard secrets rule (SPEC §8.3): stdin-piped gestures only. + +## Carry-over operator follow-ups from Slice 1 (still open) +- Publish flotilla-core to Gitea + pin ohm-rfc-app-flotilla's dep off the local path. +- Open + merge the slice1-extract-flotilla-core PR (after flotilla-core is published). +- Add flotilla-core to the Patchwatch runner/Dockerfile build context. +``` + +--- + +## Protocol notes + +- This was framed as a "test run" of our own launch-app tooling; the operator + explicitly asked for a transcript at session end, so it is published as a normal + OHM driver session (it did live read-only OHM operations through the shim). +- No secret bytes entered the session — only secret **references** were read back + (§8.3 / protocol §3). No live-vuln detail involved. +- The session changed no code and did not touch OHM live (read-only verification + + one branch push). The substantive build it verifies was committed pre-session. diff --git a/0057/SESSION-0057.0-TRANSCRIPT-2026-06-01T05-40--INPROGRESS.md b/0057/SESSION-0057.0-TRANSCRIPT-2026-06-01T05-40--INPROGRESS.md deleted file mode 100644 index a22675b..0000000 --- a/0057/SESSION-0057.0-TRANSCRIPT-2026-06-01T05-40--INPROGRESS.md +++ /dev/null @@ -1,15 +0,0 @@ -# Session 0057.0 — Transcript - -> Date: 2026-06-01 -> Start: 2026-06-01T05-40 (PST implied) -> Status: **PLACEHOLDER — claimed at session start; finalized at session end.** -> -> This file reserves session ID 0057. The driver replaces this body -> with the full transcript before publishing, and renames the file to -> its final SESSION-0057.0-TRANSCRIPT-2026-06-01T05-40--.md form. - ---- - -## Launch prompt - -_(launch prompt not captured at claim time)_