eureka-body map: connector-kit-lift probes (F26-F29), its cut line, path B refreshed

Imagination imagination-kit-lift, session self-2026-10-28-eureka. Spec
eureka-body:cut_spec:cut-connector-kit-lift.r1; questions connector-kit-relicense
and codex-connector-fate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-10-28 04:04:20 +01:00
commit 3f47de5122

View file

@ -44,6 +44,13 @@ and "How a Self run is carried" is new. Specs: `cut-mind-self-run.r1`,
`cut-mind-body-riders.r1`. Questions: `first-self-run-starter`, `self-run-permissions`. Probe
outputs: `F:\Projects\eureka-handoff-aux-2026-10-22\imag-self-run\`.
Revised again on 2026-10-28 by Imagination (`imagination-kit-lift`, session
`self-2026-10-28-eureka`) at CodexConnector `fd7cec4`, Ghostlight `c43eb54` and ModelConnector
`1cf879f`, for cut `connector-kit-lift`. New facts F26-F29, new rationale "Where the kit lift's
cut line falls", path B refreshed. Spec: `cut-connector-kit-lift.r1`. Questions:
`connector-kit-relicense` (blocks the spec), `codex-connector-fate`. The baseline probe log was
a session scratchpad file and is not kept; its counts are in F26.
## Pinned heads (fetched 2026-10-08 ~12:10 UTC)
| Repo | Ref | Commit | Note |
@ -318,6 +325,48 @@ Each line: what was run, where, result.
correctness holds under either delivery, and its operator verification probes both on
Yggdrasil with her token.
- **F26 CodexConnector at origin/main `fd7cec4` builds and tests green** (2026-10-28, Yggdrasil,
ygg-verify rust image, `cargo build --features daemon --all-targets`, `cargo test --features
daemon`, `cargo test`): 46 lib + 1 bin tests with `daemon`, 11 lib tests without. `fd7cec4` is
F10's `3ddc12e` plus a README merge; F10's line numbers still hold. Files: `src/lib.rs` 1,958,
`daemon.rs` 1,180, `provider_backend.rs` 1,463, `idunn_health.rs` 1,396, `main.rs` 188, no
`vendor/`. CultLib pinned at `e171eca` (2026-09-04); 248 CultLib commits touch
`packages/cultcache-rs` or `packages/cultnet-rs` since, and the store API the connector uses
(`OwnedRedbMessagePackBackingStore`, `SingleFileMessagePackBackingStore`, `register_entry_type`,
`pull_all_backing_stores`, `get_all_with_keys`) still exists at CultLib `a4eae90`.
- **F27 What is provider-neutral and what is Codex** (source read, `fd7cec4`). Neutral: the contract
types and validation (`lib.rs:51-485`, `622-631`, `1351-1415`), the AES-256-GCM envelope and
four-byte big-endian framing (`633-710`, `824-952`), the one-request client (`711-833`), caller
admission and the CultCache replay service (`954-1313`), and the accept loop
(`daemon.rs:344-380`, `565-740`). The daemon calls its backend at exactly two points,
`readiness()` and `execute(&invocation) -> CodexTransportResult` (`daemon.rs:592-653`), so one
trait is the whole seam. Codex: `provider_backend.rs` (the pinned `codex app-server` child,
`auth.json`, Responses SSE parsing), the Responses lowering `canonical_responses_body`
(`lib.rs:487-620`), `CodexDaemonConfig` (`daemon.rs:47-171`, CultCache type
`gamecult.codex.connector_config.v1`, with `codex_executable` and `codex_home`), the managed
paths (`daemon.rs:453-536`), and the Idunn recipe (npm `@openai/codex` input). `idunn_health.rs`
is Idunn runtime presence with Codex-named constants (target `codex-connector`, capability
`gamecult.codex.subscription-inference`, env `CODEX_CONNECTOR_CULTNET_RUDP`). The request
itself carries OpenAI Responses fields (`reasoning_summary`, `service_tier`,
`previous_response_id`, `output_format_name`, `prompt_cache_key`).
- **F28 The wire is serde MessagePack, not CultNet** (source read). The envelope, invocation and
result are `rmp_serde` encodings of serde structs (`lib.rs:476-710`, client `748` and `765`,
daemon `637` and `652`); schema ids are strings compared by hand, not a CultNet schema.
CultCache holds only the replay record and the daemon config; CultNet is used only for Idunn
runtime presence and route observation. JSON: `parameters_json`, `output_schema_json` and tool
`arguments` are JSON strings checked by `require_json_object`; they are provider-facing (JSON
Schema and the provider's own tool-call arguments), a xenos boundary. Every other JSON use is
inside `provider_backend.rs` (HTTP body, SSE, app-server JSON-RPC, `auth.json`), also xenos.
- **F29 Consumers and license** (git grep at each origin/main). Ghostlight `c43eb54` pins
`codex-connector` at `68fe94b` as a library (`Cargo.toml:18`, no `daemon` feature) and imports
the contract and client in `crates/ghostlight/src/controllers.rs:34-37` and seven other files;
Epiphany's pins are archive (target invariant `nothing-runs-from-epiphany`). gamecult-ops
`idunn/yggdrasil/bindings/codex-connector.toml.in` names origin GitHub CodexConnector; Idunn
`docs/migration.md:49-55` says retire codex-connector, and `:163` calls its recipe stale.
CodexConnector's project code is PolyForm Noncommercial 1.0.0 (`LICENSE` section 3), all 33
commits by Meta Vens; ModelConnector is AGPL-3.0-only at `1cf879f` (LICENSE and a 26-line
planned README).
## The model page (step 0b)
One row per persistent kind this body introduces or changes. Rows for the thirteen
@ -493,6 +542,22 @@ never trip (finding `breaker-counts-every-document`). Two attributions are avail
Idunn's migration doc says Codex is dead (F9). The kit is lifted out of CodexConnector,
and the Codex backend's existing tests are the only proof that the lift is behaviour
neutral. Keeping the backend compiling costs nothing; deploying it is not proposed.
Superseded 2026-10-28 by "Where the kit lift's cut line falls" below: a wire parity test
against the v2 library proves neutrality without porting the backend.
### Where the kit lift's cut line falls (cut `connector-kit-lift`)
The lift moves only what F27 calls provider-neutral, behind one `ProviderBackend` trait, and
proves itself by a parity test against the v2 library at `fd7cec4` rather than by porting the
Codex backend. Three reasons. The Codex daemon has no consumer (F29, ruling
`no-return-to-openai-supplier`), so porting it buys nothing the parity test does not prove more
directly. Leaving it out makes the cut independent of question `codex-connector-fate`. And it keeps
B2 a pure move (verbatim code, `Codex` stripped from Rust names, wire bytes unchanged), so Soul can
falsify the move alone, and B3 owns every contract change: ids, the reasoning item, spend, and the
Responses-shaped request fields (F27). This supersedes "Why the kit keeps its Codex backend" above,
whose premise (the backend's tests are the only proof of neutrality) the parity test removes.
Idunn presence (`idunn_health.rs`) is not lifted with it: it is deployment, and is checked
against Idunn's current presence contract when a connector binary is first deployed (B4).
### How a Self run is carried (cut `mind-self-run`)
@ -553,32 +618,38 @@ operator's token, then A6 and the bring-up; A3, A4 and A1 run beside it):
rule in the actuator. Waits on A2 (ruling `run-measure-in-body-store`). Not on the path to
the first run: A2 runs every run fresh, which the ruling allows (a cold cache is fresh).
**B. To "Eureka speaks a Persona turn"** (critical path: B1, B2, B3, B4, B5, B6):
**B. To "Eureka speaks a Persona turn"** (critical path: B2, B3, B4, B5, B6; refreshed
2026-10-28, Imagination `imagination-kit-lift`):
1. Self decision for follow-up `body-campaign-repos`. The mechanism is ruled
(`eureka-substrate:ruling:campaign-repo-set-home`) and mapped
(`eureka-substrate:cut_spec:cut-campaign-repos.r1`, Huginn, and `cut-skill-campaign-repos.r1`,
Eureka; both unreported). Self must decide three things: dispatch those two cuts now and
upgrade the daemon; the connector kit repo's name and host (the follow-up proposes
`GameCult/ModelConnector`; no `body-repos-on-forge` ruling exists in the mind, so either the
doctrine default, GitHub `GameCult`, or a question); and admit `target:r2` with the repo set
plus `GameCult/Idunn` and the kit. That fills the 8-repo bound (6 + 2).
2. `connector-kit-lift` (kit repo): waits on B1 (ruling `connector-kit-home`).
3. `connector-contract-v3` with `connector-reasoning-item` and `connector-spend` (kit): wait on
B2; rulings `connector-opaque-state-item`, `connector-owner`; follow-up
`connector-reasoning-state-cheap-providers`.
4. `claude-connector` or `openai-compatible-connector` (kit): waits on B3, and on which
provider serves Persona turns first (rulings `no-return-to-openai-supplier`, follow-up
`connector-reasoning-state-cheap-providers`). Self raises that question when B3 is mapped.
1. Done 2026-10-28: `target:r2` carries the eight-repo set with GameCult/Idunn and
GameCult/ModelConnector (follow-up `body-campaign-repos` Fixed by Huginn `f8eaf50`); the kit
repo is GameCult/ModelConnector on the forge (`connector-kit-repo-modelconnector`).
2. `connector-kit-lift` (ModelConnector): spec `cut_spec:cut-connector-kit-lift.r1`. Blocked on
question `question:connector-kit-relicense` (F29: CodexConnector is PolyForm Noncommercial).
Waits on nothing else.
- Beside it, off the critical path: `codex-connector-park` or `codex-onto-kit`
(CodexConnector, gamecult-ops). Waits on question `question:codex-connector-fate` and on B2.
3. `connector-contract-v3` with `connector-reasoning-item` and `connector-spend` (ModelConnector):
waits on B2. Ids become `gamecult.model.*.v3`; the `ReasoningState` item (ruling
`connector-opaque-state-item`); `max_cost_usd` on the invocation, cost on the outcome, a
`Budget` refusal and a durable fail-closed ledger (ruling `connector-owner`); the
provider-neutral request shape, settling F27's Responses fields; whether the wire becomes
CultNet typed documents instead of serde MessagePack (F28, GameCult doctrine); `wire_parity_v2`
deleted. Follow-up `connector-reasoning-state-cheap-providers` is read when the item is mapped.
4. `claude-connector` (ModelConnector; ruling `persona-first-connector-claude`): waits on B3. Its
map raises how it authenticates and whose credential it holds against invariant
`token-out-of-her-reach` (rulings `connector-owner`, `self-run-token-reach`). It also carries
the connector's own config document, the CultLib bump from `e171eca` (F26), and Idunn presence
rebuilt from `idunn_health.rs` against Idunn's current contract, if Idunn deploys it.
5. `mind-persona` (Huginn): the Persona organ, one connector request per turn
(`persona-turn-connector`), Persona state through Huginn (landed), the start-Self tool (A6),
traces with provenance from day one (`collect-with-provenance-gate-at-training`). Waits on
B4 and on where traces live (question `persona-trace-retention` was withdrawn to be re-asked
with the trace store; re-ask it when B5 is mapped).
6. `persona-mouth` (Bifrost or gamecult-ops): where a turn is heard. Waits on B5 and on which
mouth first: Matrix (`chat-platform`, not yet deployed; follow-up
`identity-minting-moves-to-bifrost` precedes the chat rollout) or Discord
(`body-includes-discord`). Self raises it when B5 is mapped.
6. `persona-mouth` (Bifrost or gamecult-ops): Matrix (ruling `persona-mouth-matrix`; Discord
stays out, `gamecult-chat:ruling:discord-taints-training`). Waits on B5 and on the Matrix
deployment (`chat-platform`, `chat-stand-up-now`; follow-up
`identity-minting-moves-to-bifrost` precedes the chat rollout).
**C. Beside both paths:**
@ -591,8 +662,8 @@ operator's token, then A6 and the bring-up; A3, A4 and A1 run beside it):
and eureka-substrate Cut 12 leasing) and the swarm scheduler (C3).
3. `swarm-ctb-scheduler` (Huginn): rulings `mind-scheduling-ctb`, `swarm-dial-one-budget`,
`swarm-scheduler-one-shot`, `turn-cost-measured`. Waits on A8 (its cost source).
4. `idunn-job-workload` (Idunn): the deletion line of the hand install. Waits on B1 (Idunn
joins the campaign); due before the first hosted member (`mind-units-templated-interim`).
4. `idunn-job-workload` (Idunn): the deletion line of the hand install. Idunn joined the
campaign in `target:r2`; due before the first hosted member (`mind-units-templated-interim`).
5. `wire-names-rename` (Huginn, Eureka): before the first hosted mind
(`wire-names-rename-before-hosting`). Waits on nothing; schedule before C2.
6. `doctrine-repoint` (Eureka, F12), then `epiphany-archive` (last).