feat(node): consolidate board system views and plan fleet pairing

This commit is contained in:
DCCONSTRUCTIONS
2026-09-05 18:35:57 +03:00
parent d696842f5d
commit 79911eb316
13 changed files with 278 additions and 73 deletions
+3
View File
@@ -1,5 +1,8 @@
# Node 0.3 — структура настольного приложения
История композиции 0.3.0. Последующее уточнение владельца, перенос системных
функций в 0.3.1 и план сопряжения: [03_SYSTEM_AND_VEHICLE_PAIRING_SURFACE.md](03_SYSTEM_AND_VEHICLE_PAIRING_SURFACE.md).
Решение владельца от 2026-09-05: привести доступные функции Node к визуальной
системе действующего Mission Core, повторно использовать шапку, навигацию и
длинные строки AI Inference. Это согласование состава вкладок и композиции.
@@ -0,0 +1,179 @@
# Система БК и добавление аппарата в Mission Core
Уточнение владельца от 2026-09-05 к MISSIONCOR-76. Базовое тело Ops не
переписывается. Этот документ фиксирует согласованную композицию следующего
приращения и порядок реализации; наличие описанного действия не означает,
что его backend уже реализован. История 0.3.0 остаётся в документе 02.
## Задача и границы сущностей
Оператор настраивает бортовой компьютер (БК), видит фактическое состояние его
системы и связывает его с аппаратом в Core. Это настройка при первом запуске
и обслуживание, а не лабораторный отчёт. После сопряжения оператор открывает
аппарат в парке и работает с его реально зарегистрированными устройствами.
БК — вычислительный корень подключений этого аппарата. USB-контроллер, hub,
клавиатура и найденная камера относятся к системной инвентаризации. Запись USB
не является регистрацией сенсора, доказательством его identity, набором
capabilities или готовностью к съёмке. Устройства — объекты драйверов,
подключённые и подтверждённые через принятый контракт Plugin SDK v0alpha2.
## Node: согласованное размещение
- Верхний раздел «Система» вместо «Состояние системы».
- «Обзор БК»: ОС, архитектура, CPU/RAM, имя, сводка фактических подключений.
Название редактируется в блоке «Название БК». Самоподтверждающий зелёный
статус «Node работает» удаляется. Сведения имеют время получения.
- «Сеть»: интерфейсы и адреса БК.
- «USB-устройства»: вся системная USB-инвентаризация перенесена сюда.
- «Tailscale» и «SSH · доверенные устройства» принадлежат «Системе».
Отдельного верхнего «Удалённого контроля» больше нет.
- «Mission Core»: выбранное место для создания приглашения и обслуживания
привязки к Core. Подключение Core отделено от настройки сетевого транспорта.
- «Диагностика»: существующий очищенный отчёт и замечания инвентаризации.
Это ограниченная диагностика, не полный support bundle всех будущих модулей.
- Отдельная «Конфигурация системы» удаляется. Состояния SSH/Tailscale и
оборудования входят в сводку; операции остаются в своих подразделах.
- Верхние «Устройства» предназначены для драйверных K1, D455 и следующих
сенсоров. Системный USB-список там не дублируется. В этом приращении
вкладка недоступна до появления рабочего подключения через драйвер;
пустой экран и фиктивные зарегистрированные устройства не создаются.
Отдельный раздел телеметрии и VPN-профили сейчас не вводятся: владелец оставил
их дальнейшую композицию на следующий этап. Текущий обзор показывает
измеренные сведения, не имитирует будущую телеметрию аппарата.
Выбрана системная композиция вместо трёх прежних верхних разделов: установка
сети и доступ относятся к одному БК, а сенсоры имеют отдельный жизненный цикл.
Альтернатива «всё внутри Сети» отклонена для сопряжения: частная достижимость
и доверенная привязка к Core являются разными фактами. Альтернатива переноса
всех операций в обзор также отклонена: обзор остаётся компактной сводкой и
ведёт к соответствующей настройке. Это изменение композиции класса B,
прямо согласованное владельцем в текущем сообщении, без нового общего контрола.
## Обзор БК: состояния и доказательства
Обзор сохраняет сведения об ОС, архитектуре, CPU/RAM и отдельную форму имени.
Сводка содержит сеть (включённые интерфейсы с адресами, без loopback), число
обнаруженных USB-устройств, фактическое состояние Tailscale, локальный ответ
SSH и количество разрешённых ключей. Действия открывают нужный подраздел.
Количество ключей не является числом online операторов. Ответ локального
SSH не обещает удалённый вход. Наличие сетевого адреса не обещает связь с Core.
Во время запроса — загрузка, при ошибке — отсутствие актуальных сведений,
а не зелёная готовность. Tailscale использует один общий hook статуса с той же
проверкой истёкшего сеанса и polling, что и его страница. Старый сеанс
возвращает на штатный вход Node. Диагностические сведения остаются snapshot
с временем получения и ручным обновлением; новая телеметрия не объявляется.
## Core: Парк → Аппараты
Название «Аппараты» сохраняется. Текущий catalog в productModel.ts с текстами
о готовности/контрактах заменяется настоящим реестром вместе с backend.
«Состояние контура» не поглощает реестр. Прежнее «Подключение» K1 остаётся
отдельным legacy-путём и не используется скрыто для устройств удалённого БК.
В шапке реестра плюс «Добавить аппарат». Канонический modal Window содержит
выбор варианта, от которого зависит состав формы:
1. С бортовым компьютером — название аппарата и код приглашения, созданный
в Node. Успешное подтверждение связывает аппарат с устойчивой identity БК.
2. Прямое подключение / управление с пульта — регистрация через отдельный
реально поддерживаемый адаптер и его поля. Приглашение Node для этого
варианта не требуется; вымышленный БК не создаётся. Телеметрия и позиция
появляются только если их предоставляет данный адаптер.
Упомянутые владельцем «автономный» и «с пульта» фиксируют разные сценарии
подключения. Само наличие БК не доказывает автономное движение: аппарат с БК
может управляться дистанционно. Наземный беспилотный аппарат (UGV), воздушный
аппарат и другие классы описывают платформу; способ подключения и возможности
автономности не подменяют этот класс. Первая реализуемая форма — «С бортовым
компьютером»; неподдерживаемая прямая интеграция не выдаётся за рабочую.
После успешного сопряжения аппарат появляется длинной строкой ResourceRow.
Глазик с подписью «Открыть аппарат» открывает постоянную конфигурацию выбранного
аппарата в ApplicationPanel, а не длинную модальную форму. Детали показывают
название/класс, привязанный БК, актуальность связи, состав устройств и доступные
действия. При потере сети строка не исчезает: конфигурация сохранена,
последние данные помечены временем, недоступные команды заблокированы.
Дерево первой интеграции: аппарат → БК → реально зарегистрированные D455/K1.
Конкретные устройства отображаются по факту появления и регистрации, а не
заранее как два обязательных online-объекта. Открытие сенсора ведёт в
предметную конфигурацию и принятые слои данных, не выполняет команду съёмки.
## Сопряжение: обязательный полный сценарий P1
Node: Система → Mission Core → создать приглашение → скопировать код через UI.
Показываются срок действия и возможность отменить приглашение. Уже привязанный
БК показывает соответствующий Core и состояние связи; повторная привязка
проходит явный сценарий. Секрет не сохраняется в истории URL, логах и отчёте.
Core: Парк → Аппараты → плюс → с БК → вставить код → подтвердить сведения
выбранного БК → связать. Запись в реестре и подтверждение доверия должны
согласованно переживать обрыв, повторный запрос, рестарт и отмену.
Сохраняются базовые одноразовость, expiry, pin публичной identity, проверка
версии, ограничение окна сопряжения, один владелец и подтверждённая привязка.
Ни IP/hostname, ни членство в Tailscale не являются identity или authority.
Код не является адресом для произвольного сетевого запроса: private endpoint
и перенаправления проверяются до соединения. После bootstrap Node использует
исходящий аутентифицированный канал с mTLS; UI не передаёт команды через SSH.
Обязательны replay/expiry/conflict, отмена, partial binding recovery,
revoke/re-pair, ротация сертификатов и запрет потери identity при ремонте.
Жизненные циклы enrollment/connectivity/acquisition, revisions, operations,
capabilities, streams и evidence используют семантику Plugin SDK v0alpha2;
параллельная runtime-онтология для нового экрана не вводится.
## Устройства и authority
Управление K1 из Core идёт через runtime выбранного БК, его Linux BLE/network
adapter и K1 Bridge в общей с БК локальной сети. Близость к операторскому Mac
не нужна. Включённый K1 должен быть достижим для БК и подтвердить identity и
совместимый профиль. Состояние «рядом и включён» само по себе не даёт права
команды. Не происходит скрытого fallback в legacy runtime Mac.
Локальный драйвер владеет command session и сырой записью. Открытие глазика
или reconnect не повторяют START/STOP. Unknown result сохраняется как
неизвестный результат до разрешённого восстановления. Локальная запись
продолжается независимо от окна, Core и WAN. Preview/WebRTC не заменяет raw.
## Порядок реализации и приёмка
1. Текущее приращение: перенос существующих страниц в «Систему», обзор БК,
переименование полей, устранение отдельной конфигурации и self-status.
Сборка .deb и GUI-проверка на физическом Mini.
2. Закрыть оставшиеся системные проверки P1 по предыдущему отчёту:
чистая установка, GUI upgrade/repair, reboot и SSH lifecycle без консоли.
3. Реализовать backend сопряжения и реестр Core; одновременно выпустить
рабочие Node «Mission Core», форму добавления и детали аппарата. Проверить
позитивные и негативные сценарии через два интерфейса.
4. P2: драйвер D455, фактические profiles/options/streams, raw recording,
live-слои и открываемая в Core запись. Затем P3: K1 Linux Bridge.
5. Далее совместный P4 и полный P5 восстановления. Вариант прямого аппарата
включается после появления конкретного адаптера и собственной приёмки.
Используемые exports: AppHeader/HeaderNavigation, ApplicationShell/Panel,
AdminNavigationPanel, SettingsCard, ResourceRow/List, Button/IconButton, Icon,
Select/TextField/TextAreaField, Window/ConfirmationModal, StatusBadge,
ActivityIndicator, ToastStack. Новых визуальных примитивов и копий DG нет.
Для текущей приёмки: USB доступен из «Системы»; прежних remote/setup маршрутов
нет; имя БК сохраняется; сводка не объявляет подключение камеры по USB готовым
драйвером; Tailscale/SSH открываются из сводки; плюс SSH работает после переноса;
темы/узкое окно и recovery сеанса не нарушены. Для будущего сопряжения:
добавленный аппарат сохраняется после reload/restart и открывает именно
свой БК/устройства, без дубликатов и зависимости от legacy-коннектора.
## Проверка приращения 0.3.1
Через интерфейс изолированной QA-ноды с production API проверены сохранение
нового имени БК и его отображение в shell; USB в «Системе»; переходы из сводки
в USB/Tailscale; недоступность Tailscale и восстановление «В сети»; SSH и его
плюс; открытие формы и Escape с возвратом фокуса. Проверены светлая/тёмная темы,
сводка и её действия в окне 720×800. После рестарта QA-службы именно из обзора
приложение возвращается на штатный вход, без ложного статуса Tailscale.
Typecheck, production build и существующий UI boundary прошли. Это GUI-проверка
перестановки функций, не закрытие приёмки чистой установки или сопряжения.
Аппаратная установка и её результат фиксируются отдельно в отчёте Ops.