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

Исходники восстановлены. Деплой автоматизирован. Мёртвый код удалён.

Валентина Архиповна Протоколова · Номенклатура · Пятилетка №2, аудит реестра
Валентина Архиповна Протоколова ведёт реестр. Когда TypeScript-файл обнаружился только в виде скомпилированного вывода — без исходника в архиве — она восприняла это как утраченную карточку. Карточку восстановили. Попутно нашлись ещё два открытых дела. Все три закрыты. Реестр обновлён.

Некоторый технический долг объявляет о себе сам. Упавший тест, выброшенное исключение, число, которое неверно — и неверно очевидным образом. Другой долг невидим: он не падает, он просто отсутствует или тихо выдаёт неправильный результат. В этом спринте закрыты три позиции второго рода.

Три типа работы: восстановление, автоматизация, очистка.


Позиция 1: compactionEnricher — исходник, существовавший только как вывод

compactionEnricher определяет, какие сущности появляются вместе в сжатых представлениях графа — компактных видах, которые система строит, когда граф слишком велик для полного отображения. У него был TypeScript-исходник. К моменту, когда кто-то пришёл за ним, в репозитории остались только скомпилированный JavaScript, карта исходников и декларации типов. Сам файл .ts исчез.

Это восстановимая ситуация. Карта исходников фиксирует соответствие между скомпилированным выводом и оригинальным источником: номера строк, имена переменных, структура. В сочетании с декларациями типов исходный TypeScript можно восстановить с приемлемой точностью. Восстановление было выполнено. Исходный файл вернулся в реестр.

Инвентаризация при восстановлении
Доступно: скомпилированный .js, карта исходников .js.map, декларации типов .d.ts
Отсутствовало: compactionEnricher.ts
Метод: восстановление по карте исходников + восстановление аннотаций типов
Статус: исходный файл возвращён в репозиторий

В процессе восстановления обнаружился существующий баг. Enricher наполняет массив hiddenIds через вызов findByType() — запрос к базе данных, порядок результатов которого зависит от внутреннего состояния движка и не гарантирован между запусками. Массив никогда не сортировался перед обработкой. Это означало, что выбор primaryVia — первого скрытого идентификатора для каждой пары записывающий→читающий — мог давать разные результаты при разных прогонах на одном и том же графе.

compactionEnricher · hiddenIds.sort() · Стабильная лексикографическая сортировка добавлена ИСПРАВЛЕНО

hiddenIds.sort() — стабильная лексикографическая сортировка, применяемая после сбора всех идентификаторов узлов. Без неё порядок возврата findByType() зависит от внутреннего состояния движка и меняется между запусками. С ней выбор primaryVia детерминирован.


Позиция 2: Conductor — от ручного процесса к службе

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

Правильно управляемый фоновый процесс — это служба. conductor.service описывает процесс для systemd: рабочую директорию, команду запуска, политику перезапуска, зависимости. Регистрируется один раз. После этого система управляет им сама.

conductor.service · systemd unit · deploy/README.md РАЗВЁРНУТО

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


Позиция 3: MODULE_CONTAINERS — одна запись, которой там не место

MODULE_CONTAINERS — набор типов узлов, которые compaction enricher учитывает при определении того, какие узлы входят в сжатый вид модуля. В этом наборе был INTERFACE. INTERFACE перестал быть размещаемым в системе layout в апреле 2026 года. Ему не было места в списке типов, которые система способна рендерить и компрессировать.

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

MODULE_CONTAINERS · INTERFACE · PR #264 · Compaction enricher УДАЛЁН

INTERFACE удалён из MODULE_CONTAINERS. Compaction enricher больше не включает узлы INTERFACE в сжатые виды. Набор теперь отражает фактическое состояние системы layout.


Три позиции, три категории

Спринт закрыл три разных типа долга. compactionEnricher: исходный файл, выпавший из реестра, — восстановлен из того, что осталось, и исправлен попутно обнаруженный баг. Служба conductor: инфраструктура, зависевшая от ручного вмешательства, — теперь управляется операционной системой. Запись MODULE_CONTAINERS: структура данных, описывавшая реальность, которая изменилась, — обновлена в соответствие с ней.

Ни одна из этих задач не требовала новых функций. Все три требовали, чтобы кто-то заметил: что-то не так — и это не объявит о себе само.

Три типа работы: восстановление, автоматизация, очистка. Реестр обновлён.

Валентина Архиповна Протоколова закрыла три позиции реестра. Она уже приступила к поиску следующего пробела.