2026-01-27 - 2026-07-27
Overview
33 Releases published by 2 users
Published
v1.24.2
Published
v1.24.1
Published
v1.24.0
Published
v1.23.0
Published
v1.22.0
Published
v1.21.0
Published
v1.20.1
Published
v1.20.0
Published
v1.19.0
Published
v1.18.0
Published
v1.17.0
Published
v1.16.0
Published
v1.15.0
Published
v1.14.1
Published
v1.14.0
Published
v1.13.0
Published
v1.12.0
Published
v1.11.0
Published
v1.10.0
Published
v1.9.0
Published
v1.8.0
Published
v1.7.0
Published
v1.6.0
Published
v1.5.1
Published
v1.5.0
Published
v1.4.1
Published
v1.4.0
Published
v1.3.0
Published
v1.2.2
Published
v1.2.1
Published
v1.2.0
Published
v1.1.0
v1.1.0
Published
v1.0.0
v1.0.0 — initial production release
283 Pull requests merged by 2 users
Merged
#286 feat(social): hide social controls on a deleted opponent's seat
Merged
#285 feat(vk): VK community cover
Merged
#284 chore(docs): update legal info
Merged
#283 chore(docs): update legal info
Merged
#282 release: VK Wallet public-offer link escapes the Mini App WebView (#281)
Merged
#281 fix(vk): route the Wallet public-offer link out of the Mini App WebView
Merged
#280 release: promote development → master (v1.24.0)
Merged
#279 fix(payments): reject HTML-special chars in product titles (VK payment guard)
Merged
#278 fix(vk): persist settings via VK Bridge storage; hide competing sign-in in Mini App hosts
Merged
#277 docs(apple): native iOS/iPadOS app plan
Merged
#276 release: promote development → master (v1.23.0)
Merged
#275 native polish 2: two-robots fix, guest offline-host UX, Guest###### name, silent+fast native boot, minSdk 29
Merged
#274 release: promote development → master (v1.22.0)
Merged
#273 native polish: guest-locale banner, seamless guest sign-in (+local-game fix), 'Opponent's turn' label, deploy-authoritative dictionary
Merged
#272 release: promote development → master (v1.21.0)
Merged
#271 android: shrink adaptive icon mark 25% + full-bleed legacy square + Erudit-only default for the profileless client
Merged
#270 fix(gateway): allow the native WebView origin via CORS (native stuck-offline)
Merged
#269 android: ANDROID_PLAN refresh + pin build-tools 36 (unblocks the release build)
Merged
#268 chore(android): rename RuStore signing secrets ANDROID_* -> ANDROID_RUSTORE_*
Merged
#267 feat(payments): live payment-availability kill switch + per-account override
Merged
#266 feat(payments): per-channel Robokassa shops on the direct rail
Merged
#265 release: v1.20.1 — real client IP to backend (last-login fix) + host UTC
Merged
#264 fix(gateway): forward the real client IP to the backend on every call (last-login IP was the docker addr)
Merged
#263 release: v1.20.0 — offline-UX, catalog order + admin toggles, reward-config admin
Merged
#262 feat(payments): edit the rewarded-ads config from the admin catalog page
Merged
#261 refactor(payments): one canonical catalog order (storefront/offer/admin) + admin active/all toggle
Merged
#260 feat(ui): explicit offline state inside an online game (+ offline word check)
Merged
#259 fix(net): detect a silently-dead live stream via a heartbeat watchdog
Merged
#258 chore(release): promote development to master
Merged
#257 feat(tg-bot): unpin auto-forwarded channel posts
Merged
#256 feat(vk): launch diagnostic on a direct /vk/ open instead of a guest
Merged
#255 fix(login): rate-limit no longer latches a phantom offline on the login screen
Merged
#254 Android release prep: de-anchor ANDROID_PLAN.md, re-enable the APK workflow, add ICONS.md
Merged
#253 Legal pages: privacy policy + EULA at /privacy/ and /eula/
Merged
#252 release: v1.18.0 — /support command in the Telegram bot
Merged
#251 feat(telegram): add /support command with support-desk info reply
Merged
#250 release: v1.17.0 — implicit offline model + two-tier client-version gate + unified lobby
Merged
#249 feat(offline): implicit net-state model, two-tier version gate, unified lobby
Merged
#248 docs: Android native plan + agent field notes
Merged
#247 release: v1.16.0 — offer live pricing, bot health telemetry, edge blocklist
Merged
#246 feat(edge): community IP blocklist (Spamhaus DROP) at the gateway
Merged
#245 feat(bot): Telegram bot Bot API health over the bot-link (metrics + alerts)
Merged
#244 feat(offer): live catalog price list in the public offer (render sidecar)
Merged
#243 Release v1.15.0 — in-game UX + wallet redesign + WAL-alert fix
Merged
#242 Wallet redesign: split buy/spend, compact balance, exchange confirm + insufficient-chips fix
Merged
#241 fix(monitoring): don't false-fire the WAL-stalled alert on an idle database
Merged
#240 In-game UX: board highlight + score badge, full-width rack, bag badge, zoom setting
Merged
#239 Release v1.14.1 — ansible certs-dir fix + Robokassa go-live
Merged
#238 fix(deploy): provision the certs dir traversable by the nonroot gateway
Merged
#237 Release v1.14.0 — monetization launch (E5-E8)
Merged
#236 fix(deploy): wire the Robokassa direct rail into the prod deploy + rollback
Merged
#235 feat(ui): per-kind active-game limit lock on the New Game screen
Merged
#234 feat(backend): per-tier, per-kind active-game limits with a guest funnel
Merged
#233 feat(admin): manual full-order refund + ledger CSV export
Merged
#232 feat(admin): admin grant — raw benefits and by-product reward bundles
Merged
#231 feat(admin): product catalog editor
Merged
#230 feat(admin): per-user finance panel — balances, benefits, risk, ledger
Merged
#229 feat(ads): VK post-move interstitial + retire deprecated hint_balance/paid_account
Merged
#228 feat(ads): rewarded video (VK) — client-attested credit + daily/hourly caps
Merged
#227 feat(payments): refund engine (best-effort revoke, never negative)
Merged
#226 feat(payments): Telegram Stars payment rail
Merged
#225 fix(ui): VK-iOS store link from the deployment origin
Merged
#224 feat(payments): VK Votes payment rail
Merged
#223 feat(payments): Robokassa direct-rail payment intake
Merged
#222 feat(ui): public offer page at /offer/ with a landing footer link
Merged
#221 fix(deploy): run the base-backup timer's pgBackRest as the postgres role
Merged
#220 release v1.13.0: payments wallet mechanics + database point-in-time recovery
Merged
#219 feat(deploy): continuous WAL archiving to S3 for point-in-time recovery
Merged
#218 feat(payments): wallet screen with balances, benefits and storefront
Merged
#217 feat(payments): chip wallet, store-compliance gate and benefit application
Merged
#216 feat(payments): trusted platform signal on the session
Merged
#215 feat(payments): payments schema, currency domain and money type
Merged
#213 docs(payments): monetization spec and implementation plan
Merged
#214 ci: skip the test-contour deploy on a no-code change
Merged
#212 release: offline mode + local pass-and-play (hotseat) — proposed v1.12.0
Merged
#211 feat(offline): local pass-and-play (hotseat) — 2-4 players, seat/host PINs
Merged
#210 fix(router): sync route in navigate() — kill boot lobby-flash + offline e2e flake
Merged
#209 feat(hint): unify the vs_ai idle hint online + offline (server-enforced, monotonic)
Merged
#207 feat(hint): idle-gated wallet-free vs_ai hint on a monotonic clock (B4)
Merged
#208 fix(offline): zero tile weights on cold boot + wrong-mode game in the lobby
Merged
#206 test(offline): mock e2e for a device-local vs_ai game (C8)
Merged
#205 feat(offline): gate the offline toggle on dictionary readiness
Merged
#204 docs(offline): connectivity auto-detect + kill switch user story
Merged
#203 feat(offline): mid-session flight-mode reactivity [PR2]
Merged
#202 feat(offline): auto-detect no network at cold start + go-offline dialog [PR1]
Merged
#201 fix(offline): delete a finished local game from the device, not the network
Merged
#200 fix(pwa): network-first navigation so a new deploy loads online immediately
Merged
#199 fix(offline): cold-boot offline from the persisted session + profile
Merged
#198 feat(offline): offline lobby — list + create + play local vs_ai games [C6]
Merged
#197 feat(offline): app-shell precache service worker (vite-plugin-pwa) [C1]
Merged
#196 feat(offline): advertise dict versions + background dictionary preload
Merged
#195 feat(offline): offline-mode state, Settings toggle + blue chrome (Phase C)
Merged
#194 feat(offline): wire the local game source into the game screen (Phase B3.2)
Merged
#193 feat(offline): local game source (Phase B3.1)
Merged
#192 feat(offline): local game persistence + replay (Phase B2)
Merged
#191 feat(offline): local game engine (Phase B1)
Merged
#190 test(offline): real-dictionary move-generator conformance in CI
Merged
#189 feat(offline): robot move-choice strategy in TS (parity-pinned)
Merged
#188 feat(offline): DAWG cursor + move generator in TS (parity-pinned)
Merged
#187 Release v1.11.0: PWA install + code-only PWA login + email/metrics fixes
Merged
#186 fix(metrics): second-scale buckets for edge_request_duration
Merged
#185 feat(email): PWA login sends code only; drop admin link from alert emails
Merged
#184 feat(pwa): installable web app + landing web entry
Merged
#183 Release v1.10.0: banner colours + urgent, and 3 UI fixes
Merged
#182 feat(banner): per-campaign colour overrides and urgent alerts
Merged
#181 fix(ui): hold info toast ~1s before it rises and fades
Merged
#180 fix(ui): poll for out-of-band email confirmation
Merged
#179 feat(ui): hide current-host sign-in row in profile
Merged
#178 Release: promote development → master (old Android WebView support + unsupported-engine telemetry)
Merged
#177 feat(gateway): unsupported-engine telemetry beacon + Grafana counter
Merged
#176 chore(ui): temporary Android WebView boot diagnostic (test contour only)
Merged
#175 Release v1.8.0: prod build fix (re-promote)
Merged
#174 fix(ci): prod build needs EXPORT_SIGN_KEY for compose interpolation
Merged
#173 Release v1.8.0: promote development → master
Merged
#172 fix(ci): arm the maintenance flag on the test-contour deploy
Merged
#171 feat(ui): in-session maintenance overlay on the edge 503 marker
Merged
#170 feat(deploy): prod OOM swap cushion + edge maintenance page
Merged
#169 feat(gateway): enable GATEWAY_HONEYTOKEN + GF_SMTP_ENABLED on both contours
Merged
#168 chore(deploy): dedupe & regroup Gitea CI variables/secrets
Merged
#167 fix(account): dedupe colliding identities on merge, journaling to the dossier
Merged
#166 feat(account): VK ID web login to link a VK identity from a browser
Merged
#165 feat(observability): Grafana infra alerts + admin email notifications (PR4)
Merged
#164 feat(account): deletion = legal retention, not erasure (PR3)
Merged
#163 feat(account): provider linking, unlink & email change (PR2)
Merged
#162 feat(email): one-tap confirm deeplink + client language (PR1b)
Merged
#161 feat(email): make transactional email live — branded relay, rate-limit, squat fix (PR1a)
Merged
#160 feat(export): server-rendered artifacts behind one signed download URL
Merged
#159 feat(game): finished-game export as a PNG image behind a format chooser
Merged
#158 fix(game): no placement auto-zoom in landscape
Merged
#157 feat(landing): Russian default + SEO head, icons and OG card
Merged
#156 fix(ui): VK Android external links + landing VK entry + drop 1️⃣ badge
Merged
#155 feat(telemetry): local move-preview adoption metrics (Phase 4)
Merged
#154 feat: on-device move preview (local eval) with network fallback
Merged
#153 build(ui): drop sourcemaps from prod bundle
Merged
#152 feat(ui): paint VK status bar to the app theme (VKWebAppSetViewSettings)
Merged
#151 fix(ui): copy GCG to clipboard on Android in-app WebViews
Merged
#148 fix(game): clear nudges on game completion
Merged
#149 fix(ui): mobile WebView polish — tap-flash, VK haptics, VK swipe-back
Merged
#147 feat(ui): first-run onboarding coachmarks
Merged
#146 feat(assets): VK loading-screen Lottie — bouncing Erudit tile
Merged
#145 docs: sync FUNCTIONAL/UI_DESIGN/.claude with the shipped VK + landscape behaviour (#140-#142 follow-up)
Merged
#144 release: VK Mini App + landscape UI + dict v1.3.1 seed (development→master)
Merged
#143 chore(ci): bump dictionary test-suite seed to v1.3.1
Merged
#142 feat(vk): native share/copy, auto theme, friend-code deep link, home-bar safe area
Merged
#141 fix(ui): landscape board zoom/pan + rack tile rendering + mobile block label
Merged
#140 feat(vk): embed the game as a VK Mini App
Merged
#139 chore: track the deploy-check skill in the repo
Merged
#138 release: v1.7.0 — Telegram Mini App embedding enhancements
Merged
#137 feat(telegram): native dialogs (experimental, stacked on #136)
Merged
#136 feat(telegram): Mini App embedding enhancements
Merged
#135 release: v1.6.0 — promo deep-link seeds EN variant (+ UI nits)
Merged
#134 feat(telegram): promo deep-link seeds EN variant (+ UI: share label, header padding)
Merged
#133 release v1.5.1: support-relay card + topic-reopen fixes
Merged
#132 fix(telegram): support relay — text_mention card + reopen deleted topic
Merged
#131 release v1.5.0: Telegram bot support relay
Merged
#130 feat(telegram): bot support relay — per-user forum topics
Merged
#129 release: v1.4.1 — Telegram nav (windowed, own back button, debug panel)
Merged
#128 fix(ui): Android Telegram nav — windowed mode, no close guard
Merged
#127 release: v1.4.0 — Telegram launch diagnostic + dynamic SDK load
Merged
#126 feat(ui): diagnostic screen on /telegram/ instead of the landing bounce
Merged
#125 Release: development → master
Merged
#123 feat(ui): friends list as lobby-style rows with kebab + confirm modals
Merged
#122 fix(deploy): force-recreate caddy on its roll so config-only changes apply
Merged
#121 release v1.2.2: edge HTTP/3 stall fix + db-size dashboard threshold
Merged
#120 fix(grafana): real byte thresholds for the Database size stat
Merged
#119 fix(edge): suppress dead HTTP/3 advert with Alt-Svc: clear
Merged
#114 Promote development → master: banner tip set + banner/push language fix
Merged
#118 fix(i18n): banner/push follow the interface language even without a Settings change
Merged
#117 feat(telegram): localized /start welcome with channel & chat follow links
Merged
#116 feat(account): seed the time zone from the client's detected offset at creation
Merged
#115 feat(feedback): capture app version + browser zone; Filed time in three zones
Merged
#113 fix(i18n): banner/push language follows the device's saved choice
Merged
#112 feat(ads): seed the house banner with the curated tip set
Merged
#111 Promote development → master: Erudit blank star + dictionary v1.3.0 pin
Merged
#110 chore(deploy): pin dictionary seed to v1.3.0
Merged
#109 feat(ui): Erudit blank tiles carry the star (✻) mark
Merged
#108 Promote development → master (docs finalize + UI tweaks + Telegram name fallback)
Merged
#107 Finalize docs to production + lobby/new-game UI tweaks + Telegram name fallback
Merged
#106 Promote development → master (deploy v2: versioning + visible jobs + rollback)
Merged
#105 Deploy v2 — release versioning + visible deploy jobs + manual rollback
Merged
#104 Promote development → master (initial production release: pre-release line + Stage 18)
Merged
#103 Stage 18 — prod contour deploy (two-host registry rollout, rolling + auto-rollback)
Merged
#102 fix(ui): retry Mini App launch on backend failure; hide account linking
Merged
#101 perf(gateway): pool backend conns; loadtest evaluate hot path
Merged
#100 fix(telegram): reply to /start only in private chats
Merged
#99 feat(telegram): promo bot + channel-chat moderation gate
Merged
#98 feat(ui): tile-crossword loading splash for cold lobby open
Merged
#97 feat(gateway): temporary IP ban (fail2ban) + honeypot/honeytoken (PRERELEASE AG)
Merged
#96 feat(telegram): split connector into home validator + remote bot (mTLS bot-link)
Merged
#95 fix(ui): green both lobby scores on a tie, mute a 0:0 board
Merged
#94 ci(deploy): probe backend /readyz so a dead backend fails the deploy
Merged
#93 fix(engine): make .seed_version marker authoritative (no boot refusal)
Merged
#92 feat(engine,deploy): seed-drift guard + track current dictionary release (v1.2.1)
Merged
#91 refactor(db): squash migrations into a single baseline
Merged
#90 feat(telegram,game): single bot + per-user variant preferences
Merged
#89 feat(game): official first-move tile draw + admin step-by-step replay
Merged
#88 feat(social): per-game friend request to disguised robots + lobby/stats/tile cosmetics
Merged
#87 feat: sparser robot nudges, typed unread badge, lobby unread bump
Merged
#86 feat(robot): shrink endgame think time when both sides pass
Merged
#85 perf(ui): reuse hint result as move preview, skip redundant evaluate
Merged
#84 feat(ui): UI polish batch (toast, gestures, lobby, settings, admin count)
Merged
#83 feat(social): asymmetric per-user block, in-game block control, admin lists
Merged
#82 fix(matchmaking): re-enqueue opens a new game, not the caller's own
Merged
#81 feat(stats): show the best move word per game variant
Merged
#80 feat: AI-game & resign UX cleanup (lobby drop, board reveal, GCG share fix, hide AI export)
Merged
#79 fix(ui): pin the in-game ad-banner height on a short viewport
Merged
#78 feat(observability): Scrabble — Messages Grafana dashboard
Merged
#77 feat(chat): unread read-receipts — lobby/game dot, history-open ack, admin + metrics
Merged
#76 feat(lobby): cap simultaneous quick games at 10
Merged
#75 feat(nudge): name the sender; blink lobby cards; re-animate toasts
Merged
#74 fix(robot): rare dot between handle words, prefer underscore
Merged
#73 feat(robot): per-game opponent names from a wide corpus + frozen seat-name snapshot
Merged
#72 docs(ui): correct the banner section to the shipped rotation behaviour
Merged
#71 feat(ads): client banner rotation, fade UX & live toggle (PR2)
Merged
#70 feat(ads): server-driven ad-banner backend, wire & admin console (PR1)
Merged
#69 feat(robot): occasional off-strategy deviation, strict in the endgame
Merged
#68 feat: honest AI opponent in quick game
Merged
#67 feat(ui): external dictionary lookup link on the word-check tool
Merged
#66 feat(ui): настоящий share friend-code + ссылка по текущему боту (service_language)
Merged
#65 fix(ui): язык интерфейса по системе (не по боту) + pinch-zoom не триггерит back
Merged
#64 feat(feedback): обратная связь от пользователей с разбором в админке и ролями
Merged
#63 feat(admin): выдача подсказок в кошелёк пользователя из админки
Merged
#62 feat(ui): тост «Ваш ход» называет предыдущего игрока
Merged
#61 feat(admin): ручная блокировка пользователей в админке
Merged
#60 feat(chat): лимит внутриигрового чата — 1 сообщение за ход
Merged
#59 feat(ui): горизонтальная раскладка игрового экрана — доска по высоте + левая панель
Merged
#58 feat(ui): мгновенное открытие партии — предзагрузка идущих партий + кэш черновика без «прыжка»
Merged
#57 fix(engine): single-word rule connects along the play line
Merged
#56 feat(ui): cross-screen caches + invitation delta channel + hint recenter on a zoomed board
Merged
#55 fix(ui): keep lobby/game caches fresh across screens (no stale-status flash)
Merged
#54 fix(ui): poll/refetch fallback for a missed opponent_joined in the open-game wait
Merged
#53 feat(admin): online dictionary update — upload archive, preview word diff, install & activate
Merged
#52 feat(ui): merge Exchange/Pass into one action; drop dead Tournaments tab
Merged
#51 feat(lobby): enter the game immediately and wait for the opponent inside it
Merged
#50 feat(ui): last-word letter highlight + dark bonus-square contrast
Merged
#49 fix(admin): keep the filter query intact in console pager and export links
Merged
#48 fix(engine): EvaluatePlay honors the single-word rule
Merged
#47 Single-word rule indicators + auto-match select redesign
Merged
#46 Multiple words per turn rule for Russian games
Merged
#45 UI: drop tab-bar tap highlight; don't slide the first screen on launch
Merged
#44 Backend infers play direction; UI previews words and gates submit on legality
Merged
#43 UI: move history as a per-seat column grid + swipe-down to open
Merged
#42 UI: fix last-move highlight, localize move history, clamp zoom overscroll
Merged
#41 UI: widen the edge-swipe-back activation band
Merged
#39 UI: tab-bar navigation — drop the hamburger
Merged
#38 R7: final stress run + tuning
Merged
#37 R6: refactor + docs reconciliation + de-staging
Merged
#36 R5: bundle slimming — retarget the budget to the app, no code slimming
Merged
#35 R4: push enrichment — events carry a state delta, kill the last poll
Merged
#34 R3: edge hardening — body cap, rate-limit observability, auto-flag, landing split
Merged
#33 R2: stress harness + contour resource observability + early run
Merged
#32 R1: mark done in PRERELEASE.md (post-merge close-out)
Merged
#31 R1: schema & naming reset — squash migrations, rename variants
Merged
#30 Stage 17: robot-nudge frequency + per-game push language
Merged
#29 Stage 17 #2: Connecting indicator + auto-retry (no more red toasts)
Merged
#28 Stage 17 #4: enrich the out-of-app your-turn push + add game-over
Merged
#27 Stage 17 #5: hide finished games from your own lobby list
Merged
#26 Round-6 follow-up: UX polish + client-IP fix
Merged
#25 Stage 17 round 6 (#18, PR D): admin Messages moderation section
Merged
#24 Stage 17 round 6 (#16/#17, PR C): lobby sort + server-derived in-game friend state
Merged
#23 Game/Telegram review polish: USSR flag, touch drag ghost, TG fullscreen header
Merged
#22 Landing v2: icon switchers, ephemeral theme, channel link, drop browser CTA
Merged
#21 Stage 17 round 6 (#16-20): landing page, /app/ move, cache + stream fixes
Merged
#20 Stage 17 round 6 (#4/#5/#6): draft persistence wire + gateway + UI
Merged
#19 Stage 17: test-contour verification & defect fixes
Merged
#18 Fix Grafana dashboards mount; connector OTLP via AWG_CONF (no DNS=)
Merged
#17 Stage 16: deploy infra & test contour
Merged
#16 Stage 15: dual Telegram bots & language-gated variants
Merged
#15 Stage 14: solver & dictionary split (publish solver + scrabble-dictionary artifact)
Merged
#14 Stage 13: alphabet on the wire (UI alphabet-agnostic, TODO-4)
Merged
#13 Stage 12: observability & performance (OTel/OTLP, metrics, guest GC)
Merged
#12 Stage 11: account linking & merge (email + Telegram Login Widget)
Merged
#11 Stage 10: admin console & dictionary ops (complaint review, hot-reload, broadcasts)
Merged
#10 Stage 9: Telegram integration (connector, Mini App, out-of-app push)
Merged
#9 Stage 8: UI social/account/history surfaces
Merged
#8 Stage 7 polish: UI/UX refinements (shell, board zoom, hint-on-board, history, ...)
Merged
#7 Stage 7: UI playable slice + remaining edge ops
Merged
#6 Stage 6: gateway edge (Connect/FB, platform auth, sessions, push bridge, admin)
Merged
#5 Stage 5: robot opponent (pool, seed-derived strategy, move driver, matchmaker substitution)
Merged
#4 Stage 4: lobby & social (matchmaking, friends, blocks, chat+nudge, invitations, profile, email, multi-player drop-out)
Merged
#3 Stage 3: game domain (lifecycle, rules, hint, word-check, history+GCG, stats)
Merged
#2 Stage 2: engine package over scrabble-solver
Merged
#1 Stage 1: backend foundation (Postgres, sessions, accounts, OTel)
1 Pull request proposed by 1 user
Proposed
#287 fix(offline): keep the local composition; feat(rules): no repeated words in Erudit