diff --git a/docs/architecture-audit-2026-10.md b/docs/architecture-audit-2026-10.md index b39cc64..d08c9da 100644 --- a/docs/architecture-audit-2026-10.md +++ b/docs/architecture-audit-2026-10.md @@ -58,12 +58,12 @@ `$derived.by`; ручной сброс `maskResults = {}` в `init()` удалён — derived пересчитывается сам по смене `steps`/`source`/`maskOnKeys`. -### M2. `init()` в эффекте не сбрасывает часть состояния +### M2. `init()` не сбрасывал часть состояния — СДЕЛАНО (2026-10) -`SchemaToolView.svelte:514-516` + :218-254: `$effect(() => init())` — -синхронизация состояния по смене пропсов (анти-паттерн из документации Svelte -5). При этом `touchedByStep` (:105) и `lastAxis` (:107) в `init()` не -сбрасываются — при смене хоста остаются метки от прежних ключей шагов. +`SchemaToolView.svelte`: `init()` теперь очищает `touchedByStep` и `lastAxis` — +метки от ключей шагов прошлого хоста больше не протекают в новую цепочку. +Переработка самого паттерна `$effect(() => init())` — часть H1, отдельно не +делалась. ### M3. `SchemaPreview.svelte` — интерфейс из ~40 пропсов diff --git a/web/src/lib/components/schema/SchemaToolView.svelte b/web/src/lib/components/schema/SchemaToolView.svelte index 057d6e7..7160097 100644 --- a/web/src/lib/components/schema/SchemaToolView.svelte +++ b/web/src/lib/components/schema/SchemaToolView.svelte @@ -275,6 +275,10 @@ verdictVars = undefined; displayError = null; maskOnKeys.clear(); + // Marks are keyed by step.key from the previous host; keep them and + // stale keys leak into the new chain's fields. + touchedByStep.clear(); + for (const k of Object.keys(lastAxis)) delete lastAxis[k]; } function setStepValue(