docs: address the core budget spec review (#425)

User-Visible: no
Issue: #425
This commit is contained in:
Codex
2026-09-03 00:19:07 +03:00
parent 3df0f1646b
commit 84b5f63cbb
+23 -5
View File
@@ -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/` не ограничиваются: цель — не заморозить размер кода, а сделать рост ядер осознанным.
## Откат
Удаление одного тестового файла и одного мутанта.
## Скоуп / не-скоуп
**В скоупе**: один тест с потолками и храповиком, мутант, строка в