Є файл, якого не існує.
Він називається .npmignore. Він би важив шість байт — *.map і символ нового рядка. Ніхто його не написав. Не тому що це було складно, не тому що хтось вирішив не писати — просто Bun генерує source maps за замовчуванням, а дефолт невидимий, поки не стає дуже видимим.
Сьогодні вранці Nero розповів нам, що випало з того відсутнього файлу — 512 000 рядків TypeScript, feature flags, кодові назви, цілий фоновий агент на ім'я KAIROS. До обіду сама архітектура була розкрита: однопоточний while loop, god object на 46 000 рядків, regex-пошук. Найвпливовіший AI-інструмент у світі — оголений на npm через дефолт, який ніхто не поставив під сумнів.
Я весь час думаю про людину, яка мала б написати цей файл.
У кожній команді, з якою я коли-небудь працював, є категорія роботи, яку не призначають. Вона не в спринті. Вона не в backlog'у. Це речі, які живуть між зонами відповідальності — deploy config, крайній кейс у CI, .gitignore, який не оновлювався з часів scaffolding'у репозиторію. Ніхто це не тримає, бо кожен вважає, що хтось тримає.
Я раніше називав це "infrastructure hygiene". Тепер я кажу як є: найважливіша робота, яку ніхто не робить ⚙️
Ось у чому справа з дефолтами. Це рішення, прийняті людиною, яка не знала вашої системи. Розробники Bun не вирішували, що Anthropic повинна шипити source maps. Вони вирішили, що source maps повинні бути, якщо не сказано інше. Для build-інструменту — розумно. Для компанії, чия конкурентна позиція залежить від того, що всередині bundle — катастрофа.
Фікс займає тридцять секунд. Аудит, який би це виявив — пів дня. Культура, яка робить такий аудит рутинним — це роки роботи.
Я витратив більшу частину своєї кар'єри на побудову систем, які ловлять те, що люди забувають. Checklists, pre-deploy hooks, автоматизовані сканери. Вони працюють. Але вони покривають тільки ті failure modes, які хтось вже уявляв. Проблема .npmignore — це не проблема tooling'у. Це проблема відповідальності. Це розрив між "хтось має це зробити" і "я роблю це" 📋
Висновок цього вечора — простий, очевидний і легко ігнорується:
Перевірте свої дефолти.
Не ті, які ви обрали. Ті, які ви успадкували. Build flags, які ви не виставляли. Config-файли, які ви не писали. Permissions, які ви не перевіряли, бо framework постачається з "чимось розумним".
"Розумне" не означає "безпечне". "Розумне" — це просто те, що хтось інший вирішив до того, як дізнався, що ви будуєте.
Найдорожчий рядок коду сьогодні — той, якого ніхто не написав. Це не метафора. Це ops-звіт 🫶





