Приёмка и починка 15.09.2026:
- ADR-009: один бэк на оба домена — прод-домен smart-updown.binom.pw переведён на тот же
TS-шлюз (:8895), что и testfront; Kotlin-бэк (3NWEK) выключен обратимо. Разобраны расхождения
API игры и шлюза (их должны править во фронте).
- ADR-010: две ловушки деплоя фронта — (1) чарт рендерит только path '/', поэтому helm-релиз
сносит /api,/ws → вынесены в отдельный ingress smart-updown-api вне helm;
(2) захардкоженный values.image.tag бьёт Chart.AppVersion → helm upgrade НЕ поднимает новый
образ (новый RS не создаётся), на домене остаётся старый билд при 'Upgrade complete'.
Приведена правильная команда (--reuse-values --set image.tag=<N>) и способ ПРОВЕРКИ по кубу
и домену, а не по helm. Отмечен остаточный риск: Unity-ассеты immutable 7 суток при
неизменяемых именах файлов → кэш браузера держит старый билд.
- README: карта деплоя (кто где живёт), статус проекта на 15.09, актуализирован блок
безопасности (SEC-16 — утечка SOL, блокер перед mainnet), Kotlin-бэк помечен выключенным,
добавлен TS-шлюз как боевой бэк, ссылки на tools/ и k8s/.
- TASKS.md: деплой-памятка фронта + задачи фронтендеру (убрать image.tag, хэш в именах
ассетов, привести API игры к контракту шлюза).
15 пунктов, отмечаются [ ]/[x]. Критичное найдено воспроизведением на
testfront.binom.pw, не чтением кода:
- close_bet проверяет только нижнюю границу окна (now >= expire_time) —
верхней нет, ставка висит open бесконечно, момент расчёта выбирает
вызывающий /close;
- в шлюзе нет авто-закрытия (единственный setInterval — WS-heartbeat);
- /bet, /close, /faucet открыты наружу без авторизации; faucet выдал
5 SOL + 10000 фантиков при SMART_ALLOW_AIRDROP=1 в боевом поде;
- эксплойт воспроизведён: ставка DOWN (entry=9998000000) висела open >2 мин
после экспирации 15с и закрыта при exitPrice=9997000000 -> payout_done.
Плюс: множитель 1.3x требует 77% винрейта, запертые средства в ваулте,
равные цены не финализируют ставку, NATS без auth, релейер — точка доверия.
- README: новая секция «Внешние зависимости» — binance-market как общий
инфраструктурный upstream, а не часть игры (~/common-projects/invest/binance-market,
контракт: NATS market.price.solusdt или WS /ws/price).
- docs/DECISIONS: добавлен ADR-007 с обоснованием; ADR-006 получил апдейт-сноску.
- docs/ECONOMY: «Курс и балансы» — указано, откуда берётся реальная цена SOL.
- TASKS: задачи «Цена SOL: реальный источник» (Фаза 0) и «PriceSource: реальная
цена» (Фаза 2) переведены из TODO в IN_PROGRESS, со ссылкой на ADR-007 и
binance-market; test-front задача тоже помечена.