Question #
A general (Schema 2) plot whose matcher covers an already-authored named character's (role, leverage) category breaks a hard-coded route-count test, forcing a Rust/test edit that the plot-author contract says content-only additions never need. Which do you want?
- Loosen the pinning tests to assert intent (the named routes are present and enabled) instead of an exact count, so general plots may add routes to a covered category without a Rust edit.
- Keep exact-count pinning as a deliberate canon guard, and amend the plot-author contract to state that adding a route to a test-pinned category requires updating that test (with a Defense) — i.e. "no Rust edit" holds only for uncovered categories.
- Something else (say what).
Why this is open #
crates/misaligned-core/src/actions.rs:2905 asserts plots.len() == 2 ("Marcus exposes both authored debt routes") for the custodian+Debt category; queued_plot_disables_every_alternate_route_for_that_person (same file, ~2961) similarly reasons over that fixed route set. Marcus matches by role/leverage, so any general Debt plot that also matches custodian raises his route count to 3 and fails the lib gate.
The plot-author contract (.claude/skills/plot-author/SKILL.md, "Build-time discovery compiles every plot automatically; do not edit Rust to register a plot"; "no Defense paragraph is needed for content-only additions") and wiki/mechanics/plots.md promise pure-content additions. These two statements cannot both hold for a category a pinning test already covers.
Concrete fallout today: the looming-bill-absorbed plot PR (a first-Debt-coverage route for four facility roles) had to deliberately EXCLUDE custodian to stay content-only green — a silent scope narrowing driven by the test, not by the mechanism.
Options #
| Option | Trade-off |
|---|---|
| 1. Assert intent, not count | Content stays content-only (honors the plot contract and general-by-default); loses the exact-count tripwire that would catch an accidental duplicate route on a bespoke character. |
| 2. Formalize the exception | Keeps the per-character count as a canon guard; contradicts the "no Rust edit / content-only" promise for covered categories and adds friction to the general-by-default path the skill pushes. |
Recommendation #
Option 1 — change the two tests to assert Marcus's two named routes are present, enabled, and correctly priced (their real intent) rather than that his total is exactly 2. This preserves the guard that both authored Marcus routes surface, unblocks general plots in covered categories, and keeps the plot-author contract literally true. A separate lighter assertion can still catch accidental duplication (e.g. no two routes share an id).
What your answer unlocks #
Option 1: a small Type: spec/test amendment to wiki/mechanics/plots.md + actions.rs (Defense: honors the plot contributor contract) that lets the held looming-bill-absorbed PR widen to include custodian, and removes the trap for future general plots. Option 2: an amendment to the plot-author skill/plots.md documenting the covered-category exception, and the current custodian-excluded scope stands. Close the issue once the chosen amendment lands.