ci / build-test (push) Canceled after 0s
SaaS-мониторинг Telegram: ядро (модули Cards/Kanban/Pipeline/Tenants/Settings/ Discovery, Api, Infrastructure), сервисы telegram/ai/ml/storage, фронт Vue, контракты и grpc-hosting, деплой-конфиги (dev/prod/observability/CI-раннер), Gitea Actions CI, документация (ТЗ, техдок, api-map, код-стайл, планы, бэклог). Текущее состояние: все этапы роадмапа 0–12 закрыты, сборка 5 sln 0/0, тесты 1340/130/52/38/9 зелёные.
6.7 KiB
6.7 KiB
Аудит кода на соответствие код-стайлу «Дейл» (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. Остатки — решения (закрыто 2026-09-11, вечер)
var— закрыто. В.editorconfigвключён ломающий сборку гейтcsharp_style_var_for_built_in_types = false:warning(запрет только для встроенных типов — как в §4); режимы «очевидный тип» и «прочие» оставленыsilentосознанно: правка субъективна и потребовала бы ~1600 механических замен. Остаток встроенных типов выправленdotnet format style --diagnostics IDE0008по всем 5 решениям (51 файл); сборка 5 sln — 0/0.- Явная реализация интерфейсов (§11) — выполнено (вечер, решение владельца, вариант A). 161 член
в 30 прод-файлах конвертирован codemod'ом
scripts/make_explicit.py(частичные классы и многострочные сигнатуры учтены); потребители конкретных типов перетипизированы на интерфейсы (8 мест в проде, 17 тест-файлов);Card/семействоI*Cardоставлены implicit — это DTO, их члены и есть публичный API. Правило закреплено в §11 код-стайла: классы напрямую не вызываем (DTO/хелперы/экстеншены — исключения). - Дедупликация
<summary>через<inheritdoc/>— закрыто: дублей нет. Проверено двумя независимыми сканами (сопоставление по тексту и по имени члена интерфейса: 39 интерфейсов, 229 задокументированных членов) — реализаций, дублирующих summary интерфейсного члена, в продакшн-коде нет; случаев «<param>+ дублирующий summary» не существует. - Переводы строк — решено: LF. Обоснование: инструменты проекта (Python/Node-скрипты, codemod'ы) пишут LF;
shell-скрипты с CRLF не работают на Linux CI (
sh scripts/ci.shв GitHub Actions); фактическое большинство файлов уже было LF. Применено:.gitattributes(* text=auto eol=lf+ бинарные исключения),.editorconfig→end_of_line = lf, конвертировано 1029 трекаемых файлов,git add --renormalize. Побочный эффект: починены 42 CRLF-.sh (9 вscripts/— до этого первый удалённый прогон CI падал бы).
Попутно исправлено (2026-09-11, вечер)
- Повторный прогон
scripts/fix_private_docs.py --apply: понижено 12 XML-доков на private/internal (extension-файлы). - Добавлены недостающие
<summary>:IContainerRules.Keywords/Stack,ITenantContext.TenantId/HasTenant. - Переведены на русский англоязычные
//-комментарии (3 шт. из 18 найденных; остальные — имена сущностей/заголовки секций тестов, не англоязычный текст). - Из индекса убраны случайно закоммиченные
archive/**/__pycache__/*.pyc(2 шт., уже в.gitignore). - STATUS.md: удалён устаревший блок «Осталось (в backlog)» в шапке (пункты закрыты generic-контрактом источника).
- Дочистка по контрольному скану краткости: удалены 73 очевидных
<param name="ct|cancellationToken">(«Токен отмены.» — пересказ сигнатуры, §5) в 17 файлах; ужаты 3 summary (2 многосентенционных, 1 длинное). Контроль:<remarks>— 0, inline-<summary>— 0, многосентенционных summary — 0, TODO — 0.