Session 0018.0 (Wave 9): rewrite legacy session refs in transcript bodies + README scoping

- Rewrite every legacy `Session L` / `Session M.1` etc. reference inside
  transcript bodies to the numeric form (`Session 0012.0` / `Session 0013.1`),
  via a mechanical Python sed pass scoped to canonical-filename transcripts
  only (502 replacements across 39 files; 21 files in this published repo +
  18 sibling files in `~/git/ohm-infra/`). The §23 rename was originally
  filename-only — session 0018.0 reverses that and rewrites the bodies too,
  so cross-references inside a transcript match the filename you'd browse
  to. The mapping table (`A → 0001` … `N → 0014`) lives in
  `SESSION-PROTOCOL.md` §1 (also amended this session) for anyone hitting
  an old external link.

- Amend README.md:
  - New "Where the record begins" section noting OHM started with two
    vibe-coded prototypes (no transcripts; the discipline that produced this
    record didn't exist yet). The transcripts here begin at the
    spec-driven-development phase — not at the literal beginning of OHM.
  - Update the existing "Sessions 0001 through 0013 originally shipped
    under a letter-form naming" paragraph to reflect that body refs are
    now also in numeric form.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ben Stull
2026-05-28 09:40:06 -07:00
parent 412b6ab5d8
commit d5125190ae
21 changed files with 281 additions and 255 deletions
@@ -1,4 +1,4 @@
# Session K — Transcript
# Session 0011.0 — Transcript
> Date: 2026-05-28
> Goal: Execute Wave 4 of `ohm-rfc/ROADMAP.md` as the autonomous
@@ -37,9 +37,9 @@
>
> **Session-letter correction logged:** the driver's prior commits
> in this session (`64f5344`, `54cadd8` on `ohm-rfc`) labeled this
> as Session J. The operator corrected mid-session: Session J was
> as Session 0010.0. The operator corrected mid-session: Session 0010.0 was
> the parallel docs-feature / v0.14.0 session that ran during
> Session I's wind-down; this driver session is Session K. The
> Session 0009.0's wind-down; this driver session is Session 0011.0. The
> correction landed in commit `cfc0c6a` on `ohm-rfc` (which fixed
> the two prior strikethrough rows). The mislabeled commits stay
> as-written — no force-push, no `--amend` — per session-protocol
@@ -64,11 +64,11 @@
were from the parallel docs-feature session retrying.
- **ohm-rfc-app-flotilla**: `main` at `a1588c1` (v1.0.1 + CLAUDE.md
bake-in). No work needed in this repo for Wave 4.
- **ohm-infra**: most recent transcript was Session I, published.
- **ohm-infra**: most recent transcript was Session 0009.0, published.
The convention says the next letter is J, but the parallel
docs-feature session that shipped v0.14.0 between Session I's
docs-feature session that shipped v0.14.0 between Session 0009.0's
wind-down and this session's start claimed J — the operator
confirmed mid-session that this driver session is Session K
confirmed mid-session that this driver session is Session 0011.0
rather than J.
- **Driver brief**: the operator's bedtime prompt (the one that
opens this session) said Wave 4 lineup is #7 v0.9.0 + #9 v0.11.0
@@ -146,7 +146,7 @@ not the highest semver). Ran `flotilla deploy ohm-rfc-app`:
opened `deploys.id=15`, all 9 phases green, verify took 4.8s,
`/api/health` returned `{"version":"0.9.0","status":"ok"}`.
The §8.2 stale-lockfile fault that bit Session I's v0.5.0 deploy
The §8.2 stale-lockfile fault that bit Session 0009.0's v0.5.0 deploy
did NOT recur — subagent κ ran `npm install` in `frontend/` after
bumping `package.json`, the lockfile diff is in the commit, the
VM's `git checkout` had nothing to clobber.
@@ -342,9 +342,9 @@ landed in `cfc0c6a` (alongside the v0.12.0 status row); #19
landed in `cce9fe3` as a standalone roadmap commit at the very
end of the session.
The mid-session correction — "Not session J — session K" — landed
The mid-session correction — "Not session 0010.0 — session 0011.0" — landed
in `cfc0c6a` too: it fixed the two prior strikethrough rows
(`#7` v0.9.0 and `#9` v0.11.0) to attribute Session K, not J.
(`#7` v0.9.0 and `#9` v0.11.0) to attribute Session 0011.0, not J.
The two prior commits with the wrong attribution (`64f5344`,
`54cadd8`) stay as written, with the correction documented in
this transcript per session-protocol §3 (no curation, no
@@ -360,7 +360,7 @@ amend-after-push).
| OHM live | `deploys.id=16`, `v0.11.0`, healthy. `/api/health` returns `{"version":"0.11.0","status":"ok"}`. `/admin/users` 200s. `/settings/notifications` 200s. v0.12.0 deploy is paused on operator secret. |
| ohm-rfc | `cce9fe3`. `.rfc-app-version` = `0.11.0`. ROADMAP reflects #7 + #9 shipped, #10 tagged-but-paused, #16 + #17 + #18 + #19 captured. |
| ohm-rfc-app-flotilla | `a1588c1` (unchanged — no flotilla work in Wave 4). |
| ohm-infra | this transcript at `SESSION-K-TRANSCRIPT-2026-05-28T03-20--2026-05-28T03-55.md`; publish pending. |
| ohm-infra | this transcript at `SESSION-0011.0-TRANSCRIPT-2026-05-28T03-20--2026-05-28T03-55.md`; publish pending. |
| Wave 4 ledger | Status |
| --- | --- |
@@ -487,7 +487,7 @@ hand.)
5. **Session-letter correction documentation**: this transcript
records the J→K correction explicitly. If the parallel
docs-feature session (the real Session J) hasn't yet published
docs-feature session (the real Session 0010.0) hasn't yet published
its transcript, that's its own session's responsibility — not
this one's.
@@ -496,7 +496,7 @@ hand.)
## Prompt the operator can paste into the next Claude Code session
```
You are the OHM roadmap driver. The previous session (Session K)
You are the OHM roadmap driver. The previous session (Session 0011.0)
shipped rfc-app v0.9.0 (admin user-management page, item #7,
deploys.id=15) and v0.11.0 (trust device 30d, item #9,
deploys.id=16) to OHM. v0.12.0 (CloudFlare Turnstile, item #10)
@@ -543,7 +543,7 @@ B. **Start Wave 5** if Wave 4 is clear and the operator wants to
`backend/app/api_admin.py` for the create-user affordance,
plus `backend/app/email.py` for the invite-email template.
Wave-5 dispatch should reuse Session K's subagent pattern: each
Wave-5 dispatch should reuse Session 0011.0's subagent pattern: each
subagent creates its own `git worktree add` in
`/Users/benstull/git/rfc-app`, pushes a feature branch, does NOT
tag, does NOT touch the ohm-rfc pin, does NOT run flotilla deploy
@@ -572,7 +572,7 @@ Session-K lessons to apply automatically:
- Item #1 VM rename and operator-provided secrets stay operator
territory.
End-of-session: write `~/git/ohm-infra/SESSION-L-TRANSCRIPT-…md`
End-of-session: write `~/git/ohm-infra/SESSION-0012.0-TRANSCRIPT-…md`
and publish via `~/git/ohm-infra/scripts/publish-transcript.sh`.
```
@@ -703,7 +703,7 @@ ROADMAP row strikethrough for #10 finalized with deploys.id=17
## Updated next-session prompt
```
You are the OHM roadmap driver. The previous session (Session K)
You are the OHM roadmap driver. The previous session (Session 0011.0)
shipped rfc-app v0.9.0 (admin user-management, #7, deploys.id=15),
v0.11.0 (trust device 30d, #9, deploys.id=16), and v0.12.0
(CloudFlare Turnstile, #10, deploys.id=17 → 18 after
@@ -712,8 +712,8 @@ OHM serves v0.12.0 with Turnstile abuse defense fail-closed.
Read `~/git/ohm-infra/SESSION-PROTOCOL.md` and
`/Users/benstull/projects/wiggleverse/ohm-rfc/ROADMAP.md`
end-to-end. The next session letter is L (Session K = this driver,
Session J = the parallel docs-feature/v0.14.0 session).
end-to-end. The next session letter is L (Session 0011.0 = this driver,
Session 0010.0 = the parallel docs-feature/v0.14.0 session).
**Hard rule baked in mid-Session-K**: never EVER ask the operator
to paste secret bytes into the conversation, not even as one
@@ -727,7 +727,7 @@ for secret bytes" section).
The active wave is Wave 5. Per the roadmap:
- **Session ν (Track B): #12 Owner invite → v0.16.0** (originally
v0.14.0, but Session J's docs-feature claimed v0.14.0; #12
v0.14.0, but Session 0010.0's docs-feature claimed v0.14.0; #12
bumped to next available slot. Depends on #5 + #7 — both
shipped.)
- **Session ξ (Track A): #13 Amplitude → v0.15.0** (operator
@@ -735,7 +735,7 @@ The active wave is Wave 5. Per the roadmap:
#10's `CLOUDFLARE_TURNSTILE_SECRET`. Subagent CHANGELOG MUST
step pauses the wave; do not invent the key.)
Plus four operator-added items captured in Session K:
Plus four operator-added items captured in Session 0011.0:
- **#16 Admin-create user + invite email** (with optional
custom message). rfc-app, depends on #5 + #7 (both shipped).
Lives on `/admin/users` from v0.9.0. A natural Wave-5 candidate
@@ -753,7 +753,7 @@ Plus four operator-added items captured in Session K:
alone bumps pins, sets secrets, runs flotilla deploy. ("I'm
the only one that gets to yolo.")
Dispatch shape: same as Session K. Each subagent creates its own
Dispatch shape: same as Session 0011.0. Each subagent creates its own
`git worktree add` in `/Users/benstull/git/rfc-app`, pushes a
feature branch, does NOT tag, does NOT touch the ohm-rfc pin,
does NOT run flotilla deploy — the driver integrates serially.
@@ -770,7 +770,7 @@ Session-K lessons to apply automatically:
→ 0.7.0 → 0.6.0 → 0.5.0 → 0.4.0 → 0.3.0 → 0.2.x. Subagents
inserting a new entry slot it at the right position; cherry-
pick conflicts get hand-assembled at integration time when two
parallel features ship at adjacent slots (Session K hit this
parallel features ship at adjacent slots (Session 0011.0 hit this
for v0.11.0 + v0.12.0 — both wanted to insert above v0.10.0).
- backend pytest needs `PYTHONPATH=.` from `backend/` unless a
future cleanup adds `[tool.pytest.ini_options] pythonpath =
@@ -778,7 +778,7 @@ Session-K lessons to apply automatically:
- `Login.jsx` is now contested territory — Sessions K's v0.11.0
+ v0.12.0 both edited the verify step. Expect a conflict any
time a future release touches the auth path. Resolve by keeping
both injections in sequence (driver pattern from Session K).
both injections in sequence (driver pattern from Session 0011.0).
- `Admin.jsx` is now contested territory too if #16 ships on top
of #7 (v0.9.0)'s admin surface.
- Operator-provided secrets stay operator territory. The wave-
@@ -790,6 +790,6 @@ Session-K lessons to apply automatically:
- Item #1 VM rename and the new operator-decision items (#17
inventory, #19 PR coordination) stay operator territory.
End-of-session: write `~/git/ohm-infra/SESSION-L-TRANSCRIPT-…md`
End-of-session: write `~/git/ohm-infra/SESSION-0012.0-TRANSCRIPT-…md`
and publish via `~/git/ohm-infra/scripts/publish-transcript.sh`.
```