Validate вернул задачу с красным `no-new-any`: шесть строк в новых модулях
диалогов. Все шесть перенесены побайтово из редакторского рантайма — `as any`
в них написан годы назад и в этом диапазоне не менялся. Счёт долга это
подтверждает: явных `any` в `src/**` было 887 и осталось 887.
Гейт мерил «добавленные строки», и для извлечения подсистемы такая мера
ложна: она требует типизации ровно там, где ничего не изменилось. Причём
единственный способ её удовлетворить — дописать `any-ok` в перенесённое тело,
то есть сломать доказательство переноса (тела обязаны совпадать побайтово) ради
зелёного гейта. Это починка задом наперёд.
Теперь строка, дословно удалённая из одного файла диапазона и добавленная в
другой, новым кодом не считается. Бюджет ведётся мультимножеством: два
добавления при одном удалении оставляют одну находку, а перенос с изменённым
отступом переносом не считается — это уже правка. Отчёт печатает, сколько строк
признано перенесёнными, чтобы послабление было видно, а не подразумевалось.
Гейт #342 при этом остаётся собой: новый `any` без удаления-близнеца — находка,
и три новых теста проверяют обе стороны. Мутант
`no-new-any-counts-every-added-line-as-moved` признаёт перенесённой любую
добавленную строку — заявленный тест на этом краснеет.
Отклонение от скоупа ТЗ: `scripts/no-new-any.mjs` в нём не назван. Альтернатива
— шесть `any-ok` в перенесённом коде — стоила бы побайтовой сверки, на которой
держится вся приёмка задачи.
Issue: #592
User-Visible: no