3.7 KiB
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
- Instant cut when
next.TotalScore >= current + cutInMargin(no settle). - Else hold while
InterestCompletion.IsActiveand under MaxWatch. - 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).