Инициализировать репозиторий «Дейл»

Первый коммит: модульный монолит ядра (.NET 10) и gRPC-сервисы
ai/ml/telegram, фронтенд Vue 3/Vite/Tailwind, документация (ТЗ,
инструкция пользователя, техдокументация, код-стайл), бэклог,
скрипты развёртывания и архив прототипа LeadRadar.
This commit is contained in:
Rustam Khalimov
2026-09-11 02:50:17 +03:00
commit 9e07568ddd
1402 changed files with 177470 additions and 0 deletions
@@ -0,0 +1,50 @@
# Аудит кода на соответствие код-стайлу «Дейл» (2026-09-11)
> Отчёт прохода по всему C#-коду (`src/**/*.cs`, 928 файлов, без `bin/obj`).
> Правила — `docs/spec/Код-стайл-Дейл.md`. Проверка: сборка 4 решений + все тесты.
## 1. Исправлено (применено и проверено)
| Пункт | Правило | Было | Стало | Инструмент |
| --- | --- | --- | --- | --- |
| Блочный `<summary>` | §5 | 5286 однострочных/инлайн (833 файла) | 0 | `scripts/fix_summary_blocks.py --apply` |
| XML-док на private/internal | §5 | 2028 блоков (359 файлов) | 0 (понижены до `//`) | `scripts/fix_private_docs.py --apply` |
| Квалификация `this.` | §4 | 124 | **0** | разовый Roslyn-инструмент (семантический) |
| Приватные instance-поля | §1 | camelCase (`logger`) | `_camelCase` (`_logger`) | разовый Roslyn-инструмент |
| Приватные `static readonly`/`const` | §1 | — | Pascal (`DefaultTimeout`) | разовый Roslyn-инструмент |
Дополнительно в `.editorconfig` включены машинные правила, теперь ломающие сборку при нарушении
(`TreatWarningsAsErrors=true`, `EnforceCodeStyleInBuild=true`):
- `dotnet_style_qualification_for_{field,property,method,event} = false:warning` — запрет `this.`;
- правила именования `IDE1006`: приватные instance-поля `_camelCase`, `const`/`static readonly` — Pascal.
Также проверено и **не требует правок**: `#region` нет; trailing whitespace нет; все файлы заканчиваются
переводом строки; кодировка UTF-8; настоящих public-полей нет (публичные члены — свойства); явные
модификаторы доступа соблюдены.
### Проверка после правок
- `dotnet build``Deal.sln`, `Deal.Telegram.sln`, `Deal.Ai.sln`, `Deal.Ml.sln`: 0 ошибок / 0 предупреждений.
- Тесты: core **1275/1275**, telegram **125/125**, ai **52/52**, ml **38/38** — все пройдены.
- Повторный прогон renamer: `this.` — 0, полей к переименованию — 0 (идемпотентно).
## 2. Осталось — требует решения владельца
1. **`var` — 1529 употреблений.** Правило §4: не использовать для встроенных типов и при неочевидном типе.
В `.editorconfig` `csharp_style_var_* = false:silent`. Замена требует семантики (вывод типа).
**Рекомендация:** включить анализатор (`:warning`) + `dotnet format` с проверкой.
2. **Явная реализация интерфейсов (§11).** Субъективное «где возможно» — массовая правка может сломать
DI/прямые вызовы и тесты. **Рекомендация:** точечный ревью по 61 интерфейсу, без автоматизации.
3. **Дедупликация `<summary>` в реализациях через `/// <inheritdoc/>` (§11).** Надёжно детектируется только
по семантической модели (сопоставление интерфейс↔класс). В коде уже 674 `<inheritdoc/>`.
**Рекомендация:** Roslyn-анализатор, если нужно добить остаток.
4. **Переводы строк.** `.editorconfig` требует `end_of_line = crlf`, фактически: **231 файл CRLF / 697 LF**
(смешанно). Правка объёмная. **Рекомендация:** решить — нормализовать под CRLF или зафиксировать LF.
## 3. Примечание
Пункты 2.1, 2.3 можно закрыть анализаторами Roslyn в `Directory.Build.props` — это даст автоматическую
проверку на новом коде. Пункт 2.4 — разовое решение по политике переводов строк.