worldbox-observer-mod/docs/life-saga.md
DazedAnon 4b6c829bd0 feat(saga): ship adaptive dossier tabs with durable memory
- Add Dossier/Saga tabs, Design A panel, and hover preview with read-pause
- Persist observed saga facts across roster churn; pin subject without stale fallback
- Restore Saga after Open Lore; hide redundant Kind · Climax spine under matching tips
- Densify dossier header/chips and keep the cast rail as stable top chrome
- Extend harness coverage for hover restore, empty pick, Evidence, and Lore return
2026-07-22 03:27:46 -05:00

5.4 KiB

Life-saga roster

Dynamic top-10 cast of interesting lives (MCs). Owns the dossier rail and soft camera bias. Chronicle stays a history book and never drives the camera. Short combat/love/war arcs stay in StoryPlanner as chapter beats. Durable observed facts live in LifeSagaMemory and survive roster churn.

Ownership

Concern Owner
Top-10 MCs, diversity, Prefer LifeSagaRoster
Durable observed facts LifeSagaMemory
Adaptive presentation LifeSagaPresentation
Dossier / Saga tabs + hover preview LifeSagaViewController
Saga body UI LifeSagaPanel
Rail icons / Prefer click LifeSagaRail
Camera read-pause lease InterestDirector
Short climax → aftermath → epilogue StoryPlanner (thinned)
Spine under tip StoryPlanner.FormatSpineLabel
Full history Chronicle / Lore

Admission

Live discovery (no tip-string allowlists):

  • Game favorite, king, city leader, kills/renown floors (InterestScoring.IsNotable)
  • Pack alpha, clan chief, army captain, active plot author, founder, species singleton

Standing is recomputed from live roles each refill. Heat comes from chapter stamps / featured tips and decays with idle time. Each slot keeps its original admission reason even when its live role later changes. Hard-arc admissions also retain the arc kind and chapter context that brought the life onto the roster.

Dynamic top-10

  • Cap stays 10; order follows Effective = Standing + Heat + pin bonuses.
  • Prefer and WorldBox favorites are hard pins and fully count toward Cap.
  • Admission-role units always compete on the periodic scan.
  • Non-admission "nobodies" challenge Cap only via hard-arc chapter stamps (Combat / War / Plot / Love / Grief).
  • Soft NoteFeatured heats existing MCs only.
  • Newcomers need a small challenger margin over the weakest non-pin so the rail does not thrash.

Camera (soft)

  • No rail camera lock. Prefer is a toggle soft-favorite for idle scoring.
  • Score ladder: crisis ownership > active short-arc ownership > Prefer soft > MC soft > CausalHeat.
  • Near-ties prefer Prefer'd MCs, then any MC.
  • Ambient fill prefers roster MCs over random villagers.
  • Glyph hover acquires a camera read-pause lease: feeds/story/roster continue, but selection and focus repair are deferred until release.

Rail UX

  • Up to 10 slots with live inspect-UI sprites (refreshed ~3x/sec for animation frames).
  • Egg forms and tiny/blank atlas crops fall back to the species icon (letter last).
  • Active chrome = camera follow only; Prefer uses a star pip / distinct border.
  • Click toggles saga Prefer (does not mutate WorldBox unit favorite).
  • While on the Saga tab, click also pins that life as the persistent Saga subject.
  • Tabs sit above the cast rail; the rail is a horizontal strip under the tabs so Dossier↔Saga body swaps cannot move the glyphs.
  • Dossier shows the watched unit dossier; Saga shows the adaptive saga panel for the watched MC when on the roster.
  • If the watched unit is not an MC and nothing is pinned, Saga shows an empty Pick a life from the rail state (never a stale first-roster filler).
  • Hovering a glyph temporarily previews that life in the Saga body and pauses camera switching.
  • Leaving the rail (or panel after a dwell) re-arms a short grace, then restores the prior tab and releases the pause lease.
  • Clicking a tab during hover cancels the preview immediately and applies that tab.
  • Tabbed chrome locks a constant outer width so Dossier↔Saga hover cannot slide glyphs.
  • Saga body matches Design A: identity, stake (accent wrap), Cast (face + name + relation), Evidence (lens module), Legacy, Open Lore.
  • Open Lore from Saga stashes return-to-Saga; Lore close restores the Saga tab and subject when still an MC.
  • Body height sizes to content up to a cap; lines wrap fully (no ellipsis truncation).
  • Glyph hover keeps the preview while the pointer stays on the rail or dossier panel.
  • Dossier story spine (Kind · Phase) is hidden when the orange reason already names the same kind and phase is Climax.
  • Never show live task/status/trait rows or call a live attack target a rival.
  • Earned rivals require memory evidence (repeated encounters, kin kills, war/plot opposition).
  • Likely succession is omitted unless a game-authored heir API probe succeeds.
  • Pack / kin lenses fill remaining Cast slots with live family peers (Packmate / Kin) after lover/friend/parents/children/heir/rival.

Soft-fill quiet (AFK hygiene)

After hard story/crisis closers, soft-fill quiet suppresses soft-life crumbs and short interrupt FX (stunned / invincible). FamilyPack does not break quiet (ambient cluster fill). Combat / war / plot / outbreak / earthquake / story beats / epic strength still cut in. Quiet can refresh briefly when a soft crumb ends (bounded).

Session

  • StoryPlanner.Clear does not wipe the roster or saga memory.
  • Lore browse / brief idle-off keeps the roster and memory.
  • World replacement, harness batch end, and interest_saga_clear wipe roster + memory.

Harness

  • saga_roster_diversity
  • saga_camera_prefers_mc
  • saga_prefer_soft_bias
  • saga_overview_has_mc
  • saga_adaptive_dossier
  • saga_memory_survives
  • saga_hover_read_pause
  • saga_replace_on_death
  • saga_admit_roles
  • saga_replace_weaker
  • saga_rail_active_highlight
  • saga_rail_prefer_click
  • saga_soft_fill_no_pack

See also: story-planner.md.