# Воркспейс `dnd_project` (корень: `cursorAi`) Этот каталог — **единая точка входа** в Cursor для всей экосистемы DNDGamePlayer: общие правила, агенты, пайплайн и чеклисты лежат в **`.cursor/`** здесь, а не в отдельных репозиториях. **Обзор продукта и карта репозиториев для агентов:** **`AGENTS.md`** (читать в начале сессии). Родительская папка на диске: **`D:\Work\my_projects\dnd_project`** (рядом с `cursorAi` лежат остальные репозитории). Каталог **`dnd_player/.cursor`** на Windows — это **junction** (символическая связь каталога) на **`cursorAi/.cursor`**: один источник правил и хуков, без дублирования. Клонировать репозитории лучше в соседние папки с тем же относительным расположением; после клона только `dnd_player` junction нужно создать заново (или держать `.cursor` только в `cursorAi` и не коммитить его в `dnd_player`). --- ## Репозитории | Каталог | Репозиторий | Назначение | |---------|-------------|------------| | **`cursorAi`** | воркспейс Cursor | Документация (этот файл), единые настройки `.cursor/`. Отдельного приложения нет. | | **`../dnd_player`** | DNDGamePlayer | Electron: редактор и проигрыватель игр (React, Pixi.js, `.dnd.zip`, лицензирование). **Основной** код и полный CI-набор: `lint`, `typecheck`, `test`, `build`. | | **`../project-converter`** | dnd-project-converter | Утилита: конвертация `.dnd.zip`, добавление превью сцен (WebP). Свой `package.json`, отдельный Electron-пакет. | | **`../DndGamePlayerLicenseServer`** | dndgameplayer-license-server | HTTP-сервис лицензий (Ed25519, активация, отзыв). Node ≥20, без npm-зависимостей в манифесте. | Связь клиента и сервера лицензий описана в README сервера и в коде плеера (`bundledPublicKey` и переменные окружения). --- ## Сборка и проверки - **`dnd_player`**: из каталога репозитория — `npm install`, `npm run dev`, `npm run build`, `npm run lint`, `npm run typecheck`, `npm run test`. - **`project-converter`**: отдельного `build` нет; `npm install`, `npm run dev`. Синтаксис: `node --check` по файлам в `src/`. **`npm run test`** — обязателен после появления скрипта `test` (**вариант A**, см. **`project.mdc`**). - **`DndGamePlayerLicenseServer`**: `npm start` (или `node src/server.mjs`); `node --check` для `src/` и `lib/`. **`npm run test`** — обязателен после появления скрипта `test` (**вариант A**). Хук **`stop`** (`.cursor/hooks/final-verify.cjs`): читает **`.cursor/pipeline-state.json`**. Если **`verify_repo`** = **`none`** (правки только в **`cursorAi`**), хук **сразу** завершается успехом. Иначе при четырёх **`done`** пайплайна запускает проверки **целевого** репо: **`dnd_player`** — `lint` / `typecheck` / `test`; **`project-converter`** — `npm run lint`, `node --check` по `src/`, обязательный **`npm run test`** (скрипт `test` должен быть в `package.json`); **`DndGamePlayerLicenseServer`** — `node --check` по `src/` и `lib/`, обязательный **`npm run test`**. Переопределение репо для хука: **`VERIFY_REPO`**; корень соседних репозиториев: **`DND_PROJECT_ROOT`**; для плеера: **`DND_PLAYER_ROOT`**. --- ## Пайплайн и правила - Правила агента по умолчанию: **`.cursor/rules/project.mdc`**, порядок этапов: **`agents-pipeline-order.mdc`**, стандарты: **`frontend-agent-core.mdc`**, **`frontend-development-standards.mdc`**, гейты: **`agent-test-gates-mandatory.mdc`**. - Пошаговый сценарий с под-агентами: **`.cursor/skills/feature-pipeline/SKILL.md`**. - Под-агенты: **`.cursor/agents/`** (`frontend-developer`, `ui-test-developer`, `code-reviewer`, `ui-tester`). - PR-чеклисты: **`.cursor/pr-checklists/`** (пути к файлам в чеклистах заданы относительно репозитория **`dnd_player/`**). Для **`project-converter`** и **`DndGamePlayerLicenseServer`** действуют те же требования пайплайна и гейтов, что и для **`dnd_player`** (см. **`project.mdc`**, **`agents-pipeline-order.mdc`**). **Политика тестов — вариант A:** любое изменение поведения в **том же PR** добавляет/обновляет **`npm test`** и сами тесты; откладывать на отдельный эпик нельзя. Запуск проверок из **`dnd_player`** при задаче только в другом репо **не заменяет** verify целевого репозитория. --- ## Multi-root в Cursor (по желанию) Чтобы видеть все папки в одном окне, можно добавить в файл `*.code-workspace` блок `folders` с путями к `cursorAi`, `dnd_player`, `project-converter`, `DndGamePlayerLicenseServer`. Корнем с правилами остаётся папка, где лежит актуальный **`.cursor/`** (рекомендуется **`cursorAi`**).