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

NV_OVERHAUL_DESIGN_AUDIT.md



RELEASE

planning/2.8.0/audits/NV_OVERHAUL_DESIGN_AUDIT.md

sha256 d5de286fdf28f580 · 29126 bytes · original held in the private archive

# NV_OVERHAUL_DESIGN_AUDIT.md — End-of-New-Vegas-Overhaul Design Gate > **Analysis / ideation only.** No source was edited; nothing committed. This is the committed > END-OF-NV-OVERHAUL DESIGN AUDIT the owner must review before the overhaul counts as "finished." > The owner reads the findings and picks — implement nothing from this doc without sign-off. > > **Read against:** `dev` @ `e06d5c2` (v2.8.0 work under `[Unreleased]`, cache `…-r124`). Method: > the owner-approved `planning/mockups/*` (each board was verified live against its mockup at build), > deep reads of `css/terminal.css` / `index.html` / the render JS, a live-DOM inspection of the running > app at mobile + tablet widths, and four focused code-analysis passes (CSS cohesion, render/interaction, > per-game identity depth, roadmap-gap). Screenshots of the running pane were unavailable (a rasterization > stall on the heavy continuous-animation page), so visual judgment is grounded in the mockups + live > DOM/CSS reads rather than fresh captures. --- ## 0. TL;DR — the verdict in five sentences The **New Vegas machine is genuinely excellent** and the *"light-frame ≠ done"* test is ~90% passed: nearly every board across OPERATOR / OPERATIONS / DATABANK / UPLINK / CHASSIS is rebuilt from the ground up in a coherent RobCo hardware language (load-cell weigh bridge, phosphor radar node-map, VU skill meters, analog SPECIAL gauges, living fusion core, phosphor tube rack), not legacy-in-a-frame. The design language is **cohesive** — shared casing/bezel chrome, `bay-board` shells, BUS/SLOT part numbers, status lamps, amber-wire accent — and each subsystem has a **distinct hero instrument**, so the "same OS, memorable rooms" goal is largely met. **But the overhaul is finished only as a *one-machine* slice:** the identity keystone was built to carry N machines + a living world, and roughly **two-thirds of it is authored-but-dead data**; FO3 is "NV chrome + a green tint + a few strings," there is no living-world layer, and — most urgently for a mobile-primary owner — **the bezel subsystem nav does not actually gate content on mobile**, so the phone renders all six subsystems in one interleaved ~19-screen scroll. Fix a short must-list (headed by the mobile-gating defect) and the NV overhaul is a legitimately shippable, distinctive product; the per-game / living- world / mobile-casing ambitions are real but are correctly *future* units, not NV-overhaul blockers. --- ## 1. MUST-FIX BEFORE RELEASE (prioritized) These are defects/inconsistencies **within the shipped NV machine** — not future features. Each is a "the NV overhaul isn't done until this is addressed" item. | # | Finding | Why it's must-fix | Effort | |---|---------|-------------------|--------| | **MF-1** | **Mobile subsystem nav doesn't gate content — all 6 subsystems render stacked & interleaved.** Live-DOM confirmed: on the sub-1000px layout all 30 `[data-tab]` panels compute `display:block` and lay out simultaneously despite 26 lacking `.tab-visible`; an existing mobile rule overrides the global `.panel[data-tab]{display:none}` gate. Page = **17,127px (~19 screens at 412×915)**. Tapping a keycap only moves the LED/telemetry + jumps scroll — it never switches the view. DOM order also **interleaves** subsystems (stat→inv→stat→data→stat→chassis→data→settings), so a mobile scroll jumbles stats, inventory, skills, quests, map, settings together. | The owner is *almost exclusively* on 360/412. The single headline feature of DO-N (a subsystem selector) is inert on the owner's primary device; the app's daily reality is a jumbled mega-scroll. **Verified fixable:** injecting `@media(max-width:999.98px){.col-left .panel[data-tab]:not(.tab-visible){display:none!important}}` collapses the page **17,127px → 4,218px** and makes the nav switch views. | **S** to restore gating; **+M** to also reorder the DOM so each subsystem's panels are contiguous | | **MF-2** | **Legacy-in-a-dressed-frame in SETTINGS.** `#savesPanel` (SAVE ARCHIVE) and `#accountPanel` (ACCOUNT) are still plain `.panel`s with the *old* full-bleed `<h2>` bar header and **inline styles** (`index.html:3449–3461`), sitting directly among fully-rebuilt `bay-board` hardware boards. `#savesPanel`'s only dedicated CSS is `position:relative`. | This is the one place the "every board rebuilt in the machine language" claim visibly fails inside NV scope — two boards read as a different, older app. | **M** | | **MF-3** | **Dead + game-fragile logic that will misbehave.** (a) Dead legacy **AI GPS modal** handler (`api.js:2259–2290`) builds a clickable ASCII move-grid that the system directive now *forbids* the AI from ever emitting (`[GPS]`/`[MAP]` are native) — unreachable-by-contract but live, and a latent inconsistency if the model ever ignores the directive. (b) Two **Protocol-38 game literals**: `ctx === 'FNV' ? … : 'Fallout 3'` at `ui-core.js:3510` and `:3676` — these hard-label any non-FNV game (incl. the FO4 stub) as "Fallout 3." | (a) violates the AI-vs-native contract the overhaul worked to establish; retire it like `[CROSSROADS]`/`[TERMLINK]`. (b) is a design-fragmentation bug the moment a third machine exists — and both sites can just read `GAME_DEFS[ctx].label` (used two functions away). | **S** | > **Borderline (owner's call, listed as SHOULD below but arguably MF):** the tempo-dial knob renders > as a central `<button>` that does nothing on tap while the adjacent immersion dial cycles on tap > (SH-4); the caps "odometer" animates as a spinnable instrument but is a bare non-interactive field > (SH-1). Both are real "awkward affordance" hits; both were owner-directed, so they're framed as > reconsiders, not blockers. --- ## 2. THE BIGGEST CROSS-CUTTING THEMES ### Theme A — "The keystone is spent on ⅓ of its consumers." (the defining structural gap) `GAME_DEFS[ctx].identity` was authored as a rich 10-facet, 3-game data block precisely so later units could each consume one facet. **Only `theme`, `persona.blipBank`, `overseer`, `databank.mapCaption`, and (FNV-only) `cursor` are wired.** `machine`, `material`, `structuralMode`, `persona.texture`, `persona.cadence`, `ceremony.coldStart`, `motionTexture` (data), all of `audio`, all of `voice`, all of `ambient`, and `databank.recordsLabel` are **fully-authored, zero-reader dead data** for all three games. `theme.framing` is dead too. The spine exists and validates; most of the body was never built. This single fact explains FO3's thinness, the missing living world, and the un-textured motion — they are all "the consumer of facet X was never built." ### Theme B — Strong shared language, but the *shell* is where sameness bites Every instrument subsystem shares the identical `bay-board` shell (same border alpha, same 26px scanline, same copper connector-pin strip, same corner tag). Differentiation lives entirely in the **inner instrument** — which is great for the hero boards (weigh bridge vs radar vs living core) but means the **text-list boards** (SKILL BOOKS, MAGAZINES, PERKS, STATUS EFFECTS, CAMPAIGN NOTES, DIRECTIVE REGISTRY, CAMPAIGN LOG) and the **collapsed secondary strips** all read as "the same green box with a list," giving almost no signal about *which subsystem you're in*. The subsystem identity is carried by the bezel/casing, not the boards — so once you scroll past the header, rooms blur. ### Theme C — Interaction grammar is fragmented (six ways to set a number) SPECIAL = ± steppers **and** vertical drag; skills = horizontal drag + arrows (**no** stepper); HP/XP = drag + buttons; RAD = drag (two surfaces); caps = bare typed field (**no** drag/stepper, and bypasses the `stat.change` choke point); faction/affinity = ±5 steppers only (**can't** type/drag an exact value); karma = slider + tiers + drag-needle. Adjacent instruments on the *same* OPERATOR screen use opposite gestures (SPECIAL steps, sibling skills don't; SPECIAL drags vertically, skills horizontally). The repeated changelog bug-fixes around RAD-drag `touch-action` are a symptom of too many bespoke drag surfaces. Persistence itself is consistent (no save-drift) — the inconsistency is purely in *how you touch a value*. ### Theme D — Mobile is a scroll page, not a device (and the owner lives here) Beyond MF-1's gating defect: even with gating fixed, mobile is a long stacked scroll with a fixed bezel dock, not the "phone IS the device / slide-over subsystems" vision (DO-G, unbuilt). Density is Tier-1 only (owner declined Tier-2). For a mobile-primary owner this is the highest-leverage surface and the least-finished one. ### Theme E — FO3 has no machine identity yet (the promise of "three reads of one table" is unproven) `[data-game='FO3']` appears **exactly once** in 13,177 lines of CSS (a stiffer SEAT "clunk"). FO3 gets: green3 optic ✓, boot POST line ✓, save-archive header ✓, Overseer strings ✓, idle blips ✓, map caption ✓ — and **nothing else**: same bezel steel, same casing gradient, same scanlines, same glass, **no amber-wire equivalent** (loses the local-green/remote-amber split that is NV's core aesthetic idea), no cursor, no casing/serial/field-kit flavor. Switching to FO3 today feels like "New Vegas with a duller green and a couple different labels," not a Vault-Tec Pip-Boy. *This is correctly future work (DO-M), but it means the keystone architecture is unvalidated by a second real machine.* ### Theme F — The living world is absent (the "emotional core" per the plan) No deeds-as-news, no rad-storm weather, no ambient broadcasts, no intercept-at-Overseer. `identity.ambient` (Radio New Vegas / Goodsprings vs GNR / Megaton, fully authored per game) is dead data. The Ambient Runtime heartbeat that would host these is shipped and idle-capable, so the substrate exists — only the observers are missing. --- ## 3. TOP RECOMMENDATIONS (what I'd do, in order) 1. **Fix mobile gating now (MF-1) — it's the cheapest, highest-impact change in this whole document.** Restore `.panel[data-tab]:not(.tab-visible)` hiding at ≤999px, then **reorder the panel DOM so each subsystem's panels are contiguous** (today they interleave). This delivers ~80% of the DO-G mobile win for ~5% of DO-G's cost, and makes the bezel nav real on the owner's primary device. *Do this before shipping the NV overhaul under any definition.* 2. **Light up already-authored dead data before building new machines.** The cheapest immersion wins in the repo are wiring the facets that already exist: `identity.voice` (per-game empty/loading voice, DO-Q5), `identity.audio` (per-game hum/boot, DO-Q4), and `identity.ambient` → a first **DO-W** slice (deeds-as-news reading `eventLog`). These consume the keystone you already paid for and make even the *NV* machine feel more alive. High ROI, low risk. 3. **Rebuild the two legacy SETTINGS boards (MF-2)** as `bay-board`/`.tray` variants so SETTINGS stops containing two visibly-older panels. 4. **Pick one numeric-input grammar (Theme C).** Recommended: keep drag as the *expressive* gesture on every meter, add a consistent ± stepper to *every* meter (SPECIAL, skills, HP/RAD, caps), reserve typed entry for precision, and route **every** edit through a `_nativeSet*` choke point so all emit `stat.change` (fixes the caps asymmetry + the Living-Core-burst inconsistency in one move). 5. **Differentiate the shell per subsystem (Theme B).** Give each subsystem a subtle accent token (OPERATOR green, OPERATIONS amber-wire, DATABANK cyan-edge, CHASSIS warm-amber, etc.) the way `.wireboard`/`.tray`/`.dangerboard` already vary bay-board — so a text-list board still says which room it's in. Cheap, big cohesion-without-uniformity payoff. 6. **Retire the dead GPS modal + the two game literals (MF-3).** 7. **Then** invest in the big future units in this order (see §6): **DO-C ceremony** (cheap delight, consumes `ceremony.coldStart`) → **DO-W living world** (consumes `ambient`) → **DO-M FO3 machine** (validates the keystone) → **DO-G mobile casing** (after MF-1 has de-risked it). --- ## 4. PER-SUBSYSTEM FINDINGS Each board's grade is against the *"coolest/clearest/most-immersive RobCo implementation possible"* bar. ### 4.1 OPERATOR (bio-telemetry) — **A− · richest subsystem, mild instrument-idiom sprawl** Hero instruments are excellent and distinct: segmented CONDITION bar, seven analog SPECIAL needle gauges ("SEVEN-CHANNEL ANALOG ARRAY"), 13-channel VU SKILL MATRIX with amber peak markers + TAG diamonds, swing-needle KARMA gauge (+ FO3 Karma Center via `usesKarmaCenter`), reputation console with channel keycaps + mini-pin strip. Diegetic subtitle "BIOMETRIC TELEMETRY BUS · COURIER SIX" lands. - **Weak:** (a) **Instrument-idiom count is high** — bar / needle / VU / swing-needle / stepper-console all on adjacent boards. It reads as a real varied instrument panel *because* they share phosphor treatment, but it's the closest any subsystem comes to "kitchen sink." (b) **BIO-SCAN uses a crude stick figure** for the limb map — noticeably lower-fi than everything around it. (c) The interaction-grammar split (Theme C) is worst *here* (SPECIAL steps + drags vertically; skills drag horizontally, no stepper). - **Options:** *Stick figure* → (1) a proper phosphor wireframe torso/silhouette with per-limb hit zones; (2) a Vault-Boy-style line figure; (3) an X-ray/rad-plate rendering that ties to the existing #6 X-RAY FLASH feedback. *Idiom sprawl* → (1) accept it (defensible); (2) unify SPECIAL + skills into one "tuning bank" visual family with identical controls; (3) demote karma's needle to a bar to reduce needle count. **Triage:** stick figure SHOULD (S–M); idiom/grammar SHOULD (M); rest NICE. ### 4.2 OPERATIONS (quartermaster's freight console) — **A · most consistent internal language** The strongest *internally-coherent* subsystem: LOAD-CELL WEIGH BRIDGE (live needle mirroring curWt/maxWeight with nominal/heavy/SEIZED tiers), six-drawer CARGO MANIFEST with per-drawer count badges + in-drawer search + CARGO-TAG rows (USE/±qty/EQUIP/×), FIELD FABRICATION, BARTER UPLINK (amber `.wireboard`), SQUAD ROSTER, CURIO ARCHIVE vitrine. BUS-10…15 part numbers unify it. - **Weak:** (a) The **caps field on the weigh bridge is dressed as a spinnable odometer but is a bare number input** (Theme C / SH-1). (b) Drawer label "APPAREL" vs the code's `armor` category — cosmetic mismatch only. (c) On FO3 the MODS drawer correctly disappears (data-driven ✓) — good proof the manifest is game-agnostic. - **Options for caps:** (1) make the odometer genuinely drag/scrub-able; (2) add ± steppers; (3) stop animating it as an instrument if it's read-only-ish. **Triage:** SHOULD (S). ### 4.3 DATABANK (the records bay) — **A · best "wow" board in the app** CARTOGRAPHY TABLE = inline-SVG phosphor radar node-map (real gridRow/gridCol placement, fog-of-war, known-route trail, survey-ping, keyboard node traversal) — the standout diegetic surface. DIRECTIVE REGISTRY (numbered slots + status drawer + CYCLE), CAMPAIGN CHRONICLE (tape spool), CATALOG QUERY, FIELD NOTES, SERVICE TALLY (odometer bank). BUS-16…21. - **Weak:** (a) The four **secondary boards** (CHRONICLE/CATALOG/NOTES/TALLY) collapse to identical strips (Theme B). (b) `identity.databank.recordsLabel` is authored but **unconsumed** — a dead facet even for NV. (c) Text-list DIRECTIVE REGISTRY vs an OPERATOR text-list board are visually indistinguishable when scrolled (Theme B). - **Options:** per-subsystem accent (Theme B fix); give each secondary board a tiny distinguishing glyph/silhouette in its collapsed strip. **Triage:** SHOULD (M) as part of the Theme-B sweep. ### 4.4 UPLINK / Director presence — **A− · great concept, one stale-mockup evolution** Phosphor oscilloscope waveform driven by the *real* request lifecycle (idle/thinking/speaking/ listening), `LUCKY 38 RELAY · 0.417 MHz`, TRI-NODE encryption line, self-contained mobile view + carrier strip. The composer **evolved past its mockup** into a modern rounded `#composer` (`[+] ◈ OVERSEER ? ↑`) — a healthy improvement, not a defect. - **Weak:** (a) **Composer placeholder is technical/generic** — `AI> ENTER COMMAND OR ACTION (E.G. '> [THREAT] GECKOS')…` — not in the Director's voice. (b) The **Quick-Draw Holster "fire" still round-trips the AI** (`transmitMessage('Deploy …')`) — defensible as a narrative beat but worth a conscious call. (c) `identity.persona.texture`/`cadence` are authored but **unread** — the waveform doesn't yet take per-game texture, so FO3's "vault-institutional" persona is invisible. - **Options for placeholder:** (1) Director-voiced ("> Transmit when ready, Courier…"); (2) mode-aware (OVERSEER vs TERMINAL) diegetic hint; (3) rotate `identity.voice.loading`-style lines. **Triage:** placeholder SHOULD (S); persona-texture NICE (ties DO-M). ### 4.5 CHASSIS (self-diagnostic maintenance bay) — **A · the most novel identity** UNIT POWER PLANT with the LIVING CORE (orbital rings + heart + diagonal 3D ring, mirrored into the casing-top mini-core), hour-meter odometers, IDENTITY PLATE + breaker-lever read-outs, SERVICE & FAULT CONSOLE. Strongly unique; the "machine reporting on itself" fiction is the best-realized in-universe concept in the app. - **Weak:** (a) The living core has absorbed a *lot* of behaviors (10+ in one batch, then +10 more) — verify it stays legible rather than busy, and that **all** of its motion is reduced-motion-gated via JS (`_coreShouldAnimate()` exists — confirm no inline/WAAPI animation escapes). (b) breaker levers are correctly read-only (good — "users never throw a lever"). - **Triage:** reduced-motion JS-path verification SHOULD (S audit); legibility NICE. ### 4.6 SETTINGS (service access) — **B · two legacy boards drag it down** Phosphor tube rack (7 optics), Module Bay slots (SLOT 01–05 + SVC tray), CAMPAIGN CONFIGS (cartridge picker + doctrine rocker + tempo dial + RNG interlock breaker) are all strong, rebuilt hardware. - **Weak:** (a) **`#accountPanel` + `#savesPanel` are legacy plain `.panel`s** with old bar headers + inline styles (MF-2) — the clearest light-frame-≠-done hit. (b) **Part-number scheme diverges** — SETTINGS uses `SLOT 0N`, everyone else uses `BUS-NN` (arguably intentional: slots you seat vs bus lines — but decide and document). (c) **Tempo knob does nothing on tap** while immersion dial cycles (SH-4). (d) The hidden-real-input + dressed-control double pattern (immersion/tempo/doctrine/cartridge/ RNG) is sanctioned but is a standing sync-drift risk class (the `#completeRngToggle` bug precedent). - **Options for MF-2:** (1) rebuild both as `bay-board`; (2) a `.tray`/REG-PORT-style amber variant to match the ACCOUNT "REG PORT" fiction; (3) at minimum swap the old `<h2>` bar for the `bay-board` summary header + drop the inline styles. **Triage:** MF-2 must; SLOT/BUS + tempo SHOULD. --- ## 5. CROSS-CUTTING FINDINGS (design-system level) ### 5.1 Visual consistency — **strong, with concrete debt** One coherent token system (`--robco-green`, `--bezel-wire`, `--bezel-steel-*`, mobile `--d-*` density tokens, per-instrument scoped tokens). Debt: **dead `.tab-btn` CSS** (tab bar retired, 3 rules remain); **duplicate copper** (`#d9a24a` hardcoded at `5148` vs tokenized `--curio-copper` at `8568`); **raw rgba accents** bypassing tokens (`rgba(243,156,18…)`=alert, `rgba(52,152,219…)`=blue, `rgba(231,76,60…)`= danger at `5238–5266`); **two header conventions** (`.panel h2` bar vs `.panel.bay-board summary h2` plain) coexisting only because the two legacy SETTINGS panels keep the old one. **Triage:** SHOULD (S) housekeeping sweep — folds naturally into MF-2 + the Theme-B accent work. ### 5.2 Interaction consistency — see Theme C. **SHOULD (M).** ### 5.3 Accessibility & reduced-motion - **CSS reduced-motion is genuinely strong** — global `*` block zeroes animation *and* transition duration + caps iterations (`4759`); 139 keyframes, no `transition:`-only motion escapes, no `scroll-behavior:smooth`. **Caveat (verify, don't assume):** the block only zeroes duration — any **JS Web-Animations-API or inline-style animation** bypasses it. The living core, feedback waves, and Overseer scope drive motion from JS; they *appear* to self-gate (`_coreShouldAnimate`, `_scopeShouldAnimate`), but this should be spot-checked under an actual `prefers-reduced-motion` OS setting. **SHOULD (S audit).** - **Tablet input-zoom seam:** the 16px input floor is forced only at `≤480px`; a **481–999px tablet** keeps ~14px inputs → iOS focus-zoom risk. **SHOULD (S)** — move the 16px floor onto the base input rule or widen the query. - Verify `min-height:10px` at `terminal.css:2898` is a decorative meter, not an interactive control (would violate the ≥28px floor). **NICE (S).** - Literal ARIA under diegetic skins is well-maintained (tracker toggles, nav keycaps, status annunciator all carry literal labels) — no finding. ### 5.4 Diegesis / believability — **a genuine strength** Subtitles ("QUARTERMASTER'S FREIGHT CONSOLE," "THE RECORDS BAY," "SELF-DIAGNOSTIC MAINTENANCE BAY"), PN part numbers ("PN RBC-CRT-16"), the casing serial plate ("property of courier six — hands off"), the carrier/relay strip, BUS/SLOT fiction — this is the most successfully in-universe layer of the whole app. Opportunities to push further: (1) the composer placeholder (SH-4); (2) a couple of generic empty states (`NO AMMO TRACKED`, `NO FACTIONS TRACKED`, `NO ENTRIES IN MEMORY`) vs the excellent ones (`NO INCIDENTS ON RECORD — MILESTONES WILL APPEAR HERE`); (3) consuming `identity.voice.emptyStates` so the *same* empty state speaks differently on NV vs FO3. **NICE (S).** ### 5.5 Feature philosophy (AI-vs-native, player-authority) — **excellent, one dead relic** The native/deterministic conversion is thorough (THREAT/CONSULT/BIO-SCAN/LOOT/VATS/GPS/PERKS/SLEEP + all stat/skill/faction/quest edits + TERMINAL quick-logs). Player authority is well-held. The only finding is the **dead AI GPS modal** (MF-3a) and the (intentional) holster→AI hand-off. No place found where a native path would clearly be better but still round-trips. ### 5.6 Game-specific identity & FO3-adaptability — see Themes A + E. The shared language is proven and *does not fragment* per-game (good) — but FO3 is unbuilt (`DO-M`) and the keystone is unvalidated by a second machine. The two game literals (MF-3b) are the only spots that would actively *break* a third machine's labeling. --- ## 6. ROADMAP RE-SEQUENCING (roadmap authority exercised) **Observed divergence:** the plan's spine ran cleanly through the SLICE GATE (`DO-K → DO-N → DO-O`, NV, all shipped), then the program **pivoted** into the "Step 2 / Phase 3" board-reskin + feedback + ceremony + diagnostic-shell track (which over-delivered DO-P-class polish) and **skipped every unit gated on a second machine or a new atmosphere** (DO-C full ceremony, DO-M, DO-W, DO-G, DO-Q3/Q4/Q5 consumption). Net: a deeply-dressed NV machine, an unbuilt FO3 machine, no living world, a still-reload game-switch, and ~⅔ of the keystone unconsumed. **Recommended re-sequence (why each moves):** 1. **NEW #1 — MF-1 mobile gating fix (was: not on the roadmap).** *Promote above everything.* It's a near-free fix to the owner's primary-device experience and the DO-N nav's core promise. Shipping the "NV overhaul" with the nav inert on mobile undercuts the whole point. 2. **Pull DO-Q5 (empty/loading voice) + DO-Q4 (per-game audio) forward, ahead of DO-M.** They consume already-authored dead data, are low-risk, and make even NV feel more finished. The plan slotted them as post-DO-K momentum units but they never ran — run them now as cheap keystone-activation. 3. **DO-W living-world slice next (before DO-M).** It's NV-only-viable (FO3 banks already authored), consumes `identity.ambient`, and the plan itself calls it "the emotional core." Higher immersion-ROI per effort than a second machine, and it exercises the Ambient Runtime that's already shipped and idle. *Re-sequence: DO-W before DO-M.* 4. **DO-C ceremony before DO-M too.** Cheap-ish, high-delight, consumes `ceremony.coldStart` (authored, dead). Turns the jarring `location.reload()` game-switch into the eject→seat→boot moment the plan flagged as "the biggest wasted-ceremony opportunity." Do the motion verbs it needs (WAKE/FAULT/ BREATHE, DO-Q2 remainder) as part of it. 5. **DO-M (FO3 machine) after the above.** It's the biggest single unit and the keystone-validator, but it's *correctly future* — nothing about the NV overhaul's completeness depends on FO3 existing. When it runs, most of its work is "wire the ⅔ dead facets + author `[data-game='FO3']` CSS," which the items above will have partly de-risked. 6. **DO-G (mobile casing) last of the big units — and cheaper now.** MF-1 delivers most of the mobile win up front; DO-G then becomes "make the phone *feel* like the device" rather than "rescue mobile from a mega-scroll." Elevated in importance (owner is mobile-primary) but de-risked by MF-1. **One-line re-sequence:** `MF-1 → DO-Q5/Q4 → DO-W → DO-C(+DO-Q2 verbs) → DO-M → DO-G`, with the §1 must-fixes + §3 Theme-B/C sweeps interleaved as the "finish the NV machine" pass. --- ## 7. FULL TRIAGE TABLE **Effort:** S ≈ hours · M ≈ a day · L ≈ multi-day · XL ≈ a program. | ID | Finding | Triage | Effort | |----|---------|--------|--------| | MF-1 | Mobile subsystem nav doesn't gate content; 6 subsystems stack + interleave (17,127→4,218px verified) | **MUST** | S (+M reorder) | | MF-2 | SETTINGS `#accountPanel` + `#savesPanel` are legacy plain `.panel`s (old header + inline styles) | **MUST** | M | | MF-3a | Dead AI GPS modal (`api.js:2259`) unreachable-by-contract but live | **MUST** | S | | MF-3b | Two Protocol-38 game literals mislabel non-FNV as "Fallout 3" (`ui-core.js:3510/3676`) | **MUST** | S | | SH-1 | Caps dressed as spinnable odometer but bare field; typed caps bypasses `stat.change` choke | SHOULD | S | | SH-2 | Numeric-input grammar fragmentation (6 idioms; SPECIAL steps, skills don't; drag dir flips) | SHOULD | M | | SH-3 | Text-list boards + collapsed strips are cross-subsystem indistinct (per-subsystem accent) | SHOULD | M | | SH-4 | Tempo-knob no-op-on-tap vs immersion-dial-cycles-on-tap (owner-directed — reconsider) | SHOULD | S | | SH-5 | Composer placeholder + a few generic empty states not diegetic | SHOULD | S | | SH-6 | Tablet (481–999px) input-zoom seam — 16px floor only ≤480px | SHOULD | S | | SH-7 | Reduced-motion JS-path verification (WAAPI/inline bypass the CSS block) | SHOULD | S (audit) | | SH-8 | BIO-SCAN stick figure crude vs surrounding polish | SHOULD | S–M | | SH-9 | CSS housekeeping: dead `.tab-btn`, duplicate copper hex, raw rgba vs tokens, dual header convention | SHOULD | S | | NI-1 | SLOT vs BUS part-number scheme — decide/document intentional sub-identity | NICE | S | | NI-2 | Consume `identity.voice.emptyStates`/`loading` (DO-Q5) — per-game voice | NICE→SHOULD | M | | NI-3 | Consume `identity.audio` (DO-Q4) — per-game hum/boot/wake | NICE | M | | NI-4 | Verify `min-height:10px` control isn't interactive | NICE | S | | NI-5 | Living-core legibility as it accretes behaviors | NICE | S | | ST-1 | DO-M — FO3 machine identity (only 1 `[data-game=FO3]` rule; ⅔ keystone dead) | STRETCH | XL | | ST-2 | DO-W — living-world layer (deeds-as-news/weather/broadcasts; consumes `ambient`) | STRETCH | L | | ST-3 | DO-C — full cartridge eject→seat→boot ceremony (still reload+SEAT flash) | STRETCH | M–L | | ST-4 | DO-Q2 motion verbs 3/5 missing (WAKE/FAULT/BREATHE) | STRETCH | M | | ST-5 | DO-G — mobile casing / slide-over subsystems (after MF-1) | STRETCH | XL | | ST-6 | DO-Q3 — per-game cursor consumption (FO3/FO4 authored, unread) | STRETCH | M | --- ## 8. WHAT'S GENUINELY GREAT (don't touch / protect in any refactor) So the "finish it" pass doesn't sand off what works: - The **casing + bezel + keycap-nav chrome** (desktop especially) — a convincing physical device. - **CARTOGRAPHY TABLE** phosphor radar node-map — the best diegetic surface in the app. - **The living fusion core** + casing-top mini-core mirror — the most novel identity. - **The weigh-bridge / cargo-manifest** freight language — most internally coherent subsystem. - **The Director oscilloscope** tied to the real request lifecycle. - **The native-command conversion** + player-authority discipline. - **Reduced-motion CSS discipline** and **literal ARIA under diegetic skins**. - The **shared token/`bay-board` system** — the reason cohesion holds at all; the fixes above should *extend* it (accents, consumed facets), never fork it. --- *END — NV_OVERHAUL_DESIGN_AUDIT.md. Analysis/ideation only; nothing implemented. Owner reviews and picks. `planning/` is gitignored.*
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).