test-fix
Some checks failed
Deploy / deploy (push) Has been skipped
CI / test (push) Successful in 6m50s
CI / lint (push) Failing after 1m5s

This commit is contained in:
2025-08-12 15:59:51 +03:00
parent 4a174bd2cb
commit a44bf3302b
13 changed files with 751 additions and 142 deletions

3
.cursor/mcp.json Normal file
View File

@@ -0,0 +1,3 @@
{
"mcpServers": {}
}

View 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
- **Язык**: Русский для общения, английский для кода
- **Уровень**: Экспертный, без "разжевывания"
- **Формат**: Конкретные решения, не абстракции

View 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

View 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