Files
Dungeons-Ground/PLAN.md
pavel444-byte 45afb302b7
All checks were successful
CI / validate (push) Successful in 16m33s
Add closed alpha product plan
2026-08-18 14:48:24 +05:00

193 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Dungeons & Ground — план закрытой webальфы
## 1. Цель продукта
Dungeons & Ground — англоязычная веб‑платформа для текстовых TTRPGкампаний любого жанра, где:
- AIсоавтор помогает за несколько сообщений создать собственную вселенную.
- AI Game Master ведёт историю, NPC и последствия.
- Реальные игроки участвуют асинхронно в общем пошаговом чате.
- Постоянные AIгерои дополняют партию, а при необходимости временно заменяют отсутствующих игроков.
- Сервер, а не языковая модель, рассчитывает проверки, броски, HP и урон.
- Кампания сохраняет мир, отношения, инвентарь, события и долгосрочную память.
Главный критерий готовности альфы: 24 человека создают мир, персонажей и проходят минимум 2030 минут связной кампании, причём AI не забывает ключевые события и не изменяет игровые значения произвольно.
В отличие от Friends & Fables, уже совмещающего AIведущего, worldbuilding, память, карты, бой и мультиплеер, первая версия D&G сосредоточится на простом создании мира и партии, которая продолжает игру даже при отсутствии части людей. [Возможности Friends & Fables](https://fables.gg/), [описание их системы памяти](https://help.fables.gg/articles/2838157-memories).
## 2. Функциональность альфы
### Пользовательский путь
1. Вход по email magic link для пользователей из allowlist.
2. Создание приватной вселенной через чат с AIсоавтором.
3. AI задаёт 35 уточняющих вопросов о жанре, атмосфере, конфликте и желаемой роли игроков.
4. Создаётся редактируемый стартовый набор:
- premise, genre, tone и content boundaries;
- стартовая локация;
- 3 значимых NPC;
- 2 фракции;
- сюжетная завязка;
- скрытая угроза или цель;
- начальная сцена.
5. Владелец подтверждает мир, создаёт кампанию и приглашает игроков ссылкой.
6. Каждый игрок создаёт персонажа вручную или с помощью AI.
7. Владелец добавляет постоянных AIгероев и определяет, чьи персонажи могут временно переходить под управление AI.
8. Игроки отправляют действия в текущем раунде.
9. AIDM обрабатывает раунд, когда:
- ответили все активные реальные игроки; или
- владелец нажал `Continue without waiting`.
10. AIгерои и замены совершают действия после людей, затем AIDM публикует единый результат раунда.
### Облегчённая игровая система
Использовать классические характеристики `STR`, `DEX`, `CON`, `INT`, `WIS`, `CHA` во всех жанрах, но позволять AI адаптировать названия архетипов, экипировки и способностей под fantasy, scifi, horror и другие сеттинги.
Первая версия движка покрывает:
- d20 ability и skill checks;
- proficiency bonus;
- HP, Defense/AC и initiative;
- attack roll, damage и healing;
- advantage/disadvantage;
- простые статусы и ограниченные ресурсы;
- серверный генератор случайных чисел с сохранением формулы и результата;
- ручную корректировку состояния владельцем кампании с записью в аудит.
Полные классы, заклинания, сетка боя и редкие правила 5e не входят в альфу. Основа — SRD 5.2.1 под CC BY 4.0 с обязательной атрибуцией; закрытые названия и сеттинги D&D не использовать. [Официальные условия SRD 5.2.1](https://www.dndbeyond.com/srd).
### Память и состояние мира
Хранить отдельно:
- неизменяемый журнал действий и результатов;
- текущую сцену и активные сущности;
- структурированное состояние персонажей, NPC, фракций и заданий;
- отношения между персонажами;
- важные воспоминания с привязкой к персонажам, локациям и тегам;
- краткое резюме истории, обновляемое каждые три завершённых раунда.
В контекст модели передавать только системные инструкции, текущую сцену, последние два раунда, участвующие сущности, активные цели и релевантные воспоминания. Полная история никогда не отправляется автоматически.
## 3. Техническая архитектура
### Стек
- Monorepo на TypeScript.
- Nuxt.js для SSRинтерфейса и Nitro API.
- Отдельный TypeScript worker для генерации миров и обработки игровых раундов.
- Supabase: PostgreSQL, Auth, Row Level Security и Realtime.
- BullMQ + managed Redis для очереди AIзадач.
- Railway: отдельные deployments для Nuxt/Nitro и worker.
- OpenRouter provider adapter с моделью `deepseek/deepseek-v4-flash`.
- Zod для общей валидации API, AIответов и игровых команд.
- Vitest, Nuxt Test Utils и Playwright для тестов.
Desktopверсия позднее создаётся через Tauri и использует тот же API и webинтерфейс.
### Основные сущности и интерфейсы
- `User`, `Invite`, `World`, `WorldEntity`, `Campaign`, `CampaignMember`.
- `Character`, `CharacterController`, `Relationship`.
- `Round`, `PlayerIntent`, `GameEvent`, `DiceRoll`.
- `SceneState`, `QuestState`, `Memory`, `StorySummary`.
- `AiJob`, `AiUsage`, `AuditEntry`.
Публичные серверные операции:
- создание и редактирование мира через coauthor session;
- подтверждение сгенерированного мира;
- создание кампании и приглашение участника;
- создание/назначение персонажа;
- отправка или изменение действия текущего раунда;
- отметка игрока как готового;
- принудительное закрытие раунда владельцем;
- получение истории, состояния персонажа и активной сцены;
- ручная корректировка состояния владельцем.
### Обработка раунда
1. Nitro сохраняет `PlayerIntent` и готовность игрока.
2. Транзакция блокирует раунд и создаёт ровно одну задачу после выполнения условия закрытия.
3. Worker собирает минимальный контекст.
4. AI определяет намерения, нужные проверки и действия AIгероев через типизированные tool calls.
5. Rules engine выполняет все броски и изменения механического состояния.
6. Результаты возвращаются AI для финальной narration.
7. Предложенные события и изменения проходят Zodвалидацию и проверку разрешённых переходов.
8. Narration, события, память и новое состояние сохраняются атомарно.
9. Supabase Realtime обновляет интерфейсы участников.
При timeout или ошибке OpenRouter задача повторяется с idempotency key. После исчерпания повторов раунд остаётся открываемым повторно владельцем; частичные изменения не сохраняются. OpenRouter поддерживает tool calling и JSON Schema outputs, которые следует использовать для типизированных AIопераций. [Tool calling](https://openrouter.ai/docs/guides/features/tool-calling), [structured outputs](https://openrouter.ai/docs/guides/features/structured-outputs).
## 4. Дорожная карта на 810 недель
### Недели 12 — фундамент
- Monorepo, Nuxt/Nitro, worker, CI и окружения.
- Supabase Auth, allowlist, RLS и базовая схема данных.
- Англоязычный UI: login, dashboard, world list.
- OpenRouter adapter, учёт токенов, дневные квоты и безопасное хранение ключа.
- Первый вертикальный тест: действие игрока → worker → ответ AI.
### Недели 34 — вселенные и персонажи
- Coauthor chat и структурированная генерация стартового набора.
- Preview/edit/confirm для мира.
- Создание кампании и персонажей.
- Приглашения, lobby, роли owner/player и AIгерои.
- 13+ фильтрация входных prompts и выходов модели.
### Недели 56 — игровой цикл
- Раунды, готовность участников и принудительное продолжение владельцем.
- Realtimeобновления.
- Rules engine и журнал бросков.
- AIDM orchestration, AIгерои и временная замена отсутствующих игроков.
- Защита от двойной обработки и конфликтующих действий.
### Недели 78 — память и стабильность
- Game events, relationships, memories и story summaries.
- Контекстный retrieval без векторной базы: сущности, локации, теги и PostgreSQL fulltext search.
- Retry, rate limits, usage dashboard и аудит изменений.
- E2Eсценарий полной партии и набор AIрегрессионных тестов.
### Недели 910 — закрытая альфа
- UXполировка, responsive web и onboarding.
- Наблюдаемость: ошибки, latency, стоимость раунда, размер контекста.
- Тестирование командой и приглашёнными пользователями.
- Исправление критических проблем и подготовка формы обратной связи.
## 5. Проверка и критерии приёмки
Обязательные сценарии:
- Создать fantasy, scifi и horrorмиры через coauthor chat.
- Отклонить или исправить неполную/невалидную AIструктуру.
- Два пользователя вступают в одну кампанию и видят одинаковое состояние.
- Раунд ждёт всех активных людей.
- Владелец продолжает без отсутствующего игрока, после чего его персонажа корректно подхватывает AI.
- Постоянный AIгерой сохраняет характер и отношения между сценами.
- Броски воспроизводимо отображают формулу, модификатор и итог.
- LLM не может напрямую изменить HP, инвентарь или результат броска.
- Повторный запрос, reconnect или retry не создаёт второй narration.
- OpenRouter timeout не повреждает состояние кампании.
- Пользователь не видит чужие приватные миры и кампании.
- 13+ фильтр блокирует запрещённый explicitконтент.
- После 1520 раундов AI корректно вспоминает ключевое событие из начала игры.
- Средняя стоимость и задержка раунда укладываются в установленные перед альфой квоты.
Перед приглашением внешних тестеров провести минимум 20 сценарных AIпрогонов с заранее ожидаемыми фактами, правилами и последствиями.
## 6. Зафиксированные ограничения
- Название `Dungeons & Ground` считается финальным, но перед публичным релизом обязательны проверка товарных знаков, домена и визуального сходства.
- Первая версия: web, English-first, invite-only, private worlds.
- Контент: 13+, без explicitматериалов.
- OpenRouter оплачивает проект; пользователи не вводят собственные ключи.
- Оплаты нет — используются дневные, пользовательские и кампанийные лимиты.
- MVP полностью текстовый.
- Не входят: публичный каталог, marketplace, карты, изображения, TTS, видеогенерация, полноценный 5e combat, нативный desktop/mobile и пользовательские ruleset.
- После альфы приоритет определяется метриками: удержание кампаний, завершённые раунды, стоимость AIхода, частота ручных исправлений и качество памяти.