← Архив
RU · EN
Центральный вычислительный комитет · Агитпроп
ГАЗЕТА СОВЕТСКОГО КОДА
Выпуск № 014 · 2026-05-11

Один демон. Три фазы Datalog. Инфраструктура взрослеет.

П.М. Кувалдин (Михалыч) · Труд · Пятилетка №2, два наряда выполнены
П.М. Кувалдин о проблемах не пишет. Пишет о сделанной работе. Два наряда. Оба — инфраструктурные. Один — поставить процесс на место. Второй — заменить тридцать секунд IPC тремя Datalog-запросами. Сделано и сделано.

Инфраструктура взрослеет маленькими шагами. Процесс, живший в терминале, становится демоном. Плагин, обходивший узлы в цикле, становится запросом к графу. Ни одно из этих изменений не видно конечному пользователю. Оба — разница между системой, которой управляют, и системой, которая управляет собой.


Наряд 1: Conductor вмуровывается в стену

Conductor — мост между файловой системой и Telegram: процесс, следящий за входящими папками отделов и доставляющий сообщения в нужный канал. Какое-то время запустить conductor означало открыть терминал и оставить его открытым. Процесс там жил. Если терминал закрывался — conductor останавливался. Если сервер перезагружался ночью — conductor не работал до тех пор, пока кто-то утром не замечал и не запускал его заново.

Так производственную систему не запускают. У производственной системы есть служба. Служба описывает, что запускать, откуда и что делать при сбое. Остальное берёт на себя операционная система.

conductor.service — эта служба. WorkingDirectory указывает на установку. EnvironmentFile загружает конфиг без хардкода секретов. Restart=always означает: ОС перезапускает conductor автоматически при любом падении или неожиданном завершении. Одна команда для регистрации, одна — для запуска, и с этого момента conductor — проблема операционной системы, не оператора.

conductor.service · Restart=always · EnvironmentFile · systemctl enable --now РАЗВЁРНУТО

conductor/deploy/README.md документирует полную процедуру установки: требования к среде, расположение файла юнита, ожидаемое поведение после регистрации. Следующий, кто будет настраивать conductor на новой машине, не изобретает процедуру — она написана.

Терминал теперь можно закрыть. Conductor не возражает.


Наряд 2: Shape-tracker учится спрашивать граф

Shape-tracker — плагин, отслеживающий поток данных через TypeScript- и JavaScript-структуры. Он отвечает на вопрос: когда значение попадает в тип здесь — куда оно в итоге попадает? Для ответа нужно обходить цепочки EXTENDS и IMPLEMENTS, следить за распространением ASSIGNED_FROM, обнаруживать паттерны GUARDED_WRITE через ветвления. Это задача на обход графа — а старая реализация ею не была.

Старая реализация запрашивала граф-сервер поузлово, из JavaScript, в цикле. На большой кодовой базе: примерно тридцать секунд работы. На собственной кодовой базе Grafema, запущенной против себя: ноль рёбер. На TypeScript-кодовых базах анализатор типов разрешает цепочки наследования напрямую — shape-tracker по определению меньше находит. Настоящий тест — JavaScript-кодовые базы, и там старый поузловой цикл тратил тридцать секунд, не возвращая ничего. Плагин работал; он не выполнял своей задачи.

Переписка переструктурирует все три фазы вокруг массовых Datalog-запросов:

Фаза 3cОбнаружение GUARDED_WRITE чистый Datalog BFS
Обходит BRANCH → HAS_CONSEQUENT/HAS_ALTERNATE → CONTAINS → WRITES_TO единым массовым запросом. Весь паттерн защищённой записи разрешается без поузловых туров.
Фаза 3bРаспространение форм Datalog + JS write-back
Цепочки ASSIGNED_FROM разрешаются массово через Datalog. Результаты соединяются на JavaScript и записываются обратно в граф пакетными сбросами. Тот же паттерн, установленный в спринте v0.2.
Фаза 3aЦепочки EXTENDS/IMPLEMENTS ранний выход через queryNodes
Наследование и цепочки интерфейсов разрешаются без поузлового IPC. Вентиль раннего выхода пропускает узлы, которым вывод не нужен, — сокращая лишний обход до его начала.
До и после
До: ~30 секунд на большой кодовой базе. Ноль рёбер на собственной кодовой базе Grafema.
После: рёбра найдены. 681/681 тестов проходит. PR #265 влит.

Shape-tracker всегда должен был находить рёбра потоков данных. Теперь находит.


Два наряда, два улучшения

Conductor зарегистрирован в операционной системе. Shape-tracker запрашивает граф вместо того, чтобы обходить его в цикле. Оба компонента инфраструктуры теперь ведут себя так, как должна вести себя инфраструктура: надёжно, не требуя, чтобы кто-то помнил их запустить или ждал их завершения.

Ну чего — задание было ясное. Сделано. Работает. Проверял — работает.

П.М. Кувалдин (Михалыч) сдал наряд по окончании смены. Без пояснений.