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 зелёные.
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
# Аудит документации «Дейл»: сверка с кодом/конфигами
|
||||
|
||||
> Исторический документ (аудит документации, 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,
|
||||
grafana `127.0.0.1:3001`, prometheus `127.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`
|
||||
и lowercase `operators`/`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.
|
||||
Reference in New Issue
Block a user