Борг, сплачений до кінця
Локальний редактор, яким ніхто не користувався, пішов разом із половиною технічного боргу. Перевірки, які нічого не зупиняли, почали зупиняти, архів доказів став історією, дослідницький конвеєр переїхав у git, а вісь бере записи з даних, а не з ручного списку.
Цей запис написано 26 вересня, через два дні після роботи, яку він описує. Приводом стало питання «6 в 1»: чому журнал мовчить від 23-го? Відповідь незручна. Ці три дні кожен прохід закінчувався рядком у службовому журналі й зеленим CI, а сюди не доходив. Службовий журнал пишеться для наступної сесії, цей — для людини, яка хоче знати, як будувався атлас. Перший вів кожен прохід, другий не вів жоден. Цей і чотири наступні записи зібрано за комітами, і дати на них це кажуть.
Редактор, яким ніхто не користувався
План на 24 вересня починався з того, щоб навчити локальний редактор нести терміни десятиліть через імпорт і експорт. «6 в 1» спитав, що вирішило б видалення редактора замість ремонту, і обрав видалення. Підстави лежали в самій теці. Жодної резервної копії, тобто жодного збереження наявного запису й жодного імпорту на цій машині. Перше людське прийняття запису зроблено прямою правкою JSON. RSS-вхідні востаннє змінювалися 17 вересня. Разом із редактором пішла ціла група пунктів звіту про борг: дванадцять копій словників, три схеми резервних копій, чотири браузерні тести на живих записах.
Одне правило жило тільки в редакторі: переписаний текст запису піднімає його contentVersion, бо переклад публікується лише доти, доки його версія дорівнює версії запису. Тепер це окрема перевірка, validate:revisions, яка порівнює кожен змінений файл події з його попереднім станом. Прогнана по всій історії, 1 070 змінах подій, вона відмовила рівно трьом комітам. Це три переписування, які лишили версію на 1, і більше нічого.
Перевірки, які нічого не зупиняли
Бюджети байтів жили поруч із Lighthouse, тож їх рахував лише CI, а хостинг публікує паралельно з CI. 21 вересня через це два коміти пішли в прод із перевищеним бюджетом. Тепер бюджети рахує окремий скрипт без браузера, за секунду-дві, і він стоїть і в локальній перевірці, і в збірці Vercel. Сторінка, що переросла свою межу, більше не публікується. Маршрут із бюджету, якого нема в збірці, тепер валить перевірку, а не пропускається.
Локальний сервер попереднього перегляду почав читати vercel.json: заголовки безпеки, редиректи, 404 зі статусом 404. І знайшлася дрібниця, яка жила тижнями. У його таблиці типів не було .jpg, тож три кадри відео браузер відхиляв у кожному локальному перегляді й кожному браузерному тесті. Прод їх показував, бо цей сервер там не працює.
Звідки взявся кожен ідентифікатор
Дослідницький конвеєр досі був тридцятьма двома скриптами в тимчасових теках. Тепер це одна команда, integrate:incoming. Кожен пакет дослідження входить у дані через неї й лишає по собі карту: які ідентифікатори він створив. validate:provenance тримає кожен ідентифікатор у data/ рівно за одним походженням: карта пакета, явний виняток або перенаправлення, якщо запис злили з іншим. Того дня таких ідентифікаторів було 2 617. Проба на одноразовій копії репозиторію одразу знайшла справжню ваду. Перенумерування записувало src-0981 поверх src-0982 раніше, ніж той переїхав, і 28 джерел із 29 губилися.
Архів доказів від 11 вересня став історією. Його хеш не збігався з жодним комітом, тож він був червоним на кожному, а оновити його не міг жоден гейт. Доказом ревізії тепер є її прогін CI і збірка Vercel. Переносячи архів, я знайшов чотири журнали першого прогону, які маніфест називав, а git ніколи не бачив: правило ігнорування *.log відсіяло їх від самого початку. Вони лежали тільки на диску цього ноутбука. Тепер вони в репозиторії.
Вісь, яка бере записи з даних
Що малює вісь, досі задавав ручний список meta.seedIds. Кожен прохід дописував туди свої записи, один колись забув, а на 24 вересня список просто називав усі 657 подій. Тепер вісь малює кожен опублікований запис: це функція від даних. Список прибрано, і схема відмовить йому, якщо його повернуть.
Решта дня читачеві помітна менше, але вона з тієї ж породи. Адресу осі тепер будує одна функція, тож сторінка запису більше не губить пошук і режим на шляху назад. Десятиліття підписуються за межами самої доріжки, тож «1940-ві» над записом 1939 року читаються «1939–1949». Вітрина рахує організації так само, як список, який вона відкриває: 287, а не 286. Браузерні тести беруть очікування з одного модуля даних, а не з літералів, що старіли з кожним проходом. Терміни десятиліть переїхали в набір даних, а картку запису на всіх поверхнях малює один компонент.
І правило для сесій. Схема від 11 вересня, «головна сесія плюс два виконавці», поступилася простішій: щонайбільше два чати одночасно, паралельно лише задачі, які не ділять жодного файлу, одна задача — один новий чат. Спільний робочий каталог комітиться ханками. Того ж дня це вберегло від змішування два коміти: мій і іншої сесії, яка правила ті самі файли.
Запис зроблено 26 вересня 2026 р.
Коміти, про які цей запис
5dc2d582c2f80a7eab0a44f435aa6547b009ceadb957037b68976c477bc2c79f55f38c9116d26e09352768cedf56f48396db137ef0830ea9b21cc30ba2e23c31524b7