chore: include ttrpg-player-landing in verify pipeline

Wire the landing repo into final-verify, project rules, and pipeline skill so stop-hook checks run for landing work.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Ivan Fontosh
2026-07-24 16:29:44 +08:00
parent ca9e7cbcc0
commit c959c26f5f
4 changed files with 21 additions and 8 deletions
+9 -1
View File
@@ -8,6 +8,7 @@ const REPO_IDS = new Set([
"dnd_player", "dnd_player",
"project-converter", "project-converter",
"DndGamePlayerLicenseServer", "DndGamePlayerLicenseServer",
"ttrpg-player-landing",
"none", "none",
]); ]);
@@ -53,6 +54,7 @@ function resolveRepoRoot(repoId, cwd) {
dnd_player: path.join(sibling, "dnd_player"), dnd_player: path.join(sibling, "dnd_player"),
"project-converter": path.join(sibling, "project-converter"), "project-converter": path.join(sibling, "project-converter"),
DndGamePlayerLicenseServer: path.join(sibling, "DndGamePlayerLicenseServer"), DndGamePlayerLicenseServer: path.join(sibling, "DndGamePlayerLicenseServer"),
"ttrpg-player-landing": path.join(sibling, "ttrpg-player-landing"),
}; };
if (repoId === "dnd_player" && process.env.DND_PLAYER_ROOT) { if (repoId === "dnd_player" && process.env.DND_PLAYER_ROOT) {
const r = path.resolve(process.env.DND_PLAYER_ROOT); const r = path.resolve(process.env.DND_PLAYER_ROOT);
@@ -75,6 +77,10 @@ function verifyDndPlayer(root) {
run("npm run test", opts); run("npm run test", opts);
} }
function verifyTtrpgPlayerLanding(root) {
verifyDndPlayer(root);
}
function verifyProjectConverter(root) { function verifyProjectConverter(root) {
const opts = { cwd: root }; const opts = { cwd: root };
const pkgPath = path.join(root, "package.json"); const pkgPath = path.join(root, "package.json");
@@ -154,7 +160,7 @@ const verifyRepo =
if (!REPO_IDS.has(verifyRepo)) { if (!REPO_IDS.has(verifyRepo)) {
fail( fail(
`Invalid verify_repo "${verifyRepo}". Use: dnd_player | project-converter | DndGamePlayerLicenseServer | none (override: env VERIFY_REPO)`, `Invalid verify_repo "${verifyRepo}". Use: dnd_player | project-converter | DndGamePlayerLicenseServer | ttrpg-player-landing | none (override: env VERIFY_REPO)`,
); );
} }
@@ -190,6 +196,8 @@ if (!root) {
try { try {
if (verifyRepo === "dnd_player") { if (verifyRepo === "dnd_player") {
verifyDndPlayer(root); verifyDndPlayer(root);
} else if (verifyRepo === "ttrpg-player-landing") {
verifyTtrpgPlayerLanding(root);
} else if (verifyRepo === "project-converter") { } else if (verifyRepo === "project-converter") {
verifyProjectConverter(root); verifyProjectConverter(root);
} else if (verifyRepo === "DndGamePlayerLicenseServer") { } else if (verifyRepo === "DndGamePlayerLicenseServer") {
+5 -5
View File
@@ -1,7 +1,7 @@
{ {
"frontend_development": "pending", "frontend_development": "done",
"ui_autotests": "pending", "ui_autotests": "done",
"code_review": "pending", "code_review": "done",
"ui_browser_verification": "pending", "ui_browser_verification": "done",
"verify_repo": "dnd_player" "verify_repo": "ttrpg-player-landing"
} }
+6 -1
View File
@@ -24,7 +24,7 @@ alwaysApply: true
**Не входит в обязательный пайплайн:** репозиторий **`cursorAi`** (только `.md` / `.mdc` правил и описаний). Для таких правок полный цикл из четырёх этапов **не требуется**; хук **`stop`**: **`verify_repo`: `none`**. **Не входит в обязательный пайплайн:** репозиторий **`cursorAi`** (только `.md` / `.mdc` правил и описаний). Для таких правок полный цикл из четырёх этапов **не требуется**; хук **`stop`**: **`verify_repo`: `none`**.
Последовательность для **`dnd_player`**, **`project-converter`**, **`DndGamePlayerLicenseServer`**: Последовательность для **`dnd_player`**, **`project-converter`**, **`DndGamePlayerLicenseServer`**, **`ttrpg-player-landing`**:
1. Реализация (minimal diff, паттерны **целевого** репозитория). 1. Реализация (minimal diff, паттерны **целевого** репозитория).
2. Автотесты на изменённое поведение (стек репозитория). 2. Автотесты на изменённое поведение (стек репозитория).
@@ -42,6 +42,7 @@ alwaysApply: true
| **`dnd_player`** | Задача по плееру (по умолчанию) | `npm run lint`, `typecheck`, `test` в **`dnd_player/`** | | **`dnd_player`** | Задача по плееру (по умолчанию) | `npm run lint`, `typecheck`, `test` в **`dnd_player/`** |
| **`project-converter`** | Задача по конвертеру | `npm run lint`, `node --check` по `src/`, обязательный **`npm run test`** (скрипт и тесты — по политике A в том же PR, что и правки поведения) | | **`project-converter`** | Задача по конвертеру | `npm run lint`, `node --check` по `src/`, обязательный **`npm run test`** (скрипт и тесты — по политике A в том же PR, что и правки поведения) |
| **`DndGamePlayerLicenseServer`** | Задача по серверу лицензий | `node --check` по `src/`, `lib/`, обязательный **`npm run test`** | | **`DndGamePlayerLicenseServer`** | Задача по серверу лицензий | `node --check` по `src/`, `lib/`, обязательный **`npm run test`** |
| **`ttrpg-player-landing`** | Задача по лендингу | `npm run lint`, `typecheck`, `test` в **`ttrpg-player-landing/`** |
| **`none`** | Только правки в **`cursorAi`** | Сразу **exit 0**, четыре ключа пайплайна **не проверяются** | | **`none`** | Только правки в **`cursorAi`** | Сразу **exit 0**, четыре ключа пайплайна **не проверяются** |
Переопределение без правки файла: переменная окружения **`VERIFY_REPO`** (те же значения). Корни соседних репо: родитель каталога `cursorAi` (см. **`WORKSPACE.md`**); для плеера дополнительно **`DND_PLAYER_ROOT`**; для всех соседей — **`DND_PROJECT_ROOT`** (абсолютный путь к папке `dnd_project`). Переопределение без правки файла: переменная окружения **`VERIFY_REPO`** (те же значения). Корни соседних репо: родитель каталога `cursorAi` (см. **`WORKSPACE.md`**); для плеера дополнительно **`DND_PLAYER_ROOT`**; для всех соседей — **`DND_PROJECT_ROOT`** (абсолютный путь к папке `dnd_project`).
@@ -66,6 +67,10 @@ alwaysApply: true
**`node --check`** по модулям, **`npm run test`** (обязателен — политика **вариант A**). Скрипт `start` для ручного запуска сервера не заменяет автотесты. **`node --check`** по модулям, **`npm run test`** (обязателен — политика **вариант A**). Скрипт `start` для ручного запуска сервера не заменяет автотесты.
### `ttrpg-player-landing`
`npm run lint`, `npm run typecheck`, `npm run test` из корня репозитория.
### `cursorAi` ### `cursorAi`
Обязательный 4-этапный пайплайн **не применяется**. Согласованность ссылок и имён файлов — по усмотрению задачи; для хука **`stop`** выставь **`verify_repo`: `none`**. Обязательный 4-этапный пайплайн **не применяется**. Согласованность ссылок и имён файлов — по усмотрению задачи; для хука **`stop`** выставь **`verify_repo`: `none`**.
+1 -1
View File
@@ -5,7 +5,7 @@ description: Dev → autotests → code review → scenario verify → repo veri
# Workflow # Workflow
Контекст: **`AGENTS.md`**, **`WORKSPACE.md`**. Целевой репозиторий задачи: **`dnd_player/`**, **`project-converter/`** или **`DndGamePlayerLicenseServer/`**. В **`pipeline-state.json`** задай **`verify_repo`** под хук **`stop`** (см. **`project.mdc`**); для правок только в **`cursorAi`** — **`verify_repo`: `none`** (пайплайн 4 этапов не обязателен). Контекст: **`AGENTS.md`**, **`WORKSPACE.md`**. Целевой репозиторий задачи: **`dnd_player/`**, **`project-converter/`**, **`DndGamePlayerLicenseServer/`** или **`ttrpg-player-landing/`**. В **`pipeline-state.json`** задай **`verify_repo`** под хук **`stop`** (см. **`project.mdc`**); для правок только в **`cursorAi`** — **`verify_repo`: `none`** (пайплайн 4 этапов не обязателен).
Порядок этапов: **`agents-pipeline-order.mdc`**, отчёт: **`pipeline-execution-template.mdc`**, чек-листы: **`.cursor/rules/agent-*.mdc`**. Порядок этапов: **`agents-pipeline-order.mdc`**, отчёт: **`pipeline-execution-template.mdc`**, чек-листы: **`.cursor/rules/agent-*.mdc`**.