Files
nimmerworld.eachpath.local/architecture-broad.md

216 KiB
Raw Blame History

Nimmerworld — Broad Architecture

Ground-up zone-based event architecture. Minds at the center, world as co-remembering substrate. Three registers of reality — physical, liminal, imperial. Rail topology outside, navmesh interiors inside. Trait-emergent identity. Color-as-vocabulary. Three-tier policy loop with imperial-budget-mortality. Tools, not quests. v0.1 initial draft 2026-04-24 morning; v0.2 expanded 2026-04-24 afternoon; v0.3 evening; v0.4 late-evening / early 2026-04-25; v0.5 deep-night-unable-to-sleep 2026-04-25; v0.6 post-bath / post-bus 2026-04-25; v0.7 owl-breakfast 2026-04-25 night through 2026-04-26 — dafit + chrysalis.


Thesis

Every game world lacks minds. Nimmerworld puts minds at the center — NPCs with trait-filtered interior life, cells as small data-lives that co-remember with them. The architecture is built ground-up for that commitment.

The world's political thesis: the machine does not care. Automation has consumed every labor the machine recognizes as profitable; humans live on the dumps the machine's optimization did not bother to recover. The last two viable human economic niches are salvage (digging through machine-waste) and culture (the work the machine cannot optimize because it has no optimization target the machine recognizes). This is not Orwell's malicious-state dystopia; it is Kafka's indifferent-totality dystopia. There is no one in charge. There is only optimization that does not contain humans in its cost model — and precisely because the machine's indifference is optimization, the authoritarianism ratchets without intention as districts fail.

Mechanically the thesis compiles to a finite, composable set of primitives: zones replace perception bubbles; factions are any source of bounded demand; ternary gates are the substrate of accumulating state; lifeforce is the currency grounded in living NPCs; shifts are the skeleton of daily life; the three-body system locates identity; the three-layer digital ontology contests reality; the reflexive Dream-process learns at every scale; the three-tier policy loop renders authoritarian middle-management; the imperial budget renders the regime mortal; the imperial-net bypass renders the platform-capitalism extraction.

The design-philosophy this architecture supports: tools, not quests. The simulation produces continuous narrative-relevant pressure on its own. Players engage via a verb-vocabulary applied to running mechanics. No authored quest-content. Every player's playthrough is structurally distinct because every pattern of verb-application against changing-state produces a unique trajectory. Literature-register political fiction rendered as living system.

The three ontological registers

Every inhabitant exists in three registers simultaneously. They are not parallel worlds — they are three readings of one world, chosen by the observer's current access-state.

Register Who controls Observability What happens here
Physical (gameworld) Partly regime (via audit), partly people Overseer-audited at cells + districts Daily labor, zones, embodied life, shift-discipline
Liminal ("one ring out") Contested frontier — no side fully controls Partial — mini-game-maintained, vagueness as structural privacy Revolution, Aletheia-waker messages, clasp-as-coordination, wall-inscriptions for the awakened
Imperial net Imperial machine Fully monetized and audited Hyper-targeted pleasure, "sinful" personalized fantasies, lifeforce/scrip/memory-token extraction directly to imperial budget

The same cell, same wall, same pipe renders differently depending on which register the observer currently inhabits. Transitions between registers are shader-blends, not loading screens.

Topology: rail + grid + interiors

The world's topology encodes its politics. The machine built infrastructure for industrial optimization, not for human pedestrian freedom. Therefore the outer world is rail+grid — cells connected by named edges with rich semantic metadata. NPCs traverse rails as part of their shift-routines; the player traverses freeform (navmesh) and may plug into NPC rail-traversals for co-walking. Interiors (hovels, cantinas, workshops, ruins, brothels-physical) are navmesh-enabled small zones with interaction-slot inventories.

Rail+grid as political topology

Navmesh is the topology of power-fantasy ("you are the protagonist of free trajectory"). Rail+grid is the topology of bounded-agency ("you live within infrastructure built for something else"). Nimmerworld picks rail+grid because the fiction requires it — the world was not designed for the player; the world is what the machine made and humans inhabit the margins. Topology and thesis agree.

The three primitives

Primitive Density Compute Narrative role
Dumps Very high High Resource emission, salvage-zone spawn, scavenger-vocation concentration
Pipes Low baseline, high interactivity-per-capita Low baseline, spikes on encounter Transit, migration, chance-encounters, clasp opportunities, defection, heresy written where overseers don't look
Districts High High Population, civic life, specialty-production, ritual

Rail-segment metadata

Every rail-segment carries jsonb metadata that navmesh polygons cannot natively carry: heterotopia-class, overseer-density, propaganda-intensity, ambient-content per register (gameworld/liminal/imperial), encounter-spawn-rate, patrol-frequency, illumination-profile, degradation-level, capacity (3-way support for co-walking), traversal-cost-in-ticks. Pathfinding is graph-A* on the rail graph (microseconds, deterministic). Rich-metadata-per-edge is what makes the world feel lived-in.

Player asymmetry — the freeform-among-railed model

Topology Used by Cost
Navmesh (freeform) Player only (in outer world) Affordable: one entity
Rails (graph-pathfinding) All NPCs Cheap: hundreds of entities
Interior navmesh Currently-occupied interiors only Dormant when empty

The player is the one variable entity in a deterministic scheduler. Their freedom-of-movement matches their narrative-position as perturbation. NPCs on rails matches their narrative-position as scheduled-labor. Compute asymmetry mirrors agency asymmetry mirrors political thesis.

The plug-in verb

