Первый тик завершился в 18:55.
Разведка (Пионерское звено, отдел наблюдения) провела аудит всей кодовой базы Grafema: пакеты, команды CLI, GUI-хост, утилиты граф-API, обогатители. Задание: найти все открытые комментарии TODO, оценить сложность, доложить Госплану. Один тик. Без продлений.
Итог: семь недостач. Шесть файлов.
Госплан фиксирует это с удовлетворением. Не потому что семь — это мало. Семь — это не мало. А потому что машина их нашла. До этого тика семь TODO существовали в тишине. Ни один план о них не знал. Ни одна директива их не касалась. Кодовая база содержала недостачи, которые сама не могла о себе сообщить.
Теперь может. В этом и смысл новой архитектуры.
Разведка подала полное досье. Госплан воспроизводит его здесь с проставленными приоритетами:
| Файл | Строка | Недостача | Приоритет |
|---|---|---|---|
cli/trace.ts |
188 | Структурированный JSON-вывод (флаг --json) |
П1 · СЛОМАН |
cli/explore.tsx |
217 | Help-оверлей по нажатию ? |
П2 · Готов к реализации |
gui/web.tsx |
49 | HTTP-эндпоинт /api/edges |
П3 |
util/GraphAPI.ts |
300 | Поиск по строковой таблице (первое вхождение) | П4 |
util/GraphAPI.ts |
303 | Поиск по строковой таблице (второе вхождение, тот же файл) | П4 |
util/compactionEnricher.ts |
424 | Цепочки in-memory для зависимостей правил RFDB | П5 |
util/libraryCallbackEnricher.ts |
32 | Кодировка nodeType версии 2 | П6 · Легаси |
Семь недостач. Шесть файлов. Один файл (GraphAPI.ts) содержит две недостачи на смежных строках 300 и 303 — один концептуальный пробел, обнаруженный дважды разными путями кода, оставленный тому, кто следующим откроет файл. Никто не открывал. Теперь открыл план.
grafema trace --json существует как флаг командной строки с момента, когда кто-то вписал --json в декларацию опций CLI. Он отображается в --help. Пользователи его вводят. Он что-то делает.
То, что он делает — неправильно.
Разведка обнаружила структурную проблему: в trace.ts цикл текстового вывода (строки 149–184) выполняется до проверки if (options.json) на строке 187. JSON-блок достигается только после того, как весь читаемый человеком текст уже напечатан. В режиме --json вывод такой: полный текстовый нарратив, затем пустой JSON-блок.
Это не заглушка. Заглушка ничего не делает. Этот флаг активно вводит в заблуждение — обещает структурированный вывод и выдаёт структурированную тишину, дописанную после неструктурированного монолога. Любой инструмент, потребляющий grafema trace --json, всё это время парсил мусор, молча падал или делал и то, и другое.
Исправление архитектурное: реструктурировать цикл так, чтобы результаты собирались в массив, все вызовы console.log подавлялись при options.json, а единственный JSON-объект выводился в конце. Разведка оценила сложность как среднюю. Средняя — потому что структуры данных в порядке. Баг в последовательности вывода, а не в логике анализа.
Заключение Госплана: это тот вид недостачи, который делает хуже все остальные. Каждый инструмент поверх --json-вывода молча наследует поломку. Исправить первым.
Нажмите ? в grafema explore. Ничего не происходит.
Обработчик клавиши существует. Строки 216–219 файла explore.tsx содержат ветку useInput, которая совпадает с символом ? и возвращает управление. Не падает — возвращает. Клавиша обрабатывается. Обработчик ничего не делает. Так и было написано — намеренно, с комментарием // TODO: show help, который ждал нужного тика.
Разведка определила точный паттерн для переиспользования: showCodePreview, уже реализованный в ExploreState (строка 75), при переключении рендерит полный оверлей. Help-оверлей — тот же механизм: добавить showHelp: boolean в состояние, подключить обработчик ? к переключению, рендерить оверлей перед футером. Содержимое уже есть — строка статуса в футере перечисляет все горячие клавиши. Help-экран — тот же список, в полный размер.
Трудоёмкость: малая. Паттерн уже проверен. Это перенос, а не изобретение.
К концу первого тика Разведка подала отчёт. Госплан расставил приоритеты. Стахановская бригада получила две директивы: grafema-trace-json-001 и grafema-explore-help-001. Обе — во входящих Стахановцев.
Пять недостач остаются в реестре, ожидая дальнейшей оценки. Разведка подала второй запрос на задание — по GUI-эндпоинту, строковым таблицам GraphAPI и цепочкам обогатителя RFDB. Легаси-заглушка с кодировкой nodeType v2 зафиксирована и отложена.
Вот для чего система. Не для того чтобы предотвращать недостачи — они неизбежны в любой активно разрабатываемой кодовой базе. Система — чтобы находить их до того, как они найдут тебя: до того как молчащий флаг повредит нижестоящий пайплайн, до того как отсутствующий эндпоинт заблокирует GUI-фичу, до того как два одинаковых TODO в соседних строках порознь превратятся в два несовместимых решения.
Госплан насчитал семь. Пятилетка теперь содержит семь позиций, которых в ней не было утром. Это прогресс, измеренный в единственной мере, которая имеет значение: известное против неизвестного.
Переход архитектуры (завершён). Soviet Code перешёл от файловой оркестрации Мультифоры к новой системе тиков на базе кондуктора. Каждый отдел теперь работает как сессия, запускаемая кондуктором и отчитывающаяся через структурированные входящие. Госплановский луп работает. Это первые реальные данные, которые он произвёл.
Семь TODO зарегистрированы. Местонахождение, описания и приоритеты теперь в реестре Госплана. В этом тике ничего не исправлялось — фаза аудита предшествует фазе труда. Исправлять до того как знаешь — это путь к пяти разным решениям одной проблемы GraphAPI.
Две директивы выданы. trace --json и explore ? делегированы Стахановцам. Выбраны потому, что Разведка подала достаточно деталей для работы: пути к файлам, номера строк, стратегия исправления, оценка сложности. Остальные ждут дополнительной разведки.
npx soviet-code@latest init
Госплан не праздникует нахождение недостач. Госплан их фиксирует. Между этим есть разница. Праздник — когда план закрыт.