No description
  • PHP 59.1%
  • Dart 13.3%
  • Python 10%
  • Go 8.7%
  • JavaScript 5.1%
  • Other 3.7%
Find a file
2026-11-14 22:28:18 +00:00
.claude/skills/epicly-logs logs 2026-11-13 22:27:38 +05:00
.forgejo Play bot turns through baseline policies, inference and a fallback 2026-11-15 03:00:27 +05:00
.github chore(deps): cover Gateway, CI tools and contract validators in Dependabot 2026-11-11 23:43:34 +05:00
apps Play bot turns through baseline policies, inference and a fallback 2026-11-15 03:00:27 +05:00
benchmarks ci fixes 2026-11-11 19:05:36 +05:00
docs Play bot turns through baseline policies, inference and a fallback 2026-11-15 03:00:27 +05:00
infra Retry Telegram webhook calls during deploy 2026-11-14 19:43:27 +05:00
packages/contracts P5.4 push notifications 2026-11-12 17:47:19 +05:00
services Play bot turns through baseline policies, inference and a fallback 2026-11-15 03:00:27 +05:00
.cbmignore P3.7 new command fix 2026-10-10 21:05:58 +05:00
.editorconfig P0.1 2026-10-03 11:05:39 +05:00
.env.example change application id 2026-11-12 18:51:46 +05:00
.env.prod.example change application id 2026-11-12 18:51:46 +05:00
.env.server-check.example Isolate server acceptance Gateway image and document prepared checkouts 2026-10-12 13:05:05 +05:00
.gitattributes P0.1 2026-10-03 11:05:39 +05:00
.gitignore refactor artifact uploading 2026-11-05 14:26:35 +05:00
.prettierignore refactor artifact uploading 2026-11-05 14:26:35 +05:00
.prettierrc.json P0.1 2026-10-03 11:05:39 +05:00
AGENTS.md P5.4 push notifications 2026-11-12 17:47:19 +05:00
ARCHITECTURE.md Play bot turns through baseline policies, inference and a fallback 2026-11-15 03:00:27 +05:00
compose.ci.yaml go notifications 2026-11-10 00:30:44 +05:00
compose.composer-proxy.yaml app builders 2026-11-08 18:34:18 +05:00
compose.dev.yaml M2-engine ci 2026-10-07 15:58:47 +05:00
compose.inference.yaml Play bot turns through baseline policies, inference and a fallback 2026-11-15 03:00:27 +05:00
compose.minimal.yaml P5.4 push notifications 2026-11-12 17:47:19 +05:00
compose.notifications-test.yaml go notifications 2026-11-10 00:30:44 +05:00
compose.notifications.prod.yaml fix(notifications): receive Telegram updates through outbound polling 2026-11-11 16:22:11 +05:00
compose.notifications.yaml change application id 2026-11-12 18:51:46 +05:00
compose.prod.composer-proxy.yaml app builders 2026-11-08 18:34:18 +05:00
compose.prod.overrides.yaml Raise production worker CPU ceilings; reap stale CI workspaces 2026-11-13 11:04:35 +05:00
compose.prod.server.yaml Proxy production image Composer requests through xray 2026-10-12 12:30:28 +05:00
compose.prod.yaml M2-engine ci 2026-10-07 15:58:47 +05:00
compose.server-check.yaml Close headless storage acceptance gaps and prepare server Composer proxy 2026-10-12 12:23:09 +05:00
compose.tools.yaml ci fixes 2026-11-11 14:22:03 +05:00
compose.yaml M2-engine ci 2026-10-07 15:58:47 +05:00
FORGEJO.md Run workload tests in mutation campaigns again; document pasta CI daemon 2026-11-13 10:58:26 +05:00
LICENSE P0.1 2026-10-03 11:05:39 +05:00
Makefile Play bot turns through baseline policies, inference and a fallback 2026-11-15 03:00:27 +05:00
PLAN.md Plan training one model for every bot memory level 2026-11-15 03:03:21 +05:00
README.md ci fixes 2026-11-11 19:05:36 +05:00

Epicly Unstable App

Монорепозиторий Epicly Unstable: PHP 8.5/Symfony 8.1/FrankenPHP, Go Gateway/Notifications, Flutter клиент и Python AI. Архитектура — ARCHITECTURE.md, порядок разработки — PLAN.md.

После P0 добавлена инфраструктура P1.1: default minimal запускает Gateway, Core HTTP с одним worker, отдельные game/background процессы, PostgreSQL и два Redis. Есть миграции, общий игровой runtime и авторизованный transport для Sandbox и Durak (2–6 игроков). Production auth/command path развивается в P1.2–P1.8; первый реальный стенд и Caddy ingress проверены, minimum/capacity приемка остается открытой. Подробности и границы — docs/phases/p1/P1.1.md.

Локальный запуск

Нужны Docker Engine, Compose с include (2.20+), Make и Git. SDK и package managers выполняются в контейнерах. Первый bootstrap требует registry/package repositories.

make bootstrap
make migrate
make auth-init
make check test smoke
# Return to default runtime with demo transport disabled:
docker compose up -d --wait gateway

