worldbox-observer-mod/docs/story-planner.md
2026-07-21 13:35:07 -05:00

2.5 KiB
Raw Blame History

Story Planner

IdleSpectator commits to short multi-beat stories instead of channel-surfing ranked tips.

Feeds, sticky ensembles, presentability, and InterestDirector stay in place. StoryPlanner sits above the director and owns which story the next 3090s belongs to.

See also: scoring-model.md, event-reason.md.

Pipeline

Feeds → InterestRegistry → StoryPlanner (boost / inject)
       → InterestVariety.Pick → InterestDirector → CameraDirector

Director still owns camera, sticky maintain, and switch margins. Planner never calls MoveCamera.

Arc model

Kind Climax Hard hold
CombatDuel sticky pair only notable pairs (2+ notables)
CombatMass Skirmish+ yes
WarFront / Plot / Love / Grief existing sticky / life yes

Phases: Climax → Aftermath → Epilogue → Done.

  • Aftermath injects on climax cold (quiet grace), or claims natural death_* grief.
  • Epilogue once after aftermath if a living lover/friend resolves.
  • Soft anonymous duels still get aftermath tips; they do not use raised arcHoldMargin.

Selection discipline

  • InterestVariety.Pick takes #1 when score gap ≥ story.nearTieEpsilon (default 8).
  • Near-ties still roll among top-3.
  • Causal heat + Character Ledger heat add into RecalcTotal.

Knobs

scoring-model.jsonstory block (loaded by InterestScoringConfig.Story).

Catalog policy ids live under event-catalog.jsonstory (aftermath_survivor, aftermath_mourner, aftermath_war_linger, …).

Harness

Scenario Proves
story_aftermath_combat duel cold → aftermath tip
story_aftermath_war war sticky cold → aftermath
story_near_tie large gap always picks #1
story_arc_combat climax → aftermath ownership
story_arc_preempt_resume epic cut then fresh scrap aftermath
story_ledger_revisit featured unit wins near-tie
./scripts/harness-run.sh --repeat 3 story_aftermath_combat
./scripts/harness-run.sh --repeat 3 story_near_tie
./scripts/harness-run.sh --repeat 3 story_arc_combat
./scripts/harness-run.sh --repeat 3 story_ledger_revisit

Files

  • IdleSpectator/Story/StoryPlanner.cs - ownership, cold-hook, inject
  • IdleSpectator/Story/CausalHeat.cs - decaying cast heat
  • IdleSpectator/Story/CharacterLedger.cs - watched lives (cap 16)
  • IdleSpectator/Story/StoryReason.cs - presentable aftermath Labels