Рантайм іде з репозиторію, а контракт замерзає
Через сорок хвилин після першого коміту: двійковий файл Node на 90 МБ прибрано з дерева залежностей, а код пошуку, який ніде не рендериться, переїхав туди, де його можна чесно зберігати.
За сорок хвилин після того, як репозиторій отримав історію, приземлилося п’ять змін. Дві з них варті запису.
Рантайм — не залежність
Проєкт вимагав Node 24 і сам же постачав Node 24 як npm-пакет node@24.21.0, додаючи 90 МБ двійкового файлу до кожної інсталяції. Ще й ламався так, що це важко було побачити: POSIX-заглушка пакета в node_modules/.bin/node — це файл-порожняк без розширення, тож npm-скрипти, запущені з Git Bash, падали з line 1: This: command not found, тоді як ті самі скрипти з PowerShell ішли через node.cmd і працювали.
Залежності більше немає. Рантайм береться з середовища, .nvmrc фіксує 24.21.0 там, де його прочитають і nvm-windows, і setup-node у GitHub, робочий процес CI дивиться на цей файл замість повторювати число, а @types/node піднято до тієї версії, що справді використовується.
Зафіксована версія в одному місці варта більшого, ніж вкладена копія в кожному клоні.
Код, який тримають навмисно
Помічники пошуку й фільтрів були написані, протестовані — і відкладені: інтерфейс, якому вони належали, у цьому вигляді не виходив. Вони лежали в src/domain/atlas.ts поряд із функціями локалізації, якими сайт справді рендериться, і ніщо у файлі не відрізняло живий код від контракту, що чекає на відкладений інтерфейс.
Це саме той стан, у якому добрий код видаляє хтось, хто прибирає, — або, гірше, описує в README як наявну можливість.
parseQuery, serializeQuery, filterEvents, normalizeSearch, queryForEvent, ensureEvent і emptyQuery переїхали в src/domain/deferred-search.ts під шапку, яка каже, чому вони там. Та сама шапка фіксує те, що вкусить пізніше: острівець стрічки сам розбирає й складає параметри часу та події, дублюючи частину цього модуля, і коли пошук повернеться, обидва мають зійтися тут, а не розходитися далі. Інструкції проєкту отримали рядок, що забороняє і видаляти модуль, і видавати пошук за доступний.
Нічого з того, що імпортує сайт, не рухалося. Поведінка не змінилася — у цьому й сенс: уся зміна про те, що зможе зрозуміти пізніший читач.
Поруч із цим форматування стало перевіркою, а не звичкою, увімкнено звіт про покриття, а репетиція чистого розгортання навчилася видаляти власну тимчасову копію, коли проходить.
Запис зроблено 20 вересня 2026 р.
Коміти, про які цей запис
e23e09b4b5b9bc02be53f5262505e522776