24017bcb7f
Merge pull request 'Promote development → master (deploy v2: versioning + visible jobs + rollback)' (#106) from development into master
v1.0.0
developer2026-06-22 06:01:03 +00:00
40d8f06588
Merge pull request 'Deploy v2 — release versioning + visible deploy jobs + manual rollback' (#105) from feature/release-versioning into development
developer2026-06-22 05:40:55 +00:00
c59e522732
feat(deploy): visible prod-deploy jobs + manual prod-rollback
Ilia Denisov
2026-06-22 07:37:08 +02:00
8d45ae6e3b
feat: stamp the build version into every service
Ilia Denisov
2026-06-22 07:28:27 +02:00
2c4f4b10dc
Merge pull request 'Promote development → master (initial production release: pre-release line + Stage 18)' (#104) from development into master
developer2026-06-22 05:05:48 +00:00
520a9092fe
Merge pull request 'Stage 18 — prod contour deploy (two-host registry rollout, rolling + auto-rollback)' (#103) from feature/prod-contour-deploy into development
developer2026-06-22 04:59:46 +00:00
9f970495ee
fix(deploy): guard cd and split DOCKER_GID assignment (shellcheck)
Ilia Denisov
2026-06-22 00:35:20 +02:00
3d9ba3ac3d
docs(deploy): bake Stage 18 prod-deploy decisions into the live docs
Ilia Denisov
2026-06-22 00:30:30 +02:00
171b71b7e0
feat(deploy): manual prod-deploy pipeline with rolling rollback (Stage 18)
Ilia Denisov
2026-06-22 00:25:09 +02:00
f5f45e7afb
feat(deploy): Ansible provisioning for prod hosts (Stage 18)
Ilia Denisov
2026-06-21 23:54:57 +02:00
b54cb8878d
Merge pull request 'fix(ui): retry Mini App launch on backend failure; hide account linking' (#102) from feature/tg-boot-retry-hide-linking into development
developer2026-06-21 19:38:37 +00:00
e336638ca8
fix(ui): retry Mini App launch on backend failure; hide account linking
Ilia Denisov
2026-06-21 21:23:27 +02:00
62f42ed102
Merge pull request 'perf(gateway): pool backend conns; loadtest evaluate hot path' (#101) from feature/loadtest-evaluate-hotpath into development
developer2026-06-21 18:51:58 +00:00
ecb21bd218
perf(backend): cut evaluate's DB round-trips; load the game in one query
Ilia Denisov
2026-06-21 20:28:24 +02:00
e2771826fd
perf(gateway): pool backend conns; loadtest evaluate hot path
Ilia Denisov
2026-06-21 19:55:57 +02:00
dec6fac013
Merge pull request 'fix(telegram): reply to /start only in private chats' (#100) from feature/telegram-private-reply-guard into development
developer2026-06-21 15:32:11 +00:00
c494da553a
fix(telegram): reply to /start only in private chats
Ilia Denisov
2026-06-21 17:28:01 +02:00
fa8abf22db
Merge pull request 'feat(telegram): promo bot + channel-chat moderation gate' (#99) from feature/telegram-promo-bot-chat-moderation into development
developer2026-06-21 15:21:23 +00:00
1ba789a1f1
docs(telegram): invert chat-gate strategy in docs; tune logs; i18n text
Ilia Denisov
2026-06-21 17:15:10 +02:00
bdd1cc7d85
fix(telegram): invert the chat gate — mute the ineligible (default-allow)
Ilia Denisov
2026-06-21 16:50:44 +02:00
0ab1719ee9
fix(telegram): grant in-chat members regardless of reported can_send
Ilia Denisov
2026-06-21 16:25:57 +02:00
380f82438c
fix(telegram): grant write to restricted members in default-deny chats
Ilia Denisov
2026-06-21 16:12:58 +02:00
a404513037
feat(telegram): chat-gate observability + grant on first registration
Ilia Denisov
2026-06-21 15:19:21 +02:00
b22b624d28
fix(telegram): keep a failed promo-bot construction non-fatal
Ilia Denisov
2026-06-21 14:50:01 +02:00
41d21f3f6f
Merge pull request 'feat(ui): tile-crossword loading splash for cold lobby open' (#98) from feature/lobby-splash-tiles into development
developer2026-06-21 10:19:15 +00:00
9642cafc1f
fix(ui): hold each splash word for the pause before the readiness check
Ilia Denisov
2026-06-21 10:42:31 +02:00
ba6ee90278
feat(ui): tile-crossword loading splash for cold lobby open
Ilia Denisov
2026-06-21 10:29:39 +02:00
e79c1ea891
Merge pull request 'feat(gateway): temporary IP ban (fail2ban) + honeypot/honeytoken (PRERELEASE AG)' (#97) from feature/abuse-ip-ban-honeypot into development
developer2026-06-21 07:28:30 +00:00
cf9fa75d62
fix(deploy): honeypot tag dropped — Caddy applies header_up delete after set
Ilia Denisov
2026-06-21 09:02:23 +02:00
81b44c2b02
docs(prerelease): mark phase AG done (code + test contour)
Ilia Denisov
2026-06-21 08:58:10 +02:00
041106d623
feat(gateway): temporary IP ban (fail2ban) fed by rejections + honeypot/honeytoken
Ilia Denisov
2026-06-21 08:54:20 +02:00
3fffee7817
Merge pull request 'feat(telegram): split connector into home validator + remote bot (mTLS bot-link)' (#96) from feature/telegram-egress-botlink into development
developer2026-06-21 05:35:02 +00:00
860cfeb30f
fix(deploy): make bot-link cert leaves readable by the distroless nonroot UID
Ilia Denisov
2026-06-21 00:27:43 +02:00
6aeb529f13
feat(telegram): split connector into home validator + remote bot
Ilia Denisov
2026-06-21 00:19:07 +02:00
2a8717c930
Merge pull request 'fix(ui): green both lobby scores on a tie, mute a 0:0 board' (#95) from feature/lobby-equal-score-color into development
developer2026-06-20 19:33:06 +00:00
264097bbf6
fix(ui): green both lobby scores on a tie, mute a 0:0 board
Ilia Denisov
2026-06-20 21:28:31 +02:00
9824214fd7
ci(deploy): probe backend /readyz so a dead backend fails the deploy (#94)
developer2026-06-20 19:04:52 +00:00
c72adddb91
Merge pull request 'fix(engine): make .seed_version marker authoritative (no boot refusal)' (#93) from feature/dict-seed-marker-wins into development
developer2026-06-20 18:25:12 +00:00
95f5703372
fix(engine): make .seed_version marker authoritative (no boot refusal)
Ilia Denisov
2026-06-20 20:06:57 +02:00
d40fe1edec
Merge pull request 'feat(engine,deploy): seed-drift guard + track current dictionary release (v1.2.1)' (#92) from feature/dict-version-track-release into development
developer2026-06-20 17:39:02 +00:00
a5db10c46e
feat(engine,deploy): seed-drift guard + track current dictionary release
Ilia Denisov
2026-06-20 19:26:32 +02:00
c739f12d3d
Merge pull request 'refactor(db): squash migrations into a single baseline' (#91) from feature/squash-migrations into development
developer2026-06-20 13:23:44 +00:00
483e945209
refactor(db): squash migrations into a single baseline
Ilia Denisov
2026-06-20 15:11:40 +02:00
a21ba23e5e
Merge pull request 'feat(telegram,game): single bot + per-user variant preferences' (#90) from feature/single-bot-variant-preferences into development
developer2026-06-20 12:48:10 +00:00
57c778f9b2
feat(telegram,game): single bot + per-user variant preferences
Ilia Denisov
2026-06-20 14:08:27 +02:00
1933849dba
Merge pull request 'feat(game): official first-move tile draw + admin step-by-step replay' (#89) from feature/first-move-draw into development
developer2026-06-20 08:42:51 +00:00
e06c6ff67f
docs: drop the design-spec artifact (content lives in ARCHITECTURE/FUNCTIONAL/PRERELEASE)
Ilia Denisov
2026-06-20 10:40:37 +02:00
caefc8f579
feat(game): official first-move tile draw + admin step-by-step replay
Ilia Denisov
2026-06-20 08:47:18 +02:00
76d4610e6f
Merge pull request 'feat(social): per-game friend request to disguised robots + lobby/stats/tile cosmetics' (#88) from feature/robot-friend-request into development
developer2026-06-19 20:06:20 +00:00
c9a5ca3ed7
fix(lobby): keep the spaces around the score separator
Ilia Denisov
2026-06-19 21:56:05 +02:00
9644bd6e5e
style(lobby): bold the score line, a touch smaller
Ilia Denisov
2026-06-19 21:51:50 +02:00
c127bc9f0e
feat(social): per-game friend request to disguised robots + lobby/stats/tile cosmetics
Ilia Denisov
2026-06-19 21:39:27 +02:00
9ded5d3d86
Merge pull request 'feat: sparser robot nudges, typed unread badge, lobby unread bump' (#87) from feature/robot-nudge-badge-sort into development
developer2026-06-19 18:36:34 +00:00
c67a5d51f1
Merge pull request 'feat(robot): shrink endgame think time when both sides pass' (#86) from feature/robot-endgame-shrink into development
developer2026-06-19 14:00:59 +00:00
f3768d20f2
feat(robot): shrink endgame think time when both sides pass
Ilia Denisov
2026-06-19 12:48:39 +02:00
0eb1e0ef47
Merge pull request 'perf(ui): reuse hint result as move preview, skip redundant evaluate' (#85) from feature/hint-preview-reuse into development
developer2026-06-19 10:18:14 +00:00
d0681c5efe
fix(ui): lower-case hint preview words to match evaluate
Ilia Denisov
2026-06-19 12:12:53 +02:00
0dd4099d68
perf(ui): reuse hint result as move preview, skip redundant evaluate
Ilia Denisov
2026-06-19 12:03:27 +02:00
b65a3ecc9c
Merge pull request 'feat(ui): UI polish batch (toast, gestures, lobby, settings, admin count)' (#84) from feature/ui-polish-batch into development
developer2026-06-19 08:17:50 +00:00
b156d3403c
fix(ui): polish board→rack recall drag and its gesture interplay
Ilia Denisov
2026-06-19 10:12:48 +02:00
9074417762
Merge pull request 'fix(matchmaking): re-enqueue opens a new game, not the caller's own' (#82) from feature/reenqueue-opens-new-game into development
owner2026-06-18 08:38:41 +00:00
9d52885a6e
fix(matchmaking): re-enqueue opens a new game, not the caller's own
Ilia Denisov
2026-06-18 10:18:44 +02:00
8793bd34f2
feat(stats): best-move word, moves & hint-share, and a hint-count fix (#81)
developer2026-06-17 22:17:27 +00:00
5a3f0951ae
Merge pull request 'feat: AI-game & resign UX cleanup (lobby drop, board reveal, GCG share fix, hide AI export)' (#80) from feature/lobby-drop-left-ai-games into development
developer2026-06-17 12:11:24 +00:00
fb0ddab0f1
feat(ui): hide GCG export in honest-AI games
Ilia Denisov
2026-06-17 14:01:08 +02:00
e850ecd83b
fix(ui): don't strand the Mini App on a cancelled GCG share
Ilia Denisov
2026-06-17 14:01:02 +02:00
2c24d54047
feat(ui): reveal the full board on resign (close history, zoom out)
Ilia Denisov
2026-06-17 13:33:27 +02:00
2f4aa1b75b
feat(lobby): drop left honest-AI games from the finished list
Ilia Denisov
2026-06-17 13:03:35 +02:00
712ef205c1
Merge pull request 'fix(ui): pin the in-game ad-banner height on a short viewport' (#79) from feature/game-banner-fixed-height into development
developer2026-06-17 10:28:53 +00:00
7cd4474945
fix(ui): pin the in-game ad-banner height on a short viewport
Ilia Denisov
2026-06-17 12:24:11 +02:00
236152ea7b
Merge pull request 'feat(observability): Scrabble — Messages Grafana dashboard' (#78) from feature/messages-dashboard into development
developer2026-06-17 10:05:16 +00:00
c3b3cafcdd
feat(observability): add the Scrabble — Messages Grafana dashboard
Ilia Denisov
2026-06-17 12:00:58 +02:00
b71f006ddf
Merge pull request 'feat(chat): unread read-receipts — lobby/game dot, history-open ack, admin + metrics' (#77) from feature/chat-read-receipts into development
developer2026-06-17 09:52:23 +00:00
20f2a5a011
feat(chat): a message to a disguised robot opponent is born read
Ilia Denisov
2026-06-17 11:46:59 +02:00
a7f3df9346
fix(chat): don't restore unread on a failed read-ack (would loop the in-game effect; REST re-seed self-heals)
Ilia Denisov
2026-06-17 11:14:25 +02:00
aaac816dc2
feat(chat): unread read-receipts with lobby/game dot and history-open ack
Ilia Denisov
2026-06-17 11:12:38 +02:00
d53ff18a67
Merge pull request 'feat(lobby): cap simultaneous quick games at 10' (#76) from feature/quick-game-limit into development
developer2026-06-16 21:00:41 +00:00
63ab85a5e5
feat(lobby): cap simultaneous quick games at 10
Ilia Denisov
2026-06-16 22:51:18 +02:00
05d83ced86
Merge pull request 'feat(nudge): name the sender; blink lobby cards; re-animate toasts' (#75) from feature/nudge-name-lobby-blink into development
developer2026-06-16 19:33:57 +00:00
2a034ff9be
fix(ui): don't refetch the lobby on heartbeats
Ilia Denisov
2026-06-16 21:06:31 +02:00
12d128f1cc
feat(nudge): name the sender; blink lobby cards; re-animate toasts
Ilia Denisov
2026-06-16 19:09:24 +02:00
e9dfa4ccb8
Merge pull request 'fix(robot): rare dot between handle words, prefer underscore' (#74) from feature/robot-nick-separator into development
developer2026-06-16 14:20:37 +00:00
9c30bdf8e7
fix(robot): make a dot between two handle words rare, prefer underscore
Ilia Denisov
2026-06-16 16:10:39 +02:00
51d7c4e005
Merge pull request 'feat(robot): per-game opponent names from a wide corpus + frozen seat-name snapshot' (#73) from feature/robot-name-variety into development
developer2026-06-16 13:58:35 +00:00
6d66545062
fix(robot): show the per-game name in REST game views, not the account name
Ilia Denisov
2026-06-16 15:22:27 +02:00
183e08ec80
feat(robot): per-game display names from a wide name corpus
Ilia Denisov
2026-06-16 12:28:04 +02:00
ac1c89c0ee
Merge pull request 'docs(ui): correct the banner section to the shipped rotation behaviour' (#72) from docs/banner-ui-accuracy into development
developer2026-06-16 05:57:14 +00:00
52f2caae51
docs(ui): correct the banner section to the shipped rotation behaviour
Ilia Denisov
2026-06-16 07:54:13 +02:00
27871f2a1d
Merge pull request 'feat(ads): client banner rotation, fade UX & live toggle (PR2)' (#71) from feature/ad-network-ui into development
developer2026-06-16 05:45:01 +00:00
dd45af20ef
fix(ads): fade the scroll rewind + keep the banner strip height constant
Ilia Denisov
2026-06-16 07:18:50 +02:00