Initial commit: VoIdeaAI - voice-first AI idea assistant

This commit is contained in:
2026-05-13 12:51:42 +03:00
commit 688d043dad
421 changed files with 47915 additions and 0 deletions
+357
View File
@@ -0,0 +1,357 @@
# Rules & Conventions
Конституция проекта. Применяется ко всем компонентам.
Если в специфичном компоненте нет явного описания ситуации — решение принимается по этим правилам.
Если сомневаешься — спроси.
---
## 1. Code Style Standards
**Python (PEP8 + ruff):**
- Кодировка UTF-8, отступы 4 пробела
- Максимальная длина строки: 88 символов (ruff format)
- Именование: переменные/функции — snake_case, классы — PascalCase, константы — UPPER_SNAKE_CASE
- Аннотации типов — обязательны для аргументов и возвращаемых значений всех функций
- Строки: двойные кавычки " для данных, одинарные ' для docstrings
- Импорты: stdlib → third-party → local (алфавитный порядок внутри групп). Абсолютные импорты, относительные запрещены
- Типизация: `from __future__ import annotations` во всех файлах, `X | None` вместо `Optional[X]`
- Пробелы: вокруг операторов, не внутри скобок
**SQL:**
- Ключевые слова — UPPERCASE (SELECT, FROM, WHERE)
- Имена таблиц и полей — snake_case
- Сложные запросы разбивать на строки, выравнивать JOIN и WHERE
**Оптимальный размер файла:**
- Маршруты/контроллеры: не более 500 строк → разбить на модули
- Модели: не более 200 строк
- Сервисы: не более 300 строк
**TypeScript/React:**
- Formatter: Prettier (100 символов)
- Типы: strict TypeScript, any запрещён
- Импорты: абсолютные через @/ alias
- Стили: Tailwind CSS
- Состояние: Zustand (новые сториджи) или Context API (legacy)
- Формы: react-hook-form + zod (сложные), нативный form (простые)
- Асинхронность: async/await
- Доступность: WCAG AA (eslint-plugin-jsx-a11y enforcement)
- i18n-ready: строки через constants/strings.ts, рендер через <T>
**ESLint (React/TypeScript):**
- Плагины: @eslint/js + typescript-eslint + eslint-plugin-jsx-a11y
- Парсер: @typescript-eslint/parser (flat config)
- Ключевые правила:
- `@typescript-eslint/no-explicit-any`: error
- `@typescript-eslint/strict-boolean-expressions`: error
- `@typescript-eslint/no-unused-vars`: error (кроме `_`)
- `jsx-a11y/alt-text`: error
- `jsx-a11y/aria-props`: error
- `jsx-a11y/aria-role`: error
- `jsx-a11y/label-has-associated-control`: error
- `jsx-a11y/click-events-have-key-events`: error
- `no-console`: error (кроме warn, error)
- `prefer-const`: error
- `no-var`: error
- Установка: `npm install -D eslint @eslint/js typescript-eslint eslint-plugin-jsx-a11y`
- Запуск: `npx eslint src/` (в CI после npm install)
**Testing (Vitest):**
- Фреймворк: Vitest + @testing-library/react
- Имена файлов: `*.test.ts` / `*.test.tsx` рядом с модулем
- Smoke: каждая страница рендерится без падения
- Store: каждый action тестируется
- JSON-репортёр: `vitest run --reporter=json` (для QATesterAgent)
- Установка: `npm install -D vitest @testing-library/react @testing-library/jest-dom jsdom`
- Запуск: `npx vitest run` (в CI после npm ci)
---
## 2. Documentation
- Docstrings: Google-style для всех публичных классов, функций, методов
- TODO/FIXME: с указанием причины. `# TODO(#TASK): причина`
- Предупреждения о рисках: если код затрагивает безопасность, производительность или совместимость
- README.md: в каждой папке с кодом — краткое описание
---
## 3. Naming Conventions
**Переменные окружения:**
```
PROJECT_NAME=
PROJECT_VERSION=X.Y.Z
PROJECT_ENV=local|development|staging|production
SERVER_HOST=X.X.X.X
SERVER_PORT=8020
DATABASE_URL=...
JWT_SECRET_KEY=
```
**Индексы БД:**
```
ix_tablename_column
uq_tablename_column
fk_tablename_column
```
**Ветки Git:**
```
main → стабильная, продакшен
develop → интеграция фич
feature/* → новая функция
hotfix/* → срочное исправление
release/* → подготовка релиза
```
**Миграции БД:**
```
{action}_{table}
```
---
## 4. Git & Versioning
### 4.1 Формат
SemVer: MAJOR.MINOR.PATCH
### 4.2 CHANGELOG
```
CHANGELOG/
├── v1.0.md # 1.0.0 → 1.0.n (патчи дописываются)
├── v1.1.md # 1.1.0 → 1.1.n
└── v2.0.md # 2.0.0 → ...
```
### 4.3 Conventional Commits
```
<тип>[optional scope]: <описание>
feat: → новая функция → MINOR
fix: → исправление → PATCH
BREAKING: → несовместимость → MAJOR
docs: → документация
refactor: → рефакторинг
test: → тесты
chore: → обслуживание
```
### 4.4 Agent Versioning (если используются агенты)
Агенты версионируются независимо по A.B.C.
- **A (major)**: breaking change в публичном интерфейсе
- **B (minor)**: новая capability
- **C (patch)**: внутренние правки, авто-бамп по checksum
Changelog агентов: `CHANGELOG/agents/<name>.md`
---
## 5. Code Review
- Обязателен для всех PR в main и develop
- Минимум 1 апрув от admin/owner
- [ASK]: кто апрувит в текущем проекте?
Чеклист ревью:
- [ ] Нет секретов в коде
- [ ] Нет сырых Exception в API ответах
- [ ] Есть тесты (или TODO с причиной)
- [ ] Документация обновлена
- [ ] ADR создан при архитектурных изменениях
- [ ] CHANGELOG обновлён
---
## 6. Definition of Done (DoD)
- [ ] Код написан (соответствует стилю §1)
- [ ] Линт проходит (ruff — 0 errors)
- [ ] Тесты написаны (минимум 1 smoke)
- [ ] Тесты проходят (pytest — green)
- [ ] Документация обновлена
- [ ] .env.example обновлён (если новая переменная)
- [ ] Миграция написана (если менялась БД)
- [ ] CHANGELOG обновлён
---
## 7. Architecture (SOLID + слоистая)
**Слои (зависимости только внутрь):**
```
API → Services → Integrations → Data → Core
```
**SOLID:**
- S: каждый модуль — одна доменная область
- O: новые интеграции — новые классы
- L: сервисы подчиняются общему интерфейсу
- I: сервис принимает только нужные зависимости
- D: API зависит от абстракции Service
---
## 8. Error Handling
| Слой | Действие |
|------|---------|
| API | HTTPException с detail и status_code |
| Services | Бизнес-исключения без HTTP-статусов |
| Integrations | try/except с fallback |
| DB | Ошибки БД не всплывают выше |
---
## 9. Security Base
- .env — всегда в .gitignore
- JWT: алгоритм HS256, expire = 60 минут, refresh = 30 дней
- Пароли: bcrypt через passlib
- Pydantic валидация на всех входах
- RBAC: роли user, admin
---
## 10. Logging Standards
**Формат строки лога:**
```
[ISO8601] [LEVEL] [component] message key=val
2026-05-10T14:30:00.000Z INFO [auth] User logged in user_id=abc
```
**Уровни по слоям:**
| Слой | DEBUG | INFO | WARNING | ERROR |
|------|-------|------|---------|-------|
| API | Параметры | Request | — | 5xx |
| Service | Входные | Операция | Превышен лимит | Ошибка БД |
| Integration | Raw ответ | Успех | Timeout | Внешний API |
**Запрещено:** f-строки в logger. Только %s (lazy evaluation).
---
## 11. Sensitive Data Policy
**Никогда не логировать:**
- Пароли (даже хэш)
- JWT токены
- API keys и секреты
- Email в открытом виде
**Маскировать в логах:**
- Email: u***@mail.ru
- IP: 195.208.*.*
---
## 12. Third-party Call Fallback Pattern
```
1. Попытка (timeout: 10s)
2. Успех → return data
3. Таймаут → retry 1 (через 2s)
4. Таймаут → retry 2 (через 5s)
5. 4xx → WARNING, return None/fallback
6. 5xx → ERROR, retry → если снова 5xx → return None/fallback
7. Все retry исчерпаны → return fallback результат
```
---
## 13. Performance Budgets (примерные)
| Метрика | Лимит (p95) |
|---------|-------------|
| API response | < 500ms |
| DB query (одиночный) | < 100ms |
| DB query (агрегатный) | < 300ms |
| AI call | < 5s (иначе fallback) |
| WebUI page load | < 2s |
---
## 14. Data Retention Policy (примерная)
| Данные | Срок хранения |
|--------|---------------|
| SystemLog | 90 дней |
| SecurityEvent | 1 год |
| User data | До удаления + 30 дней |
| Session (JWT) | 24 часа |
---
## 15. Dependency Management
- **patch**: в любой момент (bugfix, security)
- **minor**: не чаще 1 раза в спринт
- **major**: только с полным регрессом
---
## 16. Async/Sync Decision Matrix
| Сценарий | Механизм |
|----------|----------|
| GET-запросы, CRUD | sync (await) |
| Отправка email | async (Celery или прямой) |
| AI вызовы | async (Celery или прямой) |
| Бэкапы | async (Celery) |
---
## 17. ADR (Architecture Decision Records)
Любое значимое архитектурное решение фиксируется в `docs/adr/NNN-title.md`.
Формат:
```markdown
# ADR-NNN: Название решения
Статус: принято
Контекст: описание проблемы
Решение: что выбрано
Последствия: плюсы и минусы
```
---
## 18. Tooling
| Инструмент | Назначение |
|------------|------------|
| ruff | Линтер (E, F, W, I, N, UP) |
| ruff format | Форматтер (line-length=88) |
| mypy | Type checker |
| pytest | Тесты (asyncio_mode=auto) |
| pre-commit | Хуки (ruff, ruff-format, trailing-whitespace) |
---
## 19. API Version Lifecycle
```
Текущая: /api/v1/* — стабильная
Deprecation: 3 месяца после выхода новой версии
Отключение: 410 Gone
```
---
## 20. Module Public API Convention
`__init__.py` содержит ТОЛЬКО публичный API модуля:
```python
from app.models.user import User
__all__ = ["User"]
```
---
*Документ создан на основе шаблона. Адаптируйте под конкретный проект.*