From 1cbd68a718b511b5d4849708825ea037f86a75ee Mon Sep 17 00:00:00 2001 From: prosolis <5590409+prosolis@users.noreply.github.com> Date: Sun, 12 Jul 2026 22:01:09 -0700 Subject: [PATCH] news: Pete stops repeating what TwinBee just said in the room Priority tier is the only thing that makes Pete post a live Matrix beat, and the only two priority facts gogobee filed - zone_first and death - are both moments TwinBee narrates in-room as they happen. Every live beat was an echo. File them as bulletins: still on the site, still in the daily digest, no second telling to the people who were there. --- internal/plugin/dnd_combat.go | 9 +++++++-- internal/plugin/pete.go | 20 +++++++++++++------- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/internal/plugin/dnd_combat.go b/internal/plugin/dnd_combat.go index e4a300f..c2c38fb 100644 --- a/internal/plugin/dnd_combat.go +++ b/internal/plugin/dnd_combat.go @@ -579,9 +579,14 @@ func markAdventureDead(userID id.UserID, source, location string) { emitDeathNews(userID, location) } -// emitDeathNews files a PRIORITY death dispatch to Pete's adventure news. No-op +// emitDeathNews files a BULLETIN death dispatch to Pete's adventure news. No-op // unless the seam is enabled. Uses the character name (never the Matrix handle); // skips silently if the name is unknown. +// +// Bulletin, not priority: the room watched the character go down in TwinBee's +// narration, and a priority fact is what makes Pete post a live beat — he'd be +// breaking the news to the people who were there. The site row and the digest +// still carry it. func emitDeathNews(userID id.UserID, location string) { // Gate before the char lookups: markAdventureDead fires per-member on a // party wipe and in the sim harness, so skip the DB reads when disabled. @@ -597,7 +602,7 @@ func emitDeathNews(userID id.UserID, location string) { emitFact(peteclient.Fact{ GUID: fmt.Sprintf("death:%s:%d", eventToken(userID, fmt.Sprintf("%d", ts)), ts), EventType: "death", - Tier: "priority", + Tier: "bulletin", Subject: name, Zone: location, Level: lvl, diff --git a/internal/plugin/pete.go b/internal/plugin/pete.go index bb22f1c..d5e585f 100644 --- a/internal/plugin/pete.go +++ b/internal/plugin/pete.go @@ -258,10 +258,16 @@ func claimRealmFirst(kind, target string) bool { } // emitZoneClearNews files a zone-clear dispatch (boss down = zone cleared). The -// realm's first clear of a zone is a PRIORITY "zone_first"; later clears are a -// BULLETIN "zone_clear". The event_type and the GUID prefix track the tier so -// Pete templates and labels a repeat as a repeat, not a first-ever. Character -// name only; no-op unless the seam is enabled. +// realm's first clear of a zone is a "zone_first"; later clears are a +// "zone_clear". The event_type and the GUID prefix track which, so Pete +// templates and labels a repeat as a repeat, not a first-ever. Character name +// only; no-op unless the seam is enabled. +// +// BULLETIN either way: TwinBee announces the clear in the room as it happens, +// and priority tier is what makes Pete post a live beat — so a priority +// zone_first would just echo TwinBee back at the same people. Bulletin still +// gets the story onto the site and into the daily digest, where it reads as a +// roundup rather than a repeat. func emitZoneClearNews(userID id.UserID, exp *Expedition) { if !peteclient.Enabled() || !newsEmissionOn() { return @@ -270,9 +276,9 @@ func emitZoneClearNews(userID id.UserID, exp *Expedition) { // genuine first clear still seeds news_realm_firsts. Otherwise the next // named clearer would claim it and be mis-announced as the first-ever. // Mirrors backfillZoneFirsts, which claims before its own name check. - eventType, tier := "zone_clear", "bulletin" + eventType := "zone_clear" if claimRealmFirst("zone", string(exp.ZoneID)) { - eventType, tier = "zone_first", "priority" + eventType = "zone_first" } name := charName(userID) if name == "" { @@ -291,7 +297,7 @@ func emitZoneClearNews(userID id.UserID, exp *Expedition) { emitFact(peteclient.Fact{ GUID: fmt.Sprintf("%s:%s:%s:%d", eventType, eventToken(userID, disc), exp.ZoneID, ts), EventType: eventType, - Tier: tier, + Tier: "bulletin", Subject: name, Zone: zone.Display, Region: region,