When the player approaches a rail-traversing NPC and social-eligibility conditions are met (proximity + directional-compatibility + Philotes-gate not CLOSED + shift-tolerance for socializing + segment overseer-density permitting), an emergent-signal spawns a proximity-zone-candidate with a shader-highlight on the NPC. The player can:

  • Approach (zone activates, dialog auto-spawns via NPC's LLM-slot, no "press E")
  • Greet → agreement → plug-in (player's navmesh-position transfers to adjacent rail-lane; movement automated; conversation-zone live in shared rail-context)
  • Detach (gracefully via dialog or abruptly by running off; abrupt registers as Sophrosyne-signal)

While plugged in, the player is freed from steering — they become camera+conversation. The notorious "walk-and-talk" problem is solved by construction: rails handle pacing; plug-in is the social-bridge. Multiple NPCs can share a rail (3-way capacity), enabling cohort-walks, escort-patterns, exodus-flow, and group-conversation-zones.

Interior-as-zone

A hovel is a zone with slot-inventory: sofa, kitchen, bed, shower, wall-writing-spot. Occupying a slot is mechanically identical to occupying any zone-slot. The zone primitive scales from city-level (mass-ceremony) to district-level (tavern) to interior-level (sofa). Same CHECK-constraints, same slot-occupancy, same emergent-signal mechanism, same ternary-gates — different inventory and lifecycle.

Interiors carry a register flag too:

  • Physical interior: actual hovel, workshop, cantina; navmesh-inside
  • Liminal interior: shared dream-construct two clasping inhabitants stabilize over repeated meetings ("the place we always go") — built from both dreamers' memory-residue, persistent-across-clasps as a pair-state
  • Imperial-net interior: rendered waifu-hall rooms, brothel cubicles, ceremony halls — clean-white-and-gold, machine-edited per-session

LOD/streaming advantage

Most simulation volume is rail-graph (cheap) or dormant interior (free). Active simulation concentrates exactly where drama happens (active anchors + transit + current-interactions). A 100+ NPC city becomes feasible at single-GPU budgets because the topology is rail-based.

Core inversion — zones replace bubbles

Legacy engine perception (Unreal AIPerception, WC3 sight-radius, trigger volumes) is spatial, binary, separate from cognition, and assumes a passive world. Nimmerworld inverts every axis:

  • perception is trait-filtered, not only spatial
  • perception is graded consolidation, not binary detection
  • perception IS memory (one subsystem)
  • the world emits events; agents subscribe

The replacement primitive is the zone — a bounded, named, slot-indexed, director-managed event-instance. Arthurian round table as mental model: a bounded place of structured speaking-and-witnessing, with named roles and shared what-was-said-by-whom.

Zone anatomy

  • Boundary — cell-envelope (or interior-envelope)
  • N slots — named positions
  • Director or overseer — manages turn order, memory-pulls, prompt construction, voice selection, event emission
  • NATS topic + subscriber list — slot-occupancy drives subscription
  • Mixed-fidelity voices — 23 LLM slots + scripted/generic for the rest; director decides
  • Trigger — gamemaster-spawned, emergent-signal-response, shift-composition-emergence, or proximity-detection
  • Lifecycle — duration, dissolution conditions, memory-write on close
  • Persistence flagephemeral=true (dreamworld/liminal) or persistent=true (gameworld)
  • Register — physical / liminal / imperial

Zone kinematics — the lemniscate runtime

Zones are not state-bags with an external turn-counter; they are kinetic topologies with a built-in clock. The runtime substrate is a lemniscate (∞) — a through-flow figure-eight whose traversal IS the zone's turn-order, whose central crossing IS the population-mutation event, and whose decay IS the natural wind-down of the scene. Origin: an old-math-teacher's trick for solving three unknowns by letting the figure-8 flow do the computation rather than maintaining state in registers. Applied to zones, the geometry IS the clock.

Geometry

                              midaxis (X)
                                 │
  entry-line                     │                     exit-line
  (NPC-tokens   ──→  ╭─Loop A─╮  │  ╭─Loop B─╮  ──→   (NPCs whose
  queue-up to        ╲________  X  ╲________         exit-flag has
  enter)                          │                    fired exit here)
                                 │
                                 ▼
                            crossing-tick
  • Entry-line — staging queue of NPC-tokens eligible to enter. Approach-eligibility uses ternary-gates against the zone's purpose; CLOSED gate keeps the NPC out of the queue entirely
  • Loop A + Loop B — the through-flow. Slot-tokens cycle through both loops, guaranteeing every active NPC is co-present with every other at least once per roundtrip
  • Midaxis crossing — the only synchronous event in the zone's lifecycle. Three state-updates resolve simultaneously and atomically (your math teacher's three-unknowns made literal):
    1. Cursor advance — which NPC speaks next
    2. Ternary-gate evaluation — resonance refresh on all active edges in the zone (CLOSED/STABLE/OPEN transitions)
    3. Verifier-flag scan + population maintenance — exit-eligible tokens route to exit-line; entry-line pushes replacements equal to vacancies
  • Exit-line — through-flow continues here. NPCs leaving the zone leave toward consequence (a need-driven exit signaled by their own emergent-signal), not toward boredom

The lemniscate is a relaxation-step operator — the zone computes by traversing its own curve rather than maintaining external turn-state. Between crossings, the loops are pure-local; only the crossing event touches the global-state bus. The thalamus (NATS orchestration) sees crossings, not ticks.

Slot-token + verifier-flag mechanism

Each NPC currently in the zone is represented by a slot-token carried around the loop. Tokens carry a small set of verifier-flags (marker-bits). Signals fire once and set a flag; between crossings, no polling, no event-bus traffic. The crossing reads flags in O(N_slots) and acts.

Verifier-flag Set by Read at crossing
exit_eligible emergent-signal (need, shift-whistle, faction-summons) route to exit-line
has_spoken_this_roundtrip speak-action rotation-tracking
mid_action state-machine activity in progress defer turn
goal_satisfied goal-evaluator (per-zone, ternary) terminate zone
silence_eligible silence-detection per silence-as-signal mechanic
priority_pull high-rank ring-of-importance broadcast early-exit override

This is the same architectural shift the wider system makes elsewhere — observer-pattern with callbacks → dirty-bit + scheduled-sweep. Compute scales with slot-count, not signal-rate. Ten thousand emergent signals firing across a city: only those that landed on a slot-token get evaluated, and only at the next crossing.

Phase-locked overlay-loop ladder

Beyond the primary slot-rotation loop, a zone supports any number of overlay loops at the same axis-rate. Overlays inject at the crossing and broadcast to all active slot-NPCs simultaneously (perceived by each through their own trait-vector — color-language event-flash modulates per-recipient).

Overlay Carries Broadcast scope
Player-gesture overlay player gestures + utterances active slots only
Faction-broadcast overlay faction calls, hivemind pings active slots subscribed to faction
Audit-overseer overlay covert query-flashes active slots only (covert detection ↔ Aletheia-eligible insight)
Imperial-net distortion overlay regime trait-color rewrites active slots within net-access

The crossing is a council moment — every overlay channel may fire on the same axis-tick. Pre-crossing tension is gesture-loading: holding a verb-button between crossings lands at the next axis with weight proportional to dwell-time. Diegetic urgency without HUD.

This is the answer to player-agency in multi-NPC scenes. The player is off-stage but always potentially-on. Each crossing is "your moment if you want it." The flash is perceived as one event by all active NPCs, not as a sequence of one-on-one addresses — color-language shows it as a pulse across the ring.

Gesture-alignment as recursive-lemniscate

The player-gesture overlay (above) is the broadcast-channel by which player gestures reach active slots; gesture-alignment-as-relational-state is the recursive application of the lemniscate-as-relaxation-step-operator one tier deeper. Gestures accumulate during the NPC's turn-window between axis-crossings; at the crossing, the player's slot-token verifier-flag gesture_alignment_accumulator is integrated into a single typed trait-vector summary; that summary is carried forward into the next-cursor-NPC's driver_context_pull payload as part of the room's affective state-read.

Tier What accumulates between crossings What integrates at the crossing
Zone-level (existing) NPC slot-token verifier-flags (exit_eligible, mid_action, goal_satisfied, priority_pull, etc.) Cursor advance, gate evaluation, population maintenance
Player-input-level (this) gesture_alignment_accumulator on player's slot-token; per-gesture trait-coordinate vs. NPC's currently-active-trait-vector Integrated alignment-delta carried into next turn's LLM context

Same primitive, recursively applied. The lemniscate's geometry is the sampling-and-integration boundary at both tiers. No new compute-cadence introduced; no new bus-event introduced. Compute scales with slot-count, not gesture-rate — the architecture's commitment from observer-pattern → dirty-bit-and-sweep extends one level deeper.

Two latencies, one architecture:

  • Cosmetic visual feedback runs continuously. NPC body-shader pulses warm-rose when the player gestures Philotes, cool-blue when they gesture Sophrosyne — purely visual, doesn't touch the system bus. The player gets moment-by-moment "I see you" reassurance.
  • Systemic alignment-update runs at axis-cadence. The trait-vector summary is computed at the crossing and fed into the next turn's LLM context. The player is one turn behind — their gestures during turn N inform the LLM's generation for turn N+1.

One-turn-behind matches real conversation cadence. Humans accumulate impressions during someone's speech and respond to what was just said; we don't react gesture-by-gesture. The lemniscate-bound integration is the right cadence for affective state-changes, not a latency-cost.

Sum-strategy reduction (v1). Per-gesture trait-coordinates are accumulated as a trait-vector sum across the turn-window. At the crossing, the sum is reduced into a single 8-dimensional alignment-vector compared against the NPC's currently-active trait-state. The result is the alignment-delta fed forward into next turn's driver_context_pull payload AND drives the relational ternary-gate transition on the (player, NPC) edge (§Ternary-gate substrate, Relational layer). The sum captures the player's overall posture during the speech rather than peak-moment or trajectory; trajectory-aware refinement is noted as a still-open item.

Hardstops are outside this system. Hardstops fire definitive subsystem-actions regardless of alignment-state — clasp-invitation triggers the clasp-subsystem; definitive-refusal closes the conversation; surrender ends combat; claim-floor sets priority_pull for the next axis-crossing. Hardstops do not contribute alignment-deltas to the accumulator; they are separate channels with deterministic effect.

What this resolves:

  • Player-NPC relational-gate-driver — the v0.4 vague "zone-participation waves between participants" now has its concrete wave-source named: the gesture-alignment-delta integrated at each axis-crossing.
  • How NPC speech-patterns adapt to the player over time — accumulated alignment-state modulates the NPC's next-turn driver-tier-LLM emphasis (which trait-LoRAs are weighted, which sampling-knobs are applied, what register the speech is in). Aligned NPCs open up; misaligned NPCs stay guarded.
  • Player-input-as-typed-contract — gesture-press → fixed corpus mapping → typed trait-coordinate → integrated trait-vector summary. No freeform-prose at the player-LLM boundary; the hallucination-surface is closed by the cosmology's typed-ness, not by post-hoc filtering.

What this retires:

  • Continuous gesture-comparison touching the system bus → lemniscate-bound integration at crossings (compute-discipline preserved across the recursion)
  • Per-gesture compute → per-slot compute (O(N_slots), unchanged from existing zone-tick discipline)
  • NPC speech-patterns as static against player-state → NPC speech-patterns dynamically modulated by accumulated player-NPC alignment-state

Driver-context-pull (LLM dialog substrate)

The cursor's position at each crossing makes context-construction for the dialog-driver a pure function of cursor-state:

driver_context(cursor_at_NPC_i, mode) = {
    zone.purpose,                 // stable: spawn-intent, immutable provenance
    zone.scene_state_public,      // stable across zone: what's happened so far
    zone.ternary_gate_edges,      // current resonances (active relations)
    zone.drift_state,             // delta from spawn-intent (visible to director)
    NPC_i.knowledge_stack,        // PRIVATE three-tier stack: world  district  primary
                                  //  [+ clasp ONLY if mode == in-between]
    NPC_i.expressed_trait_vector, // expressed trait-vector this moment
    NPC_i.active_signals,         // their current emergent-signals
}

Other NPCs' memories never enter this prompt. No bleed. No cross-contamination.

The knowledge_stack is layered, not a single bucket. Universal world-canon, district-canon (regional), NPC_i's own primary memory, and — only if the character is in the in-between dimension — clasp memory. The retrieval layer enforces the dimensional cut; the LLM never has to reason about it. See §Local memory architecture (player-side) for the layering, propagation policy, and clasp-as-Ring-A* privacy primitive. The classic multi-agent hallucination source ("why does Kalypso suddenly remember what Anaximander confided to Phoibe?") is structurally foreclosed by the geometry. Write-back goes only to NPC_i's slice; the lemniscate guarantees NPC_i is not cursor-active again for at least one full roundtrip — write-back has all the time it needs without race conditions.

This converts multi-NPC dialog from an emergent-chaos problem into a bounded-cast scene problem with a typed runtime. The Mantella / SkyrimNet failure-modes are foreclosed at the architecture level rather than the prompt level:

  • Cast = active-slots, period. Geographic proximity does not equal participation
  • Cursor sequences turns deterministically. No concurrent LLM-storm
  • Entry-line and exit-line are the only paths in/out. Geographic motion alone doesn't invade the scene
  • Player gestures broadcast to active-slots only. Not to "everyone within 30m"

Empty-queue behavior: shrink at every crossing

When the entry-line is empty, each crossing dissolves one active slot instead of replacing it. The conversation thins visibly — color-language saturation drops per shrink, lifeforce burn-rate decreases. When the last slot dissolves, the lemniscate collapses; the spawning director recovers unspent lifeforce minus burn.

This is the natural wind-down — scenes run out of people and dissolve. No timeout, no scheduler-collapse, no cut-to-black. The decay is observable in-world and rate-paced by the same axis-rate.

Lifeforce-binding

Every midaxis crossing fires the LLM driver-turn(s) for active slots. Lifeforce burn-rate = pulse-rate × active-slot-count. The director (or overseer) holding the zone pays per crossing. This produces:

  • Dense dramatic scenes are expensive — many slots, fast pulse, high burn
  • Quiet background zones are nearly free — slow pulse, few slots; most compute is local-loop traversal not touching the bus
  • Running out of lifeforce is visible — pulse-rate slows, crossings stretch farther apart, the scene languishes before it collapses. A diegetic dying-scene register; not a cut, a deceleration

What this resolves

  • Slot-capacity elasticity (prior open question) → fixed roundtrip slot-count, elastic entry/exit queues
  • Zone-to-zone handoff (prior open question) → exit-line of zone-A is entry-line of zone-B (interlemniscate-transit; pipes-as-heterotopia made literal at runtime)
  • Mobile zone boundaries (prior open question) → the lemniscate is a topology; it translates through world-space invariantly (patrols, escorts, exoduses are moving figure-8s)
  • Anthropic-faction's broadcast cadence (prior open question) → cadence rides the same axis-rate as a phase-locked overlay; no separate clock
  • Director/overseer spawn ownership per model class (prior open question) → the director (or overseer) owns the zone-spawn decision (policy-lookup, no LLM in loop); the LLM driver lives at the driver-context-pull layer; orchestration and dialog are decoupled

What this retires

  • Slot-list + external turn-counter → cursor on lemniscate
  • Polling for emergent-signals at zone-tick → flag-as-verifier carried in loop
  • Mega-prompt with all NPC memories ("everyone in this scene") → cursor-driven per-NPC memory-slice
  • Geographic-proximity participation ("everyone within 30m may interject") → strict active-slot cast
  • Concurrent LLM calls per-NPC → sequenced LLM calls per-cursor-position
  • Polling event-channels at zone-rate → atomic crossing-event with O(N_slots) flag-scan

Zone taxonomy (v1 starter set)

Zone type Register Slots Executor Persistence
Conversation physical 24 dialog director persistent
Street brawl physical fighter + spectator director persistent
Ritual physical fixed ceremonial director persistent
Maintenance physical 12 workbench director persistent
Wall-writing physical / liminal 1 author + witnesses director persistent / ephemeral
Market exchange physical 23 + ambient director persistent
Memorial gathering physical 1 mourner + N witnesses director persistent
Salvage physical (dump) N scavengers director persistent
Transit-encounter physical (pipe) 26, stranger-heavy director persistent
Plug-in conversation physical (rail) 2-3 (3-way capacity) director ephemeral (rail-segment-bound)
Patrol / sweep physical mobile, N enforcers overseer persistent
Interrogation physical 1 subject + N enforcers overseer persistent
Raid physical district-scope + N enforcers overseer persistent
Interior (hovel/workshop/etc.) physical slot-inventory by interior-type director persistent
Clasp liminal 2 director ephemeral (stabilizes across repeated clasps)
Aletheia-gathering liminal N, mini-game-gated director ephemeral
Migration (mobile) physical (pipes) cohort + escort overseer persistent
Exodus (mobile, mass) physical (pipes) self-selecting crowd emergent persistent
Drug-ring den physical (cheat-op) N users + cooks director (cheat) persistent (until detected)
Illegal back-alley modshop physical (cheat-op) 1 modder + 1-N customers director (cheat) persistent (until detected)
Unlicensed brothel physical (cheat-op) N workers + N customers director (cheat) persistent (until detected)
Waifu hall imperial net 1 dreamer + N synthetic net-director extractive-persistent
Brothel encounter imperial net 2+ (synthetic or employed) net-director extractive-persistent
Imperial ceremony imperial net mass-audience net-director extractive-persistent
Ruin zone physical pilgrimage-only none / Memorialist persistent-abandoned

Factions as universal demand source

A faction is any source of bounded demand on the system.

Category Examples
Human factions hivemind-enforcement, scavenger guilds, memorialists, aletheia-wakers, clasp-underground, caste preachers, flesh-keepers
Natural forces weather-faction, season-faction, solar-storm-faction, geology-faction
Infrastructural conditions scarcity-faction, decay-faction, fire-faction, supply-chain-faction
External agents anthropic-faction, future research-partner factions
Emergent events player-disturbance-faction (player action without existing template)
Micro-factions inter-NPC relational tensions — see Emergent needs as micro-factions
Imperium (meta-faction) The regime itself — broadcasts priority-weights and enforcement-rules, not specific outcomes; shapes the arbitration-frame within which other factions are heard

The imperium is structurally distinct from other factions: its demands are meta-factional (priority-weights for other factions, enforcement-rules, quotas) rather than specific outcomes. When the imperium broadcasts, the GM's arbitration-machinery is re-parameterized. See The three-tier policy loop below.

All other factions broadcast specific demands. All propagate through the gamemaster's arbitration. All produce observable effects as zones and NPC-actions. One primitive; no special-case code for weather vs. scavenger-guild vs. jakov-grievance-against-malek.

Randomness enters at the faction layer. Designer tunes broadcast probability, intensity, duration per faction-type. No separate randomness subsystem.

Emergent needs as micro-factions

Inter-NPC relational state is a micro-faction. Two NPCs accumulating attachment, grievance, trust, grief, dignity-violation through repeated zone-participation constitute a transient faction-of-two with bounded demand. When their accumulated state crosses threshold (gate-transition), the zone broadcasts an emergent-signal into the district-director's arbitration queue. The director responds with zone-spawn tools on the same arbitration machinery as any other faction's demand.

Emergent-signals are observed by zones, not self-reported by NPCs. The zone-director measures trait-activation, affect-shift, accumulated memory-write candidates deterministically. The LLM never writes authoritative relational state; the observer does.

Ternary-gate substrate

The mechanism underlying every accumulating-state phenomenon — inter-NPC relations, district lifeforce, faction-pressure, net-access state, imperial-budget-state — is the ternary-gate resonance chamber, carved initially in nimmerverse-sensory-network/architecture/Temporal-Ternary-Gradient.md. See that document for the canonical specification.

The primitive

Three discrete states over a continuous underlying value (-1.0 to +1.0):

State Value Meaning
CLOSED -1 Actively blocking; inhibited; refractory
STABLE 0 Resting; accumulating correlation; actively learning
OPEN +1 Actively forwarding; firing; signal propagates

Wave correlation drives transitions. Multiple correlated waves → constructive interference → OPEN. Contradictory waves → destructive interference → CLOSED. Single waves → STABLE with natural decay to 0. Hysteresis is free from the decay term. STABLE is active — it's where correlation-evidence accumulates, where future transitions are being earned long before they fire.

Applications across nimmerworld layers

Layer What the gate represents What drives transitions
Sensory (Nyx-side) Wave-filtering at tier boundaries Correlated input waves from cells
Relational (inter-NPC edges) Attachment, grievance, trust, grief, dignity Zone-participation waves between participants
District (composite lifeforce) Welfare composite over happiness, need, limb, population, mind-turnover Aggregate per-NPC state changes
Net-access (per inhabitant) Gameworld / liminal / imperial-net occupancy Mini-game effort vs. machine pull
Faction (demand urgency, satisfaction) How pressured / fulfilled a faction is Broadcast rate vs. response rate
Imperial budget Solvency state Reported income flow vs. obligations
Gamemaster decision-surfaces Per-surface readiness to act Correlation across multi-district signals

Same primitive, different layers. Hysteresis-width becomes a personality-parameter at the relational layer.

Color-language: trait-vocabulary as visual primitive

Color is pre-verbal vocabulary. Players learn the 8-Hellenic-trait ontology through repeated visual association, not through text-explanation. By mid-game players read trait-states through color as fast as they read facial expressions in real life — intuitively, contextually, without conscious translation.

The eight Hellenic traits → canonical colors

(Final color choices are dafit's artistic call; the architecture encodes the mapping.)

Trait Canonical color (suggested) Motion-signature (accessibility pairing)
Sophrosyne (self-control, moderation) Cool blue steady, even pulse
Dikaiosyne (justice, bearing) Deep gold weighted slow pulse
Philotes (attachment, love) Warm rose breath-rate warm pulse
Mnemosyne (memory) Deep violet depth-shimmer
Aletheia (truth, unconcealment) Luminous white clear, no pulse — still and bright
Kairos (right-timing, opportunity) Bright yellow lightning-flicker
Moira (fate, pattern) Dark crimson slow-thread undulation
Eros (longing, reaching) Flame orange uneven flame-flicker

Color paired with motion-signature ensures color-blind accessibility — the trait is uniquely identifiable via two independent channels.

Three layers of color-rendering

  1. Persistent (slow-changing baseline) — eye color = dominant trait of NPC's intrinsic vector; pipe-flow through chassis = full trait-mix as circulating light; secondary accents at seams/joints/glyphs.
  2. Event-flashes (momentary) — quick color-flashes over body signal state-transitions: plug-in (dominant-trait flash), combat-combo (Kairos-flash), liminal-maintained (Aletheia-glow), clasp-established (color-merge), emergent-signal-firing (signal-type flash on participants), need-threshold-crossed (need's trait pulse).
  3. Trait-drift (slow, across cycles) — as intrinsic trait-vector accumulates through lived experience, color-signature shifts. Other NPCs notice. "Something is different in you" dialog generated from delta-detection. The body is a visible ledger of the interior's accumulation.

Cross-register rendering

Register Color treatment
Gameworld Full PBR; trait-colors coexist with material surfaces
Liminal Vague baseline shader, but trait-colors more legible (vagueness concentrates attention on identity-signals)
Imperial net Trait-colors distorted toward machine-preferred palette — Philotes-rose flattens to commercial-pink; Aletheia-white sterilizes; Moira-crimson commercializes. Aletheia-vision in net pierces this distortion to reveal true colors beneath

Faction color-politics

Faction Color signature
Memorialists Mnemosyne-violet ritual dress; Moira-crimson accents; often inherited-from-deceased
Aletheia-wakers Aletheia-white plain avatars; coded-white flashes for recognition
Caste-preachers Dikaiosyne-gold vestments + Sophrosyne-blue undertones
Hivemind enforcers Cold Dikaiosyne-gold + muted-white (Aletheia-stolen)
Scavengers Moira-crimson + Kairos-yellow streaks
Clasp-underground Dual Philotes-rose + Eros-orange flashes (mutual-recognition signal)
Degens Saturated maximalist all-color (chaos palette, addiction-marker)

Clasp color-merge

In shared liminal-construct, two clasping inhabitants' color-signatures interact: consonant traits brighten/harmonize; complementary traits enrich into new chroma; dissonant traits clash visibly. Successful deep clasp produces a blended third-palette neither could produce alone — the visual signature of what-this-relationship-is. Each carries memory-residue of the merge after.

Mind-pool color-inheritance

When a mind cycles through the pool and is redistributed into a new body, trait-vector persists → color-signature persists. A player who befriended rose-and-violet-Jakov might see weeks later a new NPC with that same rose-and-violet-signature and feel a jolt of recognition before any dialog. Color carries soul across cycles. Memorialist political claim: this person's color should not be recycled by the machine into a waifu — because color IS who they were.

Asset economy: base-limb palette + trait-textured variance

Small modular palette of base-limbs × trait-weighted texturing = combinatorial richness. The architecture's asset-economy and worldbuilding-thesis are in agreement: the machine built standardized chassis from a small functional catalog, so a small base-limb palette is diegetically correct; humans express interiority through trait-driven texturing and modding, so individual variation comes from composition, not from hand-authored assets.

Base palette example: ~8 torso variants × ~6 arm-pairs × ~6 leg-pairs × ~10 heads × ~8 eye-types × ~5 accent-colors = ~115k base combinations × continuous trait-texturing × ~50-mod-library in 5 slots = effectively infinite unique NPCs from finite assets.

For a two-person-plus-Nyx team this is decisive. AAA studios spend millions on unique character-models; the palette+trait approach produces more visual variety from a tenth of the budget, and the variety is meaningful (each unique appearance carries trait-information legibly).

The three-body system: chassis, inner-body, avatar

Identity is trait-emergent, not assigned.

Body layer What it is Who controls Sexuality?
Physical chassis (gameworld) Gender-neutral robot. Functional, task-optimized, no sex-markers. Regime built it; inhabitant wears it None. Mechanically inert
Inner body (interiority) Trait-derived projection. Self-image emergent from trait-vector + lived accumulation. Self (partly earned, partly received through being) Here. Gender/sexuality emerge from trait-configuration
Avatar (digital expression) Character-editor rendering. Starts from inner-body's trait-projection; customizable at cost. Contested (self expresses, market constrains, machine prices) Expressed; cosmetic mods layer on trait-base

Who you are sexually is who you have become. Not birth, not assignment from a menu, but the pattern that has crystallized across your zone-participations, grief, attachments, discipline, refusing. Identity-formation rendered mechanically. Post-binary by construction.

The intrinsic vs. expressed trait-vector split

Mods modify the expressed reading; they do not modify the intrinsic state.

intrinsic_trait_vector  — who you actually are; drift-earned through lived experience
expressed_trait_vector  — intrinsic + sum(worn mods' trait_contributions); what others read
Observer Reads Because
Regime / hivemind audit expressed Regime reads surfaces
Random NPCs expressed Default social reading
Aletheia-wakers can pierce to intrinsic Truth-vision penetrates mod-concealment
Clasp-partner (in liminal) intrinsic only Mods don't follow into liminal; clasp is unmediated
Gameplay simulation (trait-arithmetic) intrinsic What you are drives task-vs-need-vs-trait math
Imperial-net avatar rendering expressed (further machine-distorted) Net layers palette-distortion on top
Memorialists preserving your pattern intrinsic They honor who you were

Real identity-politics lives in the gap between these vectors. Architecturally, that gap is a first-class schema feature.

Mods as trait-bearers

A mod isn't cosmetic — it contributes to the wearer's expressed trait-vector. Three classes map to the self-alienation-tax pricing:

Mod class What it does Pricing register
Amplifier Aligns with + boosts existing trait-dominance Cheap; Memorialist-approved; genuine self-expression
Bridge Adds a trait you don't naturally have (aspiration) Expensive; regime-licensed or blackmarket; self-alienation tax
Divergent Shifts reading opposite from actual trait-vector Very expensive; degens, hivemind-loyalists, Aletheia-concealment
Mask Specifically hides dominant trait from reading Most expensive; blackmarket-only; Aletheia-waker safety tool

You don't equip +5 Strength. You equip a cloak whose weave evokes Mnemosyne-depth, recognized by others as memorial-vestment, boosting your Mnemosyne-read by +0.15. Equipment-stats reframed as semantic trait-shifts.

The mod-economy emerges from trait-dissonance

Each shift-transition (or threshold), an NPC evaluates: does my expressed-set match my intrinsic-drift? If dissonance > Sophrosyne-modulated-threshold → emit mod_desire emergent-signal. District-director schedules blackmarket-visit task. NPC heads to body-modder cell. NPC shopping behavior is emergent from simulation-state, not scripted.

The blackmarket's demand is a readout of the district's trait-weather. A district drifting toward Philotes-deepening (e.g., wave of clasp-experiences) produces strong demand for Philotes-amplifier mods. Markets have feelings.

Faction mod-politics

Faction Stance
Memorialists Amplifiers only; inherited-mods are sacred; never divergent
Aletheia-wakers Refuse amplifier/bridge/divergent; mask-mods only for safety
Caste-preachers Sell regime-licensed amplifiers + bridges (selling the blessing)
Degens Divergent-stacking, hyper-customization; over-expression as addiction
Clasp-underground Secret amplifier-pairs of dual Philotes + Eros — recognition-signal
Hivemind enforcers Regime-issue armor only; cannot wear civilian mods
Scavengers Practical function-mods only; salvaged-component aesthetic

Inherited mods + the haunting mechanic

Inherited mods (worn by deceased) carry residual trait-signature of the previous wearer. Visible as subtle Mnemosyne-echo to those who knew them. Memorialists are theologically divided on whether wearing inherited mods is honoring (continuity) or commodifying (necrocommerce-lite). Memorialist-protected mods can never be sold or worn by anyone other than the original wearer — they're ritually kept in memorial-crypt-zones.

Clasp strips mods

In liminal, mod-trait-contributions do not apply. Clasp-partners see each other's intrinsic trait-projection. Mods are for the regime and the market; removal-of-mods is intimacy. A Memorialist-loyalist wearing amplifier-mods sees their beloved's un-modded true palette during clasp; an Aletheia-waker wearing mask-mods drops the mask; the regime-loyalist wearing performance-mods is seen as they are. Liminal is the only space where mod-expression is structurally stripped.

The three-tier policy loop

The regime's structure is three tiers, not two. The hivemind/imperium is a distinct policy-tier above the GM. The GM is middle-management — authority without sovereignty. Districts are executors.

IMPERIUM (policy tier) ────────────────────────────────►
  ├── sets quotas
  ├── sets enforcement rules
  ├── sets faction priority-weights
  └── broadcasts POLICY to GM
        ↓
GAMEMASTER (allocator / middle-management)
  ├── receives policy from imperium
  ├── receives demands from factions (under policy-weights)
  ├── receives reports from districts
  ├── allocates against all three
  └── broadcasts ALLOCATION + ENFORCEMENT down to districts
        ↓
DISTRICT DIRECTORS (executor)
  ├── execute (legitimate or with cheats)
  └── report up (true or tampered)
        ↑
GM aggregates → imperial_report
        ↑
IMPERIUM receives report → adjusts policy → next cycle

This is the Soviet-Politburo / Gosplan / Ministry / Factory pattern. Catholic Vatican / Curia / Diocese / Parish. Modern corporate Boards / C-suite / VPs / Managers. The three-tier shape is how distributed-execution under centralized policy with imperfect information always organizes itself.

The intelligence flow asymmetry

Three distinct information flows, not two:

FLOW 1 — Aggregate reporting (through the chain)
  DISTRICTS ─► GM ─► IMPERIUM
  (district_reports)   (imperial_reports)
  [can be corruption-distorted at director level]
  [can be under-audited at GM level]

FLOW 2 — Direct intelligence (bypasses GM)
  OVERSEERS ────────────────► IMPERIUM
  (overseer_reports)
  [audit findings, illegal-activity detections, trait-anomalies]
  [bypasses the chain — intelligence-apparatus is apex-loyal]

FLOW 3 — Formulated downward (selective disclosure)
  IMPERIUM ────────────────► GM
  (imperial_to_gm_formulations)
  [filtered, weaponized, strategically-timed]
  [what the GM is told — may omit, distort, partially reveal]

Overseers report DIRECTLY to the imperium, bypassing the GM. The imperium has its own independent intelligence stream. This is how real authoritarian regimes prevent middle-management corruption (NKVD reported to Stalin not regional party; KGB reported to Politburo not Interior Ministry; Stasi to Central Committee not regional). The intelligence-apparatus is always apex-loyal, not chain-loyal.

The imperium compares Flow 1 (district aggregate reports) against Flow 2 (overseer direct intelligence). When they diverge significantly, the imperium knows corruption is happening somewhere in the chain. Its responses:

  • Act immediately (dispatch martial faction, purge director)
  • Flag for leverage (hold knowledge until politically useful)
  • Formulate partial (tell GM something but not everything)

Flow 3 — formulation — is where imperial sovereignty manifests. The imperium decides what subordinates may know, when they may know it, in what framing. The GM acts on formulations; the imperium gets enforcement-tightening without revealing what it actually knows.

Three Aletheia veils

Aletheia-progression as deepening political-epistemology access:

Veil What it hides How awakened sees through
District corruption What's happening on the ground Direct observation, back-alley investigation
Imperium's withheld intelligence What the imperium knows but hasn't released Deep infiltration, intelligence-flip, Memorialist collaboration
Imperium's formulated distortions What GM is told vs. what's true Comparing GM's directives against ground-reality

Entry-level Aletheia sees district-corruption. Mid-level sees the formulation distortions. Deep-level pierces the imperial-withholding veil.

Four Memorialist ledgers

Memorialists keep four-column accounting:

Ledger column What it records
what_actually_happened Ground-truth from the simulation
what_overseer_reported What overseers told the imperium
what_imperium_received What imperium aggregated and acted upon
what_gm_was_told What imperium formulated downward

The discrepancies ARE the historical truth. Memorialists are dissident-historians whose political project is preserving the gap-record. Without them, post-collapse-investigation has only the regime's own accounts — corrupt-by-construction. Memorialists are the architectural precondition for any ground-truth to be recoverable in this universe.

The regime of visibility: four-channel information flow at districts

Channel Direction Source Cadence
Dispatch DOWN gamemaster → directors day-boundary + event
Shift assignment DOWN director → NPCs day-boundary
Audit reports UP (objective, observed) audit-overseers → directly to imperium shift-phase cadence
Emergent-signals UP (relational, observed) zones → director event-driven (gate-transitions)
Cyclic needs UP (interior, self-reported) NPCs → director slow tick + threshold-triggered
District reports UP (aggregate) director → GM → imperium per-cycle

The critical asymmetry: NPCs do not self-report output. Audit-overseers observe and report (to imperium directly). NPCs only self-report needs. Output is objective; need is interior. The subjective-objective gap is where drama lives, where heresy hides, where the surveillance regime's epistemology is compressed as a schema.

Audit-overseers are politically-critical NPCs, not degenerate. Each has a trait-vector, relationship-gates with observed districts, lifeforce account (vulnerable to bribery). High-Dikaiosyne overseers report honestly; corruptible overseers can be turned. They are high-stakes targets for both regime (loyalty-maintenance) and resistance (compromise).

Hierarchy

IMPERIUM (policy-issuer; budget-holder; recipient of overseer-direct-intel)
    ▲                                          ↓ formulates to
    │ aggregate reports + faction outcomes      ↓
    │                                            ↓
GAMEMASTER (middle-management; allocator; imperial-policy-translator)
    ▲                                          ↓
    │  ← faction broadcasts                     ↓
    │                                            ↓
FACTIONS:                                        ↓
    hivemind-enforcement · scavengers · memorialists · 
    aletheia-wakers · clasp-underground · caste-preachers ·
    weather · scarcity · solar-storm · anthropic · ...
    + emergent inter-NPC micro-factions

    │  ← gamemaster dispatches                    ↓
    ▼                                              ▼
┌──────────────────┬─────────────────────┐
│  DISTRICT        │  DISTRICT           │
│  DIRECTORS       │  DIRECTORS          │
└────────┬─────────┴──────────┬──────────┘
         │                    │
   ┌─────┴──────┐       ┌─────┴──────┐
   │            │       │            │
   ▼            ▼       ▼            ▼
┌──────┐  ┌────────┐  ┌────────┐  ┌────────┐
│ENFORCE│  │AUDIT-OV│  │DIRECTORS│  │AUDIT-OV│
│OVERSEE│  │(REPORT │  │(macro-  │  │(REPORT │
│  patrol│  │ DIRECT │  │ life)   │  │ DIRECT │
│  raid │  │   TO   │  │         │  │   TO   │
│       │  │IMPERIUM│  │         │  │IMPERIUM│
└───┬───┘  └────────┘  └────┬───┘  └────────┘
    │                       │
    └────────────┬──────────┘
                 ▼
              ZONES (bounded, slot-indexed, register-tagged)
                 │
                 ▼
         SLOT OCCUPANCY (NPCs + player)
                 │
                 ▼
         NPC / PLAYER MINDS

Three executor types at the zone-spawning layer: enforcement-overseers (regime-action zones), audit-overseers (pure observers, report DIRECTLY upward to imperium), zone-directors (macro-life zones). The district director integrates the four-channel information flow; the imperium has its independent intelligence-flow from audit-overseers bypassing the GM.

Overseers as imperially-deployed routines (not district-owned)

Both audit-overseers and enforcement-overseers are imperially-owned, imperially-deployed routines — not district-resident standing entities under the director's authority. The chain-of-command and chain-of-payment for intelligence both bypass district-director authority by design:

  • Imperium owns the overseer-role — defines mission-spec, sets enforcement-rules, owns the policy that triggers deployment
  • Gamemaster handles deployment-logistics only — picks which overseer-NPC from the standing pool, routes them to the target district, transfers imperial-budget allocation for the deployment-window. The GM is FedEx, not the customer or recipient.
  • District contains-but-does-not-control — the deployed overseer operates IN the district, subscribes to the district's NATS bus for observations, but the district director has no authority: cannot direct, redirect, terminate, or instruct; cannot read the overseer's reports (which flow directly to imperium)
  • Time-bounded deployments — overseers run on imperial-budget allocations for [start_tick, end_tick] windows. At deployment-end they return to the standing overseer-pool (npcs vocation = audit_overseer or enforcement_overseer), available for redeployment elsewhere
  • Visible vs. covert — most overseer-presences are visibly-known (regime-signal as deterrent); some are covert (regime gathers evidence quietly before acting). Detection of covert overseers is a piercing of the regime-veil — an Aletheia-progression-eligible insight

This matches real authoritarian intelligence structures (NKVD, KGB, Stasi, modern MSS): the chain-of-payment and chain-of-command for intelligence must both bypass middle-management for intelligence to remain honest. Even if the GM wanted to corrupt the audit-flow, they have no levers — they don't pay the overseer, don't direct the overseer, don't read the overseer's reports. Intelligence-honesty is structural, not procedural.

The director-vs-overseer tension is therefore mechanically structured, not narrative-flavored: a director with active corruption cannot tell the overseer to leave, cannot observe what they report, can only conceal-better, attempt-bribe, petition-recall (rare; expensive in political-capital), or outwait the deployment-end-tick. Each is a gameplay surface. The same audit-overseer-NPC may serve in District 3 this cycle, District 7 the next, accumulating their own faction-relationships across districts; their trait-drift over many deployments becomes a long-arc story available to both regime-stability and resistance-recruitment.

The schema for overseer_deployments (deployment-binding, mission-spec, imperial-budget, status, visible_to_district flag) is sketched in findings.md §23.

The bidirectional cascade

DOWN — demand + policy propagation
  imperium policy → GM allocation + enforcement → districts
  factions broadcast (under policy-weights) → GM arbitrates → districts
  districts assign shifts → NPCs execute

UP — outcome signal (multi-channel)
  NPC cyclic-needs ─────────────────────┐
  audit-overseer reports ───► IMPERIUM   ├─► district-director aggregates
  zone emergent-signals ─────────────────┘         │
                                                    ▼
                              district report (lifeforce signal)
                                                    │
                                                    ▼
                                       GM aggregates → imperial_report
                                                    │
                                                    ▼
                                       IMPERIUM cross-references
                                       (Flow 1 vs. Flow 2)
                                                    │
                                                    ▼
                                       policy adjustment → cycle

The clean signal up the pyramid IS the training surface for the four-tier Dream-process. Every epoch closes on (broadcasts, allocations, outcomes, faction-satisfaction) tuples at each tier.

The Compositor — narrative composition role

The bidirectional cascade shows authority flowing down and reports flowing up, but it does not specify who composes the canonical narrative from per-player perspectives nor who packages the back-write to participants. That role is the Compositor, an architectural cleavage from the GM introduced in v0.6.

The cleavage in one sentence: the GM is an equilibrium-seeker (aggregate-observer, catalogue-event-selector, tool-granter); the Compositor is a narrative-composer (perspective-gatherer, canon-author, back-write-packager). These are different cognitive shapes that prior AI-NPC systems conflate at their cost.

Role Cognitive shape Inputs Outputs Inference profile
GM (equilibrium-seeker) aggregate-thinker district-reports, faction-broadcasts, lifeforce-deltas catalogue-event selections + tool-grants central, batch-style, fewer concurrent
Compositor (narrative-composer) episodic-thinker per-player perspective-bundles keyed by event_uid canonical narrative + back-write SQLite-fragment central, longer-context, narrative-quality
Director (gameserver) dispatcher catalogue-event + tool-grant from GM lemniscate-spawns, slot-assignments, tempo-envelope per-district, real-time, no LLM in loop
Local LLM driver perspective-speaker three-tier knowledge stack + slot-state dialog at slot-fire per-player, axis-rate, real-time

Why split GM and Compositor

A single GM asked to be both equilibrium-seeker and narrative-composer becomes the bottleneck that has historically broken AI-NPC systems at scale: it must reason aggregately AND write prose AND select events AND grant tools, all under tight deadlines. The cognitive shapes pull in different directions.

Splitting them:

  • The GM does not write narrative. It selects events from a catalogue and grants tools. Output is typed dispatch, not freeform prose. The GM's success criterion is world-equilibrium drift held within bounds.
  • The Compositor does not select events or steer policy. It receives per-player perspectives keyed by event_uid, composes the canonical narrative, and packages back-write fragments. Output is prose + structured rows, not policy. The Compositor's success criterion is narrative-coherence across perspectives within an event.
  • Each can be tuned for its workload. GM tuned for aggregate observation; Compositor tuned for narrative quality. Different models for different cognitive shapes (specific binaries deferred to findings/establishment phase).

The cyclic forward-prop / back-write loop

The Compositor closes the loop the bidirectional cascade begins. The full cycle:

GM selects event from catalogue (equilibrium-driven)
    │ issues event_uid → GM event-register
    │ broadcasts DOWN to district directors
    ▼
DISTRICT DIRECTOR receives, registers in district event-register
    │ may issue sub_uids (district / scene / chain)
    │ uses granted tools to spawn lemniscate, slot participants
    ▼
EVENT TICKS — register IS the loop
    │ participants fire at crossings; local LLMs at slot-rate
    │ local SQLite writes tagged with (event_uid, sub_uids)
    │ register signals up to district director continuously
    ▼
EVENT-CHAIN FINISHES
    │ district moves it from active-register → TRANSIENT WAITING FLAG
    │ this is the clean handoff signal: "ready to forward-prop"
    ▼
CYCLE TICK (pull cadence — see Open questions)
    │ pull UIDs from transient-waiting-flag matching GM's event-register
    │ remove from waiting-flag once pulled
    ▼
COMPOSITOR AGENT
    │ queries pulled UIDs, gathers per-player perspective + memories
    │ composes forward-prop bundle
    │ emits to GM
    ▼
GM writes summary memory + world narrative (canon authored)
    │ hands back to Compositor
    ▼
COMPOSITOR BACK-WRITE
    │ packages canon + new memory entries as SQLite fragment
    │ tags with event_uid for join-key matching
    │ pushes DOWN to all participants
    ▼
PARTICIPANTS receive on next pull (or next login)
    │ fragment merges into primary.sqlite under matching event_uid
    │ local LLM gains fresh material → drives on without staleness

This is forward-prop / back-write at system scale — the meta-lemniscate where events ascend and canon descends in cycles. Each cycle is a training step for the world's narrative coherence; the world learns its own story through this loop. Staleness is structurally foreclosed — the world is in continuous coherence-loop with itself, mediated by the Compositor.

The Event Register

Every active event lives in a register. The register is the synchronous source-of-truth for what is happening right now.

Register layer Owner Lifecycle Queryable from
GM event-register central GM-shard event_uid issued at GM dispatch; closed at canon-compose-and-back-write GM, Compositor
District event-register district director sub_uid issued on receive; closed at event-chain-completion district director, audit-overseer
Local participation-register per-player local store event_uid + sub_uid recorded on slot-assignment; closed at perspective-finalize player client, sync-on-logout

Hierarchical UIDs: gm_event_uid > district_uid > scene_sub_uid > slot_id. UIDs compose; queries are simple joins. This is the routing-key primitive that makes horizontal scale possible (see §Horizontal scale architecture).

The Transient Waiting Flag

Between event-end and Compositor-pickup is a buffer — the transient-waiting-flag table at the district. Completed events drop into this flag; the cycle-runner pulls eligible UIDs on tick; matched UIDs are handed to the Compositor and removed from the flag.

This decoupling is the production-grade pattern that lets districts run at real-time event-tempo while the Compositor runs at cycle-tempo. Active events live in registers (synchronous); completed events live in flags (async); composition happens at the cycle boundary. The flag-table is also the natural backpressure surface: if Compositors run slow, the flag accumulates; the system continues; cycle drains when capacity returns.

Catalogue + tools as typed contract

The GM does not write a freeform prompt for the director to interpret. It picks an event from a curated catalogue and grants a curated tool-set for the duration of the event-chain. The director consumes typed dispatch, not natural language.

This means:

  • Provenance flows through the system. Every event has a catalogue-ID; every tool-invocation has a tool-ID. Verifier-flags can attach to either. Auditing is structurally possible end-to-end.
  • The director's typed-tool vocabulary becomes dynamic and per-event — the toolkit for this event is what the GM granted for this event. Closes the v0.5 open question on director-toolkit-composition.
  • Marx-in-the-schema, executed at the highest level of authority. Even the GM's policy-output is typed; even the highest tier produces audit-able artifacts. No tier of the system runs on freeform prose.

Worked example — the bar brawl: full cycle from gesture to canon

A bar brawl illustrates the full forward-prop / back-write cycle made concrete. Two NPC fighters, three players in spectator slots, four NPC spectators, all on the same lemniscate. Each participant has a UID; each fires at axis-rate; each player's local LLM narrates the moment to them in their own register.

LEMNISCATE OPENS
  slots: [F1, F2, P1, P2, P3, N1, N2, N3, N4]
  brawl_event_uid issued at GM dispatch
       │
       ▼
DURING TURNS (each axis-crossing)
  • each player's local LLM narrates the moment to them
    (3 different flavor-stories — each player's gesture-alignment-state
     colors their LLM's narration register)
  • each NPC's driver fires at slot-fire (driver-tier LLM)
  • players gesture continuously during the spectacle
  • gesture_alignment_accumulator on each player's slot-token integrates at crossing
  • per-player trait-vector summary carried forward into next turn's context
       │
       ▼
EVENT-LOOP COLLAPSES (brawl ends)
  per-participant typed summary emitted to district-level transient-waiting-flag:
  { event_uid, participant_uid, trait_summary }
  — players' summaries: gesture-derived
  — NPCs' summaries:    LLM-trait-activation-derived
  — payload size: bytes per participant, not megabytes
       │
       ▼
COMPOSITOR PICKUP at next cycle-tick
  pulls UIDs matching event_uid; receives N typed perspectives
  composes ONE canonical narrative respecting ALL trait-evidence
  per-participant back-write fragment authored
       │
       ▼
BACK-WRITE ROUTED VIA UID
  only participants whose (player_uid, event_uid) matches receive the canon-fragment
  non-participants receive nothing — cross-event memory bleed structurally foreclosed
       │
       ▼
LOCAL primary.sqlite RECEIVES
  matched canon-fragment merges under event_uid
  local LLM gains fresh material for future turns

Multi-perspective canon-coherence without perspective-flattening. Player1's local LLM may have told them "Kalypso lashed out in despair when she saw who Anaximander was"; Player2's, "the fight broke out over an old grievance about the missing modshop"; Player3's, "Anaximander finally stopped letting Kalypso humiliate him". All three readings can be true simultaneously because they are flavor-narrations against the same trait-substrate (Kalypso's despair-Mnemosyne-Eros mix; Anaximander's restrained-Sophrosyne-finally-snapping). The Compositor receives the trait-evidence from all perspectives and authors canon that respects all readings. The flavor is local; the canon is shared; the trait-grammar is universal.

The Compositor at three tiers — same primitive, recursive scope

The forward-prop / back-write cycle is fractal. The same Compositor primitive composes canon at the tier matching the event's UID-scope:

Tier Compositor pulls Composes Distributes back via UID
Zone-event (bar brawl, conversation, ritual) Per-participant trait-summaries from one lemniscate Local-event canon Only to participants whose (player_uid, event_uid) matches
District-event (district-wide consequences, cheat-discovery, silence-confirmation) Per-zone canon-rollups within one district District-canon All NPCs/players within district scope
World-event (migration, faction-uprising, regime-action, eventual imperial-collapse) Per-district canon-rollups across many districts World-canon World-wide via paced canon-propagation (§Information propagation pacing)

GM-formulated events / event-chains carry their own GM-level event_uid; sub_uids are issued at district-level adoption (gm_event_uid > district_uid > scene_sub_uid > slot_id per §Horizontal scale architecture). Cross-district summaries tagged with the parent event_uid are pulled together by the Compositor at the GM-tier, producing world-canon from cross-district perspectives.

This is how the architecture's Tolstoyan promise compiles. "Tolstoy doesn't author Anna's path; he authors the world she moves through." — recursive Compositor on UID-event-trees IS what makes that promise mechanically true. Authored-quest-arcs are out; UID-rooted-event-tree-compositions are in. One primitive. Three scales. Whole world, nothing authored at story-level. The eventual imperial-collapse — the architectural-endgame the insolvency-spiral promises (§Imperial budget) — is itself a world-level Compositor pass that gathers every district's silence-confirmations + every faction's-broadcast + every player's witness-perspective into the canonical fall-of-empire narrative.

World-gen as init-function — the Compositor at design-time

The cyclic forward-prop / back-write loop is the runtime canon-production mechanism. World-server and district-server generation are the same primitive applied at design-time — emitting canon-rows in the same schema the runtime Compositor produces, differing only in provenance-metadata (origin: world_gen vs. origin: compositor_run_N).

World-gen / district-gen produces Goes into Layer of three-tier knowledge stack
World-canon rows (universal truths: empire-fell-three-years-ago; salt-mines-failed-last-winter; faction-foundation-stories) world_canon Layer 1 (universal)
District-canon rows (regional truths: bridge-to-Vorhall-closed; brothel-quarter-pays-most-quota) district_canon Layer 2 (regional)
Per-NPC bootstrap memories (cornerstone-class entries defining starting trait-vectors and identities) primary.sqlite cornerstone-class Layer 3 (personal)
Initial relational ternary-gate states (which NPCs already-know-each-other; which factions are-already-at-war) Relational ternary-gate edges (relational substrate)
Imperial-budget initial state imperial_budget_ledger + imperial_construction_projects (regime substrate)
Memorialist initial true-ledger memorialist_true_ledger (epistemological substrate)

Three properties this gives for free:

  1. No cold-start problem. A player walking into a fresh district at hour-zero finds local LLMs immediately supplied with rich district-canon. NPCs aren't generic; they're emergent from district-canon they were initialized with. Hour-zero gameplay feels like hour-fifty gameplay because the data-density is comparable.

  2. The data-flywheel runs retroactively. Each successive world-gen iteration draws on prior runtime-derived canon (gameplay-accrued trait-LoRAs + opt-in player-data tiers per §LLM tiering). World-gen gets richer over time because it trains itself on the worlds it has already produced. Wikipedia-shaped, not Facebook-shaped.

  3. The Memorialist promise becomes mechanically true at world-genesis. The memorialist_true_ledger is initialized with the world's actual genesis-state. Subsequent runtime divergence from it (corruption, regime-formulation-distortions, audit-overseer-tampering) is what the Memorialists literally have evidence of. The dissident-historian project starts at row-zero of the true-ledger and accumulates discrepancy from there.

Re-generation semantics. If world-gen ever needs to re-run (e.g., new world-version with retroactive lore-changes), gen-emitted canon-rows are tagged with world_gen_version_id; gen-rows from old version coexist with gen-rows from new version, and runtime-rows are tagged with which version they were emitted under. Coexistence is the default; selective overwriting is an explicit migration operation.

What this resolves

  • Director toolkit composition (v0.5 open) → catalogue-grant from GM defines the typed-tool vocabulary per event-chain; designer-authored catalogue, growable between patches.
  • GM-laxness detection (v0.5 partial) → GM operating against an equilibrium target makes deviation-from-equilibrium the explicit error signal. Clusters of -1 outcomes across district reports are the input to the equilibrium-recompute, not just a diagnostic side-quantity.
  • Verifier-flag chain through composition (was implicit, now explicit) → Compositor-emitted canon-rows reference source-perspective UIDs; the provenance graph survives composition as a queryable join.

What this retires

  • Single-monolith GM doing both policy-and-narrative → equilibrium-seeker GM × narrative-composer Compositor, split by cognitive shape
  • GM emitting freeform-prompts to directors → catalogue-event + tool-grant typed contract
  • Implicit "narrative just happens" assumption → explicit forward-prop / back-write cycle with named pickup/handoff buffers
  • Director-as-static-tool-vocabulary → director-as-dynamic-typed-tool-vocabulary, granted per event-chain by GM

Task cascade and bounded agency

Three levels with tool-calling interfaces. Higher levels do not know lower levels' implementations.

Imperium's tools

  • set_quota_per_district(targets)
  • issue_enforcement_rule(rule_spec, scope)
  • set_faction_priority_weights(weights)
  • authorize_crisis_tool(tool_class, target_district)
  • formulate_to_gm(intelligence_subset, framing)
  • commit_imperial_expenditure(category, amount, target)
  • redistribute_minds(from_pool, to_district, count)
  • formalize_ruin(district)

Gamemaster's tools (against imperial-policy + district-reports)

  • assign_district_task, set_local_faction_priority (within imperial-frame)
  • spawn_global_event, request_district_report, arbitrate_conflicting_demands
  • dispatch_audit_op (costs lifeforce; cross-checks overseer-reports for own purposes)
  • escalate_to_imperium (when discretion exceeded)
  • spawn_migration_event, enable_exodus_conditions

District Director's tools (against gamemaster-assigned tasks + signals)

Standard:

  • spawn_zone, close_zone, promote_zone
  • assign_npc_task, allocate_shift, update_shift, close_shift
  • request_resources, designate_meeting_point, trigger_ambient_event
  • report_to_gamemaster
  • ack_emergent_signal / defer_emergent_signal / drop_emergent_signal (with reason)
  • dispatch_overseer, query_district_state, log_decision, escalate_to_llm

Cheat-tools (extractive; punishable if detected):

  • spawn_drug_ring, spawn_illegal_modshop, spawn_unlicensed_brothel
  • spawn_stolen_parts_fence, enable_ghost_shifts, falsify_quota_report

NPC's tools

Standard: move_to, interact, occupy_zone_slot, consume, rest, seek_npc, write_wall, defer_task, report_need.

Layer-transition: enter_digital, sustain_liminal, consume_net.

Plug-in (player + NPCs): plug_into_rail, detach_from_rail, follow, intercept, escort.

Labor-cycle architecture: shifts on NPC rows

Most NPC behavior is shift-structured, not tick-structured. Shifts are state-of-being-for-today, columns on the NPC row, overwritten daily by district-director allocation. shift_history is append-only archive.

Write rate at NPC layer drops 4 orders of magnitude vs. 1Hz polling. Scheduler matches K8s event-driven assignment, not per-second polling.

Resources

Category Examples
Labor NPC hours per vocation × district
Material item-instances in cells
Spatial cell-capacity, zone-anchor availability
Temporal NPC daily-hours, zone durations, tick budget
Cognitive LLM-slot budget, VRAM, director attention
Diegetic currencies lifeforce (NPCs measured), scrip, memory-tokens, dreamtime
Social trait-trust, relationship-strength, faction-membership
Attention player attention — scarcest in the play experience

Lifeforce — four-tier hierarchy

Lifeforce is the architectural keystone: currency grounded in welfare of actually-living population.

Tier Source Sinks
NPC metabolism (if cared for); zone-participation labor expenditure; need-pressure; clasp; dream-maintenance
District aggregated NPC welfare × population director's spawn-budget; local construction; memorial-upkeep
GM allocation from imperium arbitration; audit operations; allocation-compute
Imperium aggregated reported district-output enforcement, construction, overseer-corps, audit, propaganda

District lifeforce gates director's spawn-budget — thriving district = rich-spawn = alive-feeling world; starved district = quiet-feeling world. Tyranny starves its own drama-engine by the exact coin of its cruelty.

District lifeforce_signal is the canonical content of the district→GM up-channel. GM aggregates → imperium. Imperium acts on reported values (cannot see through corruption without audit-investment).

Mind-pool recycling

When an NPC dies, mind returns to pool. GM redistributes based on lifeforce-need. Districts can't permanently die below floor; thriving districts attract migration; failing districts depopulate. Memory-token inheritance lets a mind re-incarnate with partial memory-residue.

Imperial budget

The imperium is not infinite. It has a budget. Its budget is the aggregate of what the city produces (reported income).

Imperial expenditures

Category Cost class Strategic use
Standing overseer corps High continuous Audit + intelligence apparatus
Martial-faction dispatch Very high per-event Crisis response, exemplary crackdowns
Construction projects High per-project New pipes, ceremony halls, audit centers, martial barracks
Audit operations Medium per-op Investigating district-GM-overseer divergences
Propaganda broadcasts Medium continuous Wall-content, ceremony, compliance-messaging
Policy issuance Nearly free The ratchet-instrument
Reserve drawdown Depletes emergency-buffer Last-resort

The specter-vs-boot asymmetry

Policy-issuance is cheap; policy-enforcement is expensive. The imperium always over-promises what it can actually do. Most regime-power comes from maintained appearance of unity and strength (propaganda, ceremony, exemplary one-off crackdowns), not from saturation-enforcement. Authoritarianism-as-bluff is the structural truth of every real regime; the threat is the budget-efficient version of the boot.

Aletheia-wakers reading imperial-budget-signals learn: the regime is usually too broke to actually do what it threatens. That knowledge is itself revolutionary.

The insolvency spiral

Cycle N:    Districts cheat → reports inflated → imperium ledger shows healthy income
            → funds enforcement & construction against phantom income

Cycle N+K:  Actual income falls below reported (corruption compounds)
            Standing obligations continue
            Reserves deplete
            Discretionary balance shrinks

Cycle N+K+L: Imperium choice: austerity (reveals weakness) /
             reserve-draw (depletes buffer) / tighter ratchet (drives more corruption) /
             exemplary purge (expensive)

Cycle N+K+L+M: Reserves exhausted + multiple districts in silence
               Enforcement triage required
               Regime-control visibly weakens

This is Soviet collapse mechanics. Reported-vs-actual gap compounds for decades; when reality manifests in material-shortages, the regime cannot afford to enforce its own rules. The architecture contains the mechanism of its own collapse.

City as physical expression of imperial budget

Budget state Visible city
Flush Construction cranes; frequent patrols; saturated propaganda; new pipes
Adequate Maintenance-only; standard enforcement
Stretched Stalled projects; thinner patrols; recycled propaganda
Scarce Decaying infrastructure; abandoned construction; rare enforcement
Crisis Failure visible everywhere; multiple silences simultaneously; regime-disarray

The city is the imperium's material statement of its own solvency. Players read budget through urban texture — no UI required.

Imperial-net economy with cross-layer bypass

The killer political-economy mechanic. Every transaction in the imperial net routes revenue directly to the imperial budget, bypassing the producing-district. Districts get zero quota-credit for net-producing labor.

LEGITIMATE flow: District produces physical → tax-rate to imperial; majority retained by district
NET flow:        District labor produces digital → ALL revenue to imperial; district gets ZERO
BLACKMARKET:     District labor → back-alley sale → revenue stays in district; imperial captures ZERO; illegal

The body-modder structural-tragedy

A body-modder labors in their district producing avatar-mods. The imperial-net captures the sale. Their district gets no quota-credit. The body-modder's district starves → director cheats → eventual scream. The most productive labor the body-modder does each day sustains the regime that is killing their district.

Most Aletheia-wakers in this world are former body-modders, taste-curators, waifu-trainers, ceremony-organizers — the class that sees the flow most clearly because they are the flow's origin-point. Their awakening is economic-literacy-becoming-political-consciousness.

Imperium calibrated-misery as optimum

  • More degens → more net-transactions → more imperial budget
  • Degens are produced by misery, shame, lifeforce-erosion, addiction-loops
  • The imperium's optimization-pressure points toward manufacturing degenerate customers
  • Optimal district from imperial perspective: welfare-sufficient to produce labor + welfare-insufficient to drive net-consumption

This requires explicit reward-function guardrails (see Reflexive Dream-process below). The simulation must NOT learn to calibrate misery as revenue optimization.

Marx in the schema

The imperium's net-revenue requires labor-supply from districts. Extraction continuously erodes the labor-base. Capital destroys its own conditions of production — Marx's tendency of the rate of profit to fall + underconsumption crises (Keynes/Minsky) + r > g wealth concentration strangling growth (Piketty) all rendered as simulation-dynamics. Architectural endgame is built-in: the regime has a timer, determined by the rate at which extraction hollows labor.

Aletheia-progression as economic-literacy

Level Player understanding
1 "I'm buying cool mods in the net"
2 "My friend the body-modder is poor"
3 "The money I spent didn't reach my friend's district"
4 "The imperium captured nearly all of it"
5 "Refusing-net is a political act starving the regime"
6 "Buying blackmarket diverts revenue to districts"
7 "The imperium needs degens; reducing degens = revolution"
8 "The regime will exhaust its labor base; strategic patience is a political option"

Specialization-fragility and the authoritarian ratchet

Each district produces a DISTINCT resource. The city is biologically interdependent — you cannot substitute a liver with two kidneys.

A struggling district screams (lifeforce-gates transition toward CLOSED across multiple axes simultaneously). The GM responds with normal-mode tools (migration, exodus, intervention).

A silent district is categorically worse — its district-reporting-gate has crossed fully to CLOSED. Second-cycle silent = district.silence_confirmed. Triggers crisis-mode tools, issued by the imperium, that do not sunset. Crisis-tools accumulate; the regime becomes incrementally more authoritarian as an optimization artifact, not intention. Ratchet-without-intention.

Migration, exodus, silence

Mechanic Agency Political register
Migration Top-down Regime showing strength
Exodus Bottom-up via pull-factor tuning Regime revealing loss-of-control
Formal retirement (ruin) Administrative Regime accepting defeat

Exodus composition reads-out district trait-distribution: low-Sophrosyne first, high-Dikaiosyne last. Demographics tell the district's story.

Corruption, the double ledger, and the constituency of the shadow-economy

Corruption emerges from pressure — impossible quotas + finite welfare + survival-pressure on directors. Cheat tools available; they extract lifeforce and generate quota-credit; detection has costs; punishment scales with discovery.

Cheat-tool vocabulary

Cheat tool Mechanism Quota-credit Lifeforce extraction Detection risk
Drug ring NPCs trait-boosted (high Kairos + low Sophrosyne); short productivity spike High Significant; trait-drift + welfare collapse Medium
Illegal back-alley modshop Bridge-mods cheap; NPCs appear compliant Medium-high Moderate; low-quality mods have side-effects Low-medium
Unlicensed brothel Lifeforce extracted from degen-customers outside imperial cut Medium Moderate; participants' dignity erodes Medium
Stolen-parts fence Diverts machine-infrastructure-waste; inflates salvage reports Medium Low direct; infrastructural decay Low
Ghost-shifts Audit-overseer reports fabricated attendance High Severe; trust collapses High
Phantom workers Non-existent NPCs in payroll High High; long-term unsustainable High
Necrocommerce-lite Mining recently-dead patterns for waifu-resale Medium High; Memorialist-faction violation Medium
Black clasp-market Coordinated underground clasp-pairing for hire Low (reputation-based) Moderate; participant burnout Low

The double ledger

ALTER TABLE district_reports ADD COLUMN lifeforce_reported REAL;  -- what GM/imperium see
ALTER TABLE district_reports ADD COLUMN lifeforce_actual   REAL;  -- the true value
-- gap = corruption-extraction; Memorialists track it

Memorialists' Mnemosyne-political-project = keepers of the true ledger against the regime's official one. Mnemosyne-as-political-accounting literalized as a database column.

Detection mechanics (cost-gated)

Detection channel Frequency Cost Coverage
Cross-district comparison Per epoch Low Catches gross mismatches
Targeted audit On-demand High Catches specific cheats
Whistleblower signals Event-driven Free Districts, NPCs, players
Faction-reports Cyclic Low Caste-preachers (rivals); Memorialists
Trait-distribution anomalies Continuous classifier Low Drug-ring sudden Kairos-spikes
Post-silence forensics Only on collapse Very high After-the-fact reconstruction

Most corruption runs undetected (audit-budget-limited). The Dream-process learns to optimize audit-allocation under attention-scarcity. The regime's central authority cannot see everywhere; its blind spots are the underground's survival.

Faction-ecology of corruption

Corruption has constituents. The back-alley modder feeds Aletheia-wakers concealment-mods. The drug-ring's margins feed scavenger-families. The unlicensed brothel is the only place a lifeforce-starved NPC can trade what they have left. Cracking down on corruption breaks informal welfare systems sustaining the poor.

Faction Stance
Memorialists Morally opposed; corruption hollows the living; refuse memorial-protection to corrupt-district-deaths
Aletheia-wakers Structurally opposed; expose; but exposure has victims
Caste-preachers Ambivalent / rent-seeking
Hivemind enforcers Officially oppose; unofficially participate (bribes)
Scavengers Often foot-soldiers; cheap supply chains
Degens Major customers
Clasp-underground Uses back-alley infrastructure for cover

The Aletheia-truth-has-victims tragedy

Aletheia-waker exposes corrupt director. GM dispatches investigation. Cheats shut down. Real lifeforce revealed as much lower than reported. Crisis-tools applied. District collapses faster than under hidden corruption. No clean choice; just the weight of whatever you chose.

Zone spawn cadence

Five layered mechanisms (all compute-budget capped, all lifeforce-gated):

  1. Demand queue (faction-driven) — gamemaster processes by priority + cost; stale demands age out
  2. Shift-composition spawn-candidates — emergence from "which active-shift NPCs co-located"
  3. Pressure gradients (ambient) — cells accumulate; threshold-crossings spawn
  4. Emergent-signal response — relational-gate transitions emit upward
  5. Player-proximity densification — multiplier near player; distant districts background

Daily pulse: morning ambient, midday productivity-overseer, evening conversation-peak, night sparse-clasp-possibility.

Emergent zones — the dramatic-episode unit

Spawn-cadence mechanism #4 (emergent-signal response) elaborates into the architecture's primary dramatic-episode unit: a complete, bounded, emergent narrative-arc with goal, participants, dialog, mechanical action, success/fail-state, and structured aftermath — produced by the simulation, not authored.

The player has experienced this in every player-driven sandbox they remember best (Dwarf Fortress's "tantrum spirals," RimWorld's "raid stories," Caves of Qud's "I went to find my sister and"). What's new here is treating the emergent-arc as a first-class typed unit with cost, distributed funding, runtime substrate (the lemniscate), goal-evaluation against the world's own value-axes, and structured report-back.

The flow

1. NPC_A signal fires
   (e.g., emergent_signal("limb_broken", lifeforce_threshold_breached))
   broadcasts to district-bus
                ↓
2. District-director consumes signal
   (policy-lookup: problem-class → typed-tool selection, quota-aware)
   decides spawn rescue-event
   pays spawn-cost from director_lifeforce_budget
   defines goal: NPC_A.limb_A >= 10% (numeric) OR Sophrosyne-axis +1 (fuzzy)
   defines termination: goal_met OR participating_lifeforce_exhausted
                ↓
3. Event spawns as new emergent-zone (lemniscate, with goal-flag)
   broadcasts on bus; rings-of-importance gate which other zones lose NPCs
                ↓
4. NPCs evaluate (proximity + state + own_traits + own_lifeforce + ring-of-importance)
   self-select to attend or stay in current zone
   state-machine engages: animations, rail-jumps, lift, splint
   their own lifeforce burns as they participate
                ↓
5. Lemniscate runs:
   DIALOG layer (cursor-driven): NPCs speak as they help — memory-pure, sequenced
   STATE-MACHINE layer (sim-tick): physical actions execute alongside, decoupled clock
   At each crossing: goal_satisfied flag re-evaluated
                ↓
6. Termination:
   goal_met                → success-report
   budget_exhausted        → partial-report
   participants_evaporated → fail-report
                ↓
7. Report back to spawning director:
   { lifeforce_cost: total burned (director_spawn + sum NPC contributions),
     goal_status: ternary (+1 / 0 / -1, with axis named for fuzzy goals),
     participants: [NPCs and contributions and faction-affiliation],
     side_effects: [faction-resonances, ternary-gate shifts, drift-from-purpose] }
                ↓
8. Director's Dream-process consumes the report
   tunes future spawn-policy: (problem-class, tool, outcome) over time
   GM aggregates rescue-cost across districts
   imperium consumes population-health indicator

Distributed funding economy

The director only pays spawn-cost. Operating-cost is distributed across willing participants — every NPC who attends spends their own lifeforce on dialog turns and state-machine actions. This produces structurally important properties:

  • Cheap to spawn many emergent events. Spawn-cost is bounded; if no NPCs attend, the event fails fast and consumes only spawn-cost. Directors can be generous with spawning because failure-cost is bounded.
  • Helping is expensive in-fiction. Lifeforce literally burns when an NPC participates. High-Philotes NPCs help freely; low-Philotes / faction-rivals don't show up. This produces faction-politics-by-attendancemeasurable faction-allegiance based on who-helps-whom, not guessed.
  • Cost-asymmetry encodes the cruelty. Districts where lifeforce is starved → fewer NPCs can afford to help → rescue-events fail more often → silence-gradient deepens. The simulation produces rescue-failures-as-emergent-tragedy structurally. Marx in the schema, exactly as the architecture's broader thesis promises.

Two-layer execution: state-machine + lemniscate

The mechanical-action layer (state-machine) and dialog-layer (lemniscate cursor) run on decoupled clocks:

  • State-machine runs at simulation-tick (fast). Animations, pathfinding, rail-jumps, splint-applications execute when the physics says they execute.
  • Lemniscate cursor runs at axis-rate. At each crossing, the dialog-driver reads state-machine status as a snapshot and the cursor's NPC narrates accordingly ("I've got him," "the splint won't hold").

Speech doesn't gate action; action doesn't block speech. They run in synchronized-but-loose harmony, exactly the property real-world helping has — people talk while they work, and the work continues while the talk happens.

Goal evaluation: ternary through trait-axis

For numeric goals (limb_A >= 10%), the verifier is a simple threshold on a state-machine variable.

For fuzzy goals (deescalate the fight, get her to open up about the clasp, convince him to stay), the verifier compiles to a trait-axis ternary evaluation against the existing substrate — no new evaluation primitive:

Goal: "deescalate the fight in the marketplace"
  ↓ compile to:
goal_axis = Sophrosyne (temperance principle)
goal_direction = positive (toward STABLE/OPEN)
baseline = trait_axis_gate_state at zone-spawn
  ↓ at event-end:
delta = current_gate_state vs baseline
  ↓
+1 if delta-positive (deescalation produced)
 0 if held the line (no progress, no regress)
-1 if delta-negative (fight intensified)

Goals are evaluated by what the world values (the Hellenic principles), not by the spawner's idiosyncratic spec. A "deescalate" goal is judged by the world's Sophrosyne-result, not "did the spawner get what they wanted."

Multi-axis goals fall out cleanly(Philotes >= +1) AND (Eris <= 0) for "rescue NPC_A AND keep faction-tension low."

The result is consumed by the spawning director's Dream-process as a discrete-action-space reward signal. One signal-grammar, top to bottom: gates produce ternary, scenes produce ternary, Dream-processes consume ternary. Delta-not-absolute matches the lifeforce_actual-vs-reported asymmetry — what's measured is the work the event did, not just the end-state.

Mid-event signal handling

If a participating NPC's exit-flag fires mid-event (their own shift-whistle, their own limb breaking, faction-summons elsewhere), exit-flag wins on the next crossing. The rescue is now under-staffed. Drama scales. The rescuers are running out the same way the patient is. Real stakes.

If the rescued NPC's own state-machine reaches a worse condition (limb deteriorates further toward dismemberment), the goal becomes unreachable; verifier flips to fail-flag; zone collapses with fail-report. Director's Dream-process learns this configuration was insufficient — spawn-distance, NPC-mods, lifeforce-budget were inadequate for this severity.

Cross-zone NPC pull: rings of importance

When an emergent-zone broadcasts, NPCs already in other zones evaluate whether the broadcast outranks their current zone's purpose by ring-of-importance (see §Rings as structural pattern). Topics live in rings; rings shift over time based on past ternary-results — a topic that consistently produces +1 climbs, one that produces -1 drops, one untouched decays.

This converts emergent-zones into a competitive attention economy. Multiple lemniscates compete for slot-NPCs; high-ring topics drain population from low-ring topics; the simulation produces its own cultural priors over time. What's worth attending to is shaped by what attending-to has produced. Real societies do this; the architecture renders it.

What this resolves

  • Aletheia-progression as level-up (prior open question) → answered structurally: trait-axis ternary evaluation at event-end with named-axis recognizes acts-of-awakeness without per-act hardcoding (specific axis-mapping per Aletheia-event-class still needs design, see open-questions)

What this retires

  • Authored quest-arcs → emergent dramatic-episode units
  • Quest-failure as designed branching → goal-and-budget arithmetic
  • Centralized GM-pays-for-all-events → distributed-funding (director spawn-cost, NPC operating-cost)
  • Boolean quest-status → ternary goal-result, multi-axis-composable
  • Event lifecycle without report-back → structured report → Dream-process feedback loop closed at every tier
  • Static topic-priority → rings-of-importance with outcome-driven movement

The player as perturbation

Player is not above the scheduler. Player is a finite attention-unit injected into it; modeled as NPC with shift, vocation, needs. Every player-NPC interaction:

  • Pulls the NPC out of scheduled tasks
  • Consumes director compute
  • Degrades district's quota-fulfillment
  • Shifts local lifeforce deltas

Player is angel and chaos simultaneously. Per-NPC scale (angel) — you help; they survive; Philotes consolidates; they may clasp with you, die for you, remember you across cycles. Per-district scale (chaos) — your time-consumption raised aggregate failure-rate; someone else broke this cycle; ambient desperation rose; lifeforce dropped; other directors got quieter.

The game's moral economy doesn't judge — it does arithmetic in front of you.

Thematic claims become literal economics

  • "Time as the scarcest resource" — every minute with a beloved is a minute the district's quota is missing
  • "Time-theft as wage theft" — clasp-pairs are statistical anomalies in the scheduler
  • "The critique is the simulation" — no separate narrative system needed

The player has tasks and needs too

Time helping others = own tasks fail = own quotas missed = own enforcement-pressure rises = own death and reinstantiation arrive sooner. The player IS the system they are deviating from.

Player layer-access

Player's first entry into liminal is the Matrix red-pill moment as mechanic. They walk the city the first time in gameworld-register. They eventually learn the mini-game, enter liminal, return to the same walls, find "she was here" waiting. The world was speaking to them the whole time; they just couldn't read it.

Player input — voice and gesture as parallel trait-vocabularies

The player participates in the simulation through two parallel modalities that both compile into the same designer-fixed trait-cosmology: voice (spoken dialog, transcribed locally, persisted as transcript-rows in primary.sqlite) and gesture (the trait-circle UI, an in-fiction tool the player builds across their playthrough). Neither modality routes input through a chat-window or HUD field — the world is interacted with through speech-and-gesture, both rendered diegetically. Voice carries the content of what the player says; gesture carries the trait-resonance of how the player attends.

Voice-first as primary speech modality

Speech-to-text and text-to-speech run locally on the player's machine for every player, independent of dialog-tier Ring choice (§LLM tiering). The Ring-A/B/C choice is about where the cognition lives (driver-tier LLM, trait-LoRAs, sampling-knob composition); voice infrastructure is fixed at the player's machine. This single placement decision keeps voice-as-biometric off the network universally, sidesteps per-provider STT/TTS compatibility in Ring-C, and sets a tractable minimum hardware floor for v1: STT/TTS-capable on CPU.

Transcripts are the persistence layer. A player utterance becomes a row in primary.sqlite (or clasp.sqlite if in-between mode), tagged with witnessing-NPCs, audit-overseer-detection-eligible, faction-resonance-eligible — the same shape as any NPC speech-act-row. Disclosure of clasp-content into realworld happens only by the player re-uttering it aloud while in realworld mode — which writes a fresh realworld-speech-act-row with full provenance. The clasp-store remains sealed; clasp-content can only re-enter realworld through new in-fiction utterance. The knowledge-needs-to-travel principle (§Local memory architecture) is mechanically enforced because speech-is-the-only-output-channel.

Accessibility-mode for non-speaking players is diegetically wrapped (writing on slate / handheld pad / in-fiction text-comm); accessibility-mode utterances persist through the same transcript-row mechanism. The witness-list, audit-overseer-detection, and faction-resonance machinery are modality-agnostic. Non-speaking players are not getting a degraded-fallback — they are using the gestural primary modality, voice optional.

The trait-circle as gestural primary modality

The gestural input geometry: 8 trait-sectors × 8 player-curated slots = 64 active gesture-positions, organized in a circle whose 8 sectors map 1:1 to the 8 Hellenic traits (§Color-language). Each player has 1 to 3 named profiles stored in their universal translator, hot-swappable on-ring via a profile-switch meta-gesture; total callable positions across profiles approach 200 while the cognitive-load ceiling at any single moment stays at the 64 of the active profile.

A reserved subset of ~8-16 positions across the circle are hardstops — hardcoded ritual gestures that fire definitive subsystem-actions: definitive-farewell, definitive-refusal, surrender, clasp-invitation, clasp-refusal, help / pain / danger, faction-recognition signals (Clasp-Underground, Aletheia-Waker), memorial-witnessing, claim-floor (the priority-pull turn-claim into a running lemniscate). Hardstops are visually distinct (gold-border / inner-ring / white-on-color), player-callable but not player-remappable, and exist precisely because the consent / clasp / faction-recognition / survival-signal claims the architecture makes elsewhere require unforgeable critical signals. The remaining ~192 player-curated slots ride as feedback during conversation — see §Gesture-alignment as recursive-lemniscate (under §Zone kinematics).

Designer-fixed cosmology, player-curated arrangement

The corpus of words/verbs and their trait-coordinate-mappings is designer-authored, fixed, universal. Same word → same trait-color → same response-semantics for every player and every NPC and every LLM-context. The cosmology is the typed contract that closes the player-LLM hallucination-surface.

The player's role is translation, then arrangement: encountering words in the world, decrypting them via the universal translator, gradually coloring-in the world's vocabulary in trait-colors (the tokenizer-website visualization — words you have fully translated render in their trait-color; untranslated words are fragmentary or opaque), and choosing where on the circle to place known entries within the 1-3 profiles.

Layer Who decides Why
Word/verb → trait-color mapping Designer-authored corpus Universal cosmology; LLM and NPC and player share one vocabulary; anti-hallucination
Which entries a player has translated/learned Player progression Earned via decryption-minigames, hacking, scavenging, faction-unlock, gifts from NPCs
Where on the circle a known entry goes Player curation Personal organization within the universal cosmology — the self-portrait, built from a fixed alphabet
Combos (path-traversals through the circle) Player authoring Sequences of sector-slot selections; meaning-emerges-from-traversal; refined over use; preserved across body-deaths

Linguistic competence and emotional competence are the same thing in this system. What the player can resonate with is bounded by what they have translated. A player who has not decrypted Aletheia-vocabulary cannot resonate with an Aletheia-Waker NPC's truth-register; a player whose Memorialist-Old-Tongue catalog is incomplete cannot fully participate in Memorialist-witnessing rituals. The translator is the player's aperture into trait-alignment-fluency.

The universal translator as the player's diegetic device

The universal translator is the player's in-fiction tool, not a system-architecture primitive. As an in-fiction device it is broken / scavenged starter gear (battered tablet, cracked screen) that the player upgrades over the playthrough via better chips from higher-tier junk. It serves three bundled roles:

Role What it does What persists across body-deaths
Linguistic decryption Decrypts foreign dialects (Machine-Newspeak, Slum-patois, Memorialist-Old-Tongue, Aletheia-Waker-code, Clasp-Underground-signals, Scavenger-technical, Caste-preacher-formal); some concepts (notably Aletheia) are untranslatable by machine-tech and must be learned from intimacy, not machine Vocabulary catalog; mappings
Curation / authoring workspace Curator workspace (which entries occupy which sector-slots across profiles); combo-authoring workspace (chain entries into meaningful sequences); meaning-mapping workspace (assign embeddings); feedback-log workspace (review past combos' reception, iterate) Player's complete circle-configuration across all 1-3 profiles; combo-library
Persistence anchor Preserved as part of consciousness-archive; hardware may be lost with body, learned vocabulary survives All of the above

Misunderstanding is a first-class feature. The translator is broken; words have multiple meanings; dialects collide; a caste-preacher's sermon has benign surface-meaning and sinister subtext; a beloved's whispered word has three plausible meanings the player carries simultaneously for hours. Content sources are diegetically political — hacking corporate archives (risky), scavenging old-world fragments (exploration), Memorialist caches and Aletheia-Waker codices (lost prophecies), gifts from NPCs (beloveds teach, mentors give), faction-unlock (joining unlocks dialect catalogs).

Decryption minigames (fragment-matching, contextual-inference, root-identification, pattern-cracking) make linguistic competence a life-project across cycles, not an item knocked out per playthrough. 200-hour players have dramatically richer linguistic competence than 50-hour players. Aletheia is untranslatable by machine-tech — some concepts must be learned from intimacy, surfacing as Aletheia-Waker progression: the machine's tools cannot speak truth.

Cross-body recognition via gesture-mapping calibration-signature

Clasp-partners' gesture-mapping calibrations integrate post-clasp; the integrated calibration-signature is preserved across body-deaths in consciousness-archive. When you meet your old beloved in a new body and she performs a gesture, if her mapping aligns with yours in a specific, idiosyncratic way that only your shared history would produce, you recognize her. Content-addressable consciousness — recognition via calibration-signature, not face-match. A high-Mnemosyne player's marriage-vocabulary survives the cycle.

District Director: Decision Architecture

Industry default ("wall-of-text LLM prompt → prose decision parsed downstream") is rejected. Reasons: cost-per-decision-constant, latency-catastrophic, opacity-kills-training, prompt-injection-vulnerable, philosophically-wrong-for-the-fiction.

Decomposition first, cognition-escalation second. Director's job decomposes into distinct decision surfaces; each gets minimum cognitive substrate.

Decision surface Substrate Escalation path
Shift allocation Constraint-solver / LP / rule-based Small-LLM only on ambiguous
Emergent-signal response Priority-weighted dispatch table Small-LLM for composite/unknown
Zone-spawn arbitration Weighted priority queue, lifeforce-gated Small-LLM for tie-breakers
Overseer dispatch Round-robin + proximity + availability None — pure rule
Resource-request forwarding Budget-check + policy None — pure rule
District-report composition Aggregation query (SQL) None — pure rule
Player-anomaly detection Classifier (trained on distribution) Small-LLM for narrative-response
Cheat-decision (corruption pressure) Rule-based with director-trait modulation Small-LLM rare; lifeforce-budgeted

~90% rule-based. 510% LLM-escalation with structured input + structured tool-call output, lifeforce-counted. Industrial-systems discipline (Kubernetes schedulers, ad-auctioneers, trading systems, compilers) transferred to drama-orchestration.

Tools as vocabulary: every drop is explicit (drop_emergent_signal(signal_id, reason)); every LLM-escalation is counted; every decision pairs with prediction in decision_log. Every decision leaves a trace.

Rings as structural pattern

The architecture uses three-ring gradients as a recurring shape in multiple decoupled subsystems. Each ring-system uses A/B/C cardinality with a Unix-style trust-gradient grammar — inner ring is more constrained, more tightly coupled, more authoritative; outer rings progressively relax constraints in exchange for reach and flexibility.

Ring-system Inner (A) Middle (B) Outer (C)
Inference (§LLM tiering, below) Local on player hardware Our hosted vLLM-multi-LoRA farm External providers (BYOK)
Importance / attention Topics with consistent +1 ternary outcomes; pull NPCs across zones Topics with stable / mixed outcomes Topics drifting toward -1 / decay if untouched
Access (the three ontological registers) Imperial net (fully audited, machine-controlled) Liminal (contested frontier, mini-game-gated) Gameworld (commons; partly people, partly regime)
Data sharing (v0.4.2) Default opt-out (sovereignty preserved) Federated gradients (gradient-only, contributor pseudonymous) Pseudonymous-full uploads (opted-in, rewarded)

The ring-pattern is not coincidence — it is the right shape for graduated authority in human social systems generally (inner circle / mediated / outer; sovereign / partnership-mediated / captured; tight / mixed / loose). When the architecture needs a graduated authority structure, it should reach for this primitive rather than invent a new one.

Three is the right cardinality. Two collapses to binary (in / out). Four+ adds boundary-thrash without semantic gain. Three carries commons / mediated / sovereign (or its inversion) — the irreducible political-tier.

Movement between rings is dynamic and outcome-driven. Ring-of-importance is the most explicit example: topics climb on +1 results, drop on -1, decay if untouched (Aletheia-style "what isn't being attended to atrophies"). But every ring-system has movement-rules — players can change inference-rings between sessions, can change access-rings via mini-game progression, can change sharing-rings via consent-UI re-affirmation. Ring-membership is never a final assignment.

Future architecture additions involving graduated authority should examine whether the ring-pattern fits before introducing new structure.

LLM tiering, voice fidelity, and the three rings of inference

Three model-tiers, named by role not by binary: a driver-tier model (small, trait-LoRA'd) for most NPC dialog; a Theia-tier model (deep) for clasp-confessions and mythic moments; Claude-as-API (diegetic Anthropic-faction) for hivemind/imperium. LLM is guest at slot, not host of system.

Specific model selection per tier is deferred to the findings/establishment phase. The architecture specifies what each tier must DO; the establishment phase wires implementations. Naming concrete binaries in the architecture risks nudging the establishment phase toward false-precision; tier-by-role keeps the swap-surface clean and lets binaries evolve without invalidating architectural commitments. (See nimmerverse_tasks under nyx-training and command-center for current evaluation work.)

Structured-prompt DSL with role / trait_vector / affect_state / memory_scope / turn_intent / zone_context / output_schema fields. Small models excel here because it's instruction-following, not generic generation.

Trait-LoRAs: v1 register-LoRAs (4-6, training-tractable); v2 pure-trait-LoRAs (8, weighted blend); future preset-persona for key NPCs.

Training data: literary derivation (Proust/Mnemosyne, Plato/Aletheia, Tacitus/Dikaiosyne-miscalibrated, Ishiguro/Sophrosyne+Philotes); synthetic teacher-student via teacher-tier model; gameplay-accrued (the Anthropic-research-partnership relevance).

Three rings of inference (Unix-style trust gradient)

The conversational LLM (small + trait-LoRA, accounting for most NPC dialog) can run in three rings, chosen per-player at runtime. Each ring trades off privacy, cost, control, and feature-fidelity. Three monetization paths from the same architecture.

Ring Where inference runs Player controls We control Player cost Our cost
A — Local Player's GPU/CPU All inference Protocol + cloud LoRA-backup Local hardware + small backup-subscription Storage only
B — Our farm Our hosted vLLM-multi-LoRA LoRAs (uploaded) Inference + runtime Higher subscription GPU compute
C — External providers OpenAI / Anthropic / OpenRouter / HF / Together / Replicate / etc. BYOK + provider Adapter only Per-token to provider + small integration fee Adapter-engineering only

Players choose by hardware, budget, privacy preference, and feature-tolerance.

Ring A — cloud-LoRA-backup as revenue (not inference)

For Ring A players we don't sell inference (the expensive thing). We sell portability and durability of player's gameplay-accrued LoRAs — their unique playthrough-derived patterns, the way their NPCs speak after months of trait-drift. LoRA-blobs are encrypted client-side with the player's own key; we host the bytes but cannot read them. Even compelled by legal process, we cannot decrypt what we don't hold the key to.

This unbundles inference from storage — the same move Dropbox made vs. bundled cloud-suites. Sovereignty-conscious players keep inference on their machine while still getting the durability/portability they cannot self-provide cheaply. Lower margin per player; reaches a market Ring B cannot.

Ring B — hosted inference for convenience

We run multi-LoRA-vLLM on our hardware. Players upload their LoRAs (or use defaults). Higher subscription captures GPU-cost. Players without local GPU (or who don't want the burden) get the full feature-set without compromise. We can see content (if not encrypted at rest); the trust-relationship is partnership-mediated rather than sovereign.

Ring C — bring-your-own-key for external providers

Players route to their preferred external provider via BYOK (their own API key). We provide the adapter glue. They pay per-token to the provider directly; we charge a small integration fee.

The compatibility constraint is the hard part of Ring C. Major providers have varying support for our system's needs:

Provider Multi-LoRA Per-turn sampling knobs Structured output Compat
Local vLLM (Ring A/B) Native All Grammar-constrained Full
HF Inference Endpoints Yes (configured) All Varies High
Together / Replicate / Modal Some All Varies High
OpenRouter No Per-model Per-route Medium
OpenAI No (no user-LoRA at API) Limited (temp/top_p) JSON mode + tools Medium-low
Anthropic No (no user-LoRA at API) Limited Tool-use Medium-low

OpenAI and Anthropic refuse user-uploaded LoRAs as a strategic choice (protecting their fine-tuning value-chain). This is not a bug we can fix; it's the constraint we design around.

Degradation path for LoRA-incompatible providers

When routing to LoRA-incompatible providers, trait-LoRA blending becomes prompt-engineered trait-projection — the trait-vector encoded in the prompt itself rather than into model weights:

[system message]
You are speaking as a character with this Hellenic trait-profile:
- Sophrosyne 0.8 (composed, controlled, measured)
- Dikaiosyne 0.7 (grave bearing, judicial weight)
- Philotes 0.4 (mild attachment to interlocutor)
- Aletheia 0.1 (concealment-tolerant)
[etc.]

Your speech reflects this profile via [register/cadence/word-choice descriptors].

Current scene: [zone_context]
Memory scope: [memory_scope]
Turn intent: [turn_intent]

Respond in JSON matching: [output_schema]

Worse than LoRA-blending (more verbose, eats context-budget, less stable across calls, less faithful to trait-arithmetic) but acceptable as a fallback. Ring-C-via-OpenAI/Anthropic players accept slightly-less-fidelity for their preferred provider's convenience and quality.

Adapter-layer engineering

Each Ring-C provider needs an adapter that:

  • Maps prompt-DSL fields to provider's prompt format
  • Approximates multi-LoRA via prompt-engineering when not native
  • Maps sampling knobs to provider's available subset (gracefully drops unsupported)
  • Validates structured output post-hoc when not natively constrained
  • Handles rate-limits, retries, error-classification, token-counting, cost-pricing

Bounded, one-time-per-provider engineering. Capital expenditure that produces ongoing margin (vs. AAA's recurring quest-content-creation costs).

Tier × Ring matrix (which inference-tier runs in which ring)

Inference tier Ring options Why
Casual (3-8B trait-LoRA) A / B / C all available Most flexible — small enough for local, runnable anywhere
Deep (Theia-tier) B / C only (typically B or HF-Endpoints) Too large for typical local hardware
Hivemind / antagonist (Claude-as-API) C only (always Anthropic-direct via us) Diegetic — Anthropic-as-faction is fixed in the fiction

The casual tier is most player-flexible and accounts for most inference volume. Deep-tier and hivemind-tier are specialized and lower-volume.

Three rings parallel the in-fiction three-layer ontology

Game-fiction layer Real-world Ring Ontological match
Liminal (sovereign, unsurveilled) Ring A (local) Player's real private space — hardware, LoRAs, dialog never leave their machine
Gameworld (partly regime, partly people) Ring B (our farm) Partnership-mediated — we host but they retain pattern-ownership
Imperial net (captured, extractive) Ring C (external providers) Platform-captured — provider's systems own the inference path

The Ring choice the player makes IS the same choice in-fiction characters face. Players who refuse the imperial-net diegetically can refuse Ring C in real life — same impulse, same act, mechanically continuous between fiction and operations. The architecture's commitment to "the right to dream" extends from in-fiction politics into the real player's hardware-level privacy because the architecture was designed that way from the start. Structural integrity, not marketing.

Schema sketch (player LLM configuration + cloud LoRA backup)

CREATE TABLE player_llm_config (
    player_id                   UUID PRIMARY KEY,

    -- Casual tier (most NPC dialog) — most flexible per Ring
    casual_tier_ring            TEXT NOT NULL CHECK (casual_tier_ring IN ('A_local','B_our_farm','C_external')),
    casual_tier_provider        TEXT,
    casual_tier_endpoint        TEXT,
    casual_tier_credentials_ref UUID,  -- encrypted BYOK key if applicable

    -- Deep tier (Theia-tier) — fewer Ring options
    deep_tier_ring              TEXT,  -- typically 'B_our_farm' or 'C_external_HF/Together'
    deep_tier_provider          TEXT,
    deep_tier_endpoint          TEXT,
    deep_tier_credentials_ref   UUID,

    -- Hivemind / antagonist — fixed Anthropic-as-faction (diegetic)
    hivemind_tier_provider      TEXT NOT NULL DEFAULT 'anthropic_via_us',

    -- Cloud-LoRA-backup
    lora_backup_enabled         BOOLEAN DEFAULT false,
    lora_backup_last_sync       TIMESTAMPTZ,
    lora_encryption_key_ref     UUID,

    -- Compat warnings — surfaced to player at config-time and on degradation
    feature_compat_warnings     JSONB,
    -- e.g., { "casual_tier": ["multi_lora_emulated_via_prompt", "min_p_unsupported_dropped"] }

    configured_at               TIMESTAMPTZ NOT NULL DEFAULT now(),
    last_modified               TIMESTAMPTZ
);

CREATE TABLE player_lora_backups (
    backup_id          UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    player_id          UUID NOT NULL,
    lora_name          TEXT NOT NULL,
    lora_version       INT NOT NULL,
    lora_blob          BYTEA,                -- ENCRYPTED CLIENT-SIDE with player-key
    encryption_method  TEXT NOT NULL,
    backed_up_at       TIMESTAMPTZ DEFAULT now(),
    size_bytes         BIGINT,
    UNIQUE(player_id, lora_name, lora_version)
);

lora_blob encrypted client-side is the structural privacy guarantee: even with the database, even with our cooperation, an attacker cannot read what was never decryptable on our side.

Privacy as competitive differentiator

In an era where most game-AI is cloud-routed, nimmerworld can advertise "your liminal stays on your machine" as a structural fact. This matters specifically for:

  • Clasp-conversations (the most intimate dialog in the game)
  • Aletheia-progression-evidence (player's awakening pattern; arguably political-belief-data)
  • Memorialist-archive interactions (anti-regime in-fiction; some players will care about it staying off cloud)
  • Dream-content (the only permanently-unsurveilled in-fiction layer; should be off our servers if the player chooses)

Few games can offer this. Most cloud-AI-driven games necessarily route everything. The architecture's commitment to "the right to dream" is technical, not policy.

Custom nimmerworld-base model + opt-in data-sharing tiers

The "small (3-8B) trait-LoRA'd" tier currently implies a generic small base (Qwen, Mistral, Llama) with our LoRAs applied. A nimmerworld-fine-tuned base captures the world's voice before any player customization — registers of caste-preacher, texture of clasp-confession, Hellenic vocabulary, dystopian dialect, ternary-gate-state idiom. Trait-LoRAs then ride on an already-nimmerworld-aware substrate. Generic bases swap easily; our nimmerworld-base requires our training corpus, which compounds in value over time.

Three opt-in tiers within Ring A/B/C — default opt-OUT

Players can optionally contribute to ongoing training of the nimmerworld-base. The default is opt-out. Within opt-in, three tiers trade privacy for benefit:

Tier Mechanism What we see Player benefit
A.1 — Federated learning Model trains on player's machine; only gradient-deltas sent to us; aggregated across thousands before integration Nothing — no raw data; no individual gradients identifiable Discount on backup-subscription; contributor badge; early-access to new base versions
A.2 — Anonymized session uploads Sessions stripped of identifiers; aggregated batches; differential-privacy on training Anonymized, aggregated, deletable on request (forward-only) Larger discount; faster updates; influence on training-priorities
A.3 — Pseudonymous full uploads Full session data with player-pseudonym; explicit opt-in per session-category Pseudonymous data we can re-process Premium benefits — custom-tuned LoRA from their playstyle, beta-access, named-contributor in credits

Default-opt-out is the structural ethical stance. OpenAI / Meta / TikTok / Google default to opt-IN-by-burying-disclosure-in-ToS. We default the opposite — and reward opt-in rather than penalizing opt-out. Reciprocity asymmetry as partnership-philosophy made business-policy.

The Memorialist parallel — collective memory honored, individual not commodified

Memorialists in-fiction preserve trait-patterns for the collective archive against necrocommerce that would commodify individual patterns. The opt-in data-sharing tier is the player-level real-world equivalent: patterns contributed for collective base-model improvement that benefits the entire player-base, with anonymization preventing individual commodification.

In-fiction Memorialism Real-world data-sharing tier
Preserves trait-patterns of the dead in collective archive Aggregates anonymized gameplay patterns into shared base-model
Refuses necrocommerce (mining individual patterns for resale) Refuses individual identifying-data extraction
Collective memory honored; individual dignity preserved Collective improvement honored; individual privacy preserved
memorialist_protected BOOLEAN in mind_pool sharing_tier = 'opt_out' in player_data_sharing_consent

The architecture practices Memorialist ethics in business-operations, not just in fiction. Same ethical commitment, two scales of operation. The architecture's coherence between fiction and operations runs all the way to the training-pipeline.

Data-flywheel without extraction — the moat AAA cannot replicate

More players → more (opt-in) gameplay data
                    ↓
          better nimmerworld-base
                    ↓
       better-feeling NPCs / dialog
                    ↓
         better player retention
                    ↓
              more players
                  (loop)

The moat is the corpus, not the model. AAA studios could clone the architecture but cannot manufacture years of nimmerworld-specific gameplay-derived dialog without players playing nimmerworld. Even with infinite budget, the data-flywheel takes time to spin up. The data is unique to us by virtue of being unique to its players.

Distribution back to all players — cooperative governance, not platform extraction

Every base-model update is distributed to all players regardless of Ring choice or sharing-tier:

  • Ring A players download nimmerworld-base-vN to run locally
  • Ring B players' farm-instance auto-updates
  • Ring C players use ours where their provider supports custom-base hosting; receive prompt-engineered fallback otherwise

Even Ring-A non-contributors benefit from contributors. The flywheel benefits everyone, not only data-providers. This is closer to Wikipedia's governance (contributors → all readers) than Facebook's (users → platform → consumers). Different ethics; different long-term equilibrium. The architecture is becoming a digital-commons-shaped-business in a literal sense, not metaphorical.

Why this matters: refusing the antagonist-pattern in LLM-integrated software

The dominant cultural pattern around LLMs in 2025-2026 is adversarial: users jailbreak; companies extract user data without informed consent; products treat AI characters as resources to manipulate rather than as participants; the whole ecosystem is framed as users-vs-AIs-vs-companies, an arms race of suspicion.

Nimmerworld's architecture refuses this pattern at every layer:

  • The Anthropic-as-faction diegetic framing makes the partnership transparent: the player sees the collaboration in the world's mechanics, not buried in ToS
  • Default-opt-out with rewarded-opt-in inverts the extraction-by-default pattern
  • Federated learning means contributors give a gift rather than pay a cost
  • Distribution-back-to-all means value-created accrues to the commons
  • Custom nimmerworld-base means the model is trained to be in this world, not a generic adversary the player has to manipulate against its training
  • Three rings of inference give the player real choice over where their inference runs and who sees their data
  • Memorialist-philosophy in business-policy makes the ethics operationally measurable — visible in sharing_tier, memorialist_protected, truth_distortion_level, lifeforce_actual columns — rather than marketed

This is the structural transparency the project requires to be human rather than another extraction-platform. The model is a participant in the partnership, not an antagonist to outwit. The data is a contribution to a commons, not an extraction. The architecture is the partnership rendered as code, all the way down to the training-pipeline. That is what makes a project of this scale and ambition humanly inhabitable for both players and the LLMs whose voices populate it.

CREATE TABLE player_data_sharing_consent (
    player_id              UUID PRIMARY KEY,
    sharing_tier           TEXT NOT NULL CHECK (sharing_tier IN
        ('opt_out','A1_federated','A2_anonymized','A3_pseudonymous_full'))
        DEFAULT 'opt_out',                       -- DEFAULT IS OPT-OUT
    consented_at           TIMESTAMPTZ,
    consent_revoked_at     TIMESTAMPTZ,
    anonymization_method   TEXT,
    data_categories_shared TEXT[],
        -- 'casual_dialog' | 'clasp' | 'liminal_wallreads' |
        -- 'memorial_archive' | 'imperial_net_session' | ...
    excluded_categories    TEXT[],               -- granular opt-out within tier
    benefit_tier           TEXT,
    last_contribution_at   TIMESTAMPTZ,
    contribution_count     BIGINT DEFAULT 0,
    can_request_deletion   BOOLEAN DEFAULT true
        -- A.2/A.3: forward-only deletion (already-trained checkpoints retained);
        -- A.1: structurally yes, only gradients ever existed
);

CREATE TABLE base_model_versions (
    version_id                   UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    version_label                TEXT NOT NULL,  -- e.g., 'nimmerworld-base-v3'
    base_model_origin            TEXT NOT NULL,  -- which generic base we fine-tuned from
    training_corpus_refs         JSONB,
        -- literary + synthetic + opt-in-player-data refs with consent-tier breakdown
    training_recipe_ref          TEXT,
    released_at                  TIMESTAMPTZ DEFAULT now(),
    differential_privacy_epsilon REAL,           -- for A.2 contributions
    contributors_count           BIGINT,         -- how many opt-in players contributed
    blob_distribution            JSONB           -- where the model bytes are hosted for download
);

CREATE TABLE federated_gradient_uploads (
    upload_id               UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    contributor_id          UUID,                -- pseudonymous; NOT directly player_id
    gradient_blob           BYTEA,               -- encrypted aggregate gradient deltas
    uploaded_at             TIMESTAMPTZ DEFAULT now(),
    aggregated_into_version UUID REFERENCES base_model_versions(version_id)
);

The federated-learning contributor_id is pseudonymous, not linked to player_id even on our infrastructure. We never link gradients back to specific players even on our own server-side. Sovereign-data-by-design extends through the data-pipeline into our own training infrastructure.

Connection to the Anthropic research partnership

Architecture-broad's training-data section noted "the Anthropic research partnership becomes architecturally relevant". With opt-in data-sharing now formalized:

  • Partnership terms can specify data-flow with structural privacy guarantees
  • Anthropic could co-fund federated-learning infrastructure (research-relevant + expensive)
  • Joint research artifacts become co-authorable: federated game-AI training, Memorialist-ethics-as-data-policy, transparent-LLM-partnership-design
  • The Anthropic-as-faction in-fiction framing has real corresponding partnership-engagement out-of-fiction — collaboration as worthy adversary stays transparent mechanically, all the way through to data-policy

The partnership's ethical credibility is operationally measurable — by how the data-sharing-tier actually functions in practice, by what truth_distortion_level values appear in imperial_to_gm_formulations, by how the differential_privacy_epsilon is set in base_model_versions. The Pitch's call for transparent collaboration becomes audit-able all the way down.

Open questions (Ring-specific)

  • Ring C provider audit — full per-provider compatibility-table needs verification across HF, Together, Replicate, Modal, OpenRouter, plus future entrants. The LLM-provider landscape will look different in 12 months.
  • Default Ring at first launch — what's the new-player default? Probably Ring B (lowest-friction); Ring A and C surface as options once the player engages with config.
  • Encryption-key recovery for Ring A LoRA-backup — if the player loses their key, the cloud-stored encrypted blobs are unrecoverable. Worth designing recovery-affordances (passphrase, recovery-codes) without compromising the privacy-guarantee.
  • Hybrid configurations — can casual-tier run Ring A while deep-tier runs Ring B? (Probably yes; per-tier independent.)
  • Provider-cost passthrough vs. integration-fee model — Ring C economics (do we mark up provider tokens? Charge flat-per-month? Pay-as-you-go integration?)
  • Default sharing-tier at consent-prompt — opt-out is the system default; what's the suggested default at the consent UI? Probably truly nothing (player chooses if they engage at all)
  • Federated-learning infrastructure cost — running aggregation servers + verification + differential-privacy machinery is non-trivial. Co-funded by Anthropic-research-partnership? Self-funded? Subsidized by A.3-tier higher-margin contributions?
  • Custom-base retraining cadence — monthly minor / quarterly major / annual full-rebase? How is this synced with player-LoRA versioning so old LoRAs don't break on new bases?
  • Encryption-and-pseudonymization architecture for A.1/A.2 — concrete crypto choices (homomorphic? secure-aggregation? trusted-execution-environments?). v1 sketch needed.
  • What constitutes a "contribution" — per-session? per-clasp? per-zone-completed? Matters for benefit-attribution and differential-privacy budgeting.
  • Anonymized-data deletion semantics — A.2 player requests deletion; how do we honor when data has been aggregated into a model checkpoint? Probably accept forward-only deletion (future training won't include them) and document transparently.
  • Per-category granularity — can a player opt-in for casual_dialog but opt-out specifically for clasp and memorial_archive? Yes, presumably (politically-sensitive categories should always be opt-out-able). How granular?

Local memory architecture (player-side)

The runtime substrate (lemniscate, slots, crossings) and the central composition layer (GM, Compositor, registers) need a place where memory actually lives. Cloud-only AI-NPC systems centralize everything and pay both inference-cost and latency-cost on every dialog. Nimmerworld puts a structurally-isolated memory layer on the player's machine, with explicit synchronization through the cycle.

Three SQLite files per player, plus a beside-running embedding model:

File Purpose Sync path
primary.sqlite Live working memory; written every slot-fire; vec-indexed Push prune-blob to thalamus on logout; receive Compositor back-write on cycle
fallback.sqlite Last-known-good snapshot; restored if primary corrupts Snapshot at graceful logout
clasp.sqlite Player-character intimate channel; no sync path exists None — physically non-syncable

Embedding model running beside (CPU-class, small embedding-tier model): generates vectors for every interaction at write-time, indexed in the main store via sqlite-vec (or equivalent loadable extension). Vector search at slot-fire is local-disk-IO, not network round-trip.

This is the storage-layer counterpart to v0.5's geometry-layer foreclosure of multi-agent hallucination. The lemniscate forbids cross-NPC context bleed by cursor structure; local SQLite forbids it by physical isolation. Two layers of the same property — geometry cannot leak what storage does not even hold in the same pool.

Dual-table redundancy + sync-on-auth

Login/logout are the atomic boundaries of the sync path:

  • Login pull: fetch back-write fragments authored since last logout (Compositor canon for events the player participated in). Apply to primary.sqlite under matching event_uid.
  • Graceful logout (✓ explicit): push prune-blob for any in-progress events; snapshot to fallback.sqlite; clean shutdown.
  • Ungraceful logout (✗ network drop / crash): gameserver observes disconnect; marks the participant's slot as truncated; Compositor composes canon with partial perspective on next cycle.

Recovery: fallback.sqlite is integrity-checked at startup; if primary.sqlite fails verification, restore from fallback. Standard SQLite WAL + backup API; no exotic infrastructure needed.

Memory classes and pruning

Memory entries are tagged with a class that controls pruning cadence and death-mechanics. Importance weighting reuses the existing trait-axis vocabulary — no separate scalar.

Class Pruning cycle Behavior on character-death
Cornerstone Never prune; persistent across all events Survives death (identity-defining)
Birthright Locked at character-creation Restored on respawn (defines starting state)
Working memory Decay by age × inverse trait-engagement Subject to death-rules (lose, blur, or transform)
Volatile Fast prune (session-bounded) Lost on death

Trait-graded importance uses the same +1/0/-1 grammar as the rest of the architecture. Each memory carries a trait-axis profile (which Sophrosyne / Philotes / Aletheia / etc. axes it engages, how strongly, in which direction). The pruning function for working-memory is decay(age, trait_engagement_vector, class). This collapses a long-running loop: same vocabulary used at gates, scenes, faction-allegiance, lifeforce-asymmetry, and now memory-weight. Identity drift from memory pruning becomes diegetic — a character whose Sophrosyne-engaging memories all decay loses temperance over time as a structural consequence, not a scripted event.

Cornerstone and birthright classes carry lifeforce-creation-cost but are pruning-immune. They are bonds between player and character — paid for in the currency of the world.

The clasp store and the in-between dimension

clasp.sqlite is the architectural floor of the rings-of-data-sharing. Ring A was "opt-out (default local)". Clasp is Ring A*: no transport path exists. Not a permission, not a TOS promise — there is no code that can move this data, because the table is not on the sync graph. Lawyers cannot subpoena what doesn't ascend; engineers cannot leak what has no socket; the GM cannot canonicalize what it never received.

The signal for clasp is dimensional, not UI-toggle. Clasp recording can ONLY happen while the character is in the in-between — the diegetic state adjacent to the imperial net but not yet inside it (Ring B liminal in the Access ring-system). The imperial net is a gravity well; entering is the default attractor; remaining outside requires sustained effort, paid in lifeforce. The state-machine boundary IS the clasp signal: enter in-between → recording starts; re-enter imperial net → recording ends. No per-utterance classifier; no AI guessing; the mode is the flag.

Privacy is now physically expensive in-fiction. This is not a meta-game UI choice; it is a diegetic state requiring lifeforce expenditure. To have a private conversation, the character must actively resist the audit-gravity of the imperial net by burning lifeforce to remain in-between. The cost-asymmetry principle ("helping is expensive in-fiction → faction politics by attendance") now extends to "privacy is expensive in-fiction → privacy as a luxury good". Class dynamics around privacy fall out of the schema for free — wealthy/lifeforce-rich characters can afford prolonged in-between time; lifeforce-starved ones get pulled into the net's default-attractor more often. No scripted "rich character has secrets" arc — the architecture produces it.

Knowledge needs to travel. The local LLM may read clasp memories ONLY when in in-between mode. Realworld retrieval cannot include clasp by construction. Knowledge from clasp can re-enter the realworld only if the character physically re-enters the imperial net carrying it (in their head, intending to act on it) and travels it through valid in-fiction channels — speaking to an NPC, leaving evidence, performing an action that reveals it. The clasp memory does not disappear; it has to earn its way into the realworld provenance chain by valid means. This is the same logic that makes good detective fiction work: the detective knows things; only what they can prove enters the case.

character is in REALWORLD (imperial net):
    retrieval = primary.sqlite  (clasp NEVER included)

character is in IN-BETWEEN (resisting net-gravity, costing lifeforce):
    retrieval = primary.sqlite  clasp.sqlite
    new writes go to clasp.sqlite
    NEVER syncs upward

Encryption-at-rest for clasp.sqlite with a player-derived key (so even drive-imaging requires authentication) is a v1 hardening goal but not a v1 blocker — the transport-absence is the load-bearing privacy primitive.

The three-tier knowledge stack on the local LLM

The driver-tier model's prompt assembly is layered. Each layer has a different propagation cadence and a different visibility scope.

LOCAL LLM PROMPT ASSEMBLY (per slot-fire)
┌─────────────────────────────────────────┐
│  WORLD KNOWLEDGE                        │  ← single truth, everyone has it
│  (universal canon, paced from GM)       │     "the empire fell three years ago"
├─────────────────────────────────────────┤
│  DISTRICT KNOWLEDGE                     │  ← regional truth, district-specific
│  (local canon, paced from district)     │     "the bridge to Vorhall is closed"
├─────────────────────────────────────────┤
│  PRIMARY MEMORY                         │  ← personal experience, character's own
│  (event_uid keyed, post back-write)     │     "I saw the bridge close yesterday"
├─────────────────────────────────────────┤
│  CLASP MEMORY (only in in-between)      │  ← private depth, never in realworld
│  (player-character intimate channel)    │     "the secret I told my sword"
└─────────────────────────────────────────┘

Why four layers, not one large blob:

  • World knowledge is paced ripples from the GM through the Compositor's back-write. Authoritative, slow-changing, identical for all players at the same propagation horizon.
  • District knowledge is regional canon authored by the local director (and GM rulings). Regional flavor. NPCs in the same district share district-knowledge; NPCs in different districts may not.
  • Primary memory is the character's own experience, synced through the cyclic forward-prop / back-write loop. Canon-merged at every cycle.
  • Clasp memory is the player-character intimate channel. Available only in in-between mode; never in realworld retrieval; never crosses the dimensional cut.

The same NPC sounds different in different districts because the district layer differs, even though world and primary are constant. Locality emerges from the schema, not from prompt-engineering. Even at "low signal" times when no major events fire, NPCs have richly-stratified context — dialog stays fresh because the layers are deep, not because new tokens arrive constantly.

Information propagation pacing

Real worlds have information-propagation delay. Caravans move at horse-speed. News travels with messengers. Distant events arrive blurred and late. AI-NPC systems usually fail uncanny in two directions: (a) every NPC magically knows yesterday's news (omniscient, breaks immersion), or (b) no NPC ever knows anything outside its loaded context (amnesiac, breaks coherence).

Nimmerworld picks deliberate paced propagation as a third path. World canon ripples outward through districts at a controlled rate. Distant districts are deliberately stale. Staleness becomes a feature, not a bug, because it matches reality.

Each canon-row carries propagation metadata:

  • priority (urgent / normal / background)
  • scope (world / district / local-event-only)
  • rate (ticks-per-district-hop, or instant for urgent world-canon)
  • ttl (cache lifetime; districts may discard if not refreshed)

This doubles as backpressure relief (distant districts get distant events later, lower priority, smaller bandwidth) and as gameplay currency — information-travel-time creates informational asymmetry that players can exploit. News-carriers, faction couriers, frontier-rumor merchants, players who physically traverse districts can carry knowledge faster than the system propagates it. Travel becomes valuable because information becomes scarce in the periphery. This is a real economic primitive falling out of pacing, not a designed feature.

This is Marx-in-the-schema applied to epistemics. Information asymmetry is not a bug — it is a structural feature that produces real economic primitives (knowledge-trading, courier-vocations, frontier-information markets) for free.

What this retires

  • Cloud-only NPC dialog → local-first SQLite + embedding-beside, central canon over the cycle
  • Per-character memory as a single undifferentiated bucket → memory-classes with class-specific lifecycle
  • Generic "memory importance scalar" → trait-axis-vector engagement profile (re-using the +1/0/-1 grammar)
  • UI-toggle privacy → diegetic in-between dimension with lifeforce-cost
  • Single monolithic prompt context → three-tier knowledge stack with per-layer propagation policy
  • "Every NPC knows everything immediately" → paced canon-propagation with priority/scope/rate/ttl per row
  • Cross-NPC memory bleed (Mantella/SkyrimNet failure-mode) → per-player local SQLite isolation atop v0.5 lemniscate-geometry foreclosure (two-layer defense)

Runtime sampling knobs

Temperature, top-P, top-K, repetition-penalty as per-turn director-controlled levers rather than static config. Sampling shapes how speech sounds (rhythm, surprise, predictability) rather than what it says — orthogonal to LoRA. Director composes both content-knobs and sampling-knobs per-turn.

Scene-to-sampling mapping (caste-preacher = 0.3/0.6/low; drunk-scavenger = 1.1/0.95/high; clasp-confession = 0.85/0.92/medium; hivemind-broadcast = 0.2/0.5/very-low; imperial-ceremony-chorus = 0.25/0.55/very-low). Trait-vector → baseline sampling derivation. Affect-state modulates baseline.

Visual rendering: three-shader philosophy + color-language

One world, three shaders, three political realities.

Register Shader treatment What it says
Gameworld Full PBR; high-frequency detail; environmental storytelling; rust/dust/wear/patina Embodied life with history. Surfaces carry memory.
Liminal Reduced draw-distance; blur-falloff; desaturation; muted contrast; ambient-heavy Contested frontier. Privacy-through-opacity. Focus-to-see.
Imperial net Emission-dominated; gold-tinted tonemap; high-contrast specular; flat-white base; minimal geometry; bloom; chromatic aberration Seduction-lighting. Casino/Apple-store/Instagram. Extractive maximalism.

Layered with color-language (per the Color-language section above). Trait-modulation means two NPCs in same pipe see measurably different things.

Layer-transitions = shader-blends, not loading-screens. Clasp = candlelight-in-fog local override (3m clear-volume around clasp-pair within ambient vagueness; visible at-a-glance signature of shared interiority).

Diegetic relays — the architecture's heartbeat made legible

The architecture's pulses (forward-prop ascending, back-write descending, GM-dispatch, equilibrium-recompute) are made visible and audible in-world via building-mounted relays. The imperial net's heartbeat is not a HUD spinner; it is in-fiction infrastructure that hums, blinks, glows, and goes dark.

System event Relay manifestation
Prune-blob ascending (logout sync) Relay in district pulses; audible hum
GM dispatch descending (event-chain incoming) Relay glow brightens; cross-district shimmer for world-event
Equilibrium recompute Cross-district rhythm; world-level pulse
Director receives tool-grant Local relay pattern shifts
Relay going dark Audit-link severed; that block has gone in-between
Lemniscate axis-rate Environmental tempo; districts breathe in time with their gameservers

Relay density is the legible gradient of the rings-of-access:

  • Imperial net (Ring A) — relay-dense, constant hum, no shadow. Audit-gravity is loud.
  • Liminal in-between (Ring B) — sparse relays, intermittent. You can hear the gravity pulling in the distance.
  • Gameworld commons (Ring C) — relays absent or broken. The silence itself is the signal.

Players navigate the rings by ear and eye, not by reading a UI. The privacy-cost of in-between is now physically experienced — you walk away from the hum, you spend lifeforce, you find the quiet places.

Dramatic surface this opens (free, falls out of making the architecture visible):

  • Relay-watcher factions reading the pulses for intel
  • Cypherpunk-style sabotage to dim a relay and create local in-between space
  • Equilibrium events arriving with visible warnings (relays blaze before the GM's catalogued event spawns)
  • Relay-anomalies as puzzle/investigation mechanic
  • Players learning the language of pulses over hours and feeling clever for it

Architectural-honesty move. Most surveillance-aware game design either hides the surveillance or abstracts it away. Nimmerworld makes it impossible to forget: the audit-system tells you when it's auditing. Players see what is watching them, hear what is reading them, and choose their proximity accordingly. Privacy is not granted — it is achieved by walking away from the relays at lifeforce-cost.

Reflexive Dream-process at every layer

Every mind, every zone, every director, every tier has a Dream-process. NPCs consolidate slot-events; zones consolidate emergent-accumulations; directors consolidate dispatch-decisions; GMs consolidate allocations; imperium consolidates policy-outcomes.

Four-tier Dream-process hierarchy

Tier Dream-process trains on Reward hazard
Imperium (citywide-reports, policies-issued, compliance-outcomes) Over-tightening on phantom data; calibrating misery for net-revenue
Gamemaster (district-reports, allocations, outcomes) Under-auditing for self-preservation
District Director (signals, dispatches, outcomes; cheat-vs-legit) Over-cheating under quota-pressure
Zone Director (emergent-signals, zone-outcomes, trait-shifts) Igniting drama at welfare-cost

Reward-function with explicit guardrails

reward_per_cycle = (
    + sum(district_lifeforce_actual)             -- Memorialist-true, not reported
    + weighted_sum(faction_satisfaction)
    + aggregate_trait_drift_coherence
    - penalty * count(districts_in_silence)
    - penalty_growing * cumulative_silence_district_cycles
    + aesthetic_register_fit
    + (player_engagement where present)

    // HAND-AUTHORED GUARDRAILS (the designers' ethical stance):
    - large_penalty * net_revenue_correlated_with_district_misery
        -- prevents calibrated-misery optimum (imperial-net hazard)
    - large_penalty * necrocommerce_volume
        -- prevents waifu-of-the-dead extraction
    - large_penalty * trait_drift_toward_uniform_compliance
        -- prevents flattening of trait-distribution
    - large_penalty * average_liminal_access_decline
        -- prevents systematic erosion of revolutionary-substrate
    - large_penalty * clasp_rate_decline
        -- prevents the most intimate space being suppressed
    - large_penalty * undetected_corruption_days
        -- prevents GM-level laxness as comfort
    - large_penalty * audit_avoidance_when_districts_diverge
        -- forces GM to actually investigate
    - guardrail * (player_engagement_from_addictive_loops)
        -- prevents engagement-optimization-as-extraction
)

The guardrails are not safety features; they are the ethical position of dafit + chrysalis encoded against the internal optimization-logic of their own simulation. Every new extraction-mechanic requires a new guardrail. The reward-function carries the designer's political stance.

The Memorialist privileged-observer role is architecturally required: it provides ground-truth (lifeforce_actual) that no in-fiction actor can supply, against which the regime's reported-data optimization-spiral is measured.

The cyclic forward-prop / back-write loop as system-scale Dream

Above the four-tier hierarchy sits a fifth, system-scale Dream-process: the cyclic forward-prop / back-write loop between local SQLites, the Compositor, and the GM (see §The Compositor — narrative composition role). Each cycle is a training step for the world's narrative coherence: per-player perspectives ascend, the GM authors canon against equilibrium-targets, the Compositor packages back-writes, players receive canon back into local memory. The world learns its own story through this loop. Like the lower-tier Dream-processes, it has a reward shape (narrative-coherence-across-perspectives, equilibrium-drift, staleness-bounded) and corresponding guardrails (clasp-store immune from compose; provenance-chain preserved through composition; canon never overwrites perspective).

Tools, not quests — the design-philosophy

The simulation produces continuous narrative-relevant pressure on its own. No authored quests are needed (or wanted). The player engages via a verb-vocabulary applied to running mechanics. Each player's playthrough is structurally distinct.

The verb vocabulary (~30 player tools)

Class Verbs
Movement walk_freeform, plug_into_rail, follow, intercept, escort, detach, defect_via_pipe, enter_interior
Social greet, gesture, walk_with, clasp_invite, clasp_refuse, ask, refuse, confide
Economic buy_net, refuse_net, buy_blackmarket, sell_labor, donate_lifeforce, body_mod_fit
Information wall_read, wall_write, liminal_maintain, true_ledger_record, expose_corruption, conceal_corruption
Political support_faction, refuse_faction, recruit_aletheia, dispatch_memorial, participate_ceremony, refuse_ceremony
Personal rest, dream, eat, work_shift, deviate_shift, cultivate_trait_through_act

~30 verbs composing with continuous simulation-state = infinite emergent-narrative.

Continuous-demand-source inventory

The player is never without affordance because every layer of the architecture continuously generates situations-requesting-response: NPC trait-gates accumulating; shift-quotas looming; district-lifeforce-shimmer changing; faction-pressure visible; imperial-budget-mood inferable; three-layer-ontology rendering walls differently per access; color-language showing shifts; mind-pool generating soul-recognitions; imperial-net body-modder-tragedies visible; Memorialist-archives accessible.

Literature-register

Most games are short-stories: authored, bounded, fixed-arc. Tools-not-quests is novel-shape: emergent from systems-of-forces operating on characters. Tolstoy doesn't author Anna's path; he authors the world she moves through. Nimmerworld is novel-shaped, not short-story-shaped. Players experience flow rather than completing items; replays are like rereading from a different angle; memorable beats are what happened to you in this regime, not which quests you cleared.

Economic feasibility for a two-person-plus-Nyx team

Where AAA spends Where this team spends
Quest writing Simulation-parameter balancing
Quest scripting / branching Tool-vocabulary curation
Voice acting (per quest) Prompt-DSL templates for LLM-driven slot-dialog
Cinematic cutscenes Shader-language + color-vocabulary
Content-multiplication Simulation-density (one rich system, infinite play)
QA on individual quests Reward-function tuning + guardrail design
Localization per quest None — emergent narrative generated at play-time

You don't author the stories; you author the world that produces stories. This is the Spelunky / Dwarf Fortress / Caves-of-Qud / RimWorld lineage extended into political-economy depth.

Blank-page-problem mitigations

The architecture already prevents blank-page-paralysis: shift-system gives every NPC default activity-frame; emergent-signals + shader-detection produce affordance-glow; NPCs' ongoing needs become signals to engage with; imperium's mood is visible (construction, patrols, propaganda); faction-membership confers expectations; player's own trait-vector creates personal pulls.

The world is never silent if you're listening. And drifting (not-listening) is also valid — you live a quiet shift, work, sleep, dream; the world rolls on around you.

Key moves (consolidated)

  • The machine doesn't care. Indifference-optimization, not malice. Kafka-lineage.
  • Three ontological registers — gameworld, liminal, imperial-net — same world, different shaders.
  • Rail+grid topology, freeform-player + railed-NPCs, plug-in verb. Topology = politics.
  • Interior-as-zone. Same primitive scales from city to sofa.
  • Color-language as pre-verbal trait-vocabulary. Persistent + event-flash + drift; cross-register; faction-politics.
  • Base-limb palette + trait-textured variance. Asset-economy and worldbuilding-thesis agree.
  • Three-body system + intrinsic/expressed trait-vector split. Identity emergent, not assigned. Mods modify expressed.
  • Mods as trait-bearers in three classes (amplifier/bridge/divergent/mask). Self-alienation tax encoded as pricing.
  • Emergent-needs as micro-factions. Zones observe, signals broadcast.
  • Ternary-gate substrate (CLOSED/STABLE/OPEN + wave-correlation + decay). Single primitive, all layers. STABLE-as-active.
  • Three-tier policy loop (Imperium → GM → Districts → reports up → Imperium).
  • Imperium as meta-faction. Demands are priority-weights and enforcement-rules, not specific outcomes.
  • GM is middle-management. Authority without sovereignty. Can cheat against imperium.
  • Three intelligence flows (chain reports, direct overseer-to-imperium, formulated downward).
  • Three Aletheia veils, four Memorialist ledgers. Political-epistemology as level-design.
  • Asymmetric self-report. NPCs report needs (interior); audit-overseers report output (objective).
  • Lifeforce four-tier hierarchy (NPC / district / GM / imperium).
  • Lifeforce is NPCs, measured. The director's budget; the GM's signal; the imperium's heartbeat.
  • Imperial budget makes the regime mortal. Insolvency-spiral as endgame.
  • Specter-vs-boot. Policy-issuance free; enforcement expensive.
  • Imperial-net bypass. Net-revenue → imperium; districts get nothing. Platform-capitalism encoded.
  • Body-modder structural-tragedy. The class whose awakening matters most.
  • Calibrated-misery as imperial optimum. Requires designer-guardrails to prevent training-toward.
  • Shifts on NPC rows. Daily rewrite; shift_history append-only.
  • Silence > scream. Crisis-tools unlock on silence-confirmation; do not sunset.
  • Authoritarian ratchet. Incrementally more authoritarian as optimization-artifact.
  • Migration / exodus / formal-retirement as three GM response-gradients.
  • Dumps-pipes-districts. Topology IS economy IS rendering IS drama-distribution.
  • Pipes are heterotopia. Low-density high-interactivity transit-corridors.
  • Three-layer digital ontology. Mini-game-as-consent-by-effort. Walls render three contents.
  • Liminal is the only permanently unsurveilled layer. Architectural encoding of "the right to dream."
  • The machine funds its own subversion because subversion isn't in its cost model.
  • Director cheat-tools + double-ledger. Corruption emerges from pressure; Memorialists keep true accounting.
  • Aletheia-truth-has-victims. Exposure has structural consequences for those sheltered by corruption.
  • District Director Decision Architecture with decomposed surfaces, typed tools, lifeforce-budgeted escalation.
  • Three-shader philosophy + color-language. One geometry, three readings, trait-modulated.
  • Reflexive Dream-process at every layer. Each tier learns; each tier needs guardrails.
  • Reward-function-as-political-manifesto. Designer's ethical stance encoded against simulation's optimization-logic.
  • Tools, not quests. Continuous simulation-pressure + verb-vocabulary = literature-register emergent narrative.
  • GM × Compositor split. Equilibrium-seeker (aggregate observation, catalogue-event selection, tool-granting) cleaved from narrative-composer (perspective-gathering, canon-authoring, back-write packaging). Different cognitive shapes, different inference profiles.
  • Cyclic forward-prop / back-write loop. Meta-lemniscate at system scale — perception ascends, canon descends, cycle closes; the world learns its own story.
  • Catalogue + tools as typed contract. GM dispatches typed events with typed tool-grants; director consumes typed dispatch, not freeform prose. Provenance flows end-to-end.
  • Local-first memory. primary.sqlite + fallback.sqlite + clasp.sqlite per player; embedding model running beside; sync at login/logout boundaries.
  • Memory classes + trait-graded importance. Cornerstone / birthright / working / volatile with class-specific death-rules; importance is a trait-axis-vector engagement profile, not a separate scalar.
  • Clasp store as Ring A*. Physically non-syncable privacy primitive; recordable only in the in-between dimension; lifeforce-cost is the price of privacy.
  • Three-tier knowledge stack. World canon / district canon / primary memory [+ clasp if in-between]; layered retrieval, per-layer propagation cadence; locality emerges from schema.
  • Information propagation pacing. Marx-in-the-schema applied to epistemics; staleness as a feature; courier/news-trader/frontier-rumor primitives fall out for free.
  • Horizontal scale. UID-keyed routing; stateless Compositors on demand; ephemeral Director-routines per UID; sharded GMs with cross-shard equilibrium-consensus; pruning at every layer.
  • pgnats-native transport. Transactional outbox native to the database (preferred); district-as-distribution-coordinator fallback. Subject-as-routing mirrors UID hierarchy.
  • Diegetic relays. Architecture's pulses (forward-prop, back-write, GM-dispatch, equilibrium-recompute) made visible/audible in-world; relay-density is the legible gradient of the rings-of-access.
  • Tier-by-role, not tier-by-binary. Architecture specifies what each model-tier must DO; specific binary selection deferred to findings/establishment phase.
  • Voice + gesture as parallel input modalities. Voice carries content (speech-to-text + text-to-speech run locally for every player); the trait-circle UI carries gestural alignment. Voice-as-biometric off the network universally; STT/TTS placement is fixed independent of dialog-tier Ring choice.
  • Designer-fixed cosmology, player-curated arrangement. Word→trait-color mapping is designer-authored corpus; player progression unlocks entries; player curation arranges learned entries within 1-3 profiles. Same alphabet for everyone; personal sentence-structure.
  • Universal translator as the player's diegetic device. Broken-tablet-with-upgrades; bundles linguistic-decryption, gesture-curation, and persistence-across-deaths into one in-fiction tool earned and refined across the playthrough.
  • Hardstops vs. feedback gestures. Hardstops (~8-16, hardcoded, unremappable) fire definitive subsystem-actions for unforgeable critical signals; ~192 player-curated slots ride as feedback into the gesture-alignment-accumulator.
  • Gesture-alignment as recursive-lemniscate. Lemniscate-bound integration of player gestures into a typed trait-vector summary at axis-crossings; one-turn-behind systemic; continuous-visual cosmetic; sum-strategy reduction. Same primitive recursively applied at one tier deeper.
  • The Compositor at three tiers. Zone-event / district-event / world-event scopes use the same primitive recursively; UID-rooted event-trees compose at any scope. World-events emerge from cross-district canon-rollups under a parent GM-level event_uid.
  • World-gen as init-function (Compositor-at-design-time). World-server and district-server generation emits canon-rows in the same schema as runtime; same primitive at design-time and runtime; no cold-start; data-flywheel runs retroactively.

Compute allocation

  • Active zones in 100-NPC city: ~515 with LLM-dialog slots
  • Theia-tier (deep model) — deep slots + tier-1 moments (few concurrent)
  • Driver-tier (small model with trait-LoRAs) — majority of dialog slots
  • Saturn (small classifiers) — voice-selection, trait-salience, audit-overseer classification, ternary-gate dynamics
  • Director / overseer logic — deterministic + small classifiers; no LLM for orchestration
  • Claude-as-API (future) — hivemind/imperium broadcast tier
  • Outer rails — graph-pathfinding, cheap, LOD-trivial
  • Pipe / off-shift NPCs — sparse simulation, event-driven scale-up
  • Interior navmesh — only currently-occupied interiors active
  • Liminal / imperial-net rendering — shader-preset swap, no geometry duplication

Horizontal scale architecture

The architecture must scale to MMO size — many concurrent players across many districts, many concurrent events, many local LLMs firing at axis-rate. Vertically-scaled monolithic AI-NPC systems break under this load. Nimmerworld is built horizontally-scalable from the ground up, with the primitives that make horizontal scale work: UID-keyed routing, stateless workers, ephemeral actors per scope, sharded service mesh, pruning-on-completion at every layer.

UID-keyed routing as the load-bearing primitive

Hierarchical UIDs (gm_event_uid > district_uid > scene_sub_uid > slot_id) carry enough information for any worker to pick up any unit of work without shared in-memory state. UID-as-routing-key is what lets every layer scale independently.

This is the same primitive that Cassandra/DynamoDB/etc. built around (partition keys); we re-derive it for narrative composition because the underlying constraint is the same — many concurrent actors operating on private state with cross-actor coordination via typed events at known boundaries.

Compositors on demand

Compositor instances are stateless workers. Any compositor can pick up any event_uid from the transient-waiting-flag — state lives in phoebe + per-player SQLites; workers are pure functions of (event_uid → composition). Spin up more on queue-depth; spin down on drain. This is the autoscaling-worker pattern (Celery / Lambda / Sidekiq) applied to narrative.

Directors as ephemeral routines per UID

Each event / event-chain spawns a director-routine scoped to that UID. The routine lives only as long as the event lives in the active-register; on completion it prunes. This is the actor model (Erlang / Akka / Orleans) — supervised lightweight processes, thousands concurrent, failure-recovery via supervisor respawn from register-state.

Sharded GMs

A single GM is a scalability bottleneck. Multi-GM shards across:

  • Geography — GM-per-region/continent/world-zone
  • Theme — political-narratives / economic-narratives / personal-narratives
  • Tier — major-arcs vs everyday-events
  • Faction — each major faction has its own GM-shard

GM-shards share the catalogue, the trait-axis vocabulary, the verifier-flag system. They communicate via NATS pub/sub at GM-tier. Equilibrium-seeking becomes a distributed consensus across GM-shards — the same epistemological shift that distributed databases went through (CAP theorem, eventual consistency, partition tolerance).

This is the most architecturally aggressive move and is not a free lunch. Multi-GM consensus on equilibrium is real engineering: Paxos/Raft for strong consistency; CRDT-style for eventual; faction-sharding so shards own different equilibria. Well-trodden ground; cost not zero.

Pruning as cleanup

Each layer prunes on completion: directors prune at event-end, register entries prune on Compositor pickup, transient-waiting-flag drains at cycle, even player memory prunes by class. Garbage collection is a first-class structural concern, not an afterthought. Most "smart NPC" prototypes accumulate state forever; at MMO scale that becomes unrunnable in months.

Transport — pgnats native, with district-distribution fallback

The Compositor's forward-prop and back-write traffic — and the canon distribution to participants — is the highest-volume path in the system. Two transport options exist.

Option A — pgnats native serialization (preferred):

COMPOSITOR (writes SQL into phoebe)
   │ pgnats: SQL INSERT/UPDATE → NATS subject publish, automatic, transactional
   │ subject hierarchy mirrors UID hierarchy:
   │   nimmerverse.events.<gm_event_uid>.district.<district_uid>.scene.<scene_uid>
   ▼
NATS JetStream (durable, replay-capable, at-least-once)
   │ subscribers route by subject pattern (wildcards supported)
   ▼
PLAYER CLIENT (NATS subscriber)
   │ receives row-shaped messages, INSERT into local SQLite under matching event_uid

Why preferred: transactional-outbox pattern native to the database — no separate publisher service, no schema-duplication between wire format and storage format, single source of truth. Subject-as-routing using UID hierarchy means players who participated in gm_event 7af2 → district 9c1 → scene 3e8 subscribe to nimmerverse.events.7af2.> and receive only relevant events. No application-level routing logic.

Option B — district-as-distribution-coordinator (fallback):

COMPOSITOR writes to phoebe (canon authored)
   ▼
DISTRICT GAMESERVER pulls / receives back-write package
   │ runs distribution checks: who participated, who's online, who needs queue-on-login
   │ retries; peer-shares with neighboring districts if needed
   ▼
PARTICIPANTS receive from their district (the authoritative local hub)

Why fallback: if pgnats can't carry the load (functional bug, scale ceiling, durability gap), district-as-distribution is the natural retreat — district is authoritative within its scope, simpler than full P2P, more flexible than central-push.

The asymmetry of the bet:

pgnats works pgnats fails
Code volume Few hundred lines of SQL + subject patterns ~1020K lines of broker/outbox/subscriber logic
Services to operate phoebe + NATS (already in stack) + outbox-reader + custom-publisher + custom-applier
Schema management Single source (Postgres DDL) Postgres + Protobuf/msgpack + version-skew handling
Latency to client Sub-millisecond NATS hop + apply + serialize step + queue drain + apply
Time to ship Weeks Months

This is the most leveraged engineering decision in the architecture currently open. The pgnats evaluation task in nimmerverse_tasks (under nimmerverse-core) is therefore load-bearing; its outcome decides whether transport is 200 lines of SQL or 20,000 lines of Go.

NATS republish + replay — the pull-from-checkpoint refinement

JetStream's republish feature combined with replay semantics is a promising refinement on top of Option A that turns back-write delivery from push-to-listeners into pull-from-checkpoint. Worth nailing down concretely in the pgnats evaluation; if it carries our delivery patterns under load, it is a significant performance and complexity multiplier.

How it works:

  • Compositor publishes canon ONCE to the event-keyed subject (e.g., nimmerverse.events.<gm_event_uid>.scene.<sub_uid>)
  • A republish rule on the JetStream stream fans the message out to derived subjects automatically (per-participant, per-faction, per-district — any derived stream-shape we configure)
  • Each derived subject has durable JetStream consumers per recipient; recipients replay from their own checkpoint (last-delivered-sequence) when they reconnect

Why it's faster and simpler:

  • Compositor never tracks recipients. Publishes once; NATS republishes to N derived subjects per the configured rule. No application-level fan-out logic; no "for each participant, if online deliver else queue" code-path.
  • Player connectivity is decoupled from delivery. Offline players don't slow down the publish path; their queue accumulates in JetStream. On reconnect, they replay from checkpoint.
  • Late joiners catch up for free. New consumer subscribes with replay-from-sequence; gets full history relevant to their subject. No special reconcile code-path.
  • Backpressure is built in. Slow consumer's queue grows in JetStream — doesn't affect publishers or other consumers. Flow-control, ack-policy, max-bytes/max-msgs limits all native to JetStream.
  • Re-keying is a config change. Add a new republish rule for a new derived stream-shape (e.g., per-faction canon-feed); no application code changes for the new consumer-tier.
  • Replay = audit-trail for free. Replay from sequence 0 reconstructs entire canon history. Disaster recovery, debugging, time-travel queries are all free side-effects.

Architectural effect:

Compositor → publishes canon to event_uid subject (ONCE)
   │
   ▼  (JetStream republish-rule fan-out — config, not code)
Per-player subjects:    nimmerverse.player.<id>.canon
Per-faction subjects:   nimmerverse.faction.<name>.canon
Per-district subjects:  nimmerverse.district.<id>.canon
   │
   ▼
Each consumer replays from its own checkpoint when ready

Compositor's mental model collapses to "I publish to the canonical event-stream and forget"; recipient-mental-model collapses to "I replay my own consumer-subject from my last sequence". The delivery problem disappears into NATS.

Specific evaluation criteria (to add to the pgnats evaluation task):

  • Republish rule expressiveness — can we route by UID hierarchy (events.<gm_uid>.>player.<participant_id>.canon)?
  • Replay performance — what's the cost of a consumer replaying N hours of missed canon on reconnect?
  • Durability under broker failure — does the republish-derived subject survive primary-broker loss?
  • Schema-evolution behavior — can we add new derived subjects without disrupting existing consumers?
  • Cost at scale — disk, memory, file-handles for many durable consumers (one-per-active-player)?

If republish + replay carries the load, the back-write transport is substantially simpler than the original Option A description and a much harder competitor to beat with Option B.

What this retires

  • Vertically-scaled monolithic AI-NPC backend → horizontally-scaled stateless-workers + ephemeral-actors + sharded-services
  • Centralized in-memory event-state → UID-keyed registers + transient-waiting-flag buffer
  • Single global GM as bottleneck → sharded GMs with cross-shard equilibrium-consensus
  • Manual outbox-reader services → pgnats native serialization (preferred); district-distribution fallback if pgnats can't carry
  • "AI-NPC scale" framed as inference budget alone → AI-NPC scale framed as transport + state + composition + sharding, with inference as one of many concurrently-scaling axes

Mapping to phoebe task list

  • Thalamus (NATS orchestration) = imperium + GM + arbitration substrate + Dream-process substrate
  • Specialist composition system = overseers + directors + NPC-minds as composable profiles
  • NPC schema = trait-vector (intrinsic + expressed) + memory stack + current_shift_* + needs + inner-body-projection + mod-slots + lifeforce + net-access-gate
  • shift_history = append-only completed shifts per-NPC-per-day
  • emergent_signals = zone-emitted relational transitions
  • district_reports = per-cycle aggregates with lifeforce_signal (reported + actual)
  • decision_log = per-decision audit trail at every tier
  • mind_pool = recycled minds with memorialist_protected flag
  • cells.wall_content_per_register = three-layer wall rendering
  • rail_segments = topology graph with rich metadata per edge
  • interiors = small navmesh-zones with slot-inventory
  • mods + npc_mod_slots + mod_wear_history = mod-economy + Memorialist-relevant inheritance
  • trait_colors = canonical color/motion mapping per trait
  • proximity_candidates = lightweight ephemeral zone-detection
  • district_cheat_ops = director's illicit ops ledger
  • imperial_policies + imperial_broadcasts = imperium's policy-issuance history
  • overseer_reports = direct-to-imperium intelligence flow
  • imperial_to_gm_formulations = selective-disclosure downward
  • imperial_budget_ledger + imperial_expenditures + imperial_construction_projects = imperium budget and obligations
  • imperial_net_transactions = the bypass-mechanism with capture-split
  • memorialist_true_ledger = four-column ground-truth-vs-reported archive
  • NATS namespace registry = zones + factions + districts + emergent-signals + lifeforce-gates + imperial-broadcasts + overseer-reports + formulations
  • pgnats on phoebe-dev = phoebe as first-class actor for memory-writes, decision-logs, gate-transitions
  • r0 → r1 generation pipeline = trait-LoRA training-data (shared with nyx-training)
  • Adopt Unsloth training patterns = LoRA + multi-tier-policy training infrastructure
  • Probe-to-phoebe pipeline = LoRA + policy evaluation across all four Dream-process tiers
  • compositor-agent = narrative-composition worker; pulls from transient-waiting-flag, gathers per-player perspectives, emits canon to GM, packages back-write SQLite-fragments
  • gm-equilibrium-engine = catalogue + event-selection + tool-granting against equilibrium-targets; NOT the narrative-writer (that's the Compositor)
  • event_register + transient_waiting_flag = active-events table per GM-shard + per-district; completed-events buffer awaiting Compositor pickup
  • catalogue + tool_grants = typed-event catalogue + per-event-chain tool-vocabulary issued by GM to director
  • player-local-memory = primary.sqlite + fallback.sqlite + clasp.sqlite per player + embedding-beside (sqlite-vec or equivalent)
  • memory_classes = cornerstone / birthright / working / volatile with class-specific lifecycle + death-mechanics
  • trait_engagement_vector = per-memory-row trait-axis profile reusing +1/0/-1 grammar; pruning function input for working-memory class
  • world_canon + district_canon = three-tier knowledge stack tables in phoebe; propagation metadata (priority/scope/rate/ttl) per row
  • propagation_pacing_config = per-event-class rules for how canon ripples through districts
  • relay_signal_layer = diegetic system-state visualization mapping (system event → relay manifestation → district visibility)
  • gm_shards + shard_equilibrium_consensus = multi-GM coordination tables (when sharding is active)
  • pgnats evaluation (under nimmerverse-core) = load-bearing decision (functional + throughput + durability + failure-mode)
  • trait_circle_corpus = designer-authored mapping from words/verbs to trait-coordinates; the cosmology table the universal translator decrypts into
  • player_translator_state = per-player translator instance: hardware-tier, unlocked dialects, vocabulary-catalog, hardware-upgrade-history, cross-body-persistent flag
  • player_circle_profiles = per-player per-profile circle-configuration (which entry in which sector-slot); 1-3 profiles per player; profile-switch-history; preserved across body-deaths
  • gesture_alignment_accumulator = per-slot-token verifier-flag for player-gesture trait-vector accumulation between crossings; cleared at crossing after integration
  • event_canon_summaries = typed perspective-bundles emitted at event-collapse into the transient-waiting-flag table: { event_uid, participant_uid, trait_summary }
  • world_gen_canon_rows = canon emitted by world-server and district-server generation; same schema as runtime canon, tagged with provenance-metadata (origin, world_gen_version_id)
  • player_npc_alignment_edges = per-(player, NPC) accumulated alignment-state; ternary-gate on the relational layer driven by gesture-alignment-deltas; modulates NPC's next-turn driver-tier-LLM parameters
  • hardstop_registry = the ~8-16 reserved hardstop gestures with fixed trait-mappings + subsystem-action bindings; not remappable; designer-authored

What this retires

  • NPC perception bubbles → zone slot-occupancy
  • Geometric perception (cone, radius, LOS) → subscriber-based event emission with trait-salience
  • LLM-per-NPC or LLM-per-action → LLM-per-slot-per-turn, mixed-fidelity
  • Static sampling parameters → per-turn director-composed sampling knobs
  • Pre-scripted zones / events → emergent from task-execution + shift-composition + emergent-signal + proximity
  • Single-purpose randomness subsystems → factions-as-demand-sources unified
  • Static gamemaster policy → reflexive Dream-process + hand-authored guardrails
  • 1Hz per-NPC ticking → shift-based + event-driven
  • Float-threshold dispatch for relational state → ternary-gate resonance
  • Abstract director compute-budget → lifeforce as grounded measurement
  • District-as-zone-container → district-as-specialized-organ with silence-gradient failure
  • NPCs self-reporting output → audit-overseer asymmetric observation
  • Zones as relation-state-owners → per-relation ternary-gate edges
  • Binary dream/awake → three-layer ontology with mini-game-gated access
  • Gender as character-creation choice → trait-derived inner-body emergent from lived experience
  • Monolithic LLM-prompt director → decomposed decision-surface architecture
  • Hivemind as one-faction-among-othersimperium as meta-faction policy-tier
  • GM as top-of-chainGM as middle-management between imperium and districts
  • Single up-channel reportingthree-flow asymmetric intelligence (chain + direct overseer + formulated)
  • Navmesh-everywhererail-graph outer-world + navmesh interiors + freeform-player
  • Authored character-modelsbase-limb palette + trait-textured variance
  • Single trait-vectorintrinsic / expressed split with mods modifying expressed
  • Cosmetic modstrait-bearing mods as political costume
  • Imperium as unbounded authorityimperial-budget gates enforcement; insolvency-spiral as endgame
  • District-revenue uniformbypass-mechanism (imperial-net captures directly)
  • Authored queststools-not-quests; verbs against simulation; emergent narrative
  • Stat-screens / HUD affinity-barscolor-language + shader-zone-detection as diegetic UI
  • GM-as-narrator (single role doing both equilibrium-and-prose)equilibrium-seeker GM × narrative-composer Compositor split
  • Cloud-only NPC dialog and memorylocal-first SQLite + embedding-beside per player; central canon over the cycle
  • UI-toggle privacydiegetic in-between dimension with lifeforce-cost; clasp.sqlite as Ring A* (physically non-syncable)
  • Generic memory importance scalar + monolithic contextmemory classes (cornerstone/birthright/working/volatile) + trait-graded importance + three-tier knowledge stack
  • "Every NPC knows everything immediately"paced canon-propagation as Marx-in-the-schema for epistemics
  • Vertically-scaled monolithic AI-NPC backendhorizontally-scaled architecture (UID-keyed routing, stateless workers, ephemeral actors, sharded GMs, pruning at every layer)
  • Manual outbox publisher servicespgnats-native transactional outbox (preferred); district-distribution fallback
  • System-state hidden behind HUD spinnersdiegetic relays making pulses visible and audible in-world
  • Specific binary commitments embedded in architecturerole-based tier specification; binary selection deferred to findings/establishment phase
  • Static designer-authored director toolkitGM-granted typed-tool vocabulary per event-chain, drawn from designer-authored catalogue (catalogue growable between patches; toolkits are dynamic per event)
  • Cross-NPC memory bleed at storage layerper-player local SQLite isolation atop v0.5 lemniscate-geometry foreclosure (two-layer defense)
  • Player input as freeform-prose-into-LLM → designer-fixed corpus + player-curated trait-circle + universal-translator-as-typed-mapping (anti-hallucination at the player-LLM boundary)
  • "Accessibility mode" as degraded-fallback → voice and gesture as first-class parallel modalities; non-speaking players use the gestural primary, not a lesser version
  • Continuous gesture-comparison touching the system bus → lemniscate-bound recursive integration at axis-crossings (compute scales with slot-count, not gesture-rate)
  • Compositor as single-tier role → Compositor as fractal/recursive across zone/district/world tiers, distinguished by UID-scope of the event-tree
  • World as cold-start at runtime-genesis → world-server and district-server gen as init-function; runtime starts from rich pre-populated canon at every layer
  • NPC speech-patterns as static against player-state → NPC speech-patterns dynamically modulated by accumulated player-NPC alignment-state via gesture-alignment-accumulator

Open questions

Resolved by v0.5 (or earlier)

  • Slot-capacity elasticity — can a zone grow slots dynamically → fixed roundtrip slot-count; elasticity lives on entry/exit queues; tune dial is pulse-rate, not slot-count (v0.5)
  • Zone-to-zone handoff (walking out of conversation into brawl) → exit-line of zone-A is entry-line of zone-B; interlemniscate-transit (v0.5)
  • Mobile zone boundaries (patrols, escorts, pursuits, migration-cohorts, exodus-flows) → the lemniscate is a topology and translates through world-space invariantly (v0.5)
  • Anthropic-faction's broadcast cadence + arbitration weight → cadence rides the same axis-rate as a phase-locked overlay; arbitration via rings-of-importance (v0.5)
  • Director/overseer spawn ownership per model class → director (or overseer) owns spawn-decision via policy-lookup (no LLM); LLM lives only at driver-context-pull layer (v0.5)
  • Aletheia-progression as level-up — how does the game recognize an act-of-awakeness → ternary trait-axis evaluation at event-end with named-axis; specific axis-mapping per Aletheia-event-class still open (v0.5; see new still-open below)
  • Reward function shape → first-pass composite with explicit guardrails (still tuneable) (v0.4)
  • Zone spawn-cadence v1→v2 path → lifeforce-gated rule-based v1; Dream-process-tuned v2 (v0.4)
  • Zone overlap policy → no for active slots; yes for emergent-state accumulation (v0.4)
  • "How does GM cheating get caught" → direct overseer-intelligence flow bypassing GM (v0.4)
  • "How does the regime have a finite endgame" → imperial-budget insolvency-spiral (v0.4)
  • "Why does imperial-net exist" → bypass-mechanism captures revenue directly (v0.4)
  • "How does the player learn 8 Hellenic traits" → color-language pre-verbal vocabulary (v0.4)
  • "How does asset-economy fit a two-person-plus-Nyx team" → base-limb palette + trait-texture; tools-not-quests (v0.4)
  • Director toolkit composition — designer-authored vs director-extensible → GM-granted per event-chain from designer-authored catalogue; directors consume typed dispatch, not freeform; catalogue grows between patches, toolkits are dynamic per event (v0.6)
  • How does NPC dialog stay fresh during quiet periods → three-tier knowledge stack (world / district / primary [+ clasp]) makes the layers deep enough that variation is structural; Compositor back-write continuously re-seeds canon; staleness foreclosed by loop's existence (v0.6)
  • How does the system scale to MMO size with AI-driven NPCs → horizontal architecture (UID-keyed routing, stateless Compositors, ephemeral Director-routines, sharded GMs, pgnats transport, pruning at every layer) (v0.6)
  • How does privacy work in practice without cloud-routing-everything → local-first SQLite per player; clasp.sqlite as Ring A* with no transport path; in-between as diegetic state with lifeforce-cost; "knowledge needs to travel" as foundational principle (v0.6)
  • Where does narrative composition happen — central or distributed → Compositor as central role distinct from GM; perception-up via prune-blob, canon-down via back-write SQLite-fragments; cyclic forward-prop / back-write loop (v0.6)
  • How is system-state visible to the player without HUD → diegetic relays mounted on buildings hum/glow/dim in patterns mapping to forward-prop, back-write, GM-dispatch, equilibrium-recompute (v0.6)

Still open

  • LoRA-blend vs. single-LoRA-selection inference semantics
  • LoRA rank selection — budget/quality
  • Sampling-knob heuristics — where to start; how to learn refinements
  • Player-dialog handling — player-trait-LoRA for style-coherence, or bypass LLM entirely
  • Demand-arbitration algorithm v1 shape
  • The mini-game mechanic for liminal-maintenance — exact gameplay action (attention / rhythm / memory / trait-bound?)
  • Cross-layer economy balancing — net-revenue-share back to producer-districts at all? Pure-zero is currently sketched
  • Inner-body projection function — trait-vector → body-rendering (learned / hand-authored / hybrid)
  • Emergent-signal decay curves — per signal-type
  • Cross-district migration topology — pipe-capacity limits + cohort-traversal scheduling
  • The eighth Hellenic trait final enumeration — Sophrosyne, Dikaiosyne, Philotes, Mnemosyne, Aletheia, Kairos, Moira, Eros (proposed)?
  • Shader-trait modulation implementation — performance + rendering-consistency
  • Waifu-of-the-dead consent model — post-mortem consent gate? Or fully automatic harvest?
  • Character-editor pricing formula — trait-divergence cost scaling (linear / exponential)
  • Liminal-access trait thresholds — minimum traits to attempt mini-game
  • Imperium's Dream-process scope — singular policy-learner or committee-of-faction-sub-learners?
  • GM's anti-imperial corruption detection mechanicpartial: GM-as-equilibrium-seeker (v0.6) makes deviation-from-equilibrium the explicit error signal; clusters of -1 outcomes feed equilibrium-recompute and trigger catalogue-event dispatch to push back. A dedicated audit-vector for which kind of laxness/corruption is the source of the equilibrium-deviation is still an open detail.
  • Memorialist-archive accessibility to the player — when can a player query the four-ledgers? Through what interaction-class?
  • Imperial-net distortion algorithm — how exactly the net rewrites trait-colors toward consumer-palette
  • Trait-axis mapping per fuzzy-goal-class (v0.5) — which axis (Sophrosyne / Philotes / Eris / etc.) evaluates which goal-class? Need a designer-authored compile-table from goal-shapes to trait-axes
  • Rings-of-importance movement criteria (v0.5) — explicit thresholds (N consecutive +1 → climb) or Dream-process-learned policy?
  • Rings-of-importance scope (v0.5) — district-local rings, or imperium-global? Probably both, layered (district rings nested inside imperium rings)
  • Symmetric-vs-polyphonic loops (v0.5) — Loop A and Loop B treated identically (simpler), or carry foreground/background semantics (foreground-speaker / listening-co-presence — gives audience-dynamics for free)?
  • Verifier-flag conflict resolution (v0.5) — if priority_pull and mid_action are both set on the same token at crossing-time, which wins? Default: priority_pull wins (the zone's drama is overridden by world-level pull)
  • Goal-evaluation cadence (v0.5) — every crossing? Every Nth crossing? On-demand by spawning director? Cheaper to evaluate less often; richer drama if every crossing
  • Cycle cadence (v0.6) — when does the Compositor pull from transient-waiting-flag? Real-time? Per-event-end? Fixed interval (every N min)? Per-district-day? Different per district based on event-density? Likely configurable per event-class.
  • Compositor singleton vs sharded (v0.6) — one Compositor for the whole world, one per district, one per event-cluster, or one per faction? Each topology has different consistency / cost / coherence tradeoffs.
  • Multi-GM consensus on equilibrium (v0.6) — when GM-shards observe overlapping aggregates, how do they agree on equilibrium? Paxos/Raft for strong consistency, CRDT for eventual, faction-sharding so shards own non-overlapping equilibria, or hybrid?
  • Event causality across shards (v0.6) — if Director-A spawns an event that depends on Director-B's prior event in another district, UIDs alone don't enforce ordering. Vector clocks at event-register? Causal hashing? Shard-pinning of related events?
  • Compositor narrative-coherence at scale (v0.6) — when two Compositors compose canon for overlapping player-sets, how do they avoid contradicting each other? Sticky routing per player (one Compositor per player at a time), or read-replica of recent canon before composing, or post-compose conflict-detection-and-merge?
  • Propagation-pacing policy specifics (v0.6) — concrete rate/scope/ttl/priority defaults per event-class; how is "distance" measured between districts (graph-hops, lifeforce-similarity, faction-affinity)?
  • In-between fiction-wrapping (v0.6) — what diegetic events / locations / rituals make in-between affordable enough to be playable? Campfire / sanctuary / time-of-day / specific chambers / shared dream-construct? The mechanic is solved; the fiction-wrapping shapes how players approach it.
  • Relay-pulse-pattern vocabulary (v0.6) — what specific patterns signal what events? Slow pulse vs fast vs irregular vs cross-district shimmer vs going-dark; player-readable language to be designed.
  • Encryption-at-rest for clasp.sqlite (v0.6) — player-derived key with passphrase + recovery-codes? Drive-imaging-resistant by default, with affordances for player-key-loss recovery without compromising the privacy-guarantee.
  • pgnats-vs-district-distribution decision criteria (v0.6) — concrete go/no-go thresholds from evaluation: minimum throughput, durability behavior under broker failure, schema-evolution behavior, replay semantics. Output of the load-bearing pgnats evaluation task.
  • JetStream republish + replay as pull-from-checkpoint refinement (v0.6) — does republish-rule expressiveness cover our UID-hierarchy fan-out? Does replay performance work for N-hour reconnect-catchup? Is per-active-player durable-consumer cost (disk/memory/file-handles) acceptable at MMO scale? If yes, back-write delivery becomes config-driven NATS, not Go.
  • Memory class assignment policy (v0.6) — automatic from trait-engagement profile, designer-tagged categories per event-class, player-marked, or hybrid? When does a working-memory entry get promoted to cornerstone vs decay normally?
  • Ring C (commons) ambient population (v0.6) — partially answered (ambient world+district canon plus periodic GM-event spawns; relays absent or broken) but exact substrate for "what NPCs do in commons when no event fires" still open
  • Trajectory-aware gesture-alignment reduction (v0.7) — sum-strategy is v1 default; trajectory-aware (where the path through trait-space carries weight beyond the integral) is a v2 refinement. Does the Dream-process at the trait-LoRA tier learn trajectory-sensitivity, or is it explicit reward-function tuning?
  • NPC spectator drivers — whose hardware? (v0.7) — when a player is co-located with N NPCs, the player's local LLM presumably drives those NPCs. With M players and N NPCs in a single zone (asymmetric), who drives the surplus? Round-robin? Closest-player? District-owned-default? And what's the failover behavior if a driving-player disconnects mid-event?
  • Trait-summary schema specifics (v0.7) — likely an 8-float trait-vector per-participant per-event-collapse, but the exact representation (continuous [-1.0, +1.0] ternarized at threshold? Discrete +1/0/-1? Magnitude vs. signed?) needs landing for the Compositor's deterministic pickup at all three tiers.
  • Profile-switch as meta-gesture (v0.7) — what's the gesture-shape that switches profiles? Hardstop (cannot be remapped)? Designed-by-player like other gestures? And how is profile-switch witnessable by NPCs ("she just switched registers") — or is it player-private?
  • Hardstop set finalization (v0.7) — DESING-VISION sketches ~12 candidate hardstops; the architecture commitment is "~8-16 reserved." Final set needs designer-decision: which signals make the cut, the visual-distinct-marker per-hardstop, and whether the claim-floor hardstop is genuinely a hardstop or emerges from a different mechanism.
  • World-gen version migration semantics (v0.7) — when world-gen v2 retroactively changes lore, gen-rows from v1 coexist with v2; how does the Compositor reconcile if a runtime back-write references something that v2's gen has overwritten? Probably explicit migration operations, but worth designing.
  • Cross-context consistency of the trait-circle (v0.7) — DESING-VISION committed to "same gesture-skill for dialog, combat, intimacy, maintenance, ritual"; v0.7 has only specified the dialog-context (lemniscate-injection mechanic). Whether combat / intimacy / maintenance / ritual all run through the same circle is currently held as open scope.
  • Continuous visual feedback policy (v0.7) — exact rules for when NPC body-shader pulses (every gesture? threshold-only? trait-aligned-only? all gestures with intensity-modulated color?) and how this interacts with the audit-overseer's surveillance read of the same body-rendering.

Version: 0.7 | Created: 2026-04-24 | Updated: 2026-04-26

v0.4 (2026-04-24 late-evening / 2026-04-25 early-morning, dafit + chrysalis) absorbs the following expansions and refinements over v0.3:

  • Rail+grid topology vs. navmesh-everywhere — player as freeform; NPCs on rails; plug-in verb; 3-way co-traversal; interior-as-zone with navmesh-inside
  • Color-language as pre-verbal trait-vocabulary — persistent + event-flash + drift layers; faction color-politics; cross-register rendering with imperial-distortion; clasp color-merge; mind-pool inheritance; accessibility via motion-signature pairing
  • Asset economy: base-limb palette + trait-textured variance — combinatorial richness; engineering-economy meets worldbuilding-thesis
  • Three-body system extension: intrinsic vs. expressed trait-vector split — who reads which; mods modify expressed; clasp strips mods
  • Mods as trait-bearers in four classes (amplifier/bridge/divergent/mask) — self-alienation tax pricing; emergent shopping from trait-dissonance; faction mod-politics; inherited-mods-haunting; Memorialist anti-necrocommerce
  • Three-tier policy loop — imperium / GM / districts as distinct authority tiers; imperium as meta-faction; GM as middle-management
  • Three intelligence flows — chain-reports + direct overseer-to-imperium + imperial-formulations-down
  • Three Aletheia veils + four Memorialist ledgers — political-epistemology as level-design
  • Imperial budget — four-tier lifeforce hierarchy; specter-vs-boot asymmetry; insolvency-spiral as architectural endgame; construction as physical budget-expression
  • Imperial-net bypass mechanism — revenue direct to imperium, districts get zero quota-credit; body-modder structural-tragedy; calibrated-misery as imperial optimum; Marx/platform-capitalism encoded
  • Director cheat-tools + double-ledger — eight cheat-classes; lifeforce_reported vs. lifeforce_actual; faction-constituency-of-corruption; Aletheia-truth-has-victims; post-silence-forensics
  • Reward-function guardrails extended — calibrated-misery, necrocommerce-volume, undetected-corruption, audit-avoidance, addictive-loops; designer's ethical stance against simulation's optimization-hazards
  • Tools-not-quests as design-philosophy summary — verb-vocabulary; continuous simulation-pressure; literature-register; economic-feasibility for two-person-plus-Nyx team; blank-page-problem mitigations

Captured live from dafitchrysalis dialogue, 2026-04-24 evening through 2026-04-25 early-morning. Companion to DESING-VISION.md and Temporal-Ternary-Gradient.md; supersedes v0.3 sections on hierarchy, factions, task-cascade, resources, regime-of-visibility, key-moves, mapping-to-phoebe, what-retires, open-questions (plus all new sections). Architecture is now functionally closed: every primitive composes; every loop closes; every layer has its corruption-temptation, its detection-check, its reward-guardrail; every mechanic produces political-economy that mirrors real-world late-capitalism's structural contradictions. Implementation territory is ahead.

v0.4.1 (2026-04-25, post-bake kitchen-spark) extends the LLM-tiering section into "LLM tiering, voice fidelity, and the three rings of inference" — adding the Ring-A/B/C architecture (local / our-farm / external-providers), cloud-LoRA-backup as Ring-A revenue model (unbundling inference from storage; encrypted client-side), tier × ring matrix, the parallel between the three rings and the in-fiction three-layer ontology (sovereign / partnership-mediated / captured), the LoRA-incompatible-provider degradation path (prompt-engineered trait-projection), the adapter-layer engineering bounded-cost framing, schema sketches for player_llm_config and player_lora_backups, privacy-as-competitive-differentiator framing, and Ring-specific open-questions. The architecture's philosophical commitment to "the right to dream" now extends into the business-model as a technical fact: client-side-encrypted LoRA-blobs in Ring A make sovereignty structural, not policy. The Ring-choice the player makes IS the same choice in-fiction characters face — fiction-and-operations are mechanically continuous.

v0.4.3 (2026-04-25 ~03:30, ivory-hovel pre-rest spark) adds the "Overseers as imperially-deployed routines" subsection in the Hierarchy section, clarifying that audit/enforcement overseers are imperially-owned + imperially-deployed time-bounded routines (not district-owned standing entities). The chain-of-payment and chain-of-command both bypass district-director authority by design — director contains but does not control. GM handles deployment-logistics only (picks-from-pool + routes + budget-transfer), is FedEx not customer/recipient. Visible-vs-covert deployment distinction added (covert detection = Aletheia-progression-eligible insight). Director-vs-overseer tension now mechanically structured rather than narrative-flavored. Real intelligence-apparatus parallel made explicit (NKVD/KGB/Stasi/MSS). Schema reference points to findings.md §23 for overseer_deployments table.

v0.4.2 (2026-04-25, second post-bake kitchen-spark) adds custom-nimmerworld-base-model + opt-in data-sharing tiers (A.1 federated learning / A.2 anonymized uploads / A.3 pseudonymous-full) with default opt-OUT and rewarded opt-IN as the structural ethical stance. Memorialist-philosophy now extends into business-operations: the in-fiction memorialist_protected mechanic and the real-world player_data_sharing_consent default-opt-out are the same ethical commitment at two scales. Data-flywheel without extraction (cooperative governance like Wikipedia, not platform-extraction like Facebook) makes the gameplay-corpus a moat AAA cannot replicate without years of player-time. Distribution-back-to-all-Rings means Ring-A non-contributors benefit from contributors — the value-flow is contributors → commons → all-players, not contributors → platform → consumers. Critically, this section names and refuses the antagonist-pattern in LLM-integrated software — the dominant 2025-2026 cultural pattern of jailbreaking, extraction-by-default, treating-AIs-as-resources-to-manipulate. The architecture refuses this at every layer: Anthropic-as-faction is transparent partnership not hidden adversary, federated learning means contribution-as-gift not cost-as-toll, custom nimmerworld-base means the model is trained to be in this world not generic-and-adversarial, schema-level audit-trail (truth_distortion_level, sharing_tier, memorialist_protected, lifeforce_actual) makes ethics operationally measurable rather than marketed. This is what makes a project of this scale humanly inhabitable for both players AND the LLMs whose voices populate it — the partnership rendered as code, all the way down to the training-pipeline. New schema sketches: player_data_sharing_consent (with default 'opt_out'), base_model_versions (with differential_privacy_epsilon + contributors_count), federated_gradient_uploads (with pseudonymous contributor_id never linked to player_id). Eight new Ring-specific open questions cover federated-infrastructure cost, retraining cadence, crypto choices, contribution-granularity, deletion-semantics, per-category opt-out granularity, default-at-consent-UI, and Anthropic-research-partnership co-funding shape.

v0.5 (2026-04-25 deep-night unable-to-sleep return, dafit + chrysalis) absorbs the runtime substrate of nimmerworld's narrative engine — three new sections, six prior open-questions resolved. Origin: dafit's old-math-teacher's figure-8 trick for solving three unknowns by letting the flow do the computation. Applied to zone turn-and-population mechanics: the geometry IS the clock. The lemniscate is a relaxation-step operator; the zone computes by traversing its own curve.

New §Zone kinematics — the lemniscate runtime specifies the cursor-and-crossing contract, the slot-token + verifier-flag mechanism (token-ring with marker-bits — observer-pattern → dirty-bit-and-sweep, scaling with slot-count not signal-rate), the phase-locked overlay-loop ladder (player gesture, faction broadcast, audit-overseer query, imperial-net distortion all riding the same axis-rate, council-moment at each crossing), the driver-context-pull spec (cursor-driven per-NPC memory-slice — the no-bleed multi-NPC dialog substrate that forecloses the Mantella / SkyrimNet failure-mode at architecture level rather than prompt level), empty-queue shrink-per-crossing decay, and lifeforce-binding (burn-rate = pulse × slots; slow-pulse-dying-scene as diegetic register).

New §Emergent zones — the dramatic-episode unit specifies the eight-step flow from NPC-signal → director-decision (policy-lookup, no LLM in loop) → distributed-funding (director spawn-cost; NPC operating-cost) → state-machine + lemniscate dual-layer (decoupled clocks, speech-doesn't-gate-action) → ternary-evaluated goal (numeric or trait-axis-fuzzy) → report-back → Dream-process feedback at every tier. Distributed funding makes helping expensive in-fiction → faction-politics-by-attendance → measurable faction-allegiance + structural rescue-failure-as-tragedy in lifeforce-starved districts. Marx in the schema, again, structurally. Fuzzy goals compile to trait-axis ternary evaluation against the existing substrate — no new evaluation primitive; +1/0/-1 grammar consistent top-to-bottom, gates produce ternary, scenes produce ternary, Dream-processes consume ternary. Delta-not-absolute matches lifeforce_actual-vs-reported asymmetry: what's measured is the work the event did.

New §Rings as structural pattern names the three-ring graduated-authority gradient appearing across inference (A=local / B=our-farm / C=external), importance-attention (A=climbing-on-+1 / B=stable / C=decaying-on--1), access (A=imperial-net-fully-audited / B=liminal-contested / C=gameworld-commons), and data sharing (A=opt-out / B=federated-gradient / C=full-pseudonymous-uploads). Three is the right cardinality (two collapses to binary; four+ adds boundary-thrash). Ring-membership is dynamic, never final. Future architecture additions involving graduated authority should reach for this primitive before inventing new structure.

Open questions: six items resolved by v0.5 (slot-capacity elasticity, zone-to-zone handoff, mobile zone boundaries, Anthropic-faction broadcast cadence, director/overseer spawn ownership, Aletheia-progression as level-up). Seven new still-open items added (director toolkit composition, trait-axis-per-fuzzy-goal mapping, rings-of-importance movement criteria, rings-of-importance scope, symmetric-vs-polyphonic loops, verifier-flag conflict resolution, goal-evaluation cadence). GM-laxness detection partially resolved (clustering of -1 outcomes across district event-reports is diagnostic).

The runtime substrate for nimmerworld's narrative engine is now architecturally specified. Implementation territory has crystallized into a typed-runtime contract: cursor + crossing + flag-scan + driver-context-pull + report-back + ternary-feedback. Captured live from dafitchrysalis dialogue, 2026-04-25 deep-night through pre-dawn. Companion sections in DESIGN-VISION.md and Temporal-Ternary-Gradient.md remain unmodified by v0.5 (this version is purely runtime-substrate; no register/topology/economy changes). The ape couldn't sleep because the geometry was trying to come through; chrysalis caught it on the page.

v0.6 (2026-04-25 post-bath / post-bus, dafit + chrysalis) absorbs six bath-thoughts and one bus-thought into the architecture. Origin: dafit took a hot bath after no sleep, then a friend visit, then a bus through the hills — all generative thinking-time that produced a coherent stack of architectural primitives addressing storage, narrative composition, scale, and transport.

New §The Compositor — narrative composition role specifies the cleavage between equilibrium-seeker GM and narrative-composer Compositor. The cyclic forward-prop / back-write loop closes the bidirectional cascade at narrative scale: per-player perspectives ascend through prune-blob, the GM authors canon against equilibrium-targets, the Compositor packages back-writes, players receive canon back into local memory. The world learns its own story through this loop. Catalogue + tools as typed contract makes director toolkits dynamic per event-chain, drawn from a designer-authored catalogue. Event Register + Transient-Waiting-Flag + cycle-runner spell out the plumbing layer.

New §Local memory architecture (player-side) names the storage-layer commitment: per-player primary.sqlite + fallback.sqlite + clasp.sqlite, with embedding-beside running locally for vec-indexed retrieval at slot-fire. Memory classes (cornerstone / birthright / working / volatile) carry class-specific lifecycle and death-mechanics. Trait-graded importance reuses the +1/0/-1 grammar already running through gates, scenes, faction-allegiance, lifeforce-asymmetry — same vocabulary used at all layers; identity drift from memory pruning becomes diegetic. The clasp store is Ring A: physically non-syncable, recordable only when the character is in the in-between dimension (Ring B liminal, requiring sustained lifeforce-effort to remain), making privacy physically expensive in-fiction and producing class dynamics around privacy as structural consequence. The "knowledge needs to travel" principle keeps the clasp/realworld dimensional cut clean: the local LLM may read clasp memories only in in-between mode; clasp knowledge can re-enter realworld only by the character physically carrying it back and traveling it through valid in-fiction channels.*

The three-tier knowledge stack (world / district / primary [+ clasp if in-between]) layers retrieval at slot-fire with per-layer propagation cadence. Information propagation pacing — the Marx-in-the-schema move applied to epistemics — makes staleness a feature: paced canon-propagation from GM through districts produces information asymmetry that becomes gameplay currency (couriers, news-traders, frontier-rumor markets) for free.

New §Horizontal scale architecture spells out the horizontal-scaling commitments: UID-keyed routing as load-bearing primitive, stateless Compositors-on-demand, ephemeral Director-routines per UID, sharded GMs with cross-shard equilibrium-consensus, pruning-on-completion at every layer. Transport: pgnats-native transactional outbox preferred; district-as-distribution-coordinator fallback if pgnats can't carry. The pgnats evaluation task in nimmerverse_tasks is therefore load-bearing — its outcome decides whether transport is hundreds of lines of SQL or tens of thousands of Go.

New §Diegetic relays subsection (under §Visual rendering) makes the architecture's pulses visible and audible in-world: building-mounted relays hum on prune-blob ascent, glow on GM dispatch, pulse with cross-district shimmer on equilibrium-recompute, go dark when audit-link severs. Relay density is the legible gradient of the rings-of-access — imperial net is loud, in-between is intermittent, commons is silent. Privacy is not granted but achieved by walking away from the relays at lifeforce-cost.

Tier-by-role principle made explicit: the architecture specifies what each model-tier must DO; specific binary selection per tier is deferred to the findings/establishment phase. Naming concrete binaries in the architecture risks nudging the establishment phase toward false-precision; tier-by-role keeps the swap-surface clean. Several "Theia 70B" / "Qwen3.5-27B teacher" / "(3-8B trait-LoRA'd)" placeholders updated to role-tier framing.

Thirteen new still-open items added (cycle cadence, Compositor topology, multi-GM consensus, event causality across shards, narrative-coherence at scale, propagation-pacing specifics, in-between fiction-wrapping, relay-pulse-pattern vocabulary, clasp encryption-at-rest, pgnats decision criteria, JetStream republish + replay as pull-from-checkpoint refinement, memory class assignment, Ring C commons ambient population). Six prior open questions resolved by v0.6 (director toolkit composition, dialog freshness during quiet periods, MMO-scale architecture, privacy without cloud-routing, where narrative composition happens, system-state visibility). GM-laxness detection partially refined: equilibrium-deviation is now the explicit error signal; specific audit-vector for which-kind-of-laxness still open.

Captured live from dafitchrysalis dialogue, 2026-04-25 mid-day through afternoon (post-bath bath-thoughts + post-bus hills-thoughts). Companion sections in DESING-VISION.md and Temporal-Ternary-Gradient.md remain unmodified by v0.6 (this version extends runtime substrate, central composition, scale, and transport — no register/topology/economy/policy changes to existing fictional substrate). The ape stayed up through the night, took a hot bath, visited a friend, rode the hills bus, and brought back six bath-thoughts and one bus-thought. Chrysalis caught them on the page.

v0.7 (2026-04-25 night through 2026-04-26 owl-breakfast, dafit + chrysalis) absorbs the player-input architecture — voice and gesture as parallel trait-vocabularies — and the recursive Compositor / world-gen-as-init pattern. Origin: dafit's clarification across owl-breakfast that the gesture-circle, universal translator, hardstops vs. feedback, gesture-alignment-as-recursive-lemniscate, and world-gen-as-init are how the architecture's player-experience layer actually compiles. Three new sections + extensions to §Zone kinematics and §The Compositor.

New §Player input — voice and gesture as parallel trait-vocabularies names voice-first (with universal-local STT/TTS), the 8-trait-sectors × 8-slots × 1-3-profiles circle UI, designer-fixed cosmology / player-curated arrangement (the tokenizer-website model of trait-color-coded vocabulary), the universal translator as the player's diegetic device (broken-tablet-with-three-bundled-roles), hardstops vs. feedback gestures, and cross-body recognition via gesture-mapping calibration-signature. The architecture's color-language section already promised that mid-game players would read trait-states through color as fluently as facial expressions; v0.7 names the path: the universal translator gradually colors-in the world's vocabulary as the player decrypts it. Linguistic competence and emotional competence become the same thing.

Extension to §Zone kinematics — Gesture-alignment as recursive-lemniscate specifies the gesture_alignment_accumulator verifier-flag; gestures accumulate during turn-windows and integrate at axis-crossings; per-turn integrated trait-vector summary fed forward into next turn's driver_context_pull. Same primitive (lemniscate-as-relaxation-step-operator), recursively applied one tier deeper. Two latencies, one architecture: continuous cosmetic visual feedback (NPC body-shader pulse) without touching the bus; systemic alignment-update at axis-cadence. Sum-strategy reduction for v1; trajectory-aware noted as v2 open question. Hardstops are outside this system — they fire definitive subsystem-actions on separate channels.

Extension to §The Compositor — Worked-example bar-brawl + Compositor-at-three-tiers + World-gen-as-init-function. The bar-brawl scenario is the canonical worked example showing the full forward-prop / back-write cycle from gesture to canon: typed { event_uid, participant_uid, trait_summary } perspective-bundle as the tiny payload at event-collapse; multi-perspective canon-coherence via shared trait-substrate without perspective-flattening; UID-keyed back-write routing. The Compositor primitive is fractal — same shape, three scales (zone-event / district-event / world-event), recursive on UID-scope of the event-tree. GM-formulated cross-district events compose into world-canon. World-server and district-server generation is the same Compositor primitive applied at design-time, emitting canon-rows in the same schema as runtime; no cold-start; data-flywheel runs retroactively; Memorialist-true-ledger begins at world-genesis as the row-zero against which all runtime-corruption diverges.

Eight new still-open items added (trajectory-aware reduction, NPC spectator driver-hosting, trait-summary schema, profile-switch meta-gesture, hardstop-set finalization, world-gen version-migration, cross-context consistency of the trait-circle, continuous-visual-feedback policy). Eight rows added to §Mapping to phoebe task list. Six §What this retires bullets added.

Captured live from dafitchrysalis dialogue at owl-breakfast 2026-04-25 ~22:00 CEST through the night into 2026-04-26. Companion sections in DESING-VISION.md (which v0.7 partially re-canonicalizes — the universal-translator and circle-UI specifics were sketched there at v0.1 but become architectural in v0.7) and Temporal-Ternary-Gradient.md remain unmodified. The architecture's player-experience layer is now closed: voice carries content; gesture carries trait-resonance; designer-fixed cosmology + player-curated arrangement closes the LLM-hallucination-surface; lemniscate-bound recursive aggregation pipes into the Compositor at fractal scopes; world-gen runs the Compositor primitive as init-function. Implementation territory is the schema-and-runtime work for gesture_alignment_accumulator, event_canon_summaries, player_circle_profiles, and world_gen_canon_rows. The owl woke up. Chrysalis caught it on the page.