From 55db16df6e51027a81aaf56de6cd08bbf19c3b77 Mon Sep 17 00:00:00 2001 From: Sergey Matyunin Date: Mon, 24 Aug 2026 22:02:46 +0300 Subject: [PATCH] docs(spec): add resize user contract Issue: #298 User-Visible: no --- .../298-resize-wall-thickness-carrier.md | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/docs/specs/298-resize-wall-thickness-carrier.md b/docs/specs/298-resize-wall-thickness-carrier.md index 668da6a8..bb48e62e 100644 --- a/docs/specs/298-resize-wall-thickness-carrier.md +++ b/docs/specs/298-resize-wall-thickness-carrier.md @@ -13,7 +13,19 @@ - **Связано:** #253, #277, #289, #291, #293, #297, `docs/RESIZE.md`, `docs/WALL-THICKNESS.md`, `docs/CANVAS.md` -## 1. Сценарий и подтверждённая причина +## 1. Персона, поверхность, момент и видимый результат + +Персона — администратор дома. Поверхность — desktop Plan editor, инструмент +Resize; момент — обычный ресайз стены готового плана. Повреждение копится +незаметно и может проявиться лишь через несколько следующих правок или дней. + +**До:** после серии обычных ресайзов случайная стена в другом месте плана вдруг +рисуется другой толщиной или теряет рабочую ручку, хотя её никто не трогал. +**После:** ресайз либо проходит внешне как раньше, либо в редком неоднозначном +случае заканчивается прежним сообщением об ошибке без изменения плана, но +никогда не портит другую стену. + +### Подтверждённая причина Пользователь безопасно сдвигает одну стену комнаты. Moving wall едет параллельно себе, а две соседние стены меняют длину. После жеста визуально всё @@ -147,6 +159,12 @@ handle disabled до pointer capture. Непредсказуемый runtime rej уже существующее сообщение `resize.commit_failed`; новый persisted reason или новый UX в этой задаче не вводится. +### UX и i18n + +Новых контролов, состояний и текстов нет. Enabled/disabled handle, toast и +доступные имена сохраняют существующий контракт #277/#293; новых RU/EN ключей +не добавляется. Меняется только атомарность данных за прежним жестом. + ## 6. Scope ### Входит @@ -223,6 +241,9 @@ midpoint на продолжении за пределами edge; endpoint на настоящая off-grid coordinate дальше `LATTICE_NOISE_STEPS`; conflicting shared destinations. Каждый negative candidate отклоняется до сохранения. +**Доказательство:** table-driven unit pure carrier preflight плюс integration +test отказа candidate builder до мутации preview/config. + ### AC6. Шесть edit-walk запусков больше не несут этот долг Проходят: @@ -248,6 +269,9 @@ Valid pointer drag показывает exact candidate до release, затем rooms/walls/open spans; Redo возвращает тот же exact candidate. Forced carrier failure даёт ноль writes/history и существующую локализованную ошибку один раз. +**Доказательство:** production-bundle pointer smoke с чтением DOM preview, +persisted config и history до release, после commit, Undo/Redo и forced reject. + ### AC8. Мутационный страж Mutation возвращает proportional `t` mapping для interior endpoint либо