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

operations-notes.md



RELEASE

planning/2.8.0/mockups/operations-notes.md

sha256 afb54a760fd7b202 · 7840 bytes · original held in the private archive

# OPERATIONS — Quartermaster's Freight Console · mockup notes **Source:** `planning/mockups/operations-freight-console.html` (dedicated file, mirroring the tempo-dial / module-bay split) **Plan:** `planning/PHASE3_OPERATIONS_PLAN.md` (§6 mockup brief) · HEAD `f0f54a9` · mockup only, nothing committed, no source touched. **Query params:** `?game=fnv|fo3` · `?load=normal|heavy|over` · `?bridge=a|b` · `?drawer=weapon|armor|aid|mod|misc|ammo|all` · `?open=default|none|all|cargo,fab,barter,squad,curio` · `?confirm=fab` --- ## Locked owner decisions built in - **Q3 = Option B** — a real native **EQUIP** control on every weapon/apparel manifest row (`▸ EQUIP` → lit `◉ EQUIPPED — IN HAND / WORN`, one per category). A slim read-only **LOADOUT echo** strip sits at the top of the CARGO board so the current loadout is visible at a glance (optional garnish — the control itself is the Q3 deliverable). - **Q2 = yes** — the **LOAD-CELL WEIGH BRIDGE** hero mirrors carry weight + caps, read-only; source of truth stays OPERATOR (`display_weight` / `c_caps`), painted by the same `updateMath()` pass. The caps mirror is an amber **requisition-credit odometer**. - **Q6 = yes** — per-row **quantity `[−] n [+]` steppers** (16px input, 28px+ buttons); 0 removes the row (the eventual `adjItemQty(idx, delta)` helper). - **Q7** — the squad **ENLIST select is registry-driven** (`FALLOUT_REGISTRY.companions`); the FO3 frame shows FO3 companions, fixing the shipped FNV hardcode in passing. ## The two owner-pick variants — WEIGH BRIDGE instrument style The one genuine style choice in the plan (the 1-of-1 hero instrument). Both variants share the same readouts (LB / % / status word), zone colors (green < 75% · amber ≥ 75% · red SEIZED ≥ 100%), the SEIZED hazard strip + one-shot SHUDDER, and the caps odometer: - **Variant A — DIAL GAUGE** (`?bridge=a`, default): butcher's-scale arc face with green/amber/red zone arcs, tick marks, and a needle that **SEATs** (overshoot spring) to the load on paint. - **Variant B — BEAM BRIDGE** (`?bridge=b`): a freight platform deck that visibly **bows under load** (SVG bend ∝ load %), a segmented strain bar, and an amber 7-seg LCD readout. Everything else executes the planned identity faithfully (drawer bank, fab bench, amber barter, roster, curio). ## Board ↔ real-control mapping (id-preservation contract, Protocol 22) | Board | Fiction | Wraps (ids stay, handlers stay) | | --- | --- | --- | | BUS-10 LOAD-CELL WEIGH BRIDGE | strain-gauge freight scale + caps odometer | **read-only mirror** — new mirror element painted inside `updateMath()` where `display_weight` is set; reads the existing `weight-heavy/critical/over` body classes, never sets them. Zero new state. | | BUS-11 CARGO MANIFEST | six/seven-drawer pull-drawer bank + tray | `invFilterBar` → drawer bank (taps call `setInvFilter()` verbatim; still single-select — ALL CARGO drawer keeps the shipped `all` filter reachable); `invFilterMods` → MODS drawer, hidden by the existing `_updateContextPanels()` `hasWeaponMods` gate; `invList` → manifest rows (`renderInventory()` template edit, same `data-use`/`data-idx` delegation); `newItemName/Qty/Weight/Value/Type` + `addItem()` → REQUISITION SLIP; AMMO drawer surfaces `ammoSubPanel/ammoList/newAmmoType/ammoCalibers/newAmmoCount` + `renderAmmo/addAmmo/removeAmmo` in place of the item list. | | BUS-12 FIELD FABRICATION | fabrication bench + BREAKDOWN VISE | `craftPanel/craftRecipeList/craftRecipeSelect/craftRecipeCard/craftQty_<i>` + `renderCraft/renderCraftCard/doCraft` (confirm-gated, mocked by the `?confirm=fab` frame); vise = `craftScrapList/scrapItemSelect/scrapItemCard/scrapQty_<i>` + `renderScrapCard/doScrap`. HAVE/NEED meters visualize the data `_craftPrepare().missing` already computes. | | BUS-13 BARTER UPLINK (amber) | remote vendor channel "over the wire" | `tradePanel/tradeHeader/tradeVendorSelect/tradeStats/tradeBuySearch/tradeBuyList/tradeSellList` + `renderTrade/setTradeVendor/renderTradeBuyList/renderTradeSellList/doBuy/doSell`. Buy rows dim on insufficient caps, sell rows dim on short vendor purse (existing `afford`/purse logic). The 40-cap "+N more — refine search" footer is the shipped pattern, echoed here. | | BUS-14 SQUAD ROSTER | companion duty roster + ENLIST | `squadList` + `renderSquad/adjustAffinity/removeSquadMember`; `newSquadName` + `addSquadMember()` — select populated from `FALLOUT_REGISTRY.companions` (Q7). | | BUS-15 CURIO ARCHIVE | sealed display case | `collectiblesSubPanel/collectiblesDisplay` + `renderCollectibles/toggleCollectible` (acquired-first split, `[n/total]`, game label from `collectibleLabel`); `lincolnSubPanel/lincolnMemorabiliaDisplay` FO3-gated by `tracksLincoln`. | New write paths in the build (owner-approved additions, Protocol 4/13/14): `adjItemQty` (steppers) and the native EQUIP setter (closes the U10 `state.equipped` audit gap). Everything else is a reskin — no handler forked, no state semantic changed. ## Mobile / no-infinite-scroll mechanics (proven in the frames) - **0i short stack:** heroes open, FAB/BARTER/SQUAD/CURIO collapsed to live one-line `.panel-substatus` LED rows (`operations-collapsed-360.png` = the full phone proof: gauge + five status rows). - **Drawer bank:** one drawer open at a time, per-drawer count badges, incomplete rows center (AMMO centers alone on its wrapped row at 412). - **In-drawer search + cap 50:** MISC (63 entries) renders 50 + `+13 MORE — REFINE SEARCH TO REACH THE REST` (`operations-drawer-misc-cap-412.png`); typing `scrap` narrows to `SHOWING 2 / 2` (`operations-drawer-misc-search-412.png`). - **ALL CARGO drawer** (90 entries) also exercises the cap — the worst case is bounded by construction. ## Verification record - **Zero horizontal overflow:** every mobile frame asserted `document.documentElement.scrollWidth === window.innerWidth` at 360 and 412 (all OK, logged by the shoot script). - **Zero console errors** across all 27 frames. - **Tap targets:** all buttons ≥ 28px (board summaries 44px, drawers ≥ 58px, keycaps 34px+); **all inputs 16px** (search, slip fields, qty steppers, vendor/recipe selects). - **Reduced motion:** every verb is a plain `animation` (WEIGH-NEEDLE-SEAT, DRAWER-SLIDE, strain/meter seat, over-encumber SHUDDER, lamp pulses) — the global `prefers-reduced-motion` block collapses each to its resting frame; the file carries the same block as the app. - **Desktop:** two-up `.span2` bay grid under the glass + the permanent Director column (nv-machine-desktop framing) at ≥ 1200px; desktop-only rules ride `min-width` inside this standalone mock — the build uses the Suite 129 `(hover:hover) and (pointer:fine)` gate. - **Game-agnostic:** `?game=fo3` swaps sub-head, drawer bank (MODS hidden), recipes (no breakdowns → empty-state), vendors, companions, BOBBLEHEADS 20 + LINCOLN sub-board — all from the data object, no feature branches (the build reads `GAME_DEFS`/registry). ## Screenshot index State 1 full stack: `operations-default-360/412.png`, desktop `operations-desktop.png` + `operations-desktop-boards.png` (all boards open, FAB+BARTER two-up). State 2 drawers: `operations-drawer-aid-412.png`, `operations-drawer-misc-cap-412.png`, `operations-drawer-misc-search-412.png` (WEAPONS drawer = the default frames). State 3 ammo: `operations-drawer-ammo-360/412.png`. State 4 bridge: `operations-bridge-{a,b}-{normal,heavy,seized}-412.png` + `operations-bridge-{a,b}-desktop.png`. State 5 fab: `operations-fab-360/412.png`, `operations-fab-confirm-412.png`. State 6 barter: `operations-barter-360/412.png`. State 7 squad: `operations-squad-412.png`. State 8 collapsed: `operations-collapsed-360.png`. Curio: `operations-curio-412.png`. State 10 FO3: `operations-fo3-412.png`, `operations-fo3-curio-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).