diff --git a/notes/fresh-workspace-handoff.md b/notes/fresh-workspace-handoff.md index 9d3f22d..881214d 100644 --- a/notes/fresh-workspace-handoff.md +++ b/notes/fresh-workspace-handoff.md @@ -421,41 +421,29 @@ are teardown evidence. Plan step 6 is ten implementation passes, all landed. interruption as `denied`. In flight: the operator ordered "Build the Claude connector" on - 2026-09-06. Nothing is edited; Modeling is mapping read-only into the - session scratchpad `modeling-claude-connector.md`, then Imagination, - Hands, Soul, integrate. Cross-repo: CodexConnector and Ghostlight. - Operating assumptions recorded from the coordinator, any of which the - operator may overrule before Hands starts: (1) the credential is an - Anthropic API key against the Messages API, because the connector - contract (consumer-derived exact request bytes, no prompt policy in the - daemon) cannot be kept through a subscription path that runs the Claude - Code harness; (2) it lives in the CodexConnector repo as a second - provider backend and second typed request shape behind one daemon and - one wire law, not a sibling repo, because a sibling would fork wire law - the doctrine says consumers consume; (3) the Ghostlight inference port - learns to lower to the new shape and the Cargo pin moves to the new - head. Steward findings before the cut: the pin is `68fe94b` in - `Cargo.toml:21`, an ancestor of the CodexConnector checkout `6519289` - on branch `codex/ghostlight-release-binding`, five commits behind it; - CodexConnector `origin/main` is at `b2e7684` "Admit multiple models per - connector caller" and is an ancestor of that checkout: the release-binding - branch is ahead of main and main has not been fast-forwarded, so "the - new head" must name the branch, or main must be fast-forwarded first. Ghostlight - binds Codex-named types in four files (`controllers.rs:25`, - `elaboration.rs:31`, `patch.rs:20`, `tool_schema.rs:9`: - `CodexProviderRequest`, `CodexInputItem`, `CodexToolDefinition`, - `CodexToolChoice`, the client and transport types) behind one - `InferencePort::prepare` (`controllers.rs:226`); the default model names - in `runtime.rs:427-434` are `gpt-5.6-luna/sol/terra`, so backend - selection by model name or by a new setting is a spec question. No - Ghostlight steering surface says the connector is Codex-only; the - CodexConnector doctrine does (`AGENTS.md` lines 3-4, 12, 19; `README.md` - lines 4, 10, 25, 107) and the operator owns that amendment. CodexConnector - has no `state/`, `notes/`, handoff, or evidence surface: its Mind is - `AGENTS.md` (31 lines, shared with `CLAUDE.md`), `README.md`, and - `deployment/idunn`; this task stewards those by proposal only. The - smoke runbook describes only the Codex credential path (`codex-home`, - `codex app-server` child) and will need a second path. + 2026-09-06, then overturned both opening assumptions before anything + landed. Void: (1) an Anthropic API key against the Messages API, because + no API spend is possible now; (2) a second backend inside the + CodexConnector repo, because CodexConnector is a deliberate fork of + Codex cut so that Epiphany stops compiling Codex, and nothing goes into + it. The Modeling map `modeling-claude-connector.md` was stopped mid-map + and is void even if partial text is on disk. Standing premise, not yet + a design: the credential is the Claude subscription through the Agent + SDK or the Claude Code CLI, as a stopgap; the connector is a separate + small organ; its shape waits on a read-only research pass + (`research-agent-sdk.md` in the session scratchpad) establishing whether + the SDK can act as a transport that returns tool calls unexecuted, and + on the operator saying go. Nothing is edited in either repo. Facts that + survive the overturn: Ghostlight binds Codex-named types in four files + (`controllers.rs:25`, `elaboration.rs:31`, `patch.rs:20`, + `tool_schema.rs:9`) behind one `InferencePort::prepare` + (`controllers.rs:226`); the default model names in `runtime.rs:427-434` + are `gpt-5.6-luna/sol/terra`; the Cargo pin is `68fe94b` + (`Cargo.toml:21`); CodexConnector `main` was fast-forwarded to `6519289` + before the correction, which is the line Ghostlight runs, is harmless, + and stays; CodexConnector has no state, notes, handoff, or evidence + surface and its doctrine (`AGENTS.md`) is untouched. The smoke runbook + describes only the Codex credential path. Constraint, which this pass may lift: no road run is possible until a provider is available. The Codex subscription lapsed mid-build and the diff --git a/state/map.yaml b/state/map.yaml index 80ad5fc..a34a5ec 100644 --- a/state/map.yaml +++ b/state/map.yaml @@ -361,5 +361,5 @@ current_status: scale_checkpoint: Runs 108 through 115 prove load and failure properties of the pre-rebuild body, not world completeness. Operator directive 2026-09-04: the 2,400-subject / 240-cell / 10% cover profile is deliberate design, not a load fixture; a world feels alive only when actors at every level pursue their own goals, so that detail is generated first and multiresolution simulation is then choked so attention is scarce. The seed carries a `WorldScaleIntent`, the elaborators pursue its derived scale deficit, and cover budget is the choke. The 1,200-actor fixture is a load measure only. Structural admission still cannot require interest, diversity, name uniqueness, or an actor count; validity never waits on a count, liveness is authored. The committed replacement authority suite passes, but no further scale run is admitted until Yggdrasil serves the exact world-v3 release through the rebuilt Idunn recipe/binding/router seam, the live state root satisfies the complete world-v3 allowed-path contract, restart preserves exact journal and digest identity, and no old service, state path, process grant, or route can regain write authority. presentation_checkpoint: The historical press-layout and seed-ownership split are complete. `notes/historical-newspaper-layout-grammar.md` remains the durable grammar. Manifest v2 at `output/tex/canopy-ledger-run-61-style-1847-flow-723.manifest.toml` independently binds `style_seed=1847`, `flow_seed=723`, frozen source SHA-256 `8f195140f52a40ba705d6a66987146a1500ae89668e5d82b01d1792eb3afb882`, and the final artifact `output/pdf/canopy-ledger-run-61-style-1847-flow-723.pdf`, SHA-256 `a457f4b1702a7a52480e42fce0039f0dbe677ff32958e98f1c412b346237190c`. An identical seed pair produces byte-identical TeX and PDF; changing only flow preserves the exact style section while materially changing a plausible layout, and changing only style preserves flow topology. Cut-first and cut-midstory templates pass visual inspection; the failed split-card template is deleted. Frozen copy/assets, actual PDF `/BM /Multiply`, and economic-layer advertising authority remain invariant. public_reference_checkpoint: The published public architecture is immutable pre-rebuild history, not current rebuild authority. Canonical Ghostlight commit `15ea0f0` owns five archived pages covering the former overview, authority, pipelines, 43 named production stages, and eight titled elaborators. Site commit `2035e799c2cf7470b2bfc70d5a878d5d3be5e90f` publishes a shared mobile Home/Blog/Docs masthead, visibly marks every Docs page as a teardown archive, and publishes the postmortem `The World Counter Lied` at `https://ghostlight.gamecult.org/Blog/the-world-counter-lied`; live HTTP inspection returned 200 for the postmortem and Docs index and found the masthead and archive banner. Do not use the archived pages to steer the whole-machine rebuild. `docs/architecture/ghostlight-dungeon-mvp.md` owns the adopted target; publish replacement architecture only after the replacement body is implemented and verified. The site repository owns public composition and deployment. - next_action: Plan step 6, the ontology widening, is complete: ten passes integrated on `codex/ghostlight-dungeon-mvp`, tip `a1fd645` (pass tips `5e53beb`, `e99af63`, `d2805fe`, `0f21a49`, `dbe176d`, `cb6a126`, `1852ddd`, `3ed3868`, `8aebfb6`, `a1fd645`); `git status -sb` is the push witness; the series evidence record is dated 2026-09-05. The kernel holds 12 component kinds over 27 operations under one `WorldPatch`, one reducer, one CAS commit, one decode bound (`patch::decode_patch`, `MAX_PATCH_*`), three confined `SystemCapability` arms (`Clock`, `Elaborator`, `Consumer`); pass 10 added `world/consumer.rs`, `PatchGround`, `confine_to_ground`, `ControllerAssignment::ExternallyControlled`, `ConsumerPort`/`submit_consumer`, `POST /cultnet/world-patch` (loopback, msgpack, `CONSUMER_BODY_LIMIT`), `ConsumerRegistry` from `GHOSTLIGHT_CONSUMER_CREDENTIALS`; schemas `world_state.consumer.v1`/`world_commit.consumer.v1`, `STATE_SCHEMA_GENERATION` world-v3 (Idunn expectation changes; every world-v2 phrase below now means world-v3). Baseline 313 tests in `world/`, 357 crate source (focused run 312/352). Pass-10 follow-ups landed in `8173c9c` and the docs in `842b5af`; nothing is in flight and no worktree exists. First local live smoke 2026-09-05 (`5e52943`, runbook `notes/local-live-smoke.md`, harness the ignored test `live_smoke_ticks_a_genesis_world_against_the_connector` in `runtime.rs`, substrate `F:\Projects\Ghostlight-smoke`, connector from the CodexConnector repo head with the `daemon` feature): three ticks against a real connector on a genesis world, revision 2->11, two singleton cells per tick, Persona spoke and the operational lane committed each tick, elaboration clean, 40-70 s per tick; evidence record 2026-09-05T13:42Z. Findings: the road works end to end; prose is thin because genesis is three subjects in one room, so the seed producer is the evidenced gap (no steering surface named it before). Stale: ignored test `real_codex_connector_cognition_modes_commit_speech` (`controllers.rs:6549`) fails at `NoAudience`, retire or place it. Seed producer landed and proven on the road: tip `b7042f1` over `491b06e` (six seed-lane follow-ups) and `697ed07`, pushed, no worktree. Seeded live smoke passed on the twelfth run 2026-09-05 from the Kalsa Public vault (`GHOSTLIGHT_SEED_VAULT_ROOT` `F:\Projects\Kalsa\Kalsa`, root label \"Low Sere\"): one seed session, 39 s, six qualified persons, deficit 6->0; nine subjects, six boundaries; three ticks of eight singleton cells (95-123 s), seeded people speaking to each other by name; table and run block in `notes/local-live-smoke.md`, evidence record 2026-09-05T17:36Z, ontology \"Rules the road imposed\" paragraph. Uncommitted road fixes on main pending a green unit suite: strict-schema `anyOf`/const tags with an offline test over both lanes, connector `REQUEST_EXPIRY` 300 s / `RESPONSE_TIMEOUT` 900 s, content-addressed `provider_request_id`, `SEED_ROUND_BUDGET` 24 with budget-end draft submission, `SEED_INSTRUCTIONS` pacing and obligation rule, brief ids and placement rule, info-level fault and cell-outcome logs, live harness asserting a landed seed and speech. Baseline 342 tests in `world/`, 394 crate source. Connector stopped; smoke substrate stays. Plan step 9, the interruption pass, is integrated: tip `711f6ec` (docs) over `d20dc51` (Soul), `ad124ea`/`1a19fb2` (Hands), `1ef973a` (machine), on `a62708f`; push follows a background crate test, `git status -sb` is the witness. Landed: the kernel is the sole `ScopeChanged` detector and the narrative lane interrupts on it (`controllers.rs:3537`; operational keeps `ensure_scope_unchanged` at :2689); `SubjectSnapshot.components: ScopeComponents` replacing holdings/dependencies/incident_routes/authority/controls; `PersonaTurnBinding::interrupted_from`; `Overheard`, `Interruption`, `interpreter_round`, `select_fresh`, `select_scope`, `NarrativeRun::Interrupted`; `controller_work.v11`, `persona_turn_receipt.v3`; `ControllerHttpResult::Interrupted` renders as Eve `denied` with detail in the receipt. Baseline 354 tests in `world/`, 406 crate source, 13 persona-projection. Soul: leak invariant holds structurally; fork A corrected (a turn whose scope moved before binding is `NoOpportunity` at zero cost; the cut costs at most one extra Interpreter round on a bound turn); fork D dead (grants insert-only). Recipe lesson: never chain `merge --ff-only` with `branch -D`; the first fast-forward refused and the chain deleted the pointer, recovered by SHA. Plan step 10, the witness operation, is integrated: tip `1244595` (docs) over `70ea6b1` (Soul), `ecdeb92` (operation), `307d8a5` (refactors), on `f6cd3b5`; push follows a background crate test, `git status -sb` is the witness; integration gated (rebase, merge, confirm tip, remove). Landed: `under_place` the one reach owner and `unheld` the one already-holder filter, used by `audience`, `fan_out`, and the `Witness` apply arm; `ComponentOp::Witness {fact, place, confidence}` with resolve/apply/lowering arms and `operation_ground` returning the place (consumer cannot witness by construction); `ComponentOpKind::Witness {confidence}` so an affordance can cause a speakerless witnessed event; tool `witness`; catalog pinned at 7/29/38 and the ontology doc aligned to twenty-nine; schemas `world_state.consumer.v2`/`world_commit.consumer.v2`; empty subtree `NoOperationEffect` at both layers; no-`Told` pin exhaustive over 19 op kinds. Baseline 372 tests in `world/`, 424 crate source, 13 persona-projection. Step-9 follow-ups integrated at `651bfb2` over `5cd8853`, gated (rebase, merge, confirm, remove); push follows a background crate test, `git status -sb` is the witness. Landed: unreachable `SPEAK_KIND` guard and branch deleted from `interrupted` (constant still used elsewhere); `InferencePurpose`/`PreparedInference::purpose`/`InferenceEvent` to `pub(crate)` with test seams `fixture_inference_events` and `fixture_recovery_required` re-exported from `world/mod.rs`; driver end-to-end `a_second_mid_turn_change_reaches_the_drivers_interrupted_arm` through `run_cover_tick` (two Interpreter calls, overtaken turn commits nothing); `a_witness_between_the_turn_and_submit_carries_no_overheard_row` closing the step-10 seam. Baseline 373 tests in `world/`, 426 crate source, 13 persona-projection. Steps 9 and 10 complete with follow-ups; nothing in flight, no worktree. Eve question for the Eve owner: a fourth command-result state for overtaken. Next action, operator-ordered 2026-09-06: build the Claude connector. Nothing edited; Modeling maps read-only into scratchpad `modeling-claude-connector.md`, then Imagination, Hands, Soul, integrate; cross-repo CodexConnector and Ghostlight. Assumptions (operator may overrule before Hands): Anthropic API key against the Messages API, because the exact-request-bytes, no-prompt-policy contract cannot survive a subscription path through the Claude Code harness; a second provider backend and second typed request shape inside the CodexConnector repo behind one daemon and one wire law, not a sibling repo; the Ghostlight inference port lowers to the new shape and the pin moves to the new head. Steward findings: pin `68fe94b` (`Cargo.toml:21`) is an ancestor of the CodexConnector checkout `6519289` on `codex/ghostlight-release-binding`, five behind; CodexConnector `origin/main` `b2e7684` is an ancestor of that checkout, so main is behind the release-binding branch and the target head must name the branch or main must be fast-forwarded first. Ghostlight binds Codex-named types in `controllers.rs:25`, `elaboration.rs:31`, `patch.rs:20`, `tool_schema.rs:9` behind `InferencePort::prepare`; default models `gpt-5.6-luna/sol/terra` in `runtime.rs:427-434`, so backend selection is a spec question. No Ghostlight surface says Codex-only; CodexConnector `AGENTS.md`/`README.md` do and the operator owns that amendment. CodexConnector has no state/notes/handoff/evidence surface; its Mind is `AGENTS.md`, `README.md`, `deployment/idunn`, stewarded by proposal only. Constraint this pass may lift: no road run until a provider is available (Codex subscription lapsed mid-build; twelve seeded runs used half the monthly free quota). Next seams: the outbound consumer response batch with the non-loopback CultMesh lease, then the deployment gate. Operator decision still open: authority for owner-only Eve `world.run_tick`. (2) First-generation world fixtures banked and pushed, reviewer-accepted except visual replay pending a scene-set blockout: Delvehold `cistern-house-nine-breaker-test` `codex/world-delvehold` @ `9374fd0`; Aetheria `navigator-berth-hearing-v0` `codex/world-aetheria` @ `fe679f4` (fixture `8860c47`, lore `ba5c2ce`); Zyphos `eclipse-nursery-handover` `codex/world-zyphos` @ `055e6ee` (lore `2fef909`); Kalsa `stormshield-handoff-v0` `codex/world-kalsa` @ `489c541` (lore `c9f4c5c`). The elaborator swarm is drained and handed off; this session does not own it: stop flag set 2026-09-04 20:10, drained 21:10 with 98 finished passes in `logs\elab-done.csv`, ledgers republished, successor handoff finalized at `C:\Users\Meta\.claude\worlds\README.md`. Resume waits on operator adjustments and belongs to the successor. Owed and deliberately deferred: integration of `slot///<stamp>` branches into the vaults (`codex/ghostlight-worlds`) and `codex/world-<world>`. Idea index: the four `experiments/elaboration/<world>/ledger/` directories on `codex/world-<world>`. Substrate lessons stay in `state/evidence.jsonl`; `Invoke-Worlds.ps1` is retired under `worlds\retired`. Clones at `F:\Projects\Ghostlight-worlds\<world>` and `F:\Projects\<Lore>-worktrees\ghostlight-worlds`; image rendering deferred, prompts only. Deployment gate, deferred behind the operator decisions, not cancelled: review and subtract the uncommitted Idunn projection and bounded RUDP transport, add UDP route actuation plus an independently persisted post-reload data-plane observation, and verify that focused pass on Yggdrasil. Then implement the directly managed Rust Odin observation/correlation daemon and exact transaction-frozen capability dependency closure. Install rebuilt Idunn, admit Odin first, then CodexConnector and Ghostlight; prove same-generation continuity, fencing, signed health, route cutover, Odin-outage freeze, and negative legacy authority before purging old units, releases, state roots, and the remote acceptance debris. `GameCult/cultcache-rs` and `GameCult/cultnet-rs` now have no readers anywhere: Epiphany `68939b2c` and CodexConnector `6519289` consume CultLib and carry no submodules at all, and Odin `27cc815` does the same. Both repos are retirable now: that work landed on CultLib main by fast-forward at `8cb3b72`, so every pinned revision -- Ghostlight `85f7024`, Epiphany and CodexConnector `e171eca`, Odin `cbde940` -- is an ancestor of main and resolves from a fresh clone. Still vendored are `VoidBot/vendor/cultcache-ts`, `Ghostlight/vendor/cultcache-py` and `Odin/vendor/cultmesh-rs`. The first two vendored because npm and pip cannot take a package from a subdirectory of a git repo the way cargo can, so there was nothing to depend on. CultLib `8cb3b72` adds a publish workflow: tagging `cultcache-ts-v*` or `cultcache-py-v*` ships `@gamecult/cultcache-ts` to npm and `cultcache-py` to PyPI, refusing any tag whose version disagrees with the manifest. Both repoints wait on the first publish, which needs an `NPM_TOKEN` secret and a PyPI trusted publisher. Ghostlight's is not a bare dependency swap: `tools/ghostlight_state_store.py` puts `vendor/cultcache-py/src` on `sys.path` so the state tooling works from a clone with no install step, and session bootstrap depends on that. Detail on the Odin repoint: Odin's vendored CultNet submodule and CultCache copy are gone from its worktree and both come from CultLib, with only `vendor/cultmesh-rs` still vendored and itself consuming CultLib. Odin's commit had to carry the in-flight CultMesh RUDP document server with it: the previously committed CultMesh calls `assume_connected()`, a CultNet method the fork had and CultLib does not, so the old code cannot build against CultLib at all. It depends on CultLib branch `claude/cultnet-reliable-expiry` at `cbde940`, which must reach main by merge rather than squash or the pinned rev is orphaned. Live citations name CultLib `85f7024`, a permanent ancestor of main; evidence records keep their pre-consolidation SHAs as dated history. Local run scaffolding, downloaded acceptance copies, and redundant Git bundles are already purged, and `.gitignore` now refuses them. + next_action: Plan step 6, the ontology widening, is complete: ten passes integrated on `codex/ghostlight-dungeon-mvp`, tip `a1fd645` (pass tips `5e53beb`, `e99af63`, `d2805fe`, `0f21a49`, `dbe176d`, `cb6a126`, `1852ddd`, `3ed3868`, `8aebfb6`, `a1fd645`); `git status -sb` is the push witness; the series evidence record is dated 2026-09-05. The kernel holds 12 component kinds over 27 operations under one `WorldPatch`, one reducer, one CAS commit, one decode bound (`patch::decode_patch`, `MAX_PATCH_*`), three confined `SystemCapability` arms (`Clock`, `Elaborator`, `Consumer`); pass 10 added `world/consumer.rs`, `PatchGround`, `confine_to_ground`, `ControllerAssignment::ExternallyControlled`, `ConsumerPort`/`submit_consumer`, `POST /cultnet/world-patch` (loopback, msgpack, `CONSUMER_BODY_LIMIT`), `ConsumerRegistry` from `GHOSTLIGHT_CONSUMER_CREDENTIALS`; schemas `world_state.consumer.v1`/`world_commit.consumer.v1`, `STATE_SCHEMA_GENERATION` world-v3 (Idunn expectation changes; every world-v2 phrase below now means world-v3). Baseline 313 tests in `world/`, 357 crate source (focused run 312/352). Pass-10 follow-ups landed in `8173c9c` and the docs in `842b5af`; nothing is in flight and no worktree exists. First local live smoke 2026-09-05 (`5e52943`, runbook `notes/local-live-smoke.md`, harness the ignored test `live_smoke_ticks_a_genesis_world_against_the_connector` in `runtime.rs`, substrate `F:\Projects\Ghostlight-smoke`, connector from the CodexConnector repo head with the `daemon` feature): three ticks against a real connector on a genesis world, revision 2->11, two singleton cells per tick, Persona spoke and the operational lane committed each tick, elaboration clean, 40-70 s per tick; evidence record 2026-09-05T13:42Z. Findings: the road works end to end; prose is thin because genesis is three subjects in one room, so the seed producer is the evidenced gap (no steering surface named it before). Stale: ignored test `real_codex_connector_cognition_modes_commit_speech` (`controllers.rs:6549`) fails at `NoAudience`, retire or place it. Seed producer landed and proven on the road: tip `b7042f1` over `491b06e` (six seed-lane follow-ups) and `697ed07`, pushed, no worktree. Seeded live smoke passed on the twelfth run 2026-09-05 from the Kalsa Public vault (`GHOSTLIGHT_SEED_VAULT_ROOT` `F:\Projects\Kalsa\Kalsa`, root label \"Low Sere\"): one seed session, 39 s, six qualified persons, deficit 6->0; nine subjects, six boundaries; three ticks of eight singleton cells (95-123 s), seeded people speaking to each other by name; table and run block in `notes/local-live-smoke.md`, evidence record 2026-09-05T17:36Z, ontology \"Rules the road imposed\" paragraph. Uncommitted road fixes on main pending a green unit suite: strict-schema `anyOf`/const tags with an offline test over both lanes, connector `REQUEST_EXPIRY` 300 s / `RESPONSE_TIMEOUT` 900 s, content-addressed `provider_request_id`, `SEED_ROUND_BUDGET` 24 with budget-end draft submission, `SEED_INSTRUCTIONS` pacing and obligation rule, brief ids and placement rule, info-level fault and cell-outcome logs, live harness asserting a landed seed and speech. Baseline 342 tests in `world/`, 394 crate source. Connector stopped; smoke substrate stays. Plan step 9, the interruption pass, is integrated: tip `711f6ec` (docs) over `d20dc51` (Soul), `ad124ea`/`1a19fb2` (Hands), `1ef973a` (machine), on `a62708f`; push follows a background crate test, `git status -sb` is the witness. Landed: the kernel is the sole `ScopeChanged` detector and the narrative lane interrupts on it (`controllers.rs:3537`; operational keeps `ensure_scope_unchanged` at :2689); `SubjectSnapshot.components: ScopeComponents` replacing holdings/dependencies/incident_routes/authority/controls; `PersonaTurnBinding::interrupted_from`; `Overheard`, `Interruption`, `interpreter_round`, `select_fresh`, `select_scope`, `NarrativeRun::Interrupted`; `controller_work.v11`, `persona_turn_receipt.v3`; `ControllerHttpResult::Interrupted` renders as Eve `denied` with detail in the receipt. Baseline 354 tests in `world/`, 406 crate source, 13 persona-projection. Soul: leak invariant holds structurally; fork A corrected (a turn whose scope moved before binding is `NoOpportunity` at zero cost; the cut costs at most one extra Interpreter round on a bound turn); fork D dead (grants insert-only). Recipe lesson: never chain `merge --ff-only` with `branch -D`; the first fast-forward refused and the chain deleted the pointer, recovered by SHA. Plan step 10, the witness operation, is integrated: tip `1244595` (docs) over `70ea6b1` (Soul), `ecdeb92` (operation), `307d8a5` (refactors), on `f6cd3b5`; push follows a background crate test, `git status -sb` is the witness; integration gated (rebase, merge, confirm tip, remove). Landed: `under_place` the one reach owner and `unheld` the one already-holder filter, used by `audience`, `fan_out`, and the `Witness` apply arm; `ComponentOp::Witness {fact, place, confidence}` with resolve/apply/lowering arms and `operation_ground` returning the place (consumer cannot witness by construction); `ComponentOpKind::Witness {confidence}` so an affordance can cause a speakerless witnessed event; tool `witness`; catalog pinned at 7/29/38 and the ontology doc aligned to twenty-nine; schemas `world_state.consumer.v2`/`world_commit.consumer.v2`; empty subtree `NoOperationEffect` at both layers; no-`Told` pin exhaustive over 19 op kinds. Baseline 372 tests in `world/`, 424 crate source, 13 persona-projection. Step-9 follow-ups integrated at `651bfb2` over `5cd8853`, gated (rebase, merge, confirm, remove); push follows a background crate test, `git status -sb` is the witness. Landed: unreachable `SPEAK_KIND` guard and branch deleted from `interrupted` (constant still used elsewhere); `InferencePurpose`/`PreparedInference::purpose`/`InferenceEvent` to `pub(crate)` with test seams `fixture_inference_events` and `fixture_recovery_required` re-exported from `world/mod.rs`; driver end-to-end `a_second_mid_turn_change_reaches_the_drivers_interrupted_arm` through `run_cover_tick` (two Interpreter calls, overtaken turn commits nothing); `a_witness_between_the_turn_and_submit_carries_no_overheard_row` closing the step-10 seam. Baseline 373 tests in `world/`, 426 crate source, 13 persona-projection. Steps 9 and 10 complete with follow-ups; nothing in flight, no worktree. Eve question for the Eve owner: a fourth command-result state for overtaken. Next action, operator-ordered 2026-09-06: build the Claude connector; both opening assumptions overturned by the operator before anything landed. Void: an Anthropic API key against the Messages API (no API spend is possible now); a second backend inside CodexConnector (it is a deliberate fork of Codex cut so Epiphany stops compiling Codex; nothing goes into it); the Modeling map `modeling-claude-connector.md` is void. Standing premise, not a design: Claude subscription through the Agent SDK or the Claude Code CLI as a stopgap; a separate small organ; shape pending the read-only research pass `research-agent-sdk.md` (can the SDK act as a transport returning tool calls unexecuted) and the operator saying go. Nothing edited in either repo. Surviving facts: Codex-named types bound in `controllers.rs:25`, `elaboration.rs:31`, `patch.rs:20`, `tool_schema.rs:9` behind `InferencePort::prepare`; default models `gpt-5.6-luna/sol/terra` in `runtime.rs:427-434`; pin `68fe94b`; CodexConnector `main` fast-forwarded to `6519289` (harmless, stays); CodexConnector has no state/notes/handoff/evidence surface and its `AGENTS.md` is untouched. Constraint this pass may lift: no road run until a provider is available (Codex subscription lapsed mid-build; twelve seeded runs used half the monthly free quota). Next seams: the outbound consumer response batch with the non-loopback CultMesh lease, then the deployment gate. Operator decision still open: authority for owner-only Eve `world.run_tick`. (2) First-generation world fixtures banked and pushed, reviewer-accepted except visual replay pending a scene-set blockout: Delvehold `cistern-house-nine-breaker-test` `codex/world-delvehold` @ `9374fd0`; Aetheria `navigator-berth-hearing-v0` `codex/world-aetheria` @ `fe679f4` (fixture `8860c47`, lore `ba5c2ce`); Zyphos `eclipse-nursery-handover` `codex/world-zyphos` @ `055e6ee` (lore `2fef909`); Kalsa `stormshield-handoff-v0` `codex/world-kalsa` @ `489c541` (lore `c9f4c5c`). The elaborator swarm is drained and handed off; this session does not own it: stop flag set 2026-09-04 20:10, drained 21:10 with 98 finished passes in `logs\elab-done.csv`, ledgers republished, successor handoff finalized at `C:\Users\Meta\.claude\worlds\README.md`. Resume waits on operator adjustments and belongs to the successor. Owed and deliberately deferred: integration of `slot/<world>/<title>/<stamp>` branches into the vaults (`codex/ghostlight-worlds`) and `codex/world-<world>`. Idea index: the four `experiments/elaboration/<world>/ledger/` directories on `codex/world-<world>`. Substrate lessons stay in `state/evidence.jsonl`; `Invoke-Worlds.ps1` is retired under `worlds\retired`. Clones at `F:\Projects\Ghostlight-worlds\<world>` and `F:\Projects\<Lore>-worktrees\ghostlight-worlds`; image rendering deferred, prompts only. Deployment gate, deferred behind the operator decisions, not cancelled: review and subtract the uncommitted Idunn projection and bounded RUDP transport, add UDP route actuation plus an independently persisted post-reload data-plane observation, and verify that focused pass on Yggdrasil. Then implement the directly managed Rust Odin observation/correlation daemon and exact transaction-frozen capability dependency closure. Install rebuilt Idunn, admit Odin first, then CodexConnector and Ghostlight; prove same-generation continuity, fencing, signed health, route cutover, Odin-outage freeze, and negative legacy authority before purging old units, releases, state roots, and the remote acceptance debris. `GameCult/cultcache-rs` and `GameCult/cultnet-rs` now have no readers anywhere: Epiphany `68939b2c` and CodexConnector `6519289` consume CultLib and carry no submodules at all, and Odin `27cc815` does the same. Both repos are retirable now: that work landed on CultLib main by fast-forward at `8cb3b72`, so every pinned revision -- Ghostlight `85f7024`, Epiphany and CodexConnector `e171eca`, Odin `cbde940` -- is an ancestor of main and resolves from a fresh clone. Still vendored are `VoidBot/vendor/cultcache-ts`, `Ghostlight/vendor/cultcache-py` and `Odin/vendor/cultmesh-rs`. The first two vendored because npm and pip cannot take a package from a subdirectory of a git repo the way cargo can, so there was nothing to depend on. CultLib `8cb3b72` adds a publish workflow: tagging `cultcache-ts-v*` or `cultcache-py-v*` ships `@gamecult/cultcache-ts` to npm and `cultcache-py` to PyPI, refusing any tag whose version disagrees with the manifest. Both repoints wait on the first publish, which needs an `NPM_TOKEN` secret and a PyPI trusted publisher. Ghostlight's is not a bare dependency swap: `tools/ghostlight_state_store.py` puts `vendor/cultcache-py/src` on `sys.path` so the state tooling works from a clone with no install step, and session bootstrap depends on that. Detail on the Odin repoint: Odin's vendored CultNet submodule and CultCache copy are gone from its worktree and both come from CultLib, with only `vendor/cultmesh-rs` still vendored and itself consuming CultLib. Odin's commit had to carry the in-flight CultMesh RUDP document server with it: the previously committed CultMesh calls `assume_connected()`, a CultNet method the fork had and CultLib does not, so the old code cannot build against CultLib at all. It depends on CultLib branch `claude/cultnet-reliable-expiry` at `cbde940`, which must reach main by merge rather than squash or the pinned rev is orphaned. Live citations name CultLib `85f7024`, a permanent ancestor of main; evidence records keep their pre-consolidation SHAs as dated history. Local run scaffolding, downloaded acceptance copies, and redundant Git bundles are already purged, and `.gitignore` now refuses them. gestalt_population: Gestalt Personas own shared population baselines; persistent member deltas own named individuality; WorldKernel materialization and approval-gated fission preserve lineage and identity. Materialisation/folding changes only representation and the exact member delta, advances resolution epoch, and retires the old cover; it has no Gestalt-wide effect authority. Selected actionable member exceptions are mandatory Projector perspective owners, so aggregation cannot silently erase their decision. Presence projection is limited to nearby active leaves and exact-location dormant members, includes reciprocal player relationship evidence, and may propose an earned cast without committing it. Simulation cells are derived covers only. diff --git a/state/scratch.md b/state/scratch.md index 9b857b9..af688e0 100644 --- a/state/scratch.md +++ b/state/scratch.md @@ -2,15 +2,13 @@ ## Current Subgoal -Claude connector pass (operator order, 2026-09-06). Pipeline: Modeling -(`modeling-claude-connector.md`, read-only) -> Imagination -> Hands -> Soul -> -integrate, across CodexConnector (second backend, second request shape, one -daemon, one wire law) and Ghostlight (inference port lowers to the new shape; -pin `68fe94b` moves). Nothing edited at `06236a4`. Settle before Hands: which -CodexConnector head the pin targets (`origin/main` `b2e7684` vs the checkout -branch `codex/ghostlight-release-binding` at `6519289`); how a backend is -selected (model name or setting); the API-key credential path beside the -`codex app-server` child; and the `AGENTS.md` amendment the operator owns. +Claude connector (operator order, 2026-09-06), design not decided. Both +opening assumptions are void (no API key, nothing into CodexConnector; the +Modeling map `modeling-claude-connector.md` is void). Premise: Claude +subscription through the Agent SDK or Claude Code CLI as a stopgap, a separate +small organ. Gate: the read-only research pass `research-agent-sdk.md` (can the +SDK return tool calls unexecuted) and the operator saying go. Nothing edited in +either repo at `06236a4`. ## Working Notes