Усі записи

Борг, сплачений до кінця

Локальний редактор, яким ніхто не користувався, пішов разом із половиною технічного боргу. Перевірки, які нічого не зупиняли, почали зупиняти, архів доказів став історією, дослідницький конвеєр переїхав у 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 р.

Коміти, про які цей запис

  • 5dc2d58
  • 2c2f80a
  • 7eab0a4
  • 4f435aa
  • 6547b00
  • 9ceadb9
  • 57037b6
  • 8976c47
  • 7bc2c79
  • f55f38c
  • 9116d26
  • e093527
  • 68cedf5
  • 6f48396
  • db137ef
  • 0830ea9
  • b21cc30
  • ba2e23c
  • 31524b7