Запись 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:
- Перевели план электропитания в сбалансированный режим.
- Перенесли кэш сборки с диска C: на просторный диск D: (>140 ГБ).
- Все промежуточные тесты и DI-контейнер валидировали в песочнице Dart VM без критического нагрева.
Вентиляторы даже не вышли на максимум, 132 теста из 132 завершились зеленым статусом, 0 перезагрузок.
Записи 07–09. Охота за призраками: почему молчал терминал и застыл курсор?
⏱️ Время: 18 сентября 2026, 15:35 — 16:30 (~55 минут)Первый запуск показал классические болезни первого интеграционного билда:
- BUG-005: Почему не сохранялся хост?
Форма добавления хоста закрывалась, а в каталоге было пусто. Оказалось, поток реактивного запроса Drift не инвалидировал локальный кэш Riverpod. Добавили принудительную инвалидацию провайдераhostsStreamProvider. - BUG-006: Тайна безмолвного терминала.
Окно терминала открывалось, но нажатия клавиш не улетали на сервер, а курсор застыл. Проблема крылась в PTY-мосте:TerminalViewслушал события ввода, но стримsession.outputне был привязан к контроллеру терминалаterminal.onOutput. Связали двусторонний пайплайн. - BUG-007: Эффект «захлопнувшейся двери».
При переключении между открытой консолью и списком серверов активная сессия уничтожалась, а соединение рвалось. Заменили простойNavigator.pushна персистентный стэк вкладок сессий с фоновым удержанием SSH-сокетов.