ZAMZ.FUN · domain readiness map for v0

What already plays, what is half-built, what has not started

Snapshot 2026-11-02, main 5372acbc2. Source: #847 — the catalog and the plan checked against the modules the server actually mounts and QA's journal on the stand.
Nightly full on main: green at fd5e460b, 2026-11-07T03:51:36Z — run 42334277064.
11READY — built, has a screen, walked by QA
11PARTIAL — works only part of the way, one named gap
2NOT STARTED — no code
readiness index
68.8%
Counted plainly: READY = 1, PARTIAL = ½, NOT STARTED = 0, averaged over every domain on the map — 24 of them. The index speaks about domains only: what the player himself runs into is the list below.
current goal · #2494

Goal: mainnet payments — every release blocker closed before production money moves (Nikita, 2026-10-29)

0 / 11 stories hold
  1. Гейт депозита перечитывает ногу на final: ни двойного зачисления после переорга, ни зачисления откатившегося повторного включения#2490 (debt:P1) закрыт 2026-10-29: PR #2491 → fad112277 (Class A: три места, шесть кругов; full 40947998349 на реплее 6d6eacf0b; строка #2435 до мержа — 6506033843; Result 6509198792). Дефект подтверждён до фикса пробой на anvil (6498385551): нога, переехавшая при повторном включении (log:0 → log:1), зачислялась дважды, откатившееся повторное включение (status 0x0) — зачислялось. Теперь вердикт final несёт ноги, прочитанные тем же чтением, settle зачисляет только ту же ногу, EVM status 0x0 на глубине → orphaned. Все проходы сетей после мержа (N3–N6, CAP #2134, перепроход #2576) шли на сборках с этим гейтом, и каждый обычный депозит зачислен ровно один раз (CAP: 15 депозитов / 15 ключей спустя больше семи минут). Не хватает до holds: прохода QA по самому случаю нет — на стенде он латентен, у каждой EVM-цепочки там один anvil (Result 6509198792), кейса переорга в qa/network-wallet.md нет; человеческий просмотр PR #2491 отложен до релиза (пункт 9, #2435)
    partial
  2. Одно согласованное чтение на цепочку: балансировщик над узлами на разных форках не зачисляет один перевод дважды#2492 (debt:P2) закрыт 2026-11-02: PR #2636 → 5372acbc2 по решению координатора (A) 6573808247 на диагнозе 6573798466; Class A — rs1 и rs2 CLEAR в обоих кругах, Claude-место NOT CLEAR в круге 1 (B1, сложено текстом и пином) и CLEAR в круге 2; один full 41456698914; Result 6579428908. Охрана уровня транзакции в settle: строка зачисляется на final, только если ТО ЖЕ чтение несёт каждую уже проведённую или начатую ногу её транзакции на этом адресе (штамп credit_attempted_at, миграция 0158), иначе держится с одной страницей; проверки внутри чтения — у EVM blockNumber и blockHash транзакции против квитанции, у Solana слот статуса против слота транзакции; закреплённый случай двух зачислений намеренно перевёрнут в одно зачисление плюс страницу; мутанты M1–M5 красные. Требование «один согласованный эндпоинт» ослаблено в спеке по пунктам. Не хватает до holds: прохода QA нет (смержено 2026-11-02); на одном согласованном эндпоинте всё ещё держатся индекс TON и первое зачисление на устаревшем чтении (не больше одного зачисления не той ноги, никогда не двойное); тихий двойной orphan в пуле — ноль зачислений, виден только балансовой страницей §4.2 — ждёт кодового фикса #2637 (debt:P2, goal:mainnet-payments, открыт), в очереди после #2635
    partial
  3. Продовые сети: на каждую сеть — продовый эндпоинт и конфигурация под #2492 и требования семейства, и её проход на стенде; блокеры отдельных сетей — #2550, #2563 и #2565 (Solana) и #2519 (bitcoin)Стоят проходы на стенде: эпик #2108 multi-coin-networks закрыт 2026-11-01 (6556488073; doc-sync #2135, PR #2591 → 26fa4ea82) — живы 6 из 8 сетей и 15 из 19 ассетов: ethereum, bsc, arbitrum, optimism, bitcoin, solana. N3 #2124 arbitrum — PR #2503 → dd3ec7ec9 (2026-10-29), проход QA 2026-10-29 (6510602695, 6510989819); N4 #2125 optimism — PR #2512 → f52caf6ac, проход 2026-10-30 (6512011083, 6512181797); N5 #2127 bitcoin regtest — PR #2527 → c65d10ff0, проход 2026-10-30 (6515731252, 6515874032), вывод на 1…/3… по ответу A Евгения на 5b33bdc3 (6516614434); N6 #2129 solana — PR #2564 → 5b1999074, #2571 → 80385e048, #2574 → 89c7937a5, проход 2026-10-31 (6543033244, 6543214395). CAP #2134 — один проход QA по всем живым сетям на одной сборке 2026-10-31 (отчёт 6545121452, журнал PR #2577 → 6e272b0e9, Result 6545220378): депозит → ставка → XP → точный вывод — PASS по всем 15 ассетам; приход в отключённую цепочку, не пройденный в CAP, перепройден после #2576 (debt:P1, PR #2605 → 072f7cfc9) — PASS 2026-11-01 (6560806041). Адаптеры: A2 #2128 Solana — PR #2489 → 73442c833 (2026-10-30), A3 #2130 TRON — PR #2500 → 4e99daae4 (2026-10-31), A4 #2132 TON — PR #2535 → d3bc9a294 (2026-10-30). F1 #2119 — все девятнадцать ассетов в приложении игрока и админке, PR #2501 → eca56e70f (2026-10-29) по ответу Никиты на 1266edad (6501649979), приёмка на стенде 6503277244. Не хватает до holds: продовых эндпоинтов и конфигурации нет ни для одной сети — #2495 (ready-for-human) без решения владельцев (свой узел или провайдер, хостинг и цена); N7 tron #2131 и N8 ton #2133 открыты — отложены Евгением (ee41267f 2026-10-31, c45af419 2026-10-30), шаги только для человека собраны в #2572; до продового Solana открыты #2550 и #2563 (debt:P1) и #2565 (debt:P2), до продового bitcoin — #2519 (debt:P1: казна — кошелёк, а не адрес); прохода против продовой конфигурации нет
    partial
  4. Действие оператора для выплаты SHKeeper, которую вендор принял и молча провалил (сожжённый ключ идемпотентности)не начато: #937 (debt:P2, epic:wallet-vendor) открыт с 2026-09-09 (ревью #844), комментариев и PR нет. SHKeeper 2.5.30 принимает выплату ({task_id}), воркер молча её проваливает, наша сторона навсегда читает unknown, а ключ идемпотентности сожжён; что делает оператор — отмена и перевыпуск под новым ключом или ручное действие у вендора — решение Евгения (specs/wallet-service.md §3 называет его отложенным). Якорь — до первой продовой выплаты
    not started
  5. Дефекты вывода, которые встречает игрок: баланс до холда после заявки (#951) и risk-rejected вместо нехватки средств (#641)не начато, оба открыты без PR. #951 (qa-found, с 2026-09-09): кошелёк показывает доступный баланс до холда после заявки на вывод, пока страницу не перезагрузить; QA фиксирует рецидив на каждом проходе сетей — N1 и N2 2026-10-28 (6470777017, 6481459904), N3 2026-10-29 (6510602629), N4 и N5 2026-10-30 (6512026064, 6515756278), N6 и CAP 2026-10-31 (6543051693, 6544167738); P-WALLET-006 — FAIL. #641 (с 2026-09-06): вывод при нулевом балансе отвечает risk-rejected («обратитесь в поддержку»); QA сузил его в тот же день (5561858672): при засеянном лимите вывода ответ — insufficient-funds, а risk-rejected даёт гейт Риска, закрывающийся на незасеянном лимите (no-cap); вопрос Евгению — оставить ли такой отказ игроку как risk-rejected или дать ему свой типизированный отказ — без ответа
    not started
  6. Денежные действия оператора: лимиты и одобрение второго оператора на ручном зачислении (#864), списание неоплачиваемого реферального обязательства (#964)не начато, оба открыты без PR. #864 (debt:P1): маршрут ручного зачисления («refund», #772) держит только отказ в проде — ledger.manualAdjustment.enabled true лишь в слое стенда, продовый запуск с true отказывается стартовать с именем #864 (app/apps/server/src/config/load.ts); лимитов на сумму, одобрения вторым оператором и алерта по лимитам нет (числа — Никиты). #964 (debt:P2): команды Ledger «списать неоплачиваемое реферальное обязательство как «благотворительность»» (деньги остаются дома) нет; случай стенда — 2 500 000 наименьших единиц solana:USDT за период 2026-09-W1 на карантине #942; якорь — до первой продовой реферальной выплаты
    not started
  7. Провайдер IP-разведки куплен и флаги обогащения проверены: сегодня каждый флаг, страна и ASN — «unknown»не начато: #2213 (debt:P1, ready-for-human) открыт с 2026-10-20 по слову Евгения (ask 0e5d0cf3, F2 эпика #2212: A — без провайдера, долг до релиза). Источника IP-разведки у платформы нет: порт обогащения Риска отвечает пустым списком фикстур, покрытие обогащения 0. Никита 2026-10-29 назвал ipapi примерно за $20 в месяц (6501186652); точный сайт не подтверждён — кандидаты ipapi.co, ipapi.is и theipapi.com; покупки, адаптера за IpEnrichmentPort и прохода QA с настоящими флагами нет
    not started
  8. Источник ограничений адресов (санкции, приостановка): охрана кошелька их читает, но никто их не ставитне начато: #2496 (ready-for-human) открыт с 2026-10-29, комментариев нет. Охрана построена — ни зачисления, ни выплаты, пока адрес или игрок ограничен (specs/wallet-service.md §2.5, specs/risk-service.md §4), и #2490 держит её последнее чтение прямо перед зачислением, — но производителя ограничений нет (спек: «the producer is unbuilt»; подтвердили ревьюеры PR #2491). Решения владельцев: источник (вендор санкционного скрининга, ручное ограничение оператором или оба) и политика (что ограничивает, кто снимает); затем — отдельный эпик Class A с blueprint-audit
    not started
  9. Человеческий просмотр денежного пути владельцами — каждое изменение Class A, смерженное до негоне начато: #2435 (debt:P1, ready-for-human) открыт с 2026-10-27 по слову Евгения (ask c438a602: денежный путь — отдельными ревью перед релизом), с 2026-10-28 действует его постоянное слово (6464540120) — без вопроса на каждый PR. В таблице тела 30 строк PR, последняя — #2636 (#2492 → 5372acbc2); строка #2388 снята ответом Евгения на fa4af0e8 («хватит Codex + Claude задним числом»). Все четыре пункта приёмки не отмечены: форма ревью и ревьюеры не названы, ни одна строка не просмотрена, #2431 открыт, чек-лист релиза тикет не называет; каждый новый PR Class A добавляет строку
    not started
  10. Кастоди-поверхность оператора: экран свипов, двух наблюдателей флоата и горячего счёта; общий лог 5xx без текста ошибки хранилищане начато, оба открыты без PR. #2497 (needs-triage, с 2026-10-29): у оператора нет экрана кастоди — свипы и их журнал, два наблюдателя флоата, баланс горячего счёта и его сверка с Ledger, возвраты перенесённых токенов (#2470), открытые страницы кастоди; маршрута чтения на бэкенде нет (#1044 → #1096), в телепорт-лабе (#1978) — только набросок на выдуманных данных; экран трогает apps/web-admin, который держится под админ-ветку Никиты (2026-10-21), — старт после неё или по его слову. #2485 (debt:P2, с 2026-10-29, из #2474): общий путь 5xx сервера (app/apps/server/src/http/error-handler.ts) пишет сообщение ошибки хранилища целиком, а DrizzleQueryError несёт параметры запроса — текст игрока, вендора или узла
    not started
  11. Отпечаток клиента: библиотека фингерпринта устройства игрока — сигнал Риску рядом с IP-обогащениемне начато: #2498 (needs-triage) открыт с 2026-10-29, комментариев нет. Слово Никиты 2026-10-29: «надо еще какую-то fingerprint библиотеку добавить для трекинга клиента». План тикета: заметка research (открытая библиотека — FingerprintJS open source, ThumbmarkJS — или платный сервис; стабильность между браузерами и в инкогнито, размер бандла, приватность и согласие), выбор владельцев, затем blueprint-audit → спек → тикеты; отпечаток — только сигнал, никогда не личность и не гейт сам по себе
    not started
Ни один продовый (mainnet) платёж не принимается и не выплачивается, пока не закрыт каждый пункт ниже: каждый пункт — блокер релиза (Никита, 2026-10-29, 15:35Z: «оформи в цель да, это все должно быть как блокеры для релиза»). Цель закрывается только сквозным журналом QA денежного пути против продовой конфигурации (epic-loop → Goals); каждый закрытый пункт отмечается на #2494 своим PR и коммитом мержа. Пункты денежного пути — Class A (ADR-009): три места ревью, один full и строка в #2435 до мержа.

Technical debt

83 debts

Игрок

вход, профиль, уровень, чат — 5 domains
Identity
Ready
Вход по настоящему e-mail (Privy), тестовый пользователь и выход — всё пройдено QA вживую.
back
contr
player
oper
QA
Player / Profile
Ready
Профиль и смена имени с кулдауном.
back
contr
player
oper
QA
Progression
Ready
Уровень и XP — на странице профиля (бейдж и XP-полоса в ProfileView, живьём их двигает XPGranted, #690); в шапке уровня нет с #1305. XP теперь считается от долларовой стоимости ставки (#1831 → 5e64b1a6). Плашку «Level N» поднимает шелл, один тостер на страницу — так в ветке Никиты (#1617 → f46a6200, #1639 → f3686b6a). QA вживую прошёл рост уровня 0→15 за 40 ставок Plinko (#1650) и кадры XPGranted с живой строкой XP-банка (#1843); плашку «Level N» QA увидел живьём 2026-10-05 (#1907 → fffbe8ac: настоящий переход на уровень 1 вместе с шардами, пять телефонных маршрутов и десктопный Plinko); переход XP-полосы на профиле QA увидел живьём 2026-10-11 (#2000 → 2b3b20fc3: без перезагрузки 9 937/10 000 → 12/1 233 → 87/1 233 на 1440×900 и 390×844, плашка «Level 1» вместе с ним) — у домена не осталось непросмотренного экрана.
back
contr
player
oper
QA
Engagement (чат)
Partial
Чат живой и пройден QA, с 2026-09-15 — с ответом и лайком (#1413, прогон #1463); объявление большого выигрыша (>100×) сервер пишет в историю и шлёт в сокет (#1570 закрыт по приёмке Никиты), но рейл его пропускает — вид за Никитой. Нет операторского экрана модерации — mute/unmute/delete существуют только как маршруты; набросок комнаты с тремя рычагами есть в телепорт-лабе (#1113 → c7d07140), но лаб — карантин (#1028), не продукт. С 2026-10-27 при обслуживании сервер отвечает на сообщение чата 409 site-maintenance по собственной проекции Engagement engagement.site_maintenance (эпик #2412, T3 #2415 → PR #2434), композер сохраняет набранный текст; лайки, модерация и история остаются открытыми.
back
contr
player
oper
QA
Player Alerts (оповещения о крейтах)
Partial
Email-канал собран на бэке целиком (эпик player-alerts — эпик 1 цели #2286, спека #2296; T1–T6 #2297–#2303, один PR #2306): игрок подписывает адрес, подтверждает его по ссылке из письма (double opt-in; токены — подписи HMAC, в базе их нет), получает не больше одного Crate Alert на кулдаун на подтверждённую подписку — «Your Crates are ready.» без тира, числа и суммы — и отписывается со страницы, по ссылке из письма или одним кликом почтового клиента (List-Unsubscribe); адрес не уходит ни в одно событие, лог, отказ или ответ дверей по токену; несут его только ответы самому игроку под его сессией — address подписки и suggestedAddress в списке, подсказка адреса — email входа игрока (D29, D9). На стенде письма уходят через smtp в Mailpit (127.0.0.1:25) и читаются на mail.dev.zamz.fun; e2e-капстоун прошёл обещания 1–4 (PASS, прогон run-20261023T231409Z-bccd на f4494429d). Экран у игрока — дверь /alerts — есть с эпика 2 (ниже); Telegram-канал собран эпиком 3, Discord-канал — эпиком 4 (оба ниже). Прогулка QA P-ALERTS-001 (Q0 #2304) пройдена через API на развёрнутом 9b957063 2026-10-24 01:42–03:52Z: обещания 1–4 PASS (Result #2304 — комментарий 6379611201, журнал — PR #2311 → 4f422926a); браузерной приёмки тогда не было — экрана не было. Почты в проде нет: вендор и SPF/DKIM/DMARC — долг #2291 (debt:P1, к запуску), и прод с адаптером log не стартует. Эпик 2 цели #2286 — дверь /alerts — собран и влит (спека #2330, T1–T5 #2331–#2335, один PR #2336 → main ce616f094 2026-10-25 12:16Z; тир quick по ответу Евгения на вопрос 006a6bcf, вариант A — собственное поле игрока под его сессией): публичная страница /alerts вне группы входа; подписанному игроку — его собственная email-подписка (нет / ожидает подтверждения с остатком окна / истекла / подтверждена / ошибка / сессия завершена), всем остальным — приглашение войти через дверь шапки, без чтения списка; подписка с ключом идемпотентности alerts-subscribe:<playerId>:<seq> — чеканщик ключей один на документ и живёт в Shell, а ключ свой на каждый запрос: повтор того же запроса после сбоя сети идёт тем же ключом, новый адрес или повторная отправка письма — новым (D22; ловушка ключа в e2e держит именно это); ссылки из письма несут токен во фрагменте URL — он читается и сразу убирается из адресной строки, POST уходит только по нажатию «Confirm» / «Unsubscribe», с входом или без; отписка со страницы одним нажатием; e2e-капстоун над реальным деплоем с почтовым приёмником пакета — обещания 1, 2, 4, 5 и 6 P-ALERTS-002 PASS (прогон run-20261025T120045Z-b056 на 7441ac21c, под замком коробки) и обе ссылки из письма в Chromium 390×844 без сессии; плитки Telegram и Discord — «Not available yet — email is.» (Telegram — до эпика 3, Discord — до эпика 4, а где канал не предложен — и после; вопросы Никите 02a29d6b об этих плитках и e14c69dd о словах страницы закрыты 2026-10-26 на умолчаниях — интерим устоял). Прогулка QA P-ALERTS-002 (Q0 #2341) пройдена в браузере на стенде 2026-10-25, 1440×900 и 390×844: обещания 1, 2, 5 и 6 PASS, обещание 4 PASS по записанному решению координатора (комментарий 6398320031 на #2341), обещания 3 и 7 НЕ ПРОВЕРЕНЫ (Result #2341 — комментарий 6399367090, журнал — PR #2345). Эпик 3 цели #2286 — Telegram-канал — собран (спека #2344; по PR на тикет: T1 #2346 → PR #2354, T2 #2347 → PR #2355, T3 #2348 → PR #2356, T5 #2349 (quick) → PR #2357, капстоун T4 #2350 → PR #2359, все влиты 2026-10-25, main 07a032ff8; doc-sync T6 #2351 → PR #2361, влит 2026-10-26, main 1eb933621): где канал предложен, игрок жмёт «Connect Telegram» на /alerts и получает start-ссылку t.me/<бот>?start=<токен> (токен — 43 символа, подпись, в базе не хранится; ссылка живёт окно opt-in, 24 ч), жмёт в Telegram Start — бот читает /start длинным опросом (long poll) и привязывает приватный чат; чат получает не больше одного Crate Alert на кулдаун — «Your Crates are ready.» с кнопками «Open Rewards» и «Stop these alerts» — и прекращает их кнопкой, командой /stop или блокировкой бота; «Unsubscribe» на странице тоже работает. Chat id — второй личный факт: только в строке подписки, ни в событиях, ни в логах, ни в ответах — страница его не получает. Всё доказано только против двойника Bot API внутри процесса (решение Евгения 12903ef1, B): юнит, int, конформанс-набор порта, браузерный e2e плитки — её приёмка восемь скриншотов живых состояний в 1440×900 и 390×844 в PR #2357 (решение Евгения d57ebebd, A), — и капстоун T4 #2350 над деплоем и двойником — доказательство пути Telegram (записи PROMISE API-ветки и Chromium-ветки — в его Result; решение Евгения 05aba71e, C: живой прогулки нет). Бота нет ни на одном развёртывании: на стенде и в проде канал не предложен (telegram.adapter: none; прод стартует без Telegram — решение Евгения 636d3b8d, A, там же длинный опрос вместо вебхука и вход Privy через Telegram — не привязка), и плитка там говорит «Not available yet — email is.»; бот на стенде и живая прогулка Telegram — вне цели, долг #2352 (debt:P2; решение Евгения 21519621, C). Прогулка QA P-ALERTS-003 (Q0 #2358) пройдена на стенде на развёрнутом 1eb933621 2026-10-26, 1440×900 и 390×844: плитка «не предложено» и регрессия email-канала PASS, отказ 409 alert-channel-unavailable — факт API, все шаги Telegram НЕ ПРОВЕРЕНЫ по решению владельца (05aba71e, C) (Result #2358 — комментарий 6407793661, журнал — PR #2364); спека #2344 закрыта. Эпик 4 цели #2286 — Discord-канал — собран (спека #2363; по PR на тикет: T1 #2367 → PR #2374, T2 #2368 → PR #2375, T3 #2369 → PR #2376, T5 #2370 (quick) → PR #2377, капстоун T4 #2371 → PR #2378, все влиты 2026-10-26, main af47b2db7; doc-sync T6 #2372 → PR #2379, влит 2026-10-26, main 11c9b34c7): где канал предложен, игрок жмёт «Connect Discord» на /alerts и получает код подключения (43 символа, подпись, в базе не хранится; живёт окно opt-in, 24 ч) и ссылку, которая ставит приложение Crate Alerts в его аккаунт Discord; в личке приложения он шлёт /connect с кодом — Discord присылает подписанное Ed25519 взаимодействие на маршрут деплоя (Interactions Endpoint, без websocket — решение Евгения 1a3375fd, A), аккаунт, приславший код, привязывается, и первое собственное сообщение бота проверяет, что бот может писать этому аккаунту (если Discord отказывает — подписка сразу снимается); аккаунт получает не больше одного Crate Alert на кулдаун — «Your Crates are ready.» с кнопками «Open Rewards» и «Stop these alerts» — и прекращает их кнопкой, командой /stop или тем, что Discord отказывает боту в личке (50007 или 50278; какой отказ — поле refusal события AlertSubscriptionEnded); «Unsubscribe» на странице тоже работает. Id аккаунта Discord и id канала лички — третий личный факт: только в строке подписки, строками (снежинка больше 2^53), ни в событиях, ни в логах, ни в ответах — страница их не получает. Всё доказано только против двойника Discord API внутри процесса (решение Евгения 53b83f3f, A): юнит, int, конформанс-набор порта, браузерный e2e плитки — её приёмка восемь скриншотов живых состояний в 1440×900 и 390×844 с PR #2377 (решение Евгения 6a3ea36e, A, переносит d57ebebd, A), — и капстоун T4 #2371 над деплоем и двойником — доказательство пути Discord (12 записей PROMISE API-ветки и 3 — Chromium-ветки, в его Result). Приложения Crate Alerts нет ни на одном развёртывании: на стенде и в проде канал не предложен (discord.adapter: none; прод стартует без Discord — решение Евгения 6a3ea36e, A, там же: вход Privy через Discord — не привязка), и плитка там говорит «Not available yet — email is.»; приложение на стенде и живая прогулка Discord — вне цели, долг #2366 (debt:P2); живой прогулки Discord нет. Прогулка QA P-ALERTS-004 (Q0 #2373) пройдена на стенде на развёрнутом 11c9b34c7 2026-10-26, 1440×900 и 390×844: плитки Telegram и Discord «не предложено» на обоих экранах, с входом и без, и регрессия email-канала — PASS; отказ 409 alert-channel-unavailable и 404 маршрута взаимодействий — факты API; все шаги Discord — НЕ ПРОВЕРЕНЫ по решению владельца (53b83f3f, A) (Result #2373 — комментарий 6417953292, журнал — PR #2380 → 96d443270); спека #2363 закрыта. Цель #2286 закрыта 2026-10-26 по четырём журналам QA (запись координатора 6417974773); вне цели по решениям владельцев и открыты долгами — живые прогулки Telegram (#2352) и Discord (#2366), продовая почта (#2291); две настройки PlayerAlerts, ограничивающие ответ, без строки в default.json и без переменной окружения — #2360 (needs-triage). Вопросы эпика 4 закрыты 2026-10-26 на умолчаниях — касания Никиты не было, эпик собран, проверен и пройден на них (запись 6417956816 на #2286): eb2620c2 — как привязывать аккаунт Discord к Crate Alerts на /alerts (умолчание A — одноразовый код, который игрок шлёт боту в личку; B — Discord OAuth2; C — оба пути на плитке); 211695ea — как игрок находит бота, чтобы прислать ему код (умолчание A — ставит приложение в свой аккаунт по ссылке с плитки; B — Discord-сервер платформы; C — оба); d01912ad — пять умолчаний Discord: слова бота и плитки («твой Discord», без цифр), срок кода (24 ч), имя и описание приложения («Crate Alerts», «Tells you when your Crates are ready.»), имя Discord на подключённой плитке (не показываем), свой Discord-сервер (нет). Вопросы эпиков 2 и 3 — ac5166d0 (пять умолчаний Telegram), 02a29d6b и e14c69dd — закрыты 2026-10-26 на умолчаниях: интерим устоял.
back
contr
player
oper
QA

Деньги

игры, честность, книга, кошелёк, риск, награды, рефералка — 14 domains
Gaming — Spin
Partial
Из браузера нельзя сделать Spin слота: бэкенд, таблицы и RTP-гейт смонтированы и несут дропы Plinko и ставки Limbo, но экрана слота в плеере нет — лобби его не ведёт, эпик #587 припаркован 2026-09-11. С 2026-10-27 на всех пяти дверях свежей ставки (ExecuteSpin, ExecuteLimbo, OpenClimb, OpenChicken, OpenTrek) стоит гейт Site Control: при обслуживании — 409 site-maintenance, на игре на паузе — 409 game-paused; отказ записан и окончателен до блокировки ставки, по собственной проекции Gaming gaming.site_switches, а открытая партия доигрывается (эпик #2412, T2 #2414 → PR #2433; человеческий просмотр отложен Евгением до ревью перед релизом — #2435).
back
contr
player
oper
QA
Gaming — 2048 (Climb)
Ready
Живая игра 2048 в плеере (climb-live #998 → 405d333b; #1004 «не ещё» vs «не сходится», #1009 баланс после игры). QA-проход цели #818 (журнал #1015): история 6 «UI Climb, верификатор, харнесс» — PASS на f426dd15 (свой Climb, три хода, кэш-аут, живые балансы без перезагрузки, история, сторонний верификатор). Плитки нечитаемы — долг #1013. С 2026-10-23 2048 снята с лобби — в v1 три двери: Limbo, Plinko и Chicken (Никита, 2026-10-15); страница /game и её маршрут остались (эпик #2287, ветка Никиты, PR #2288 → 259c5fd5e).
back
contr
player
oper
QA
Gaming — Plinko
Ready
Настоящий дроп из браузера на 36 досках plinko-<risk>-<rows> версии 3 (low/med/high/extreme × 8–16 рядов, один знак после запятой, RTP в [97.90, 97.99] %, #1311 → c136f8a4): дроп на доске по умолчанию #1134 (#1188 → 076aeacd), селектор риск × ряды и снимок доски на игру #1135 (#1211 → c950d944), ссылка проверки и первый экран #1136 (#1217 → ad00a126), перенос строки на 390 #1221 (#1222 → 53800ce1). Цель #1068 закрыта проходом QA 2026-09-12 (журнал qa/goals/1068.md), четыре риска и дроп на Extreme16 прошли QA 2026-09-14. Вид и звук Никиты легли поверх живой страницы 2026-09-13 (#1274 → d4efc967) — метки происхождения и ссылка проверки ушли со страницы игры по его же решению, отказ ставить до ответа таблицы остался. Остаются #1215 (поле за доской, налезающие множители — отложено владельцем) и долг #1127.
back
contr
player
oper
QA
Gaming — Limbo
Partial
Страницу Limbo QA прошёл одной ставкой, сквозного прохода нет: бэкенд пройден на стенде запросами (цель #1590 закрыта 2026-09-19, эпик #1601), страница /limbo на режиме limbo-high пришла веткой Никиты (#1738 → 6fa54c23, подсказка выигрыша #1753 → 6ef0bb57, обе приняты им на стенде 2026-09-24), а QA сделал настоящую ставку со страницы и воспроизвёл её в публичном верификаторе на обеих ширинах (#1666, #1747 → ca865550). С тех пор QA ставил Limbo в настоящем интерфейсе игрока как средство других прогулок — по одной ставке limbo-high на каждый из 15 активов шести сетей (CAP #2134, 2026-10-31, Result 6545220378), — но прохода по приёмке самой страницы нет.
back
contr
player
oper
QA
Gaming — Chicken
Partial
Chicken в лобби — Trek: один путь из 24 шагов, нарисованный как много дорог; собран целиком, QA прошёл Trek (эпик #2315, PR #2324, цель #2293 — закрыта 2026-10-25 по проходу QA Q0 #2327). Дверь Chicken открывает /trek (в ростере лобби — метка beta, но значок Beta на дверях не показывают с 2026-10-23 — «'beta' убери», Никита; эпик #2287, PR #2288 → 259c5fd5e): лестница из 24 ступеней до ровно 1000.00, на каждом шаге один выбор — шаг или забрать; кешаут до первого шага возвращает ставку целиком (1.00, без XP), идл на нулевой ступени платит 0.98, сумму кешаута называет ответ сервера; партия, закрытая до первого шага, доказывается на /verify?trek= без дро; харнесс оценивает trek/1 (74 адреса). QA прошёл все семь историй цели #2293 на стенде: обещания 1–5 и 7 — PASS, у обещания 6 живой вариант переключения двухполосной партии не проверялся. Путь нарисован как много дорог (цель #2389, эпик #2449 chicken-roads, quick): курица стартует с бордюра, каждый шаг — своя дорога с множителем своей ступени, на каждой пройденной дороге остаётся маленький заборчик, на краше машина переезжает курицу на дороге проваленного шага; в окне пять мест (бордюр — одно из них), окно едет за курицей, под ним вся лестница компактно; ответ сервера держится, пока курица не приземлится, — цифры, слова и баланс в шапке меняются вместе с картинкой; при сниженной анимации конец рисуется сразу. Сервер не менялся. QA прошёл новую сцену 2026-10-27 на 8d783205a (PR #2455) при 1440×900 и 390×844: S1 — покой, окно и вся лестница: PASS; S2 — успешные шаги, заборчики и удержание HUD до приземления: PASS; S3 — конечный Crash с остановившейся машиной и удержанием HUD: PASS; S4 — отказ на шаге 0 и Cash-Out: PASS; S5 — reduced-motion в отдельном контексте с эмуляцией: PASS; S6 — Pause/Resume и отложенное обслуживание во время открытой партии: PASS. FAIL по выбранным историям нет. Промежуточное движение машины и точный момент её прибытия, верхняя ступень и личный просмотр Никиты — NOT EXERCISED; старые денежные/idle/verify/dashboard/двухполосные варианты заново не проверялись и не унаследованы как PASS. Q0 #2454 закрыт: отчёт 6450634474, Result 6450956733; журнал PR #2458 → e44f79ebd. Цель #2389 закрыта по этому журналу (запись координатора 6450974985); это не подменяет личную приёмку Никиты. Двухполосный Chicken остался в коде, с 2026-10-25 выключен на сервере (game-disabled) и снят с лобби (/chicken только по ссылке); партия, открытая до переключения, доигрывается или закрывается по идлу. Открытые вопросы Никите по сцене — на временных A (спек #2449): окно из пяти мест и вся лестница компактно — против всех 24 дорог сразу или одного окна (вопрос 20dfd6f6, ответа пока нет); выбор сложности (A — нет), вид (A — композиция референса в нашем ките), машина (A — только исход краша, без фонового трафика) — эти три ещё не заданы. Лестница, верх, RTP, шаг 0 и XP при отказе решены Никитой 2026-10-24; полоса ставки (D19) и метка beta (D24) спека #2315 — временные, вопрос не задан. Долги: debt:P3 — чтение открытой партии (#2325), одна панель концовок вместо трёх (#2326); debt:P2 (уровень с 2026-11-02) — отказ двухполосного Chicken (1.00 — исход, не возврат) начисляет XP при нулевой доле дома, цикл «ставка → отказ» не смоделирован (#2314).
back
contr
player
oper
QA
Gaming — Rounds / crash
Not started
Отложено после v1 по решению: восемь сообщений раунда описаны в каталоге, кода нет и не должно быть.
back
contr
player
oper
QA
Fairness
Ready
Пруфы, клиентский сид, ротация пары сидов, верификатор в браузере — проверен на живых Climb, Plinko и Limbo: сторонний без сессии воспроизводит каждый дро и сходится с ответом деплоя (проход цели #1068: три адреса Plinko и весь адрес Climb; ставка Limbo со страницы 2026-09-26, #1666 → ca865550). Маршрут текущей таблицы игры отвечает её разрешённой версией (#1133 → 1d84242e). Chicken верификатор рисует по виду (#1726 → 245bac53); в браузере QA открыл его на одной ставке Chicken, закрытой до первого шага, — только подписи плана розыгрыша (#1008 → 4a559104, 2026-10-05); сид не раскрыт, криптографическую проверку Chicken QA в браузере не проходил. До ротации пары страница честно говорит «ещё не» (#1004). Ссылку «Verify this drop» со страницы игры сняли решением Никиты 2026-09-13 (#1274) — публичный /verify не тронут. Trek (дверь Chicken в лобби с 2026-10-25) браузер пока не переигрывает: /verify?trek= показывает вердикт сервера по каждому шагу и закреплённую таблицу (спек #2315, решение 13); QA на стенде сверил с сервером краш на шаге 3 после своей ротации (nonce 4/5/6) и «нет дро» у отказа на шаге 0 и у идла (Q0 #2327, Result 6393694585, журнал PR #2328 → 5beafba81).
back
contr
player
oper
QA
Ledger
Partial
Движок собран, порт заморожен на 12 командах (двенадцатая — payReferralMilestone по поправке ADR-006 от 2026-10-13, #2012 → PR #2017 → 9061d153c), часовая сверка нуля идёт. Оператор начисляет игроку по id из админки (#772 маршрут, #945 экран) — но только на стенде: переключатель выключен везде ещё, пока нет лимитов и одобрения вторым оператором (#864). Экран пройден QA 2026-09-09 через публичный edge (журнал #973): одно начисление по ticketRef, повтор — тот же ответ без второго кредита, живой баланс игрока без перезагрузки, дашборд «Manual adjustments» = 1. В телепорт-лабе — экран начисления в наименьших единицах без таблицы decimals (#1067 → #1070 смержен 30f861de; by-eye на lab.dev сделан 19:17Z — один кредит в 1 wei минченному игроку через саму страницу, tx 01a08cbf-…). К продовым деньгам цель #2494 (Никита, 2026-10-29) требует и #864, и команду Ledger, списывающую неоплачиваемое реферальное обязательство (#964, debt:P2, до первой продовой реферальной выплаты).
back
contr
player
oper
QA
Wallet — депозиты
Ready
Двойное зачисление исправлено и перепройдено QA. Первый депозит виден в шапке и кошельке без перезагрузки: шлюз пушит DepositCredited (#897), сокет свежего игрока следует за сессией (#905); проход QA #902. С 2026-10-31 депозит живой на стенде в шести сетях из восьми, 15 активов: по одному зачислению на актив после финальности, без перезагрузки (CAP #2134, Result 6545220378). Шлюз депозита кредитует только ногу, которую цепь ещё несёт на final (#2490, debt:P1 → PR #2491 → fad112277, 2026-10-29): повторное включение EVM-перевода после реорга со сдвинутой ногой больше не зачисляется дважды, а откатившееся (status 0x0) — не зачисляется вовсе (на стенде дефект был латентным: каждая EVM-цепь там — один anvil); с #2492 (PR #2636 → 5372acbc2, 2026-11-02) кредит на final требует, чтобы одно и то же чтение несло каждую уже зачисленную или начатую ногу транзакции на этот адрес, иначе депозит ждёт с одним алертом. Двойная сирота под пулом через форки — ноль зачислений, алерта шлюза нет, видна только алерту баланса — #2637 (debt:P2).
back
contr
player
oper
QA
Wallet — выводы
Partial
Первый вывод оплачен на стенде (#844 → #922, 04:06Z 09.09: 0.001 ETH, txid канонический). Сессия вендора кэшировалась навсегда и через ~5 ч вывод вставал held (#952) — исправлено #955 и перепройдено QA (журнал #967). Проход цели #1068 (2026-09-12) довёл ещё один вывод 0.001 ETH до paid за 10м08с — оплата подтверждена и на цепочке, и платформой. Остаются #641 (вывод при нулевом балансе отвечает risk-rejected) и #951: кошелёк показывает доступный баланс до холда после успешной заявки — рецидив зафиксирован 2026-09-12. Рецидив #951 ещё раз зафиксирован 2026-10-18 (проход истории 2 цели #2025: после принятой заявки на 0.001 ETH кошелёк держал 1 ETH, API — 0.999; перезагрузка показывает верно). С 2026-10-31 вывод оплачен на стенде в каждом из 15 активов шести сетей — один холд и одна выплата на актив, ровно на запрошенную сумму, подтверждено собственными чтениями финальности QA (CAP #2134, журнал PR #2577 → 6e272b0e9, Result 6545220378); #951 повторялся в каждой прогулке сетей — N1–N6 и CAP, 2026-10-28 … 2026-10-31 (P-WALLET-006 FAIL, восстановление перезагрузкой). #641, #951 и действие оператора для выплаты, которую вендор принял и молча провалил (#937, debt:P2), — блокеры релиза цели #2494 (Никита, 2026-10-29).
back
contr
player
oper
QA
Wallet — кастоди и свипы
Partial
Свипы, две float-вотчи и часовая сверка с книгой собраны. Операторского экрана нет вовсе: маршрута у бэкенда нет (#1044 → #1096), в телепорт-лабе с #1978 (→ 78b80011) — только мок-эскиз на выдуманных данных, лаб — карантин (#1028), не продукт. На стенде живы шесть сетей из восьми — ethereum, bsc, arbitrum, optimism, bitcoin и solana, 15 активов, у каждой журнал QA (эпик #2108, doc-sync PR #2591 → 26fa4ea82); tron и ton отложены Евгением (#2131, #2133; шаги владельцев — #2572). «Несомый» EVM-токен (#2465) закрыт ответом Никиты A — свип принимается, учёт по нашему чтению цепи, возврат с горячего счёта: учёт и отказ включения — PR #2471 → 229a69a16, сам возврат — #2470, PR #2473 → b424e2c88. В продакшене не включено ничего: в default.json cryptos: [], включение сетей — своё решение владельцев. Найденное CAP #2576 (debt:P1: при падении сканера одной цепи список вендора «мигал», и разовое чтение на загрузке могло молча выключить здоровые цепи) исправлено (PR #2605 → 072f7cfc9), и QA дошёл не пройденную в CAP ногу — прибытие на выключенной цепи, алерт и одно зачисление после включения: PASS в контролируемых границах (журнал PR #2607 → 4e3f89b71, 2026-11-01). Продовое включение — блокеры цели #2494 (Никита, 2026-10-29): эндпоинты и конфигурация на цепь (#2495), источник ограничений адресов (#2496), экран оператора (#2497); открытые debt:P1 сетей — #2519 (bitcoin), #2550 и #2563 (solana).
back
contr
player
oper
QA
Risk
Partial
Очередь ревью, карточка кейса и вердикт у оператора в админке. Freeze / ban / whitelist — маршруты без экрана в админке (#599); контроль метрик админка с 2026-10-20 читает — панель «Metric catalog» в Review cases над GET /risk/controls и новым чтением наблюдений GET /risk/controls/observations (#2186 → PR #2193 → 58ebb08b7), вердикты по всем игрокам — страница Analytics → Risk (эпик #2181, история 9 цели #2025; QA — Q0 #2189); с эпиком фрода #2212 у Risk кластеры и портрет обогащения IP (GET /risk/clusters… — PR #2223 → 14d3f7c59, GET /risk/enrichment — PR #2228 → c69c794ba), но обогащение пустое: все флаги, страны и ASN «unknown» — провайдера IP нет (#2213, debt:P1); в телепорт-лабе (lab.dev, #1054) — очередь, кейс, пять действий и реестр контролей, действие по любому игроку по типизованному id закрыто (#1060 → 80322572, доводка #1131 → 901905c1); лаб — карантин (#1028), не продукт. Курс GET /risk/rates (#1281 → 91696c76) игрок видит с 2026-09-13: доллары в шапке и у ставки, ставку в долларах клиент переводит в токены по показанному курсу (#1295 → 46e1b186), запасные мок-курсы ещё в коде (mock-usd-rates.ts; тикет #1278 закрыт 2026-10-24 как поглощённый PR #1295); с 2026-09-25 курс считает и XP ставки (D15, #1831 → 5e64b1a6), в проводку по ADR-002 не входит. К релизу цель #2494 (Никита, 2026-10-29) требует провайдера IP (#2213), источник ограничений адресов (#2496) и библиотеку отпечатка клиента (#2498).
back
contr
player
oper
QA
Rewards (рейкбэк, крейты)
Partial
Крейт стоит EV своего тира в долларах (эпик crates-ev #1775, ADR-013), выплата всегда в USDT (rewards.payoutAsset), XP идёт от долларового выражения ставки через Reference Rate (D15, #1831 → 5e64b1a6); в проде — монитор rewards.giveback-divergence без гейта (D16, #1832 → 6eb2398c). Микс тиров rugs — собран и на стенде (решение Никиты 2026-10-13, запись 6131186600 на #1969; #2004 → PR #2005 → 8e561691c, 2026-10-12 22:36Z, два раунда rs1 и один dispatch affected 38315725716; стенд на нём с 22:41Z): каждый уровень выдаёт ровно микс rugs для этого уровня — тир rugs k на уровне L → наш тир 2k + 1 + [L mod 10 ≥ 5], до 11 тиров на строке-вехе, дешёвые тиры на каждом уровне (строки 10, 20 … 100 дают tier-01, строки 91–99 — три тира); 80 % пула детерминированно, 20 % — случайные шарды поверх, тир случайного шарда тянется по тому же миксу (вес = число ящиков rugs; правило 4 : 1 «тир полосы / следующий» и пакеты удалены); лесенка EV подобрана скриптом (наименьшие квадраты по log, затем ≥ ×1.05 на шаг и целые центы): 9 ¢ … $6 092, t10 $11; таблицы — версия 4 рядом с v2 и v3 (закреплённые открытия дорешиваются на своей версии); строка 1 — 178 шардов t01 + 44 случайных по кванту 56 XP; коридор ×2 на уровнях 2–100 — 0.82–1.70. Харнесс на main зелёный: отчёт v22 на #2004 (290 строк, 0 красных), v23 с #2015 → PR #2020 (оба baseline переприняты ещё раз под веху деньгами); детерминированная доля 76.3–84.1 %, случайная 15.4–23.6 %; оба baseline переприняты. До #2004 — вариант E (решение Никиты 2026-10-10, запись 6100884141; #1988 → PR #1995 → 32a9a867d, 2026-10-11; гейт харнесса #1990 → PR #1996; пара на стенде считает оба reason, #1992 → PR #1993): тир полосы ⌈L/5⌉, пакеты на строках 40 … 100, лесенка 12 ¢ … $3 769, таблицы v3. QA 2026-10-11 видел живьём вариант E (#1997 → 66996186b): новый игрок, 10 ставок, 712 XP — девять шардов tier-01 по кванту 75 XP, случайные на порядковых 5 и 9, первый деревянный крейт на 12 ¢; первый уровень QA прошёл насквозь 2026-10-11 (#2000 → 2b3b20fc3: 125 ставок, 132 + 32 шарда строки 1, переход по D17/E1, 15 деревянных крейтов); QA 2026-10-12 увидел микс rugs живьём в границах стенда (#2004 → отчёт 6134052689, журнал PR #2006): 13 ставок на $19.50, 10 087 → 11 062 XP на строке 2 — 18 банковских + 4 случайных шарда, все tier-01 по кванту 56 XP, три деревянных крейта по 9 ¢; публичные таблицы выплат 20/20 совпадают с закоммиченной v4; смешанная выдача нескольких тиров и случайный шард по миксу на стенде НЕ проиграны (строки 1–4 — только tier-01, а поднять игрока на уровень 2+ в бюджете нельзя) — строки 10/50/90/91/100 и потолок прочитаны по исходникам, не прожиты. Решено Никитой: уровень 1 — вариант A, исключение онбординга (ask bb8a9ebd, 2026-10-12). Лут-пара за реферальную веху ушла с крейтов — собрано и на стенде (решение Никиты 2026-10-13; эпик #2008, спека #2009): вместо двух крейтов referral_loot каждая сторона получает фиксированные $11 в USDT на доступный баланс (строка Referral); rewards.loot отклоняется схемой по имени, потребитель CrateLootAwarded удалён (#2014 → PR #2019), уже выданные крейты referral_loot открываются как раньше; харнесс считает пару как 2 × $11 — loot-inclusive 99.02 % на слотах и 99.51 % при крае 2 % против потолка 101 %, оба baseline переприняты без сдвига оценок (#2015 → PR #2020). T1–T5 смёржены (PR #2017–#2021 → 90fc3bd31, 2026-10-13), doc-sync #2022 → 56a4f17eb, журнал QA #2023 → 75c9f42bc; стенд на 90fc3bd31; у свежей реферальной пары на стенде крейтов referral_loot нет (QA 2026-10-13, отчёт 6154333571). Вопросы Никите закрыты: потолочная строка выше 100-го уровня (ask 529dacf0) — словом Никиты 2026-10-20 «давай закрываем ежели так»: остаётся как собрано (запись 6364219658 на #1969; в коде микс строки 100 повторяется — временное B, generate-shard-schedule.ts; запись закрытия называет собранным A по PR #1995 — расхождение записи и кода); лут-пара того же ask снята — веха теперь деньгами, #2008; приёмка crates-ev (ask 3d1950b8) снята как неактуальная 2026-10-24 — стенда, о котором она спрашивала, больше нет (6378487780). Эпики crate-tier-curve (#1588, #1969 — 2026-10-23) и crates-ev (#1775 — 2026-10-24, Result 6378962953) закрыты; цель одного кулдауна #1586 закрыта 2026-10-13 по решению Евгения (C: закрыть, прогулку на одной сборке записать долгом — #2011). Одно открытие крейта писало кулдаун дважды и могло объявить его раньше — исправлено (#2542, debt:P1 → PR #2543 → b617cdab3, 2026-10-30): один CooldownExpired на открытие; что говорит отказ во время открытия — #2544 (debt:P3, слова за владельцами). Каждый крейт открывается в своём хранилище — сцена ветки Никиты (эпик #2287, PR #2288 → 259c5fd5e, 2026-10-23). solana:USDT на стенде с 2026-10-31 вносится и выводится настоящей цепью (N6 #2129, журнал PR #2574 → 89c7937a5) — баланс больше не только начисление оператора. Остаются: смешанная выдача нескольких тиров и случайный шард по миксу на стенде не прожиты (выше); казначейская позиция в USDT без флоата и алерта (#1788).
back
contr
player
oper
QA
Referral
Ready
Инвайт и редим у игрока, бонус-коды и ретейнеры у оператора; экран админки пройден QA (журнал #1015, история 4). Несколько кодов на аккаунт и свой код вроде ref=nikita собраны (цель #1611, эпик #1671; решения — Никита, 2026-09-19): до 200 живых кодов, ещё один код по кнопке, свой код по общей с кампаниями грамматике, смена раз в 30 дней — старый код остаётся за игроком и приводит рефералов, счётчик по каждому коду; экран приглашений меняет свой код (#1718 → 51c3f427). Цель #1611 закрыта по журналу QA 2026-09-22 (#1735 → 063542d1): выборочный PASS, лимит 200 кодов и успешный редим бонус-кода — INCONCLUSIVE без фикстур. Реферальные начисления на стенде наблюдались 2026-10-19 (эпик #2141, история 6 цели #2025: начисление 300 000 000 000 wei с одной ставки реферала, строка реферера и вкладка referees игрока сходятся; журнал PR #2161); с #2150 контекст публикует ReferralEarningsForfeited на каждую списанную строку из транзакции доставки самого лифта (события до 2026-10-19 не восстанавливаются); с #2383 (PR #2388 → 885ab7ddc, 2026-10-26) — ещё BonusCodeCreated и BonusCodeDisabled из транзакций самих команд оператора: из них и BonusCodeRedeemed аналитика считает «невостребованные» (эпик #2382); доказательство краша остановки кода — #2431; в админке открыты #788 и #789. Веха реферала — деньгами, собрана и на стенде (решение Никиты 2026-10-13, сообщение хаба 02978f75; эпик #2008, спека #2009): крейтов за веху больше нет — когда приглашённый после первого депозита доходит до 35-го уровня, обе стороны получают фиксированные $11 в solana:USDT на доступный баланс, вывод сразу, без вейджера (цифры решены — Никита, 2026-10-13, запись 6151400656 на #2008); платит тот же payout run, что и реферальные начисления, новой командой Ledger payReferralMilestone / событием ReferralMilestonePaid, один раз на сторону навсегда; заморозка referral_earnings веху не держит, вывод её без своего депозита уходит на ручную проверку Risk (правило 3×, нулевой знаменатель) только при включённом (active) контроле — в поставляемом реестре контроль в shadow: срабатывание считается и записывается, а вывод проходит. T1–T5 смёржены за один день (PR #2017–#2021, последний 2026-10-13 19:06Z → 90fc3bd31; десять раундов rs1, каждое замечание закрыто правкой с гардом), doc-sync PR #2022 → 56a4f17eb; стенд на 90fc3bd31 с 19:12Z. QA 2026-10-13 прошёл в границах стенда (отчёт 6154333571 на #2008, журнал PR #2023 → 75c9f42bc): свежая пара привязана верно, /referral/state у обеих сторон 200 с milestones: [], список карантина — 401 анониму, 403 игрокам, 200 оператору с пустым списком, панель Grafana рендерится (пока «No data»), загруженный конфиг — 35-й уровень, $11 на сторону, проход выплат раз в пять минут; сама выплата, приватность оплаченной строки и открытие старого крейта НЕ прожиты — 35-й уровень это 521 401 XP, в бюджете QA недостижимо, фикстуры нет.
back
contr
player
oper
QA

Платформа и операторы

аналитика, реалтайм, периметр, бэк-офис, управление сайтом — 5 domains
Analytics / Observability
Ready
Шесть дашбордов Grafana пройдены QA 2026-09-08 (журнал #875); игры Plinko видны — панель 4 Financials показывает по спину на каждую сыгранную доску с точными ставками и выплатами (проход цели #1068, 2026-09-12). С #1835 → 700748d8 каждый сокет пишется в Analytics Store как ConnectionOpened / ConnectionClosed, и три счётчика дашборда сессий их читают — QA этот дашборд после них ещё не проходил. С #1001 → 3106fce2 на панели Financials четыре блока по Climb-играм (Climb и Chicken), QA прошёл их живым крашем 2026-10-05. Находка #874: дефолт baseline gap в дашборде рейкбэка читается как 0/UNSET против закоммиченных 5636 bps. ADR-008 («витрины аналитики по HTTP нет») поправлен словом Никиты 2026-10-14 (цель #2025): Analytics Store получает read-only витрину запросов для админки, как rugs читает ClickHouse из /api/analytics/shield-ro/*; Grafana остаётся для дашбордов, которые оператору в приложении не нужны (правил алертов в Grafana нет — транспорт денежных мониторов живёт в деплойбле, ADR-008 2026-09-05); поправку в ADR-008 именем Никиты внёс первый эпик #2028 (аудит PR #2029 → 310e69293, 2026-10-18 01:23Z). Витрина оператора собрана и на стенде (эпик #2028, 2026-10-18): GET /analytics/* — только оператор из analytics.operators, только чтение через отдельный аккаунт ClickHouse с одним GRANT SELECT (провижининг стенда сверяет права при каждом деплое, лишние гранты и роли снимает), фиксированные именованные чтения с дедлайном 25 с (зависший ответ хранилища → 503, не зависание), суммы по ассетам строками цифр; четыре чтения Finance: результат дома по категориям за UTC-день, стоимость промо (две колонки дашборда кампаний, округление по коду, оборот бонуса — по гранту, активному в момент лока ставки), маржа по игре, календарь реализованного RTP. Ревьюеры нашли и закрыли три дефекта цифр до мержа (округление по ассету вместо кода; оборот по времени публикации события вместо времени ставки; ставка, залоченная до конверсии, у старого гранта) — панель кампаний в Grafana переведена на ту же атрибуцию (#2042). Цель #2025 закрыта 2026-10-26 (запись координатора 6425263820): все десять историй собраны, и QA прошёл их одним проходом по десяти страницам на развёрнутом 5b822e820 — A-ANALYTICS-001, все десять PASS в принятых границах перечитывания своих прежних записей, без новой денежной записи (Result 6425254997, журнал PR #2395 → 4c8b87370); «невостребованные бонус-коды» истории 5 — на промежуточном A вопроса 176dba8e (эпик #2382). Риск — собран и на стенде (эпик #2181, 2026-10-20, семь PR): GET /analytics/risk/verdicts — вердикты по всем игрокам одним запросом с ассетом из WithdrawalRequested, и чтение наблюдений самого Risk GET /risk/controls/observations — оценки, срабатывания и их частота на версию метрики (в хранилище аналитики наблюдения не идут — по решению); на стенде wd-vs-deposit-ratio включён active (ответ Евгения A на 39d29a2d), и QA прошёл все три обещания: вывод без депозита паркуется с FREEZE, оператор отпускает — вторая оценка ALLOW и выплата paid (Q0 #2189, отчёт 6289284015). Открыты у Никиты на временных A: a2a1c6dd — что такое «очередь вердиктов» (A — список вердиктов по всем игрокам рядом с нетронутой очередью кейсов; B — колонка сработавших метрик в самой очереди; C — оба) и 6b5d7e7b — колонка «fire rate» каталога (A — fireRateBps чтения наблюдений; B — «срабатывания на версию за период» только на странице Analytics). Фрод — собран и на стенде (эпик #2212, 2026-10-20): кто онлайн (цифра дашборда сессий — ответ Никиты A), что делят входы и кошельки когорты (адрес отправителя депозита — #2229 → PR #2250), артефакты одного игрока и кто их делит, реферальные пары с общими артефактами; кластеры и портрет обогащения IP — чтения Risk с экспортом; обогащение пустое — все флаги, страны и ASN «unknown», покрытие 0: провайдера IP нет, долг #2213 (debt:P1, условие Евгения к ответу A на F2 — до релиза); QA прошёл в границах проверенного (Q0 #2221, журнал PR #2237 → 6f83e0419). Открыт у Никиты ec600c83 — обновление счётчика онлайн на открытой странице (временное A — читается один раз при открытии; B — каждые 30 с; C — кнопка). Привлечение — собрано и на стенде (эпик #2252, 2026-10-21): браузер стал источником событий через outbox — платформенный сервис Browser Event Collector (POST /browser-events, PageViewed и SignInStarted, без SDK вендора и чужого источника); регистрации по минутам, часам, дням и неделям, воронка от визита до первой ставки с источниками привлечения, активные игроки сейчас и за день; QA прошёл тремя свежими игроками (Q0 #2259, журнал PR #2273 → 043779940). Открыты на временных A пять вопросов: что может нести событие браузера, спрашивать ли согласие и сколько хранить строки (7f85cc95, Евгению); второй шаг воронки — «вход начат», первое открытие диалога входа (1289857f), что такое «активные сегодня» (cb254f89), что считается первой ставкой (087f7ca5) и реферал на шаге регистрации (e9d49d21) — Никите. Игры и события — собраны и на стенде (эпик #2164, 2026-10-20): четыре чтения под /analytics/games/ — поиск по ставкам (одна выборка), ставка по id (одна выборка от мига её UUIDv7 минус сутки), поиск раундов (одна) и карточка раунда (две, без общего снимка); пики памяти измерены читателем на хранилище стенда (все под 128 MiB, самый большой в проходе QA — 5,29 MiB у карточки ставки); раунд на платформе — целевая архитектура без кода, слово Никиты спрошено (ask 17a2ad14, временно A). Экономика рефералки — собрана и на стенде (эпик #2141, 2026-10-19): три чтения под /analytics/referral/ — строки по рефереру (четыре запроса рядом под пулом, по гранту, pending за вычетом списаний с 2026-10-19), когорты по неделе и месяцу с D7/D30/D90 (один запрос, asOf сервера), бэктест выплат при доле страницы (три запроса, totals сервера вне капа); запросы одного чтения не делят снимок — чтение в момент приземления может опередить соседнюю таблицу, следующее сходится (запись в разделе); пики памяти каждого запроса измерены читателем на хранилище стенда (все под 128 MiB, самый большой 30,9 MiB в проходе QA). Cashflow — собран и на стенде (эпик #2045, 2026-10-18): два чтения — ряды депозитов и выводов по ассету и корзине с totals сервера из небакетированных запросов (networkFee рядом с суммой, сторно депозита отдельной цифрой через общий предикат) и топ вносящих/выводящих по id игрока с LIMIT n BY asset (1…25); страница Admin → Analytics → Cashflow за переключателем страниц. По дороге аудит нашёл и T0 #2047 закрыл отгруженный дефект цифры Finance: строка adjustments считала сторно удвоенного депозита (#743) доходом дома — теперь общий предикат сторно (полуджойн) в обоих чтениях. #2055 (четыре устаревших текста в коде) и #2041 закрыты PR #2205 → 35a392f3b 2026-10-20; #2054 (бюджет памяти хранилища: потолок на запрос против суммы) отвечен владельцем 2026-10-19 (B), задеплоен эпиком #2084 и закрыт 2026-10-20 как сверенный. Страница игрока — собрана и на стенде (эпик #2059, 2026-10-18): восемь фиксированных чтений по id игрока — семь за период и обзор с основания игрока — история балансов (cash и bonus ступенями по категориям, открытие по каждому сдвинутому счёту, закрытие null у корзины, где денежные поля ни одной строки не были записаны в хранилище), XP и уровень, депозиты и выводы (строка вывода с endedAt и причиной из закрытого перечня), лента из 39 именованных схем, крейты (остаток шардов — из shardsTotal последнего дропа), рефералы, ограничения и вердикты; правило одного события: цифра, собираемая из двух событий, между пачками писателя врёт (избыток конверсии, остаток шардов — найдены ревьюером на реальном хранилище, исправлены до мержа); под ADR-008 п. 6 (временное A, вопрос 06b12650 у Никиты): ни одно идентифицирующее поле не покидает хранилище через чтение игрока — страж сканирует ключи каждого ответа. Найдено QA и закрыто в тот же час: #2067 — перечитывание всех открытых вкладок разом упиралось в 16 слотов хранилища (код 202); страница читает только открытую вкладку (#2068 → d12a32ae6). Кто выигрывает — собрано и на стенде (эпик #2073, 2026-10-18): одно чтение GET /analytics/ranking двумя запросами — рейтинг игроков по результату и по результату ÷ ставка за период по ассету (BetSettled — единственное событие-источник; result = −Σ houseResult, realWager = Σ stake — ключ Finance, ratioBps усечённый в Int256 с порядком и правилом ничьих; игрок с отклонёнными денежными полями всех ставок — realWager «0», в рейтинге по результату на «0», ratioBps null) и доля топ-10 только по выигравшим одним запросом (временное A, 589b2cd0); фильтры по игре (словарь — упорядоченный список рейтера из корня) и «только плюс», порог minBets (временное A, 830744f8); фильтр по кластеру Risk — с 2026-10-20 (#2243 → PR #2261 → c74b2cefb, ответ Никиты A на F5 эпика фрода). Ревьюер цифр воспроизвёл таблицу на реальном хранилище (тождество с Finance, игрок с отклонёнными полями, ничьи, доля при каждом фильтре, ассет без выигравших — обе доли null). Обязательства — собраны и на стенде (эпик #2084, 2026-10-19): остаток крейтов на момент из событий (по одному на crateId, EV в целых центах, держатели) и ряд по корзинам; получатели и стоимость по коду поверх promoCost Finance; «невостребованные» — собраны эпиком #2382 (2026-10-26): невостребованные слоты и их стоимость на to из событий Referral, отключённые коды отдельно; QA прошёл (Q0 #2387). Инцидент 2026-10-19 00:04Z (#2090): ядро убило ClickHouse стенда под первыми чтениями страницы — причина измерена (хэш-джойн по потокам, не строки) и бюджет памяти хранилища собран заново: профиль читателя одним файлом (hash + 128 MiB на запрос), пул из 4 запросов на процесс в сервере, слоты аккаунта, профиль аккаунта Grafana (10 × 64 MiB; пик панели кампаний 4,9 MiB), и ответ Евгения B — контейнер 4 GiB, серверный потолок 3 GiB, 32 серверных слота, 16 слотов читателя (на стенде с 06:32Z, прочитано обратно). Открыты: #2094 (минимум tierEvCents 1 против крейта до #1792 с 0), #2105 (doc-sync-сид ставил pnpm в корне), #2106 (таймаут буста int-файлов под нагрузкой бокса — класс #880).
back
contr
player
oper
QA
Edge / Security
Not started
Пакет — заглушка на четыре строки: ни рейт-лимитов, ни автоматики под атакой, ни фаз-бана во всём деплое.
back
contr
player
oper
QA
Realtime
Ready
Сокет, кадры с дедупом по eventId, переподключение. С 2026-10-27 у каждого сокета — с входом и без — публичный Topic site:main рядом с комнатой чата (эпик platform-notice цели #2026, #2399; промежуточный A вопроса 2fc96f66, решено A — Евгений, 2026-10-27; #2026, комментарий 6436656500): четыре пуша шлюза, все с головы потока, несут плашку-сообщение, Soft Refresh, обслуживание и паузы игр (#2399, #2417) без Player id в кадрах, а Soft Refresh уходит только сокетам, подписанным раньше акта — подписку шлюз штампует из того же единственного источника времени деплойбла, что и requestedAt акта. Сервер пока одна реплика — до шага 1 ADR-007.
back
contr
player
oper
QA
Admin / бэк-офис
Partial
Вход, очередь ревью с вердиктом, бонус-коды, ретейнеры, ручная корректировка книги (#945). Не хватает трёх разделов: модерация чата (#592), ограничения (#599) и экран кастоди — свипы, флоат-вотчи, горячий счёт (#2497, блокер релиза цели #2494, 2026-10-29). Операторский экран истории ставок — вопрос платформы, вынесенный за цель #1068 решением Никиты 2026-09-12, — собран историей 10 цели #2025 (страница Games, эпик #2164, 2026-10-20). Рядом — телепорт-лаб lab.dev.zamz.fun (#1017, тир teleport: 4 гейта + глаза, карантин, порт-или-удалить #1028): карта операторских маршрутов (#1018: 55 строк, 15 «маршрута нет» — #1096), Risk целиком (#1054), вход как в админке (#1031), Ledger-начисление (#1067 → 30f861de), Referral (#1095), модерация чата (#1113 → c7d07140) и документ честности (#1120 → 508bbc58): с 2026-09-11 у лаба не осталось строк «ещё нет». Набросок админки по пяти разделам — Players, Finance, Analytics, Games и остальное (#1976–#1984 → 1751aa44, 2026-10-08): мок там, где маршрута нет, каждая панель называет нужный ей маршрут; вердикта по самому наброску (принять / переделать) в записи нет на 2026-10-18 — вместо него Никита написал две цели, из них и идут тикеты бэкенд-маршрутов. Вердикт владельцев пришёл целями (Никита, 2026-10-14): #2025 — вся аналитика rugs.fun страницами раздела Analytics в apps/web-admin (десять историй, цель на доске), #2026 — раздел Platform: плашка-сообщение поверх каждой страницы игрока, полноэкранное обслуживание, пауза игры по имени, soft refresh, журнал действий (шесть историй). Обе цели четыре дня стояли невидимыми для координатора (тик читал только ready-for-agent); s3 посажен на первый эпик #2025 2026-10-18. Четвёртый раздел — Analytics → Finance — живой на стенде с 2026-10-18 (#2033, quick; эпик #2028): график и таблицы по одному ассету за период с корзинами, стоимость промо, маржа, календарь RTP, свежесть хранилища; QA прошёл на десктопе точно; расползание на 390 px (#2039) исправлено PR #2044 и перепройдено QA на обеих ширинах 2026-10-18. Остальные страницы аналитики (привлечение, фрод, риск) — по эпикам цели #2025. Вторая страница того же раздела Analytics — Cashflow — на стенде с 2026-10-18 (#2050, quick; эпик #2045): ряды и totals по ассету за период, топ-таблицы, страж ширины PR #2044 расширен на неё (PR #2053); QA прошёл настоящим депозитом и выводом. Третья страница раздела Analytics — игрок целиком — на стенде с 2026-10-18 (#2063, quick; эпик #2059): поле id, период, обзор и семь вкладок, переход со строки топ-таблицы Cashflow без маршрута; страж ширины — на каждой вкладке, доказан мутантом; QA прошёл на своём игроке с настоящими депозитом, выводом и ставками; фан-аут вкладок при смене периода (#2067) исправлен в тот же час (#2068). Четвёртая страница раздела Analytics — Top players — на стенде с 2026-10-18 (#2078, quick; эпик #2073): одна таблица с переключателем рейтинга, порог для рейтинга по отношению, фильтр по игре по категориям, «только плюс», круговая доля топ-10 по bps сервера, каждая строка — кнопка на страницу игрока; новый ключ запроса — одно чтение, уже отвеченный — ни одного (правило #2068); страж ширины на четвёртой странице, доказан мутантом; QA прошёл на своём игроке — первый в обоих рейтингах. Пятая страница раздела Analytics — Liabilities — на стенде с 2026-10-19 (#2087, quick; эпик #2084): таблица тиров на момент с рядом, таблица бонус-кодов, а с 2026-10-26 (#2385) под ней две таблицы на to — невостребованные и отключённые коды (колонка «Unclaimed» из слов ушла), центы сервера без вычислений в браузере, пустая ячейка вместо нуля у отсутствующего тира, страж ширины на пятой странице, доказан мутантом; с #2096 правило «читать только открытую страницу» действует и на Finance/Cashflow; QA прошёл на своём игроке с собранным и не открытым крейтом. Шестая страница раздела Analytics — Referral economics — на стенде с 2026-10-19 (#2151, quick; эпик #2141): слова, что каждая цифра — сервера, период с пресетом «lifetime», таблица рефереров с фильтром по id и кнопкой на страницу игрока, когорты с переключателем неделя/месяц и линейным графиком удержания, бэктест с выбором доли (1 500 по умолчанию) и totals сервера; страж ширины на шестой странице, доказан мутантом; QA прошёл со свежим рефералом, настоящим OTP и одной ставкой. Седьмая страница раздела Analytics — Games — на стенде с 2026-10-20 (#2170, quick; эпик #2164): «Find a Bet» с карточкой ставки, форма поиска над таблицей ставок с кнопками «details» и на страницу игрока, раздел раундов с «Find a Round», слова о том, чего строка не видит; страж ширины на седьмой странице, доказан мутантом; QA прошёл одной ставкой Limbo и одним Climb на своём игроке. Восьмая страница раздела Analytics — Risk — на стенде с 2026-10-20 (#2188 → PR #2195, quick; эпик #2181): вердикты по всем игрокам с фильтрами, а в разделе Review cases — панель «Metric catalog» над реестром контролей и чтением наблюдений; QA прошёл: замороженный вывод в очереди со сработавшей метрикой (Q0 #2189, журнал PR #2202). Девятая — Fraud — на стенде с 2026-10-20 (#2219 → PR #2231; эпик #2212): вкладки Overview, Shared, Player и Pairs, а в Review cases — панель «Clusters and IP enrichment» с экспортом CSV (#2220 → PR #2234); QA прошёл в границах проверенного (Q0 #2221, журнал PR #2237). Десятая — Acquisition — на стенде с 2026-10-21 (#2258 → PR #2271, quick; эпик #2252): вкладки Registrations, Funnel и Active; QA прошёл тремя свежими игроками (Q0 #2259, журнал PR #2273). Top players с 2026-10-20 сужается по кластеру Risk (#2243 → PR #2261 → c74b2cefb). Цель #2025 закрыта 2026-10-26: QA одним проходом прошёл все десять историй на развёрнутом 5b822e820 (A-ANALYTICS-001, Result 6425254997, журнал PR #2395 → 4c8b87370). С 2026-10-24 консоль носит вид админки rugs — боковое меню групп Player / Shield / Game (с 2026-10-27 и Platform) вместо переключателя страниц, General Finance открывается круговой диаграммой по категориям (эпик #2292, ветка Никиты, PR #2294 → 37bf275cb; принято Никитой 2026-10-26: «пока пойдет так, если что - буду править отдельно»). Пятый раздел — Admin → Platform — собран 2026-10-27 (#2400, quick; эпик platform-notice цели #2026, спека #2397): группа меню «Platform» со строкой «Platform Management», допуск по своему ростеру siteControl.operators (шестой ростер); плашка-сообщение Show/Hide и Soft refresh — каждое за подтверждением, конфликт версии 409 перечитывает состояние, последние десять Control Actions с Player id оператора; принят по скриншотам тикета и пройден QA на стенде (Q0 #2404, все PASS). С 2026-10-27 в нём и два переключателя эпика 2 той же цели (platform-maintenance, спека #2412; #2419, quick): блок «Maintenance» — старт и конец обслуживания, каждое за подтверждением, и блок «Games» — строка на страницу игрока, пауза с сообщением и возобновление за подтверждением; последние десять показывают и четыре новых действия; QA прошёл оба блока на стенде (Q0 #2422: обещания 5–7 спеки #2412 все PASS на 28c8da0c8, журнал PR #2443). Цель #2026 закрыта 2026-10-27 по журналу P-SITE-003 (PR #2447 → 2d1e3e85f); ряд Site Control ниже.
back
contr
player
oper
QA
Site Control
Ready
Оба эпика цели #2026 собраны, влиты и пройдены QA на стенде — истории 1, 2, 5 и 6 (Q0 #2404) и истории 3 и 4 (Q0 #2422), все PASS; капстоун-e2e T8 #2420 тоже влит (PR #2445 → 990f8dc2b). Цель #2026 закрыта 2026-10-27 по журналу QA P-SITE-003: все шесть историй PASS заново на одной сборке — развёрнутом 3e060e7e3 (Result 6443564724, журнал PR #2447 → 2d1e3e85f; запись координатора 6443612473). Эпик 1 — platform-notice (спека #2397; по PR на тикет: T1 #2398 → PR #2407, T2 #2399 → PR #2411, T4 #2400 → PR #2410, T3 #2401 → PR #2425): новый поддерживающий контекст SiteControl, класс B — промежуточный A вопроса Евгению 2fc96f66; решено A (Евгений, 2026-10-27; #2026, комментарий 6436656500). Оператор из ростера siteControl.operators в Admin → Platform показывает и снимает плашку-сообщение (1–100 символов, одна строка простого текста) и просит Soft Refresh; каждое изменение — Control Action с Player id оператора, страница показывает последние десять. Плашка — запись в базе, а не переменная процесса: рестарт и второй экземпляр отвечают тем же. Каждый сокет, с входом и без, держит публичный site:main; плашка — первая область Shell над шапкой (32 px на 1440×900, 48 px на 390×844), страница читает состояние при загрузке, после первого ready и на каждом переподключении, и берёт только более новую версию; Soft Refresh перезагружает один раз каждую страницу, достучавшуюся до сервера раньше акта, с разбросом [0, 5 с). Первый экран — по ответу Никиты A на вопрос 3c336c38 (2026-10-26). QA прошёл истории 1, 2, 5 и 6 на стенде — все PASS на 55b7f9f67 (Q0 #2404, журнал PR #2430). Эпик 2 — platform-maintenance (спека #2412; по PR на тикет: T1 #2413 → PR #2426, T5 #2417 → PR #2432, T7 #2419 → PR #2437, T6 #2418 → PR #2436, T2 #2414 → PR #2433, T3 #2415 → PR #2434, T4 #2416 → PR #2441, все в main 2026-10-27): полноэкранное обслуживание и пауза игры по имени — состояние SiteControl, у каждого переключателя своя версия, каждое меняющее нажатие — Control Action (повтор и нажатие без изменения записи не оставляют). Отказывает сервер, и каждый исполнитель — по своей собственной проекции событий SiteControl: Gaming отвечает на свежую ставку всех пяти дверей 409 site-maintenance или 409 game-paused — отказ записан и окончателен до блокировки ставки (класс A; человеческий просмотр денежного пути Евгений перенёс на ревью перед релизом — долг #2435), Engagement отвечает на сообщение чата 409 site-maintenance. Открытая партия доигрывается, а оверлей ждёт её конца — промежуточный A вопроса Никите 1bb475cb; вопрос открыт: доиграть её (A), накрыть её оверлеем (B) или отказывать в её продолжениях (C). Каждая страница игрока, с входом и без, накрывается оверлеем с сообщением (у вошедшего игрока — и со строкой баланса), страница игры на паузе — плашкой поверх поля с неактивным «Place bet»; правило первого экрана держится без исключения. В Admin → Platform — блоки «Maintenance» и «Games» (строка на страницу игрока: Limbo — три игры, Plinko — 36). Застрявшая доставка переключателя в Gaming или Engagement будит человека (site-control.site-switch-delivery-parked) и держит /health в warn, а каждый деплой стенда — красным, пока строку не переиграют. QA прошёл истории 3 и 4 на стенде — обещания 5–7 спеки #2412 все PASS на 28c8da0c8 (Q0 #2422, журнал PR #2443 → 74a74c4d7); три варианта стенд не проверял — перечитывание под оверлеем при мёртвой сессии (D26), отказ, пришедший после снятия (D20), и запоздалый GamePausesChanged младшей версии (D11): их доказательства — T8 #2420 (S9, S7, S17) и, для D20 и D11, кейсы T6 и T2. Долги debt:P3: #2438 и #2439 открыты; #2440 (PR #2456 → ce499e78e) и #2442 (PR #2457 → 38296c0f3) закрыты 2026-10-27.
back
contr
player
oper
QA

What the player runs into

  1. Из браузера нельзя сделать реальный Spin слота: Climb, Plinko, Limbo и Chicken живые, а экрана слота в плеере нет#587 заморожен Никитой 2026-09-07, снятия нет; парковку подтвердили 2026-09-26
  2. В продакшене не включена ни одна сеть: в default.json cryptos: []. На стенде депозит и вывод живы в шести сетях из восьми, 15 активов, solana:USDT среди них; tron и ton отложенывключение сетей в продакшене — значения и эндпоинты на цепь (#2495), блокер релиза цели #2494, — своё решение владельцев; «одна согласованная точка на цепь» с #2492 (PR #2636 → 5372acbc2, 2026-11-02) ослаблена по пунктам — на ней остаются индекс TON, первый кредит на устаревшем чтении (не больше одного кредита не той ноги, никогда не двойной) и двойная сирота под пулом (#2637); tron и ton — шаги владельцев (#2572)
  3. После принятой заявки на вывод кошелёк показывает доступный баланс, каким он был до холдаneeds-triage; блокер релиза цели #2494 (Никита, 2026-10-29); повторялось 2026-09-12, 2026-10-18 и в каждой прогулке сетей 2026-10-28 … 2026-10-31 (N1–N6, CAP #2134)
  4. Вывод ассета без заданного лимита отвечает risk-rejected («обратитесь в поддержку») вместо честного отказа; вывод ETH сверх баланса честно отвечает «недостаточно средств»needs-triage; сужено QA 2026-09-06; блокер релиза цели #2494 (Никита, 2026-10-29)
  5. У фронтенда нет источника знаков после запятой для ассетов: ассет, которого нет в зашитой таблице, пропадает из списка балансовneeds-triage; временное решение #616 — таблица asset-meta.ts; с F1 #2119 (PR #2501 → eca56e70f, 2026-10-29) в ней все 19 активов реестра
  6. Оператору негде модерировать чат — mute/unmute/delete существуют только как маршрутыэпик quick без движения с 2026-09-06; набросок только в телепорт-лабе (#1113)

In flight

Открыты два черновых PR, оба без движения с 2026-09-13: #1263 (pipeline-speed — DAG-планировщик; его тикет #1182 уже закрыт) и #1251 (лобби по макету владельца, quick); вердикт PR — один прогон affected на точной финальной голове (правило Евгения 2026-09-12, счёт — Никита 2026-09-14), full — ночью на main и перед продовым деплоем; ре-чек PR — за ролью reviewer на хабе.

  • Done
    #589 Epic: referral for the Player — the code captured at sign-in, a bonus code redeemed, the invite screen — PR #1865 (merged)
  • Done
    #1153 telemetry questions after joinable-records: step percentiles, agent load, phase time, review weight, job wait, cost per finding — PR #2242 (merged)
  • Done
    #1223 pipeline-speed T6 — the pipeline as a DAG: spec + benchmark (one job; floor 481 s at 5 CPU + 2 Docker tokens vs 790 s; 783 s at one Docker token) — PR #1943 (merged)
  • Done
    #1580 Epic: big-win-chat — a bet won above 100× is announced in the chat, kept in its history and pushed live (spec) — PR #1866 (merged)
  • Done
    #1601 Epic: limbo-game — Limbo on the bet framework, backend only: RTP exactly 98 %, three risk modes, outcome tables shaped like the 16-row Plinko boards with their own numbers (Nikita, 2026-09-18) — PR #1900 (merged)
  • Done
    #1617 Epic: frontend-refresh — Nikita's chicken-n-dice branch adopted whole: Chicken storyboard 2, the level-up notice, the Crate Vault and the opening — PR #1751 (merged)
  • Done
    #1632 Epic: chicken-game — the Chicken on the Climb's pipeline as a fourth engine kind, backend only: a road of Steps, one Crash roll per Step at the rung's committed hazard, the deadly lane derived, a Cash-Out at every position (spec) — PR #1899 (merged)
  • In progress
    #446 hub-groups — driver groups as tags on the hub: @backend and @sre beside @all and globs, join/leave and /group, the hub's own notices routed by their tags
  • In progress
    #534 Epic: contracts-split — @bcas/contracts generated per domain, so a schema change affects its importers and not every package (#412 step 2)
  • In progress
    #582 Epic: realtime browser client — the player app opens the socket, keeps the ten frames as typed seams, and re-reads the truth
  • In progress
    #584 Epic: chat live — the ChatRail on the real room (history, the live frame, the composer)
  • In progress
    #585 Epic: player profile — username, Level and XP on the TopBar and a profile view, the banned state, the shell's titles
  • In progress
    #586 Epic: fairness verifier — the Provably Fair page for real, and the public verifier that reproduces an outcome in the browser
  • In progress
    #587 Epic: spin surface — the first real game: a Spin from the BetPanel, its result frame, and Game History
  • In progress
    #1019 Epic workflow-evidence: a per-run verification record, a per-epic known-blockers list and one wait adapter — the evidence of a run survives the hand-off and the wait costs no model turn (tooling; #985 narrowed + #986)
  • In progress
    #1132 plinko-player: the real drop through the client on the 27 boards — one card, a risk × rows selector, the ball ending in the server's bucket (spec)
  • In progress
    #1144 Spec: joinable-records — the process records name each other's keys (hub claim, footer, evidence identity, native hierarchy, derived board and readiness, workflow seats, Codex prices)
  • In progress
    #1176 pipeline-speed: the verification pipeline's wall clock — the harness duplicate, turbo cache on the runner, one Postgres per run, custody-e2e in parallel, then a DAG in ci.mjs (Nikita's plan) — PR #1943 (merged)
  • In progress
    #1196 «Диспетчерская» (ops.dev.zamz.fun): what was built, how it works, the API — and the coordinator's check of the data, the lint, what to close and what is missing
  • In progress
    #1259 Epic: player-ui-refresh — Nikita's Plinko visuals, Galaga skin, Soundkit (dev), Chicken stub, USD figures and the Funds Source rule, integrated slice by slice (quick) — PR #2232 (merged)
  • In progress
    #1413 Epic: chat-reply-like — reply to a message and like a message in the chat (front + back) — PR #1916 (merged)
  • In progress
    #1671 Epic: referral-codes — more than one referral code per account, and one custom code per account, on the Referral context (goal #1611) — PR #1755 (merged)
  • In progress
    #2545 agent-context-slim — spec: each workflow step reads its own sections, not four whole documents (C+A, Nikita 2026-10-30) — PR #2554 (merged)
  • Ready
    #27 Engagement — chat, support bridge
  • Ready
    #1249 Epic: lobby-featured-hero — the lobby redrawn to the owner's mock (quick)