Files
session-history/ohm/0064/SESSION-0064.0-TRANSCRIPT-2026-06-02T06-00--2026-06-02T06-55.md
T

8.6 KiB

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 <PLANNER_TOKEN> 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 /<PLANNER_TOKEN>/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 <PLANNER_TOKEN> — 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 /<token>/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.