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 projectwiggleverse-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-clonesnow filtersstatus='active' AND bdd_enabled=1, sorefresh.shnever clones/ingests a non-BDD project. (Flip the flag on and the next refresh clones + ingests its corpus.)- Backend
require_bdd_projectdependency → 409 on the BDD write surface (releases create/add-scenarios, paste preview/commit, plan import, roadmap export) for a non-BDD project.projects.create/updateacceptbdd_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) whenbdd_enabled===0; manage list shows a "non-BDD" badge. - Tests: +7 → 54 backend pass (
test_project_crud.pydefault/disable/toggle/list-clones-exclusion + newtest_bdd_guard.py409 endpoint guards). Frontendtsc --noEmit+vite buildclean.
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)
- Repo + corpus path: OHM points at
wiggleverse/ohm-contentwith a newresearch/bddsubpath. Rationale: planner-bot has admin/push there; theresearch/bddsubdir is not served by the live rfc-app (which renders onlyrfcs/+ PHILOSOPHY/About), so there's no live-site pollution. (ben.stull/ohm-rfcand a brand-new repo were the alternatives.) - 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_enabledon later (⚙ modal or PATCH) is the populate path, after which paste/commit-to-research/bdd+ ingest would fill it. - 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/projectslists 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-clonesreturns onlyecomm-specs; the only meta clone on disk under/opt/planner-metaiswiggleverse-ecomm-meta. OHM'sohm-contentrepo 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-contentcontent 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 offwiggleverse-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_projectnow writesbdd_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
--INPROGRESSplaceholders linger inohm-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.