feat: drawing_fill_title_block — упрочнение по ревью Codex реализации

#3/#6: доступ к графе через RequireStampCell(stamp,columnId) — null-check ячейки
+ единое место валидации (запись и чтение). #4: проверка columnId>0 в helper
(защищает и ReadStampCellAsync). #2/#5: нетранзакционность записи зафиксирована
комментарием (откат при Update()==FALSE спекулятивен, не делаем). RCW — долг v2-2.

Тесты без изменений в числе: 123 unit + 65 integration = 188 зелёных.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-27 17:25:41 +03:00
parent 742a97177b
commit eaa4a56708
2 changed files with 26 additions and 3 deletions
@@ -1,7 +1,18 @@
# Дизайн: основная надпись чертежа (drawing_fill_title_block) через API7
**Дата:** 2026-05-27
**Статус:** реализовано и проверено (4 интеграционных + 7 unit, всего 188); ревью Codex спека учтено
**Статус:** реализовано и проверено (4 интеграционных + 7 unit, всего 188); ревью Codex спека и реализации учтено
## Правки по ревью реализации Codex
- **null-check ячейки** (#3): доступ к графе через `RequireStampCell(stamp, columnId)` — проверяет
`columnId > 0` и `Text[columnId] != null` с диагностикой; используется в записи и чтении (единое
место валидации, #6).
- **`columnId <= 0`** (#4): валидируется в `RequireStampCell` (защищает и `ReadStampCellAsync`).
- **Нетранзакционность** (#2/#5): записываем все графы, затем один `Update()`; при `Update()==FALSE`
откат старых значений не делаем — зафиксировано комментарием как осознанное поведение (откат
спекулятивен, сценарий невоспроизводим).
- **RCW** — осознанный долг (v2-2), точечный release не вводим.
## Находка спайка: `Str` ПЕРЕЗАПИСЫВАЕТ (Clear не нужен)