168 lines
8.6 KiB
Markdown
168 lines
8.6 KiB
Markdown
# 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.
|
|
```
|