From f9a1c3ea1ec232f5b4e5ca37ec7f995e264c1fed Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 5 Sep 2026 15:45:37 +0200 Subject: [PATCH] Record the first live smoke in the mvp doc and handoff Co-Authored-By: Claude Fable 5.1 --- docs/architecture/ghostlight-dungeon-mvp.md | 8 ++++ notes/fresh-workspace-handoff.md | 47 +++++++++++++++------ state/map.yaml | 2 +- state/scratch.md | 9 ++-- 4 files changed, 49 insertions(+), 17 deletions(-) diff --git a/docs/architecture/ghostlight-dungeon-mvp.md b/docs/architecture/ghostlight-dungeon-mvp.md index 5a1bbd0..6fe2ec5 100644 --- a/docs/architecture/ghostlight-dungeon-mvp.md +++ b/docs/architecture/ghostlight-dungeon-mvp.md @@ -558,6 +558,14 @@ boundaries. ## Verification contract +Focused tests prove the machine under fixture inference ports. The one place +the road is exercised against a real controller is the local live smoke +(`notes/local-live-smoke.md`): the production tick driver, cover, Persona +membrane, operational lane, clock, and elaboration sweep against a +CodexConnector on a genesis world. Its first run (2026-09-05) proved the path +end to end and showed that a three-subject, one-room genesis yields thin +prose; a seed producer is the gap that finding names. + Focused tests must prove: 1. Draft and active commands mutate the same aggregate through the same commit diff --git a/notes/fresh-workspace-handoff.md b/notes/fresh-workspace-handoff.md index 18c92ed..2755fd1 100644 --- a/notes/fresh-workspace-handoff.md +++ b/notes/fresh-workspace-handoff.md @@ -216,14 +216,12 @@ and proposals but cannot commit on their behalf. ## Next gate -Ontology v2 is the adopted vocabulary at `docs/architecture/ghostlight-world-ontology.md` -(twelve components, twenty-nine operations under one `WorldPatch`, -world-authored affordances with preconditions, effect slots, and kernel-entropy -outcome bands, four derived `CausalBoundary` kinds, scope-digest binding, one -`AdmitPatch` for seed and elaboration, eighteen proofs). +The adopted vocabulary is `docs/architecture/ghostlight-world-ontology.md` +(twelve components, twenty-seven operations under one `WorldPatch`, +world-authored affordances, derived `CausalBoundary` kinds, scope-digest +binding, one `AdmitPatch` for seed, elaboration, and consumer ingress). `ghostlight-transition-algebra.md` and `ghostlight-multiresolution-agency.md` -are teardown evidence. Plan step 6 is nine implementation passes; pass 1 is -landed, passes 2 through 9 are not. +are teardown evidence. Plan step 6 is ten implementation passes, all landed. 1. Plan step 6, the ontology widening, is complete: all ten passes are integrated on `codex/ghostlight-dungeon-mvp`. Tip is `a1fd645` (Soul) @@ -284,16 +282,38 @@ landed, passes 2 through 9 are not. corrected; the plan's step-6 pass-10 line in past tense. Queued doc edits: none. + First local live smoke, 2026-09-05, committed as `5e52943` and pushed: + `notes/local-live-smoke.md` is the runbook. The production tick driver, + cover, Persona membrane, operational lane, clock, and elaboration sweep + ran three ticks against a real CodexConnector (head daemon with the + `daemon` feature, ChatGPT auth) on a genesis world: revision 2 to 11, two + singleton cells per tick, the Persona spoke each tick, the operational + lane committed each tick, the elaboration sweep was clean, 40 to 70 + seconds per tick. The harness is the ignored test + `live_smoke_ticks_a_genesis_world_against_the_connector` in `runtime.rs` + (line 3177) with `fixture_with(Option)`; the evidence + record is dated 2026-09-05T13:42Z. Two findings: the road works end to + end; the prose is thin because genesis is three subjects in one room. + That makes the seed producer the evidenced gap, not an argued one: no + doc or steering surface named a "seed producer" before this smoke (the + Delvehold boundary doc names only a seed admission primitive), so it is + now the obvious next cut once the operator decisions below are taken. + Stale: the pre-pass-6 ignored acceptance test + `real_codex_connector_cognition_modes_commit_speech` in + `world/controllers.rs` (line 6549) fails at `NoAudience` because its + subjects are unplaced; retire it or place its subjects. + Still deferred by design: `PolityInCausalRange`, `IndividuationRequired`, and Verification 13 wait for relations and population slices. - Decisions the operator owns, recorded nowhere else durable than here and - the series evidence record: (a) whether a refused coupled constituent may + Decisions the operator owns, unchanged by the smoke, recorded nowhere + else durable than here and the series evidence record: (a) whether a refused coupled constituent may re-submit once inside the same tick, to be taken with the submitted-versus-committed number in hand; (b) the authority for an - owner-only Eve `world.run_tick` command, which is not built; (c) whether - the outbound consumer response batch and the non-loopback CultMesh lease - are cut next or the deployment gate below resumes first. The ten specs + owner-only Eve `world.run_tick` command, which is not built; (c) which of the + seed producer (now evidenced by the smoke), the outbound consumer + response batch with the non-loopback CultMesh lease, or the deployment + gate below is cut next. The ten specs and maps (`imagination-pass1..10.md`, `modeling-pass1..10.md`) remain in the session scratchpad only and are now history, not steering; the docs own the design. @@ -371,6 +391,9 @@ acceptance roots, and local run scaffolding. - Gestalt authority: `docs/architecture/ghostlight-multiresolution-agency.md` - Operations: `F:\Projects\gamecult-ops` - Faculty-workflow lessons (Epiphany): `F:\Projects\Epiphany +- Local live smoke runbook: `notes/local-live-smoke.md` (substrate at + `F:\Projects\Ghostlight-smoke`, connector from the CodexConnector repo head + with the `daemon` feature, environment, first-run table) otes aculty-workflow-lessons-2026-09-04.md` ## Re-entry warnings diff --git a/state/map.yaml b/state/map.yaml index df53625..ddb086e 100644 --- a/state/map.yaml +++ b/state/map.yaml @@ -360,5 +360,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). In flight: `hands/pass10-followups` in `F:\Projects\Ghostlight-pass10fu` from `a1fd645`, no commits yet (`controller_work.v9`, fatal malformed credentials, redacting `Debug`, elaboration lane `check_patch_caps`, distinct item-cap refusals); uncommitted docs-worker edits on main (consumer-api as live contract, ontology Current mechanism through pass 10, mvp envelope fix, plan pass-10 past tense). Next action is the operator's: (a) bounded in-tick re-submission for a refused coupled constituent, decided with the submitted-vs-committed number; (b) authority for owner-only Eve `world.run_tick`; (c) whether the outbound consumer response batch and non-loopback CultMesh lease are cut before the deployment gate resumes. Until decided, close out the pass-10 follow-ups and commit the docs. (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. Next action is the operator's: (a) bounded in-tick re-submission for a refused coupled constituent, decided with the submitted-vs-committed number; (b) authority for owner-only Eve `world.run_tick`; (c) which of the seed producer (evidenced by the smoke), the outbound consumer response batch with the non-loopback CultMesh lease, or the deployment gate is cut next. (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 7e00ed6..c0d67b3 100644 --- a/state/scratch.md +++ b/state/scratch.md @@ -2,10 +2,11 @@ ## Current Subgoal -None. Step 6 of the plan is complete at `842b5af`; no worktree exists. The -next slice opens when the operator decides between in-tick re-submission, -Eve `world.run_tick` authority, the outbound consumer response, and resuming -the deployment gate (see `notes/fresh-workspace-handoff.md`). +None. Step 6 closed at `842b5af`; the first local live smoke landed at +`5e52943` (runbook `notes/local-live-smoke.md`). The seed producer is the +evidenced next cut, but it opens only when the operator chooses it over the +outbound consumer response or the deployment gate (see +`notes/fresh-workspace-handoff.md`). ## Working Notes