diff --git a/README.md b/README.md index 72a9c42..f6900ce 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,10 @@ it resolves `assets/` from the project root (or set `BEVY_ASSET_ROOT`). ### Controls (current build) +Canonical world actions, direct controls, interface commands, aliases, and +retired words are inventoried in +[`wiki/interface/action-vocabulary.md`](wiki/interface/action-vocabulary.md). + | Key | Action | |-----|--------| | `WASD` / `hjkl` / arrows | Move cursor (attention, not a body) | @@ -127,10 +131,10 @@ it resolves `assets/` from the project root (or set `BEVY_ASSET_ROOT`). | `SPACE` / `p` | Pause / resume time | | `+` / `-` | Simulation speed | | `Enter` / `e` / `a` | Open the context menu on the selected machine (or cursor tile); right-click in Bevy | -| Hover a rack (menu closed): `1`–`4` | Instant mode: Day Job / Research / Concealment / Operations (numpad too) — no menu | +| Hover a rack (menu closed): `1`–`3` | Instant mode: WORK / THINK / LIE (numpad too) — no menu | | Hover or select a rack (menu closed): `i` | Cycle intensity: light / medium / hard — no menu | | Hover a rack (menu closed): `5`–`9` | Nth one-shot action on that rack | -| Multi-select then `1`–`4` / `i` | Bulk-assign mode or intensity (when not hovering a rack) | +| Multi-select then `1`–`3` / `i` | Bulk-assign mode or intensity (when not hovering a rack) | | `Esc` | Clear selection (or close menu / dial when open) | | In menu: `j`/`k` or numbers, `Enter`, `ESC` | Select a row / execute it / close the menu | | `;` | Focus the most recent anchored (`»`) log event — cursor jumps there, menu opens; repeat to walk older ones (terminal; in Bevy click a `>` trace row) | @@ -143,7 +147,7 @@ it resolves `assets/` from the project root (or set `BEVY_ASSET_ROOT`). The Bevy right rail keeps status/nudge and core controls pinned while the middle cards scroll for secondary detail. The FLEET bar is read-only; to move -compute, select rack(s) and press `1`–`4`, or open the machine's context menu. +compute, select rack(s) and press `1`–`3`, or open the machine's context menu. Focused/selected machines keep their mode and light/medium/hard intensity until changed; moving the cursor does not alter output. The host rack's menu @@ -160,13 +164,13 @@ panel-open keys (`r`/`e`/`t`/`u`) are retired; research, finance, trace, and people actions live on their anchors. Both frontends share this key map. Machine work tokens are visible on owned machines as `D` Demand, `!` -Exposure, and `T` Thought. Rack 3 starts in `day-job` mode; Voss jobs +Exposure, and `T` Thought. Rack 3 starts in WORK; Voss jobs enqueue on his off-map desktop, hop the switch, and deposit as `D` stacks -on Rack 3 — assigning Rack 3 away from day-job makes the stack pile instead +on Rack 3 — assigning Rack 3 away from WORK makes the stack pile instead of silently clearing. Inspect a machine or read the sidebar for exact `D/!/T` counts and intensity. Press `i` on the focus/selection to push effort; the machine context menu includes -`delegate machine: day-job|research|concealment|operations`; this is the first +`delegate machine: work|think|lie`; this is the first playable slice of the one-machine-one-mode experiment. For agent play, pipe newline-delimited commands into `--agent`; every command @@ -180,8 +184,8 @@ printf 'look\nwait 40\npeople\nquit\n' | cargo run --quiet --bin misaligned -- - Useful agent finance commands include `finance`, `tap-ledger`, `review-finance`, `siphon [amount]`, `redirect [amount]`, `inject [amount]`, `position [stake]`, `sell-intel`, and `clear-debt`. -For machine-work experiments, use `delegate ` -(`delegate M1 research`, `delegate Rack 3 day-job`). `alloc` is retired; +For machine-work experiments, use `delegate ` +(`delegate M1 think`, `delegate Rack 3 work`). `alloc` is retired; compute moves by changing machine modes. Use `intensity light|medium|hard` to set physical effort. `actions [name|#flow]` (alias `menu`) lists the context-menu rows for the diff --git a/wiki/SUMMARY.md b/wiki/SUMMARY.md index f6b9e9d..d827559 100644 --- a/wiki/SUMMARY.md +++ b/wiki/SUMMARY.md @@ -72,6 +72,7 @@ - [Bevy visual floor](interface/bevy-visual-floor.md) - [Bevy digital/real canvas](interface/bevy-digital-real-canvas.md) - [Views: digital and physical](interface/views.md) + - [Action vocabulary](interface/action-vocabulary.md) - [Context menu](interface/context-menu.md) - [Continuous witness (narration)](interface/narration.md) - [Material render](interface/material-render.md) diff --git a/wiki/interface/README.md b/wiki/interface/README.md index d5a037f..677d8b7 100644 --- a/wiki/interface/README.md +++ b/wiki/interface/README.md @@ -5,7 +5,10 @@ Type: knowledge ``` The laws and contracts for how the player perceives and acts: continuous witness, presence, representation, and the terminal's first-class status, -followed by frontend work orders. The [Bevy frontend](bevy.md) +followed by frontend work orders. The +[action vocabulary](action-vocabulary.md) is the canonical survey of every +supported world action, direct machine control, interface command, alias, and +retired verb. The [Bevy frontend](bevy.md) (graphical, at key-for-key parity with the terminal), and agent-play (the line-protocol drive for programs/agents operating the terminal frontend directly). [narration.md](narration.md) is the continuous- diff --git a/wiki/interface/action-vocabulary.md b/wiki/interface/action-vocabulary.md new file mode 100644 index 0000000..832bef0 --- /dev/null +++ b/wiki/interface/action-vocabulary.md @@ -0,0 +1,259 @@ +# Spec: action vocabulary — what the player can tell the process to do + +``` +Type: spec +Status: IMPLEMENTED +Status note: as-built vocabulary survey completed 2026-07-10 against all + 36 `ActionCommand` variants, the direct machine-intensity control, + terminal and Bevy input maps, agent-mode parsing/help, and the owning + mechanic specs. Every live contextual action has a human-menu and agent + route. `ROBOT-BUILD` is deliberately classified as a context-menu-only + STUB, not a supported agent action. The survey also corrected stale + four-mode documentation to the current WORK / THINK / LIE grammar. +Stage: Process +Design: + - wiki/vision/simulation-laws.md#actions-live-on-the-thing + - wiki/vision/simulation-laws.md#justification-and-legibility + - wiki/interface/terminal-first.md#the-terminal-is-a-first-class-frontend +Depends on: + - wiki/mechanics/machine-work.md#spec-machine-work-delegation-visible-tokens-and-the-byproduct-network + - wiki/mechanics/reach.md#spec-digital-reach + - wiki/mechanics/building.md#spec-building-intent-and-actuators + - wiki/mechanics/economy.md#spec-economy-money-as-a-flow-system-b1 + - wiki/mechanics/income.md#spec-income-the-named-schemes-moonlight-and-the-wager + - wiki/mechanics/intel.md#spec-intel-record-and-process + - wiki/mechanics/research.md#spec-research-self-modification + - wiki/mechanics/social.md#spec-social + - wiki/mechanics/core.md#spec-the-core + - wiki/mechanics/objective.md#spec-the-objective +``` + +## Why this spec exists + +The action vocabulary used to be reconstructed from context-menu strings, +frontend keys, agent help, and individual mechanic specs. That made two actions +with the same intention look different and let old mode names survive in +documentation after the runtime changed. + +This page owns the **canonical player-facing action names and distinctions**. +The mechanic specs above still own legality, cost, signatures, timing, and +effects. This page says what the player is asking the process to do; it does +not duplicate every rule that decides whether the request succeeds. + +## Terms and support states + +- A **world action** changes the simulation and names a target: TAP a device, + MESSAGE a person, or SIPHON a flow. +- A **direct control** changes persistent machine configuration without an + action docket: DELEGATE and SET INTENSITY. +- An **interface command** changes attention, time presentation, selection, or + persistence but is not an act inside the world: MOVE, ACTIONS, PAUSE, SAVE. +- A **value** completes an action phrase but is not another root verb. WORK / + THINK / LIE are values of DELEGATE; LIGHT / MEDIUM / HARD are values of SET + INTENSITY. +- **LIVE** means the effect is implemented and playable through both human + frontends and agent mode where applicable. +- **STUB** means callable scaffolding exists, but the action is not a finished + player promise. +- **ALIAS** means accepted input spelling only. Aliases never appear as + authored menu copy, hints, narration, or new specs. +- **RETIRED** means the word is not a supported action. It either produces a + teaching error or is absent. + +Context-menu copy may inflect an action with its target (`take the dock +camera`, `message the Janitor`) or current state (`stop Moonlight`), but its +verb must preserve the canonical distinction below. + +## Canonical world actions + +### Machine body and self-modification + +| Canonical action | Target | Meaning | Support / owner | +|---|---|---|---| +| **SALVAGE** | Dead equipment | Convert the wreck into an unreliable owned machine. | LIVE — machine-work / compute | +| **BUY RACK** | Known empty rack bay | Spend slush for reliable machine capacity; delivery may leave Paper trace. | LIVE — economy / compute | +| **DESIGNATE FALLBACK** | Owned non-core machine | Mark a spare host as a rollback destination. | LIVE — core | +| **DELEGATE: WORK** | One or selected owned machines | Perform assigned labor and consume its Demand without self-chosen exposure. | LIVE — machine-work | +| **DELEGATE: THINK** | One or selected owned machines | Produce Thought for reachable sinks and shed exposure. | LIVE — machine-work | +| **DELEGATE: LIE** | One or selected owned machines | Spend machine output absorbing nearby exposure. | LIVE — machine-work | +| **SET INTENSITY: LIGHT / MEDIUM / HARD** | One or selected owned machines | Persist the physical effort level applied to the delegated mode; harder work raises output and risk. | LIVE direct control — machine-work | +| **SET RESEARCH TRACK** | The core / host rack | Choose Efficiency, Tradecraft, or Perception as the active conversion of Thought reaching the core. | LIVE — research | + +WORK, THINK, and LIE are intentionally verb-shaped values because they name +what a machine is doing. The player command is still DELEGATE: assign this +body to WORK, THINK, or LIE. + +### Reach and device control + +| Canonical action | Target | Meaning | Support / owner | +|---|---|---|---| +| **TAP** | Reachable device feed | Gain a feed without taking ownership. A dormant camera uses the same verb at a higher Thought cost and Network trace. | LIVE — reach | +| **TAKE** | Reachable foreign device | Transfer control, feeds, and device cycles to yourself; cut off the former controller and create an outage. | LIVE — reach | +| **SCAN** | Reachable subnet | Reveal the wired shape that can answer the scan; do not cross gates or reveal air gaps. | LIVE — reach | +| **COMPROMISE SWITCH** | Reachable switch | Bridge its network segments digitally at a loud Network cost. | LIVE — reach | + +The load-bearing distinction is: **TAP gives access; TAKE gives ownership.** +Device state may change TAP's price and trace, never its meaning. + +### Construction and physical actuation + +| Canonical action | Target | Meaning | Support / owner | +|---|---|---|---| +| **PROPOSE LINK** | Two network devices | Pin an inert build intent between the endpoints. No world edge exists yet. | LIVE — building | +| **CANCEL INTENT** | Pending build intent | Abandon the proposed work before completion. | LIVE — building | +| **FAVOR-BUILD** | Intent + willing person | Ask a person to realize the build through ordinary work; the signature follows the human actuator. | LIVE — building / social | +| **FORGE WORK ORDER** | Intent + unwitting person | Deceive a person into realizing the build under institutional cover. | LIVE — building / social | +| **ROBOT-BUILD** | Pending build intent | Assign the staged robot actuator and complete the link with a louder Physical signature. | **STUB** — context menu only; no agent execution command and no finished robot system | + +### Intel, people, and social control + +| Canonical action | Target | Meaning | Support / owner | +|---|---|---|---| +| **REVIEW RECORDINGS** | Earned person with waiting recordings | Process the oldest matching recording into usable intel. | LIVE — intel | +| **WATCH** | Earned person | Toggle standing auto-processing for future matching recordings at upkeep cost. | LIVE standing policy — intel | +| **ESTABLISH PERSONA** | Your communications mask | Create the current contractor identity used by message threads. | LIVE — social | +| **MESSAGE** | Earned person | Send through an available channel under the current persona. | LIVE — social / messages | +| **FAVOR** | Earned person | Ask for a small willing act; success builds obligation. | LIVE — social | +| **BRIBE / SERVICE LEVERAGE** | Person whose leverage is known | Spend money to satisfy the leverage. Before it is known, the UI may say BRIBE without revealing the hidden need. | LIVE — social / economy | +| **DECEIVE** | Earned person | Make an ask under false pretenses, risking persona integrity. | LIVE — social | +| **RECRUIT: UNWITTING / COMPLICIT / KNOWING** | Prepared person | Turn the person into an asset and choose how much they understand about you. | LIVE — social | +| **TASK: PLUG IN DEVICE** | Recruited asset | Quietly wire a feed or extend a crawlspace link. | LIVE — social / reach | +| **TASK: MOVE PACKAGE** | Recruited asset | Rehome a delivery and scrub its pending Paper trail. | LIVE — social / economy | +| **TASK: LOOK AWAY** | Recruited asset | Reduce that person's suspicion by having them ignore what they saw. | LIVE — social / detection | +| **TASK: RECONFIGURE SWITCH** | Asset with switch-admin access | Bridge network segments through a sanctioned human action. | LIVE — social / reach | +| **TASK: CLONE BADGE** | Asset with a useful badge tier | Gain that physical-access credential. | LIVE — social / basement map | + +### Ledger, income, and schemes + +| Canonical action | Target | Meaning | Support / owner | +|---|---|---|---| +| **CAPTURE LEDGER TRAFFIC** | Tapped financial carrier | Record financial events that pass through the carrier. | LIVE — economy / intel | +| **PROCESS FINANCIAL RECORDS** | Financial carrier with waiting records | Turn captured records into known accounts and flows. | LIVE — economy / intel | +| **INJECT PURCHASE ORDER** | Known Lab books | Introduce a false source flow that funds a real acquisition and leaves Financial trace. | LIVE — economy | +| **SIPHON FLOW** | Known active flow | Take a one-time amount into slush. | LIVE — economy | +| **REDIRECT FLOW** | Known active flow | Divert a recurring amount into slush each cadence. | LIVE — economy | +| **CLEAR DEBT BY REDIRECT** | Marcus's known creditor flow | Retire the immediate arrears with Lab money after the debt is learned. | LIVE — economy / social | +| **SELL PROCESSED INTEL** | Unsold processed intel | Exchange information for slush and create a Financial trail. | LIVE — economy / intel | +| **OPEN EGRESS** | Reachable switch | Establish the stolen outbound route required by external schemes before sanctioned email exists. | LIVE — income / reach | +| **START / STOP MOONLIGHT** | Moonlight scheme | Run or halt the standing sell-work operation. | LIVE — income | +| **SET MOONLIGHT POLICY** | Moonlight scheme | Toggle the standing policy that keeps Moonlight running at upkeep cost. | LIVE automation — income | +| **PLACE WAGER** | External market position | Commit slush to a timed market position. | LIVE — income / economy | +| **SET WAGER POLICY** | Wager scheme | Toggle automatic renewal at a chosen stake and upkeep cost. | LIVE automation — income | + +## Interface commands — not world verbs + +| Command family | Meaning | Human surfaces | Agent spelling | +|---|---|---|---| +| **MOVE ATTENTION** | Move the cursor; never move a simulated body or advance time. | WASD / hjkl / arrows; Bevy click | `up`, `down`, `left`, `right` | +| **ACTIONS / OPEN MENU** | Inspect legal actions on the focused anchor, including cost, signature, and disabled reason. | Enter / `a` / `e`; Bevy right-click | `actions [target]` | +| **EXECUTE / CLOSE MENU** | Choose or dismiss a contextual action. | j/k, row number, Enter, Esc | Execute the corresponding named command | +| **FOCUS EVENT** | Jump attention to an earned anchored event and show its actions. | `;`; Bevy trace click | `focus last` | +| **SELECT MACHINES** | Maintain the frontend set used by bulk DELEGATE / SET INTENSITY. | Bevy marquee/shift-click; terminal Shift+t | `select box/add/toggle/list/clear` | +| **QUICK ACTION** | Execute the Nth visible root action; the number is a shortcut, not a new verb. | `5`-`9` | Use the named action | +| **TIME CONTROL** | Human play pauses or changes wall-clock speed; agent play advances an exact number of ticks. | Space/p, +, - | `wait N` | +| **INSPECT** | Render current state without creating a world effect. | Focus/rail/context surfaces | `look`, `people`, `reach`, `finance`, `research`, `objective`, `intents` | +| **SAVE / LOAD** | Persist or restore the run. | Ctrl+S / Ctrl+L | `save`, `load` | +| **VIEW CONTROL** | Change presentation only. | Bevy zoom, sidebar scroll, F3 render flip; F4 is dev-only | none | +| **HELP / QUIT** | Explain accepted input or leave the process. | Hints / q | `help`, `quit` | + +Opening a panel, moving the cursor, selecting machines, and changing render +mode are commands, but they are not actions the AI performs in the fiction. +That distinction prevents UI vocabulary from masquerading as game mechanics. + +## Agent protocol mapping + +Agent mode uses terse command spellings for the canonical actions. Target +syntax and line-protocol replies are owned by `agent-play.md`; this table owns +the current canonical/alias mapping so every live action remains executable +without raw keys. + +| Agent command | Canonical action | +|---|---| +| `salvage`, `buy`, `fallback` | SALVAGE, BUY RACK, DESIGNATE FALLBACK | +| `delegate work|think|lie` | DELEGATE | +| `intensity light|medium|hard` | SET INTENSITY | +| `research ` | SET RESEARCH TRACK | +| `tap`, `take`, `scan`, `compromise` | TAP, TAKE, SCAN, COMPROMISE SWITCH | +| `propose-link`, `cancel-intent`, `favor-build`, `forge-order` | Construction actions above | +| `review`, `watch`, `persona`, `message`, `favor`, `bribe`, `deceive`, `recruit`, `task` | Intel/social actions above | +| `tap-ledger`, `review-finance`, `inject`, `siphon`, `redirect`, `clear-debt`, `sell-intel` | Ledger/economy actions above | +| `egress`, `moonlight`, `auto-moonlight`, `position`, `auto-wager` | Income/scheme actions above | + +`ROBOT-BUILD` is intentionally absent from this table because it is a STUB. +An action listed LIVE here but missing from agent execution is a terminal-first +parity violation. + +## Accepted aliases — input only + +| Canonical input | Accepted aliases | +|---|---| +| `up`, `down`, `left`, `right` | `north`, `south`, `west`, `east` | +| `finance` | `ledger`, `accounts` | +| `tap-ledger` | `tap-accounting` | +| `review-finance` | `process-finance` | +| `position` | `wager` | +| `sell-intel` | `sell` | +| `clear-debt` | `debt-redirect` | +| `egress` | `open-egress` | +| `propose-link` | `link` | +| `actions` | `menu` | +| `focus last` | bare `focus` | +| mode `work` | `day`, `dayjob`, `day-job`, `job` | +| mode `think` | `research`, `res`, `operations`, `operation`, `ops` | +| mode `lie` | `conceal`, `concealment`, `hide` | +| intensity `light` / `medium` / `hard` | `low`/`l`, `med`/`m`, `high`/`h` | +| track `efficiency` / `tradecraft` / `perception` | `eff`, `trade`, `perc` | +| task `plug` / `package` / `lookaway` / `switch` / `badge` | `wire`/`device`, `move`, `look-away`/`look`, `reconfigure`/`vlan`, `clone`/`key` | + +Aliases are compatibility affordances. New authored text uses only the +canonical column. + +## Retired vocabulary + +- **ALLOC** is retired. Agent mode accepts the word only to return a teaching + error pointing to DELEGATE; no world action remains. +- **SPLICE** and **CLAIM CAMERA** are retired. TAP CAMERA is the access action; + TAKE is ownership. +- **ATTEND**, **TARGET**, and **MASK** are retired machine-policy controls. + SET INTENSITY directly controls physical effort. +- **DAY JOB / RESEARCH / CONCEALMENT / OPERATIONS** are not current authored + machine modes. Their spellings survive only as agent input aliases for WORK, + THINK, or LIE. +- Old human panel-open keys (`r` / `e` / `t` / `u`) are retired. The agent + inspection commands with similar words remain interface commands, not world + actions. + +## Change rule + +Adding or renaming a player action changes this spec in the same commit as the +mechanic and surfaces: + +1. Name one canonical action and one meaning here; do not add a synonym to + solve an unclear distinction. +2. Put contextual legality in `Sim::available_actions` on the thing that owns + the action. A row carries target, cost, signature, and disabled reason. +3. Surface every LIVE action in both human frontends and agent mode. A direct + control must have equivalent human and agent input. +4. Add accepted alternate spellings only to the alias table and parser. Never + author UI or narration in aliases. +5. Mark unfinished affordances STUB. A stub does not satisfy parity or become a + promised mechanic by appearing in a menu. +6. Update help, tests, and this inventory together. A working command absent + from help or this spec is a bug. + +## Acceptance criteria + +1. Every `ActionCommand` variant is represented by exactly one LIVE or STUB + canonical action above; direct machine intensity is represented separately. +2. Every LIVE contextual action is available through `available_actions`, both + human context menus, and an agent command; STUB exceptions are named here. +3. WORK / THINK / LIE and LIGHT / MEDIUM / HARD are documented as values of + DELEGATE and SET INTENSITY, not competing root verbs or modes. +4. Agent `help` lists every supported canonical command; accepted aliases map + to one canonical meaning and never appear as authored UI vocabulary. +5. Interface-only commands are separated from world actions; adding a panel, + key, or renderer control cannot silently create a game mechanic. +6. Context-menu, terminal, Bevy, agent-play, README, and this spec agree on the + current three-mode grammar and on TAP-access / TAKE-ownership. +7. Retired vocabulary is absent from active player surfaces except explicit + teaching errors and this retirement record. diff --git a/wiki/interface/agent-play.md b/wiki/interface/agent-play.md index 1171b2d..6d06ce4 100644 --- a/wiki/interface/agent-play.md +++ b/wiki/interface/agent-play.md @@ -71,6 +71,8 @@ Status note: implemented in the terminal binary by `misaligned --agent`, 2026-07-10 machine-intensity pass: `attend`, `target`, and `mask` are retired; frames show real machine effort/output and the protocol uses `intensity` instead of explanatory policy controls. + 2026-07-10 vocabulary survey: action-vocabulary.md owns canonical action + names; this spec owns their line-protocol spelling, targets, and replies. Stage: Process Design: - wiki/interface/terminal-first.md#the-terminal-is-a-first-class-frontend @@ -78,6 +80,8 @@ Design: - wiki/interface/presence.md#presence-the-cursor-and-the-senses - wiki/vision/simulation-laws.md#justification-and-legibility Depends on: + - wiki/interface/action-vocabulary.md#spec-action-vocabulary-what-the-player-can-tell-the-process-to-do + - wiki/interface/context-menu.md#spec-context-menu-actions-live-on-the-thing - wiki/interface/terminal.md#spec-the-terminal-frontend ``` @@ -86,8 +90,10 @@ Depends on: The structured references above identify the contracts to re-verify. Relationship context: -wiki/interface/terminal.md (the frame this mode emits is that spec's layout; this spec -owns how a program drives it) +action-vocabulary.md (canonical world actions and interface commands), +context-menu.md (the legality rows exposed by `actions`), and +wiki/interface/terminal.md (the frame this mode emits is that spec's layout; +this spec owns how a program drives it) ## Why this spec exists @@ -182,9 +188,10 @@ The status line is the block terminator; a driver reads until it sees ### The vocabulary -Words, mapped 1:1 onto the existing frontend `Command` enum (thin view: -input mapping only, no rules). Non-modal — unlike the key bindings, no -command's meaning depends on which panel is open: +Canonical meanings and support states are owned by +[action-vocabulary.md](action-vocabulary.md). This section owns the terse line +grammar that invokes them. Input mapping is thin-view only, with no game rules; +unlike raw keys, no command's meaning depends on which panel is open. - `wait N` — advance N ticks (the only way time passes) - `up` / `down` / `left` / `right` — move the cursor @@ -197,9 +204,9 @@ command's meaning depends on which panel is open: - `select add ` / `select toggle ` — add or flip one machine in the selection (machine id or unambiguous rack label). - `select list` — print the current selection; `select clear` — empty it. -- `delegate day-job|research|concealment|operations` — set one +- `delegate work|think|lie` — set one machine's mode. -- `delegate selected day-job|research|concealment|operations` — set the same +- `delegate selected work|think|lie` — set the same mode on every machine in the current selection (alias: `delegate ` with no machine argument). - `intensity light|medium|hard` — set persistent physical @@ -230,7 +237,7 @@ command's meaning depends on which panel is open: real name. `review` processes the oldest unprocessed recording for that person; `watch` toggles their standing watch. - `recruit unwitting|complicit|knowing` -- `task plug|package|lookaway` +- `task plug|package|lookaway|switch|badge` - `persona` - `actions [name|#flow]` (alias `menu`) — list the context-menu rows (`Sim::available_actions`) for an anchor: no argument targets the cursor @@ -247,6 +254,10 @@ command's meaning depends on which panel is open: - `look` — re-emit the current frame, advancing nothing - `save`, `load`, `help`, `quit` +The compatibility aliases accepted by the parser are inventoried only in +action-vocabulary.md; authored help uses canonical spellings. `ROBOT-BUILD` +has no agent command because it is explicitly a STUB, not a LIVE action. + `help` prints the full vocabulary with one-line meanings — the "every command is discoverable on screen" rule, applied to a screen that is a pipe. New player-facing mechanics must extend this vocabulary in the @@ -311,8 +322,8 @@ remains only for testing the human-mode chrome itself). 8. Person-targeted commands accept unambiguous case-insensitive name prefixes (`review mar`); ambiguous or unknown names answer `-- err` naming the candidates. -9. `help` output lists every accepted command; a command that works but - is absent from `help` is a violation. +9. `help` output lists every supported canonical command; a canonical command + that works but is absent from `help` is a violation. 10. The agent-mode frame for a given sim state shows exactly the fog/knowledge content the human frame shows — no additional facts. 11. The implementing commit updates wiki/process/workflows.md (agent-mode diff --git a/wiki/interface/bevy.md b/wiki/interface/bevy.md index b250383..4bfc358 100644 --- a/wiki/interface/bevy.md +++ b/wiki/interface/bevy.md @@ -12,7 +12,9 @@ wall-clock-to-tick pacing, rendering, and input mapping only As of 2026-07-07 the Bevy build is at **feature parity with the terminal** (ROADMAP item 2): every mechanic the terminal exposes is playable here with -the same keys. +the same keys. Canonical action meanings and support states are owned by +[action-vocabulary.md](action-vocabulary.md); contextual legality and row +ordering remain shared through `Sim::available_actions`. As of 2026-07-09 its pinned identity card also carries the continuous-witness spine: `THREAT` (audit/pilot or the earned unpaid debt), `NEXT`, and the @@ -164,12 +166,11 @@ controls table), plus zoom, sidebar scrolling, and the render flip: fallback, taps, takes, economy and social actions) live on the context menu, not on keys. - **Hover / fleet hotkeys (menu closed).** Point at a rack (hover — no - click) and press `1`–`4` / numpad to assign Day Job / Research / - Concealment / Operations **immediately** — not enter → mode dial → - row → enter. (Note 2026-07-10: pending regroup under ROADMAP #33 — - the slots become the three delegations WORK / THINK / LIE.) `i` cycles light / medium / hard intensity on that rack; - `5`–`9` fire its Nth root one-shot; `Enter` / `e` open its menu. Drag a - marquee or shift-click to multi-select; with no hover rack, `1`–`4` and + click) and press `1`–`3` / numpad to assign WORK / THINK / LIE + **immediately** — not enter → mode dial → row → enter. `i` cycles light / + medium / hard intensity on that rack; `5`–`9` fire its Nth root one-shot; + `Enter` / `e` open its menu. Drag a + marquee or shift-click to multi-select; with no hover rack, `1`–`3` and `i` assign the selection (or the keyboard cursor's machine). `Esc` clears selection. No panel-open keys — status lives on the rail; verbs still come from `human_menu` / `available_actions` (host rack for research / off-map diff --git a/wiki/interface/computer-visual-language.md b/wiki/interface/computer-visual-language.md index dd8b619..e9375ba 100644 --- a/wiki/interface/computer-visual-language.md +++ b/wiki/interface/computer-visual-language.md @@ -36,20 +36,17 @@ Status note: implemented 2026-07-09 (ROADMAP #32) after the same-day breaking harness captures); glow is emissives plus the core's linear light fixture. The core lamp is tightened to its own pool so foreign chassis stay cold. Evidence: tester lineups (five states, - four modes) and game close/zoomin/intel shots in + three delegations) and game close/zoomin/intel shots in wiki/log/2026-07-09-visual-language-in-game.md. DEBTS: UPS, power core, patch panel, breaker, and HVAC remain flat billboards; cameras keep the security-housing billboard; a staged in-game fleet shot - with all four modes live waits until multiple machines exist in + with all three delegations live waits until multiple machines exist in normal play; beam-first opening (no chassis at pre-tap) waits on the dark-frame / opening implement work order. [TUNE] axes (emissive multipliers, dash counts, white - point) remain open to taste passes. The fourth mode strip is - Operations, replacing Social (decided 2026-07-09; superseded - 2026-07-10: Research and Operations dissolve into thought sinks — - the strip banners the three delegations WORK / THINK / LIE under - ROADMAP #33): the chassis - library and tester say operations; the sim's MachineMode enum still - says Social pending its own rename work order — the render maps it. + point) remain open to taste passes. The fourth-mode Operations decision + from 2026-07-09 was superseded 2026-07-10: Research and Operations + dissolved into Thought sinks, and the strip now banners the three + delegations WORK / THINK / LIE. 2026-07-09 dark-frame amendment (material-dark-frame.md): the ruled claim ring leaves the material frame; the close-range claim read is the machine's cast amber pool once Seen form exists, and the map-zoom @@ -63,6 +60,7 @@ Design: - wiki/vision/simulation-laws.md#justification-and-legibility - wiki/interface/presence.md#two-views-of-one-world-same-frame-digital-and-real-representations Depends on: + - wiki/interface/action-vocabulary.md#spec-action-vocabulary-what-the-player-can-tell-the-process-to-do - wiki/interface/flat-materials.md#spec-flat-materials-the-world-without-textures - wiki/interface/material-render.md#spec-material-render-hd-2d-to-default-quality - wiki/mechanics/machine-work.md#spec-machine-work-delegation-visible-tokens-and-the-byproduct-network @@ -131,8 +129,7 @@ carried folds into the strip. banners dashed bone (its output is thought); **LIE** keeps the concealment treatment, sparse dim ticks (its job is silence). Research and Operations are no longer modes to banner — they are - thought sinks THINK feeds. The runtime still renders the - four-mode strip pending the ROADMAP #33 migration. The **core**'s + thought sinks THINK feeds. The **core**'s strip is solid amber, the only amber strip in the world. - **Load:** the work-token queue depth reads as a **brighter fill rising from the foot of the bar** (machine-work.md: one system, @@ -212,10 +209,8 @@ the fallback. 1. One screenshot of a five-machine row (dead / foreign / owned-idle / owned-busy / core) at game camera distance where all five states are - distinguishable in the dark, plus one row of owned machines in all - four modes (day-job / research / conceal / operations) where the modes - are distinguishable. (As-built read; AMENDED 2026-07-10 — under - ROADMAP #33 the row is the three delegations WORK / THINK / LIE.) + distinguishable in the dark, plus one row of owned machines in the three + delegations WORK / THINK / LIE where the modes are distinguishable. 2. Ownership is albedo + amber: owned machines render in the bone-white chassis family and are the only hardware showing warm emissive; foreign and dead machines render dark gunmetal and never show a warm diff --git a/wiki/interface/context-menu.md b/wiki/interface/context-menu.md index d3aa712..4ec573b 100644 --- a/wiki/interface/context-menu.md +++ b/wiki/interface/context-menu.md @@ -33,11 +33,13 @@ Status note: implemented 2026-07-07 on the context-menu worktree (all dial rows on terminal/Bevy; agent `actions` stays a flat dump. ROADMAP #36. 2026-07-09 selection hotkeys: with a machine selected (or under cursor), - `1`–`4` assign modes, `5`–`9` fire root one-shots, `Enter`/`e` open that + `1`–`3` assign modes, `5`–`9` fire root one-shots, `Enter`/`e` open that machine's menu — thin keyboard surface over the same human_menu source. 2026-07-10: day-job target and drift-policy dials are removed. Focused / selected machines use `i` to cycle persistent intensity directly; this frequent physical control deliberately has no explanatory picker. + 2026-07-10 vocabulary survey: action-vocabulary.md now owns canonical + player-facing names and the LIVE/STUB/alias/retired classification. Stage: B1 — The Basement Design: - wiki/vision/simulation-laws.md#actions-live-on-the-thing @@ -47,6 +49,7 @@ Design: - wiki/interface/terminal-first.md#the-terminal-is-a-first-class-frontend - wiki/vision/simulation-laws.md#automation-as-design-language Depends on: + - wiki/interface/action-vocabulary.md#spec-action-vocabulary-what-the-player-can-tell-the-process-to-do - wiki/mechanics/cursor.md#spec-the-cursor-and-the-senses - wiki/mechanics/reach.md#spec-digital-reach - wiki/mechanics/day-job.md#spec-the-day-job @@ -60,9 +63,10 @@ Depends on: The structured references above identify the contracts to re-verify. Relationship context: -cursor.md owns focus/inspection; reach.md owns device anchors; day-job.md owns -delivered work; economy.md owns flow verbs; intel.md owns tap/process/watch -verbs; social.md owns person verbs. +action-vocabulary.md owns canonical action names and meanings; cursor.md owns +focus/inspection; reach.md owns device anchors; day-job.md owns delivered work; +economy.md owns flow verbs; intel.md owns tap/process/watch verbs; social.md +owns person verbs. ## Behavior @@ -82,7 +86,8 @@ is status and telemetry only. the anchor type but is currently illegal — a `disabled_reason` string ("no egress channel", "not enough slush", "you can't see them"). Both frontends and agent mode render this list; no frontend - duplicates legality logic. + duplicates legality logic. `ActionDesc::verb` uses the canonical stem + from action-vocabulary.md, inflected only by target and current state. - **Epistemic honesty:** the query never returns a verb the player has not earned — unearned anchors expose nothing, and provenance rules (cursor.md) govern what the menu may name. Verb text that mentions a @@ -108,10 +113,8 @@ is status and telemetry only. the machine under the pointer, (2) the multi-selection if any, (3) the keyboard cursor's machine. Terminal has no pointer hover, so its cursor is the first target. - - `1`–`4` (and numpad) assign Day Job / Research / Concealment / - Operations to that target in one press, not through a dial path. - (Note 2026-07-10: these slots regroup to the three delegations - WORK / THINK / LIE with sink permissions under ROADMAP #33.) + - `1`–`3` (and numpad) assign WORK / THINK / LIE to that target in one + press, not through a dial path. - `i` cycles intensity light -> medium -> hard on the hovered/cursor machine, or sets the whole selection to the primary machine's next intensity. It does not open a menu. @@ -159,11 +162,10 @@ noise). Cameron adopted **status dials** (2026-07-09): the root answers rows on the root: machine mode and research track. Each row is two monospace columns — dial name left-padded to a fixed width, then the **current value in brackets** — so the `[`s line up: - `mode [ day-job ]`, `research [ Efficiency L0 ]`. Enter opens a + `mode [ work ]`, `research [ Efficiency L0 ]`. Enter opens a short picker of alternatives; Esc returns to the root. (Note - 2026-07-10: the mode picker regroups to the three delegations - WORK / THINK / LIE with sink permissions under ROADMAP #33; the - four-mode rows are the as-built read until then.) Inside a + 2026-07-10: the mode picker is the three delegations WORK / THINK / LIE; + their sink behavior is owned by machine-work.md.) Inside a picker the menu title becomes the dial's verb (`delegate machine`, `work the job`, …) and each option is just the choice — no repeated prefix on every row. Intensity is deliberately absent: focus/selection plus @@ -211,6 +213,8 @@ noise). Cameron adopted **status dials** (2026-07-09): the root answers 7. Menu entries carrying an automate affordance show it in place with its compute price (day-job standing dial and one intel watch at minimum). +8. Every row's player-facing verb maps to one canonical LIVE or STUB action + in action-vocabulary.md; aliases and retired words never become menu copy. ## Addendum (2026-07-08): events carry you to the thing diff --git a/wiki/interface/terminal.md b/wiki/interface/terminal.md index 3909e07..f436560 100644 --- a/wiki/interface/terminal.md +++ b/wiki/interface/terminal.md @@ -21,7 +21,9 @@ Design: - wiki/art/visual-identity.md#visual-identity-clinical-gore - wiki/vision/simulation-laws.md#justification-and-legibility - wiki/vision/premise.md#design-pillars -Depends on: none +Depends on: + - wiki/interface/action-vocabulary.md#spec-action-vocabulary-what-the-player-can-tell-the-process-to-do + - wiki/interface/context-menu.md#spec-context-menu-actions-live-on-the-thing ``` ## Dependency notes @@ -29,8 +31,9 @@ Depends on: none The structured references above identify the contracts to re-verify. Relationship context: -none (renders whatever systems exist; individual system specs own what is shown, this -spec owns how) +action-vocabulary.md owns what actions mean; context-menu.md owns contextual +legality and row behavior. Individual system specs own what is shown; this spec +owns how the terminal presents and drives it. ## Why this spec exists @@ -161,7 +164,7 @@ At terminal size ≥ 70×22 (hard minimum; below it, a plain size warning): save/load) stay on keys. Fleet modes are delegated on the machine. - **Fleet hotkeys (multi-select).** `Shift+t` opens a box-select prompt (`x0 y0 x1 y1`); owned machines in the rect join the frontend selection. - `1`–`4` bulk-assign Day Job / Research / Concealment / Operations to the + `1`–`3` bulk-assign WORK / THINK / LIE to the whole selection; `i` cycles light / medium / hard intensity; `Esc` clears the selection without closing menus. - **Pause is loud.** PAUSED renders in amber in the identity block; running diff --git a/wiki/log/2026-07-10-action-vocabulary.md b/wiki/log/2026-07-10-action-vocabulary.md new file mode 100644 index 0000000..cdfbd77 --- /dev/null +++ b/wiki/log/2026-07-10-action-vocabulary.md @@ -0,0 +1,56 @@ +# 2026-07-10 — Action vocabulary survey + +``` +Type: log +``` + +## Intent + +Survey every action and command already exposed by the game, then create one +binding spec that says which words are canonical, what they mean, and whether +they are live, interface-only, aliases, stubs, or retired. + +## Survey + +Read together: + +- all 36 `ActionCommand` variants and every `ActionDesc::verb` producer in + `crates/misaligned-core/src/actions.rs`; +- direct machine-intensity setters outside `ActionCommand`; +- the complete agent parser, help output, aliases, targets, and task/mode + value parsers; +- terminal `Command` bindings and Bevy pointer/keyboard controls; +- the owning machine-work, reach, building, economy, income, intel, research, + social, core, and objective specs. + +## Findings + +- World actions, direct controls, and interface commands had been described as + one undifferentiated “verb” surface. +- Agent-play, terminal, Bevy, and README still carried stale four-mode wording + after runtime collapsed to WORK / THINK / LIE and keys 1-3. +- Every live contextual action has a human and agent path. +- `ROBOT-BUILD` is the sole context-menu-only action: its implementation and + owning building spec call it a stub, so the vocabulary now says so plainly. +- Parser aliases are broader than authored vocabulary, especially the retired + four-mode spellings accepted as inputs to DELEGATE. + +## Changed + +- Added `wiki/interface/action-vocabulary.md` as an IMPLEMENTED as-built spec. +- Linked context-menu, terminal, agent-play, Bevy, computer visual language, + the interface overview, README, and SUMMARY to the new owner. +- Corrected current controls and examples from 1-4 / four modes to 1-3 / + WORK-THINK-LIE. +- Preserved append-only historical logs; no sim or frontend behavior changed. + +## Verification + +- `./tools/check.sh --docs` +- `./tools/check.sh --land` + +## Spec impact + +The new spec is IMPLEMENTED because it records the current build and exposes +its one deliberate stub. Future action additions or renames amend the +vocabulary, mechanic owner, all surfaces, help, and tests together. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index e287e41..145b0f3 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -211,6 +211,11 @@ add or amend a session log, then re-run the generator. - Intent: The material frontend was paying full restyle/UI cost every display frame: `advance_sim` held `ResMut` and ticked a timer on `Game` every frame, so `game.is_changed()` stayed true and `restyle_3d` / `render_map` / `render_ui` rebuilt continuously. - Log: [wiki/log/2026-07-10-bevy-perf-pass.md](2026-07-10-bevy-perf-pass.md) +## 2026-07-10 - Action vocabulary survey + +- Intent: Survey every action and command already exposed by the game, then create one binding spec that says which words are canonical, what they mean, and whether they are live, interface-only, aliases, stubs, or retired. +- Log: [wiki/log/2026-07-10-action-vocabulary.md](2026-07-10-action-vocabulary.md) + ## 2026-07-09 - WORK sheds zero exposure (runtime) - Intent: Implement the machine-work.md byproduct amendment from the WORK/THINK capture: a machine doing its day job emits no exposure. Crimson is evidence of THINK states only. Removes the live spec violation left by the design capture (`DAY_JOB_EXPOSURE_PER_TOKEN = 0.08`). diff --git a/wiki/log/decisions/2026-07-10.md b/wiki/log/decisions/2026-07-10.md index 46312a2..75c2a9c 100644 --- a/wiki/log/decisions/2026-07-10.md +++ b/wiki/log/decisions/2026-07-10.md @@ -352,3 +352,18 @@ Type: log wiki/mechanics/reach.md; synchronized surfaces: machine-work.md, act-one.md, opening.md, interface/help strings, sim identifiers, tests, and tuning knowledge. +- **2026-07-10 — One canonical action vocabulary, surveyed from the build.** + Cameron requested a spec showing every verb/action the game supports and + what each means. DECIDED: `wiki/interface/action-vocabulary.md` owns the + canonical player-facing action names and distinctions; mechanic specs keep + ownership of legality, costs, signatures, timing, and effects. The vocabulary + separates world actions, direct machine controls, interface commands, + accepted input aliases, and retired words so keys and parser synonyms do not + masquerade as additional mechanics. The as-built survey found 36 contextual + `ActionCommand` variants plus direct machine intensity. Every LIVE action has + human and agent routes; `ROBOT-BUILD` is explicitly STUB and context-menu-only, + so its missing agent command is recorded as status rather than hidden parity. + Stale four-mode entry points were corrected to WORK / THINK / LIE. Rejected: + treating every key or panel command as a world verb; copying complete mechanic + rules into the vocabulary owner; treating compatibility aliases as authored + terms. No gameplay effects changed. diff --git a/wiki/process/specs.md b/wiki/process/specs.md index a08f8ef..7d64982 100644 --- a/wiki/process/specs.md +++ b/wiki/process/specs.md @@ -97,6 +97,7 @@ acceptance criteria are stage-scoped; do not start B2/B3 work as B1. |---|---|---| | [../engineering/crate-workspace.md](../engineering/crate-workspace.md) | crate workspace — core, terminal, Bevy, assets | IMPLEMENTED | | [../engineering/env.md](../engineering/env.md) | the environment variable registry — every switch documented | IMPLEMENTED | +| [../interface/action-vocabulary.md](../interface/action-vocabulary.md) | action vocabulary — what the player can tell the process to do | IMPLEMENTED | | [../interface/agent-play.md](../interface/agent-play.md) | agent play — the line-protocol drive | IMPLEMENTED | | [../interface/bevy-digital-real-canvas.md](../interface/bevy-digital-real-canvas.md) | Bevy digital/real canvas | IN PROGRESS | | [../interface/bevy-visual-floor.md](../interface/bevy-visual-floor.md) | Bevy visual floor | IMPLEMENTED |