worldbox-observer-mod/docs/event-audit.md

3.7 KiB

Event audit (post-expand)

Inventory policy after the full gap expand. Camera interrupt is score-margin only (cutInMargin); no Signal/Ambient ownership gate.

Dials

Dial Role
CreatesInterest Whether a live id may register at all
EventStrength Base contribution to TotalScore (interrupt via +cutInMargin)
Completion Hold-until-complete kind
MaxWatch Hard cap (class defaults in scoring-model.json)
EventReason Orange dossier sentence

MaxWatch class defaults

Class Seconds JSON field
Moment / FixedDwell 10 maxWatchMoment
Status 30 maxWatchStatus
Grief 45 maxWatchGrief
Combat 60 maxWatchCombat
Epic world 50 maxWatchEpic

Sources (wired)

Source Primary owner Reason factory Notes
WorldLog InterestFeeds.OnWorldLogMessage catalog / EventReason Strength from WorldLogEventCatalog
Happiness IngestHappiness HappinessEventCatalog + EventReason Birth/hatch freshness; grief sticky
Status OnStatusChange EventReason.Status drowning CreatesInterest=true, strength ~50; notable via CharacterSignificance
Scanner combat WorldActivityScanner EventReason.Fight / Battle Completion CombatActive
War WarEventPatches + WarInterestFeed.Tick war type labels
Plot PlotEventPatches + PlotInterestFeed.Tick PlotInterestCatalog
Relationship RelationshipEventPatches + happiness lovers EventReason.*
Trait TraitEventPatches EventReason.Trait Spawn window filters routine traits
Building BuildingEventPatches EventReason.Building* Eat/damage/falls
Boat BoatEventPatches EventReason.Boat
Book BookEventPatches BookInterestCatalog sentences
Era / Meta MetaEventPatches EventReason.MetaNew / era labels
Spell CombatActionLibrary.tryToCastSpell EventReason.Library Ambient CreatesInterest=false except spectacle ids
Power PlayerControl.clickedFinal EventReason.HumanizeId Spectacle ids create interest
Decision setDecisionCooldown EventReason.Library IsCameraWorthy filter
Item ItemManager EventReason.Library Legendary CreatesInterest
Gene Subspecies.mutateFrom EventReason.Library Ambient CreatesInterest=false
Phenotype generatePhenotypeAndShade EventReason.Library
World law WorldLaws.enable / toggle EventReason.HumanizeId Location-only
Biome catalog ready EventReason.HumanizeId Ambient CreatesInterest=false; emit via power terraform path
Subspecies trait SubspeciesManager biome hooks EventReason.Library
Character fill InterestDirector.TryCharacterFill empty Label Only when no pending EventLed

Ambient statuses (intentional off)

festive_spirit, laughing, singing, sleeping, handsome_migrant - CreatesInterest=false.

Same-moment ownership

Prefer typed feeds over WorldLog when both fire (relationship / status / combat). Registry Upsert merges same key and refreshes LastSeenAt for sticky combat/status/grief.

Interrupt / hold / grace

  1. Instant cut when next.TotalScore >= current + cutInMargin (no settle).
  2. Else hold while InterestCompletion.IsActive and under MaxWatch.
  3. Quiet grace 6s: still-worth-watching filter, then Character fill with empty reason.

Mutation gap triage

mutation_discovery refreshes .harness/mutation_gaps.tsv. Open rows are unexplained Wire candidates only. False positives (clear/load/UI/FX/getters) and covered-by-primary paths are filtered or listed in AlreadyWired. Library fields are inventory-complete via catalogs / activity / WorldLog (mutation_libraries.tsv notes).