diff --git a/docs/architecture/ghostlight-world-ontology.md b/docs/architecture/ghostlight-world-ontology.md index 4536b99..95723ba 100644 --- a/docs/architecture/ghostlight-world-ontology.md +++ b/docs/architecture/ghostlight-world-ontology.md @@ -35,53 +35,60 @@ not from a model agreeing that the world is deep. ## Current mechanism -Passes 1 through 3 of the widening are landed (`5e53beb`, `e99af63`, -`d2805fe`). The sealed kernel holds subjects with a label and a kind -(`Person | Institution | Population`); a `positions` partition with -`Position`; entities with `container` under containment acyclicity; `Route` as -an `EdgeRecord` variant carrying `AccessKind { Public, Restricted }`, a minute -`Cost` in `1..=525_600`, and an open flag; subject-keyed `holdings` of -`Quantity(u64)` per entity, where absence means zero at every layer and all -arithmetic is checked with u128 ledger accumulators; and subject-keyed -`dependencies` on `DependencyTarget { Resource, Route, Subject }`. The action -vocabulary is still one affordance (`Speak`) and one action (`Speak { text }`); -there is no relation, fact, commitment, or pressure, no precondition on any -action, and no effect beyond the `DecisionEvent`. +Passes 1 through 4 of the widening are landed (`5e53beb`, `e99af63`, +`d2805fe`, `0f21a49`). The sealed kernel holds subjects with a label and a +kind (`Person | Institution | Population`); a `positions` partition with +`Position`; entities with `container` under containment acyclicity; `Route` +as an `EdgeRecord` variant carrying `AccessKind { Public, Restricted }`, a +minute `Cost` in `1..=525_600`, and an open flag; subject-keyed `holdings` of +`Quantity(u64)` per entity, absence meaning zero, checked arithmetic with +u128 ledger accumulators; subject-keyed `dependencies` on +`DependencyTarget { Resource, Route, Subject }`; and an `affordance_catalog` +partition of world-authored entries. There is no relation, fact, commitment, +pressure, or clock yet. -`world/patch.rs` owns typed `SubjectId`/`EntityId`/`EdgeId` namespaces, -`Ref` with `DraftHandle`, and a closed `resolve_patch` that resolves -declarations, then operations, and returns the complete `Vec` before -any canonical ID allocates; `derive_id` is deterministic over world, command, -and handle. The ten inhabited operations are `Relocate`, `OpenRoute`, -`CloseRoute`, `AlterCost`, `Transfer`, `Transform` (one-to-one; no unit, rate, -or recipe field exists), `Consume`, `Admit` (its evidence must be present in -the same patch and is recorded in the commit effect), `Bind`, and `Release`. -Conservation is checked at one site, `patch::check_ledger`, which the closed -operation set makes unreachable by construction; it is kept as the named -check. `CommandBody::AdmitPatch` is Draft-only, its `answers` type is -uninhabited, and it emits `WorldEffect::PatchAdmitted` through the one -`admit_resolved` insertion owner shared with genesis. -`KernelError::PatchRejected(Vec)` is the structural rejection shape. -No production ingress authors a `WorldPatch` today; `EvidenceRef::new` is -`#[cfg(test)]` and the effective gate is that nothing deserializes a -`WorldPatch`. +`world/patch.rs` owns typed `SubjectId`/`EntityId`/`EdgeId`/`AffordanceId` +namespaces, `Ref` with `DraftHandle` (adjacently tagged `RefKind`), and a +closed `resolve_patch` that resolves declarations, then operations, and +returns the complete `Vec` before any canonical ID allocates; +`derive_id` is deterministic over world, command, and handle. +`Declaration::Affordance` admits a catalog entry with preconditions drawn +only from `{ Present, Reachable, Holds }`, effect ceilings, and weighted +outcome bands. The ten inhabited operations are `Relocate`, `OpenRoute`, +`CloseRoute`, `AlterCost`, `Transfer`, `Transform` (one-to-one), `Consume`, +`Admit` (same-patch evidence), `Bind`, and `Release`; `apply_operations` is +the one owner of operation application and conservation, and +`patch::check_ledger` is the single named conservation check. +`CommandBody::AdmitPatch` is Draft-only and emits `WorldEffect::PatchAdmitted` +through the one `admit_resolved` insertion owner shared with genesis. No +production ingress authors a `WorldPatch` before pass 10; `EvidenceRef::new` +is `#[cfg(test)]`. -Opportunities bind to a `ScopeDigest` over one `scope_components` owner: -controller assignment, grants, position, incident routes, own holdings, and -own dependencies. A proposal commits at any later revision where its scope is -unchanged and is rejected with `KernelError::ScopeChanged` otherwise. The -mailbox owner task stamps `expected_revision` for opportunity-bearing commands -(`submit_stamped`); `PersonaTurnBinding` carries the scope digest. The -snapshot exposes ordered places, routes, and per-subject position, holdings, -and dependencies from the same `scope_components` owner; a controller's typed -view shows only its own place, incident routes, holdings, and dependencies. -State schema is `world_state.custody.v1`, commit schema -`world_commit.custody.v1`; earlier stores are refused. `authority_scope` is -gone from subjects; jurisdiction returns in pass 5 as `Authority`. Ghostlight -owns a conserved narrative ledger; Delvehold owns the economy -(`delvehold-forced-ontology-integration.md`). Passes 4 through 9 add -affordance data, authority, knowledge, boundaries, and scale intent as -described below. +Character action is a precondition-effect transition. Grants are +`BTreeMap>`. `world/action.rs` owns +`exercise()`, called from `reduce` and `apply_effect`: it checks the grant, +evaluates each precondition against the actor's own components at the scope +digest, selects an outcome band from +`BandPreimage { world_id, revision, command_id, affordance, band_count }` +through `digest()` with no RNG, bounds the proposed effects by the band's +ceilings, and appends `DecisionEvent { band, effects }`. Rejections are the +complete `ActionMismatch` set (17 variants) under +`KernelError::ActionRejected`. `Speak` is a kernel-built entry with zero +preconditions and an empty band that carries speech, synthesized only at +genesis. A controller's tools, signatures, and permissions are derived from +its granted entries by `catalog_tools`, `catalog_signatures`, and +`catalog_permissions`; no hand-written permission surface remains. + +Opportunities bind to a `ScopeDigest` over one `scope_components` owner +(controller assignment, grants, position, incident routes, own holdings, own +dependencies); a proposal commits at any later revision with unchanged scope +and is rejected with `KernelError::ScopeChanged` otherwise. State schema is +`world_state.affordance.v1`, commit schema `world_commit.affordance.v1`; +earlier stores are refused. Ghostlight owns a conserved narrative ledger; +Delvehold owns the economy (`delvehold-forced-ontology-integration.md`). +Passes 5 through 9 add authority, knowledge, the clock and pressure flow, +boundary elaboration, and the budgeted cover; pass 10 adds the consumer +ingress. ## The failure this vocabulary is designed against diff --git a/notes/fresh-workspace-handoff.md b/notes/fresh-workspace-handoff.md index 671d5c0..9cc3df1 100644 --- a/notes/fresh-workspace-handoff.md +++ b/notes/fresh-workspace-handoff.md @@ -225,60 +225,88 @@ outcome bands, four derived `CausalBoundary` kinds, scope-digest binding, one are teardown evidence. Plan step 6 is nine implementation passes; pass 1 is landed, passes 2 through 9 are not. -1. No pass beyond 3 is integrated. `codex/ghostlight-dungeon-mvp` tip is - `bec8004` (steering record) over `6a4f42a`; passes 1 through 3 landed at - `5e53beb`, `e99af63`, `d2805fe`. Pass 3 gave the kernel subject-keyed - `holdings` and `dependencies`, `Quantity(u64)` with absence meaning zero, - checked arithmetic, ops `Transfer`, `Transform` (1:1, no unit/rate/recipe), - `Consume`, `Admit` (same-patch evidence), `Bind`, `Release`, - `DependencyTarget { Resource, Route, Subject }`, conservation at the single - `patch::check_ledger` site, one `scope_components` owner for scope digest - and snapshot, schemas `world_state.custody.v1` / `world_commit.custody.v1`. - `EvidenceRef::new` is `#[cfg(test)]` because no production ingress authors - a `WorldPatch`; the real gate is that nothing deserializes one. The action - vocabulary is still `AffordanceKind::Speak` / `DecisionAction::Speak`. - Baseline at `6a4f42a`: 98 test functions in `world/*.rs`, 137 crate - source, plus one integration test. +1. Passes 1 through 4 are integrated locally; nothing beyond pass 4 is. + `codex/ghostlight-dungeon-mvp` tip is `0f21a49` (Soul) over `f9cd017` + (pass 4) and `0ca51cf` (`apply_operations` owner), on `138ff69`; those + three were `c9fd9bf`, `870d86a`, `7650d72` before rebase. Passes 1 through + 3 are `5e53beb`, `e99af63`, `d2805fe`. The push of the three was launched + in the background and may lag origin by minutes: run `git status -sb` and + trust `ahead N` over any note here. - Pass 4 (affordance catalog, `action.rs`, `ActionMismatch`, kernel-entropy - band draw, derived `OperationalAgent` tool catalog; deletes - `DecisionAction`, `AffordanceKind`, and three hard-coded permission - surfaces) is mid-cut with Hands in the locked worktree - `.claude/worktrees/agent-a8828a054fe108277`: commit `c9fd9bf` "Extract - apply_operations as the one owner of operation application and - conservation" is landed there, and `action.rs` is being written with - uncommitted edits in `eve.rs`, `runtime.rs`, `world/controllers.rs`, - `world/journal.rs`, `world/mailbox.rs`. Soul verifies in that tree; the - coordinator integrates. Witness: `git log` on the main branch past - `bec8004`. + Pass 4 facts: `world/action.rs` owns `exercise()`, called from `reduce` and + `apply_effect`. An `affordance_catalog` partition holds world-authored + entries declared through `Declaration::Affordance`; grants are + `BTreeMap>`; `Precondition` is + exactly `{ Present, Reachable, Holds }`; `ActionMismatch` (17 variants) is + the sibling of `Mismatch` and surfaces as `KernelError::ActionRejected`. + Band selection is `BandPreimage { world_id, revision, command_id, + affordance, band_count }` through `digest()`, no RNG; `DecisionEvent { + band, effects }`. `Speak` is a kernel-built catalog entry (zero + preconditions, empty band, `carries_speech`) synthesized only at genesis. + `DecisionAction`, `AffordanceKind`, `AffordanceGrant`, + `operational_tools()`, the prose `available_tools` string, and the + permission block are deleted; `catalog_tools`, `catalog_signatures`, and + `catalog_permissions` in `world/controllers.rs` derive the controller + surface from granted entries. `RefKind` has adjacently tagged serde, + round-trip proven. Schemas are `world_state.affordance.v1` / + `world_commit.affordance.v1`; earlier stores refused. Baseline at + `0f21a49`: 123 test functions in `world/*.rs`, 162 crate source, plus one + integration test. `EvidenceRef::new` is still `#[cfg(test)]`; the gate + remains that nothing deserializes a `WorldPatch` until pass 10. - Specs and maps live in the session scratchpad, not `state/`: - `imagination-pass4.md` through `imagination-pass8.md` and - `modeling-pass4.md` through `modeling-pass8.md` are on disk; Modeling pass - 9 is running. Adopted design decisions from those specs that change - steering: pass 7 gives the world its first clock, `WorldState.now`, - advanced only by `CommandBody::AdvanceTime` from - `CallerId::System(SystemCapability::Clock)` minted by the mailbox, and cuts - the operation set from 30 to 27 (`Commitment` stake/fulfill/default/release - and `Pressure.create` removed; `Routine.period` required). Pressure is - stored with two writer families, ops and the tick, never derived at read - time. Ordering is a pure re-ordering by pressure then debt - (`last_opportunity_at`), never a filter. Only `UnelaboratedDestination` and - `MissingStructure` boundaries are derivable; `PolityInCausalRange` and - `IndividuationRequired` wait for relations and population slices, and - Verification 13 is explicitly deferred. Pass 8 replaces the pass-1 Active - declaration ban with "declarations in Active only inside a patch whose - `PatchAnswer` is currently derived and proven satisfied", adds + Soul follow-ups from pass 4: (a) make the grant structural inside + `exercise` when a third caller arrives, assigned to pass-5 Hands as its + first commit; (b) the pass-4 spec band clause for `verify_state_shape` + overstates what is implemented (bounds plus emptiness, replay proves the + rest), a spec/doc correction the coordinator owns. + + Pass 5 (`Authority`, `Selection`, `Redress`, institutional affordances) is + with Hands in a fresh worktree from `0f21a49`; at the time of writing + `.claude/worktrees/agent-a8828a054fe108277` sits at `0f21a49` unlocked and + the locked `agent-ae5caadd09b38df59` sits at `8cad6b9`, a pre-rebuild + commit that is not a pass tree. Witness for any later pass: main-branch + `git log` past `0f21a49`. + + Pipeline for passes 5 through 9: specs `imagination-pass1.md` through + `imagination-pass9.md` and maps `modeling-pass1.md` through + `modeling-pass9.md` are all on disk in the session scratchpad + `C:\Users\Meta\AppData\Local\Temp\claude\F--Projects-Ghostlight\2fd50f5e-f7ba-4e5d-82bc-c7033e6074d2\scratchpad`, + not in `state/`; if that directory is gone, the specs must be regenerated + from `docs/architecture/ghostlight-world-ontology.md`. Each pass: Hands in + an isolation worktree whose first line is `git reset --hard + codex/ghostlight-dungeon-mvp`, then Soul in that tree, then the coordinator + integrates with `git -C rebase -q codex/ghostlight-dungeon-mvp && git + merge --ff-only && cargo test -q -p ghostlight-dungeon --bin + ghostlight-dungeon world:: && git push -q && git worktree remove --force + && git branch -D `, then a steward pass and the doc + proposal. Rulings that bind Hands: pass 7 keeps `check_ledger` single-site; + pass 8 adds no HTTP `AdmitPatch` ingress (that is pass 10, consumer + ingress, now in the plan); pass 9 must not enable `uuid/v5` and derives + each `CommandId` via sha256 into `Uuid::from_bytes` like `derive_id`. + + Adopted design from the specs that changes steering: pass 7 gives the world + its first clock, `WorldState.now`, advanced only by + `CommandBody::AdvanceTime` from `CallerId::System(SystemCapability::Clock)` + minted by the mailbox, and cuts the operation set from 30 to 27 + (`Commitment` stake/fulfill/default/release and `Pressure.create` removed; + `Routine.period` required). Pressure is stored by two writer families, ops + and the tick, never derived at read. Ordering is a pure re-order by + pressure then debt (`last_opportunity_at`), never a filter. Only + `UnelaboratedDestination` and `MissingStructure` boundaries are derivable; + `PolityInCausalRange`, `IndividuationRequired`, and Verification 13 are + deferred. Pass 8 allows Active declarations only inside a patch whose + `PatchAnswer` is derived and proven satisfied, adds `SystemCapability::Elaborator { jurisdiction }`, the in-process `ElaborationRunner`, and a derived elaborator tool catalog sharing one - property emitter with pass 4. The typed CultNet consumer ingress is a newly - named pass 10, "consumer ingress"; step 6 is ten passes, and the plan doc - still lists nine. + property emitter with pass 4. - Queued doc edits, owned by the coordinator, to land with pass 7: four - `ghostlight-dungeon-mvp.md` sentences naming subject readiness as owned - state (lines 65, 153, 211, 433) and the ontology doc's "Twenty-nine - operations" count (lines 222, 276, 537) to 27. + Queued doc edits, coordinator-owned: after pass 7, the four + `ghostlight-dungeon-mvp.md` subject-readiness sentences (lines 65, 153, + 211, 433) become `Commitment.due` plus derived debt, and the ontology + doc operation count (lines 222, 276, 537) becomes 27; after pass 9, the + ontology doc phrase "within about N/B ticks" becomes ceil(N/R) with R the + rotation reserve; after every integration, the ontology doc "Current + mechanism" section is rewritten from the steward proposal. 2. First-generation world fixtures are banked and pushed, one per world, each with Ink, training sidecar, visual plan, lore grounding, and BFL manifest, reviewer-accepted except visual replay, which waits on a scene-set diff --git a/notes/ghostlight-implementation-plan.md b/notes/ghostlight-implementation-plan.md index 6ac320a..ad9767f 100644 --- a/notes/ghostlight-implementation-plan.md +++ b/notes/ghostlight-implementation-plan.md @@ -308,8 +308,8 @@ Required black-box proofs: 9. An external crate cannot obtain mutable aggregate state, invoke the canonical ID allocator, call the reducer, or write the journal; a caller-supplied unknown ID is rejected rather than admitted. -10. A decision proposal is rejected when its revision-bound opportunity, - controller, scope, or currently executable affordance is wrong; the +10. A decision proposal is rejected when its opportunity's scope digest has + changed or its controller or currently executable affordance is wrong; the scheduler cannot manufacture or consume authority. A 1,200-actor synthetic fixture may measure load after these pass. It cannot diff --git a/state/map.yaml b/state/map.yaml index f0f608f..0c65c73 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-v2 release through the rebuilt Idunn recipe/binding/router seam, the live state root satisfies the complete world-v2 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: Ontology v2 is adopted (`docs/architecture/ghostlight-world-ontology.md`; `ghostlight-transition-algebra.md` and `ghostlight-multiresolution-agency.md` are teardown evidence); plan step 6 is nine passes. (1) No pass beyond 3 is integrated; main tip `bec8004` over `6a4f42a` (passes 1-3 at `5e53beb`, `e99af63`, `d2805fe`). Pass 3: subject-keyed `holdings`/`dependencies`, `Quantity(u64)` absence = zero, ops `Transfer`/`Transform` (1:1)/`Consume`/`Admit` (same-patch evidence)/`Bind`/`Release`, `DependencyTarget {Resource, Route, Subject}`, conservation at `patch::check_ledger`, one `scope_components` owner, schemas `world_state.custody.v1`/`world_commit.custody.v1`; `EvidenceRef::new` is `#[cfg(test)]` because nothing deserializes a `WorldPatch` yet. Action vocabulary still `AffordanceKind::Speak`/`DecisionAction::Speak`. Baseline 98 tests in `world/`, 137 crate source. Pass 4 (affordance catalog, `action.rs`, `ActionMismatch`, band draw, derived `OperationalAgent` tool catalog; deletes `DecisionAction`/`AffordanceKind`/three hard-coded permission surfaces) is mid-cut in locked worktree `.claude/worktrees/agent-a8828a054fe108277`: `c9fd9bf` extracts `apply_operations` as the one owner of application and conservation; `action.rs` in progress with uncommitted edits. Witness: main-branch `git log` past `bec8004`. Specs/maps in the session scratchpad: `imagination-pass4.md`..`imagination-pass8.md`, `modeling-pass4.md`..`modeling-pass8.md`; Modeling pass 9 running. Adopted decisions: pass 7 adds the first clock `WorldState.now`, advanced only by `CommandBody::AdvanceTime` from `CallerId::System(SystemCapability::Clock)` minted by the mailbox, and cuts ops 30->27 (`Commitment` stake/fulfill/default/release and `Pressure.create` removed, `Routine.period` required); pressure stored by two writer families (ops + tick), never derived at read; ordering is a pure re-order by pressure then debt (`last_opportunity_at`), never a filter; only `UnelaboratedDestination` and `MissingStructure` boundaries derivable, `PolityInCausalRange`/`IndividuationRequired` and Verification 13 deferred; pass 8 allows Active declarations only inside a patch whose `PatchAnswer` is derived and proven satisfied, adds `SystemCapability::Elaborator{jurisdiction}`, the in-process `ElaborationRunner`, and a derived elaborator tool catalog sharing one property emitter with pass 4; typed CultNet consumer ingress is new pass 10 (step 6 is ten passes; plan doc still lists nine). Queued coordinator doc edits with pass 7: mvp doc subject-readiness sentences at lines 65, 153, 211, 433; ontology doc operation count 29->27 at lines 222, 276, 537. (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 paused by operator order and this session no longer owns it: stop flag `C:\Users\Meta\.claude\worlds\logs\elab-stop.flag` set 2026-09-04 20:10 at 66 finished passes in `logs\elab-done.csv`, in-flight slots drain and push. Successor handoff: `C:\Users\Meta\.claude\worlds\README.md` (final counts and the Charter idea filled at drain). 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. Deferred behind both orders, 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: Ontology v2 is adopted (`docs/architecture/ghostlight-world-ontology.md`; `ghostlight-transition-algebra.md` and `ghostlight-multiresolution-agency.md` are teardown evidence); plan step 6 is nine passes. (1) Passes 1-4 integrated locally, nothing beyond: tip `0f21a49` (Soul) over `f9cd017` (pass 4) and `0ca51cf` (`apply_operations` owner); push may lag origin, `git status -sb` is the witness. Pass 4: `world/action.rs` owns `exercise()` from `reduce` and `apply_effect`; `affordance_catalog` partition, `Declaration::Affordance`, grants `BTreeMap<DecisionScope, BTreeSet<AffordanceId>>`, `Precondition {Present, Reachable, Holds}` only, `ActionMismatch` (17) sibling of `Mismatch` via `KernelError::ActionRejected`, `BandPreimage {world_id, revision, command_id, affordance, band_count}` through `digest()` with no RNG, `DecisionEvent {band, effects}`, `Speak` a kernel-built genesis-only entry; `DecisionAction`/`AffordanceKind`/`AffordanceGrant`/`operational_tools()`/prose tools string/permission block deleted, replaced by derived `catalog_tools`/`catalog_signatures`/`catalog_permissions`; `RefKind` adjacently tagged serde; schemas `world_state.affordance.v1`/`world_commit.affordance.v1`. Baseline 123 tests in `world/`, 162 crate source. Soul follow-ups: grant structural in `exercise` at the third caller (pass-5 Hands first commit); `verify_state_shape` band clause overstated in the pass-4 spec (coordinator corrects). Pass 5 with Hands in a fresh worktree from `0f21a49`. All nine specs/maps (`imagination-pass1..9.md`, `modeling-pass1..9.md`) are in the session scratchpad, not `state/`; the handoff carries the per-pass integration recipe, the binding rulings (pass 7 `check_ledger` single-site; pass 8 no HTTP `AdmitPatch` ingress, that is pass 10; pass 9 no `uuid/v5`, sha256 into `Uuid::from_bytes`), the adopted pass 7/8 design (first clock `WorldState.now` via `AdvanceTime` from `System(Clock)` minted by the mailbox, ops 30->27, stored pressure, pure re-order, two derivable boundaries, Active declarations only under a proven `PatchAnswer`, `ElaborationRunner`), and the queued doc edits. (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 paused by operator order and this session no longer owns it: stop flag `C:\Users\Meta\.claude\worlds\logs\elab-stop.flag` set 2026-09-04 20:10 at 66 finished passes in `logs\elab-done.csv`, in-flight slots drain and push. Successor handoff: `C:\Users\Meta\.claude\worlds\README.md` (final counts and the Charter idea filled at drain). 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. Deferred behind both orders, 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 be02445..c465a72 100644 --- a/state/scratch.md +++ b/state/scratch.md @@ -2,10 +2,10 @@ ## Current Subgoal -Plan step 6 pass 4 mid-cut in `.claude/worktrees/agent-a8828a054fe108277` -(`c9fd9bf` landed there, `action.rs` in progress). Specs `imagination-pass4..8.md` -and maps `modeling-pass4..8.md` in the session scratchpad; Modeling pass 9 -running. Main tip `bec8004`; nothing beyond pass 3 integrated. +Plan step 6 pass 5 (`Authority`, `Selection`, `Redress`) with Hands in a fresh +worktree from `0f21a49`; first commit makes the grant structural in +`exercise`. Specs/maps 1-9 in the session scratchpad. Main tip `0f21a49`, +passes 1-4 integrated, push may lag. ## Working Notes