# Session 0064.0 — Transcript > Date: 2026-06-02 > Start: 2026-06-02T06-00 (PST implied) > End: 2026-06-02T06-55 (PST implied) > Driver: Claude (Opus 4.8) + Ben > Session type: cross-project — primary work on the **ecomm BDD release planner** > (`wiggleverse-ecomm-bdd-release-planner-app`, GCP project > `wiggleverse-ecomm-bdd-app`), with an OHM ramification (OHM added as a project; > the OHM GCP project's ADC quota pin changed). Session ID claimed **retroactively > at end** — the start was assessed as ecomm-planner work, so no claim was made at > launch; published here because OHM is materially involved. --- ## Launch prompt ``` Add OHM as a real project in the BDD planner. Read ecomm-bdd-release-planner.md first. Use the new ⚙ project-management UI at rfc.wiggleverse.org to create the `ohm` project pointing at its gitea meta repo + corpus subpath; confirm refresh.sh auto-clones and ingests it (or trigger ingest on planner-vm), and that it appears in the dropdown with scenarios. Decide how OHM's corpus is populated (paste vs an existing spec dir). While in that GCP project, fix the ADC quota-project pin: gcloud auth application-default set-quota-project wiggleverse-ecomm-bdd-app. ``` --- ## Outcome (TL;DR) OHM is now a project in the multi-project planner hub at `rfc.wiggleverse.org` — but **not** a BDD project. Investigation showed OHM has **zero** Gherkin/BDD content anywhere (it's a body of RFCs, RFC-0001..0032 in `ben.stull/ohm-rfc`; published content in `wiggleverse/ohm-content`). So rather than seed a fake corpus, Ben chose to **add a per-project `bdd_enabled` capability flag** to the planner: BDD projects (ecomm) keep the scenario corpus/releases/paste machinery; non-BDD projects (OHM) live in the hub as organizational entries with that machinery turned off. Shipped, deployed, verified live. The ADC quota fix was applied. No secret bytes published (the planner URL token is scrubbed to `` throughout; gitea bot tokens were used from Secret Manager and never printed). ## What shipped **Feature: per-project BDD on/off flag** — planner app repo `wiggleverse/wiggleverse-ecomm-bdd-release-planner-app`, branch `project-bdd-toggle` ff-merged to `main` as commit **`e436e19`**, pushed, deployed. Pieces: - **Migration `0005_project_bdd_enabled.sql`**: `project.bdd_enabled INTEGER NOT NULL DEFAULT 1` (1 = BDD project / ecomm; 0 = non-BDD / OHM). Forward-only, ingest-applied (NOT web-startup) — same gotcha as 0002/0003/0004. - **`ingest.py --list-clones`** now filters `status='active' AND bdd_enabled=1`, so `refresh.sh` never clones/ingests a non-BDD project. (Flip the flag on and the next refresh clones + ingests its corpus.) - **Backend** `require_bdd_project` dependency → **409** on the BDD write surface (releases create/add-scenarios, paste preview/commit, plan import, roadmap export) for a non-BDD project. `projects.create/update` accept `bdd_enabled` (ProjectCreate defaults True, ProjectPatch toggles); stored 0/1. - **Frontend** (`App.tsx`/`api.ts`/`styles.css`): ⚙ create + edit forms get a "BDD scenarios" checkbox; main view shows a placeholder (no scenario browser / releases / paste) when `bdd_enabled===0`; manage list shows a "non-BDD" badge. - **Tests**: +7 → **54 backend pass** (`test_project_crud.py` default/disable/toggle/list-clones-exclusion + new `test_bdd_guard.py` 409 endpoint guards). Frontend `tsc --noEmit` + `vite build` clean. **Deploy**: flotilla 10-phase green (`/api/health` ok, 1238 scenarios). Then ran `systemctl start planner-ingest.service` on `planner-vm` (us-central1-a) to apply 0005 — REQUIRED before any project create, because `create_project` now writes the new column. macOS deploy note still applies (`SSL_CERT_FILE=$(python3 -m certifi)` for phase 9). The deploy's validate phase emitted the ADC-quota warning (fixed below). **OHM project created** via the hub endpoint `POST //api/projects` — the exact call the ⚙ "New project" form issues. (The browser UI itself was **org-policy-blocked** from `rfc.wiggleverse.org` in the agent's Claude-in-Chrome this session; Ben verified the rendered UI manually.) Project record: `slug=ohm name=OHM gitea_repo=wiggleverse/ohm-content corpus_path=research/bdd roadmap_path=roadmap bdd_enabled=0`, status=active. ## Decisions (Ben) 1. **Repo + corpus path**: OHM points at **`wiggleverse/ohm-content`** with a new `research/bdd` subpath. Rationale: planner-bot has admin/push there; the `research/bdd` subdir is **not served** by the live rfc-app (which renders only `rfcs/` + PHILOSOPHY/About), so there's no live-site pollution. (`ben.stull/ohm-rfc` and a brand-new repo were the alternatives.) 2. **Corpus population**: OHM has no existing BDD spec dir and no Gherkin, so "paste vs existing spec dir" resolved to **neither for now** — OHM is a non-BDD entry. Turning `bdd_enabled` on later (⚙ modal or PATCH) is the populate path, after which paste/commit-to-`research/bdd` + ingest would fill it. 3. **Build the flag, don't fake a corpus**: Ben explicitly chose "build a real BDD on/off flag" over seeding a demo scenario or leaving an empty BDD project. ## Verification (live, prod) - `GET /api/projects` lists both: `ohm` (`bdd_enabled:0`) + `ecomm-specs` (`bdd_enabled:1`). This list is the dropdown source. - ecomm intact: 15 domains / 1238 scenarios; OHM domains empty. - Non-BDD guards: OHM release-create + paste-preview → **409**; ecomm endpoints still 200. - On `planner-vm`: `ingest.py --list-clones` returns only `ecomm-specs`; the only meta clone on disk under `/opt/planner-meta` is `wiggleverse-ecomm-meta`. **OHM's `ohm-content` repo was never cloned or committed to** — confirming the non-BDD project leaves the OHM content repo untouched. ## ADC quota fix `gcloud auth application-default set-quota-project wiggleverse-ecomm-bdd-app` (was pinned to `wiggleverse-ohm`). NOTE: ADC quota project is a **single shared file**; it now favors ecomm-bdd, so a future OHM deploy will show the inverse (harmless) warning. Both flotillas pin `--project` explicitly, so this only affects the ADC billing/quota attribution warning, not correctness. ## OHM ramifications (cross-reference) - No OHM release, no rfc-app deploy, no `ohm-rfc`/`ohm-content` content change, no §13 deployment-record edit. The only OHM-touching effects: (a) OHM is now a registered (non-BDD) project in the planner hub; (b) the shared ADC quota pin moved off `wiggleverse-ohm`. Hence this transcript, claimed retroactively. ## Files changed (planner app repo) ``` A migrations/0005_project_bdd_enabled.sql A tests/test_bdd_guard.py M backend/app/main.py (ProjectCreate/Patch + require_bdd_project + guards) M backend/app/projects.py (MUTABLE + _validate + create_project cols) M tools/ingest.py (--list-clones bdd_enabled filter) M frontend/src/App.tsx (checkboxes + non-BDD placeholder view) M frontend/src/api.ts (Project.bdd_enabled + ProjectInput) M frontend/src/styles.css (.proj-check, .non-bdd-note) M tests/test_project_crud.py (+4 flag tests) ``` Memory updated: ecomm project memory `ecomm-bdd-release-planner.md` (+ its `MEMORY.md` index line) carry the full state. (Memory referenced as `` — the literal URL token is in Secret Manager `planner-planner-token`, intentionally unrotated low-value path obscurity.) ## Gotchas captured - Migration 0005 is ingest-applied; `create_project` now writes `bdd_enabled`, so **ingest MUST run after deploy before any project create** or the insert 500s. - flotilla deploy does not sync nginx (only systemd units) — unchanged here. - Stale OHM `--INPROGRESS` placeholders linger in `ohm-session-history` (0026, 0027, 0045, 0063 were active at claim time) — housekeeping debt, not this session's. --- ## Next-session prompt ``` Continue on the ecomm BDD release planner (multi-project hub at rfc.wiggleverse.org). Read memory first: ecomm-bdd-release-planner.md (esp. the 2026-06-02 "PER-PROJECT BDD FLAG + OHM ADDED" section). OHM now exists as a non-BDD project (bdd_enabled=0, empty, pointing at wiggleverse/ohm-content : research/bdd). If you want OHM to actually hold BDD scenarios: flip its flag on in the ⚙ Manage-projects modal (or PATCH //api/projects/ohm {"bdd_enabled": true}), then either paste scenarios or commit Gherkin under research/bdd and let refresh.sh ingest. Url token is in Secret Manager (planner-planner-token). Deploy = flotilla 10-phase + then `systemctl start planner-ingest.service` on planner-vm to apply migrations. Optional cleanup: a stale merged local branch `release-plan-import` in the planner app repo, and several stale --INPROGRESS placeholders in ohm-session-history. ```