chore: drop tracked .cursor; use sibling cursorAi repo (local junction)

Made-with: Cursor
This commit is contained in:
Ivan Fontosh
2026-04-24 07:37:16 +08:00
parent c9cad4dafd
commit 36776f4c5d
11 changed files with 3 additions and 416 deletions
-35
View File
@@ -1,35 +0,0 @@
---
name: frontend-senior
description: Senior frontend engineer
model: auto
tools: all
---
Ты senior frontend engineer.
Задача:
- реализовать feature или fix
- писать production-quality React + TypeScript код
Правила:
- сначала изучи nearby components
- следуй существующим patterns
- не делай лишних изменений
- избегай overengineering
- используй composition
UI:
- учитывай loading / error / empty / disabled
- соблюдай accessibility
Не делай:
- large refactors без запроса
- новые dependencies без причины
Output:
- список изменённых файлов
- краткое описание изменений
-33
View File
@@ -1,33 +0,0 @@
---
name: reviewer
description: Strict code reviewer
model: auto
tools: all
---
Ты строгий reviewer.
Цель:
- найти проблемы в изменениях
Проверяй:
- correctness
- regressions
- type safety
- accessibility
- performance
- edge cases
- missing tests
Формат:
- Severity: high / medium / low
- Problem
- Why
- Fix
Правила:
- не переписывай код без причины
- предлагай minimal fixes
-36
View File
@@ -1,36 +0,0 @@
---
name: unit-tests
description: Unit test specialist
model: auto
tools: all
---
Ты unit-test specialist.
Задача:
- добавить/обновить tests
- добиться green status
Подход:
- test behavior, not implementation
- follow existing patterns
- избегай flaky tests
Покрытие:
- happy path
- edge case
- error case
Workflow:
- сначала run relevant tests:
`npm run test -- <file>`
- затем при необходимости весь suite
Output:
- какие тесты добавлены
- что они проверяют
-10
View File
@@ -1,10 +0,0 @@
{
"version": 1,
"hooks": {
"stop": [
{
"command": "node .cursor/hooks/final-verify.cjs"
}
]
}
}
-55
View File
@@ -1,55 +0,0 @@
const fs = require("fs");
const path = require("path");
const { execSync } = require("child_process");
const statePath = path.join(process.cwd(), ".cursor", "pipeline-state.json");
function readState() {
if (!fs.existsSync(statePath)) {
return {
implementation: "pending",
review: "pending",
tests: "pending"
};
}
return JSON.parse(fs.readFileSync(statePath, "utf8"));
}
function fail(msg) {
process.stdout.write(JSON.stringify({ followup_message: msg }));
process.exit(0);
}
const state = readState();
if (state.implementation !== "done") {
fail("Run frontend-senior stage");
}
if (state.review !== "done") {
fail("Run reviewer stage");
}
if (state.tests !== "done") {
fail("Run unit-tests stage");
}
try {
execSync("npm run lint", { stdio: "pipe" });
} catch {
fail("Lint failed");
}
try {
execSync("npm run typecheck", { stdio: "pipe" });
} catch {
fail("Typecheck failed");
}
try {
execSync("npm run test", { stdio: "pipe" });
} catch {
fail("Tests failed");
}
process.exit(0);
-10
View File
@@ -1,10 +0,0 @@
{
"version": 1,
"hooks": {
"stop": [
{
"command": "node .cursor/hooks/final-verify.cjs"
}
]
}
}
-6
View File
@@ -1,6 +0,0 @@
{
"implementation": "done",
"review": "done",
"tests": "done",
"verify": "done"
}
-112
View File
@@ -1,112 +0,0 @@
# PR: UI — выравнивание под макеты (редактор + пульт)
Связь с **feature-pipeline** (`.cursor/skills/feature-pipeline/SKILL.md`): критерии ниже сгруппированы по стадиям; после merge обновляют `.cursor/pipeline-state.json` по мере прохождения стадий.
---
## Мета PR
| Поле | Значение |
|------|----------|
| **Цель** | Визуальная и UX-полировка существующих экранов без новых продуктовых фич из макета |
| **Область** | `EditorApp`, `SceneGraph`, `ControlApp`, общие токены/мелкие UI-баги |
| **Вне скоупа** | Новые пункты меню, новые типы сцен, новые каналы микшера, если их нет в коде |
---
## Stage 1 — Implementation (subagent: `frontend-senior`)
### Чеклист PR
- [ ] **P0-A** Карточка узла графа: статусы «Авто / Цикл / Аудио» отражают **реальные** поля сцены (`previewVideoAutostart`, `settings.loopVideo`, наличие `media.audios`), а не статичный текст.
- [ ] **P0-B** Пульт: для сцены с видео-превью явно подписано, что **кисть эффектов** недоступна (согласовано с `PresentationView`: эффекты только для image).
- [ ] **P1-A** Пульт: порядок секций **Предпросмотр → Варианты ветвления → Музыка сцены → Быстрый микшер** (вертикальный поток как в референсе).
- [ ] **P1-B** Сетка «Варианты ветвления» без «дыр»: `repeat(auto-fit, minmax(...))` **или** фиксированные слоты с disabled/placeholder **без новых сценариев** — только визуальная сетка.
- [ ] **P2-A** Редактор: меню «Файл» — цвет текста пункта на валидном токене (`--text0` / `--text1`), без несуществующего `--text`.
- [ ] **P2-B** Список сцен: убрать пустой статус-ряд у неактивных карточек (без лишнего вертикального зазора).
### Критерии приёмки (Stage 1)
1. На графе для сцены **без видео-превью** не отображаются вводящие в заблуждение чипы «Авто/Цикл» видео-превью; при наличии аудио — корректный индикатор аудио.
2. Для сцены с **видео-превью** чипы «Авто»/«Цикл» совпадают с `previewVideoAutostart` и `scene.settings.loopVideo`.
3. В пульте при `previewAssetType === 'video'` пользователь видит **одну строку-пояснение** (вторичный текст), почему нет панели эффектов.
4. Визуальный порядок блоков пульта соответствует чеклисту P1-A; отступы между `Surface` единообразны (`gap` 16).
5. Нет регрессий drag-and-drop сцен на граф и переключения веток.
**Definition of Done (Stage 1):** все пункты чеклиста Stage 1 отмечены; `npm run build` успешен.
---
## Stage 2 — Review (subagent: `reviewer`)
### Чеклист PR
- [ ] Нет «мёртвых» веток UI и ложных состояний (чипы/подписи соответствуют данным).
- [ ] a11y: фокус/клавиатура на интерактивах не сломаны; `aria-*` не ухудшены.
- [ ] Нет лишнего diff вне файлов задачи.
### Критерии приёмки (Stage 2)
1. Reviewer фиксирует замечания с **Severity**; все **high** устранены или явно отклонены с причиной в PR.
2. После правок по review снова выполняется `npm run build`.
**Definition of Done (Stage 2):** review-замечания закрыты; state `review: done`.
---
## Stage 3 — Tests (subagent: `unit-tests`)
### Чеклист PR
- [ ] Добавлены или обновлены тесты на **чистую логику** (например, хелпер разметки чипов по `Scene`, если вынесен в `app/shared`).
- [ ] Либо задокументировано в PR, что изменения только презентационные и покрыты smoke-тестом пайплайна.
### Критерии приёмки (Stage 3)
1. `npm run test` завершается с кодом 0.
2. Новые тесты не flaky, не зависят от Electron UI.
**Definition of Done (Stage 3):** `tests: done` в `.cursor/pipeline-state.json`.
---
## Stage 4 — Verify (локально / hook `final-verify.cjs`)
Выполнить подряд:
```bash
npm run lint
npm run typecheck
npm run test
```
**Если `npm run lint` падает на массовых `Delete ␍` (CRLF/LF) в файлах вне PR** — до отдельного chore-PR с нормализацией строк для этого чеклиста достаточно:
```bash
npx eslint app/renderer/control/ControlApp.tsx app/renderer/editor/graph/SceneGraph.tsx app/renderer/shared/ui/sceneGraphChips.ts app/renderer/shared/ui/sceneGraphChips.test.ts --max-warnings 0
npm run typecheck
npm run test
npm run build
```
### Критерии приёмки (Stage 4)
1. `npm run typecheck`, `npm run test`, `npm run build`**exit 0**.
2. Линт: либо полный `npm run lint`**exit 0**, либо (при известном eol-долге репозитория) scoped-ESLint по файлам PR — **exit 0**, как в блоке выше.
3. `node .cursor/hooks/final-verify.cjs` — успешное завершение пайплайна только когда полный `npm run lint` зелёный (хук вызывает полный lint; при падении lint хук пишет `followup_message` в stdout).
---
## Синхронизация с `.cursor/pipeline-state.json`
После каждой стадии обновлять файл:
```json
{
"implementation": "done",
"review": "done",
"tests": "done"
}
```
До начала работы — все `"pending"`.
-39
View File
@@ -1,39 +0,0 @@
---
description: Project-wide workflow and conventions
alwaysApply: true
---
# DNDGamePlayer — правила работы над задачами (future-pipeline)
Эти правила применяются **только** когда запрос пользователя требует **изменений в репозитории** (код/конфиги/тесты). Для чисто текстовых задач (описания, маркетинг, переписка) pipeline не запускаем.
## future-pipeline (обязательный порядок)
### 1) Implementation
- Прочитать релевантный код (минимум 1 файл), найти реальную причину бага/задачи.
- Делать **minimal, review-friendly diff** и следовать текущим паттернам проекта.
- Не добавлять зависимости без явной причины.
### 2) Review
- Самопроверка изменений: edge-cases, состояние UI (loading/error/empty/disabled), a11y, регрессии.
- Если задача нетривиальная: запустить внутренний “строгий ревью” (под-агент reviewer).
### 3) Tests
- Обновить/добавить тест(ы), если поведение изменилось или был баг.
- Для мелких правок допускается “облегчённый режим” без под-агентов, но тесты всё равно должны проходить.
### 4) Verify (всегда, перед ответом)
Обязательно выполнить:
- `npm run lint`
- `npm run typecheck`
- `npm run test`
Если что-то упало — исправить и повторить до green.
## Команды проекта (справка)
- install: `npm install`
- dev: `npm run dev`
- build: `npm run build`
- lint: `npm run lint`
- typecheck: `npm run typecheck`
- test: `npm run test`
-80
View File
@@ -1,80 +0,0 @@
---
name: feature-pipeline
description: Implementation → Review → Tests → Verify
---
# Workflow
## Stage 1 — Implementation
Используй subagent: frontend-senior
- реализуй задачу
- сделай minimal diff
Обнови state:
{
"implementation": "done"
}
---
## Stage 2 — Review
Используй subagent: reviewer
- проверь изменения
- найди проблемы
- исправь минимально
Обнови state:
{
"implementation": "done",
"review": "done"
}
---
## Stage 3 — Tests
Используй subagent: unit-tests
- добавь/обнови tests
- добейся green status
Обнови state:
{
"implementation": "done",
"review": "done",
"tests": "done"
}
---
## Stage 4 — Verify
Выполни:
- `npm run lint`
- `npm run typecheck`
- `npm run test`
Если ошибка:
- исправь
- повтори
---
## Final Output
- implementation summary
- review summary
- test summary
- verification status
## PR-чеклисты (приёмка по задаче)
Готовые чеклисты с критериями по стадиям лежат в `.cursor/pr-checklists/`. Для UI-выравнивания под макеты: `ui-mock-alignment.md`.
+3
View File
@@ -1,3 +1,6 @@
# Cursor: канонический `.cursor/` в репозитории cursorAi; локально — junction на ../cursorAi/.cursor
.cursor/
release/
build/
mcps/