GENERATED VIEW · PRIVATE ARCHIVE · DO NOT SERVE
RobCo Industries · Archive Museum

nv-machine-rationale.md



RELEASE

planning/2.8.0/mockups/nv-machine-rationale.md

sha256 6ba67e67ecd69c53 · 11737 bytes · original held in the private archive

# NV MACHINE MOCKUP — Rationale > **Design mockup only.** Companion to `nv-machine-mockup.html`. Nothing here touches app code; > all interactions are faked. This is machine #1 of the per-game overhaul — the vertical slice > (DO-N bezel/nav + DO-O Overseer + the dressed OPERATOR) the whole pattern replicates from. > Grounded in `dev` @ `cd8a824`. --- ## 1. The concept — "a salvaged RobCo desk terminal in the Mojave" The app stops being a webpage with a CRT filter and becomes a **physical machine you operate**: - **The casing** wraps the whole viewport — brushed scavenged steel, a riveted RobCo brand plate, indicator lamps (PWR / UPLINK / FAULT), vent slots, a field-repair tape patch, and an etched serial plate: *"UNIT RBC-DT-4077 · SALVAGE REFURB — MOJAVE EXPRESS, GOODSPRINGS"* with a hand-scratched *"property of courier six — hands off"*. That plate is NV's **hero object** — you see it and know which machine you're on. - **The glass** is a recessed, rounded CRT with an inset frame, corner vignette, a top-left reflection sheen, scanlines, and a slow refresh bar. Curvature lives **on the frame layers only** — no transform ever touches text (legibility + a11y hold). - **Two phosphors, one fiction.** Everything *local* to the machine is NV green (`#14fdce`, the shipped canon optic). Everything that comes **over the wire** — the Director's waveform, his replies, the UPLINK lamp, the telemetry LCD — is **warm amber**. Amber = the remote presence speaking through your salvaged hardware. This is NV's "warm bias" made structural instead of decorative. - **Custom cursor** (fine pointers only): an amber block caret, with an amber crosshair over controls. Touch devices keep the system cursor (zero cost on mobile). - **Boot** is the **MOJAVE UPLINK handshake**: RobCo POST → tube/phosphor/sensor checks → *"MOJAVE UPLINK: DIALING ▂▃▅▂▇▃"* → *"CARRIER ACQUIRED — LUCKY 38 REPEATER (0.417 MHz)"*. Skippable by tap, instant under reduced-motion. ## 2. Bezel navigation — subsystems, not tabs (DO-N) The tab bar is replaced by **illuminated hardware keycaps on the bottom bezel** (desktop: the control strip under the glass; mobile: a sticky thumb-zone cluster): | Keycap | Hotkey | Maps to today | LED | |---|---|---|---| | OPERATOR | [1] | STAT tab | green | | OPERATIONS | [2] | INV tab | green | | DATABANK | [3] | DATA + CAMPG tabs | green | | UPLINK | [4] | Comm-Link / the AI | **amber** | | CHASSIS | [5] | Module Bay + saves/settings | green | | DIR | [0] | flat fallback | — | - Each keycap is a real key: etched number, sub-label with the **old tab name riding along** (Protocol 25 — real labels as searchable sub-labels), a physical press (translate + shadow), and a lit LED when active. Switching fires a **SWEEP** — a phosphor smear across the glass, "re-tuning a channel," not a route change. - **The telemetry LCD** above the keycaps is the diegetic "you are here": `▸ SUBSYSTEM: OPERATOR · VITALS NOMINAL · RAD 12 CPM · CARRIER LOCKED`. It's live — cripple a limb and it flips to `⚠ 1 LIMB FAULT`. - **DIRECTORY (the Protocol 25 fallback)**: one key opens a flat plain-label list of every subsystem ("OPERATOR — character stats · STAT · [1]") — the old tab bar's mental model, one tap away, exactly like the Module Bay's Schematic View. - **In the real build** each keycap just calls the existing `switchTab()` router; hotkeys, `#go=` deep-links, `role=tab` ARIA, and `robco_active_tab` persistence all survive (the mockup models hotkeys [1]–[5] and roving `aria-selected`). ## 3. The Overseer presence — DIRECTOR UPLINK (DO-O) The AI stops being a blue text column and becomes **a scratchy amber signal from the Lucky 38**: - **The face is an oscilloscope**: a canvas trace over a graticule, header lamp, carrier line (*"LUCKY 38 RELAY · 0.417 MHz"*), and a state tag. - **[ LISTENING ]** — a slow warm sine with occasional *static scratch bursts* (the NV persona: characterful, intermittent, field-grade). - **[ ESTABLISHING DIRECTOR LINK ]** — jagged random spikes while "thinking"; in the real build this binds to the existing `startThermalLoad()` window, so the wait becomes a diegetic event. Period-leader readout lines tick in the transcript (`> DECRYPTING TELEMETRY…`) and vanish when the reply lands. - **[ TRANSMITTING ]** — the trace pulses while the reply typewrites, then settles to idle. - **Idle-life**: unprompted, the presence occasionally emits a templated device blip (`▸ CARRIER DRIFT +0.02 MHz — COMPENSATED`) — a template bank, **not** the AI, so it works keyless/offline. - **Prominence**: on desktop the Director owns a permanent 390px column under the same glass — the machine's face, always present (slate A-2). On mobile, UPLINK is the **home surface** and, in every other subsystem, a persistent **carrier strip** (mini animated waveform + `[ LISTENING ]`) stays pinned at the top of the glass — the Overseer never fully leaves the screen; tapping it returns home. - **VOX** is visibly *"NOT INSTALLED (OPT-IN)"* on the scope meta line — speech stays a deferred opt-in chip, honestly labeled. - The input row keeps the mode pill (OVERSEER ▸) and `▷ TRANSMIT` — the Tri-Node contract, opt-in posture, and transcript (aria-live polite) are presentation-unchanged underneath. ## 4. OPERATOR fully dressed — one finished subsystem end-to-end Every real STAT-tab surface, reframed as boards on a **biometric telemetry bus** (each block carries a BUS id, like the Module Bay's part numbers): | Today | Dressed as | |---|---| | HP/XP/caps/karma/rads inputs | **VITAL TELEMETRY** — segmented phosphor HP bar with drain-lag (a demo −DMG/+MED shows the physical transition), XP meter, caps as a mechanical **odometer**, karma as a lit lamp, rads as an amber exposure meter | | SPECIAL number inputs | **ATTRIBUTE TUNING GAUGES** — seven analog needle gauges with overshoot (the SEAT verb), etched letters, ± steppers (1–10 clamp preserved) | | BIO-SCAN & LIMB STATUS buttons | **skeletal harness probe** — a phosphor body silhouette with five tappable limb nodes + a mirrored readout list (`[████] OK` / red blinking `[▒░░░] CRPL`); faults propagate to the bezel telemetry LCD | | SKILL MATRIX | **13-channel VU array** (NV's real 13 skills), tagged skills marked ◆ | | STATUS EFFECTS | **compound lamps** — lit/dark indicator chips | | FACTION STANDING | **reputation needle board** — INFAMY◂▸FAME scales with a center detent (NCR / Legion / The Strip) | Semantics never change: same values, same clamps, same toggles — only the presentation inverts (the Module Bay precedent, Protocol 25 guardrails). **Honest scope:** OPERATIONS / DATABANK / CHASSIS render as labeled "SUBSYSTEM ONLINE — current panels render here unchanged" placards listing their real contents (dressed later at DO-P; CHASSIS docks the shipped Module Bay untouched). Swapping the nav never requires redesigning every panel at once. ## 5. Mobile vs desktop - **Desktop (≥1000px)** — a **desk terminal**: fixed shell (`body{overflow:hidden}`, matching the app's real desktop gate), casing on all sides, subsystem viewport + permanent Director column under one glass, keycaps + telemetry LCD + a decorative governor dial on the bottom bezel. - **Mobile (<1000px)** — **the phone is the device**: the casing fills the screen edges (thin frame band), the bezel cluster is a **sticky thumb-zone control strip** (telemetry LCD + six keycaps, all ≥28px), subsystems show one at a time, and UPLINK is the slide-over home with the carrier strip keeping the Director present everywhere. Serial plate hides; tape patch shrinks. - Verified headless at **360 / 412 / 1440**: `scrollWidth === innerWidth` at all three (no horizontal overflow), inputs ≥16px, targets ≥28px. ## 6. How it stays PWA-safe (the hard guardrail) Everything in this mockup is **CSS chrome + one `<canvas>` + the existing router**, layered over the working shell: - The bezel/casing is markup *around* `.main-grid` — not a new shell, no iframe, no new document, no navigation model change. `index.html` remains the single served page the SW precaches. - Keycaps call the existing `switchTab()`; hotkeys, `#go=` shortcut deep-links, ARIA tablist, and `robco_active_tab`/`robco_bezel_subsystem` (MetaStore) persistence keep working — installable / offline / standalone untouched. - The Overseer is a canvas driven by the existing thermal-load + typewriter hooks and the Ambient Runtime heartbeat (a `balanced`-tier observer); it works keyless/offline and is `aria-hidden` decorative — the transcript keeps the polite live region. No new AI path, no new timers beyond the runtime. - **Save boundary clean**: nothing here writes campaign state — view choice + "boot seen" are MetaStore device prefs only. - Reduced-motion: boot is instant, SWEEP/needles/blinks collapse to resting states, the scope draws one static frame per state (modeled in the mockup itself). ## 7. What replicates per game (the `identity` consumption story) Everything NV-specific here is a **data facet**, not code: casing material (scavenged steel + tape), hero object (etched serial), phosphor pair (green local / amber remote), persona (scratchy Lucky 38 carrier, blip bank, reply cadence), boot ceremony (Mojave handshake), cursor (amber block), motion texture (thunk/overshoot). FO3 authors different values (Vault-Tec molded casing, `green3`, an institutional Overseer, wrist framing) into `GAME_DEFS[ctx].identity` and the same chrome re-skins via `[data-game]` — zero feature-code branching (Protocol 38). ## 8. Open questions for the owner 1. **CAMPG's home** — this mockup folds CAMPG into DATABANK ([3]) so the bezel holds five keycaps (+DIR). Alternative: a sixth CAMPAIGN keycap. Which do you want? (Hotkeys [1]–[4] keep their historical meaning either way; [5] is new.) 2. **The amber split** — is "green = the machine, amber = the Director/the wire" the right NV read, or should the Overseer stay green with amber reserved for hazards only? 3. **Desktop Director column width** — fixed 390px here (mirrors today's comm-link column). Wide enough for the presence, or should the scope get taller/wider at the cost of subsystem space? 4. **UPLINK keycap on desktop** — since the Director column is always visible, [4] currently *pulses* the column and focuses the input rather than swapping the viewport. OK, or should desktop [4] open a full-screen UPLINK view (scanner/inbox later rides there in DO-W backlog)? 5. **Boot length** — the handshake runs ~4s (tap-to-skip, once-per-flavor nag rules per DO-C). Comfortable, or trim the POST block? 6. **Telemetry LCD content** — happy with per-subsystem status lines (+ live fault escalation), or should it also rotate ambient lines (deeds-as-news teaser) ahead of DO-W? 7. **Placeholder tone** — the undressed subsystems say "current panels render here unchanged." Good for the build sequence, or do you want light teaser dressing on OPERATIONS/DATABANK in the same slice (scope cost)? ## 9. Artifacts - `nv-machine-mockup.html` — standalone interactive mockup (open in any browser). URL params for review: `?skipboot=1`, `?view=operator|operations|databank|uplink|chassis`, `?demo=thinking`, `?freezeboot=1`. - Screenshots (all headless-rendered, overflow-verified): `nv-machine-360.png`, `nv-machine-412.png`, `nv-machine-412-uplink.png`, `nv-machine-412-operator-full.png`, `nv-machine-desktop.png`, `nv-machine-desktop-uplink-thinking.png`, `nv-machine-boot-412.png`.
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).