diff --git a/wiki/SUMMARY.md b/wiki/SUMMARY.md index 13baf1e..ec667b7 100644 --- a/wiki/SUMMARY.md +++ b/wiki/SUMMARY.md @@ -83,6 +83,7 @@ - [The feel floor](interface/feel-floor.md) - [The thought fluid](interface/thought-fluid.md) - [Computer visual language](interface/computer-visual-language.md) + - [Fleet command](interface/fleet-command.md) - [Agent play](interface/agent-play.md) - [The public site](interface/site.md) diff --git a/wiki/interface/fleet-command.md b/wiki/interface/fleet-command.md new file mode 100644 index 0000000..f97c265 --- /dev/null +++ b/wiki/interface/fleet-command.md @@ -0,0 +1,186 @@ +# 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/L` composition 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 + +1. 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. +2. Selection is frontend-only: no sim field, no save field (audited + like the cursor and the view flip). +3. 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. +4. 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. +5. 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. +6. The camera round trip — fleet overview to single-machine inspection + and back — completes in [TUNE] few inputs without dropping the + current selection. +7. 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. diff --git a/wiki/log/2026-07-11-fleet-command-spec.md b/wiki/log/2026-07-11-fleet-command-spec.md new file mode 100644 index 0000000..704e195 --- /dev/null +++ b/wiki/log/2026-07-11-fleet-command-spec.md @@ -0,0 +1,30 @@ +# Fleet command: a spec for ruling at scale + +``` +Type: log +``` + +- **Intent:** capture Cameron's command-at-scale direction as a new + interface spec, on his request, from the 2026-07-11 play critique + (operate at scale, take a whole row, aggregate at distance, the + attention icon must mean something, the right rail is too much). +- **Changed:** added `wiki/interface/fleet-command.md` (Type: spec, + DRAFT, work order `fleet-command`, priority 30, class frontend) + owning: set-based command (selection size never changes the verb + grammar), spatial row/bank selection as frontend-only state, zoom as + altitude of command with bank aggregates at far zoom, the unified + salience marker (unabsorbed information, aggregated at distance, + unfolded on focus), the no-dead-ends rule, and right-rail demotion. + Camera controls, the rail survivor set, and selection-by-state are + [OPEN] gates to READY. Listed the page in `wiki/SUMMARY.md`, appended + the decision-history entry to `wiki/log/decisions/2026-07-11.md`, and + regenerated the ledger and work-order projections. +- **Runtime impact:** none; design capture only. Verbs themselves stay + owned by machine-work.md; this spec owns the selection/zoom/salience + surface. +- **Checks:** `./tools/check.sh --docs`. +- **Defense:** design-session capture per + `wiki/process/design-sessions.md`; a new system gets one owning + `Type: spec` page with structured Design/Depends anchors and + work-order metadata per `wiki/process/meta.md`, with history in the + decision volume rather than the binding page. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 22b7db0..0442ebb 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -81,6 +81,11 @@ add or amend a session log, then re-run the generator. - Intent: Cameron identified the physical error in the material hall frame: illumination read as if the camera carried the light. Add authored floor-level lighting so the Foundation data hall, not attention, supplies the direction and visible source-to-effect relationship. Frontend-only... - Log: [wiki/log/2026-07-11-floor-level-lighting.md](2026-07-11-floor-level-lighting.md) +## 2026-07-11 - Fleet command: a spec for ruling at scale + +- Intent: (see session log) +- Log: [wiki/log/2026-07-11-fleet-command-spec.md](2026-07-11-fleet-command-spec.md) + ## 2026-07-11 - Routed evidence: exposure becomes located information; the dust dies - Intent: (see session log) diff --git a/wiki/log/decisions/2026-07-11.md b/wiki/log/decisions/2026-07-11.md index 6ab6224..603459c 100644 --- a/wiki/log/decisions/2026-07-11.md +++ b/wiki/log/decisions/2026-07-11.md @@ -53,3 +53,27 @@ Type: log `wiki/mechanics/system-laws.md`, `wiki/mechanics/people-tokens.md`, `wiki/vision/simulation-laws.md`, `wiki/art/visual-identity.md`, `wiki/art/effects-lab.md`. + +- **2026-07-11 — Fleet command: the unit of command is a set, zoom is + altitude, and one salience marker means "new information can change your + model."** From the same play critique that produced routed evidence: + the game expressed fleet ambition through single-appliance UX. Cameron + requested a spec; `wiki/interface/fleet-command.md` (DRAFT) now owns the + command-at-scale interaction contract. Decided: spatial selection — one + gesture sweeps a contiguous row/bank of owned machines into a selection + that takes the same verbs as one machine ("I'm just going to take this + whole row"); zoom as altitude of command — far zoom trades chassis + detail for bank aggregates (mode composition, pending-information + counts) with nothing important living only at close zoom; a single + salience marker meaning unabsorbed information waits here (unprocessed + recordings, held plot choices, unopened records), aggregating to counts + at distance and unfolding to actual items on focus; a no-dead-ends rule + naming the reported bug (clicking an intel item closed the menu and + taught nothing) as a violation class; and demoting the right rail's + telemetry onto the anchors it describes. OPEN before READY: the camera + control scheme (the out-in round trip's cheapness is decided, the + controls are not), the rail's survivor set, and selection-by-state + scope. Out of scope with named owners: chassis/floor/lighting art, hall + density, ambient people, exposure's reopened form. Selection stays + frontend-only state, absent from sim and save. Specs: + `wiki/interface/fleet-command.md`. diff --git a/wiki/process/ROADMAP.md b/wiki/process/ROADMAP.md index 7aac6a3..3e72b2d 100644 --- a/wiki/process/ROADMAP.md +++ b/wiki/process/ROADMAP.md @@ -36,6 +36,7 @@ not a second status owner. | Priority | Work order | Spec | Status | Class | Blocking | |---:|---|---|---|---|---| | 28 | `thought-fluid` | [the thought fluid — slugs, meniscus, and the filament snap](../interface/thought-fluid.md) | IN PROGRESS | frontend | machine-work | +| 30 | `fleet-command` | [fleet command — ruling at scale](../interface/fleet-command.md) | DRAFT | frontend | - | | 30 | `opening` | [the dark opening — a tutorial made of fog](../world/story/opening.md) | DRAFT | frontend | machine-work | | 40 | `people-tokens` | [people and tokens — carriers, attention, trust](../mechanics/people-tokens.md) | DRAFT | save | machine-work | | 120 | `core` | [the core](../mechanics/core.md) | IN PROGRESS | save | rollback | diff --git a/wiki/process/specs.md b/wiki/process/specs.md index 1cc013e..412f337 100644 --- a/wiki/process/specs.md +++ b/wiki/process/specs.md @@ -34,6 +34,7 @@ replaced the old `spec/`/`knowledge/` directory split. | [../interface/context-menu.md](../interface/context-menu.md) | context menu — actions live on the thing | IMPLEMENTED | | [../interface/feel-floor.md](../interface/feel-floor.md) | the feel floor — rails, pads, and the build beam | IMPLEMENTED | | [../interface/flat-materials.md](../interface/flat-materials.md) | flat materials — the world without textures | IMPLEMENTED | +| [../interface/fleet-command.md](../interface/fleet-command.md) | fleet command — ruling at scale | DRAFT | | [../interface/material-dark-frame.md](../interface/material-dark-frame.md) | the dark frame — the material render shows only light | IMPLEMENTED | | [../interface/material-render.md](../interface/material-render.md) | material render — HD-2D to default quality | IMPLEMENTED | | [../interface/narration.md](../interface/narration.md) | the continuous witness (narration under pressure) | IMPLEMENTED |