204 lines
9.7 KiB
Markdown
204 lines
9.7 KiB
Markdown
# Session 0040.0 — Transcript
|
|
|
|
> Date: 2026-05-29
|
|
> Goal: Answer the operator's question about non-UX RFC contributions
|
|
> (ROADMAP #35), then "do it" — stand up the operator RFC-authoring
|
|
> lane. Along the way, settle the repo-per-RFC topology question the
|
|
> operator kept raising.
|
|
>
|
|
> Outcome: **#35 proven end-to-end (Informed Consent super-draft live
|
|
> in the OHM corpus, authored + merged natively via a new
|
|
> `rfc-authoring.sh` lane). The operator's "does each RFC need its own
|
|
> repo?" pushback overturned the session's first answer — topology is
|
|
> now captured as ROADMAP #36 (leaning meta-only), RFC-0002 graduation
|
|
> paused. A real rfc-app bug the operator spotted (phantom pending-idea
|
|
> after a merge-with-branch-delete) was fixed, tested, released as
|
|
> v0.30.1, and deployed (deploys.id=43).**
|
|
>
|
|
> Highlights:
|
|
> - rfc-app v0.30.1 — phantom-pending-idea reconcile fix, 375 tests green.
|
|
> - New durable tooling: `ohm-infra/scripts/rfc-authoring.sh` +
|
|
> `RFC-AUTHORING-LANE-RUNBOOK.md`. Token in macOS Keychain, never in
|
|
> a transcript.
|
|
> - ROADMAP: #35 layout note corrected (wrong SPEC §1 premise), #36 added.
|
|
|
|
---
|
|
|
|
## Pre-session state
|
|
|
|
- ohm-rfc pin: rfc-app **0.30.0**; OHM live on 0.30.0 (healthy).
|
|
- rfc-app main at `1558cc3` (v0.30.0).
|
|
- Corpus: one active RFC (`human` → RFC-0001, `wiggleverse/rfc-0001-human`)
|
|
+ the `wiggleverse/ohm-meta` manifest.
|
|
- ROADMAP #35 (operator RFC authoring lane) open, captured 2026-05-29
|
|
in a prior session; no tooling built yet.
|
|
- No gitea token configured anywhere (clean slate).
|
|
|
|
---
|
|
|
|
## Turn-by-turn arc
|
|
|
|
### Arc 1 — "Any roadmap work for non-UX git contributions?"
|
|
|
|
Identified ROADMAP **#35** as exactly that item. Walked its open
|
|
questions; the operator zeroed in on one sub-question — *"does each RFC
|
|
really need its own repo? it's a single document"* — asked three times
|
|
across the session, which signaled it was the real decision.
|
|
|
|
### Arc 2 — First (wrong) topology answer, then the correction
|
|
|
|
Initially folded a "maturity-gated, manifest-glued" decision into #35
|
|
(keep per-RFC repos at graduation). The operator pushed back. Reading
|
|
SPEC §1 showed two of the three pro-per-repo arguments were **nullified
|
|
by the design**: (a) per-repo Gitea permissions — wrong, all git ops go
|
|
through a single bot and auth is app-side; (b) fork-to-contribute —
|
|
wrong, raw git push isn't a supported path. What survives (isolated
|
|
history, multi-file-bundle container) is thin for a single document.
|
|
Corrected the #35 note, added **#36** (decide repo-per-RFC vs.
|
|
meta-only; operator leans meta-only — a SPEC §1 + §13 framework change,
|
|
not something #35 bakes in). **RFC-0002 graduation paused** so a second
|
|
per-repo data point isn't canonized while #36 is open.
|
|
|
|
### Arc 3 — Build the authoring lane (credential hygiene)
|
|
|
|
Operator chose "file I read by reference," then improved on it
|
|
mid-build: *"create a script you run so you never read that file. Can it
|
|
be encrypted?"* — which is the better shape. Built
|
|
`ohm-infra/scripts/rfc-authoring.sh`: verb-based gitea-API wrapper,
|
|
token in the **macOS Keychain** (encrypted at rest, no plaintext file),
|
|
piped to `curl --config -` so it never enters argv/stdout/transcript.
|
|
Several subshell-scope bugs found and fixed during smoke-testing
|
|
(token-resolution exit not propagating; HTTP status not surviving the
|
|
command-substitution subshell). Trace-verified the token never appears
|
|
on a curl argv line. Operator loaded a `write:repository`-scoped PAT;
|
|
`whoami` (needs `read:user`) 403s but that's irrelevant — authorship is
|
|
confirmed from PR author fields instead.
|
|
|
|
### Arc 4 — Prove #35 end-to-end with a real RFC
|
|
|
|
Operator's working title: **Informed Consent** (already named in
|
|
RFC-0001 as a future entity — a real corpus entry, not a throwaway).
|
|
Drafted `rfcs/informed-consent.md` as a super-draft matching the
|
|
original `human` propose-commit shape. Branch `propose/informed-consent`
|
|
→ commit (authored **Ben Stull**, not the bot) → push →
|
|
`pr-create` (PR #7) → `pr-merge --method merge --delete-branch`. File
|
|
landed on ohm-meta main; `/api/rfcs` showed the super-draft live —
|
|
**the webhook reconciled a CLI merge automatically**, answering #35's
|
|
named failure-mode question in the affirmative for ohm-meta merges.
|
|
|
|
### Arc 5 — The operator catches a real bug
|
|
|
|
Operator: *"I see Informed Consent as both a Super-Draft and a Pending
|
|
Idea in the UX."* Investigated: gitea truth = PR #7 closed+merged, but
|
|
`/api/proposals` still listed it. Root cause: I merged with
|
|
`--delete-branch`; gitea then reports the PR `head.ref` as the
|
|
`refs/pull/7/head` sentinel; `refresh_meta_pulls` parses the slug from
|
|
the branch name → `None` → row skipped → `cached_prs.state` frozen at
|
|
`open` forever. `cached_rfcs` reconciled off the push event (super-draft
|
|
appeared) but `cached_prs` never did (phantom idea). The web UX never
|
|
hit this because it leaves branches in place
|
|
(`default_delete_branch_after_merge=false`).
|
|
|
|
### Arc 6 — Fix, test, release, deploy
|
|
|
|
Fixed in `backend/app/cache.py`: when gitea reports an empty or
|
|
`refs/pull/` sentinel ref, recover the real branch name from the stored
|
|
`cached_prs.head_branch` row (migration 002 retains it). Applied to both
|
|
`refresh_meta_pulls` and `refresh_rfc_repo`. Added regression test
|
|
`test_merged_idea_pr_with_deleted_branch_clears_proposal` — **proven by
|
|
reverting the fix and watching it fail with the exact phantom**, then
|
|
restoring. Full suite **375 green**. Released **rfc-app v0.30.1**
|
|
(branch → bump VERSION + package.json → CHANGELOG → commit → tag →
|
|
push origin + benstull mirror, SHAs match → ff-merge main). Bumped
|
|
ohm-rfc pin 0.30.0 → 0.30.1. Deploy hit a stale-ADC reauth wall twice
|
|
(operator's `gcloud auth application-default login` had to actually
|
|
complete — first attempts didn't rewrite the credential file); once the
|
|
ADC minted a token, **deploy succeeded, deploys.id=43, v0.30.1 live**.
|
|
Verified: `/api/health` = 0.30.1, `/api/proposals` = `[]` (phantom
|
|
gone), `informed-consent` intact as a super-draft.
|
|
|
|
### Arc 7 — Durable artifacts + protocol close
|
|
|
|
Wrote `ohm-infra/RFC-AUTHORING-LANE-RUNBOOK.md` (#35's required
|
|
gesture-note). Confirmed ohm-infra is not a git repo (only transcripts
|
|
publish, via the script, to `ohm-session-history`), so the script +
|
|
runbook simply live on disk.
|
|
|
|
---
|
|
|
|
## Cut state (end of session)
|
|
|
|
| | |
|
|
| --- | --- |
|
|
| rfc-app | `732b23b` v0.30.1 — phantom-pending-idea reconcile fix; pushed origin + benstull |
|
|
| OHM live | deploys.id=43, **v0.30.1**, healthy |
|
|
| ohm-rfc | `470251b` — ROADMAP #35 correction + #36 added; pin → 0.30.1; pushed |
|
|
| ohm-meta | `informed-consent` super-draft live (PR #7 merged) |
|
|
| ohm-infra | `rfc-authoring.sh` + `RFC-AUTHORING-LANE-RUNBOOK.md` on disk (not a git repo) |
|
|
| gitea token | Ben-owned PAT, `write:repository`, in macOS Keychain `ohm-gitea-token` |
|
|
|
|
| Wave ledger | Status |
|
|
| --- | --- |
|
|
| #35 operator RFC authoring lane | ✅ proven end-to-end (super-draft path); tooling + runbook shipped |
|
|
| #36 RFC topology (meta-only) | 🟡 captured, operator leans meta-only, decision deferred |
|
|
| rfc-app v0.30.1 (phantom fix) | ✅ shipped + deployed (deploys.id=43) |
|
|
|
|
---
|
|
|
|
## §19.2 / process candidates surfaced
|
|
|
|
1. **#36 — RFC repository topology.** The big one. SPEC §1 says "each
|
|
RFC is its own repo," but the bot-mediated app-auth model nullifies
|
|
most of the benefit for single-document RFCs. Decide meta-only vs.
|
|
per-repo deliberately; it's a §1 + §13 framework change.
|
|
2. **Stale open graduation PR.** `ohm-meta` PR #2 ("Graduate human →
|
|
RFC-0001", ohm-bot) is still open — a leftover from RFC-0001's
|
|
creation. Harmless but should be cleaned up.
|
|
3. **Idea-PR merge hygiene.** Even with the v0.30.1 fix, omit
|
|
`--delete-branch` on idea-PR merges to match the web UX. Encoded in
|
|
the runbook; could be enforced in `rfc-authoring.sh` (refuse
|
|
`--delete-branch` for `propose/*` heads).
|
|
|
|
---
|
|
|
|
## What lands on the operator's plate
|
|
|
|
1. **Decide #36** (meta-only vs. per-repo). Until then, do not graduate
|
|
RFC-0002 into its own repo. Authoring super-drafts is unblocked.
|
|
2. **Flesh out Informed Consent** — it's a live super-draft; the body
|
|
can grow via `edit/informed-consent/*` branches on ohm-meta (the
|
|
meta-only revision path, safe regardless of #36).
|
|
3. **GCP ADC** expires; `gcloud auth application-default login` needs to
|
|
actually complete (watch for "Credentials saved to file") before a
|
|
deploy.
|
|
|
|
---
|
|
|
|
## Prompt the operator can paste into the next Claude Code session
|
|
|
|
```
|
|
OHM driver session. Reserve your own session ID first
|
|
(~/git/ohm-infra/scripts/claim-session-id.sh --start <YYYY-MM-DDTHH-MM>).
|
|
|
|
Context from session 0040.0:
|
|
- ROADMAP #35 (operator RFC authoring lane) is PROVEN. The tool is
|
|
~/git/ohm-infra/scripts/rfc-authoring.sh (verbs: whoami/pr-create/
|
|
pr-merge/pr-list/pr-get/api); credential is a Ben-owned gitea PAT
|
|
(write:repository) in the macOS Keychain service `ohm-gitea-token`.
|
|
Full gesture + caveats: ~/git/ohm-infra/RFC-AUTHORING-LANE-RUNBOOK.md.
|
|
When merging idea PRs, do NOT pass --delete-branch (see runbook).
|
|
- "Informed Consent" is a live super-draft in wiggleverse/ohm-meta
|
|
(rfcs/informed-consent.md). To flesh out its body, use the meta-only
|
|
edit path: edit/informed-consent/* branch + PR on ohm-meta. This is
|
|
safe regardless of #36.
|
|
- ROADMAP #36 is OPEN and BLOCKING: decide repo-per-RFC vs. meta-only
|
|
topology (operator leans meta-only). It's a SPEC §1 + §13 framework
|
|
change. DO NOT graduate any RFC into its own repo until #36 is
|
|
decided. If the operator wants to settle #36, that's the next big
|
|
piece — draft the SPEC §1/§3/§13 revision + the rfc-app graduation-
|
|
flow change (in-place state flip, no repo creation).
|
|
- OHM live: v0.30.1 (deploys.id=43). rfc-app main 732b23b.
|
|
- Loose end: ohm-meta PR #2 (stale "Graduate human" PR from ohm-bot)
|
|
is still open — close it if convenient.
|
|
```
|