Files
session-history/SESSION-M.2-TRANSCRIPT-2026-05-28T05-30--2026-05-28T05-37.md
T

12 KiB
Raw Blame History

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.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 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; 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 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 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="/<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 L282283 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 213) 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 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):

  1. Stop relying on Gitea path aliases. flotilla currently leans on the ben/ohm-rfcben.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:

  1. 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 Q1Q6.
  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").