193 lines
15 KiB
Markdown
193 lines
15 KiB
Markdown
# Dungeons & Ground — план закрытой web‑альфы
|
||
|
||
## 1. Цель продукта
|
||
|
||
Dungeons & Ground — англоязычная веб‑платформа для текстовых TTRPG‑кампаний любого жанра, где:
|
||
|
||
- AI‑соавтор помогает за несколько сообщений создать собственную вселенную.
|
||
- AI Game Master ведёт историю, NPC и последствия.
|
||
- Реальные игроки участвуют асинхронно в общем пошаговом чате.
|
||
- Постоянные AI‑герои дополняют партию, а при необходимости временно заменяют отсутствующих игроков.
|
||
- Сервер, а не языковая модель, рассчитывает проверки, броски, HP и урон.
|
||
- Кампания сохраняет мир, отношения, инвентарь, события и долгосрочную память.
|
||
|
||
Главный критерий готовности альфы: 2–4 человека создают мир, персонажей и проходят минимум 20–30 минут связной кампании, причём 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 задаёт 3–5 уточняющих вопросов о жанре, атмосфере, конфликте и желаемой роли игроков.
|
||
4. Создаётся редактируемый стартовый набор:
|
||
- premise, genre, tone и content boundaries;
|
||
- стартовая локация;
|
||
- 3 значимых NPC;
|
||
- 2 фракции;
|
||
- сюжетная завязка;
|
||
- скрытая угроза или цель;
|
||
- начальная сцена.
|
||
5. Владелец подтверждает мир, создаёт кампанию и приглашает игроков ссылкой.
|
||
6. Каждый игрок создаёт персонажа вручную или с помощью AI.
|
||
7. Владелец добавляет постоянных AI‑героев и определяет, чьи персонажи могут временно переходить под управление AI.
|
||
8. Игроки отправляют действия в текущем раунде.
|
||
9. AI‑DM обрабатывает раунд, когда:
|
||
- ответили все активные реальные игроки; или
|
||
- владелец нажал `Continue without waiting`.
|
||
10. AI‑герои и замены совершают действия после людей, затем AI‑DM публикует единый результат раунда.
|
||
|
||
### Облегчённая игровая система
|
||
|
||
Использовать классические характеристики `STR`, `DEX`, `CON`, `INT`, `WIS`, `CHA` во всех жанрах, но позволять AI адаптировать названия архетипов, экипировки и способностей под fantasy, sci‑fi, 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. Дорожная карта на 8–10 недель
|
||
|
||
### Недели 1–2 — фундамент
|
||
|
||
- Monorepo, Nuxt/Nitro, worker, CI и окружения.
|
||
- Supabase Auth, allowlist, RLS и базовая схема данных.
|
||
- Англоязычный UI: login, dashboard, world list.
|
||
- OpenRouter adapter, учёт токенов, дневные квоты и безопасное хранение ключа.
|
||
- Первый вертикальный тест: действие игрока → worker → ответ AI.
|
||
|
||
### Недели 3–4 — вселенные и персонажи
|
||
|
||
- Coauthor chat и структурированная генерация стартового набора.
|
||
- Preview/edit/confirm для мира.
|
||
- Создание кампании и персонажей.
|
||
- Приглашения, lobby, роли owner/player и AI‑герои.
|
||
- 13+ фильтрация входных prompts и выходов модели.
|
||
|
||
### Недели 5–6 — игровой цикл
|
||
|
||
- Раунды, готовность участников и принудительное продолжение владельцем.
|
||
- Realtime‑обновления.
|
||
- Rules engine и журнал бросков.
|
||
- AI‑DM orchestration, AI‑герои и временная замена отсутствующих игроков.
|
||
- Защита от двойной обработки и конфликтующих действий.
|
||
|
||
### Недели 7–8 — память и стабильность
|
||
|
||
- Game events, relationships, memories и story summaries.
|
||
- Контекстный retrieval без векторной базы: сущности, локации, теги и PostgreSQL full‑text search.
|
||
- Retry, rate limits, usage dashboard и аудит изменений.
|
||
- E2E‑сценарий полной партии и набор AI‑регрессионных тестов.
|
||
|
||
### Недели 9–10 — закрытая альфа
|
||
|
||
- UX‑полировка, responsive web и onboarding.
|
||
- Наблюдаемость: ошибки, latency, стоимость раунда, размер контекста.
|
||
- Тестирование командой и приглашёнными пользователями.
|
||
- Исправление критических проблем и подготовка формы обратной связи.
|
||
|
||
## 5. Проверка и критерии приёмки
|
||
|
||
Обязательные сценарии:
|
||
|
||
- Создать fantasy, sci‑fi и horror‑миры через coauthor chat.
|
||
- Отклонить или исправить неполную/невалидную AI‑структуру.
|
||
- Два пользователя вступают в одну кампанию и видят одинаковое состояние.
|
||
- Раунд ждёт всех активных людей.
|
||
- Владелец продолжает без отсутствующего игрока, после чего его персонажа корректно подхватывает AI.
|
||
- Постоянный AI‑герой сохраняет характер и отношения между сценами.
|
||
- Броски воспроизводимо отображают формулу, модификатор и итог.
|
||
- LLM не может напрямую изменить HP, инвентарь или результат броска.
|
||
- Повторный запрос, reconnect или retry не создаёт второй narration.
|
||
- OpenRouter timeout не повреждает состояние кампании.
|
||
- Пользователь не видит чужие приватные миры и кампании.
|
||
- 13+ фильтр блокирует запрещённый explicit‑контент.
|
||
- После 15–20 раундов 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‑хода, частота ручных исправлений и качество памяти.
|