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:
parent
8e270d6dc0
commit
0172631821
1 changed files with 347 additions and 3 deletions
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Reference in a new issue