RELEASE
planning/2.8.0/mockups/operations-console-notes.md
sha256 a3ce20285049e723 · 6678 bytes ·
original held in the private archive
# OPERATIONS — Quartermaster's Freight Console (mockup for owner sign-off)
**Files:** `operations-console.html` (self-contained, interactive) + the `operations-*.png` shots. Follows `planning/PHASE3_OPERATIONS_PLAN.md`; extends the nv-machine / operator-combined chrome (Protocol 22 — same casing/glass/bezel/board DNA, BUS series continued 10→15).
**Query params:** `?bridge=dial|beam` · `?state=heavy|seized` · `?drawer=weapon|armor|aid|mod|misc|ammo` · `?fab=open|confirm` · `?barter=open` · `?squad=open` · `?curio=open` · `?manifest=0` · `?open=none` · `?game=fo3`.
## Locked owner decisions, built in
- **Native EQUIP per manifest row** (weapons/apparel): `EQUIP` button → lit `● EQUIPPED` chip; one equipped per slot family (single-apply — the future `state.equipped` setter closes the U10 audit gap; Protocol 4/13/14 at build).
- **WEIGH BRIDGE mirrors carry weight + caps, read-only** — source fields stay on OPERATOR; painted by the same `updateMath()` pass (part-no line states it; the gauge reads the shipped `weight-over` classes, never writes).
- **Per-row qty ± steppers** (`adjItemQty` at build, Protocol 13 test).
- **ENLIST select registry-driven** from `FALLOUT_REGISTRY.companions` for the active game (FO3 frame proves it — fixes the FNV hardcode).
## The boards (board ↔ real-control mapping)
| Board | Fiction | Wraps (ids/handlers unchanged) |
| --- | --- | --- |
| BUS-10 LOAD-CELL WEIGH BRIDGE | strain-gauge scale, always-open hero; SEIZED red stamp + shudder ≥100%, amber ≥75% | read-only mirror of `display_weight`/`c_caps` via `updateMath()` |
| BUS-11 CARGO MANIFEST | six pull-drawers (one open at a time, live count badges, DRAWER-SLIDE); **the open drawer's list scrolls IN-PANEL** (`max-height` + `overflow-y:auto`, on-theme phosphor scrollbar + bottom fade — every item reachable by scrolling, NO render cap; the in-drawer search is an optional filter — owner revision superseding the "+N more" footer); requisition slip | `invFilterBar`→`setInvFilter` (same single-select), `invList`/`renderInventory` (USE/`delItem` delegation kept), add-item ids (`newItemName…Type`, autocomplete kept); AMMO drawer = `ammoSubPanel`/`ammoList`/`addAmmo`/`removeAmmo` fold-in (plan Q9) |
| BUS-12 FIELD FABRICATION | bench with per-ingredient **HAVE/NEED meters** (short = red), batch qty, FABRICATE key + diegetic confirm strip; BREAKDOWN VISE yield card | `craftRecipeSelect/Card`, `doCraft`/`doScrap` confirm gates, `scrapItemSelect/Card` |
| BUS-13 BARTER UPLINK (wire accent) | remote vendor link: vendor select + purse gauge, BUY rows (INSUFFICIENT CAPS dimmed), SELL rows (VENDOR PURSE SHORT dimmed), search + cap footer | `tradeVendorSelect`/`tradeStats`/`tradeBuySearch`/`tradeBuyList`/`tradeSellList`, `doBuy`/`doSell` |
| BUS-14 SQUAD ROSTER | roster cards (HP bar, HP/AMMO/CND/WPN/DT, affinity meter ±), ENLIST row | `squadList`/`renderSquad`, `adjustAffinity`, `removeSquadMember`, `newSquadName`+`addSquadMember` (registry-driven options) |
| BUS-15 CURIO ARCHIVE | display case, ◈ ACQUIRED / ◇ MISSING toggles, `[n/total]`; FO3 nests LINCOLN MEMORABILIA | `collectiblesDisplay`/`toggleCollectible` (label via `collectibleLabel`), `lincolnSubPanel` per `tracksLincoln` |
## Machine-language / floor rules held
Amber-on-phosphor split (BARTER + caps tile ride `--wire`, which is amber under the NV frame and falls back to local phosphor under `?game=fo3` — the `--bezel-wire` pattern); every board a collapsible `details` with a live 0i status row (`CARGO 42.5/210 LB · 1,204 CAPS` · `37 ITEMS · WEAPONS DRAWER OPEN` · `CHET — GOODSPRINGS · PURSE 300` · `2 ACTIVE · AVG AFF 60%` · `7/20 SNOW GLOBES`); copper connectors `background-repeat:round`; centering rule on the drawer bank/squad grid/readouts; motion (DRAWER-SLIDE, WEIGH-NEEDLE SEAT, SEIZED shudder, meter fills) all plain animation → reduced-motion collapses to resting frames; ≥28px targets (drawers 46px, USE/±/EQUIP/BUY/SELL/± ≥28), 16px inputs; zero horizontal overflow verified in-shot at 360/412/1440 for every state. SEIZED also flips the board LED, casing FAULT lamp, and bezel telemetry (`⚠ … CARGO 231/210 LB — SEIZED`).
## The one real style choice — WEIGH BRIDGE variant
- **DIAL** (default): half-moon strain gauge with green/amber/red zone arc + needle.
- **BEAM** (`?bridge=beam`): a load beam that physically sags with cargo weight — the cargo block rides the beam's midpoint down; green → amber (heavy ≥75%) → red + SEIZED stamp when over. Load-state progression rendered for the owner: `?state=light|mid|heavy|seized` (`operations-beam-*-412.png` board crops + `operations-beam-seized-360.png`).
Everything else executes the plan's identity faithfully (drawer bank, HAVE/NEED meters, amber barter) rather than offering variants.
## Manifest row-style variants (owner pick — 2026-07-05 request)
The owner locked the BEAM bridge (live proportional bend at build) and asked for punchier list treatments. Three variants via `?rowstyle=` (absent = the plain baseline in `operations-412.png`); all keep the in-panel scroll + every row control (EQUIP/± qty/USE/✕, name/wt/val/type), ≥28px targets:
- **`?rowstyle=tag` — CARGO TAG:** rows are punched freight tags (pointed left end + eyelet, dashed perforation rail above the controls); the equipped tag turns amber with a rotated **IN SERVICE** stamp.
- **`?rowstyle=ledger` — LEDGER / PUNCH-CARD:** dense zebra register — stamped `001` index column, dot leaders from name to figures, vertical punch-hole column; the equipped row flips to **inverse video** (bright phosphor block, dark text/controls).
- **`?rowstyle=rack` — INSTRUMENT RACK:** each row a bracketed instrument module — status LED block (amber-lit when equipped), a **weight heat-bar** under the meta (amber ≥5 LB), keycap-styled controls, amber corner brackets on the equipped module.
Shots: `operations-rows-{tag|ledger|rack}-{360|412|desktop}.png` (board crops; a deliberately over-long item name in row 4 proves wrap behavior).
## Notes / defaults chosen
- Owner revision (2026-07-05): the manifest render cap is DROPPED in favor of bounded in-panel scroll (list `max-height` 342px mobile / 420px desktop) — the page never grows, all items reachable in place; drawer count badges are computed from the data. BARTER's shipped 40-cap footer stays as-is (it's the shipped pattern for the remote catalog).
- Mobile default-open = the two heroes only (plan §4); desktop opens all boards two-up with the Director column.
- `?open=none` = the 0i short-stack proof; a "remember last-open drawer" MetaStore pref is recommended at build (UI-6).
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).