diff --git a/AGENTS.md b/AGENTS.md index 8c18b1e..01daecd 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -24,66 +24,40 @@ ## Правила кода -### Svelte 5: типизация props через `interface Props` +Синтаксические ограничения описывать не нужно — они проверяются линтером +(весь список правил и токены-префиксы в `web/eslint-plugins/README.md`, +прогон: `pnpm --dir web lint` / `pnpm --dir web lint:all`). Здесь — только то, +что линтер не умеет. -Все типизированные пропсы компонентов описываются через локальный -`interface Props`, а деструктуризация идёт через аннотацию типа при `$props()`: +### Svelte 5 -```svelte - -``` +Новая константа или тип не заводится, пока не произведён поиск существующего +определения (по ключу в соседних модулях и по всему `web/src/`). Это правило +в первую очередь для ИИ-агентов: дублирующее определение ухудшает правки в +нескольких местах и запутывает. (Синтаксис самих определений — под линтером: +строка `conventions/no-string-union-alias` и т.д.) -Не использовать инлайн-дженерик `$props<{ ... }>()` — он тяжело читается и -разносит тип и деструктуризацию по разным местам. Также **не использовать -инлайн-импорты в типах** (`children?: import('svelte').Snippet;`) — все -`import type` поднимаются наверх файла. +### Дизайн -> Правило «всегда `interface Props` + `let {...}: Props = $props()`» стандартным -> ESLint-правилом не покрывается — остаётся конвенцией. - -### Дизайн: новый визуальный язык - -Описание дизайна — в `docs/plan-redesign.md`. Общие правила: +Описание нового визуального языка — в `docs/plan-redesign.md`. Общие правила, +которые линтер не проверяет: - Новый дизайн живёт в `web/src/app.css` (корневые маршруты), старый — в `web/src/app_v1.css` (маршруты `/v1/*`). - Все повторяющиеся визуальные элементы — отдельные компоненты в `web/src/lib/components/`, даже «просто div с двумя стилями». - -### Линтинг дизайн-токенов - -Запрещено «захардкоживать» дизайн: цвета, размеры, длительности и z-index -обязаны приходить из CSS-переменных. Прогон: `pnpm --dir web lint:all`. - -- **Цвета**: только `hct(...)` в `app.css`, seed-токены - (`--brand-main`/`--brand-alt`) и `color-mix(...)` — исключения. - `oklch()/rgb()/#hex` в `--color-*` запрещены. -- **Размеры**: `--space-*`, `--text-*`, `--radius-*`, `--size-*`. -- **Breakpoints**: `@custom-media --bp-*` (объявления в `app.css`, используются - как `@media (--bp-*)`). -- **z-index**: `--z-*`; **длительности**: `--duration-*`, `--ease-*`. -- В `