Challenges Message Spec
What this covers: the events that produce chat messages, the preset vocabulary each one loads, the rules that pick between them, and how many members respond. Applies to both bot replies and the user's composer — they draw from the same library.
What it doesn't: responder eligibility and self-exclusion, unchanged from bot-system-spec.md §6. The performance algorithm stays in bot-system-spec §4.
Status: Draft — for review
1. What changes
Presets move from one flat pool to eight event-typed buckets. A reply anchors to the event it responds to, and the composer loads the bucket for whatever is being replied to.
| Distinct strings | |
|---|---|
| Today — 8 composer presets + 9 bot presets, 5 shared | 12 |
| This spec — 8 buckets × 8, one shared library | 64 |
The two pools merge: the composer and bot replies draw from the same library.
2. The seven events
| # | Event | Fires when | Posted by | Bucket |
|---|---|---|---|---|
| 01 | week-start |
Monday, first active hour | group | open |
| 02 | member-joined |
live, on join | group | welcome |
| 03 | mid-week |
20 waking hours with no medal, and points < target · max 1/day | group | availability |
| 04 | medal-earned |
every medal reveal | member | medal · routine or standout |
| 05 | half-target |
points cross target × 0.5 |
group | momentum |
| 06 | close-to-goal |
points cross target × 0.9 |
group | final push |
| 07 | goal-reached |
points ≥ target | group | victory |
Once per week: 01, 05, 06, 07. Repeatable: 02 per join · 03 max once a day · 04 every medal.
try-request emits a system card but loads no vocabulary — it takes no reactions and no replies.
Any cap on medal-earned applies to the replies, not the cards.
3. Choosing a bucket
The bucket is decided by the event, never by the sender. Nothing picks from the whole library.
Person-directed vs group-directed
| Anchors to | Register | |
|---|---|---|
| Person-directed | a member's own action — medal-earned, member-joined |
second person; the anchor shows who, so a line never carries a name |
| Group-directed | a group state card — week-start, mid-week, half-target, close-to-goal, goal-reached |
first person plural |
Tier split on medals
medal-earned picks by medal: bronze and silver draw routine, gold and platinum draw standout.
State gate
open and availability lines do not fire once the target is crossed, evaluated at the reply's scheduled time rather than its parent's.
Threshold collisions
When one event crosses several thresholds, only the highest fires — a Platinum taking a group from 85 to 105 fires goal-reached, not close-to-goal. Same between 0.5 and 0.9.
4. The buckets
Eight lines each.
medal · routine — bronze / silver
🎉 Nice one · 👏 Well done · 🙌 Way to go · 👍 Solid · 💫 Nice work · 🤝 Good stuff · 😄 Love that · ⭐ On the board
medal · standout — gold / platinum
🔥 On fire · 🏆 Huge · 🧠 Big brain · 💪 Monster run · 🤯 Unreal · ⚡ Elite · 🚀 Carrying us · 👑 Top tier
welcome — member-joined
👋 Welcome! · 🎉 Glad you're here · 🙌 Welcome aboard · 😊 Hi there · 🤝 Good to have you · ✨ Welcome in · 🎊 Great to have you · 🙂 Hey!
open — week-start
🚀 Let's go · 💪 I'm in · ⚡ Ready · 📋 Locked in · 🎯 New week · 🔥 Here we go · 🙌 Fresh start · 🎮 Game on
availability — mid-week
🎮 Playing tonight · ⏳ On it later · 🙋 Who's up? · 👀 Still here · 🕐 After work · 💤 Been busy · 🔜 Later today · 💪 Count me in
momentum — half-target
🙌 Halfway · 📈 Right on pace · 👏 Nice work team · 🔥 Momentum · 💪 Keep it rolling · 🎯 On track · ⚡ Building · 🤝 Good pace
final push — close-to-goal
🏁 So close · 💪 Final push · ⚡ Let's finish it · 🎮 Playing now · 🔥 Nearly there · 🎯 Almost · 🙌 One more · ⏰ Down to it
victory — goal-reached
🏆 We did it · 🎉 Champions · 🙌 Team effort · 💯 Nailed it · 🔥 Big week · 👏 Everyone turned up · 🎊 Got there · ⭐ Great week
5. Volume and timing
Each member makes two rolls per event, not three. First the reaction. Then the preset, against 0.45 if the reaction landed, 0.20 if it did not — one draw, two possible thresholds.
| Event | React | Preset if reacted | if not | Expected reactions | Expected presets |
|---|---|---|---|---|---|
medal-earned · routine |
0.32 | 0.45 | 0.20 | 2.6 | 2.2 |
medal-earned · standout |
0.60 | 0.45 | 0.20 | 4.8 | 2.8 |
medal-earned · yours |
0.60 aggregate | 0.35 aggregate | — | ≥1 | — |
week-start |
0.28 | 0.45 | 0.20 | 2.5 | 2.4 |
member-joined |
0.45 | 0.60 | 0.30 | 4.0 | 3.9 |
mid-week |
0.18 | 0.40 | 0.15 | 1.6 | 1.8 |
half-target |
0.33 | 0.45 | 0.20 | 3.0 | 2.5 |
close-to-goal |
0.45 | 0.50 | 0.25 | 4.0 | 3.3 |
goal-reached |
0.55 | 0.60 | 0.30 | 5.0 | 4.2 |
Medal and user-medal values are today's, carried over unchanged. The two medal tiers are weighted to average today's flat 0.40.
Delays. Reactions 5–60 min for every event. Presets 60–240 min on a medal, 5–60 min on a group card.
Standalone presets are removed — standalonePoissonMean goes from 1.4 to 0.
"chat": {
"reactToMedalProb": { "routine": 0.32, "standout": 0.60 },
"presetGivenReaction": 0.45,
"presetGivenNoReaction": 0.20,
"reactionDelayMins": [5, 60],
"promptedPresetDelayMins": [60, 240],
"groupCardPresetDelayMins": [5, 60],
"reactToUserMedalAggregate": 0.60,
"promptedPresetToUserMedalAggregate": 0.35,
"standalonePoissonMean": 0,
"presetCooldownSeconds": 120,
"events": {
"week-start": { "react": 0.28, "presetYes": 0.45, "presetNo": 0.20 },
"member-joined": { "react": 0.45, "presetYes": 0.60, "presetNo": 0.30 },
"mid-week": { "react": 0.18, "presetYes": 0.40, "presetNo": 0.15 },
"half-target": { "react": 0.33, "presetYes": 0.45, "presetNo": 0.20 },
"close-to-goal": { "react": 0.45, "presetYes": 0.50, "presetNo": 0.25 },
"goal-reached": { "react": 0.55, "presetYes": 0.60, "presetNo": 0.30 }
}
}
Responder eligibility, self-exclusion and the weighting that quietens members with no medal are unchanged from bot-system-spec §6.