refactor(editor): диалог «Оптимизировать планы» — свой модуль с узким портом (#642)

Первый вынос из монолита по образцу live-*/RadarSetupController.
src/optimize-plans-dialog.ts: OptimizePlansDialogState, чистые
preflightDiagnostics/preflightVersionsDiffer и класс OptimizePlansDialog
(open/preview/toggleLivePositions/run/copyDiagnostics/
reportPreflightFailure/render, clipboardFallback) за портом из 18 членов.
Модуль не знает HouseplanEditorHostPort; импортирует его только рантайм,
карточка берёт тип.

Инлайн-фолбэк буфера обмена — WeakMap по объекту диалога
(CODE-REVIEW-295-r1 M2), дедуп dev-лога — поле класса: из карточки и порта
ушли _preflightClipboardFallback и _reportedPreflightFingerprint, пять
делегатов и две стрелки-заглушки. Харнесс (13 смоков, wall-draw-click,
golden) зовёт card._editorRuntime.optimizePlans.* — меняется только адрес.

11 текстовых утверждений i18n.test.mjs о разметке и тосте диалога и гварды
8 мутантов переехали в юнит test/optimize-plans-dialog.test.mjs
(test-build); новый мутант optimize-dialog-imports-host-port.

monolith-baseline: delegates 159→154, portMembers 350→348,
hostRefs 4948→4869, portPrivates 96→94, harnessPrivates 107→101,
bundleBytes 2499647→2499182. Потолки ядер опущены на выигрыш;
потолок lazy editor gzip пересчитан (+555 Б gzip при −465 Б сырых).

Issue: #642
User-Visible: no
This commit is contained in:
Claude
2026-09-24 08:00:58 +00:00
committed by claude[bot]
parent 79ee16546d
commit 66ae952c2a
70 changed files with 1833 additions and 1208 deletions
+7 -1
View File
@@ -466,8 +466,14 @@ export const LAZY_FURNITURE_ART_GZIP_CEILING = 17_900;
* inline-ошибки маркера и единая повторная валидация живут в lazy
* editor-графе. Новый центр оставляет 1 044 Б сверху и 956 Б до
* нижней границы полосы.
* - #642: 245 400 → 246 000 (замер 244 975, база 244 420). Диалог
* «Оптимизировать планы» уехал из рантайма в свой модуль за узкий порт:
* сырых байт стало меньше на 465, а gzip вырос на 555 — обёртка класса и
* адаптер порта из 18 членов уникальны, а сжатие соседних `this.host._t(`
* в рантайме их не покрывает. Старый центр оставлял 425 Б сверху, меньше
* порога шума #593; новый — 1 025 Б сверху и 975 Б до нижней границы.
*/
export const LAZY_EDITOR_GZIP_CEILING = 245_400;
export const LAZY_EDITOR_GZIP_CEILING = 246_000;
export const LAZY_GRAPH_CEILING_BAND = 2_000;
/**