Files
session-history/ohm/0057/SESSION-0057.0-TRANSCRIPT-2026-06-01T05-40--2026-06-01T06-00.md

253 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 19 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.