Строка access-лога включает actor (login пользователя/оператора) и tenant из HttpContext.Items. Закрывает BL-LOG-ACTOR.
14 KiB
14 KiB
Бэклог (техдолг и отложенные задачи) — «Дейл»
Назначение: единый источник отложенного/запланированного. Роудмап черпается отсюда. Статусы: BACKLOG (сделаем при потребности), DEFERRED (отложено осознанно, вне текущих рамок), MANUAL (нужны внешние условия: креды, хост, прод), TECHDEBT (качество/архитектура). Приоритет: P1 (важно), P2 (полезно), P3 (когда-нибудь). Обновлять при каждом заходе; выполненные пункты переносить в
docs/superpowers/STATUS.mdи вычёркивать здесь.
1. Продуктовые фичи (по потребности)
| ID | Пункт | Источник | Приоритет | Статус |
|---|---|---|---|---|
| BL-I18N | Переключатель языка в UI + второй язык (en) + locale-aware форматирование (Intl), плюрализация. Основа (вынос строк в ресурсы, registerLocale) готова |
ТЗ §11, этап 11 | P3 | BACKLOG |
| BL-TG-MULTI | Мультиаккаунтность Telegram (сейчас 1 аккаунт на тенант) | ТЗ §12 | P2 | DEFERRED |
| BL-ML-EXP | Экспорт/импорт ML-моделей (перенос «мозгов» между инстансами) | обсуждение этапа 12 | P3 | DEFERRED (решено не делать; вернуться при SaaS-масштабе) |
| BL-RECLASS-SSE | Стриминг-прогресс пакетной переклассификации + финальный тост (сейчас синхронный проход + событие cards_reclassified) |
этап 12, D | P3 | BACKLOG |
| TD-CARD-MERGE | Полное слияние внутренних DTO карточки в единый CardDto (наружу уже единый) |
этап 9/11 | P3 | TECHDEBT |
| TD-PROTO-COMMENTS | Сделано (2026-09-11): из комментариев убраны ссылки на процесс/прототип (Task/Ruling/этап/python L…/main.py/прототип/LEADRADAR_*), удалены блоки <remarks>, <summary> сжаты до короткой фразы; //-комментарии со ссылками удалены, в .proto — тоже. Строк комментариев 27 210 → ~19 100 |
запрос владельца 2026-09-11 | P2 | DONE |
| TD-COMMENTS-IFACE | Привести код к правилам код-стайла (docs/spec/Код-стайл-Дейл.md). Сделано (2026-09-11): (1) <summary> только блочно — исправлено 5286 шт. в 833 файлах; (2) комментарии только на public/protected — понижено 2028 XML-доков с private/internal (359 файлов). Осталось: (3) не дублировать <summary> интерфейса в реализации (нужен Roslyn-анализ); (4) явная реализация интерфейсов там, где возможно (61 интерфейс, точечный ревью). Скрипты: scripts/fix_summary_blocks.py, scripts/fix_private_docs.py. Детали — docs/spec/Код-стайл-аудит-2026-09-11.md |
запрос владельца 2026-09-11 | P2 | TECHDEBT (1,2 — DONE; 3,4 — BACKLOG) |
| TD-STYLE-ANALYZERS | Остаток мягких правил код-стайла: var для встроенных/неочевидных типов (1529, сейчас silent), дедупликация <summary>→<inheritdoc/> (Roslyn), решение по переводам строк (.editorconfig = CRLF, фактически 231 CRLF / 697 LF). Уже закрыто в .editorconfig (+build-проверка): запрет this. и именование приватных полей (_camelCase; const/static readonly — Pascal). Детали — docs/spec/Код-стайл-аудит-2026-09-11.md |
аудит 2026-09-11 | P3 | BACKLOG |
2. Инфраструктура и эксплуатация
| ID | Пункт | Источник | Приоритет | Статус |
|---|---|---|---|---|
| BL-K8S | Kubernetes-манифесты (сейчас docker-compose; k8s — при масштабировании) | ТЗ §11/§12, R6 | P3 | DEFERRED |
| BL-KAFKA | Kafka как шина данных между сервисами (сейчас gRPC + БД-outbox) | ТЗ §12, обсуждение | P3 | DEFERRED |
| BL-CF | Cloudflare / внешний периметр (сейчас Caddy, mTLS; конфиг вне кода) | ТЗ §11, техдок §10 | P2 | MANUAL |
| BL-CI | Сделано (2026-09-11): scripts/ci.sh — сборка всех 5 решений, тесты всех сервисов, скан уязвимых NuGet-зависимостей (dotnet list package --vulnerable --include-transitive), сборка+линтер фронта; build.sh/test.sh расширены на все решения/сервисы; .github/workflows/ci.yml. Первый прогон в удалённом CI — при публикации репозитория |
техдок §8 | P2 | DONE (remote — MANUAL) |
| BL-IMG-HARDEN | Сделано (2026-09-11): non-root USER (deal, UID 10001, HOME=/tmp) во всех прикладных образах; в compose — read_only root FS + tmpfs /tmp, no-new-privileges, cap_drop ALL, mem_limit/cpus; логи stateless-сервисов в /tmp/logs. Проверено compose config (dev/prod/observability); живой прогон — MANUAL |
техдок §10 | P2 | DONE (live — MANUAL) |
| BL-BACKUP-CRON | Автоматизация бэкапов (cron/systemd-примеры есть, реальный прогон — MANUAL) | техдок §9 | P2 | MANUAL |
3. SaaS / мультитенантность
| ID | Пункт | Источник | Приоритет | Статус |
|---|---|---|---|---|
| BL-BILLING | Биллинг и тарифные планы, провайдер платежей | ТЗ §12 | P3 | DEFERRED |
| BL-SIGNUP | Саморегистрация тенантов (сейчас инвайты/оператор) | ТЗ §12 | P3 | DEFERRED |
| BL-SCALE-1000 | Механизм миграций/провижининга на 1000+ схем. Сделано (2026-09-11): пакетная миграция шардирована — ITenantRepository.ListPageAsync + обход страницами в TenantSchemaMigrationService (параллелизм внутри страницы, DefaultPageSize=200, границы 1..32 / 1..5000), сбои изолированы. Осталось при росте: вынести параллелизм/размер в конфиг и кэш прогресса (при необходимости) |
roadmap этап 0, этап 12 | P2 | DONE |
4. Безопасность и наблюдаемость (доработки)
| ID | Пункт | Источник | Приоритет | Статус |
|---|---|---|---|---|
| BL-ALERT-BUDGET | Сделано (2026-09-11): метрика deal.ai.budget.used.ratio{tenant} (доля израсходованного ИИ-бюджета периода, 0..1) в DealMetrics + сбор в RuntimeDepthsCollector/DealMetricsCollector; на её основе оператор настраивает алерт в Prometheus/Grafana |
этап 12, A | P2 | DONE |
| BL-LOG-ACTOR | Сделано (2026-09-11): access-лог HTTP core (HttpAccessLogMiddleware) включает actor (login пользователя тенанта либо оператора) и tenant (id тенанта) — их берут из HttpContext.Items (Session/OperatorSession middleware) |
этап 12, T6 | P3 | DONE |
| BL-GRACEFUL | Дополнительные проверки устойчивости/ретраев (по результатам нагрузочного прогона) | этап 12, C | P2 | BACKLOG |
| BL-SUSPICIOUS | Расширение детектора подозрительной активности (правила/пороги по логам безопасности) | ТЗ §10.5, этап 12 | P3 | BACKLOG |
5. Технический долг (качество/архитектура)
| ID | Пункт | Источник | Приоритет | Статус |
|---|---|---|---|---|
| TD-SETTINGS-UI | Вынос оставшихся вкладок SettingsView в отдельные компоненты (частично сделано) |
ревью 2026-09-08 | P3 | TECHDEBT |
| TD-VIRT | Полная виртуализация длинных колонок (сейчас — прогрессивный рендер «Показать ещё») | ревью, этап 12 | P3 | TECHDEBT |
| TD-SSE-DEAD | Мёртвые SSE-ветки фронта boards_changed/pipeline_stats (core их не публикует) |
этап 12, E | P3 | TECHDEBT |
| TD-DBL-CLICK | Двойная перезагрузка доски у инициатора batch-reclassify (ответ + SSE) | этап 12, E | P3 | TECHDEBT |
| TD-TEST-HARNESS | Историческая гонка FreeTcpPort — устранена; следить за новыми хост-хелперами |
этап 12, E | P3 | TECHDEBT |
| TD-OLD-DOCS | Исторические доки несут старые термины под пометками (переписывать не нужно) | docs sweep | P3 | TECHDEBT |
| TD-SOURCE-PROVIDER | Провайдеры содержимого источников. Сделано (2026-09-11): TelegramSourceContentProvider + ReadSource RPC + GET /api/cards/{id}/source + UI «Обновить из источника». Осталось: провайдеры прочих источников по мере появления |
generic source 2026-09-11 | P2 | TECHDEBT |
| TD-STORE-ATTACH | Выгрузка вложений источника в Storage-сервис адаптером. Решение (2026-09-11): медиа-посты Telegram пропускаем — извлечение/выгрузка не делаются. Остались на будущее: вложения прочих источников (файл/диск/таблица) и ISourceContentProvider для remote-просмотра |
generic source 2026-09-11 | P3 | BACKLOG |
| TD-TG-CORE-SPLIT | Перенос оставшейся Telegram-специфики ядра в telegram-сервис. Закрыто (2026-09-11): не требуется. Задача «дашборды/карточки не знают о Telegram» решена generic-контрактом источника; оставшиеся TelegramStore/Dialogs/TgMessages/Discovery — это состояние тенанта (ядро — владелец данных, telegram-service — stateless-шлюз), перенос отдал бы шлюзу доступ к схеме тенанта |
generic source 2026-09-11 | — | CLOSED |
| TD-SOURCE-CONTACTS | Квалификатор контактов знает форматы профилей (t.me/@handle) — вынести в расширяемые правила источников |
generic source 2026-09-11 | P3 | BACKLOG |
| TD-APIMAP-COUNT | Ручной подсчёт числа операторских ручек в api-map (может расходиться с группировкой) |
docs sweep | P3 | TECHDEBT |
6. Manual-проверки (нужны внешние условия)
| ID | Пункт | Источник | Приоритет | Статус |
|---|---|---|---|---|
| MN-E2E-TG | Реальный Telegram-вход (QR) + приём сообщений, backfill, «Перечитать каналы» | ТЗ §4, STATUS | P1 | MANUAL (креды/аккаунт) |
| MN-E2E-LLM | Живые LLM-вызовы (классификация/фильтр/reclassify/расход токенов) | ТЗ §8–9 | P1 | MANUAL (LLM-ключ) |
| MN-PROD | Прод-развёртывание (хост/домен, Caddy+mTLS, observability-профиль) | техдок §13.8 | P2 | MANUAL (данные хоста) |
| MN-GRAFANA | Живая проверка Grafana-дашбордов метрик/алертов и логов | этап 12, A/T6 | P2 | MANUAL |
| MN-LOADTEST | Живой нагрузочный прогон (scripts/loadtest/) и baseline |
этап 12, C | P2 | MANUAL |
| MN-BACKUP | Живой прогон backup.sh/restore на реальных данных |
техдок §9 | P2 | MANUAL |
| MN-THEME | Визуальная приёмка светлой темы в браузере | этап 12, «Внешний вид» | P3 | MANUAL |
7. Отложено/решено «не делать» (для истории)
| ID | Пункт | Решение |
|---|---|---|
| DEC-DEMO | Демо-эндпоинты (DEAL_DEMO, simulate-lead) |
Удалены (этап 9/12) |
| DEC-LEGACY | Легаси-прототип LeadRadar (backend/, mlservice/, корневой compose) |
Перенесён в archive/leadradar-legacy/ (2026-09-10) |
| DEC-ML-EXP | Экспорт/импорт ML | Отложено владельцем (перенесено в BL-ML-EXP) |
Как пользоваться
- Для нового захода: выбрать пункты по приоритету/теме, оформить SDD-план в
docs/superpowers/plans/и ledger.superpowers/sdd/<этап>/, после приёмки — перенести факт вdocs/superpowers/STATUS.md, а пункт здесь пометить выполненным/удалить. - Пункты
MANUALне блокируют разработку; выполняются, когда владелец даёт креды/хост.