13 KiB
CODE-REVIEW-608-r2
- Issue: #608 «Числовые поля со слайдером (rangeLine) клампят каждый символ»
- Этап: code (PROCESS.md §2.7)
- Заход: r2 · блокирующих циклов израсходовано 1 из 4
- Материал:
edfe8af52ab98ddd3fcee21ae594dc943915e1c0(рабочая копия уже на нём); диапазон против r1 —git diff 8a4ecdea632e776e8b17df3ee1690a0beb8af8c3..HEAD(два коммита:0d969a53— публикация конвейером документа r1,edfe8af5— правка автора по M1).
Скоуп раунда
Разбор ведётся по дельте (PROCESS.md §2.9/§2.10): r1 вынес жёлтый вердикт
с единственной находкой M1 (сломанное предложение в русском changelog),
High-находок не было. Дельта r2 состоит из одного авторского коммита
edfe8af5, который трогает ровно два файла — docs/CHANGELOG.md и
docs/CHANGELOG.ru.md, по 4 строки в каждом (плюс служебный коммит
0d969a53, публикующий сам документ CODE-REVIEW-608-r1.md — не
продуктовое изменение, класс C, сгенерирован конвейером). Продуктовый код
(src/editors/form-kit.ts), смоки, мутант, бандл — не в диффе, git diff 8a4ecdea..edfe8af5 --stat подтверждает: только два changelog-файла плюс
новый файл документа ревью.
git merge-base --is-ancestor 8a4ecdea edfe8af5 → true: ребейза не было,
SHA r1 жив в истории ветки, материал раунда объявлен корректно.
Дельта локальна по критерию §2.10: чисто текстовая правка одного предложения в двух файлах документации, не задета новая подсистема, объём несравним с исходной задачей. Полный повторный разбор не требуется.
Закрытие раунда r1
| Находка | Чем закрыта | Где это видно |
|---|---|---|
| M1 (Medium, в скоупе) — русский changelog: «значение применяется после выхода из поля, ввода, привязывается к шагу шкалы...» не парсится, висящее «ввода,» без опоры | Коммит edfe8af5 убрал висящий фрагмент «ввода,» и объединил перенос строки: docs/CHANGELOG.ru.md:11-13 теперь читается «значение применяется после выхода из поля, привязывается к шагу шкалы и остаётся синхронным с ползунком» — грамматически цельное предложение, три однородных сказуемых при подлежащем «значение» |
docs/CHANGELOG.ru.md:11-13 на edfe8af5 (см. текст ниже); синхронно уточнена и английская версия docs/CHANGELOG.md:6-8 («the value is committed when the field is left, snaps to the slider step and stays synchronized with the slider») — тоже цельное перечисление трёх сказуемых, смысл не изменился |
Текущее содержание (проверено чтением обоих файлов на edfe8af5):
RU: значение применяется после выхода из поля, привязывается к шагу шкалы и
остаётся синхронным с ползунком
EN: the value is committed when the field is left, snaps to the slider step
and stays synchronized with the slider
Обе версии парсятся, оба сказуемых-перечисления параллельны, смысл RU и EN совпадает. Находка закрыта полностью, новых искажений смысла правка не внесла.
Раздельно отмечу деталь, не являющуюся находкой: у обеих записей в
исходном тексте (.md) короткие «рваные» переносы строк внутри пункта
списка (напр. the field is left, — 20 символов на отдельной строке) —
это было так уже в материале r1 (8a4ecdea, до правки M1) и не меняется
этой дельтой; CommonMark схлопывает мягкие переносы внутри пункта списка в
пробелы, поэтому на отрендеренный текст это не влияет. Не новый дефект —
не подниму как находку.
Унаследовано из r1
Всё, кроме текста двух changelog-записей, принимается без повторной проверки — дельта их не задевает:
- AC1–AC6 (посимвольный ввод, off-step коммит 123→125, слайдер
побеждает над незавершённым текстом, все 7 вызовов
rangeLine(через общий helper без правок диалогов, typecheck/unit/build зелёные) — приняты поdocs/reviews/CODE-REVIEW-608-r1.md, материал8a4ecdea632e776e8b17df3ee1690a0beb8af8c3, деревоad2bcb990bfb8c4143ea90fcdbf1af7515e2cbbd. Продуктовый код (src/editors/form-kit.ts),demo/smoke_range_line_draft.mjs,demo/smoke_dialog_config_parity.mjs,scripts/mutation-registry.mjsне в дельте r2 — их поведение не могло измениться. - Мутационный тест (
range-line-clamps-every-keystroke, «поймано 1 из 1», зелёный прогон + красный мутант) — принят по тому же документу r1, тот же материал; мутант живёт вscripts/mutation-registry.mjs, файл не в дельте r2. - Гейты build/bundle-tree/bundle-budget/check-docs — приняты по
документу r1, где они лично прогнаны ревьюером на
8a4ecdea; дельта r2 не трогаетsrc/**, бандл и fingerprint скриншотов, пересчитывать нечего. - Трейлеры и changelog-требование §16 — на
8a4ecdeaуже были на месте (Issue: #608, User-Visible: yes, оба changelog в том же коммите); дельта их не меняет. - Скоуп ТЗ (§5 «Не входит» — диапазоны/шаги/единицы/расположение контролов не менялись) — не затронут дельтой r2.
Гейты — что прогнано в r2 и почему остальное не потребовалось
| Гейт | Статус | Как |
|---|---|---|
npx tsc --noEmit, npm test, npm run build (со сверкой бандла) |
не перегонял | Дешёвые гейты уже подтверждены зелёным CI Validate на точном SHA edfe8af5 (ссылка в задании ревью); дельта r2 не трогает src/**, продуктовый код не менялся с 8a4ecdea, где эти же гейты уже прогонялись лично в r1 |
node scripts/check-docs.mjs |
не перегонял | дельта не трогает src/** — фингерпринт скриншотов не мог устареть; автор также сообщил зелёный прогон на этом коммите |
Смоки (smoke_range_line_draft.mjs, smoke_dialog_config_parity.mjs) |
не перегонял | продуктовый код и сами смоки не в дельте r2; уже прогнаны лично в r1 на неизменном с тех пор коде |
node scripts/mutation-gate.mjs --id=range-line-clamps-every-keystroke |
не перегонял | мутант и защищаемый код не в дельте r2, прогнан лично в r1 |
npm run invariants |
не прогонял | геометрия/толщина/layout/marker.space/open_spans не затронуты ни исходной задачей, ни дельтой |
npm run golden:verify |
не прогонял | визуальный результат не меняется; дельта — только текст двух .md-файлов |
python -m pytest tests_backend -q |
не прогонял | custom_components/**/*.py не тронут ни в исходной задаче, ни в дельте |
| performance-профили | не прогонял | не названы в AC, дельта не касается перф-путей |
Чтение обоих changelog-файлов на edfe8af5 |
прогнал сам | текст приведён выше, парсится, смысл RU/EN совпадает |
Смок-селектор (scripts/smoke-select.mjs) для дельты r2 не запускался
повторно: он анализирует изменения src/**, а дельта их не содержит —
запуск не дал бы новой информации сверх уже полученной в r1 (см. её вывод
в CODE-REVIEW-608-r1.md).
Находки
Нет. Единственная находка r1 (M1) закрыта дельтой, новых дефектов дельта не вносит.
Что проверено и корректно
- M1 закрыта: русская и английская записи changelog читаются цельными параллельными перечислениями, смысл не разошёлся.
- Оба changelog-файла по-прежнему обновлены в одном коммите с
User-Visible: yes(§16 ТЗ, правило 11 PROCESS.md) —edfe8af5трогает оба файла разом. - Трейлеры дельта-коммита:
Issue: #608,User-Visible: yes— на месте (git show -s --format=full edfe8af5). - Ребейза/потери материала между r1 и r2 не было — SHA
8a4ecdeaжив как предокedfe8af5. - Продуктовый код, тесты и AC1–AC6 не затронуты дельтой — унаследованы из r1 без повторной проверки (см. раздел выше), сама дельта чисто документационная, риска регрессии не несёт.
Чего не проверял и почему
- Смотри таблицу гейтов выше — все пропуски объясняются тем, что соответствующая поверхность (код, смоки, бандл, геометрия, backend, перф) не входит в дельту r2 и была полностью проверена в r1 на неизменном с тех пор материале.
Вывод
Дельта r2 — точечная правка одного предложения в двух changelog-файлах, закрывающая единственную Medium-находку r1 (M1) без побочных эффектов. Продуктовый код, тесты, мутант и все AC не менялись и наследуются из r1 без повторной проверки. High-находок нет и не было; Medium-находок в этом раунде нет. Задача готова к слиянию.
Материал раунда
- Ветка:
issue/608-range-line-draft-input, коммитedfe8af52ab9— ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет. - Дерево материала:
865ab790fa9d395fca2b601b6f417aa3dc9c286egit log --all --format='%H %T' | grep 865ab790fa9d - Тело issue:
518c09d725e03b4ca93b0be8a8b6d61805af4e27b25679ddc71a5237c333055e - Вердикт конвейера:
green· High 0