Skip to content

[The Table] Companion Agendas — relationships that push back (initiated beats, objections, departure) #837

@100yenadmin

Description

@100yenadmin

Concept

Companions have dossiers, approval, banter — but no agendas. Story 4.3 needs relationships that push back: companions who initiate scenes, object mid-quest, have conflicting desires, and can leave. (Audit insight: story ≥4.3 is a SYSTEM gap, not a prose gap — prose already scores 4.0+.)

Design

  1. Agenda model (additive on companion.py/companion_arc.py): each companion gets agenda: {goal, taboo, fuse} — a desire (e.g. Rolan: prove himself), a line the player mustn't cross (taboo), and a fuse (approval threshold + event triggers that fire an agenda beat).
  2. Companion-initiated beats: a deterministic engine trigger (the Director's advisory channel — director.py already advises the DM per beat) that, when a fuse condition fires (approval crossing a band, a taboo event logged, a camp rest after a charged scene), instructs the DM: "COMPANION BEAT: pulls the player aside — play their agenda scene." The engine decides WHEN (deterministic, gauge-backed per invariant Epic 2: Characters & progression #3); the DM plays WHAT.
  3. Objection interjections: on quest decisions that touch a companion's taboo, the engine surfaces an objection flag in the decision payload → the DM voices it BEFORE resolution; the player chooses anyway → approval consequence logged with reason ([memory] Append {delta,reason} at the ~4 approval/reputation mutator sites #613 machinery).
  4. Departure: approval floor + a fired taboo ⇒ engine sets companion.status=departing → the DM plays the exit; reversible via a reconciliation arc (the existing arc-stage machine).

Files

servers/engine/companion.py, companion_arc.py, director.py (the trigger channel), models.py (additive agenda fields, default-empty = today's behavior), dungeon-master skill (the COMPANION BEAT directive), viewer Relations screen (agenda hints, fuse state NOT shown raw — show "something is weighing on Rolan").

Acceptance

A scripted engine test: approval crossing a band fires exactly one companion-beat advisory; a taboo event sets the objection flag; departure triggers at the configured floor. A duo run shows a companion-initiated scene in the transcript (story-lens scored). Old snapshots round-trip (agenda defaults empty).

Moves

story_craft → 4.3 (the biggest single lever), cross_persona_sat (narrative), retention.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions