diff --git a/apps/node-agent/packaging/build_deb.py b/apps/node-agent/packaging/build_deb.py index edddc7f..2bcf656 100644 --- a/apps/node-agent/packaging/build_deb.py +++ b/apps/node-agent/packaging/build_deb.py @@ -13,7 +13,7 @@ import tarfile ROOT = Path(__file__).resolve().parents[1] -VERSION = "0.4.1" +VERSION = "0.4.2" BRAND_SHA256 = "8bfee8ca9f98e0db48d98aae3af4b32493b8593e18b064a0239d513d824182af" diff --git a/apps/node-agent/ui/src/EnvironmentView.tsx b/apps/node-agent/ui/src/EnvironmentView.tsx index 3af1bcb..28f3005 100644 --- a/apps/node-agent/ui/src/EnvironmentView.tsx +++ b/apps/node-agent/ui/src/EnvironmentView.tsx @@ -5,7 +5,7 @@ import type { useEnvironment } from "./useEnvironment"; import { TailnetAccess } from "./TailnetAccess"; import { SystemAccess } from "./SystemAccess"; -const labels:Record={pending:"Ожидает",running:"Выполняется",complete:"Готово",error:"Ошибка",blocked:"Не выполнено"}; +const labels:Record={pending:"Ожидает",running:"Выполняется",error:"Ошибка",blocked:"Не выполнено"}; export function EnvironmentView({environment,failure,success}: {environment:ReturnType;failure:(error:unknown)=>void;success:(text:string)=>void}) { const {value,pending,running,loading,start}=environment; const [adding,setAdding]=useState(false); @@ -22,8 +22,9 @@ export function EnvironmentView({environment,failure,success}: {environment:Retu {value.profile.steps.map(specification=>{ const step=value.run?.steps.find(item=>item.id===specification.id); const state=step?.state??"pending"; - return
  • :} title={specification.label} description={specification.description} metadata={step?.detail} status={{labels[state]??"Неизвестно"}} />
  • ; + return
  • :} title={specification.label} description={specification.description} metadata={step?.detail} status={{state==="complete"?:labels[state]??"Неизвестно"}} />
  • ; })}
    + {value.run&&!running&&value.run.updated_at>0&&

    Результат проверки от {new Date(value.run.updated_at*1000).toLocaleString("ru-RU")}.

    } {complete&&!running&&

    Системные этапы завершены. Ниже проверьте вход в Tailscale и доверенный ключ для SSH.

    } {value.run?.state==="error"&&!running&&

    Часть этапов не завершена. Исправьте указанные причины и повторите настройку.

    } {value.run?.state==="interrupted"&&

    Предыдущая настройка прервана. Повторный запуск проверит уже выполненные этапы.

    } diff --git a/docs/node/03_SYSTEM_AND_VEHICLE_PAIRING_SURFACE.md b/docs/node/03_SYSTEM_AND_VEHICLE_PAIRING_SURFACE.md index 742706c..0395693 100644 --- a/docs/node/03_SYSTEM_AND_VEHICLE_PAIRING_SURFACE.md +++ b/docs/node/03_SYSTEM_AND_VEHICLE_PAIRING_SURFACE.md @@ -272,3 +272,32 @@ helper по SSH не заменяет ни одну из них. точную кнопку и ожидаемое действие. Тест проверяет restrictive umask, повторный ремонт и сохранение прав чужого каталога. Физическая GUI-проверка исправленной версии фиксируется по наблюдаемому результату в отчёте Ops. + + +### Подтверждённый GUI-проход профиля /2 и границы доверия + +Владелец подтвердил успешный повторный запуск через кнопку в 0.4.1. Журнал +профиля /2 доступен обычному приложению (каталог 0755); семь этапов complete. +Получены три сетевых интерфейса и 13 системных USB-объектов. Отдельная проверка +службы подтверждает active, непривилегированного пользователя, пустой набор +capabilities и AF_NETLINK. SSH и Tailscale активны. Ручная команда ремонта прав +в обход кнопки не выполнялась. В 0.4.2 надпись «Готово» заменена канонической +галочкой со смысловой подписью для средств доступности. Рядом с результатом +указано время проверки, чтобы прошедший запуск не воспринимался как live-status. +Профиль /2 не изменён. + +Это положительная приёмка текущего подготовленного Mini, а не доказательство +развёртывания с чистой системой. Ранее инженерный SSH и личная политика +локального подтверждения администратора уже настраивались. Количество USB +не доказывает работу SDK; локальный ответ SSH не доказывает новый удалённый +вход; служба Tailscale не доказывает авторизацию; прошедший запуск является +снимком результата, а не непрерывным монитором всех компонентов. + +Ближайший критерий доверия к поставке: отдельная чистая согласованная система, +.deb → запуск → «Сконфигурировать» → вход в частную сеть → доверенный ключ +через UI → проверяемый вход и отзыв → перезагрузка → повторная проверка. +Первичный прогон выполняется без предварительного SSH-bootstrap, команд +инженера, предустановленного OpenSSH/Tailscale и личных polkit-исключений. +Текущий рабочий Mini для этого не стирается. Виртуальная проверка не заменяет +физическую квалификацию USB/BLE/Wi-Fi. После этого следующий функциональный +срез P1 — приглашение Node и сопряжение с реестром аппаратов Core, затем D455.