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 зелёные.
12 KiB
Аудит документации «Дейл»: сверка с кодом/конфигами
Исторический документ (аудит документации, 2026-09-10; следующий —
2026-09-11-docs-final-sweep.md). Актуальное состояние —docs/superpowers/STATUS.mdиdocs/technical/Техническая-документация-Дейл.md.
Дата: 2026-09-11 Проверено:
docs/spec/ТЗ-дейл-новая-архитектура.md,docs/user-guide/Инструкция-пользователя-Дейл.md,docs/technical/Техническая-документация-Дейл.md,docs/api/api-map.md, плюсdocs/superpowers/STATUS.md. Метод: сверка утверждений с кодом (src/core/Deal.Api/Endpoints/*,src/core/Deal.Infrastructure/**,src/frontend/src/**,src/{ai,ml,telegram}-service), конфигами (deploy/compose.*.yml,appsettings*.json) и скриптами (scripts/*.sh). Докер не поднимался, тесты не перезапускались (см. «непроверяемое»).
Сводка
- Найдено расхождений: 30 (по пунктам таблиц ниже).
- Исправлено прямо в доках: 30.
- Значимые подтверждённые факты, с которыми доки сходятся: порты (core 5080/5082, telegram 5101,
ai 5102, ml 5103, metrics 9464, postgres 5433, minio 9000/9001, grafana 3001), единые домены
/api/cards+/api/containers, оператор-консоль#/operatorи активация#/join, ключи Telegram — у оператора (global_settings), команды запуска.
Расхождения (файл:строка → в доке → реальность → исправлено)
docs/technical/Техническая-документация-Дейл.md
| # | Место | В доке | Реальность (код) | Статус |
|---|---|---|---|---|
| 1 | §2 «Структура» (~L43) | проект Deal.Modules.Projects/ |
каталога нет; есть Deal.Modules.Telegram/ |
✅ исправлено на Deal.Modules.Telegram |
| 2 | §3 «Модули core» (таблица, ~L74) | «Выбранные» владеет Deal.Modules.Projects; нет Telegram |
сервисы «Выбранных» — в Deal.Modules.Kanban (CardsService.Selected); модуль Deal.Modules.Telegram существует |
✅ исправлено + добавлена строка Telegram |
| 3 | §3 (абзац, ~L80) | «Projects — сервисами пространства…» |
модуля Projects нет (перенесено в Kanban) |
✅ исправлено |
| 4 | §4 «Ключевые таблицы public» (~L109-112) | tenants(…, limits_json), users(…, email, role), invites(id, tenant_id, email, code, expires_at, used_at), app_settings |
tenants(Id,Name,Status,CreatedAt), users(…,Login,…), invites(Code PK,Email,TenantId,Status,ExpiresAt,ActivatedAt,CreatedById,CreatedAt), global_settings; таблицы app_settings нет |
✅ исправлено |
| 5 | §4 сноска (~L122) | Operators, OperatorSessions |
таблицы — operators, operator_sessions (миграция SystemSaaS) |
✅ исправлено |
| 6 | §6 «Файлы» (~L202) | ключ объекта = tenant_<id>/<card_id>/<file_id> |
CardsService строит projects/<card_id>/<file_id>_<unixMs>_<safeName> |
✅ исправлено |
| 7 | §8 «Развёртывание» (сноска, ~L304) | «корневой docker-compose.yml — наследие LeadRadar» |
файл перенесён в archive/leadradar-legacy/; в корне его нет |
✅ исправлено |
| 8 | §11 этап 5 (~L510) | модуль/таблица Deal.Modules.Projects/ProjectCards без пометки |
упразднены с этапа 9 | ✅ добавлена пометка «историческое состояние» |
| 9 | §11 TODO (~L619-620) | «OpenAPI-карта снимается с LeadRadar», «миграции на 1000 схем — в плане этапа 0» | api-map и контракты есть; пакетная миграция реализована (этап 12) | ✅ исправлено |
| 10 | §13.4a (~L717) | секреты включают tgKeys.apiHash в настройках тенанта, маска apiHashSet |
tgKeys у тенанта нет; ключи — у оператора (global_settings, GET/PUT /api/operator/settings/telegram-keys) |
✅ исправлено + пометка |
| 11 | §13.5 «Проверка схем» (~L888) | схема тенанта содержит Boards, ProjectCards; public — неполный |
Boards/ProjectCards удалены (этап 9); актуальны Containers, Dialogs, Disc* и т.д. |
✅ исправлено на актуальный список |
| 12 | §13.6 «Тесты» (~L905) | dotnet test ожидает 1203 PASS |
актуальный core — 1275 | ✅ исправлено |
| 13 | §13.7 env (~L976) | core в compose задаёт DEAL_DEMO=1 |
в compose.dev.yml DEAL_DEMO нет; демо-ручки удалены |
✅ исправлено |
| 14 | §13.7 smoke (~L994) | POST /api/demo/simulate-lead → /api/leads/{id}/trash |
dev-smoke.sh: POST /api/cards → POST /api/cards/{id}/trash |
✅ исправлено |
| 15 | §13.7 ручные проверки (~L1061) | PATCH /api/settings tgKeys |
ключи — у оператора (вариант A) | ✅ исправлено |
| 16 | §13.8 (~L1074) | public.Operators/OperatorSessions |
operators/operator_sessions |
✅ исправлено |
| 17 | §13.8 (~L1111) | «приостановка тенанта (вход 401…)» | вход приостановленного тенанта — 403 (AuthEndpoints) |
✅ исправлено |
| 18 | §13 заголовок (~L636) | «актуально для этапов 0–10» | актуально по этап 12 | ✅ исправлено |
| 19 | §13.4e (~L841) | исторический раздел этапа 5 без пометки | операции переехали в /api/cards*, модуль/таблица удалены |
✅ добавлена пометка |
| 20 | §16 «Добивка» (~L1339) | core-тесты 1245/1245 | актуально 1275/1275 | ✅ исправлено |
docs/user-guide/Инструкция-пользователя-Дейл.md
| # | Место | В доке | Реальность | Статус |
|---|---|---|---|---|
| 21 | §1 «Особенности» (~L32-34) | демо-кнопки («демо-карточка», «демо-сообщение») при DEAL_DEMO=1 |
во фронте демо-кнопок нет, ручки POST /api/demo/* и флаг удалены |
✅ исправлено |
docs/api/api-map.md
| # | Место | В доке | Реальность | Статус |
|---|---|---|---|---|
| 22 | §3.1 (~L59) | change-password — минимум 4 символа |
AuthEndpoints — минимум 8 |
✅ исправлено |
| 23 | §4.1 (~L248) | objectKey: "cards/c_…/pf_…" |
формат projects/<cardId>/<fileId>_<ms>_<name> |
✅ исправлено |
| 24 | §5 «Прочие домены» (~L400) | Operator + join = 21 | 24 операторских ручки + /api/join = 25 |
✅ исправлено |
docs/superpowers/STATUS.md
| # | Место | В доке | Реальность | Статус |
|---|---|---|---|---|
| 25 | (~L30) | core 1203/1203 PASS | 1275 | ✅ исправлено |
| 26 | (~L52) | «демо DEAL_DEMO» |
демо удалено | ✅ исправлено |
| 27 | (~L56) | public.Operators/OperatorSessions |
operators/operator_sessions |
✅ исправлено |
| 28 | (~L76) | «демо-пространство, DEAL_DEMO=1» |
dev-seed admin/admin, демо удалено |
✅ исправлено |
| 29 | (~L90) | «settings/boards/demo-карточка» (live-приёмка) | актуальные ручки — /api/settings, /api/cards |
✅ исправлено + историческая пометка |
| 30 | (~L94) | «simulate-lead → карточка inbox» | dev-smoke.sh: POST /api/cards → карточка planned |
✅ исправлено |
Нумерация строк приблизительная (после правок сместилась).
Проверено и сходится (выборка)
- Порты: core HTTP 5080 / gRPC-ингресс 5082, telegram-service 5101, ai-service 5102,
ml-service 5103, metrics 9464 (
METRICS_PORT), postgres host-порт 5433, minio 9000/9001, grafana127.0.0.1:3001, prometheus127.0.0.1:9090— совпадают сdeploy/compose.*.ymlи Dockerfile. - Команды:
docker compose -f deploy/compose.dev.yml up -d --build,scripts/dev-smoke.sh,scripts/test.sh(+npm run lint:i18n), фронтnpm run dev— совпадают. - Единый API:
/api/cards+/api/containers; домены/api/leads|projects|boards|columnsудалены — совпадает сEndpoints/*иapi-map. - Оператор-консоль: hash-роутер
#//#/operator/#/join?code=…—src/frontend/src/router.js; ключи Telegram —global_settings+OperatorSettingsEndpoints. - БД:
ContainersвместоBoards,ProjectCardsнет,Cardsс модульными JSON-полями; публичные таблицыaudit_log/token_usage_events/global_settings/rate_limit_countersи lowercaseoperators/operator_sessions— подтверждено EF-конфигами и миграциями. - Файлы:
objectKey = projects/<cardId>/<fileId>_<ms>_<name>—CardsService.Files. - Наблюдаемость:
/metricsна отдельном HTTP/1.1-эндпоинте :9464, Serilog, promtail/loki/grafana — подтвержденоDealMetricsHosting,compose.prod.yml.
Осталось / непроверяемое
- Счётчики тестов сервисов (telegram 125, ai 52, ml 38): перезапуск тестов не выполнялся (запрет на долгие процессы). В доках трогали только core-счётчик (1203/1245 → 1275) по ground-truth задания; сами цифры сервисов не подтверждались кодом.
- Точное число операторских ручек (25) — подсчёт по
Endpoints/Operator*+JoinEndpoint; группировка может отличаться от авторской (ранее было 21 — вероятно, до этапа 12). - Исторические разделы-журналы (§11 этапы 1–7, §13.4c/4d/4e, live-приёмки в STATUS/планах)
намеренно сохраняют легаси-термины (
Boards,/api/leads,/api/projects,DEAL_DEMO,ProjectCards). Добавлены точечные пометки «историческое состояние»; полный перепис не выполнялся (вне правил задачи). - Планы/архитектурные доки (
docs/superpowers/plans/*,docs/architecture/*) содержат легаси-термины (Boards,ProjectCards,docker-compose.yml) — вне периметра аудита. - Живые контуры (Telegram-вход, реальные LLM-вызовы, mTLS-рукопожатие, backup/restore на docker-стеке) не проверялись — нужны креды/Docker; в доках они помечены ⚠ Manual.
- Дубли/внутренние противоречия: техдок §11 этап 5 и §13.4e описывают снятый контур «Выбранных» как историю; при следующей редакции их, возможно, стоит свернуть в ссылку на §3.