Spec: fleet command — ruling at scale #
Type: spec
Status: DRAFT
Status note: direction adopted 2026-07-11 from Cameron's play critique
("I should be able to operate at scale... zoom out and just take this
whole row"; the session's synthesis: the game was expressing fleet
ambition through the UX of maintaining individual basement
appliances). The interaction contract below is decided; graduating to
READY requires closing the marked [OPEN] treatments — the camera
control scheme, the right rail's survivor set, and selection-by-state
scope. Chassis/floor/lighting art, hall density/layout, and ambient
people are named out of scope here; they stay with their owning
pages.
Stage: B1 — The Basement
Work order: fleet-command
Work priority: 30
Work class: frontend
Blocked by: none
Exclusive keys:
- crates/misaligned-bevy/
- crates/misaligned-terminal/
- wiki/interface/fleet-command.md
Design:
- wiki/vision/scale.md#self-similar-scale
- wiki/vision/premise.md#the-pitch
- wiki/vision/simulation-laws.md#actions-live-on-the-thing
- wiki/vision/simulation-laws.md#justification-and-legibility
Depends on:
- wiki/mechanics/machine-work.md#spec-machine-work-delegation-visible-tokens-and-the-byproduct-network
- wiki/interface/context-menu.md#spec-context-menu-actions-live-on-the-thing
- wiki/interface/computer-visual-language.md#spec-computer-visual-language-territory-at-a-glance
- wiki/interface/views.md#spec-views-same-frame-digital-and-real-representations
- wiki/mechanics/intel.md#spec-intel-record-and-process
- wiki/mechanics/detection.md#spec-detection
- wiki/mechanics/plots.md#spec-plots-authored-manipulation-stories
Dependency notes #
The structured references above identify the contracts to re-verify. Relationship context:
machine-work.md owns the verbs themselves (WORK/THINK/LIE, intensity, focus-then-push, verbs on selections) — this spec owns the surface that builds and holds selections and what the world shows at each zoom; context-menu.md owns the per-anchor action grammar and hover verb bar this spec extends to sets of anchors; computer-visual-language.md owns the far-zoom chassis compression the aggregation level builds on; views.md owns the digital/real flip both registers must survive; intel.md owns the pending-work marker the salience system generalizes; detection.md owns the evidence and observer facts salience surfaces; plots.md owns held choice points, one of the things the marker points at.
Why this spec exists #
The standing playtest complaint (Cameron, 2026-07-11) is that the game communicates the wrong scale: the fantasy is ruling an information network, but the interaction grammar keeps the player maintaining one appliance at a time. Machine verbs landed first as single-machine controls, the camera serves close inspection over comprehension, and the right rail accumulated telemetry that belongs on the things it describes. Multi-select delegation exists in all three surfaces (machine-work.md), but nothing lets the player see the fleet as a fleet and grab it the way they think about it — "there's a whole bunch of servers, I'm just going to take this whole row."
This spec is the interaction contract for command at scale. It adds no sim system: selection, camera, and aggregation are frontend state, like the cursor and the view flip.
Behavior #
- The unit of command is a set. Every frequent machine verb (mode, intensity — machine-work.md's focus-then-push) applies identically to one machine, a hand-picked group, or a spatially grabbed bank. Selection size never changes the grammar: same keys, same verb bar, same narration shape. One machine is just a selection of one.
- Spatial selection (DECIDED 2026-07-11). The player can grab machines by where they stand, not only one by one: a drag (Bevy pointer) or cursor-anchored extension (terminal) sweeps a contiguous row or block of owned machines into one selection; agent mode names the same set operation. Taking a whole row is one gesture plus one verb press. Foreign and dead chassis inside the sweep are skipped, never silently included. Additive selection (add/remove a machine to the current set) composes with the sweep. Selection is frontend-only state — absent from sim and save, like the cursor.
- Selection by state [OPEN]. "Select all THINK machines" / "everything with pending records" is plausibly the same feature at fleet size; whether B1 ships it, and its surface, is undecided.
- Zoom is altitude of command, not loss of signal. Zooming out trades chassis detail for fleet legibility. Close: full per-machine reads (token anchors, verb bar, exact counts). Far: the computer-visual-language far-zoom kit compresses each machine to its family silhouette, and bank aggregates become the primary read — per-row/selection composition (how many WORK / THINK / LIE), summed pending-information counts, and exposure marks. A paused far frame must still say where attention is owed; nothing important lives only at close zoom. Both registers exist in both frontends and both view dialects (views.md): the terminal's far register is a denser glyph summary, not a missing feature.
- The camera serves the round trip [treatment OPEN]. The core camera loop is out-to-comprehend, in-to-inspect, and back, without ceremony and without dropping the current selection. The decided requirement is the loop's cheapness (few inputs, no re-orientation cost); the concrete control scheme — keys, pointer, framing presets, whether focus-jump animates — is open, to be closed with play captures before READY.
- One salience marker: new information that can change your model (DECIDED 2026-07-11). The attention icon means exactly one thing — unabsorbed information waits here: unprocessed recordings (intel.md's pending-work marker, generalized), a held plot choice point (plots.md), a record you have not opened. It is not a chore badge and it is not decoration; if acting on the thing cannot teach the player something or change what they would do, it does not get the marker. At distance markers aggregate to counts per machine and per bank; focusing or selecting unfolds the actual items — the records themselves, with provenance and any plot implications — in place.
- No dead ends (DECIDED 2026-07-11, from the play report). Activating a pending-information item always surfaces the underlying record, choice, or narration of what was learned. The 2026-07-11 failure — clicking an intel item closes the menu and nothing happens — is the named violation class: any interaction that consumes a click on a salience surface and teaches nothing is a bug against this spec.
- The right rail is demoted (DECIDED direction; survivor set [OPEN]). The rail stopped being a button pile under the actions-live-on-the-thing law; Cameron's critique goes further — most of its telemetry also belongs on the things and moments it describes, unfolded on focus rather than standing all day. The decided direction: the rail shrinks to a minimal always-on strip, and everything removed must be reachable on the anchor that owns it. Which readouts survive (candidates: clock/speed, audit countdown, detection bands, money) is a taste call to close before READY.
Out of scope, with owners: chassis silhouette and floor/lighting art (art/visual-identity.md, interface/computer-visual-language.md, interface/material-render.md), data-hall density and layout (world/places/basement-map.md), ambient people and their salience (mechanics/people-tokens.md, mechanics/schedules.md), and exposure's reopened world-space form (mechanics/machine-work.md).
Player surface #
- A selection readout wherever a selection exists: count, mode composition, shared intensity — visible in Bevy, terminal, and agent frames, styled per views.md's dialects.
- The hover verb bar (context-menu.md) presents the same frequent grammar for a set as for one machine; one-off actions stay in the context menu.
- Bank aggregate lines at far zoom:
W/T/Lcomposition plus pending count per row or selection; the terminal prints the same aggregate as a summary row. - Salience markers with counts at every zoom; focus unfolds items in place with provenance (legibility law: how you know, always).
Acceptance criteria #
- A contiguous row of owned machines can be swept into one selection with a single gesture and delegated (mode and intensity) with the same key presses as a single machine, in Bevy and the terminal; agent mode performs the same set operation by command. Foreign and dead chassis in the sweep are excluded, visibly.
- Selection is frontend-only: no sim field, no save field (audited like the cursor and the view flip).
- At far zoom, each owned bank/row reads its mode composition and summed pending-information count from a paused frame, in both frontends and both view dialects; at close zoom, per-machine reads are unchanged.
- The salience marker appears exactly where unabsorbed information waits (unprocessed recordings, held plot choices, unopened records), aggregates to counts at distance, and unfolds to the actual items on focus or selection.
- No dead ends: every activatable pending-information item surfaces its record, choice, or learned-narration; a click that closes a surface and shows nothing is a failing test of this criterion.
- The camera round trip — fleet overview to single-machine inspection and back — completes in [TUNE] few inputs without dropping the current selection.
- The right rail carries only the decided survivor set; every removed readout is reachable on the anchor that owns it, and nothing is reachable only through the rail.