mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
docs(spec): state that i18n is untouched, name the zero case
The spec review found the i18n section missing outright — the analysis comment claimed it was untouched, the document itself said nothing, and a DoR section cannot be inferred from a comment. It now says so explicitly, and adds that the absence of i18n files from the diff is part of the contract rather than an accident. The waived Low is closed too: the old wallChainSegments treated a recorded zero as valid while the new contract requires strictly positive values, so zero is now named in the AC1 examples instead of being derivable from the prose. Issue: #234 User-Visible: no
This commit is contained in:
@@ -153,7 +153,7 @@ Plan-редактор (десктоп, мышь): рисование цепоч
|
||||
поддерживается сегодня и этой задачей не вводится; safety floor
|
||||
`docs/TOUCH-SUPPORT.md` соблюдён по построению, поведение на тач не меняется.
|
||||
|
||||
## 9. Изменяемые файлы
|
||||
## 9. Изменяемые файлы и i18n
|
||||
|
||||
- `src/wall-face-graph.ts` — новая `chainSegmentCms`, `wallChainSegments` без
|
||||
собственного fallback;
|
||||
@@ -165,13 +165,21 @@ Plan-редактор (десктоп, мышь): рисование цепоч
|
||||
- `scripts/mutation-gate.mjs` — три записи (§11);
|
||||
- `docs/CHANGELOG.md`, `docs/CHANGELOG.ru.md`.
|
||||
|
||||
Миграции и compatibility-полей нет: формат не меняется (§4.3).
|
||||
**i18n: не затронут.** Ни одной новой пользовательской строки не добавляется и
|
||||
ни одна существующая не меняется: задача исправляет значение, которое пишется в
|
||||
конфиг, а не текст интерфейса. Файлы `src/i18n/en.json` и `src/i18n/ru.json` в
|
||||
диффе отсутствуют, и их отсутствие — часть контракта: появление там правок
|
||||
означало бы, что скоуп разъехался.
|
||||
|
||||
**Миграции и compatibility-полей нет:** формат не меняется (§4.3), поля
|
||||
`partitions[].cm` и `room_drafts[].segments[].cm` сохраняют тип и смысл,
|
||||
`docs/CONFIG-COMPATIBILITY.md` править не требуется.
|
||||
|
||||
## 10. Acceptance criteria
|
||||
|
||||
| AC | Требование | Доказательство |
|
||||
|---|---|---|
|
||||
| AC1 | `chainSegmentCms` возвращает массив длины `segmentCount`, все элементы `> 0`, для любых входов, включая пустой `recorded`, дырки в середине, мусор (`NaN`, `-5`, `null`) | unit |
|
||||
| AC1 | `chainSegmentCms` возвращает массив длины `segmentCount`, все элементы `> 0`, для любых входов, включая пустой `recorded`, дырки в середине, мусор (`NaN`, `-5`, `null`) и **явный `0`** — прежняя `wallChainSegments` считала ноль валидным, контракт §6 сдвигает границу на `> 0`, и это должно быть закреплено примером, а не выводиться из текста | unit |
|
||||
| AC2 | Отсутствующая запись наследует предыдущий валидный отрезок; при отсутствии предыдущего — `activeCm`; при отсутствии и его — `defaultCm` | unit |
|
||||
| AC3 | Превью и запись дают **идентичный** вектор толщин на одних входных данных — проверяется через общую функцию, а не сравнением двух формул | unit |
|
||||
| AC4 | Незамкнутая цепочка из трёх отрезков, нарисованных 30 см при пропуске записи последнего, сохраняется как `30, 30, 30`, а не `30, 30, 15` | unit + smoke |
|
||||
|
||||
Reference in New Issue
Block a user