v0.1.5 First Boot 9 мин 18 сентября 2026, 14:40 — 16:30

Акт II: Аппаратный детектив и оживление консоли

Миграция на xterm 4, нокаут системы Kernel-Power 41 при компиляции C++ и рождение Safe Build Protocol. Первые живые баги: почему терминал молчал и курсор застыл.

BUG-004 BUG-005 BUG-006 BUG-007 #hardware #kernel-power #xterm #pty #safe-build
Стенограмма отладки: Столкновение UI с суровой реальностью
18 сентября 2026, 10:49 — 11:14
Развернуть
Архитектор
созданный хост не сохраняется
Архитектор
я не понял, а куда вводить пароль для созданного хоста?
Архитектор
скажи мне, приложение не должно запрашивать доступ в сеть? сейчас оно пишет, что хост недоступен, хотя в обычном терминале я прекрасно соединяюсь с ним
Antigravity
Вскрылся разрыв между ядром и интерфейсом: юнит-тесты проверяли репозиторий на mock-хранилище в памяти, а контроллер формы в UI ещё не сохранял пароль в SecureStorage. Сетевой сокет на Windows блокировался из-за отсутствия сетевых разрешений в манифесте сборки. Исправляю связку формы с хранилищем и сетевой слой.
Контекст акта: Отдельные модули готовы, но при попытке соединить их в единое приложение разработчика поджидает аппаратный детектив: мощный процессор Ryzen 5 8400F уходит в аварийную перезагрузку Kernel-Power 41 при компиляции нативного C++. В этом акте вырабатывается протокол бережной сборки Safe Build, терминал мигрирует на xterm 4.0, и начинается охота за первыми живыми багами.

Запись 04. Рождение интерфейса: Obsidian Dark, живой RTT-пульс и Prod Guard

⏱️ Время: 18 сентября 2026, 14:40 — 15:00 (~20 минут)

В существующих SSH-клиентах мне всегда резали глаз две вещи: серый унылый визуал родом из 90-х и мертвые списки серверов, где ты не знаешь, жив ли хост, пока не прождешь 30 секунд таймаута.

Сборка интерфейса началась с неожиданности (BUG-004): библиотека xterm: ^3.7.0 оказалась несовместима с Dart 3.12. Пришлось прямо на лету мигрировать на xterm: ^4.0.0 с полной переработкой виджета TerminalView и подписок на изменение геометрии экрана (terminal.onResize).

Мы сформулировали ключевые элементы эргономики:

  • Obsidian Dark: Глубокий графитовый фон (#151824) и карточки (#1E2235) без рези в глазах при ночной работе.
  • Живой RTT-пульс серверов: Зеленый пульс (<50 мс), мягкий желтый (<200 мс) и спокойный оффлайн прямо на карточке хоста.
  • Prod Guard: Красная рамка вокруг терминала боевого сервера и обязательное подтверждение для опасных команд (rm -rf, drop database, shutdown).
  • Спецклавиатура для мобилок: Выдвижная панель клавиш (Esc, Tab, Ctrl, Alt) над клавиатурой смартфона с тактильным откликом HapticFeedback.

Запись 05. Сборка root-приложения, аппаратный детектив с перезагрузками ПК и 132 теста

⏱️ Время: 18 сентября 2026, 15:00 — 15:15 (~15 минут)

Когда все модули соединились в apps/shellit, на этапе первой нативной компиляции ПК намертво ушел в перезагрузку.

Любой, кто собирал тяжелые C++ плагины, знает: компилятор способен выжать все ядра на 100% и разогреть фазы питания VRM до критических температур.

Мы заглянули в системный журнал Windows (Event Viewer): там красовались роковые события Event ID 41 (Kernel-Power) и синий экран 0x50 (PAGE_FAULT_IN_NONPAGED_AREA). Причина: связка из мощного Ryzen 5 8400F, агрессивного плана питания «Максимальная производительность» (задирающего вольтаж) и дефицита места на системном диске C:.

Мы не стали рисковать кремнием и выработали Safe Build Protocol:

  1. Перевели план электропитания в сбалансированный режим.
  2. Перенесли кэш сборки с диска C: на просторный диск D: (>140 ГБ).
  3. Все промежуточные тесты и DI-контейнер валидировали в песочнице Dart VM без критического нагрева.

Вентиляторы даже не вышли на максимум, 132 теста из 132 завершились зеленым статусом, 0 перезагрузок.


Записи 07–09. Охота за призраками: почему молчал терминал и застыл курсор?

⏱️ Время: 18 сентября 2026, 15:35 — 16:30 (~55 минут)

Первый запуск показал классические болезни первого интеграционного билда:

  1. BUG-005: Почему не сохранялся хост?
    Форма добавления хоста закрывалась, а в каталоге было пусто. Оказалось, поток реактивного запроса Drift не инвалидировал локальный кэш Riverpod. Добавили принудительную инвалидацию провайдера hostsStreamProvider.
  2. BUG-006: Тайна безмолвного терминала.
    Окно терминала открывалось, но нажатия клавиш не улетали на сервер, а курсор застыл. Проблема крылась в PTY-мосте: TerminalView слушал события ввода, но стрим session.output не был привязан к контроллеру терминала terminal.onOutput. Связали двусторонний пайплайн.
  3. BUG-007: Эффект «захлопнувшейся двери».
    При переключении между открытой консолью и списком серверов активная сессия уничтожалась, а соединение рвалось. Заменили простой Navigator.push на персистентный стэк вкладок сессий с фоновым удержанием SSH-сокетов.
📖 Типографика статьи выровнена по алгоритму Кнута — Пласса с помощью mcp-typography-server на базе Justif.
Knuth-Plass • TeX Style