Об этом проекте

Deck Lab — это веб-приложение на Python/Flask для создания, исследования и тестирования конкурентных колод Commander (Magic: The Gathering) в едином рабочем пространстве. Пользователи могут редактировать колоды, исследовать конкурентную мету, просматривать информацию о картах и запускать симуляции «голдфиша»; сохранённые колоды, учётные записи и настройки сохраняются между сеансами. Размещённый экземпляр требует учётную запись, предоставленную владельцем. Ключевые возможности, описанные в README: - Рабочий процесс редактирования колод и исследований: публичные результаты исследований обслуживаются из постоянного снимка с отслеживанием ревизий, фоновым обновлением и ограниченным устаревшим обслуживанием; фильтры и история браузера обновляются без полной перестройки страницы. - Детерминированная доменная логика: легальность Commander, цветовая идентичность, комбинации партнёров и размер колоды проверяются в коде; конструктор стратегических наборов выбирает карты детерминированно, а вывод модели ограничен отдельной проверенной границей для объяснений. - Явные контракты данных: исследовательские данные PostgreSQL предоставляются через версионируемые представления `mtg_v1` с потребителем только для чтения, а отдельный симулятор обменивается версионированным JSON, проверяемым по встроенной схеме. Отсутствующие доказательства и недоступные симуляции отображаются как видимые состояния, а не выдуманные результаты. - Безопасность: хэши паролей Argon2, защита CSRF, предоставление учётных записей, восстановление пароля и проверки авторизации; производственная среда и QA используют отдельные учётные данные, данные и контейнерные сети. - Воспроизводимые релизы: GitHub Actions контролирует тесты, линтер, форматирование, типы и дымовые проверки контейнеров; развёртывание проверяет ревизию образа, хэш архива, платформу и слои; зашифрованные резервные копии и изолированные проверки восстановления поддерживают восстановление. Архитектура: веб-приложение Flask + Waitress с использованием SQLite для учётных записей, колод и снимка исследований; фоновое обновление получает данные из представлений PostgreSQL `mtg_v1`; приложение может вызывать частный симулятор через версионированный JSON и опциональный шлюз моделей. Развёртывание использует Caddy для HTTPS и Docker Compose на DigitalOcean, при этом порты базы данных и симулятора остаются закрытыми; QA доступно на отдельном поддомене для проверки владельцем перед производственным релизом. Для локального запуска требуется Python 3.11+. Настройка использует виртуальное окружение, `pip install -e '.[dev,postgres,legacy]'`, скрипт настройки базы данных, переменные окружения для секретного ключа, режима аутентификации и флагов раскатки, команду CLI для создания администратора и команду запуска. CLI/пакет сохраняет историческое название `sabermetrics` для совместимости. Путь cEDH по умолчанию на основе фикстур работает без учётных данных провайдера, PostgreSQL или симулятора; производственный исследовательский корпус и частные учётные записи не распространяются с репозиторием. Офлайн-детерминированный конструктор можно использовать через команды CLI, которые перечисляют и собирают стратегические наборы. Проверка использует pytest, ruff, black и mypy; стандартный набор тестов опирается на фикстуры и моки, тогда как интеграции с реальными PostgreSQL, моделями и симулятором являются опциональными, а тесты моделей могут повлечь расходы на API. CI также проверяет поведение установленного пакета, аутентификацию/восстановление, обратную связь с имитированной доставкой и запуск HTTP-контейнера. Конфигурация типов фиксирует ограниченные исключения для устаревшего кода, а не заявляет о полном покрытии. Область применения и ограничения: это приложение, ориентированное на Commander, а не полный движок правил; «голдфиш» измеряет смоделированные игровые паттерны, а не вероятность победы в мультиплеере; турнирное покрытие отражает доступные исходные данные, и частота включения не является доказательством качества карты; поддержка стратегических наборов ограничена курируемым материалом и возможностями симулятора; развёртывание на одном хосте — это осознанный операционный компромисс, а не заявление о высокой доступности. Некоторые оригинальные модули генератора остаются в качестве совместимого кода, а активный продукт генератора находится в отдельном репозитории. Проект является неофициальным фанатским проектом, не связан с Wizards of the Coast, и распространяется под лицензией MIT.