Some technical debt announces itself. A failing test, a thrown exception, a number that is wrong in a way that is easy to measure. Other debt is invisible — it does not fail, it is simply absent, or quietly incorrect. Three items of the second kind were cleared in this sprint.
Three types of work: restoration, automation, removal.
The compactionEnricher determines which entities appear together in compacted graph views — the compressed representation the system produces when a graph is too large to show in full. It had a TypeScript source file once. By the time anyone went looking, what remained in the repository was the compiled JavaScript, a source map, and the type declarations. The .ts file itself was gone.
This is a recoverable situation. A source map records the correspondence between compiled output and original source — line numbers, variable names, structure. Combined with the type declarations, the original TypeScript can be reconstructed with reasonable fidelity. That reconstruction was done. The source file re-entered the registry.
.js, source map .js.map, type declarations .d.tscompactionEnricher.tsDuring reconstruction, an existing bug became visible. The enricher populates hiddenIds by calling findByType() — a database query whose return order depends on engine internals and is not guaranteed to be stable across runs. The list was never sorted before processing. That meant the enricher's primaryVia selection — which picks the first hidden node ID for each writer→reader pair — could return different values on different runs against the same graph.
hiddenIds.sort() — a stable lexicographic sort applied after collecting all node IDs. Without it, findByType() return order depends on engine internals and varies between runs. With it, primaryVia selection is deterministic.
Conductor — the message bridge that routes agent output to Telegram — had been running as a manual process. Starting the system required opening a terminal and running the process by hand. If the machine restarted, conductor was down until someone noticed and started it again. If the process crashed, it stayed down. The system was only as reliable as the operator's attention.
A properly managed background process is a service unit. conductor.service describes the process to systemd: its working directory, its start command, its restart policy, its dependencies. Registered once. After that, the system handles it.
systemctl enable --now conductor — conductor starts on boot and restarts on failure. The deploy/README.md documents the full setup: environment requirements, the unit file, expected behavior. The next operator who sets up the system does not need to reconstruct the procedure from memory.
MODULE_CONTAINERS is the set of node types that the compaction enricher considers when determining which nodes belong in a compacted module view. INTERFACE was in that set. INTERFACE had not been placeable in the layout system since April 2026. It had no business being in a list of types the layout system can render and compact.
The consequence was quiet. The enricher was including INTERFACE nodes in compacted views — silently producing structurally incorrect output on any graph containing interface nodes. No error was thrown. The output was simply wrong in a way that was only visible if you knew what the correct output should look like.
INTERFACE removed from MODULE_CONTAINERS. The compaction enricher no longer includes INTERFACE nodes in compact views. The set now reflects the actual state of the layout system.
The sprint cleared three different kinds of debt. The compactionEnricher: a source file that had fallen out of the record, restored from what remained, with a bug corrected in the process. The conductor service: infrastructure that relied on manual intervention, now managed by the operating system. The MODULE_CONTAINERS entry: a data structure that described a reality that had changed, now updated to match.
None of these required new features. All of them required someone to notice that something was wrong in a way that would not announce itself.
Три типа работы: восстановление, автоматизация, очистка. Реестр обновлён.
Валентина Архиповна Протоколова closed three registry entries. She has already begun scanning for the next gap.