MEMORY
memory/localmode-1060dea9-0dc3-42b4-958d-2a6f7a6c0c58/parked-wasteland-uplink-engine.md
sha256 50f6241a93553075 · 4765 bytes ·
original held in the private archive
---
name: parked-wasteland-uplink-engine
description: "PARKED — WASTELAND UPLINK: ONE ambient 'living-terminal' engine that several overlapping ambient ideas consolidate into. Owner-approved merge, day/night KEPT (owner reversed his earlier cut), and a HARD no-persistence / no-stat-mutation invariant that is the load-bearing safety property."
metadata:
node_type: project
originSessionId: parked-wasteland-uplink-engine
---
## ⭐⭐ HARD INVARIANT — NON-NEGOTIABLE (owner 2026-06-30)
**The engine writes NOTHING durable and NEVER touches stats or real game saves.**
- No mutation of `state.rads` or any state field; no `saveState` / `pushToCloud` / `localStorage.setItem` / `setDoc`.
- Ambient rad-storms drive ONLY the warning tint + geiger ambiance (cosmetic) — **never the real rad value**.
- Ambient lines render via the **no-persist path** (visual only — no chatHistory or localStorage write).
- The engine owns a **DISJOINT `ambient-*` CSS class namespace**. The real `rad-*`/hazard classes are re-derived on every math update and must not be reused. **Real hazards always outrank cosmetic ones.**
- A permanent gate guard must **statically fail** if the ambient module ever gains a persistence or stat-mutation call.
Why it is load-bearing: *"can't cause an outage, can't corrupt a save."* Everything else in this file is negotiable; this is not.
## THE CONSOLIDATION DECISION (owner 2026-06-30)
**Merge the overlapping ambient items into ONE engine — WASTELAND UPLINK.** Owner: *"merge everything that goes into wasteland uplink together … fold the rest in."* The roadmap audit found these had been designed as separate systems but are really **one local data bank + one seeded-roll engine, many readers**:
- **Pip-Boy Radio** — shares the same local bulletin bank. The radio is the PULL surface (user tunes in); the engine PUSHES the same content ambiently.
- **World-map encounter rolls** — consume the engine's shared seeded-roll + event-table infra. Do NOT build a separate roller.
- **INTERCEPT (AI generative-residue)** — the OPTIONAL online AI-augment layer on top of the deterministic static broadcast bank. Must follow the AI network rules (App Check + kill-switch + fail-safe fallback to the static bank; never blocks boot).
- **Remote Transmissions** — the online PUSH layer of the same engine (owner-pushed holotapes/bulletins/events surface through the same UPLINK channel).
Spec: `planning/WASTELAND_UPLINK_SPEC.md`.
## DAY/NIGHT — KEPT (owner REVERSED himself 2026-06-30)
Owner first cut day/night over in-game-time accuracy concerns, then reversed: *"add back day and night."* **Keep it**, alongside rad-storm weather. Treat it as **TERMINAL-SIDE** ambient — driven by real elapsed/session time or logged ticks, framed clearly as terminal-side, **not** a claim to mirror exact in-game time.
Engine emitters: broadcasts, rad-storm ambiance, day/night cycle, incoming-transmission nudges.
This revives the immersion "Dusk/Dawn That Lands + Voice" idea — it had been dropped ONLY because day/night was cut, so the reversal makes it viable again (owner confirmed re-add). Toggleable, reduced-motion safe.
*Corrected 2026-07-20: the `description:` field previously said day/night was REMOVED, contradicting the body. The body is right — the owner reversed the cut. Description fixed.*
## IN-GAME vs IN-TERMINAL CLARITY (owner 2026-06-30) — hard design constraint
Applies to the INTERCEPT inbox and **every** ambient/broadcast feature: they must clearly read as **TERMINAL-side** happenings (RobCo transmissions, terminal chatter) and must NOT confuse the player into thinking a real in-GAME event occurred. The diegetic framing has to make that boundary obvious.
## DEV-BUILD TESTABILITY (owner 2026-06-30)
Because these emitters are time- and probability-gated, they rarely fire on demand. The DEV/STAGING build **must** expose a way to trigger/force-fire each ambient feature, or they cannot actually be verified during development.
## BUILD POSTURE
New global-scope ambient module (vanilla, no-build); free / BYO-key; game-agnostic; offline-first (the deterministic core needs no network — INTERCEPT and Remote Transmissions are optional online garnish with fallback). **Substrate-first phased order**: ship the world-clock/seeded-roll core **plus the no-write guard first**, then push, then rad-storm ambiance, then radio pull, then map encounters, then INTERCEPT/Transmissions. HIGH effort.
**Analysis/spec only — do NOT build until the owner says go.**
Cross-refs: [[parked-2-9-0-update]], [[parked-deferred-work-program]], [[parked-ai-feature-eval]] (INTERCEPT origin), [[parked-recreation-funprompt]] (where UPLINK originated as the MEGA idea), [[parked-roadmap-rebaseline]].
STAMP · generated for RELEASE v2.8.5 commit 06e5180 (06e51801b38a) · archive input-tree hash c07fbfbdd2e1ddeb · 754 files · no wall-clock timestamp (regenerates identically when nothing changed).