diff --git a/docs/specs/425-core-file-budget.md b/docs/specs/425-core-file-budget.md index 213aaf2a..0469a1ee 100644 --- a/docs/specs/425-core-file-budget.md +++ b/docs/specs/425-core-file-budget.md @@ -9,6 +9,24 @@ - Ревизия: 1 (2026-09-03) - Заменяет #34 ([HP-ARCH-01]), который закрывается вместе с этой задачей +## Сценарий + +Продуктового сценария у задачи нет — она инженерная, и это сказано явно, а не +подразумевается. Разработчик добавляет функцию, кладёт её в ядро, потому что +там уже всё, и ядро прибавляет ещё пятьсот строк. Никто не против: каждый шаг +разумен, а счёт никто не ведёт. Через год 42% кода снова в двух файлах, и +следующая функция стоит дороже предыдущей. + +## Что человек увидит до и после + +Пользователь — ничего: продуктовый код задача не трогает. + +**До**: ядра растут молча, и узнать об этом можно только из аудита, если кто-то +удосужится посчитать. +**После**: рост выше потолка роняет `npm test` и называет цену числом, а +уменьшение требует опустить потолок — то есть выигрыш фиксируется, а не +испаряется. + ## Почему не проект, а ограничитель #34 заведён 09.08, за 25 дней не сдвинулся и шестой аудит подряд отмечается как «без движения». При этом декомпозиция идёт — но не как проект, а попутно: файлов в `src/` было 18 на v1.58, сейчас больше сотни; `houseplan-editor-runtime.ts` выделен из ядра между v1.66 и v1.69; за последние недели отдельными модулями вышли `support-feedback.ts`, `command-stack.ts`, `device-area-relocation.ts`, `danger-confirm.ts`. @@ -42,13 +60,13 @@ - **AC1**. Рост любого из двух ядер выше потолка роняет `npm test` с сообщением, называющим файл, потолок и превышение в строках. Доказательство: мутант, добавляющий строки в `houseplan-card.ts`, прогнанный штатным раннером. - **AC2**. Уменьшение ядра больше чем на 250 строк ниже потолка тоже роняет тест — с требованием опустить потолок. Доказательство: юнит на чистой функции. - **AC3**. Изменение в пределах люфта тест не трогает. Доказательство: тот же юнит. -- **AC4**. Потолки записаны числами в самом тесте: любое их изменение видно в дифе и проходит ревью как решение, а не как побочный эффект. +- **AC4**. Потолки записаны числами в самом тесте: любое их изменение видно в + дифе и проходит ревью как решение, а не как побочный эффект. Доказательство: + ревью кода — в тесте нет чтения потолков из внешнего источника (файла, + переменной окружения, вычисления от текущего размера), и юнит на то, что + функция принимает потолки аргументом, а не добывает их сама. - **AC5**. Гейт судит только два ядра. Остальные файлы `src/` не ограничиваются: цель — не заморозить размер кода, а сделать рост ядер осознанным. -## Откат - -Удаление одного тестового файла и одного мутанта. - ## Скоуп / не-скоуп **В скоупе**: один тест с потолками и храповиком, мутант, строка в