# Отчёт: полный анализ состояния проекта - **Задание:** `../inbox/2026-09-05-full-project-analysis.md` - **Дата:** 2026-09-05 - **Изменения продукта:** отсутствуют ## Итог Проект представляет собой функционально насыщенную alpha-версию: Control, Agent, Core и restricted Provisioning Helper собираются; основной набор из 158 тестов проходит. Базовые monitoring, mTLS identities, Links, SQLite, web console, release/bootstrap chain и каркас provisioning реализованы. Проект пока нельзя считать production-ready: не закрыт Горизонт 0, mutating provisioning ограничен сменой timezone, нет физической mesh/reboot-приёмки и доверенной подписи MSIX. В roadmap отмечено 100 выполненных и 79 невыполненных пунктов. Значительная часть 79 пунктов относится к будущим горизонтам и не должна начинаться сейчас. ## Что реализовано - WinUI Desktop, Control Hub ASP.NET Core, Linux Agent, общий Core и отдельный restricted provisioning helper. - Мониторинг ресурсов, SSH/WireGuard/latency, локальная история и diagnostics. - mTLS enrollment и разделённые Agent/Operator/Automation identities. - Directional Links, TTL, kill switch, audit, event stream и reconciliation. - SQLite schema/retention/backup, Agent offline buffer и нагрузочный тест 100 Nodes. - Bootstrap/install/update/rollback/uninstall, WireGuard/nftables, signed release manifest и compatibility checks. - Provisioning job state machine, immutable plan, execution grant, audit и один фактически исполняемый mutating increment: timezone-only с verification/rollback. ## Что осталось: фактический порядок ### P0 — закрыть Горизонт 0 1. Провести физический acceptance на реальной топологии Hub + source Node + два destination Node с `SMM_ACCEPT_RESTORE=1 SMM_ACCEPT_REBOOT=1`. CI это не заменяет. 2. Завершить lifecycle сертификатов: автопродление Agent и документированная, проверенная ротация Control CA. 3. Настроить постоянную доверенную Windows code-signing identity. Сейчас MSIX test-signed. 4. Разобрать дефект версии MSIX: `Package.appxmanifest` всё ещё содержит `1.0.0.6`; открыто отдельное непринятое задание. 5. Синхронизировать release status: корневой README и все 11 переводов говорят `alpha.14`, тогда как история релизов дошла до `alpha.20`. ### P1 — уже заведённые дефекты текущей alpha - Web console: нет поведенческих JS-тестов; существующие проверки в основном доказывают наличие разметки. - Web console: каждое `link.*`/`agent.*` событие напрямую вызывает `loadDashboardData`, то есть пачка событий усиливает запросы; throttle/debounce отсутствует. - Web console: нет Operator API и UI для последних метрик/короткой истории узлов. - Link reconciliation: маркер читается до проверки `_backoffUntil`, а timer жёстко использует `min(configured, 30s)`; непринятое задание подтверждено кодом. - Desktop UI для управления Automation identities/tokens отсутствует. - Группы/теги/избранное, настраиваемые alert rules и управляемая отдельная terminal-key identity отсутствуют. ### P2 — довести provisioning до полезного продукта - Полная execution/retry/verification/rollback state machine для остальных действий, versioned schemas и desired/factual/drift для всех action types. - Полный preflight OS/arch/SSH/firewall/APT/capabilities. - Desktop wizard locale/packages/swap/unattended upgrades. - Root-only backups и symlink protection. - User/SSH key/sudo/block/session/service lifecycle с factual verification и rollback. - Managed firewall editor и безопасная двухфазная миграция SSH-порта. ### P3 — качество и эксплуатация - Настоящие Debian reboot tests, полная VM matrix и physical alpha acceptance. - Долговременный soak test и измеримые performance budgets. - Устранить предупреждения анализаторов: solution build выдаёт 41 warning; наиболее содержательные — незакрываемые `SemaphoreSlim` в `MetricBuffer`, непереданный cancellation token в helper и дорогой/неструктурированный logging. - Добавить Desktop и Desktop security test project в общий solution либо явно документировать раздельную проверку. Сейчас обычный `dotnet build/test` solution их не охватывает. - Разобрать зависание Desktop security tests: отдельный прогон собрал проект, но не завершился более чем за минуту и был остановлен. Причина не определена. ### P4 — только после соответствующих гейтов - Горизонт 1: approval policies, alerts/incidents, read-only Telegram, Docker/systemd observation/actions, Backup Manager. - Горизонт 2: полноценная web authentication model, Secret Vault, centralized logs, security posture, multi-Hub phase 1 и один Xray module. - Горизонт 3: KAgent integration. - Дополнительные Desktop/mobile clients и push notifications. ## Несогласованности и организационный долг - `ServerMonitorManager.slnx` не содержит Desktop и Desktop security tests, хотя README предлагает `dotnet build ServerMonitorManager.slnx` как сборку Windows client. - README заявляет текущий релиз `alpha.14`; release policy и tag history — до `alpha.20`. - В `agents/*/inbox` без одноимённых отчётов остаются 7 ранее выданных задач: 4 Antigravity и 3 Codex. Наличие задания не доказывает, что работа не велась, но по принятой схеме результат не сдан и не принят. - Поиск TODO/FIXME/NotImplemented не обнаружил явных продуктовых заглушек; совпадения `placeholder` в Desktop относятся к UI placeholder text. ## Проверки и фактический результат 1. `dotnet restore ServerMonitorManager.slnx --verbosity minimal` — exit 0, восстановлены пять проектов solution. 2. `dotnet build ServerMonitorManager.slnx --configuration Release --no-restore` — exit 0, 0 ошибок, 41 предупреждение. 3. `dotnet test tests/ServerMonitorManager.Control.Tests/... --configuration Release --no-build` — вне sandbox: 158 passed, 0 failed, 0 skipped, 17 s. 4. Тот же test в sandbox — 132 passed, 26 failed из-за denied access к Windows certificate storage/Event Log. Повтор вне sandbox доказал, что это ограничение среды, а не продуктовый regression. 5. `dotnet test tests/ServerMonitorManager.Desktop.Security.Tests/...` — restore/build успешны с предупреждениями; test run не завершился более чем за минуту, остановлен. Зелёный результат не получен. 6. Статический подсчёт: 67 source `.cs`, 33 test `.cs`, 164 `[Fact]/[Theory]`, roadmap 100 checked / 79 unchecked. ## Не сделано Физические Linux/mesh/reboot проверки, GitHub Actions/release rehearsal и установка MSIX поверх старой версии не запускались: для них нужны внешняя топология, GitHub execution и/или установленный пакет. Найденные дефекты не исправлялись согласно границам аналитической задачи.