From 0172631821fd1ada115b6175e625c60f2fff5702 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 10 Oct 2026 18:05:22 +0200 Subject: [PATCH] Thing map r5: the code rename (body facts B14-B24, rename table, edge table, cut order) Imagination pass, session self-thing-2026-10-10. Cut specs are in the eureka mind under campaign thing; held specs for the Thing* family, Verse and provider repos await campaigns thing-family, thing-verse and thing-providers after cut repo-renames lands. Co-Authored-By: Claude Opus 5.5 --- docs/thing-campaign.md | 350 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 347 insertions(+), 3 deletions(-) diff --git a/docs/thing-campaign.md b/docs/thing-campaign.md index 56b2307..5e5d93a 100644 --- a/docs/thing-campaign.md +++ b/docs/thing-campaign.md @@ -1,6 +1,10 @@ # Thing: the rename of Eve, map and target -Status: map, Imagination (`imagination-thing`), revision 4 of 2026-10-02. +Status: map, Imagination (`imagination-thing`), revision 5 of 2026-10-10. +Revision 5 maps the code rename (section "Revision 5: the code rename"): it +re-pins every repo, corrects the model page's schema-id row, supersedes the +section "Cut order after cut 1" with a new cut order, and records the +campaign split the 8-repo bound forces. Revision 4 of 2026-10-02 follows. Revision 4 adds the section "Fullscreen presentation" (ruling `thing:ruling:operator-deck-is-a-site-page`, question `thing-page-url`, cut `deck-site-page`, spec `docs/thing-cut-fullscreen.spec.json`); nothing before @@ -495,8 +499,8 @@ EveElectron 1, EveTui 1, Heimdall and EvePlugins 0. Four different things: | Kind | Identity | Lifecycle | Authority | | --- | --- | --- | --- | | GitHub repo name | `GameCult/`; injective within the org | renamed once; old name redirects until reused; never reused | operator via `gh repo rename`; Hands executes under a ruling | -| Local checkout path | `F:\Projects\`; sibling paths assumed by scripts and memory notes | renamed with the repo; stale paths are a defect | Hands in cut 2; memory notes in cut 3 | -| Schema id | `gamecult.eve..v` in `Eve/schemas/*.schema.json`, mirrored as constants in CultLib Rust and consumer runtimes | renamed to `gamecult.thing..v` (same `v`: the shape is unchanged); old id declared in `CompatibleSchemaIds` so stored records load; no alias on the wire (B10) | `operator-wire-rename-now`; owner of the id is the schema file in the kernel repo; each live Verse redeploys as one window | +| Local checkout path | `F:\Projects\`; sibling paths assumed by scripts and memory notes | renamed by the operator after the Verse window (revision 5); sibling-path defaults (`..\Eve`, `-EveRoot`) move in each repo's wire cut, explicit overrides cover the interval | operator; memory notes by Life at each cut | +| Schema id | `gamecult.eve..v` in `Eve/schemas/*.schema.json`, mirrored as constants in CultLib Rust and consumer runtimes | renamed to `gamecult.thing..v` (same `v`: the shape is unchanged); no alias on the wire (B10). Revision 5 (B19): in TypeScript a declared compatible id also answers wire requests, so whether stores read old records through `CompatibleSchemaIds` or are rebuilt is question `compat-ids-reach-wire` | `operator-wire-rename-now`; owner of the id is the schema file in the kernel repo; each live Verse redeploys as one window | | Provider type id | `mimir.eve_*.v1` and any other provider ids naming eve | provider-versioned | the provider repo, under `wire-names` | | Package id | `org.gamecult.eve.*` (UPM), `@gamecult/eve-*` (npm, unpublished), `org.gamecult.eve` / `org.gamecult.evecanvas` (installed app ids) | UPM renamed with a new tag that consumers repin to in their own cut; npm renamed in place (unpublished); app ids renamed, old installs removed by hand (B9) | `operator-wire-rename-now` | | Persona identity | `identityId: eve` (identity.json), `agentId` in `eve.cc`; Discord `roleId` numeric; registry entry on Starfire | retired: registry entry and role removed, state archived byte-identical with provenance, never read as live; nothing replaces it | `operator-retire-persona`; the archive is written once by Hands and owned by gamecult-ops; no live reader | @@ -726,6 +730,10 @@ dependency. ## Cut order after cut 1 +Superseded by "Revision 5: the code rename" below (2026-10-10): cuts 2-12 +here were never specified; their content is re-mapped there against current +heads, and cut 10's per-host windows violate `rename-whole-per-edge` (B16). + Each cut is one `cut_spec`; `depends_on` is in parentheses. Prose and display cuts come first because they are cheap and reversible; the wire cuts follow in producer-to-consumer order so that no live edge is ever @@ -1350,3 +1358,339 @@ The measurements, the mechanism and the authority map are in the site-wide masthead map, gamecult-site `docs/masthead-campaign.md`, section "Soul's findings after flat-nav". Allowed by `thing:ruling:operator-deck-polish`; no question is open. + +## Revision 5: the code rename (2026-10-10) + +Imagination (`imagination-thing-rename`, session `self-thing-2026-10-10`). +Rulings this section rests on: `thing:ruling:operator-wire-rename-now`, +`:operator-member-names-keep`, `:operator-dsl-thing-script`, +`:operator-retire-persona`, `:operator-aetheria-eve-rename`, +`:operator-aetheria-freeze-contents`, `:operator-epiphany-out-of-scope`, +`:operator-home-eve-repo`. Target in force: `thing:target:r2`. The probe +scripts are in the Self's scratchpad `imagination/` (`p1_heads.sh` to +`p6_members.py`, `gen_windows.py`, `gen_specs.py`); every anchor in every +spec was generated by `gen_windows.py` from `git grep` at the pinned head. + +### Pinned heads (read 2026-10-10 by `git fetch`, then the origin default branch) + +| Repo | Head | Last commit | +| --- | --- | --- | +| Eve | `8e270d6dc0199eb0708d570e4f7d2de03d13578a` | 2026-10-02 | +| EveTui | `01ea52f50d6ffcae290bbda8959e2ef73571d2cf` | 2026-07-10 | +| EveUnity | `92f0dbbc9bf77c232f0c6cf733f48af64c8ed6b6` | 2026-08-26 | +| EveFlutter | `3511e5c8f1ecd8e9ff119f3292afce84fa85a15d` | 2026-07-10 | +| EveElectron | `cba684c118fe99ce1ba9c110449d696e54f1eb7f` | 2026-09-13 | +| EvePlugins | `c5a4a75c1b727499b16c2dae1895f29e2a9f72f0` | 2026-07-15 | +| EveConformance | `048ea2f9fa502cf919730f446282ba2ded06d398` | 2026-09-16 | +| AetheriaEve | `6ecf25526d60aa7eb07c4dd716b83a6d411ae1d5` | 2026-09-29 | +| Ghostlight | `327cbe3c5e49fdfdce5898b1f01d3c3fe0936597` | 2026-10-10 | +| Odin | `8e1de662c75e09e5b93005b600ccdad1cc0e8387` | 2026-10-01 | +| VoidBot | `46d891b8410324aa30c86bedb3720d9cb8d511fa` | 2026-09-13 | +| gamecult-ops | `e4042ee3b83678c0b6f9b2a41088b4d9edea217e` | 2026-10-10 | +| gamecult-site | `8169ee5cd6f061f2ee40333a7ca0f492cc0cb498` | 2026-10-03 | +| CultLib | `dbcb2a8ea8084b3ade14482b57969e922fc0bc9e` | 2026-10-10 | +| Idunn | `6667f0f9a66f7c71446fcae15e0713127978a394` | 2026-10-01 | +| Mimir | `d88f2e6dc197b0e0292540c3ee38764b84a596d0` | 2026-09-14 | +| Bifrost | `67072b28923017f93f484d901c7a6d31e3678d88` | 2026-10-10 | +| Heimdall | `7904e17cd267c046e2fa08119f7ea310cbf68a83` | 2026-09-30 | +| Hermodr | `f8e6e8454ebe3f7760bd16795b92be89ae24dd7b` | 2026-09-06 | +| Gjallar | `6a9297642598b34bfbd2ca7b54af2d04df7bfa0c` | 2026-09-29 | +| Muninn | `1d0ea0b112d9f1d19e4dac745f5f6e6ccd6487c7` | 2026-09-30 | +| Stonks | `3f6e91c9628642eedb0a234c54ad03650f21d91e` (origin default is `codex/stonks-market-daemon`) | 2026-09-30 | +| Vili, Weksa, repixelizer, StreamPixels, AquaSynth, Brokkr, Loki, Sai, Ymir, Epiphany | `8773c15`, `d16cff5`, `06c1cf4`, `8d40541`, `aed6525`, `f97d4dc`, `b20fb98`, `2e7be7e`, `f8c0e39`, `ef95686` | 2026-06-13 to 2026-10-10 | + +### Body facts, revision 5 + +**B14. The eve wire ids reach 25 repositories outside Epiphany.** `p5_ids.py` +(code files only, docs and `dist/` excluded) finds 102 distinct eve-named ids; +50 of them leave the renderer family. `gamecult.eve.provider_advertisement.v1` +is carried by 24 repos, `gamecult.eve.surface.v1` by 24, +`gamecult.eve.surface_state.v1` by 13. `mimir.eve_*` (16 ids) sits in Mimir, +CultLib, Eve, Odin, VoidBot and gamecult-ops. Anchor windows per repo +(`gen_windows.py`, wire pattern only): Eve 282, EveUnity 163, EveConformance +104, Ghostlight 60, CultLib 48, EveTui 48, Mimir 41, EveFlutter 32, +EveElectron 31, VoidBot 29, EvePlugins 29, repixelizer 22, Heimdall 20, +Hermodr 17, Gjallar 15, Muninn 14, Sai 14, Bifrost 11, weksa 11, Odin 9, +gamecult-ops 9, Vili 10, Stonks 10, StreamPixels 7, gamecult-site 7, Loki 6, +AquaSynth 6, Ymir 4, Brokkr 1. Huginn and Aetheria carry the ids only in docs. + +**B15. What is live, from Idunn's own inventory** +(`gamecult-ops/scripts/idunn/idunn-deployment-targets.ps1` at `e4042ee`, and +`idunn/yggdrasil/bindings/*.toml.in`, `compose/odin.yggdrasil.yaml`): +Yggdrasil runs Odin, Ghostlight (own binding), Heimdall, the VoidBot swarm +publisher, StreamPixels, and a `hermodr` compose service whose Idunn target +says `archived`; Starfire runs Stonks, weksa, Muninn and the Idunn swarm +supervisor; Raven runs Muninn, Vili and sleipnir; Nightwing runs Muninn, +`gjallar.service` and `nightwing-eve-browser-reference` (Repo `Eve`). Blocked +or archived: Bifrost, repixelizer, `eve-ipad-evecanvas`, +`periwinkle-eve-android`, `nightwing-eve-dashboard`. Not deployed by any +target: Sai, Loki, AquaSynth, Brokkr, Ymir, Epiphany. + +**B16. The discovery ids are one Verse-wide edge.** Every live provider in B15 +publishes `gamecult.eve.provider_advertisement.v1` and `surface*` documents +that Odin aggregates (`Odin/crates/odin-core/src/documents.rs`), and Rust +readers drop unknown records (B10). A provider on old ids after Odin flips is +invisible, and so is a provider on new ids before. So the provider, surface, +surface_state, interface_binding, command, plugin_advertisement and +`mimir.eve_sensor_observation` ids form **one** live edge across four hosts, +and the map's old cut 10 ("per host, each in its own deploy window") would +break it. The window is Verse-wide. + +**B17. Ghostlight vendors a kernel commit that is not on Eve's main.** +`Ghostlight` at `327cbe3`: gitlink `vendor/eve` = `672c0c1` (2026-08-25), +reachable only from `origin/codex/eve-browser-host-isolation` (7 commits ahead +of Eve main, 18 behind). `git merge-tree --write-tree origin/main +origin/codex/eve-browser-host-isolation` is clean; the branch touches +`Sources/`, `README.md`, `control`, `Makefile`, two docs and +`packages/eve-browser-lowering/{src,dist,test,docs}`. Ghostlight's routes +`/api/eve/{provider,surfaces/{id},commands,events}` (`runtime.rs:655-658`) are +called by its own web client; its four `#[ignore]` client-bridge tests +(`runtime.rs:3140, 3834, 3948, 4054`) need a built `vendor/eve` lowering and +run on no automated path (`ghostlight-verse:follow_up:gate-runs-eve-bridge-tests`). + +**B18. Idunn reads the gitlink origin from the binding, and pins the key.** +`Idunn` at `6667f0f`: `deployment_plan.rs:118-131` requires the binding's +gitlink keys to equal the observed gitlinks and each origin to equal the +binding's; `deployment.rs:1440-1443` requires the binding keys to equal the +recipe's `required_gitlinks`; `drivers.rs:1544` clones the gitlink from the +binding's origin. So the binding's origin URL can move to `Thing.git` any time +after the GitHub rename (the old URL also redirects), but renaming the key +`vendor/eve` to `vendor/thing` must land with Ghostlight's recipe in the same +deploy. `scripts/deploy-ghostlight-yggdrasil.sh` also reads the `vendor/eve` +path (lines 887, 957, 1269) and writes receipt member `eve_commit`. + +**B19. In TypeScript a compatible schema id is a wire path, not only a store +path.** `CultLib` at `dbcb2a8`: `packages/cultnet-ts/src/replication.ts:399` +answers a replication request when any of a definition's +`compatibleSchemaIds` is requested, and `packages/cultmesh-ts/src/index.ts:6625` +matches catalog entries the same way. Declaring the old id compatible on a +TypeScript type therefore answers old-id requests on the wire: the accept-both +path target r2 forbids. Rust `cultcache-rs` still has no compatible-id path, +and 52 non-test references to the alias API remain in CultLib. Hence question +`compat-ids-reach-wire`. + +**B20. Nothing is published to a registry.** `registry.npmjs.org` answers 404 +for `@gamecult/eve-{contracts,browser-lowering,tui,plugins,conformance,electron}`; +`api.nuget.org` 404 for `gamecult.eve.surface` and `gamecult.eve.pluginfields`; +`pub.dev` 404 for `eve_parity`. No family workflow publishes (Eve's one +workflow, `portable-contracts.yml`, runs `npm ci` and `npm test`). Every +package rename is in place; no deprecation of a published name is owed. No +workflow anywhere uses `uses: GameCult/Eve*` (B2's failure mode is absent). +CultLib's `cultmesh-portability.yml:48` runs `verify-eve-getting-started.ps1 +-EveRoot ./Eve` against a checkout of the Eve repo. + +**B20a. Still no forge mirror.** 2026-10-10: +`https://eureka.gamecult.org/forge/api/v1/repos/search?q=eve` returns no +repos, and an unfiltered search lists only `GameCult/Eureka`. Target r2's +"Forgejo (no mirrors exist)" holds; no cut renames anything on the forge. + +**B21. Git-URL pins to the family** (`p4_pins.py`): Unity manifests in +AetheriaEve (frozen) and EveUnity's `ReleaseConsumerProject` pin +`GameCult/Eve.git`, `EveUnity.git`, `EvePlugins.git` by sha or tag; +`EveConformance/conformance-workspace.lock.json` pins six family repos by +commit; `Ghostlight/.gitmodules`; `Gjallar/deploy/bootstrap-yggdrasil.sh:22`; +`gamecult-ops` `ghostlight.toml.in:14` and `deploy-ghostlight-yggdrasil.sh:20`. +All resolve through GitHub's redirect after the rename (B2), so no pin breaks +at rename time; each moves in its repo's wire cut. + +**B22. Doctrine surfaces.** `F:\Projects\CLAUDE.md` is in no repository +(`git rev-parse` fails there); it names Eve at lines 23, 24, 26, 28 (Eve's +DSL, Eve MultiVerse) and 90. The global doctrine is +`~/.claude/skills/eureka/doctrine/CLAUDE.md`, a checkout of +`eureka.gamecult.org/forge/GameCult/Eureka` at `278b881`; it names Eve at line +186. `SKILL.md:82` (the AetheriaEve taxidermy scar) is historical. Agents, +output styles and `~/.claude/doctrine/*` other than the doctrine `CLAUDE.md` +carry no Eve. Memory files naming the family: `F--Projects/memory/` +`{aetheriaeve-taxidermy, cheap-signal-is-not-evidence, +cultcache-stores-outside-assets, eureka-memory-organ, MEMORY, +pending-doctrine-proposals}.md`, `F--Projects-CultLib/memory/MEMORY.md`, +`F--Projects-Aetheria/memory/{aetheria-content-audits-pre-breach, +aetheria-cultcache-migration, aetheria-ship-the-game, MEMORY}.md`. + +**B23. Epiphany's exclusion.** Epiphany at `ef95686` produces +`gamecult.eve.surface.v1` and provider advertisements in +`epiphany-core/src/atlas/eve_surface.rs` (also `repo_model_documents.rs`, +`atlas/tests.rs`, `epiphany-openai-runtime/src/lib.rs`). No Idunn target runs +it, and outside Epiphany the atlas ids appear only in the dated census under +`gamecult-ops/docs/repo-census-2026-09/`. So no live consumer depends on +Epiphany's eve ids; ruling `operator-epiphany-out-of-scope` excludes those +four files, its docs and its schema mirrors, and after the window an Epiphany +run would publish ids nothing reads. + +**B24. Eve-named members.** `p6_members.py` finds 42 identifiers matching +`eve_*`/`eve[A-Z]*` followed by `:` or `=`; nearly all are locals or option +names, which rename freely. The schema members the ruling keeps are the ones +inside a typed document: confirmed is Ghostlight's deployment receipt +`eve_commit` (`gamecult.ghostlight.deployment.v2`, written by +`deploy-ghostlight-yggdrasil.sh`); each wire cut's Hands checks any other +candidate against its schema before renaming (follow-up `member-names-next-revision`). + +### Model page, revision 5 additions + +| Kind | Identity | Lifecycle | Authority | +| --- | --- | --- | --- | +| Gitlink path | `vendor/eve` in Ghostlight's tree and `.gitmodules`; key of the Idunn binding and of the recipe's `required_gitlinks` | moved once to `vendor/thing` in the Verse window; the binding key, recipe and tree move in one deploy (B18) | Ghostlight owns the tree path; gamecult-ops owns the installed binding; Idunn only checks they agree | +| Idunn target and unit id | `eve-ipad-evecanvas`, `periwinkle-eve-android`, `nightwing-eve-browser-reference`, `nightwing-eve-dashboard` (archived) | renamed `thing-*` in the window; the archived one renamed in the record only | gamecult-ops inventory; Idunn reads it | +| Stored document (`.cc` holding eve-typed records) | the store file plus the schema id of each record | derived stores (Odin `odin.cc`, VoidBot swarm state, weksa witnesses, Ghostlight `mesh-v2.cc`, Bifrost surfaces) are deleted and rebuilt by their daemon in the window; any store that is truth waits on `compat-ids-reach-wire` | the owning daemon; no agent rewrites a store in place | +| Campaign repo list | `OrgRepo` strings fixed at campaign admission | cannot follow a GitHub rename: `thing` keeps `GameCult/Eve`, which then names `GameCult/Thing` by redirect | Self admits campaigns; gap `eureka-substrate:follow_up:gap-campaign-repos-fixed` (recurrence recorded here) | + +Every row has all three cells; no cut below is mapped on an empty cell. + +### Rename table T (the single copy every spec cites) + +| Old | New | +| --- | --- | +| `gamecult.eve.` | `gamecult.thing.` (same `v`) | +| `mimir.eve_`, `cultmesh.eve_surface.v0` | `mimir.thing_`, `cultmesh.thing_surface.v0` | +| `org.gamecult.eve.` (UPM), `org.gamecult.eve` (Android), `org.gamecult.evecanvas` (iOS) | `org.gamecult.thing.`, `org.gamecult.thing`, `org.gamecult.thingcanvas` | +| `@gamecult/eve-`, bins `eve-plugin-*`, `eve-tui` | `@gamecult/thing-`, `thing-plugin-*`, `thing-tui` | +| `GameCult.Eve.` (NuGet, asmdef, namespace), `Mimir.Eve` | `GameCult.Thing.`, `Mimir.Thing` | +| mesh keys `eve::`, IPC `eve:*` | `thing::`, `thing:*` | +| URI and route segment `/eve/` (`cultmesh:///eve/...`, `/eve/gui`, `/api/eve/*`) | `/thing/` | +| env and constants `EVE_`, `_EVE_` | `THING_`, `_THING_` | +| browser anatomy `cultui-*`; fixture extension `.eve` | `thingscript-*`; `.thingscript` (ruling `operator-dsl-thing-script`) | +| type and file names `Eve`, ObjC prefix `EVE` | `Thing`, `THG` | +| gitlink `vendor/eve` | `vendor/thing` | +| schema members `eve_*` (e.g. `eve_commit`) | **unchanged** (ruling `operator-member-names-keep`) | +| filesystem paths on Yggdrasil `/srv/repos/Eve`, `/srv/build/Eve` | **unchanged** (target r2 not in scope) | + +### Edges: lockstep or not + +| Edge | Producers and consumers | Kind | Order | +| --- | --- | --- | --- | +| E1 discovery: provider_advertisement, surface, surface_state, interface_binding, command*, plugin_advertisement, plugin_abi*, `/eve/` semantic services, `mimir.eve_sensor_observation` | Odin; live providers Ghostlight, Heimdall, VoidBot, StreamPixels, Muninn (3 hosts), sleipnir, Vili, Stonks, weksa, Gjallar, the nightwing browser reference, Hermodr if running; the kernel browser lowering in their clients | **lockstep**: one Idunn window over yggdrasil, starfire, raven, nightwing | merge Thing first; Odin deployed first with `odin.cc` deleted; then every provider in the same window. Odin's catalog is short of not-yet-flipped providers for the window's length | +| E2 Ghostlight internal: `/api/eve/*`, local_draft, command_invocation, vendored lowering | Ghostlight server, its web client, `vendor/eve` | **lockstep inside one commit** of Ghostlight | deploys inside the E1 window | +| E3 binding key `vendor/eve` | gamecult-ops `ghostlight.toml.in`, Ghostlight `recipe.toml`, Idunn's check | **lockstep** (Idunn refuses a mismatch, B18) | binding installed with the Ghostlight deploy in the window | +| E4 env names `HERMODR_EVE_*`, `MIMIR_EVE_*`, unit names | each compose or unit file with its daemon | lockstep per service | inside the window | +| E5 build-time pins: UPM git URLs, conformance lock, `file:` npm deps, NuGet `GameCult.Eve.Surface` ProjectReferences, Kotlin `org.gamecult.cultmesh.eve` | family runtimes, CultLib, Ymir, AetheriaThing (frozen) | compat: a pin is immutable and resolves through the redirect | each consumer repins in its own cut after the kernel merge | +| E6 stores | `odin.cc`, VoidBot swarm state, weksa, Ghostlight `mesh-v2.cc`, Bifrost `provider-store.cc` and `eve-surfaces.cc`, Heimdall verse state, repixelizer | derived: delete and rebuild at the owning daemon's restart in the window; truth: question `compat-ids-reach-wire` | with E1 | +| E7 app ids | Android and iOS builds | no live edge (both targets blocked) | with `kernel-dotnet-apps`; two operator uninstalls | +| Not live | Bifrost, repixelizer, Sai, Loki, AquaSynth, Brokkr, Ymir | none | any time after the kernel merge | +| Excluded | Epiphany (B23), AetheriaThing contents (ruling freeze) | none | never | + +### Authority map, revision 5 + +- **Owner of each wire id:** the schema file in `Thing/schemas/`, or the + provider repo for its own ids (`mimir.*`). Every consumer copies the exact + string (C1). **The old id is no longer an owner of anything:** after the + window no reader asks for it and no writer emits it. +- **Owner of the flip:** cut `verse-window` alone schedules and accepts the + change of every live edge. **A `thing/wire` branch is no longer a deploy + input until the window merges it.** Every window cut lands on `thing/wire`, + Soul holds it there, and the window merges and deploys them together. +- **Derived state:** `dist/` and `src/generated/` are build output; Odin's + catalog and every derived `.cc` store are rebuilt from their sources; the + site's `gamecult-compound` data is regenerated. +- **Forbidden writers:** any alias, `AsSchemaAlias`, `CompatibleSchemaIds` on + a wire type (until `compat-ids-reach-wire` rules), or "accept both" reader; + a `thing/wire` branch merged outside the window; a hand edit of `dist/`, + generated data or a `.cc` store; any repo named `Eve*` created after the + rename; an agent editing doctrine before the window (doctrine naming ids + that do not exist yet would be false). +- **Shared paths:** one rename table (T) for every runtime; Idunn deploys + every host from merged default branches. +- **Deletion line:** every eve declaration is replaced in place; nothing is + kept beside its new name. The Persona's live surfaces are deleted after the + archive is taken. + +### Cut order, revision 5 + +Under campaign `thing` (admitted, `depends_on` by cut label): + +1. `persona-archive` (gamecult-ops, none): the byte-identical archive. The + two operator steps (registry entry, Discord role) follow it. +2. `persona-takedown` (Eve, `persona-archive`): `.voidbot/` and the persona + doc leave the kernel repo before it is renamed, so the repo never carries a + live Persona under the name Thing. +3. `repo-renames` (gamecult-ops, `persona-takedown`): the eight GitHub + renames and the ops URLs. Repos before ids: every later cut writes + `GameCult/Thing*.git` URLs, which must exist. +4. `kernel-schemas-contracts` (Eve, `repo-renames`), with the host-isolation + merge as its first commit (B17); then 5. `kernel-lowering-scripts`, then + 6. `kernel-dotnet-apps`. Split three ways because 282 windows exceed one + spec and one Hands pass; all three land on `thing/wire`. +7. `voidbot-wire` (VoidBot, `kernel-schemas-contracts`), on `thing/wire`. +8. `verse-window` (gamecult-ops, `repo-renames`, `kernel-dotnet-apps`, + `voidbot-wire`; and in its `first`, every held window cut below). +9. `site-prose` (gamecult-site, `repo-renames`, `persona-takedown`): any time + after the rename; the card names the contract, not ids. +10. `kernel-prose` and 11. `ops-prose` (`verse-window`): READMEs and docs + state the new ids once they exist. +12. Doctrine (follow-up `doctrine-in-step`): after the window, Self edits + `F:\Projects\CLAUDE.md` lines 23, 24, 26, 28, 90 and Eureka + `doctrine/CLAUDE.md:186`, citing the Thing README "Naming" section. + +Admitted 2026-10-10 as `thing:cut_spec:cut-