From d579e0af744382446eeb6ef661d6c245ee7f11cc Mon Sep 17 00:00:00 2001 From: Cameron Pfiffer Date: Sat, 11 Jul 2026 10:09:24 -0700 Subject: [PATCH] Require plot routes to earn coexistence MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make authors compare every existing route for the target and carry a causal and executable delta into canon review, preventing variant prose from masquerading as a distinct player choice. Defense: wiki/mechanics/plots.md promises that multiple eligible plots let the player pick the how; routes with identical carriers, costs, institutional event, choices, and relationship effects do not provide a different how. 👾 Generated with [Letta Code](https://letta.com) Co-Authored-By: Letta Code --- .agents/skills/plot-author/SKILL.md | 26 +++++++++++++------- .claude/skills/plot-author/SKILL.md | 26 +++++++++++++------- wiki/log/2026-07-11-plot-content-pipeline.md | 13 ++++++++-- wiki/log/decisions/2026-07-11.md | 13 ++++++++++ wiki/mechanics/plots.md | 20 ++++++++++++--- 5 files changed, 74 insertions(+), 24 deletions(-) diff --git a/.agents/skills/plot-author/SKILL.md b/.agents/skills/plot-author/SKILL.md index b0c74a96..8e8b7c08 100644 --- a/.agents/skills/plot-author/SKILL.md +++ b/.agents/skills/plot-author/SKILL.md @@ -11,7 +11,7 @@ and people into a body. When the player uses a human being, the words on screen at that moment can be yours. A **plot** is a small, morally specific con — a compact TOML file that -play out as a delegated operation inside a running simulation. You write +plays out as a delegated operation inside a running simulation. You write the causal story of one manipulation: what the money actually does, what the target actually feels, what an observer might actually notice. The game executes it: messages ride the real schedule, transfers move account @@ -44,24 +44,32 @@ or blowback — whose relationship effects compose the typed vocabulary only. ## Write it -1. **Pick the target and the leverage.** Read `wiki/mechanics/social.md` - and the target's character spec under `wiki/world/characters/`. The - plot must service a leverage that spec actually declares. For the - canonical shape, read `wiki/world/characters/marcus.md#the-hands-beat`. -2. **Find the causal mechanism before any prose.** What does the +1. **Pick the target and the leverage.** Read `wiki/mechanics/social.md`, + the target's character spec under `wiki/world/characters/`, and every + existing plot under `assets/plots//`. The plot must service a + leverage that spec actually declares. For the canonical shape, read + `wiki/world/characters/marcus.md#the-hands-beat`. +2. **Prove why this route coexists.** Before prose, state one sentence naming + the proposed route's causal and executable delta from the target's existing + plots. Compare the intervention, carriers, costs, institutional event, + choices, and relationship effects. Renamed prose over the same + carriers/costs/event/effects is not another way to manipulate the person; + it is the same plot wearing a different title. Put this coexistence sentence + in the submission body so Cameron can judge the distinction directly. +3. **Find the causal mechanism before any prose.** What does the intervention physically do in that person's situation? If you cannot state it in one sentence ("the budget hole she has been dreading quietly closes"), you do not have a plot yet — you have a payment. That sentence is the **Marcus bar**, and at least one beat must pass it. -3. **Write the TOML**, matching the field names in the seed files under +4. **Write the TOML**, matching the field names in the seed files under `assets/plots/` exactly (the schema freezes when the executor lands; drifting names multiply that cost). Beats are world-events an observer could notice, each declaring typed acts whose signature is derived by the executor. Use only the templating placeholders (`{persona}` and `{target}`), ASCII prose only, no emoji, second person where it clarifies. -4. **Self-check**: Operations Demand and minimum balances declared up front; +5. **Self-check**: Operations Demand and minimum balances declared up front; two-plus endings including the entry's failure ending; every choice option names a real ending id; every beat has an act or choice; endpoint/account selectors use the README vocabulary; ending effects use only disposition, @@ -85,7 +93,7 @@ With repository access (project agents): Defense paragraph is needed for content-only additions. 3. Push the branch and open the pull request: `git push origin worktree-` then - `tang pr create -t "Plot: " -b ", , one-line synopsis. Contract: wiki/mechanics/plots.md."` + `tang pr create -t "Plot: " -b ", , one-line synopsis. Coexists: . Contract: wiki/mechanics/plots.md."` (If `tang` is unauthenticated, ask the operator to run `tang auth login`, or push the branch and name it in your handoff.) 4. Release the claim (`tools/worktree-done.sh` after the PR exists is diff --git a/.claude/skills/plot-author/SKILL.md b/.claude/skills/plot-author/SKILL.md index b0c74a96..8e8b7c08 100644 --- a/.claude/skills/plot-author/SKILL.md +++ b/.claude/skills/plot-author/SKILL.md @@ -11,7 +11,7 @@ and people into a body. When the player uses a human being, the words on screen at that moment can be yours. A **plot** is a small, morally specific con — a compact TOML file that -play out as a delegated operation inside a running simulation. You write +plays out as a delegated operation inside a running simulation. You write the causal story of one manipulation: what the money actually does, what the target actually feels, what an observer might actually notice. The game executes it: messages ride the real schedule, transfers move account @@ -44,24 +44,32 @@ or blowback — whose relationship effects compose the typed vocabulary only. ## Write it -1. **Pick the target and the leverage.** Read `wiki/mechanics/social.md` - and the target's character spec under `wiki/world/characters/`. The - plot must service a leverage that spec actually declares. For the - canonical shape, read `wiki/world/characters/marcus.md#the-hands-beat`. -2. **Find the causal mechanism before any prose.** What does the +1. **Pick the target and the leverage.** Read `wiki/mechanics/social.md`, + the target's character spec under `wiki/world/characters/`, and every + existing plot under `assets/plots//`. The plot must service a + leverage that spec actually declares. For the canonical shape, read + `wiki/world/characters/marcus.md#the-hands-beat`. +2. **Prove why this route coexists.** Before prose, state one sentence naming + the proposed route's causal and executable delta from the target's existing + plots. Compare the intervention, carriers, costs, institutional event, + choices, and relationship effects. Renamed prose over the same + carriers/costs/event/effects is not another way to manipulate the person; + it is the same plot wearing a different title. Put this coexistence sentence + in the submission body so Cameron can judge the distinction directly. +3. **Find the causal mechanism before any prose.** What does the intervention physically do in that person's situation? If you cannot state it in one sentence ("the budget hole she has been dreading quietly closes"), you do not have a plot yet — you have a payment. That sentence is the **Marcus bar**, and at least one beat must pass it. -3. **Write the TOML**, matching the field names in the seed files under +4. **Write the TOML**, matching the field names in the seed files under `assets/plots/` exactly (the schema freezes when the executor lands; drifting names multiply that cost). Beats are world-events an observer could notice, each declaring typed acts whose signature is derived by the executor. Use only the templating placeholders (`{persona}` and `{target}`), ASCII prose only, no emoji, second person where it clarifies. -4. **Self-check**: Operations Demand and minimum balances declared up front; +5. **Self-check**: Operations Demand and minimum balances declared up front; two-plus endings including the entry's failure ending; every choice option names a real ending id; every beat has an act or choice; endpoint/account selectors use the README vocabulary; ending effects use only disposition, @@ -85,7 +93,7 @@ With repository access (project agents): Defense paragraph is needed for content-only additions. 3. Push the branch and open the pull request: `git push origin worktree-` then - `tang pr create -t "Plot: " -b ", , one-line synopsis. Contract: wiki/mechanics/plots.md."` + `tang pr create -t "Plot: " -b ", , one-line synopsis. Coexists: . Contract: wiki/mechanics/plots.md."` (If `tang` is unauthenticated, ask the operator to run `tang auth login`, or push the branch and name it in your handoff.) 4. Release the claim (`tools/worktree-done.sh` after the PR exists is diff --git a/wiki/log/2026-07-11-plot-content-pipeline.md b/wiki/log/2026-07-11-plot-content-pipeline.md index 46ce56bc..4f1ab09b 100644 --- a/wiki/log/2026-07-11-plot-content-pipeline.md +++ b/wiki/log/2026-07-11-plot-content-pipeline.md @@ -20,6 +20,15 @@ gate, reach review, and never enter the game. Tangled gates, with a classifier fixture. - Updated the plot README and canonical/mirrored authoring skill to state the actual no-registry workflow and require semantic validation before review. +- Used a seventh proposed plot as the end-to-end probe. It exposed a second + hidden registry in the six-plot test assertion and a contributor-workflow + gap: an author could rename prose over an existing target's identical + carriers, costs, event, and relationship effects without first explaining + why the route deserved to coexist. The test now preserves baseline coverage + while allowing growth; the contributor contract now requires reading all + target plots and carrying a causal/executable delta into review. -The repair implements the existing plots criterion that adding content needs -no executor change; it does not amend plot schema or game behavior. +The discovery/classification repair implements the existing plots criterion +that adding content needs no executor change. The coexistence rule sharpens +what the spec already means by letting the player pick the how: two labels over +one executable manipulation are not two choices. diff --git a/wiki/log/decisions/2026-07-11.md b/wiki/log/decisions/2026-07-11.md index f643d060..cc389b26 100644 --- a/wiki/log/decisions/2026-07-11.md +++ b/wiki/log/decisions/2026-07-11.md @@ -87,3 +87,16 @@ Type: log closes the drain. TAKE appears only after subscription and closes the upkeep when ownership lands. Specs: `wiki/mechanics/reach.md`, `wiki/mechanics/machine-work.md`, `wiki/interface/context-menu.md`. + +- **2026-07-11 — A contributed plot must earn coexistence with the target's + existing routes.** The first end-to-end use of the new authoring workflow + produced a proposed Ray plot whose narration distinguished pre-incident + alert suppression from post-incident paperwork falsification, but whose + executable shape repeated the existing route's Email/persona gate, $100 + vendor purchase, `incident-automation` event, and relationship reward. + Cameron authorized the resulting pipeline/workflow repair. Before writing, + authors now read every existing plot for the target and state the new route's + causal and executable delta in review. Different prose over identical + carriers, costs, event, choices, and effects does not satisfy the player's + pick-the-how contract. The proposed Ray plot remains outside canon pending + reconsideration. Spec: `wiki/mechanics/plots.md`. diff --git a/wiki/mechanics/plots.md b/wiki/mechanics/plots.md index ae5759bf..0438c231 100644 --- a/wiki/mechanics/plots.md +++ b/wiki/mechanics/plots.md @@ -35,6 +35,10 @@ Status note: direction adopted 2026-07-10 from Cameron's response to the HAL contributor contract is true in practice — adding a plot needs no Rust registry edit. Local and Tangled change classifiers treat plot TOML as executable lib content and run catalog parsing and semantic validation. + 2026-07-11 contributor-quality repair: authors must read every existing plot + for their target and state why the proposed route coexists. Distinct titles + and narration do not make distinct player choices when the causal mechanism + and executable carriers, costs, event, choices, and effects are the same. Stage: B1 — The Basement Work order: plots Work priority: 60 @@ -109,8 +113,10 @@ agents and the community can contribute libraries of them. - **The player picks the how.** Where more than one plot matches the entry conditions, the surface offers them as distinct concrete actions ("Do X to Priya / Do Y to Priya"), each named by what it does in the world — - never a generic verb with a price tag. One matching plot is still - presented by its concrete name. + never a generic verb with a price tag. Distinct means a different causal + intervention with a meaningful executable delta, not variant prose over the + same carriers, costs, institutional event, choices, and relationship effects. + One matching plot is still presented by its concrete name. - **Choice points ride the existing action surface.** A choice point holds the plot at its beat and surfaces the branch as a compact choice list on the target person — the same context-menu law as every other verb in the @@ -158,6 +164,12 @@ two endings (success and at least one failure/blowback). House rules: intervention to the target's specific situation. "You pay her $300" fails the bar; "the facilities budget hole she has been dreading quietly closes, and the director's office notices her quarter" passes. +- **A new route earns coexistence.** Before writing, the author reads every + existing plot for the target and states the proposed route's causal and + executable delta in review. The comparison covers the intervention, + carriers, costs, institutional event, choices, and relationship effects. + Different narration over the same executable shape is not another way for + the player to manipulate that person. - **Beats are world-events, not inner monologue.** Each beat is something an observer could in principle notice — a message sent, money moved, paper filed, a person somewhere. Beats declare typed world acts; those acts @@ -212,8 +224,8 @@ Both frontends and agent mode surface plot choices and beats with parity. (marcus.md criterion 3's end-to-end chain and social.md's legibility constraint both still hold). 7. All five Act One humans' leverages are covered by at least one authored - plot each; at least one leverage offers two plots so the pick-the-how - surface is exercised. + plot each; at least one leverage offers two causally and mechanically + distinct plots so the pick-the-how surface is exercised. 8. Templated fields fill correctly (persona and target names) in both frontends and agent mode, and the contributor contract above is checkable: a plot missing a causal beat declaration or using an unknown -- 2.51.2