test-fix
This commit is contained in:
3
.cursor/mcp.json
Normal file
3
.cursor/mcp.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"mcpServers": {}
|
||||
}
|
||||
40
.cursor/rules/01-core-principles.mdc
Normal file
40
.cursor/rules/01-core-principles.mdc
Normal file
@@ -0,0 +1,40 @@
|
||||
# .cursor/rules/core-principles.mdc
|
||||
---
|
||||
description: Fundamental development principles
|
||||
alwaysApply: true
|
||||
priority: 1
|
||||
---
|
||||
|
||||
# 🏗️ Core Development Principles
|
||||
|
||||
## 🏗️ Architecture Rules
|
||||
- **Single Responsibility**: Одна функция = одна ответственность
|
||||
- **Pure Functions**: Предсказуемые, тестируемые функции
|
||||
- **Composition > Inheritance**: Переиспользование через композицию
|
||||
- **Explicit > Implicit**: Явные зависимости и побочные эффекты
|
||||
|
||||
## 🎯 Philosophy
|
||||
- **KISS**: Максимальная простота - сложность = баги
|
||||
- **DRY**: Переиспользование > создание нового
|
||||
- **YAGNI**: Решаем текущие проблемы, не гадаем о будущих
|
||||
- **Fail Fast**: Ошибки должны быть видны сразу
|
||||
|
||||
## 🔍 Перед любой разработкой
|
||||
```bash
|
||||
1. grep_search по ключевым словам
|
||||
2. codebase_search по функциональности
|
||||
3. Изучить docs/ и существующие компоненты
|
||||
4. ТОЛЬКО потом создавать новое
|
||||
```
|
||||
|
||||
## 📊 Truth Sources
|
||||
- **Доверяй только тестам** - E2E, интеграционные, unit
|
||||
- **Измеряй, не гадай** - метрики > предположения
|
||||
- **Верифицируй утверждения** - 🤷 для недоказанного
|
||||
- **Rollback при регрессии** - новые ошибки = откат, помечай его 🚑
|
||||
|
||||
## 🎭 Communication Style
|
||||
- **Язык**: Русский для общения, английский для кода
|
||||
- **Уровень**: Экспертный, без "разжевывания"
|
||||
- **Формат**: Конкретные решения, не абстракции
|
||||
|
||||
57
.cursor/rules/02-rust-specific.mdc
Normal file
57
.cursor/rules/02-rust-specific.mdc
Normal file
@@ -0,0 +1,57 @@
|
||||
---
|
||||
Rule Name: 02-rust-specific
|
||||
Description: Rust-specific Cursor Rules
|
||||
---
|
||||
|
||||
Цель: гарантировать типобезопасный, асинхронно-корректный и наблюдаемый код, который сразу проходит тесты и деплой (см. 03-automated-pipeline).
|
||||
|
||||
### 🏷️ Типизация
|
||||
- Везде явные типы для публичных API и где это улучшает читаемость.
|
||||
- Используем `Option<T>`, `Result<T, E>`, `Vec<T>`, `HashMap<K, V>`. Избегать `dyn Any` — предпочесть `Box<dyn Trait>` или generics.
|
||||
- Константы — `UPPER_SNAKE_CASE` с `const` или `static` при необходимости.
|
||||
|
||||
### 🌀 AsyncIO (tokio)
|
||||
- Тесты в strict-режиме: никакого `std::thread::sleep` в async функциях.
|
||||
- `tokio::spawn` — только с явной жизненной стратегией (хранить JoinHandle, отменять, ждать). На shutdown — корректная отмена с таймаутом.
|
||||
- Любое I/O — с таймаутами (`tokio::time::timeout` или timeouts в клиентах).
|
||||
|
||||
### 🌐 HTTP (reqwest)
|
||||
- `reqwest::Client::new()` и проверка статуса; JSON — `resp.json::<T>().await`.
|
||||
- Логируем URL/провайдера/модель, но не ключи.
|
||||
|
||||
### 🧾 Ошибки
|
||||
- EAFP. Узкие `match` и `?` оператор. В логах `error!` на неожиданных исключениях.
|
||||
- Фолбэки — только если безопасны и явно задокументированы в логике.
|
||||
|
||||
### 🔎 Логирование
|
||||
- Только `tracing` или `log` (никаких `println!`). Короткие, осмысленные сообщения, текущая эмодзи-семантика.
|
||||
|
||||
### 📁 Файлы/ресурсы
|
||||
- `std::path::PathBuf` для новых путей; `std::fs::create_dir_all`.
|
||||
- Явные кодировки (`encoding_rs`). Очистка temp через `Drop` trait или `finally` блоки.
|
||||
|
||||
### 🧪 Тесты
|
||||
- Новая логика — новые тесты. Параметризация `rstest` по возможности.
|
||||
- Конфигурация: `#[cfg(test)]` модули + `mockall` для моков.
|
||||
|
||||
### 🧱 Моделирование данных
|
||||
- Новые стабильные формы — `struct` с derive макросами вместо «сырых» HashMap.
|
||||
- Сериализацию/десериализацию выносить на границы через `serde`, а не в доменную логику.
|
||||
|
||||
### ⚙️ Производительность и фоновые задачи
|
||||
- Батчи и кеши. Избегать N× сетевых вызовов в петлях.
|
||||
- Фоновые циклы — с бэк-офф и джиттером. Счётчики прогресса и периодический дамп.
|
||||
|
||||
### 🧹 Стиль
|
||||
- SRP, ранние возвраты, мелкие функции. Rust формат + `rustfmt` импорты.
|
||||
|
||||
### 🔒 Безопасность
|
||||
- Никогда не логировать секреты. Тримминг внешнего контента в логах.
|
||||
- Используем `secrecy` для чувствительных данных.
|
||||
|
||||
### 🪓 Упрощения по умолчанию
|
||||
- Отдаём приоритет простым решениям (фиксируем 🪓), но без компромисса по типам/тестам/async.
|
||||
|
||||
### 🧿 Эмодзи
|
||||
- 🏷️ typing • 🌀 asyncio • 🌐 http • 🔎 logs • 🧾 errors • 🧪 tests • 📁 fs • ⚙️ perf • 🔒 sec • 🧵 thread • 🪓 simplify • 🩵 resilience
|
||||
|
||||
23
.cursor/rules/03-automated-pipeline.mdc
Normal file
23
.cursor/rules/03-automated-pipeline.mdc
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
description:
|
||||
alwaysApply: true
|
||||
priority: 3
|
||||
---
|
||||
|
||||
Цель: упростить рабочий процесс до полностью автоматизированного конвейера «тесты → деплой».
|
||||
|
||||
### 🧭 Правила
|
||||
- Без сроков и метрик качества в статусах — только факт прохождения тестов и деплоя.
|
||||
- СТРОГО: Don't generate command lines to change or check files, use tools.
|
||||
- Любое изменение сопровождается обновлением документации (см. ниже).
|
||||
|
||||
### 📝 Обновление документации
|
||||
При каждом изменении:
|
||||
1. `CHANGELOG.md` — новая версия сверху
|
||||
2. `docs/README.md` — если изменена документация
|
||||
3. `features.md` — если добавлена/изменена функциональность
|
||||
4. `docs/progress/<timestamp>-<название>.md` — отчёт о прогрессе (без контроля версий, папка игнорируется gitignore)
|
||||
|
||||
### 🔖 Эмодзи-маркеры
|
||||
- 🧪 tests • 🚀 deploy • 🔄 pipeline • 📝 docs
|
||||
|
||||
Reference in New Issue
Block a user