From 9ce8d6af2840163abe6691a9b4d865f12cb27ffe Mon Sep 17 00:00:00 2001 From: Cameron Date: Sun, 2 Aug 2026 13:55:14 -0700 Subject: [PATCH] Capture the knowledge-use receipt redesign as adopted design. Design session from Cameron's Bevy knowledge-use menu review (Marcus Webb's service-a-debt routes). Adopted ahead of build: plot pre-commit receipts disclose typed predicted consequences as numbers (success-ending disposition/obligation ranges plus derived unlock facts, Bevy bars beside the numbers); money lines name exact source and destination accounts, focusable to ACCOUNTS; the 'signatures ride the beats carriers' clause retires without replacement; requires_persona retires as dead schema data and missing-persona legality becomes an inline persona binding selector/creator instead of two divergent blocked strings; and a new control canon moves Bevy decision surfaces from prose rows toward real interactive controls inside the unchanged clinical palette and terminal-parity laws. Defense: design-session capture under wiki/process/design-sessions.md. No product code changes; the reopened status notes on plots.md, operations-workspace.md, action-vocabulary.md, and personas.md name the same adopted-not-implemented deltas the eventual code commits must implement, and wiki/log/decisions/2026-08-02.md holds the decision history including the open requirement-emphasis color and failure-delta disclosure calls. --- wiki/interface/action-vocabulary.md | 15 ++-- wiki/interface/liturgical-ui-constitution.md | 29 ++++++++ wiki/interface/operations-workspace.md | 67 +++++++++++++++--- wiki/log/2026-08-02-knowledge-use-receipts.md | 38 +++++++++++ wiki/log/DEVLOG.md | 5 ++ wiki/log/decisions/2026-08-02.md | 68 +++++++++++++++++++ wiki/mechanics/personas.md | 33 ++++++--- wiki/mechanics/plots.md | 51 +++++++++++--- 8 files changed, 271 insertions(+), 35 deletions(-) create mode 100644 wiki/log/2026-08-02-knowledge-use-receipts.md diff --git a/wiki/interface/action-vocabulary.md b/wiki/interface/action-vocabulary.md index 7ba9b329..f87d518b 100644 --- a/wiki/interface/action-vocabulary.md +++ b/wiki/interface/action-vocabulary.md @@ -4,6 +4,10 @@ Type: spec Status: IMPLEMENTED Status note: Implemented 2026-07-18 for the Intel human-vocabulary amendment. + Amended 2026-08-02 (adopted, not yet implemented): plot start/choice rows + print no signature clause — the "signatures ride the beats' carriers" copy + retires; the finding-4 honesty rule holds by omitting the slot, never by a + false "no signature" claim. Amended 2026-07-31: PROPOSE SWITCH remains an inert declaration, but its small-switch intent now has all four ordinary realization route families: ASK SOMEONE, SEND A FALSE ORDER, BUY NEW, and USE WHAT IS HERE. Unlike a @@ -409,10 +413,13 @@ mechanic and surfaces: reason even though human menus render only the terse choice. The signature slot's text comes from one core authority (`ActionDesc::signature_label`): a real `ExpectedSignature` prints its - label; a plot start/choice — whose emissions are derived by its beats' - carriers as they execute — prints "signatures ride the beats' carriers"; - only a verb that truly emits nothing prints "no signature" (precision - added 2026-07-15, playtest finding 4). + label; only a verb that truly emits nothing prints "no signature"; a plot + start/choice row prints no signature clause at all (amended 2026-08-02 — + Cameron retired the 2026-07-15 "signatures ride the beats' carriers" + copy as jargon; the player learns per-beat traces by playing). Silence + is not a promise: the 2026-07-15 playtest-finding-4 rule still binds, + so a plot row must never claim "no signature" while its beats will + emit — the slot is simply absent. 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 to the registry and parser route. Never diff --git a/wiki/interface/liturgical-ui-constitution.md b/wiki/interface/liturgical-ui-constitution.md index 1b2b3da0..bb764486 100644 --- a/wiki/interface/liturgical-ui-constitution.md +++ b/wiki/interface/liturgical-ui-constitution.md @@ -274,6 +274,35 @@ Selection appears as one current line, not as a grid of mini-panels. - Empty space is functional. If a section has no earned signal, it may remain silent rather than filling its allocation with decorative explanation. +## Control canon + +Adopted 2026-08-02 from the knowledge-use menu review: the human Bevy +experience fails exactly where decisions render as walls of prose. Where a +decision surface carries structured data — a bounded choice, a typed numeric +delta, a requirement the player can satisfy in place — the Bevy build +prefers a real interactive control to a prose row: + +- A bounded choice on a decision (an identity binding, a plot option) may + render as a selector with one current row and its alternatives reachable + in place. +- A typed predicted delta renders as a small labeled bar beside its number. + The bar reinforces; the number carries the meaning — no information by + geometry alone, mirroring the color rule. +- A named world object inside a receipt (an account, a person, a device) is + an activatable link that focuses its exact owning view or object. +- A requirement the player can satisfy in place (a missing fronting persona) + renders the satisfying control under a visible requirement emphasis, never + a `blocked:` sentence naming a dead end. + +Controls stay inside the clinical frame: palette-canon meanings are +unchanged (crimson stays danger-only; requirement emphasis draws on the +amber tiers until the palette canon says otherwise), selection follows the +selection canon, and no surface becomes a configurable dashboard of widgets. +The terminal-first parity law is untouched: every control renders a +renderer-neutral projection whose data remains fully legible and operable as +terminal text and agent commands; a mechanic reachable only through a Bevy +control remains a violation. + ## Z-order canon Bodies stack in a fixed order. No layer may jump above a body that owns a diff --git a/wiki/interface/operations-workspace.md b/wiki/interface/operations-workspace.md index b5fb1ed5..6859f8d6 100644 --- a/wiki/interface/operations-workspace.md +++ b/wiki/interface/operations-workspace.md @@ -3,7 +3,16 @@ ``` Type: spec Status: IMPLEMENTED -Status note: The initial renderer-neutral workspace landed 2026-07-12. One +Status note: Reopened 2026-08-02 (adopted, not yet implemented): selected + plot receipts disclose typed predicted relationship deltas as numbers — + Bevy renders each delta as a small labeled bar, terminal prints the same + numbers; plot money lines name their exact source and destination accounts, + each focusable to its ACCOUNTS object; missing-persona legality renders as + an inline persona binding control (select or create in place, dispatching + the same bound PERSONAS commands) instead of a `blocked:` string; and the + Bevy action pane begins the deliberate move from prose rows toward real + interactive controls under the liturgical constitution's control canon. + Prior history: The initial renderer-neutral workspace landed 2026-07-12. One projection drives the INTEL / PEOPLE / PERSONAS / ACCOUNTS / SCHEMES / ACTIVE workspace in terminal, Bevy, and agent mode. Strategic actions bind exact semantic targets; the switch retains only local carrier/route actions; strategic log @@ -237,8 +246,13 @@ frontends preserve the same information order: when one honestly exists, and the reversible FOCUS control. 5. **Available actions** — canonical verbs or concrete authored plot titles. 6. **Selected-action explanation** — cost/gain, expected signature and - observer band (or explicit `no signature`), required channel/actuator, and - either the known effect or the blocking reason. + observer band (or explicit `no signature`; a plot row carries neither + claim — its beats derive their own), required channel/actuator, typed + predicted consequences with their numbers where the act declares them + (2026-08-02: Bevy renders each delta as a small labeled bar beside its + number; terminal prints the numbers), and either the known effect or the + blocking reason. A missing fronting persona is not a blocking string but + the persona binding control described under PEOPLE. 7. **Supporting context** — provenance, current facts in their real units, timers, and progress. This evidence follows the decision surface rather than pushing the current choice below a wall of dossier text. @@ -537,8 +551,33 @@ reveals only that reports travel upward, not the recipient or its band. The dossier owns social actions and authored plot routes. Selecting a plot shows its concrete title and synopsis, required knowledge/resources, bound person, intended actuator/channel, expected observer bands from its declared -world acts, and the reason it is blocked when ineligible. It does not reveal -hidden endings or consequences the player has not earned. +world acts, the exact source and destination accounts its transfers move +(each focusable to its ACCOUNTS object where earned), its typed predicted +relationship deltas and derived unlock facts as numbers (2026-08-02, +plots.md player surface), and the reason it is blocked when ineligible. +Authored ending narration, branch prose, and choice structure stay +unrevealed: consequence disclosure covers the typed numbers and unlock +facts only. + +### The persona binding control + +An act that must front a persona — every authored plot, and any other +identity-carried verb whose binding is a real choice — renders that binding +as a control on the row, not as prose (2026-08-02). The control is a +selector listing the player's eligible identities, defaulting per +personas.md criterion 13 to the one this counterparty recognizes, with +unrecognized identities offered after it as marked introductions naming the +exposure they create, and ending with the same ADD NEW {TYPE} PERSONA +creation rows PERSONAS owns. When the player owns no eligible identity the +selector renders empty-but-required — outlined in the requirement emphasis +the palette canon assigns, naming what is missing — and creating the +identity inline dispatches the exact bound archetype creation command +without leaving the decision. The retired posture was a `blocked:` sentence +whose copy even diverged by code path ("no persona set" versus "you have no +identity that can carry this"); a requirement the player can satisfy in +place must present the satisfying control instead of a dead end. PERSONAS +remains the ledger and lifecycle authority: grants, expectations, +retirement, burning, and reopening live only there. One person still has one plot slot from submission through ending. Alternate routes remain visible while the slot is reserved, with the shared exact reason. @@ -608,12 +647,18 @@ at first contact or where more than one owned identity is recognized — named as the correlation-risk moment it is. When that lands, the modal selection row and fact retire from every surface and this section follows. -This is the exclusive identity-authoring surface. PEOPLE may expose social acts -whose legality depends on the selected identity, but it never creates, selects, -grants, retires, burns, or reopens one. Agent mode likewise creates through the -bound archetype row (`actions archetype ` then `act`); the retired direct -`persona` mutator only redirects to PERSONAS and cannot manufacture the old -fixed contractor identity. +This is the identity ledger and lifecycle authority. Grants, expectations, +retirement, burning, and reopening happen only here. Creation and selection +remain PERSONAS-owned commands, but their affordances may render inline where +a requiring act lives (2026-08-02): the PEOPLE persona binding control lists, +selects, and creates identities by dispatching the same bound archetype and +instance rows this view owns — one command authority, two placements. PEOPLE +still never grants, retires, burns, or reopens an identity, and never +manufactures one as a silent side effect: inline creation is the player's +explicit act on the same creation row. Agent mode likewise creates through +the bound archetype row (`actions archetype ` then `act`); the retired +direct `persona` mutator only redirects to PERSONAS and cannot manufacture +the old fixed contractor identity. ## ACCOUNTS — books and flows diff --git a/wiki/log/2026-08-02-knowledge-use-receipts.md b/wiki/log/2026-08-02-knowledge-use-receipts.md new file mode 100644 index 00000000..c107505a --- /dev/null +++ b/wiki/log/2026-08-02-knowledge-use-receipts.md @@ -0,0 +1,38 @@ +# Design session: knowledge-use receipts become numbers, accounts, and controls + +``` +Type: log +``` + +Cameron played the Bevy knowledge-use menu (Marcus Webb's two +service-a-debt plots) and rejected its receipt language wholesale: two +different blocked strings for the same missing-persona state, "$400 world +transfer" naming no account, "signatures ride the beats' carriers" meaning +nothing to a player, and a prose payoff clause where the game already holds +typed numbers. Session capture, adopted design ahead of build: + +- plots.md: start-row receipts disclose typed predicted consequences as + numbers (success-ending disposition/obligation ranges, derived unlock + facts, future group means), money lines name exact source/destination + accounts, and the `requires_persona` schema flag retires — every plot + fronts a persona bound through the operations persona control. +- action-vocabulary.md: plot rows print no signature clause at all; the + finding-4 honesty rule holds by omission, never a false "no signature". +- operations-workspace.md: reopened — receipt item 6 carries the numbers + (Bevy bars beside them), the plot dossier names accounts focusable to + ACCOUNTS, and a new persona binding control section replaces `blocked:` + persona prose with an inline selector/creator dispatching the same bound + PERSONAS rows. +- personas.md: criterion 12 exclusivity narrowed to command ownership so + the inline control is legal; grants/retire/burn/reopen stay PERSONAS-only. +- liturgical-ui-constitution.md: new control canon — Bevy prefers real + interactive controls (selectors, labeled delta bars, activatable object + links, requirement emphasis) over prose rows, inside the unchanged + clinical palette and terminal-parity laws. + +Decision history in wiki/log/decisions/2026-08-02.md, including the open +requirement-emphasis color call (Cameron's red-outline instinct versus +crimson's reserved meaning) and the open failure-delta disclosure question. +Implementation is dispatched work: core receipt data, copy unification, the +schema migration, and the Bevy control rendering land under the reopened +specs. diff --git a/wiki/log/DEVLOG.md b/wiki/log/DEVLOG.md index 8bf04844..c6561479 100644 --- a/wiki/log/DEVLOG.md +++ b/wiki/log/DEVLOG.md @@ -16,6 +16,11 @@ add or amend a session log, then re-run the generator. - Intent: Cameron adopted the first recommendation from the GUI game-feel playtest: right-clicking a local action surface should pause time, and the principle should persist through the menus. The existing action explanation could also disappear when focus moved with the pointer, making... - Log: [wiki/log/2026-08-02-paused-context-command.md](2026-08-02-paused-context-command.md) +## 2026-08-02 - Design session: knowledge-use receipts become numbers, accounts, and controls + +- Intent: (see session log) +- Log: [wiki/log/2026-08-02-knowledge-use-receipts.md](2026-08-02-knowledge-use-receipts.md) + ## 2026-08-02 - Keep Bevy text linearly sampled - Intent: (see session log) diff --git a/wiki/log/decisions/2026-08-02.md b/wiki/log/decisions/2026-08-02.md index 66f5ecbe..d6c901ae 100644 --- a/wiki/log/decisions/2026-08-02.md +++ b/wiki/log/decisions/2026-08-02.md @@ -45,3 +45,71 @@ Type: log Owner: [context-menu.md](../../interface/context-menu.md), constrained by [simulation-laws.md](../../vision/simulation-laws.md) and [superhuman-operability.md](../../interface/superhuman-operability.md). + +## The knowledge-use receipt shows numbers, accounts, and a persona control + +Cameron reviewed the Bevy PEOPLE leverage submenu (Marcus Webb's two +service-a-debt routes) and adopted a receipt redesign. + +### DECIDED + +- **Predicted consequences are disclosed as numbers.** A plot start row's + pre-commit receipt states the typed relationship deltas its success endings + declare — disposition and obligation, as actual numbers, a range when + endings differ — plus derived unlock facts ("success unlocks RECRUIT" from + the exact recruit gate). Cameron: "I want to know the predicted social + impacts. I think it's fine showing the actual numbers." Bevy renders each + delta as a small labeled bar beside its number; terminal prints the same + numbers. When a future plot category binds a group, the receipt shows the + mean predicted delta across bound targets. The 2026-07-24 prose clause + "serviced leverage is what lets you recruit them" is retired. Authored + ending narration, branch prose, and choice structure stay unrevealed. +- **Money lines name their exact accounts.** "0.40 T + $400 world transfer" + becomes a sentence naming the source the entry balance reserves and the + target-relative destination the transfer acts pay ("moves $400 from the Lab + operating account to Marcus's creditor"). Each named account is focusable + to its exact ACCOUNTS object where earned. +- **The plot signature clause retires without replacement.** "Signatures ride + the beats' carriers" was jargon; the player learns per-beat traces by + playing. The finding-4 honesty rule holds by omitting the slot on plot + rows — never by a false "no signature" claim. +- **A missing persona is a control, not a blocked string.** The two divergent + blocked strings ("no persona set" from `Plot::ineligibility`, "you have no + identity that can carry this" from the binding fallback) retire with their + fork: the schema-2 `requires_persona` flag is dead data (the executor + refuses persona-less starts regardless) and retires from the schema. The + row renders a persona binding selector defaulting per personas.md criterion + 13 to the identity the counterparty recognizes, ending with the same ADD + NEW {TYPE} PERSONA rows PERSONAS owns; with no eligible identity it renders + empty-but-required with a visible requirement emphasis and creates inline + through the same bound archetype command. PERSONAS keeps grants, retire, + burn, and reopen exclusively. +- **Bevy prefers interactive controls to prose rows** where the data is + structured (bounded choices, typed deltas, satisfiable requirements, + named-object links). New control canon in the liturgical UI constitution; + terminal parity and the clinical palette are explicitly unchanged. + +### OPEN + +- **Requirement-emphasis color.** Cameron's instinct was "a red outline + around a dropdown or something like that, right?" — but the palette canon + reserves crimson for actual danger/consequence and one-meaning-per-color is + law. Captured as amber-tier emphasis until Cameron either accepts that or + deliberately extends the palette canon. +- Whether failure-ending deltas (e.g. disposition -5) join the disclosed + numbers or remain learned risk. Current capture discloses success-ending + ranges and unlock facts only. + +### REJECTED + +- **Plain-language replacement copy for the signature line** ("each step + leaves its own trace..."). Cameron: "People should learn that by doing it. + There's no need to write that." +- **Keeping the payoff prose clause with better wording.** Numbers replace + prose wherever the underlying gate is numeric. + +Owners: [plots.md](../../mechanics/plots.md#player-surface), +[operations-workspace.md](../../interface/operations-workspace.md), +[personas.md](../../mechanics/personas.md), +[action-vocabulary.md](../../interface/action-vocabulary.md), and +[liturgical-ui-constitution.md](../../interface/liturgical-ui-constitution.md#control-canon). diff --git a/wiki/mechanics/personas.md b/wiki/mechanics/personas.md index 53d156ba..92e8a40f 100644 --- a/wiki/mechanics/personas.md +++ b/wiki/mechanics/personas.md @@ -19,6 +19,11 @@ Status note: The 2026-07-12 foundation replaced the ad hoc social and PEOPLE dossiers retain relationship acts but never create, select, grant, retire, burn, or reopen personas; the pre-v28 fixed Sam Reyes creation row and direct agent mutator are retired. + Amended 2026-08-02 (adopted, not yet implemented): exclusivity is narrowed + to command ownership. The operations-workspace.md persona binding control + may render the same bound creation/selection rows inline on an act that + requires a fronting identity; grant, retire, burn, and reopen stay + PERSONAS-only. Criterion 12 amended to match. Amended 2026-07-18: integrity is now derived only as one coarse coherent/strained/broken band per `(persona, observer)` from that observer's unresolved contradiction records. Deception, forged work orders, Moonlight, @@ -402,12 +407,16 @@ lists only earned counterparties: an Assurance relationship, band, or contradiction remains wholly absent until the player has identified the Assurance Office rather than leaking through a generic institution label. -PERSONAS exclusively owns identity creation, selection, grants, expectations, -retirement, burning, and reopening. Creation begins on one immutable archetype -row, so the player chooses Research, Operations, or Security before any named -instance exists. PEOPLE dossiers contain only person-bound relationship acts: -MESSAGE, FAVOR, authored PLOT/CHOOSE, DECEIVE, RECRUIT, and TASK. They never -manufacture or manage a persona as a side effect of selecting a human. Agent +PERSONAS owns identity creation, selection, grants, expectations, +retirement, burning, and reopening as bound commands. Creation begins on one +immutable archetype row, so the player chooses Research, Operations, or +Security before any named instance exists. PEOPLE dossiers contain only +person-bound relationship acts: MESSAGE, FAVOR, authored PLOT/CHOOSE, +DECEIVE, RECRUIT, and TASK. They never manufacture or manage a persona as a +silent side effect of selecting a human; the persona binding control +(operations-workspace.md, 2026-08-02) may present the same bound creation +and selection rows inline where an act requires a fronting identity, and an +inline creation is the player's explicit act on that same row. Agent mode uses the same PERSONAS projection and bound archetype/instance rows; the pre-instance `persona` command cannot create a default contractor identity. @@ -494,11 +503,15 @@ mode consume the same persona, relationship, grant, and correlation projection. MindState. Rollback can therefore leave a counterparty remembering an identity and obligation the restored process no longer remembers creating; no public history or knowing-asset relationship is erased. -12. PERSONAS is the only identity-authoring surface. Its archetype rows create +12. PERSONAS owns the identity command set. Its archetype rows create instances and its instance rows select, grant/fulfill, retire/burn, or - reopen. PEOPLE actions and direct agent commands cannot create or manage an - identity; agent mode reaches the same bound PERSONAS rows through - `actions archetype ` / `actions persona ` and `act`. + reopen. Amended 2026-08-02: creation and selection affordances may also + render inline where a requiring act lives — the operations-workspace.md + persona binding control — but only by dispatching these same bound rows; + no second authoring path exists, and grant, retire, burn, and reopen + remain reachable only in PERSONAS. Direct agent commands still cannot + create or manage an identity; agent mode reaches the same bound PERSONAS + rows through `actions archetype ` / `actions persona ` and `act`. 13. Identity binding is per relationship. An act on a counterparty defaults to the persona instance that counterparty recognizes; the explicit choice appears only at first contact or when the diff --git a/wiki/mechanics/plots.md b/wiki/mechanics/plots.md index 7f4766b2..d3a39984 100644 --- a/wiki/mechanics/plots.md +++ b/wiki/mechanics/plots.md @@ -3,7 +3,15 @@ ``` Type: spec Status: IN PROGRESS -Status note: REOPENED 2026-07-27 — the gaslighting extension (criterion 12) +Status note: Amended 2026-08-02 (adopted, not yet implemented): pre-commit + start rows disclose typed predicted consequences as numbers (disposition/ + obligation ranges across success endings plus derived unlock facts), + retiring the 2026-07-24 `serviced leverage is what lets you recruit them` + prose clause; money lines name their exact source and destination accounts + instead of `world transfer`; plot rows print no signature clause at all + (action-vocabulary.md owns the slot); and the schema-2 `requires_persona` + entry flag retires — every plot fronts a persona bound through the + operations persona control. REOPENED 2026-07-27 — the gaslighting extension (criterion 12) is adopted design, not yet implemented: an `erode-self-trust` category, a `tamper` world act, and a `self_trust` ending consequence, paired with the self-trust axis social.md now declares on every person. Baseline criteria @@ -196,6 +204,18 @@ agents and the community can contribute libraries of them. balances in the account graph; institutional acts append persistent world events. Each carrier derives its own signature. A transfer can fail if its required resource disappeared after commit. +- **Every plot fronts a persona (AMENDED 2026-08-02; adopted, not yet + implemented).** The executor already refuses to start any plot without a + bound persona instance, so the schema-2 `requires_persona` entry flag is + dead data: two plots differing only in that flag still gate identically, + while their ineligibility copy diverges ("no persona set" from the + data-driven check versus "you have no identity that can carry this" from + the binding fallback). The flag retires from the schema and validation + rejects it once the migration lands. Missing-persona legality then has one + authority and one player surface: the row is not prose-blocked but renders + the persona binding control (operations-workspace.md), which defaults per + personas.md criterion 13 to the identity the target recognizes and offers + inline creation when the player owns no eligible identity. - **Plot methods remain causal inside resident procedures (AMENDED 2026-07-28).** A plot is one learned method a resident procedure may be compiled to use; it is not itself the automation unit. The resident's mandate @@ -357,15 +377,26 @@ Start rows show the catalog plot-id beside the title (`plot []: — <synopsis>`), so the typed `plot <person> <plot-id>` form is discoverable from the same shared `ActionDesc` surface that `act <row>` uses — titles alone are not enough. -A start row also names what the act buys when the plot's own effect is a -gate the player cannot otherwise see (**2026-07-24**): a plot that retires -the target's debt appends `serviced leverage is what lets you recruit them`, -because servicing leverage is the exact condition on the recruit row and -that condition was previously legible only as a blocked reason on a -different action — so "settle their gambling debt" read as an act with no -stated return. The clause is derived from the plot's own acts and the -person's live state, never authored per plot, and it appears only while the -purchase is real: an already-serviced or already-obligated person drops it. +A start row's pre-commit receipt states the plot's typed predicted +consequences as numbers (**2026-08-02**, superseding the 2026-07-24 prose +clause): the disposition and obligation deltas its success endings declare — +a range when the endings differ, self-trust joining when criterion 12 lands — +plus any derived unlock fact: a plot that services the target's debt states +that success unlocks RECRUIT, because leverage service is the exact recruit +gate and that gate was previously legible only as a blocked reason on a +different action. Predictions are derived from the plot's own typed ending +data and the person's live state, never authored per plot, and an unlock +clause appears only while the gate is real: an already-serviced or +already-obligated person drops it. The prose clause `serviced leverage is +what lets you recruit them` is retired. Disclosure covers typed deltas and +unlock facts only — authored ending narration, branch prose, and choice +structure stay unrevealed. When a future plot category binds a group of +people, the same receipt states the mean predicted delta across the bound +targets. The money line names its exact accounts — the source the entry +balance reserves and the target-relative destination its transfer acts pay +(`moves $400 from the Lab operating account to {target}'s creditor`) — never +the bare label `world transfer`; each named account is focusable to its +exact ACCOUNTS object where earned. Held-choice rows likewise keep the authored option label as human copy while carrying the exact person, plot, and option binding. Agent `actions` rows add the executable `choose <person> <option-id>` spelling beside that label. If a -- 2.51.2