prosolis
9f094549b7
Coop: per-gift voting timers (6h) — gifts resolve throughout the day
...
Replace the single daily-tick gift resolution with independent per-gift
expiries. Each gift now has its own 6h voting window; once that elapses,
the votes are tallied, the sender gets DM feedback, and the live game-room
post is edited to reveal the type and resolved modifier. The modifier
sits on the run waiting for the next floor resolution to merge it in.
Effect:
- Gifts fire continuously throughout the day rather than all at once at
08:00 UTC, surfacing sender activity in real time.
- Senders get fast feedback (~6h instead of waiting for the next daily
tick).
- Floor resolution becomes purely "sum pending modifiers from already-
resolved gifts" — cleaner separation of concerns.
- Atomic per-gift apply via markCoopGiftApplied (UPDATE...WHERE applied_at
IS NULL) prevents double-application on retry.
Schema additions:
- coop_dungeon_gifts.expires_at (when voting closes)
- coop_dungeon_gifts.applied_at (when modifier merged into a floor)
- Migration entries provided.
Defensive backstop: floor resolution still force-resolves any gifts whose
expiry was missed (e.g., bot down during the timer window).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-28 17:55:14 -07:00
..
2026-04-18 01:06:50 -07:00
2026-04-26 07:57:31 -07:00
2026-04-18 01:05:22 -07:00
2026-04-18 01:05:22 -07:00
2026-04-18 01:05:22 -07:00
2026-04-18 01:05:22 -07:00
2026-04-08 17:04:40 -07:00
2026-04-24 22:23:58 -07:00
2026-04-26 07:57:31 -07:00
2026-04-26 07:57:31 -07:00
2026-04-18 01:07:25 -07:00
2026-04-08 15:50:28 -07:00
2026-04-18 01:05:22 -07:00
2026-04-18 01:05:22 -07:00
2026-04-18 01:07:25 -07:00
2026-04-03 20:11:51 -07:00
2026-04-05 17:04:03 -07:00
2026-04-05 17:04:03 -07:00
2026-03-27 21:26:19 -07:00
2026-03-26 09:22:02 -07:00
2026-04-10 16:50:49 -07:00
2026-04-08 00:24:51 -07:00
2026-04-24 22:23:58 -07:00
2026-04-08 23:01:39 -07:00
2026-04-10 16:50:49 -07:00
2026-04-05 17:04:03 -07:00
2026-04-05 17:04:03 -07:00
2026-04-05 17:04:03 -07:00
2026-03-26 09:22:02 -07:00
2026-03-26 09:22:02 -07:00
2026-04-08 15:31:25 -07:00
2026-03-27 21:26:19 -07:00
2026-04-18 01:07:25 -07:00
2026-04-10 16:50:49 -07:00
2026-04-24 22:23:58 -07:00
2026-04-24 22:23:58 -07:00
2026-04-10 16:50:49 -07:00
2026-04-24 22:23:58 -07:00
2026-04-10 16:50:49 -07:00
2026-04-10 16:50:49 -07:00
2026-04-18 01:05:22 -07:00
2026-04-18 01:07:25 -07:00
2026-04-10 16:50:49 -07:00
2026-04-18 01:07:25 -07:00
2026-04-08 15:50:28 -07:00
2026-04-24 22:23:58 -07:00
2026-04-08 22:41:21 -07:00
2026-04-08 15:50:28 -07:00
2026-04-18 01:07:25 -07:00
2026-04-26 07:58:13 -07:00
2026-04-08 17:04:40 -07:00
2026-03-31 18:47:49 -07:00
2026-04-08 17:04:40 -07:00
2026-03-27 21:26:19 -07:00
2026-03-26 09:22:02 -07:00
2026-04-18 01:07:25 -07:00
2026-04-18 01:07:25 -07:00
2026-04-18 01:05:22 -07:00
2026-04-18 01:05:22 -07:00
2026-04-18 01:05:22 -07:00
2026-04-18 01:05:22 -07:00
2026-04-18 01:05:22 -07:00
2026-04-18 01:05:22 -07:00
2026-04-18 01:05:22 -07:00
2026-04-18 01:05:22 -07:00
2026-04-08 17:04:40 -07:00
2026-04-26 07:58:13 -07:00
2026-04-26 09:01:29 -07:00
2026-04-26 10:24:21 -07:00
2026-04-28 17:55:14 -07:00
2026-04-26 07:58:13 -07:00
2026-04-28 17:55:14 -07:00
2026-04-26 09:14:45 -07:00
2026-04-26 19:12:22 -07:00
2026-04-27 18:15:26 -07:00
2026-04-26 07:58:13 -07:00
2026-04-26 07:58:13 -07:00
2026-03-26 09:22:02 -07:00
2026-04-08 17:04:40 -07:00
2026-04-08 17:04:40 -07:00
2026-04-18 16:06:28 -07:00
2026-03-26 09:22:02 -07:00
2026-03-26 23:38:06 -07:00
2026-03-26 23:38:06 -07:00
2026-03-26 23:38:06 -07:00
2026-03-26 09:22:02 -07:00
2026-04-08 17:04:40 -07:00
2026-03-26 09:22:02 -07:00
2026-04-08 17:04:40 -07:00
2026-04-18 01:07:25 -07:00
2026-04-08 17:04:40 -07:00
2026-03-26 09:22:02 -07:00
2026-03-22 10:09:57 -07:00
2026-04-18 01:06:50 -07:00
2026-03-26 09:22:02 -07:00
2026-03-26 09:22:02 -07:00
2026-03-26 09:22:02 -07:00
2026-03-26 09:22:02 -07:00
2026-03-26 09:22:02 -07:00
2026-04-18 14:11:59 -07:00
2026-04-18 01:06:50 -07:00
2026-04-18 14:11:59 -07:00
2026-04-18 14:11:59 -07:00
2026-04-18 14:11:59 -07:00
2026-04-26 20:38:16 -07:00
2026-03-09 00:09:11 -07:00
2026-03-10 16:58:15 -07:00
2026-04-26 10:09:32 -07:00
2026-04-08 17:04:40 -07:00
2026-04-08 17:04:40 -07:00
2026-04-08 17:04:40 -07:00
2026-04-18 01:07:25 -07:00
2026-04-18 01:07:25 -07:00
2026-03-27 21:26:19 -07:00
2026-03-27 11:55:47 -07:00
2026-03-30 17:11:45 -07:00
2026-04-08 17:04:40 -07:00
2026-03-26 09:22:02 -07:00
2026-04-08 17:04:40 -07:00
2026-04-26 10:24:21 -07:00
2026-03-30 17:11:45 -07:00
2026-03-11 00:45:25 -07:00
2026-03-08 18:25:18 -07:00
2026-03-27 11:55:47 -07:00
2026-03-26 09:22:02 -07:00
2026-03-10 18:08:05 -07:00
2026-04-08 17:04:40 -07:00
2026-03-08 18:25:18 -07:00
2026-04-18 01:07:25 -07:00
2026-04-08 17:04:40 -07:00
2026-03-26 09:22:02 -07:00
2026-03-11 00:45:25 -07:00
2026-04-10 16:50:49 -07:00
2026-03-08 18:25:18 -07:00
2026-04-08 17:04:40 -07:00
2026-04-18 01:07:25 -07:00
2026-03-29 20:51:28 -07:00
2026-03-29 09:27:00 -07:00
2026-04-18 01:07:25 -07:00
2026-04-08 17:04:40 -07:00
2026-04-08 17:04:40 -07:00
2026-04-26 10:09:32 -07:00
2026-03-11 00:45:25 -07:00
2026-03-29 16:24:59 -07:00
2026-03-26 09:22:02 -07:00
2026-04-01 18:58:33 -07:00
2026-04-10 16:50:49 -07:00
2026-03-29 16:24:59 -07:00
2026-04-18 01:07:25 -07:00
2026-04-08 17:04:40 -07:00
2026-04-08 15:24:49 -07:00