fix(node): show completed setup checks with a timestamp
This commit is contained in:
@@ -13,7 +13,7 @@ import tarfile
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
VERSION = "0.4.1"
|
||||
VERSION = "0.4.2"
|
||||
BRAND_SHA256 = "8bfee8ca9f98e0db48d98aae3af4b32493b8593e18b064a0239d513d824182af"
|
||||
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import type { useEnvironment } from "./useEnvironment";
|
||||
import { TailnetAccess } from "./TailnetAccess";
|
||||
import { SystemAccess } from "./SystemAccess";
|
||||
|
||||
const labels:Record<string,string>={pending:"Ожидает",running:"Выполняется",complete:"Готово",error:"Ошибка",blocked:"Не выполнено"};
|
||||
const labels:Record<string,string>={pending:"Ожидает",running:"Выполняется",error:"Ошибка",blocked:"Не выполнено"};
|
||||
export function EnvironmentView({environment,failure,success}: {environment:ReturnType<typeof useEnvironment>;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
|
||||
<ResourceList aria-label="Этапы настройки окружения">{value.profile.steps.map(specification=>{
|
||||
const step=value.run?.steps.find(item=>item.id===specification.id);
|
||||
const state=step?.state??"pending";
|
||||
return <li key={specification.id}><ResourceRow icon={state==="running"?<ActivityIndicator size="compact" />:<Icon name={state==="complete"?"check":state==="error"?"alert":"circle"} />} title={specification.label} description={specification.description} metadata={step?.detail} status={<StatusBadge tone={state==="complete"?"success":state==="error"?"warning":"neutral"}>{labels[state]??"Неизвестно"}</StatusBadge>} /></li>;
|
||||
return <li key={specification.id}><ResourceRow icon={state==="running"?<ActivityIndicator size="compact" />:<Icon name={state==="error"?"alert":"circle"} />} title={specification.label} description={specification.description} metadata={step?.detail} status={<StatusBadge tone={state==="complete"?"success":state==="error"?"warning":"neutral"}>{state==="complete"?<Icon name="check" label="Этап завершён" />:labels[state]??"Неизвестно"}</StatusBadge>} /></li>;
|
||||
})}</ResourceList>
|
||||
{value.run&&!running&&value.run.updated_at>0&&<p className="node-note">Результат проверки от {new Date(value.run.updated_at*1000).toLocaleString("ru-RU")}.</p>}
|
||||
{complete&&!running&&<p className="node-note">Системные этапы завершены. Ниже проверьте вход в Tailscale и доверенный ключ для SSH.</p>}
|
||||
{value.run?.state==="error"&&!running&&<p className="node-note">Часть этапов не завершена. Исправьте указанные причины и повторите настройку.</p>}
|
||||
{value.run?.state==="interrupted"&&<p className="node-note">Предыдущая настройка прервана. Повторный запуск проверит уже выполненные этапы.</p>}
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user