diff --git a/docs/architecture/ghostlight-world-ontology.md b/docs/architecture/ghostlight-world-ontology.md index 6923434..cac7d4e 100644 --- a/docs/architecture/ghostlight-world-ontology.md +++ b/docs/architecture/ghostlight-world-ontology.md @@ -793,7 +793,7 @@ Deleted before replacement behavior is added, with no compatibility path: ## Subtraction budget -- 20 component kinds → 12; 18 `WorldMutation` variants → 29 named operations +- 20 component kinds → 12; 18 `WorldMutation` variants → the pinned catalog count (29 at `1244595`) under 1 patch primitive, replacing both the mutation enum and the separate outcome-effect sum; - 5 qualification and verification types plus 1 outcome resolver → 0; diff --git a/notes/fresh-workspace-handoff.md b/notes/fresh-workspace-handoff.md index b723595..cd1566b 100644 --- a/notes/fresh-workspace-handoff.md +++ b/notes/fresh-workspace-handoff.md @@ -369,42 +369,40 @@ are teardown evidence. Plan step 6 is ten implementation passes, all landed. and integrated. Never chain `merge --ff-only` with `branch -D` on one line; run the merge, confirm it, then delete. - In flight, not landed: `hands/interruption-followups` in the worktree - `F:\Projects\Ghostlight-interruptfu` at `d20dc51`, no commits yet: - delete the dead fork-D branch; widen `InferencePurpose`, - `PreparedInference::purpose`, and `InferenceEvent` to `pub(crate)` and - write the driver test end to end. New Eve question from Soul, owned by - the Eve owner: whether the command-result vocabulary needs a fourth - state for "overtaken" instead of rendering an interruption as `denied`. + Plan step 10, the witness operation, is integrated. Tip is `1244595` + (step-10 docs) over `70ea6b1` (Soul), `ecdeb92` (the operation), + `307d8a5` (refactors: one owner for "under a place", one for "already a + knower"), on `f6cd3b5`. The push follows a background crate test and the + branch read `ahead 4` at the time of writing; `git status -sb` is the + witness. Integration was gated this time: rebase, merge, confirm the + tip, then remove the worktree. What landed: `under_place` is the one + reach owner and `unheld` the one already-holder filter; `audience`, + `fan_out`, and the `Witness` apply arm all call them. `ComponentOp::Witness + { fact, place, confidence }` with resolve, apply, and lowering arms; + `operation_ground` returns the place, so confinement treats it like any + other ground and a consumer cannot witness by construction. + `ComponentOpKind::Witness { confidence }`, so a world-authored + affordance can cause a witnessed event with no speaker. Tool `witness`; + the catalog is pinned at 7 declarations, 29 operations, 38 tools, and + the ontology doc now says twenty-nine (lines 443, 498, 796), aligned to + the pinned count after the docs writer found it one behind. Schemas are + `world_state.consumer.v2` / `world_commit.consumer.v2`. An empty + subtree is `NoOperationEffect` at both layers. Soul pinned two-layer + agreement over draft subjects and forget-then-witness, and made the + no-`Told` pin exhaustive over all nineteen operation kinds. Baseline at + `1244595`: 372 test functions in `world/*.rs`, 424 crate source, 13 in + `ghostlight-persona-projection`, plus one integration test (Soul ran + 371 / 418). - In flight, plan step 10, witnessed events over a place subtree - (`e2392de`), with Hands in the worktree `F:\Projects\Ghostlight-witness` - on `hands/witness` at `16d464f` "Witness: one speakerless event over a - place subtree", which must rebase over step 9 before Soul and - integration: the operator ruled that regional and global effects matter - (an asteroid over a region, the moon over a hemisphere) and that places - nest for exactly this. The answer is one operation, `Witness { fact, - place }`, landing `Witnessed` knowledge on every subject positioned - under the place subtree, recipients derived at apply time from live - positions exactly as speech `fan_out` derives its audience, never - stored, naming no speaker. Cut line from the plan: no second fan-out - owner, no stored recipient list, the subtree walk reuses the one - covering predicate, the tool surface and exemplar lists grow by exactly - one, confinement treats the place like any other ground. It lands as its - own small pass behind the interruption cut, because every witness's - scope digest moves and that is what makes a global event interrupt - whoever was mid-thought. Modeling mapped into the session-scratchpad `modeling-witness.md`. Two - source facts the steward checked that the design can lean on: - `KnowledgeSource` (`patch.rs:371`) already has `Witnessed` beside - `Told { by, via }` and `Evidenced`, and `AuthoredSource::Witnessed` - (`patch.rs:393`) already lowers to it (`mod.rs:2494`), so `Witness` adds - no source variant; `ScopeComponents` (`mod.rs:2958`) carries position, - routes, holdings, dependencies, authority, delegated grants, and - knowledge keys, and no actor field, so a digest change is always noticed - and its cause is perceivable only when a `Told { by }` landed. That is - the ruling the coordinator gave the operator, "anonymous means the cause - is not perceivable, not that the change is not noticed", and it holds - against the map. + In flight, not landed, the only open branch: `hands/interruption-followups` + in the worktree `F:\Projects\Ghostlight-interruptfu` at `d20dc51`, no + commits yet: delete the dead fork-D branch; widen `InferencePurpose`, + `PreparedInference::purpose`, and `InferenceEvent` to `pub(crate)` and + write the driver test end to end; and, routed here because this worker + owns `controllers.rs`, test the interruption section against a witness, + which is untested. New Eve question from Soul, owned by the Eve owner: + whether the command-result vocabulary needs a fourth state for + "overtaken" instead of rendering an interruption as `denied`. Constraint: no road run is possible until a provider is available again. The Codex subscription lapsed mid-build and the twelve seeded runs @@ -413,7 +411,7 @@ are teardown evidence. Plan step 6 is ten implementation passes, all landed. ports until then; the connector is stopped and the smoke substrate at `F:\Projects\Ghostlight-smoke` stays. - Next seams after steps 9 and 10: the outbound consumer response + Next seams after the interruption follow-ups: the outbound consumer response batch with the non-loopback CultMesh lease; then the deployment gate below. The elaborator swarm's ideas still sit on `slot///<stamp>` branches and the four ledger directories; diff --git a/state/map.yaml b/state/map.yaml index 8fa5e68..801c04b 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. In flight: `hands/interruption-followups` in `F:\Projects\Ghostlight-interruptfu` at `d20dc51`, no commits (delete the dead branch; widen `InferencePurpose`/`PreparedInference::purpose`/`InferenceEvent` to `pub(crate)`, driver test end to end). Eve question for the Eve owner: a fourth command-result state for overtaken. Plan step 10, witnessed events over a place subtree (`e2392de`), is with Hands in `F:\Projects\Ghostlight-witness` on `hands/witness` at `16d464f`, to rebase over step 9 before Soul: operator ruled regional and global effects matter and places nest for this; one operation `Witness {fact, place}` lands `Witnessed` knowledge on every subject under the place subtree, recipients derived at apply time like speech `fan_out`, never stored, no speaker; lands behind step 9; Modeling map `modeling-witness.md` on disk. Source already has `KnowledgeSource::Witnessed` and `AuthoredSource::Witnessed` (`patch.rs:371,393`); `ScopeComponents` (`mod.rs:2958`) has no actor field, so anonymous means the cause is not perceivable, not that the change is not noticed. Constraint: no road run until a provider is available; the Codex subscription lapsed mid-build and the twelve seeded runs consumed half the monthly free quota; a Claude connector is a candidate. After steps 9 and 10: 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. + 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. In flight, the only open branch: `hands/interruption-followups` in `F:\Projects\Ghostlight-interruptfu` at `d20dc51`, no commits (delete the dead fork-D branch; widen `InferencePurpose`/`PreparedInference::purpose`/`InferenceEvent` to `pub(crate)`, driver test end to end; test the interruption section against a witness). Eve question for the Eve owner: a fourth command-result state for overtaken. Constraint: no road run until a provider is available; the Codex subscription lapsed mid-build and the twelve seeded runs consumed half the monthly free quota; a Claude connector is a candidate. After the interruption follow-ups: 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 48f4d06..fa55e45 100644 --- a/state/scratch.md +++ b/state/scratch.md @@ -2,14 +2,13 @@ ## Current Subgoal -Two slices. (1) Step-9 follow-ups: Hands in `F:\Projects\Ghostlight-interruptfu` -on `hands/interruption-followups` at `d20dc51` (delete the dead fork-D branch; -`InferencePurpose`/`PreparedInference::purpose`/`InferenceEvent` to `pub(crate)`; -driver test end to end), then Soul, integrate. (2) Step 10, `Witness {fact, place}`: -Hands in `F:\Projects\Ghostlight-witness` on `hands/witness` at `16d464f`, rebase -over step 9, then Soul, integrate. Main tip `711f6ec`. Integration rule: merge, -confirm, then delete the branch; never on one line. No road run until a provider -is available. +Step-9 follow-ups, the only open branch: Hands in +`F:\Projects\Ghostlight-interruptfu` on `hands/interruption-followups` at +`d20dc51` (delete the dead fork-D branch; `InferencePurpose`, +`PreparedInference::purpose`, `InferenceEvent` to `pub(crate)`; driver test end +to end; interruption section against a witness), then Soul, then gated +integration (rebase, merge, confirm tip, remove). Main tip `1244595`; steps 9 +and 10 landed. No road run until a provider is available. ## Working Notes