# Session 0013.2 — Transcript (subsession) > Parent: SESSION-0013.0-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.org` and `git.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.md` written 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 0013.0 (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; the `ohm-app` legacy 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 0013.0'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 of `wiggleverse/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="//"` 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//` 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///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 `307` for `ben/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.md` and `SPEC.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 hardcode `ben/ohm-rfc` four 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), `.rfc` marker, README that says "canonical text lives here; meta-repo entry is `rfcs/human.md` in 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** as `rfc-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 0013.0 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): 1. **Stop relying on Gitea path aliases.** flotilla currently leans on the `ben/ohm-rfc` → `ben.stull/ohm-rfc` redirect alias (urllib follows 307s). After Moves 3+4, that chain becomes two hops. Better: resolve canonical paths at `flotilla deployment update` time, store the resolved path in SQLite, never chase aliases at deploy time. 2. **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 future `flotilla-core` §19.2 extraction. Operator decision (Q3). A third candidate **not** in the proposal but worth a separate item: 3. **Promote `~/git/ohm-infra/` to a real git repo.** Currently a working dir with no version control on `SESSION-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 1. **Proposal lives at `~/git/ohm-infra/REPO-NAMING-PROPOSAL.md`** and is ready for operator review. 2. **Six open questions** the operator must settle before the execution session. Q1 is structural (monorepo vs per-RFC) and may reshape the proposal entirely. 3. **Biggest finding not in roadmap #17:** `wiggleverse/meta`, `wiggleverse/ohm-meta`, and `wiggleverse/rfc-0001-human` are three repos for one job. Monorepo has won in practice; archive the other two if operator confirms. 4. **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). 5. **flotilla test files hardcode `ben/ohm-rfc` in four places** (`test_plan.py`, `test_pin.py`, `test_bringup_replay.py`, `test_deployment.py`). These must update with Move 4. 6. **The flotilla SQLite registry** at `~/.ohm-rfc-app-flotilla/ohm-rfc-app-flotilla.db` has `pin_source_repo` and `corpus_repo` both set to `ben/ohm-rfc`. Must be updated post-Move-4 or next deploy chases a redirect. 7. **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. 8. **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: 1. Operator reads `REPO-NAMING-PROPOSAL.md`, settles Q1–Q6. 2. Operator backs up `~/git/ohm-infra/` (Q6 / §3.4 surfaced) if not yet a real repo. 3. 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").