2.5 KiB
2.5 KiB
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 30–90s 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.Picktakes#1when score gap ≥story.nearTieEpsilon(default 8).- Near-ties still roll among top-3.
- Causal heat + Character Ledger heat add into
RecalcTotal.
Knobs
scoring-model.json → story block (loaded by InterestScoringConfig.Story).
Catalog policy ids live under event-catalog.json → story
(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, injectIdleSpectator/Story/CausalHeat.cs- decaying cast heatIdleSpectator/Story/CharacterLedger.cs- watched lives (cap 16)IdleSpectator/Story/StoryReason.cs- presentable aftermath Labels