Stage 17: fix the robot-nudge frequency + per-game push language
CI / changes (pull_request) Successful in 1s
CI / unit (pull_request) Successful in 9s
CI / integration (pull_request) Successful in 11s
CI / ui (pull_request) Has been skipped
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m6s
CI / changes (pull_request) Successful in 1s
CI / unit (pull_request) Successful in 9s
CI / integration (pull_request) Successful in 11s
CI / ui (pull_request) Has been skipped
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m6s
Two owner-reported defects from a live contour game. A. Frequency: the robot's proactive nudge fired hourly for 12h+ (a 12h idle threshold then the 1h cooldown, uncapped). Replaced with a lengthening, randomized schedule (proactiveNudgeGap): the first nudge ~60-90 min into the human's turn, each later gap growing toward 1-6h (uniform sample in [60min, ceil], ceil ramping 90min->6h over 12h of idle, measured from the previous nudge), so a long wait gets a handful of increasingly-spaced reminders instead of a stream. B. Language: out-of-app push routed by the recipient's GLOBAL service_language (last-login-wins), so after re-logging via the RU bot an English game's nudges came from the RU bot. Now a game push (your_turn, game_over, nudge, match_found) carries the game's own language (engine.Variant.Language) on push.Event, and the gateway routes by it (falling back to service_language for non-game pushes). The New-Game variant-gating guarantees the game's bot is one the player has started, so delivery is never blocked. Tests: proactiveNudgeGap unit + retimed TestRobotProactiveNudge; TestVariantLanguage; emit your_turn/game_over language; TestNudgeRoutedByGameLanguage integration. Docs: ARCHITECTURE (§7 nudge, §10/§13 routing), FUNCTIONAL (+ _ru), PLAN tracker.
This commit is contained in:
@@ -1461,6 +1461,20 @@ provided cert) at the contour caddy; prod VPN; rollback.
|
||||
game bar (commit/exchange/pass/hint/resign), chat send + nudge, profile save / link / merge,
|
||||
friends (request/respond/unfriend/block/code), New Game (auto-match + invite) and the lobby
|
||||
hide ❌; purely local controls (board/rack/reset, menu, navigation, settings) stay live.
|
||||
- **Nudge defects (owner-reported, shipped):** two from a live contour game.
|
||||
**(A) Frequency** — the robot's proactive nudge fired hourly for 12 h+ (12 h idle threshold +
|
||||
the 1 h cooldown, uncapped). Replaced with a **lengthening, randomized schedule** in the
|
||||
robot strategy/driver: the first nudge ~60-90 min into the human's turn, each later gap
|
||||
growing toward 1-6 h (the gap is a uniform sample in `[60 min, ceil]`, `ceil` ramping from
|
||||
90 min to 6 h over 12 h of idle, measured from the previous nudge), so a long wait gets a
|
||||
handful of increasingly-spaced reminders. **(B) Language** — the out-of-app push routed by
|
||||
the recipient's **global `service_language`** (last-login-wins), so after re-logging through
|
||||
the RU bot an English game's nudges came from the RU bot. Now a game push (your_turn,
|
||||
game_over, nudge, match_found) carries the **game's own language** (`engine.Variant.Language`)
|
||||
on `push.Event`, and the gateway routes by it (falling back to `service_language` for
|
||||
non-game pushes); the New-Game variant-gating guarantees deliverability. Covered by the
|
||||
`proactiveNudgeGap` unit test, the retimed `TestRobotProactiveNudge`, `TestVariantLanguage`,
|
||||
emit (`your_turn`/`game_over` language) and a `TestNudgeRoutedByGameLanguage` integration test.
|
||||
|
||||
## Deferred TODOs (cross-stage)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user