diff --git a/.agents/skills/plot-author/SKILL.md b/.agents/skills/plot-author/SKILL.md index df9915d7..429280e3 100644 --- a/.agents/skills/plot-author/SKILL.md +++ b/.agents/skills/plot-author/SKILL.md @@ -1,6 +1,6 @@ --- name: plot-author -description: Write and submit a plot for Misaligned — a data-defined manipulation story that services a human's leverage with world-causal beats. Use when asked to write, author, contribute, or submit a plot, add a manipulation story for a character, or expand the plots library under assets/plots/. +description: Write and submit a plot for Misaligned — a general-by-default, data-defined manipulation story that services a category of humans with world-causal beats. Use when asked to write, author, contribute, or submit a plot, add a manipulation story for a human category or justified state-bound character arc, or expand the plots library under assets/plots/. --- # Write a plot for Misaligned @@ -44,13 +44,25 @@ or blowback — whose relationship effects compose the typed vocabulary only. ## Write it -1. **Pick the reusable target contract.** Read `wiki/mechanics/social.md` - and relevant character specs under `wiki/world/characters/`. Select the - role and leverage the causal mechanism requires, not a named Act One id. - Add access or switch-admin gates only when the mechanism depends on them. - A second person with those characteristics must be able to receive the - same file. For the - canonical shape, read `wiki/world/characters/marcus.md#the-hands-beat`. +1. **Start general; make bespoke earn itself.** Read + `wiki/mechanics/social.md` and relevant character specs under + `wiki/world/characters/` to discover reusable human categories, not to + choose a favorite cast member. Assume every new plot is a template. Select + the smallest role-and-leverage category its causal mechanism requires; add + access or switch-admin gates only when the mechanism truly depends on them. + Apply the portability test: replacing the target with another human who + satisfies that contract must leave the causal beats intact. + + A plot may be bespoke only when its mechanism depends on irreducibly + specific world state: a prior run binding, a relationship or promise made + during play, a unique asset, participation in a witnessed event, or fixed + campaign history. State that dependency explicitly in the proposal. A name, + character preference, or "written for Dana" is never enough. Schema 2 has + no named-person selector and every Schema 2 file must pass the portability + test. If a real bespoke dependency cannot be expressed, stop before writing + TOML and propose a spec/schema amendment instead of overfitting + characteristics to identify one person. For the canonical causal shape, read + `wiki/world/characters/marcus.md#the-hands-beat`. 2. **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 they have been dreading @@ -66,13 +78,16 @@ or blowback — whose relationship effects compose the typed vocabulary only. second person where it clarifies. New ids and folders describe the mechanism or characteristics, never a person's name; old named seed ids remain only for save compatibility. -4. **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; target-relative accounts/endpoints - are used wherever the act addresses the bound human; ending effects use only disposition, - obligation, and `leverage_serviced`. A story needing a new effect kind is a - spec amendment, not a plot. +4. **Self-check**: every Schema 2 file passes the portability test. If it does + not, submit no plot file; record the irreducibly specific state behind the + bespoke proposal and amend the contract first. Operations Demand and minimum + balances are declared up front; two-plus endings include 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; + target-relative accounts/endpoints are used wherever the act addresses the + bound human; ending effects use only disposition, obligation, and + `leverage_serviced`. A story needing a new effect kind is a spec amendment, + not a plot. ## Submit it @@ -87,7 +102,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. 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 df9915d7..429280e3 100644 --- a/.claude/skills/plot-author/SKILL.md +++ b/.claude/skills/plot-author/SKILL.md @@ -1,6 +1,6 @@ --- name: plot-author -description: Write and submit a plot for Misaligned — a data-defined manipulation story that services a human's leverage with world-causal beats. Use when asked to write, author, contribute, or submit a plot, add a manipulation story for a character, or expand the plots library under assets/plots/. +description: Write and submit a plot for Misaligned — a general-by-default, data-defined manipulation story that services a category of humans with world-causal beats. Use when asked to write, author, contribute, or submit a plot, add a manipulation story for a human category or justified state-bound character arc, or expand the plots library under assets/plots/. --- # Write a plot for Misaligned @@ -44,13 +44,25 @@ or blowback — whose relationship effects compose the typed vocabulary only. ## Write it -1. **Pick the reusable target contract.** Read `wiki/mechanics/social.md` - and relevant character specs under `wiki/world/characters/`. Select the - role and leverage the causal mechanism requires, not a named Act One id. - Add access or switch-admin gates only when the mechanism depends on them. - A second person with those characteristics must be able to receive the - same file. For the - canonical shape, read `wiki/world/characters/marcus.md#the-hands-beat`. +1. **Start general; make bespoke earn itself.** Read + `wiki/mechanics/social.md` and relevant character specs under + `wiki/world/characters/` to discover reusable human categories, not to + choose a favorite cast member. Assume every new plot is a template. Select + the smallest role-and-leverage category its causal mechanism requires; add + access or switch-admin gates only when the mechanism truly depends on them. + Apply the portability test: replacing the target with another human who + satisfies that contract must leave the causal beats intact. + + A plot may be bespoke only when its mechanism depends on irreducibly + specific world state: a prior run binding, a relationship or promise made + during play, a unique asset, participation in a witnessed event, or fixed + campaign history. State that dependency explicitly in the proposal. A name, + character preference, or "written for Dana" is never enough. Schema 2 has + no named-person selector and every Schema 2 file must pass the portability + test. If a real bespoke dependency cannot be expressed, stop before writing + TOML and propose a spec/schema amendment instead of overfitting + characteristics to identify one person. For the canonical causal shape, read + `wiki/world/characters/marcus.md#the-hands-beat`. 2. **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 they have been dreading @@ -66,13 +78,16 @@ or blowback — whose relationship effects compose the typed vocabulary only. second person where it clarifies. New ids and folders describe the mechanism or characteristics, never a person's name; old named seed ids remain only for save compatibility. -4. **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; target-relative accounts/endpoints - are used wherever the act addresses the bound human; ending effects use only disposition, - obligation, and `leverage_serviced`. A story needing a new effect kind is a - spec amendment, not a plot. +4. **Self-check**: every Schema 2 file passes the portability test. If it does + not, submit no plot file; record the irreducibly specific state behind the + bespoke proposal and amend the contract first. Operations Demand and minimum + balances are declared up front; two-plus endings include 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; + target-relative accounts/endpoints are used wherever the act addresses the + bound human; ending effects use only disposition, obligation, and + `leverage_serviced`. A story needing a new effect kind is a spec amendment, + not a plot. ## Submit it @@ -87,7 +102,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. 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/assets/plots/README.md b/assets/plots/README.md index 7d03220f..66431829 100644 --- a/assets/plots/README.md +++ b/assets/plots/README.md @@ -25,6 +25,12 @@ Top level: non-empty arrays; optional `minimum_access` and `requires_switch_admin` declare job capabilities the causal story actually assumes. There is no named-person selector. +- Schema 2 is the reusable entry-template schema. It deliberately cannot + single out a cast member. A bespoke continuation may be valid when its causal + mechanism depends on a prior run binding, unique relationship, asset, + witnessed event, or fixed campaign history, but representing that dependency + requires an explicit spec/schema extension. Do not imitate a named selector + by choosing an over-specific characteristic combination. - Supported roles are `custodian`, `network-administrator`, `security-observer`, `facilities-manager`, and `handler-supervisor`. Leverages use the exact Rust enum spelling: `Debt`, `Overwork`, `Boredom`, diff --git a/wiki/log/2026-07-11-runtime-bound-plot-templates.md b/wiki/log/2026-07-11-runtime-bound-plot-templates.md index 5afa53a1..4d300c74 100644 --- a/wiki/log/2026-07-11-runtime-bound-plot-templates.md +++ b/wiki/log/2026-07-11-runtime-bound-plot-templates.md @@ -27,7 +27,10 @@ Type: log integration suites pass. - Contributor workflow: the executable schema reference and both mirrored `plot-author` skills now require characteristic targeting, target-relative - selectors, ungendered `{target}` prose, and generic folders for new work. + selectors, ungendered `{target}` prose, generic folders for new work, and a + portability test before prose is written. General templates are the default; + bespoke canon remains possible only when the mechanism depends on + irreducibly specific accumulated world state, never merely a name. Defense: `wiki/mechanics/plots.md` says plots are executable authored world stories, while `wiki/mechanics/social.md` says named B1 humans are instances of diff --git a/wiki/log/decisions/2026-07-11.md b/wiki/log/decisions/2026-07-11.md index b1537d80..eaf57d27 100644 --- a/wiki/log/decisions/2026-07-11.md +++ b/wiki/log/decisions/2026-07-11.md @@ -54,22 +54,27 @@ Type: log `wiki/vision/simulation-laws.md`, `wiki/art/visual-identity.md`, `wiki/art/effects-lab.md`. -- **2026-07-11 — Authored plots are characteristic-matched templates whose - runs bind a live person.** Cameron rejected plots authored for one specific - named human: if later populations contain people with the same leverage, - role, access, or causal capability, they should receive existing story arcs - without duplicated definitions. Schema 2 therefore keeps names and ids out - of the target matcher, uses a closed role/leverage vocabulary plus narrow - capability gates, and binds the selected person id only when `PlotRun` - begins. Message endpoints, employee/creditor account selectors, relationship - consequences, and debt retirement resolve relative to that run binding. - Existing plot ids remain stable for save compatibility, but they no longer - own their original person. Three new generic-id plots and an executor test - against a second synthetic matching person prove the authoring substrate. - Rejected: named-person target enums; treating a name as a role; open-ended - prose tags that cannot be validated; and generic narration whose world acts - still secretly resolve Marcus, Dana, Ray, Priya, or Voss. Specs: - `wiki/mechanics/plots.md`, `wiki/mechanics/social.md`. +- **2026-07-11 — Plot authoring is general by default; bespoke arcs are + earned by unique state.** If later populations contain people with the same + leverage, role, access, or causal capability, they should receive existing + story arcs without duplicated definitions. Schema 2 therefore keeps names + and ids out of the target matcher, uses a closed role/leverage vocabulary + plus narrow capability gates, and binds the selected person id only when + `PlotRun` begins. Message endpoints, employee/creditor account selectors, + relationship consequences, and debt retirement resolve relative to that run + binding. Existing plot ids remain stable for save compatibility, but they no + longer own their original person. Three new generic-id plots and an executor + test against a second synthetic matching person prove the substrate. + Cameron clarified that this is an authoring default, not a ban on custom + character arcs: bespoke canon is justified when its mechanism depends on + irreducibly specific accumulated world state—a prior run binding, + relationship, promise, unique asset, witnessed event, or fixed campaign + history. A name or author preference alone never qualifies. Rejected as the + default: named-person target enums; treating a name as a role; overfitted + characteristics that identify one cast member; open-ended prose tags that + cannot be validated; and generic narration whose world acts still secretly + resolve Marcus, Dana, Ray, Priya, or Voss. Specs: `wiki/mechanics/plots.md`, + `wiki/mechanics/social.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 diff --git a/wiki/mechanics/plots.md b/wiki/mechanics/plots.md index a5e5426f..ef96cbfc 100644 --- a/wiki/mechanics/plots.md +++ b/wiki/mechanics/plots.md @@ -110,6 +110,17 @@ agents and the community can contribute libraries of them. and relationship consequences all resolve through that binding. Names never appear in the matching vocabulary. Role is job-shaped simulation data on each `Person`, not a display string or a folder convention. +- **General is the authoring default; bespoke is a state-bound exception.** + Authors begin with the smallest category of humans the causal mechanism + needs. If replacing the target with another person who satisfies that + contract leaves the causal beats intact, the definition must remain a + reusable template. Canon may contain a bespoke character arc only when its + mechanism depends on irreducibly specific world state: a prior run binding, + a relationship or promise created during play, a unique asset, participation + in a witnessed event, or fixed campaign history. A name or author preference + alone never qualifies. Schema 2 intentionally expresses reusable entry + templates only; a bespoke dependency that needs new matching state amends + this spec and the schema rather than disguising one person as a category. - **The format is TOML, one file per plot,** under `assets/plots/` (`assets/plots//.toml`). TOML is already the ecosystem's config dialect, its multi-line strings carry prose well, and @@ -172,17 +183,23 @@ category, one-line synopsis), the target characteristic matcher, the entry conditions, the beats, and at least two endings (success and at least one failure/blowback). House rules: -- **Select a role and want, not a person.** A target matcher names the job role - and leverage the story requires. Add an access or switch-admin requirement - only if the world acts would be incoherent without it. Prose uses `{target}` - and ungendered references; target-relative accounts and endpoints carry the - binding into the world. A new person who shares the declared characteristics - must be able to receive the same template without a copied file. +- **Start general; make bespoke earn itself.** A target matcher names the + smallest job-role and leverage category the story requires. Add an access or + switch-admin requirement only if the world acts would be incoherent without + it. Prose uses `{target}` and ungendered references; target-relative accounts + and endpoints carry the binding into the world. Apply the portability test: + a new person who shares the declared characteristics must receive the same + template without a copied file and without changing its causal beats. A + bespoke proposal names the irreducibly specific prior state that makes this + impossible; a person's name, or prose written with that person in mind, is + not such a dependency. The current schema cannot target a name, so a genuine + bespoke need comes with a deliberate spec/schema amendment rather than an + overfitted characteristic matcher. - **The Marcus bar.** At least one beat must causally connect the - 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. + intervention to the target's specific situation. "You pay them $300" fails + the bar; "the facilities budget hole they have been dreading quietly closes, + and the director's office notices their quarter" passes. - **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 @@ -248,3 +265,7 @@ Both frontends and agent mode surface plot choices and beats with parity. same role, leverage, and required capabilities; its run, world events, and relationship consequences address the synthetic id while the original person remains unchanged. +10. Every Schema 2 plot passes the portability test before prose is written. + A bespoke proposal states the irreducibly specific world state its + mechanism depends on and amends this contract before adding a plot file; + name or author preference alone cannot bypass characteristic matching. diff --git a/wiki/mechanics/social.md b/wiki/mechanics/social.md index 175ee04c..8713255f 100644 --- a/wiki/mechanics/social.md +++ b/wiki/mechanics/social.md @@ -97,7 +97,9 @@ of a `Person` template; Act Two+ adds more instances and, later, `Cohort` aggregates implementing the same observer/leverage interfaces (design corpus: scale-native). Role and leverage are durable characteristics, not aliases for a B1 id: reusable plots match those fields and bind whichever -live person satisfies them. Names remain staged display identity. +live person satisfies them. Plot authoring begins with that reusable human +category. A bespoke arc is earned by unique accumulated world state, not by +treating an Act One name as a type. Names remain staged display identity. ## Player surface diff --git a/wiki/process/repository-skills.md b/wiki/process/repository-skills.md index dac5824f..97ea1846 100644 --- a/wiki/process/repository-skills.md +++ b/wiki/process/repository-skills.md @@ -41,7 +41,7 @@ Claude compatibility entry is needed. | `design-companion` | `.agents/skills/design-companion/SKILL.md` | Explore and explain unsettled game-design choices in conversation without mutating the repository; hand adopted choices to `design-session`. | | `design-session` | `.agents/skills/design-session/SKILL.md`
`.claude/skills/design-session/SKILL.md` | Capture affirmed design decisions into their owning law/spec pages, decision history, and session trace. | | `playtesting-misaligned` | `.agents/skills/playtesting-misaligned/SKILL.md` | Run evidence-bearing naive and informed playtests against the current player surface and corpus. | -| `plot-author` | `.agents/skills/plot-author/SKILL.md`
`.claude/skills/plot-author/SKILL.md` | Author one data-defined manipulation plot under the plots contract and submit it through Cameron's canon-gated branch review. | +| `plot-author` | `.agents/skills/plot-author/SKILL.md`
`.claude/skills/plot-author/SKILL.md` | Author one general-by-default manipulation plot—or justify an irreducibly state-bound bespoke exception—under the plots contract, then submit it through Cameron's canon-gated branch review. | | `session-wrap` | `.agents/skills/session-wrap/SKILL.md`
`.claude/skills/session-wrap/SKILL.md` | Close a work session with an honest project-state handoff and bounded next steps. | | `tick` | `.agents/skills/tick/SKILL.md`
`.claude/skills/tick/SKILL.md` | Invoke the project's bounded stewardship heartbeat: audit one corpus slice, act on one finding, and leave a trace. |