bf7dca0a09
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.
20 lines
568 B
Go
20 lines
568 B
Go
package engine
|
|
|
|
import "testing"
|
|
|
|
// TestVariantLanguage checks the variant -> bot-language mapping that routes a game's out-of-app
|
|
// push by the game itself (English -> en, the Russian variants -> ru), rather than the recipient's
|
|
// last-login bot (Stage 17).
|
|
func TestVariantLanguage(t *testing.T) {
|
|
cases := map[Variant]string{
|
|
VariantEnglish: "en",
|
|
VariantRussianScrabble: "ru",
|
|
VariantErudit: "ru",
|
|
}
|
|
for v, want := range cases {
|
|
if got := v.Language(); got != want {
|
|
t.Errorf("%s.Language() = %q, want %q", v, got, want)
|
|
}
|
|
}
|
|
}
|