diff --git a/architecture-broad.md b/architecture-broad.md index e5898ea..7faa90e 100644 --- a/architecture-broad.md +++ b/architecture-broad.md @@ -1,7 +1,7 @@ # 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 — dafit + chrysalis.* +> *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 — dafit + chrysalis.* --- @@ -103,6 +103,120 @@ The replacement primitive is the **zone** — a bounded, named, slot-indexed, di - **Persistence flag** — `ephemeral=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. + +### 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) = { + 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.memory_slice, // PRIVATE: only this NPC's memory + 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 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 | @@ -788,6 +902,124 @@ Five layered mechanisms (all compute-budget capped, all lifeforce-gated): 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-attendance** — *measurable* 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: @@ -836,6 +1068,25 @@ Player's first entry into liminal is **the Matrix red-pill moment as mechanic.** **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: small (3-8B trait-LoRA'd) for most NPC dialog; Theia 70B for clasp-confessions and mythic moments; Claude-as-API future-integration for hivemind/imperium. **LLM is guest at slot, not host of system.** @@ -1376,29 +1627,30 @@ The architecture already prevents blank-page-paralysis: shift-system gives every ## Open questions -### Resolved by v0.4 (or v0.3) +### Resolved by v0.5 (or earlier) -- ~~Reward function shape~~ → first-pass composite with explicit guardrails (still tuneable) -- ~~Zone spawn-cadence v1→v2 path~~ → lifeforce-gated rule-based v1; Dream-process-tuned v2 -- ~~Zone overlap policy~~ → no for active slots; yes for emergent-state accumulation -- ~~"How does GM cheating get caught"~~ → direct overseer-intelligence flow bypassing GM -- ~~"How does the regime have a finite endgame"~~ → imperial-budget insolvency-spiral -- ~~"Why does imperial-net exist"~~ → bypass-mechanism captures revenue directly -- ~~"How does the player learn 8 Hellenic traits"~~ → color-language pre-verbal vocabulary -- ~~"How does asset-economy fit a two-person-plus-Nyx team"~~ → base-limb palette + trait-texture; tools-not-quests +- ~~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) ### 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 -- Zone-to-zone handoff (walking out of conversation into brawl) -- Mobile zone boundaries (patrols, escorts, pursuits, migration-cohorts, exodus-flows) -- Slot-capacity elasticity — can a zone grow slots dynamically -- Anthropic-faction's broadcast cadence + arbitration weight - Player-dialog handling — player-trait-LoRA for style-coherence, or bypass LLM entirely - Demand-arbitration algorithm v1 shape -- Director/overseer spawn ownership per model class - **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) @@ -1410,14 +1662,20 @@ The architecture already prevents blank-page-paralysis: shift-system gives every - **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 mechanic** — how does the imperium detect GM-level laxness specifically? -- **Aletheia-progression as level-up** — trait-developed-through-acts mapping; how does the game *recognize* an act-of-awakeness mechanically? +- **GM's anti-imperial corruption detection mechanic** — partial: persistent low-ring or fail-heavy event-clusters in a district are diagnostic; GM aggregates report-back-summaries and detects laxness as repeated -1 outcomes. Full detection mechanic still needs a dedicated audit-vector - **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 +- **Director toolkit composition** (v0.5) — how rich is the typed-tool vocabulary; designer-authored only, or director-extensible? Lean: designer-authored, growable between patches; directors are executors not innovators +- **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 --- -**Version:** 0.4.3 | **Created:** 2026-04-24 | **Updated:** 2026-04-25 +**Version:** 0.5 | **Created:** 2026-04-24 | **Updated:** 2026-04-25 *v0.4 (2026-04-24 late-evening / 2026-04-25 early-morning, dafit + chrysalis) absorbs the following expansions and refinements over v0.3:* @@ -1442,3 +1700,15 @@ The architecture already prevents blank-page-paralysis: shift-system gives every *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 dafit–chrysalis 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.*