Отлично, поехали. Сначала приборка:
PR #78 открыт. Ставлю фоновое наблюдение за CI и ботами:
Статус по всем трём фронтам:
1. Деплой Scala-бэкенда — PR #78 готов (issue #77):
- Dockerfile: sbt-стадия через sbt-native-packager на нативной платформе билдера (байткод JVM платформонезависим — тот же приём, что спас CI-время в UI), тонкий JRE-рантайм, non-root пользователь, токен для Maven-артефакта движка — BuildKit-секретом.
- CD-workflow: публикует
ghcr.io/rabestro/dicechess-analytics-apiпод amd64+arm64 — после этого иstack:upна вашем Mac заработает целиком. - compose: сервис
apiпереведён с локальной Python-сборки на образ; переменные не тронуты. - Проверено локально: arm64-образ собран и отдал
/,/api/games,/api/players(с вычисленным рейтингом) против локальной базы;backend:checkзелёный. CI и боты — под фоновым наблюдением.
После вашего merge: workflow опубликует образ, и я выкачу на сервер (git pull && docker compose pull api && up -d api в ~/dicechess-analytics — путь уже разведал) со смоук-проверкой, включая поиск игроков через серверный UI.
2. Sonnet-агенты отработали параллельно, оба PR с честной верификацией:
- #75 — lefthook: pre-commit заменён, хуки делегируют существующим инструментам (gitleaks по staged-диффу, ruff по py-файлам,
backend:checkна pre-push только при изменениях в backend/), агент прогнал хуки вживую. - #76 — Starlight: сайт документации на Astro/Starlight по образцу движка, 6 страниц собираются, mkdocs удалён.
Напоминание про порядок: оба трогают docs/development.md — вливайте #75 → #76; конфликт во втором, если появится, разрулю. И мелкое следствие работы агента: lefthook уже установлен как git-хук локально, а его конфиг пока живёт только в ветке #75 — до merge при коммитах в этом репо будет безвредное предупреждение «config not found».
Итого на вашем ревью три PR: #75, #76, #78. Как вольёте #78 — продолжаю деплой.
Замечания разобраны, фикс запушен в PR #78:
- Применил: UID/GID закреплены на 10001 — проверил в пересобранном образе (
id→uid=10001(app)). Предсказуемые идентификаторы пригодятся при любых будущих security-политиках. - Отклонил с обоснованием:
chownфайлов приложения на рантайм-пользователя ослабил бы контейнер, а не укрепил. Файлы, принадлежащие root и доступные app только на чтение — это иммутабельность: процесс не может переписать собственные бинарники. Писать в/appсервису нечего — логи в stdout, кэшей на диске нет.
Оба треда отвечены и зарезолвлены. PR #78 в финальном виде ждёт вашего merge — после него CI опубликует образ, и я сразу выкатываю на ASUS. Напомню и про 76 от Sonnet-агентов (порядок: #75 → #76).