12 KiB
Session M.2 — Transcript (subsession)
Parent: SESSION-M-TRANSCRIPT-2026-05-28T05-26--INPROGRESS.md Date: 2026-05-28 Goal: Roadmap item #17 step 1 (inventory) + step 2 (propose) — survey every repo on
git.wiggleverse.organdgit.benstull.org, draft the move proposal as a single document for the operator to review. Step 3 (execute) is explicitly out of scope.Outcome:
REPO-NAMING-PROPOSAL.mdwritten to~/git/ohm-infra/. 12 repos inventoried across the two hosts plus 9 local-only working dirs documented. 8 moves proposed (3 archives, 2 namespace transfers, 3 operator-decision items). 6 open questions surfaced. Zero git operations performed against any remote.
This is a subsession of Session M (the OHM driver session). The driver dispatched M.2 with a tight read-only-inventory + single-deliverable brief. Subsession boundaries follow the OHM session protocol §1 (letter+number scheme — M.2 is the second subsession of M).
Pre-session state
The driver's hand-off named:
- 9 known wiggleverse.org repos (driver named 3; M.2 inventoried the rest via Gitea explore endpoint).
- 3 known benstull.org repos (same).
- Roadmap item #17 ("Repo naming + location alignment") names the
framing: rfc-app should be in
wiggleverse/, not personal namespace; mirror convention undocumented; theohm-applegacy VM (tracked separately as roadmap #1, out of scope for M.2). - Hard constraint: subsession publishes its transcript to
wiggleverse/ohm-session-history(public). No secret bytes. - Hard constraint: no Gitea admin actions, no transfers, no edits to anything but the proposal document itself.
Operator's working tree (parent session M's pre-state): clean. Active OHM deployment: v0.17.0 (deploys.id=21). Pin: 0.17.0. Healthy.
Turn-by-turn arc
Arc 1 — Read roadmap #17 + scout local checkouts
Read ~/projects/wiggleverse/ohm-rfc/ROADMAP.md lines 314+ for
item #17's full statement. The session-shape it names is:
inventory → propose → execute. M.2 owns the first two.
Listed ~/git/ and ~/projects/wiggleverse/ to map local checkouts:
~/git/: ohm-infra (not a git repo!), ohm-meta (empty), rfc-app (canonical clone), rfc-app-v0.15/v0.16/v0.17 (per-release worktrees), wiggleverse-meta (clone ofwiggleverse/meta), benstull-infra (not a repo, just two old transcript MDs).~/projects/wiggleverse/: ohm-rfc (clone), ohm-rfc-app-flotilla (clone), rfc-app-prototype (clone), org/ (not inspected).
Already a discovered-friction item: ~/git/ohm-infra/ not being a
git repo is structurally weird. Filed as §3.4 in the proposal.
Arc 2 — Inventory both Gitea hosts
curl https://git.wiggleverse.org/explore/repos and the equivalent
on benstull.org returned HTTP 200 HTML for both — anonymous explore
works. Parsed out href="/<owner>/<name>" links.
Wiggleverse.org reported 9 repos:
ben.stull/{benstull,ohm-rfc,rfc-app,rfc-app-prototype}wiggleverse/{meta,ohm-meta,ohm-rfc-app-flotilla,ohm-session-history,rfc-0001-human}
Benstull.org reported 3:
benstull/{docs,rfc-app,rfc-app-flotilla}
For each, hit /api/v1/repos/<owner>/<name> for metadata (description,
created/updated, default branch, size, mirror flag, private flag).
All API calls anonymous; all returned 200. No auth needed for this
inventory.
Also hit /api/v1/repos/<owner>/<name>/commits?limit=1 per repo for
the actual last-commit timestamp and message — updated_at from the
repo metadata wasn't always commit-tied (could be a description edit).
Arc 3 — Confirm the push-mirror mechanism
ben.stull/rfc-app and benstull/rfc-app both reported commit
1456c8b73f70 at 2026-05-28T05:10:52-07:00 — same sha, same
timestamp within seconds. But neither was flagged mirror: True
in the API. Tried /api/v1/repos/.../push_mirrors — returned
"user should be an owner or a collaborator with admin write," so
the push-mirror config is admin-only-visible.
Conclusion: the sync mechanism is a push-mirror configured by the operator on the canonical side, invisible to the public read API. Worth a note in the proposal — operator needs to reauthorize it after Move 3.
Also noticed: the descriptions of the canonical and mirror have drifted apart ("The Wiggleverse RFC framework app — see PHILOSOPHY.md and SPEC.md." vs "Open-source RFC platform software"). Filed under §3.3.
Arc 4 — Probe URL-redirect handling on Gitea
The flotilla CHANGELOG L282–283 has a note about ben/ohm-rfc being
a redirect alias to ben.stull/ohm-rfc. Tested:
/api/v1/repos/ben/ohm-rfc→ HTTP 307/api/v1/repos/ben.stull/ohm-rfc→ HTTP 200- Same
307forben/rfc-app,ben/benstull,ben/rfc-app-prototype.
Conclusion: ben is an old username that aliases to ben.stull via
Gitea's user-rename redirect feature. This matters because if Moves
3+4 land, the alias chain becomes two hops: ben → ben.stull → wiggleverse. Filed as risk in Move 4 and as Q5.
Arc 5 — Find URL refs in load-bearing docs
grep -nE 'git\.(wiggleverse|benstull)\.org' against:
~/git/rfc-app/CLAUDE.mdandSPEC.md→ zero hits. rfc-app source doesn't reference the hosting URLs. Good — moves don't break shipped framework code.~/git/rfc-app/frontend/→ zero hits. The running frontend doesn't embed the canonical URL. Confirms zero shipped-artifact breakage.~/projects/wiggleverse/ohm-rfc-app-flotilla/CLAUDE.md,SPEC.md,README.md,CHANGELOG.md,docs/operator-guide.md,scripts/,tests/→ many hits. Catalogued line-by-line in the proposal's Moves 3 and 4 sections. Test files hardcodeben/ohm-rfcfour places. The SPEC has it ~10 places, plus a whole framing paragraph in §3.1 about why rfc-app gets a benstull mirror that needs conceptual rewriting, not just URL swapping.~/projects/wiggleverse/ohm-rfc/ROADMAP.md→ many hits including the entire §16 release-table (rows 2–13) with tag URLs. Note in proposal: those should probably stay (they record historical state) but Gitea's redirect will keep them resolving.~/git/ohm-infra/SESSION-*-TRANSCRIPT-*.md→ many hits. Per session protocol these are immutable. Gitea's redirect handles them. Filed explicitly in the proposal's "do NOT edit historical transcripts" callout.
Arc 6 — Inspect overlapping meta-repo content
wiggleverse/meta, wiggleverse/ohm-meta, and
wiggleverse/rfc-0001-human all had READMEs and rfcs/ dirs.
Fetched contents via API.
wiggleverse/meta:PHILOSOPHY.md(12 KB),CONTRIBUTING.md(626 B),rfcs/.gitkeep, generic README.wiggleverse/ohm-meta:PHILOSOPHY.md(12 KB),CONTRIBUTING.md(626 B),rfcs/human.md(292 B stub), README.wiggleverse/rfc-0001-human:RFC.md(22 KB, the full body),.rfcmarker, README that says "canonical text lives here; meta-repo entry isrfcs/human.mdin ohm-meta."ben.stull/ohm-rfc:PHILOSOPHY.md(13.5 KB — superset),CONTRIBUTING.md(4.5 KB — superset),RFC-0001-human.md(22 KB — same body asrfc-0001-human/RFC.md),ROADMAP.md(61 KB),CLAUDE.md,LICENSE,.rfc-app-version.
The proposal's §2 Move 2 names the collision: two models ("per-RFC repos" vs "monorepo") both exist, monorepo has won in practice. Operator decision Q1 settles whether to archive the per-RFC repos.
Arc 7 — Confirm flotilla SQLite registry state
sqlite3 ~/.ohm-rfc-app-flotilla/ohm-rfc-app-flotilla.db 'SELECT * FROM deployments;' returned the ohm-rfc-app row with
pin_source_repo='ben/ohm-rfc' and corpus_repo='ben/ohm-rfc'.
Important: after Move 4, the operator must run a flotilla command to update these values, or the next deploy chases a two-hop redirect. Flagged in Move 4 cross-repo-cleanup section.
Arc 8 — Write the proposal
Wrote ~/git/ohm-infra/REPO-NAMING-PROPOSAL.md (~22 KB) covering:
- §1 inventory: two host tables + local-only working dirs + topology snapshot
- §2 move proposal: 8 moves with risk, ordering, URL-breakage callouts, specific paths
- §3 discovered friction: 6 items (confirmed roadmap #17's plus 4 new)
- §4 open questions: 6 (Q1 RFC-shape, Q2 mirror destination, Q3 stub fate, Q4 ohm-infra-as-repo, Q5 username alias, Q6 backup before)
- §5 suggested execution-session shape: pre-flight checklist, ordered execution, Gitea-admin vs git-cli vs edit-text gestures, verify
- §6 §19.2 candidates surfaced
- §7 summary table
No git operations against any remote. No edits to anything besides the proposal doc itself.
Cut state (end of subsession)
~/git/ohm-infra/REPO-NAMING-PROPOSAL.md |
new file, ~22 KB, M.2's only artifact |
| Every other repo (local + remote) | untouched |
| OHM live | unchanged (deploys.id=21, v0.17.0, healthy) |
| flotilla SQLite registry | unchanged |
| Parent session M state | unchanged |
| M.2 deliverable ledger | Status |
|---|---|
| Read roadmap #17 in full | done |
| Inventory wiggleverse.org repos | done (9 found) |
| Inventory benstull.org repos | done (3 found) |
| Cross-reference local checkouts | done |
| Read CLAUDE.md/SPEC.md/ROADMAP.md for URL refs | done |
| Write proposal doc | done |
| Write transcript | done (this file) |
| Publish transcript to ohm-session-history | driver does this, not subsession (per protocol §"subagents do not write their own transcripts" — but the brief overrode that and asked M.2 to write one; M.2 wrote, driver publishes) |
§19.2 candidates surfaced
Two surfaced during M.2 (also in proposal §6):
- Stop relying on Gitea path aliases. flotilla currently leans
on the
ben/ohm-rfc→ben.stull/ohm-rfcredirect alias (urllib follows 307s). After Moves 3+4, that chain becomes two hops. Better: resolve canonical paths atflotilla deployment updatetime, store the resolved path in SQLite, never chase aliases at deploy time. - flotilla-core extraction reservation as concrete artifact.
The stub repo
git.benstull.org/benstull/rfc-app-flotilla(Move 5) could either be archived or repurposed as the placeholder for the futureflotilla-core§19.2 extraction. Operator decision (Q3).
A third candidate not in the proposal but worth a separate item:
- Promote
~/git/ohm-infra/to a real git repo. Currently a working dir with no version control onSESSION-PROTOCOL.md, the publish script, the transcript-publishing plan, etc. Roadmap #17 scope doesn't cover it but the inventory surfaced it (§3.4). Worth its own roadmap item.
What the driver needs to know
- Proposal lives at
~/git/ohm-infra/REPO-NAMING-PROPOSAL.mdand is ready for operator review. - Six open questions the operator must settle before the execution session. Q1 is structural (monorepo vs per-RFC) and may reshape the proposal entirely.
- Biggest finding not in roadmap #17:
wiggleverse/meta,wiggleverse/ohm-meta, andwiggleverse/rfc-0001-humanare three repos for one job. Monorepo has won in practice; archive the other two if operator confirms. - Biggest cross-repo cleanup load: the flotilla SPEC.md needs ~10 URL updates plus a conceptual rewrite of the §3.1 paragraph that explains why rfc-app has a benstull mirror (the "personal shape" rationale dissolves once rfc-app moves to org namespace).
- flotilla test files hardcode
ben/ohm-rfcin four places (test_plan.py,test_pin.py,test_bringup_replay.py,test_deployment.py). These must update with Move 4. - The flotilla SQLite registry at
~/.ohm-rfc-app-flotilla/ohm-rfc-app-flotilla.dbhaspin_source_repoandcorpus_repoboth set toben/ohm-rfc. Must be updated post-Move-4 or next deploy chases a redirect. - No shipped frontend artifacts reference the canonical URLs. This is the load-lightening discovery: the moves don't break anything that an OHM end-user sees.
- No git operations were performed by M.2 against any remote. Read-only inventory, single new file (the proposal), this transcript.
Closing handoff to driver
M.2 is done. The driver returns control to the operator with the proposal ready for review. The next OHM session that wants to execute roadmap #17 picks up by:
- Operator reads
REPO-NAMING-PROPOSAL.md, settles Q1–Q6. - Operator backs up
~/git/ohm-infra/(Q6 / §3.4 surfaced) if not yet a real repo. - Driver session opens, follows the execution shape in proposal §5.
That execution session is operator-led (per the brief that dispatched M.2: "step 3 is operator-led in a future session").