HTTP: http://localhost:8088, Gateway: http://localhost:8089. HTTP_PORT/GATEWAY_PORT меняются в .env или окружении. Ports только loopback, внешнего Caddy здесь не нужно. /health — liveness; /ready — зависимости роли. /ws использует epicly.v1 и пользовательскую аутентификацию; /demo/ws удалён. WS_ORIGINS — точный allowlist (default http://localhost:8088); при другом HTTP port задайте соответствующий Origin.

make env копирует отсутствующие .env examples без перезаписи. Core vendor/cache находятся в named volumes. make vendor устанавливает locked PHP dependencies в игнорируемый host vendor для IDE, через контейнер. После composer.lock обновляйте обе копии через make bootstrap vendor.

make down сохраняет volumes. down --volumes удаляет игровые/account данные; миграции не откатываются автоматическим удалением таблиц. Для существующего P0 PostgreSQL volume нужны новые service roles: переход и permissions. Новый volume настраивается init script автоматически.

Команды

Цель Назначение
make up / make down Запуск / остановка семи minimal сервисов
make bootstrap / make vendor Runtime / host IDE dependencies из lock
make check / make test / make smoke PHP/architecture/format/config, PHPUnit, HTTP
make domain-test P2.1–P2.3: домен, table graph, Sandbox без сервисов
make console ARGS=about / make logs Symfony CLI / HTTP logs
make format / make php-fix Prettier / PHP-CS-Fixer через контейнеры
make storage-smoke / make amqp-smoke Storage / opt-in broker compatibility
make integrations-bootstrap Opt-in RabbitMQ topology, без создания jobs
make go-check python-check client-check Go/Python/Flutter toolchain checks
make contracts-test contracts-asyncapi P0.4 protocol fixtures и schema validation
make live-acceptance Действующие live/fault контракты Gateway и Core

Heavy AI/Flutter/tooling запускаются явно (make tools-build, make ai-check, make client-build client-android-build). Default не требует RabbitMQ, AI, notifications, object storage, metrics или отдельных processes на partition.

Ресурсы и первый тестовый стенд

Исходные budgets: 1 HTTP worker, Gateway pool=2, PHP game/background memory=96 MiB, PG connections=30/shared_buffers=64 MiB, Redis maxmemory state=96/security=32 MiB с headroom/AOF everysec/noeviction. Counts, quotas, memory и batches конфигурируются в compose.minimal.yaml. Суммарные container limits — 1120 MiB, без ОС/build/ingress. Это не минимальная RAM хоста.

На дев-машине 12 logical CPUs/32 GiB idle container memory около 141 MiB; cached restart до healthy 6–7s. На первом стенде i5-3470/7.43 GiB container working set около 143–154 MiB, cached restart 8s; HTTPS/WSS, heartbeat и рестарты проверены через внешний Caddy. Результаты стенда. Поддерживаемый minimum CPU/RAM еще не определен: нужны контролируемые memory pressure/capacity испытания. Process RSS измерен отдельно, абсолютный startup peak не установлен. Процедура, условия и результаты — P1.1. Полный пользовательский WS/reconnect проверяется после готовности transport.

Production / selfhost

Локальный compose.yaml объединяет общую базу, tools и dev overrides до подключения модели. Инструменты SDK включаются профилем tools, PCOV — профилем coverage, RabbitMQ — integrations. В production эти dev/tooling overrides не подключаются.

compose.prod.yaml использует тот же minimal состав, production image без dev mounts/Xdebug, отдельные secrets и существующую external network caddy. Только Core HTTP и Gateway подключены к ingress; приложение и DB/Redis не публикуют host ports. Инструкции, exact trusted proxies и маршруты — infra/caddy.

cp .env.prod.example .env.prod
# Fill all secrets, PUBLIC_URL and exact TRUSTED_PROXIES before starting.
docker compose --env-file .env.prod -f compose.prod.yaml up --build --wait
make DOCKER_COMPOSE='docker compose --env-file .env.prod -f compose.prod.yaml' migrate

Внешний Caddy в этих командах не создается и не перезагружается. Production counter transport выключен; публичный игровой API появится в следующих пунктах P1. Один PG, без standby; minimal не обещает HA или сохранение каждого hot committed хода.

Структура и документы

apps/core — HTTP/CLI и migrations; apps/gateway — Go runtime и probes; apps/client — Flutter; services/notifications — Go; services/ai — Python; packages/contracts — P0.4 protocol schemas/fixtures; infra — runtime bootstrap/ingress/tool images; benchmarks — изолированные измерения.

В Git только .env examples с публичными local defaults. Рабочие env/секреты игнорируются. Production секреты — локальные файлы deployment или vault. Теги latest в reproducible runtime не используются.

P1.2: auth endpoints, signing key rotation, security projection/recovery и локальный fault probe описаны в docs/phases/p1/P1.2.md. make auth-smoke проверяет HTTP → PostgreSQL → Redis → Gateway, временно останавливая локальные security/background containers.

Heartbeat и presence P1.5: гарантии и проверки, make presence-crash-smoke; presence Lua на настоящем Redis проверяет make go-check, PHP presence/broker tests входят в общий suite.

Прямой WS/REST admission и проверки двух Gateway: P1.6, make admission-smoke. Redis worker, fencing, background persistence и recovery: P1.7; их tests входят в общий suite.

Gate M1 пройден: запуск и приемка. Его действующие runtime-проверки входят в make live-acceptance.