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 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-10-10 18:05:22 +02:00
commit 0172631821

View file

@ -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/<Name>`; 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\<Name>`; 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.<name>.v<n>` in `Eve/schemas/*.schema.json`, mirrored as constants in CultLib Rust and consumer runtimes | renamed to `gamecult.thing.<name>.v<n>` (same `v<n>`: 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\<Name>`; 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.<name>.v<n>` in `Eve/schemas/*.schema.json`, mirrored as constants in CultLib Rust and consumer runtimes | renamed to `gamecult.thing.<name>.v<n>` (same `v<n>`: 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.<x>` | `gamecult.thing.<x>` (same `v<n>`) |
| `mimir.eve_<x>`, `cultmesh.eve_surface.v0` | `mimir.thing_<x>`, `cultmesh.thing_surface.v0` |
| `org.gamecult.eve.<x>` (UPM), `org.gamecult.eve` (Android), `org.gamecult.evecanvas` (iOS) | `org.gamecult.thing.<x>`, `org.gamecult.thing`, `org.gamecult.thingcanvas` |
| `@gamecult/eve-<x>`, bins `eve-plugin-*`, `eve-tui` | `@gamecult/thing-<x>`, `thing-plugin-*`, `thing-tui` |
| `GameCult.Eve.<X>` (NuGet, asmdef, namespace), `Mimir.Eve<X>` | `GameCult.Thing.<X>`, `Mimir.Thing<X>` |
| mesh keys `eve:<family>:<id>`, IPC `eve:*` | `thing:<family>:<id>`, `thing:*` |
| URI and route segment `/eve/` (`cultmesh://<verse>/eve/...`, `<host>/eve/gui`, `/api/eve/*`) | `/thing/` |
| env and constants `EVE_<X>`, `<SVC>_EVE_<X>` | `THING_<X>`, `<SVC>_THING_<X>` |
| browser anatomy `cultui-*`; fixture extension `.eve` | `thingscript-*`; `.thingscript` (ruling `operator-dsl-thing-script`) |
| type and file names `Eve<X>`, ObjC prefix `EVE` | `Thing<X>`, `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-<label>.r1`, except
`kernel-schemas-contracts`, whose r1 was superseded the same day by `.r2`
(r1 listed edit windows in generator-owned `src/generated/` files).
`context-pack.py` read every anchor of every admitted spec SAME at its base
(kernel specs in this worktree at `8e270d6`; ops, VoidBot and site in detached
worktrees at their pinned heads). Question `compat-ids-reach-wire` names r1 in
`raised_in`, so the blocked-check recipe does not flag r2: a recurrence of
`gap-blocked-check-reads-raised-in-only`; r2 cites the question in `questions`.
Held specs (scratchpad `imagination/specs/<campaign>__<cut>.json`, complete
`cut_spec` values; repo names are post-rename, bases are the pinned heads):
- `thing-family`: `thingunity-wire`, `thingflutter-wire`,
`thingelectron-wire`, `thingtui-wire`, `thingplugins-wire`,
`thingconformance-wire`, `cultlib-wire`, `ymir-wire`. Build-time edges
(E5): any time after the kernel merge.
- `thing-verse`: `odin-wire`, `ghostlight-wire`, `heimdall-wire`,
`muninn-wire`, `mimir-wire`, `gjallar-wire`, `hermodr-wire` (window), and
`bifrost-wire` (blocked target, not window-bound).
- `thing-providers`: `streampixels-wire`, `vili-wire`, `stonks-wire`,
`weksa-wire` (window), `repixelizer-wire`, `sai-wire`, `loki-wire`,
`aquasynth-wire` (not live).
- Brokkr (two lines, not deployed) fits no campaign: follow-up
`brokkr-wire-unhomed`.
### Rationale: why the code rename needs three more campaigns
Campaign `thing` lists Eve, gamecult-site, gamecult-ops and VoidBot, its repo
list cannot grow, and a campaign holds at most 8 repos
(`gap-campaign-repos-fixed`). The rename touches 29 repos. Admitting the other
cuts under the campaigns that already own those repos was rejected: only
Ghostlight (ghostlight-verse, the other Self's area), CultLib (cultlib-gaps,
asura, variants) and Odin-adjacent repos have owners at all, so most repos
would still need a home, and the window's dependencies would be spread over
campaigns whose Selves do not run the window. The chosen shape: the kernel,
VoidBot, ops and site cuts stay in `thing` (where `depends_on` works), and the
Self admits three campaigns after `repo-renames` lands, so their repo lists
carry the new names:
- `thing-family`: GameCult/ThingUnity, ThingFlutter, ThingElectron, ThingTui,
ThingPlugins, ThingConformance, CultLib, Ymir. Title "Thing: the renderer
family and build-time consumers on thing ids". Working branch `thing/wire`.
- `thing-verse`: GameCult/Odin, Ghostlight, Heimdall, Muninn, Mimir, Gjallar,
Hermodr, Bifrost. Title "Thing: the Verse daemons on thing ids".
- `thing-providers`: GameCult/StreamPixels, Vili, Stonks, Weksa, repixelizer,
Sai, Loki, AquaSynth. Title "Thing: the provider daemons on thing ids".
Each takes `thing:target:r2` as its target document (a target per campaign
citing this section: invariants copied from r2, `doc` = this file at the
commit that lands revision 5). Cross-campaign dependencies are prose in
`first`, the workaround the gap names. The Ghostlight cut rides in
`thing-verse`, a campaign disjoint from `ghostlight-verse`; its `first` tells
Hands to rebase at window time and to coordinate with that Self. The kernel
specs name `GameCult/Eve` because `thing` cannot list `GameCult/Thing`; after
cut 3 that name resolves by redirect (model page, campaign repo list row).
### Rationale: why the Verse window and not per-host windows
B16: a provider and Odin disagreeing on the advertisement id is a provider
missing from discovery. Per-host windows would leave whole hosts invisible
between windows, which `rename-whole-per-edge` forbids. One window with Odin
first bounds the gap to the window's length, and lets every derived store be
deleted at the same restart. Window cuts land on `thing/wire` and wait there
for Soul; nothing reaches a default branch outside the window.
### Rationale: `eve-roadmap-remaining-work`
Its items (Android Kotlin and iOS UIKit lowerers to owner repos or retired;
runtimes through Odin's aggregated discovery; a networked CultMesh oracle
sample; surface contract split from iOS; binary sensor framing; live Mimir
presentation snapshots) are all renderer or architecture work, which target r2
puts out of scope ("an id changes, no shape changes"). None belongs in
`thing`'s target. They move unchanged into `docs/thing-migration-roadmap.md`
in `kernel-prose`; the follow-up can be withdrawn by Self with that reason.