From 418a591f7cbe8352f03fca12aa4f73b18216ae56 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Tue, 18 Aug 2026 16:36:47 +0200 Subject: [PATCH] Document multiplayer as a post-solo extension --- README.md | 206 ++++++++---------- ...hostlight-dungeon-multiplayer-intention.md | 136 ++++++++++++ docs/architecture/ghostlight-dungeon-mvp.md | 7 +- notes/documentation-inventory.md | 3 + notes/fresh-workspace-handoff.md | 8 + notes/ghostlight-current-system-map.md | 8 + notes/ghostlight-dungeon.md | 2 +- notes/ghostlight-implementation-plan.md | 8 + state/evidence.jsonl | 1 + state/ghostlight-state.cultcache.jsonl | 1 + state/map.yaml | 9 +- 11 files changed, 263 insertions(+), 126 deletions(-) create mode 100644 docs/architecture/ghostlight-dungeon-multiplayer-intention.md diff --git a/README.md b/README.md index 966bdc9..e54d3da 100644 --- a/README.md +++ b/README.md @@ -1,149 +1,113 @@ # Ghostlight -Ghostlight is a research and implementation home for socially persistent -generative agents. +Ghostlight builds persistent generative people and worlds. Its active product is +[Ghostlight Dungeon](https://ghostlight.gamecult.org): a Vault-grounded narrative +simulation in which places, knowledge, relationships, institutions, clocks, and +consequences survive beyond the model's current context. -The project is about characters and simulated people who remain coherent across -time, routine, pressure, memory, culture, misreading, masks, incentives, and -changing relationships. The aim is not to make a language model sound charming -for one scene. The aim is to build machinery that can track who someone is, -what they believe, what they hide, how they see other people, how they live when -nothing is exploding, and how their behavior changes when the world leans on -them. +The project began as a research and fixture pipeline for socially persistent +Aetheria agents. That material remains useful regression evidence. The live +machine is now a Rust runtime with typed campaign state, one canonical world +authority, bounded Persona projection, fiction-first action resolution, and a +multiresolution agency graph for keeping large settings active at finite cost. -In practical terms, Ghostlight is building the state and projection layer for -character-driven generation: +## What Ghostlight Owns -- durable canonical character state -- observer-specific perceived state -- directional relationship stance -- cultural and institutional pressure -- memory and goal selection -- speaker-local prompt projection -- evaluation targets for emergent verbal behavior -- a future path for training smaller specialist projection models - -The first concrete consumer is Aetheria authoring support, especially Call of -the Void content generation, dialogue scaffolding, and procedural drama for -narrated stories in the Aetheria timeline. - -## Core Idea - -Ghostlight separates three things that are easy to blur together: - -1. **Canonical state** - What is true about a character, relationship, event, memory, or scene. - -2. **Perceived state** - What a particular observer thinks is true, including misreadings, - attribution bias, suspicion, trust, projection, and partial knowledge. - -3. **Prompt projection** - A temporary speaker-local prompt surface for one scene or turn. - -The prompt is not the character. The prompt is a rendered slice of state. - -That distinction matters because believable dialogue should come from character -circumstance, not vibes. Sometimes that circumstance is acute pressure. Often it -is habit, boredom, affection, work rhythm, class embarrassment, ritual memory, -professional competence, petty irritation, or ordinary warmth trying to survive -inside a bleak system. Cat being sarcastic should fall out of shame sensitivity, -distance seeking, suspicion, relationship tension, scene stakes, and voice. -Oz withholding information should fall out of mask rigidity, privacy pressure, -relationship fear, and the need to stay useful. A quiet joke, a domestic aside, -or a moment of tenderness should be just as explainable in state terms as a -threat. The system should be able to show its work without making every scene -sound like Greg Egan having a panic attack in a server closet. +- `WorldKernel` is the sole owner of committed campaign state and revisions. +- Every player command, NPC action, strategic tick, wait, import, and reload + enters the same validated campaign mailbox and atomic CultCache commit path. +- Vault evidence grounds world compilation; branch-local invention remains + distinct from canon. +- Projector → Persona → Interpreter turns produce proposals. Models never + commit world state. +- Knowledge, perception, capability, location, custody, and authority are + validated against the exact actor proposing an action. +- Fiction-first d20 resolution treats player text as an attempt rather than an + accomplished fact. +- Multiresolution Gestalts keep people, institutions, and factions active under + a bounded Persona-cell budget without merging rivals into one mind or erasing + named individuals. +- Away-time simulation advances clocks and remote agency without puppeting or + directly harming an absent player character. +- CultMesh publishes typed service and Eve/CultUI state; the browser lowers that + surface and does not become a second state authority. ## Current Status -Ghostlight is early architecture plus executable schema seams. +Ghostlight Dungeon is implemented and deployed as a private Starfire-hosted +playtest harness. The current acceptance surface covers: -Currently present: +- source-grounded world compilation with approval previews; +- persistent campaigns, forks, resets, exports, and isolated invite sessions; +- parallel affected-character Projector/Persona/Interpreter waves; +- impossible-action refusal, assessed stakes, server-side rolls, and receipted + commits; +- strategic clocks, away-time catch-up, institution activity, migration, and + information-channel-aware news; +- connected cohesive and arena simulation covers at budgets from 1 to 32; +- Gestalt materialisation, folding, member deltas, migration, and later + rematerialisation of the same person; +- atomic rejection of malformed, stale, or semantically invalid model waves; +- provider, token, cache, latency, validation, state-version, and build receipts; +- exact-build deployment and restart verification on Starfire. -- v0 canonical agent-state schema -- required variable lists for state families and relationship stance -- Call of the Void-flavored Cat/Oz fixture -- dependency-free fixture validator -- prompt projection contract -- projection distillation plan for teacher/student projector training -- persistence surfaces for re-entry, evidence, planning, and compaction hygiene +The immediate forge work is pressure-testing whether multiresolution Gestalts +produce satisfying setting-wide activity, callbacks, and surprises per token, +then running the two-tester paid-alpha path. The public site is provisional; +checkout is not live. -Not present yet: +## Multiplayer Intention -- runtime prompt renderer -- projection training dataset -- student projection model -- event/classifier pipeline -- simulation loop -- relationship update engine -- culture prior engine +The first paid alpha remains single-player. Multiplayer is an intended extension +of the existing authority model, not a separate chat mode. -## How Projection Is Supposed To Work +A campaign will continue to have one `WorldKernel`. Authenticated human sessions +will control distinct canonical actors, and every human or Persona proposal will +enter the same campaign mailbox. Each player receives a perception-specific +narrative projection; private knowledge is never unioned into a party prompt. +Splitting the party therefore changes occupancy and perception without creating +contradictory copies of the world. -For one speaker in one scene, Ghostlight should gather speaker-local state: +The durable intention and unresolved social-policy questions are recorded in +[`docs/architecture/ghostlight-dungeon-multiplayer-intention.md`](docs/architecture/ghostlight-dungeon-multiplayer-intention.md). +It does not expand the current MVP acceptance promise. -- what the speaker knows -- what they believe -- what they want -- what they are protecting -- what memories are active -- how they read the listener -- what the relationship currently feels like -- what circumstance the scene creates: routine, desire, scarcity, humor, - tenderness, danger, institutional friction, or open crisis -- what voice surface is active +## Architecture -The projection layer turns that into compact character-local prose and prompt -sections. The dialogue model then writes from the active circumstance and tonal -mode, not from a universal crisis register. +The shortest reliable re-entry path is: -Longer term, a frontier model can act as a teacher projector that generates -reviewed projection artifacts. Those artifacts can train a smaller student -projector once the projection schema, deterministic input slicer, and evaluator -are stable. +- [`docs/architecture/ghostlight-dungeon-mvp.md`](docs/architecture/ghostlight-dungeon-mvp.md): runtime authority, compiler, action loop, persistence, hosting, and security; +- [`docs/architecture/ghostlight-multiresolution-agency.md`](docs/architecture/ghostlight-multiresolution-agency.md): dynamic Gestalt partitioning, cohesive and arena cells, fairness, and atomic strategic waves; +- [`notes/ghostlight-current-system-map.md`](notes/ghostlight-current-system-map.md): current implemented pipeline; +- [`notes/ghostlight-implementation-plan.md`](notes/ghostlight-implementation-plan.md): live sequence and next pressure tests; +- [`state/map.yaml`](state/map.yaml): canonical human-readable project state. -## Repo Tour +## Repository Shape -- `AGENTS.md`: operating discipline for humans and agents -- `state/map.yaml`: canonical project map and current next action -- `state/scratch.md`: disposable working memory for one bounded subgoal -- `state/evidence.jsonl`: distilled belief-changing evidence -- `notes/fresh-workspace-handoff.md`: compact re-entry packet -- `notes/ghostlight-current-system-map.md`: current repo machinery -- `notes/ghostlight-implementation-plan.md`: larger implementation sequence -- `notes/architecture-rationale.md`: why the persistence and state split exists -- `docs/research/`: research backlog and modeling notes -- `docs/aetheria/`: Aetheria source material used by Ghostlight -- `docs/architecture/`: state, projection, and authoring architecture -- `schemas/`: JSON schema contracts and required field lists -- `examples/`: schema fixtures and future projection examples -- `tools/ghostlight_state.py`: state inspection and evidence helper -- `tools/ghostlight_prepare_compaction.py`: pre-compaction audit helper -- `tools/validate_agent_state.py`: focused fixture validator +- `crates/ghostlight-dungeon/`: Rust daemon, kernel, compiler, persistence, + provider stages, web lowerer, and acceptance harnesses; +- `crates/ghostlight-persona-projection/`: generalized projection membrane owned + by Ghostlight and consumed by Epiphany; +- `docs/architecture/`: durable contracts and authority maps; +- `docs/articles/`: accessible public explanations; +- `notes/`: implementation planning, handoff, and current-system maps; +- `schemas/`: published JSON Schemas for typed boundary documents; +- `examples/`: earlier fixtures and regression material; +- `state/`: human-readable project memory plus older research-pipeline state; +- `tools/`: state, validation, and fixture helpers. + +Runtime documents and campaign exports use MessagePack-backed CultCache `.cc`. +JSON exists at schema publication, browser, MCP, model-provider, and diagnostic +boundaries; it is not the canonical hosted state store. ## Useful Commands ```powershell +cargo test --workspace npm run state:status npm run state:prepare-compaction npm run schema:validate ``` -To add distilled evidence: - -```powershell -& 'C:\Users\Meta\.cache\codex-runtimes\codex-primary-runtime\dependencies\python\python.exe' '.\tools\ghostlight_state.py' add-evidence --type design --status accepted --note '...' -``` - -## Best Starting Points - -- `docs/architecture/canonical-agent-state-schema.md` -- `docs/architecture/cultnet-shared-agent-state-contract.md` -- `docs/architecture/agent-state-variable-glossary.md` -- `docs/architecture/prompt-projection-contract.md` -- `docs/architecture/projection-distillation-plan.md` -- `examples/agent-state.call-of-the-void.json` - -For Codex-driven work, read `AGENTS.md` before changing the repo. It contains -the working rules that keep the project state coherent between sessions. +For Codex-driven work, read `AGENTS.md` before changing the repository. It owns +the persistence, grounding, verification, and handoff discipline. diff --git a/docs/architecture/ghostlight-dungeon-multiplayer-intention.md b/docs/architecture/ghostlight-dungeon-multiplayer-intention.md new file mode 100644 index 0000000..bb8c413 --- /dev/null +++ b/docs/architecture/ghostlight-dungeon-multiplayer-intention.md @@ -0,0 +1,136 @@ +# Ghostlight Dungeon Multiplayer Intention + +## Status + +Multiplayer is an intended post-single-player extension. It is not part of the +current MVP acceptance promise, subscription contract, or deployed tester +surface. + +The existing simulation is already shaped around multiple bounded actors. The +extension should expose that anatomy to multiple human controllers without +creating a second world authority or a special multiplayer simulation loop. + +## Objective + +Let several human-controlled characters inhabit one persistent campaign while +preserving the same spatial, epistemic, causal, and commit invariants as solo +play. Players may share a scene, split across locations, keep secrets, arrive +late, miss events, and rejoin without receiving contradictory reconstructions +of the world. + +## Authority map + +- **Owner:** one per-campaign `WorldKernel` continues to own canonical state, + fictional time, revisions, rolls, events, and commits. +- **Inputs:** authenticated commands attributed to one campaign member and one + exact human-controlled actor; NPC and Gestalt proposals; scheduler commands; + current campaign and resolution revisions. +- **Outputs:** one atomic world transition plus actor-specific perceived events, + narrative projections, news access, and command receipts. +- **Derived state:** party rosters, shared transcript views, presence indicators, + ready state, and client notifications are projections of campaign membership, + occupancy, perception, and committed events. +- **Forbidden writers:** browsers, sessions, party leaders, Personas, + Interpreters, narrators, initiative, and realtime transports cannot commit or + repair campaign state. +- **Shared path:** solo commands, multiplayer commands, waits, travel, + simultaneous-action windows, NPC reactions, scheduler ticks, reconnects, and + imports use the same `WorldCommand → validate → atomic commit` primitive. +- **Cut line:** do not add a parallel room-state store, party prompt, shared + narrator memory, or multiplayer-only mutation path. + +## Intended model + +```text +Player A session ──> actor A command ─┐ +Player B session ──> actor B command ─┼─> campaign mailbox +NPC / Gestalt proposals ──────────────┘ │ + v + WorldKernel + │ + one committed event + revision + │ │ + A-perceived projection B-perceived projection + │ │ + A's surface B's surface +``` + +A human-controlled actor differs from a Persona-controlled actor only in the +source of its candidate action. Human text still describes an attempt. It does +not bypass capability, location, custody, knowledge, opposition, assessment, +initiative, or commit validation. + +## Invariants + +- Every active canonical subject is represented exactly once in the resolution + cover regardless of how many humans are connected. +- One authenticated campaign member controls one or more explicitly assigned + actors according to campaign policy. Control is never inferred from scene + presence. +- An absent or disconnected player's character is not puppeted. Delegation or + Persona proxying requires an explicit, revocable campaign permission. +- Perception and knowledge remain actor-local. A shared party transcript may + contain only events all included viewers are permitted to perceive. +- Private speech, hidden action, secret evidence, and character-local news are + projected only to entitled sessions. +- Players in different locations receive different narrative streams derived + from the same committed world. +- A player cannot make another player's action, reaction, injury, belief, or + relationship true by describing it. +- Simultaneously submitted incompatible attempts resolve from one snapshot and + one deterministic initiative/conflict pass. Arrival order at HTTP or CultNet + transport is not fictional initiative. +- Player count does not multiply the background Persona-cell budget. Resolution + policy belongs to the campaign; directly engaged player characters may create + the same explicit mandatory-cell overage as other foreground actors. +- Reconnect and replay derive the player's view from committed receipts and + perception rules. A client cache cannot repair or override the kernel. +- One malformed, stale, or unauthorized participant proposal cannot partially + mutate the shared world. + +## Social policy still to design + +The architecture makes shared worlds straightforward. A usable multiplayer +game still needs explicit answers for: + +- exclusive character control, temporary delegation, and permanent departure; +- host powers over invitation, removal, reset, fork, export, and campaign policy; +- asynchronous pacing and how much fictional time one active player may advance; +- simultaneous declaration windows for conflict, stealth, and split scenes; +- consent for player-versus-player persuasion, deception, theft, restraint, + injury, extraordinary influence, and character death; +- disclosure of hidden rolls, private messages, secrets, and retrospective logs; +- moderation, blocking, reporting, and campaign-data deletion; +- mixed privacy/provider lanes and whether one campaign may contain them; +- campaign billing, seats, guests, and ownership transfer. + +These are campaign-governance decisions, not browser affordances. They must be +typed, persisted, inspectable, and enforced at command admission. + +## Product sequence + +1. Prove the solo paid-alpha loop and multiresolution setting agency. +2. Add campaign membership and exact actor-control assignments without changing + world mutation. +3. Support two cooperative players in one scene with perception-specific output. +4. Support split locations, private communication, disconnect, and reconnect. +5. Add snapshot-bound simultaneous declaration windows. +6. Admit adversarial actions only after consent and governance policy is typed + and tested. + +The first multiplayer acceptance target should be cooperative and small. The +runtime should earn social complexity one invariant at a time. + +## Acceptance direction + +- Two players in one scene see one committed event and their own permitted + interpretations. +- A private fact learned by one player never appears in the other's projection. +- Split players can act in different locations without duplicating geometry, + actors, clocks, or institutions. +- Concurrent incompatible attempts resolve once from the same revision. +- A disconnected player remains unpuppeted while world clocks and remote agency + continue under campaign policy. +- Rejoining reconstructs the player's permitted continuity from exact receipts. +- Gestalt merge, split, migration, and named-member rematerialisation remain + correct while several human actors create simultaneous foreground pressure. diff --git a/docs/architecture/ghostlight-dungeon-mvp.md b/docs/architecture/ghostlight-dungeon-mvp.md index 18a74db..48c3ae7 100644 --- a/docs/architecture/ghostlight-dungeon-mvp.md +++ b/docs/architecture/ghostlight-dungeon-mvp.md @@ -772,7 +772,12 @@ Live model allocation: The daemon serves the embedded browser bundle on TCP 8831. Firewall scope is Starfire's private LAN and `10.77.0.0/24`; there is no public listener or Yggdrasil web gateway. Two single-use invites establish separate HttpOnly -sessions. Campaigns remain single-player. +sessions. Campaigns remain single-player in the MVP. This is a product-scope +constraint, not a WorldKernel identity: the intended post-solo extension maps +multiple authenticated members to distinct player-controlled actors while all +commands continue through the same campaign mailbox and atomic commit path. +`ghostlight-dungeon-multiplayer-intention.md` owns that future authority map; +it does not expand the current acceptance gate. The MVP runs as a normal detached process under the Starfire operator account. The launcher records the PID, exact executable path, release commit, and logs; diff --git a/notes/documentation-inventory.md b/notes/documentation-inventory.md index c100e1f..f0052b0 100644 --- a/notes/documentation-inventory.md +++ b/notes/documentation-inventory.md @@ -20,6 +20,9 @@ not slowly melt into one cursed binder. - `docs/architecture/ghostlight-multiresolution-agency.md`: dynamic agency graph, connected cohesive/arena covers, detail fairness, cell waves, fission, controls, and atomicity. +- `docs/architecture/ghostlight-dungeon-multiplayer-intention.md`: bounded + post-MVP extension of the campaign kernel to multiple human-controlled actors, + including authority, privacy, concurrency, and unresolved social policy. - `docs/architecture/canonical-agent-state-schema.md`: canonical state model. - `docs/architecture/agent-state-variable-glossary.md`: meanings for state axes, voice style, overlays, and emergent behaviors. diff --git a/notes/fresh-workspace-handoff.md b/notes/fresh-workspace-handoff.md index 6f81540..5b97797 100644 --- a/notes/fresh-workspace-handoff.md +++ b/notes/fresh-workspace-handoff.md @@ -63,6 +63,14 @@ populations never merge; only the derived simulation cover does. Budget/pin changes use `resolution_epoch`, provider parallelism uses its own configuration epoch, and neither advances fictional time. +The paid-alpha scope remains single-player, but single-player is not a kernel +invariant. `docs/architecture/ghostlight-dungeon-multiplayer-intention.md` +records the intended later extension: multiple authenticated humans control +distinct actors through the same mailbox, perception gates, initiative, and +atomic WorldKernel commit path. It introduces no party prompt, room-state +authority, or current implementation work. The forge remains focused on proving +that multiresolution Gestalts preserve agency and produce satisfying surprises. + The current acceptance candidate adds a bounded population activity vocabulary for preparation, coordination, investigation, recruitment, obstruction, trade, and communication. Each action is constituent-attributed, graph- and diff --git a/notes/ghostlight-current-system-map.md b/notes/ghostlight-current-system-map.md index 53e4f59..85be09c 100644 --- a/notes/ghostlight-current-system-map.md +++ b/notes/ghostlight-current-system-map.md @@ -23,6 +23,14 @@ Vault evidence receipts + typed campaign snapshot Ghostlight owns the generalized projection organ. Epiphany and other consumers own their canonical Persona state and consequence commits. +The current player surface assigns one human session to one single-player +campaign. That is product scope, not kernel identity. The intended multiplayer +extension maps authenticated campaign members to distinct canonical actors and +routes every human command through this same mailbox and WorldKernel. Each +player receives an actor-permitted narrative projection; no party prompt or +shared client state becomes a second world authority. The bounded intention is +mapped in `docs/architecture/ghostlight-dungeon-multiplayer-intention.md`. + Build provenance has one owner: `crates/ghostlight-dungeon/build.rs` binds the exact source commit into the binary. Its inputs are either the release tool's explicit clean-tree commit or Git HEAD; it watches the actual symbolic ref, diff --git a/notes/ghostlight-dungeon.md b/notes/ghostlight-dungeon.md index e993bb1..74082da 100644 --- a/notes/ghostlight-dungeon.md +++ b/notes/ghostlight-dungeon.md @@ -288,5 +288,5 @@ Publish JSON Schema only as the schema catalog. Runtime documents and exports us - Aetheria is the only bundled Vault adapter, but no compiler logic is Aetheria-specific. - Generated suggestions plus unrestricted custom compilation replace fixed featured openings. - No D&D classes, spell slots, six-ability statistics, or 5e sheet are canonical in the MVP. The typed character ledger remains sufficient for later D&D-shaped projections. -- No arbitrary Vault upload/import UI, multiplayer campaign, voice, image generation, direct canon mutation, or public internet exposure. +- No arbitrary Vault upload/import UI, multiplayer campaign, voice, image generation, direct canon mutation, or public internet exposure in the MVP. Multiplayer is an intended extension of the existing one-kernel/many-actors authority model and is documented separately; it does not expand this acceptance plan. - The live deployment requires a DeepSeek key and restoration of the trusted VoidBot retrieval crossing; fixture-backed development may proceed before those two setup gates. diff --git a/notes/ghostlight-implementation-plan.md b/notes/ghostlight-implementation-plan.md index 5ba8788..063b30d 100644 --- a/notes/ghostlight-implementation-plan.md +++ b/notes/ghostlight-implementation-plan.md @@ -84,6 +84,14 @@ misplaced authority. Use model-stage cache usage, rejection receipts, cover plans, outcomes, and world commits to improve satisfaction and cognitive efficiency without weakening state admission. +Multiplayer remains outside the current paid-alpha gate but is now an explicit +architectural intention. Do not fork the simulation into a multiplayer room +model. After the solo product and Gestalt agency are proven, extend campaign +membership so authenticated humans control distinct canonical actors through +the existing mailbox, perception gates, initiative, and atomic commit path. The +authority map and unresolved consent/governance questions live in +`docs/architecture/ghostlight-dungeon-multiplayer-intention.md`. + ## Prior research-program phase Build a reliable data-generation loop for socially persistent Aetheria agents. diff --git a/state/evidence.jsonl b/state/evidence.jsonl index c2cf809..17ba93b 100644 --- a/state/evidence.jsonl +++ b/state/evidence.jsonl @@ -84,3 +84,4 @@ {"ts":"2026-08-17T15:20:00Z","type":"verification","status":"ok","branch":"codex/ghostlight-dungeon-mvp","note":"Live DeepSeek acceptance drove a 24-faction global agency skeleton through a budget-4 cover: all subjects appeared exactly once in four connected cells, three cross-faction cells remained arenas, two exact-constituent institutional consequences committed atomically, and the absent player was unchanged. Cutting model ownership of focal overage and deterministic cell bindings, splitting Projector situation context from Interpreter permissions, and stabilizing prompt prefixes reduced prompt use from 37,327 tokens/17.81s to 20,760 tokens/14.38s; all 13 stages validated first try. Witness: F:\\GameCult\\GhostlightDungeon\\acceptance\\gestalt-scale-20260817-151658\\result.json."} {"ts":"2026-08-17T16:54:00Z","type":"verification","status":"ok","branch":"codex/ghostlight-dungeon-mvp","note":"Exact commit 84951fda6f17d06a03456ecef5d79f833006b92d completed the live VoidBot/DeepSeek compiler in 43.35 seconds with five first-attempt-valid stages. The seed admitted one local institution and a separately compiled global skeleton of 17 remote institutions; every remote agency profile carries only coarse deterministic facets plus nonempty evidence receipt IDs drawn from the preview's exact five Vault receipts. Ten unsupported agency candidates were omitted into one approval-visible coverage gap, and remote coverage gaps did not become canon candidates. Witness: F:\\GameCult\\GhostlightDungeon\\acceptance\\compiler-20260817-165127\\result.json."} {"ts":"2026-08-17T17:22:30Z","type":"deployment","status":"ok","branch":"codex/ghostlight-dungeon-mvp","note":"Starfire activated immutable release f1d55b181ad60ace8e8e92859c4d0b2f1a94fc87 with binary SHA-256 119772af15859d8c26e7239d705a229ce01b24d6a7e70105b78e4df227ef0583. Active junction, release manifest, executable hash, PID 26140, typed health, persisted campaign count, ready DeepSeek startup inference, and the Ghostlight-owned CultMesh store agree. Periwinkle at 192.168.178.158 received exact health over the LocalSubnet lane and HTTP 401 for unauthenticated campaign access; Raven and Yggdrasil independently received exact health over WireGuard. Windows-generated public prompt rules were removed; the only Ghostlight rules admit TCP 8831 from LocalSubnet and 10.77.0.0/24. Live VoidBot retrieval returned the canonical Aetheria factions source, and the deployed browser renders a non-interactive authentication gate when no valid session exists."} +{"ts":"2026-08-18T14:36:02Z","type":"design","status":"accepted","branch":"codex/ghostlight-dungeon-mvp","note":"Multiplayer is an intended post-solo extension of the existing one-WorldKernel, many-actor authority model. Multiple authenticated humans will control distinct actors through the same campaign mailbox, perception gates, initiative, and atomic commit path; no party prompt or room-state authority is introduced. The paid alpha remains single-player while multiresolution Gestalt proof stays the immediate forge priority."} diff --git a/state/ghostlight-state.cultcache.jsonl b/state/ghostlight-state.cultcache.jsonl index c69a0c4..460df40 100644 --- a/state/ghostlight-state.cultcache.jsonl +++ b/state/ghostlight-state.cultcache.jsonl @@ -74,3 +74,4 @@ {"key": "2026-08-16T181228Z0000-0072-4445afe2af66", "payload": "eyJub3RlIjogIldvcmxkIGNvbXBpbGVyIGxpdmUgYWNjZXB0YW5jZSBwYXNzZWQgb24gMjAyNi0wOC0xNjogRGVlcFNlZWsgdjQgUHJvIGNvbnN1bWVkIDMwIGhhc2hlZCBWb2lkQm90IHdpdG5lc3NlcyBhY3Jvc3MgdGhyZWUgcmVjZWlwdHMsIGVtaXR0ZWQgdGhyZWUgbG9jYXRpb25zLCB0aHJlZSBhY3RvcnMsIHR3byBpbnN0aXR1dGlvbnMsIHR3byBjbG9ja3MsIGV4cGxpY2l0IGdhcHMgYW5kIGJyYW5jaCBhc3N1bXB0aW9ucywgYW5kIHJlbWFpbmVkIGFuIHVuY29tbWl0dGVkIHJldmlzaW9uLTAgYXBwcm92YWwgcHJldmlldy4gRGV0ZXJtaW5pc3RpYyB0ZXN0cyByZWplY3QgZGFuZ2xpbmcgcm91dGVzIGFuZCBtYWxmb3JtZWQgdHlwZWQgc2VlZHMuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA4LTE2VDE4OjEyOjI4KzAwOjAwIiwgInR5cGUiOiAiaW1wbGVtZW50YXRpb24ifQ==", "stored_at": "2026-08-16T18:12:28.266343+00:00", "type": "ghostlight.evidence_record.v0"} {"key": "2026-08-16T181714Z0000-0073-fbac9b66b666", "payload": "eyJub3RlIjogIkRpc3Bvc2FibGUgSFRUUCBhY2NlcHRhbmNlIHByb3ZlZCB1bmF1dGhlbnRpY2F0ZWQgNDAxLCBjb21waWxlci1vbmx5IHN1cmZhY2UgYmVmb3JlIGFwcHJvdmFsLCBleHBsaWNpdCBjYW1wYWlnbiBhZG1pc3Npb24gd2l0aCB0aHJlZSBldmlkZW5jZSByZWNlaXB0cywgY2FtcGFpZ24gcmVsb2FkIGFmdGVyIGRhZW1vbiByZXN0YXJ0LCBhdXRoZW50aWNhdGVkIHNlc3Npb24gc3Vydml2YWwgYWZ0ZXIgcmVzdGFydCwgYW5kIDQwMSBvbiBjb25zdW1lZC1pbnZpdGUgcmV1c2UuIEF1dGggQ3VsdENhY2hlIHN0b3JlcyB0b2tlbi9zZXNzaW9uIGhhc2hlcyByYXRoZXIgdGhhbiBwbGFpbnRleHQuIiwgInN0YXR1cyI6ICJvayIsICJ0cyI6ICIyMDI2LTA4LTE2VDE4OjE3OjE0KzAwOjAwIiwgInR5cGUiOiAidmVyaWZpY2F0aW9uIn0=", "stored_at": "2026-08-16T18:17:14.919779+00:00", "type": "ghostlight.evidence_record.v0"} {"key": "2026-08-16T211000Z0000-0074-ab460066cd5d", "payload": "eyJicmFuY2giOiAiY29kZXgvZ2hvc3RsaWdodC1kdW5nZW9uLW12cCIsICJub3RlIjogIlJlZ2lzdHJ5IEhUVFAgYWNjZXB0YW5jZSBhdCBjb21taXQgMzgxY2JmMjogdHdvIHNpbmdsZS11c2UgaW52aXRlIHNlc3Npb25zIGNvbXBpbGVkIGRpc3RpbmN0IGxpdmUgRGVlcFNlZWsvVm9pZEJvdC1ncm91bmRlZCBjYW1wYWlnbnMgd2l0aCBkaWZmZXJlbnQgSURzLCBzdXJmYWNlcywgZXZpZGVuY2UgcmVjZWlwdHMsIGFuZCBwZXItY2FtcGFpZ24gLmNjIHN0b3JlczsgY3Jvc3Mtc2Vzc2lvbiBzZWxlY3Rpb24gcmV0dXJuZWQgNDAzLiBGb3JrLCByZXNldCwgMSwwNTYsNzY4LWJ5dGUgQ3VsdENhY2hlIGV4cG9ydCwgc2Vzc2lvbi9jYW1wYWlnbiBzdXJ2aXZhbCBhY3Jvc3MgZGFlbW9uIHJlc3RhcnQsIHJlamVjdGVkLWNvbW1hbmQgcmVjZWlwdCB3aXRob3V0IHJldmlzaW9uIGFkdmFuY2UsIGNvbW1pdHRlZCBXYWl0IG5hcnJhdGlvbiwgYW5kIHplcm8gc2V0dGxlZCBsaXZlLXR1cm4gcHJlc3N1cmUgYWxsIHBhc3NlZC4gRGlzcG9zYWJsZSB3aXRuZXNzIHJvb3Q6IEY6XFxHYW1lQ3VsdFxcR2hvc3RsaWdodER1bmdlb25cXHNtb2tlXFxyZWdpc3RyeS0zODFjYmYyLiIsICJzdGF0dXMiOiAib2siLCAidHMiOiAiMjAyNi0wOC0xNlQyMToxMDowMCswMDowMCIsICJ0eXBlIjogInZlcmlmaWNhdGlvbiJ9", "stored_at": "2026-08-16T19:06:57.787318+00:00", "type": "ghostlight.evidence_record.v0"} +{"key": "2026-08-18T143602Z0000-0075-38277e5390c5", "payload": "eyJicmFuY2giOiAiY29kZXgvZ2hvc3RsaWdodC1kdW5nZW9uLW12cCIsICJub3RlIjogIk11bHRpcGxheWVyIGlzIGFuIGludGVuZGVkIHBvc3Qtc29sbyBleHRlbnNpb24gb2YgdGhlIGV4aXN0aW5nIG9uZS1Xb3JsZEtlcm5lbCwgbWFueS1hY3RvciBhdXRob3JpdHkgbW9kZWwuIE11bHRpcGxlIGF1dGhlbnRpY2F0ZWQgaHVtYW5zIHdpbGwgY29udHJvbCBkaXN0aW5jdCBhY3RvcnMgdGhyb3VnaCB0aGUgc2FtZSBjYW1wYWlnbiBtYWlsYm94LCBwZXJjZXB0aW9uIGdhdGVzLCBpbml0aWF0aXZlLCBhbmQgYXRvbWljIGNvbW1pdCBwYXRoOyBubyBwYXJ0eSBwcm9tcHQgb3Igcm9vbS1zdGF0ZSBhdXRob3JpdHkgaXMgaW50cm9kdWNlZC4gVGhlIHBhaWQgYWxwaGEgcmVtYWlucyBzaW5nbGUtcGxheWVyIHdoaWxlIG11bHRpcmVzb2x1dGlvbiBHZXN0YWx0IHByb29mIHN0YXlzIHRoZSBpbW1lZGlhdGUgZm9yZ2UgcHJpb3JpdHkuIiwgInN0YXR1cyI6ICJhY2NlcHRlZCIsICJ0cyI6ICIyMDI2LTA4LTE4VDE0OjM2OjAyKzAwOjAwIiwgInR5cGUiOiAiZGVzaWduIn0=", "stored_at": "2026-08-18T14:36:02.925590+00:00", "type": "ghostlight.evidence_record.v0"} diff --git a/state/map.yaml b/state/map.yaml index 74db6da..7ce9fe1 100644 --- a/state/map.yaml +++ b/state/map.yaml @@ -10,10 +10,12 @@ experiment: mission: ghostlight_dungeon: > - Build a persistent, Vault-grounded single-player narrative simulation whose - WorldKernel exclusively owns revisioned world state, while generalized + Build a persistent, Vault-grounded narrative simulation whose WorldKernel + exclusively owns revisioned world state, while generalized Projector-Persona-Interpreter machinery produces bounded proposals for the - kernel to validate. + kernel to validate. The paid-alpha surface is single-player; the durable + authority model intentionally admits multiple authenticated humans as + controllers of distinct canonical actors later. primary: > Generate psychologically grounded branching scenes, dialogue, actions, social consequences, and eventually storylines, consumer behavior, @@ -84,6 +86,7 @@ live_architecture: - Budget and pins own `resolution_epoch`; provider concurrency owns a separate configuration epoch and cannot repartition or advance fiction. - Approval-gated gestalt fission creates explicit child leaves plus `other/unknown`, preserves inactive parent lineage, and never erases member deltas. - Existing v0 training fixtures are regression evidence and have no runtime write authority. + - Multiplayer is a post-solo extension of the same campaign mailbox and WorldKernel, not a parallel room-state or party-prompt authority. The intention and unresolved governance policy live in `docs/architecture/ghostlight-dungeon-multiplayer-intention.md`. persistence_spine: - The hosted runtime uses Rust CultCache/redb `.cc` stores: one store per campaign plus service auth and CultMesh stores. - `state/ghostlight-state.cultcache.jsonl`, `state/branches.json`, and `state/evidence.jsonl` belong to the older research pipeline and have no hosted runtime authority.