From 19332a915d7126b4ebbbe4ef265cddb8304aa317 Mon Sep 17 00:00:00 2001 From: "claude[bot]" <209825114+claude[bot]@users.noreply.github.com> Date: Tue, 25 Aug 2026 08:55:50 +0000 Subject: [PATCH] docs: review document for #301 Issue: #301 User-Visible: no --- docs/reviews/SPEC-REVIEW-301-r1.md | 261 ++++++++--------------------- 1 file changed, 74 insertions(+), 187 deletions(-) diff --git a/docs/reviews/SPEC-REVIEW-301-r1.md b/docs/reviews/SPEC-REVIEW-301-r1.md index f7f743fd..500ee8b2 100644 --- a/docs/reviews/SPEC-REVIEW-301-r1.md +++ b/docs/reviews/SPEC-REVIEW-301-r1.md @@ -1,208 +1,95 @@ # SPEC-REVIEW-301-r1 -**Issue:** [#301](https://github.com/Matysh/houseplan-card/issues/301) — Add search/filter to entity selector for doors, windows and other openings -**Трек:** `small` — ТЗ живёт в теле issue (комментарий автора, `edited: true`), файла в `docs/specs/` нет и не должно быть. -**Этап:** ТЗ на ревью (PROCESS.md §2.4), лёгкий трек. -**Заход:** r1 · блокирующих циклов израсходовано 0 из 2 (лимит лёгкого трека — 2, PROCESS.md §4). -**ТЗ проверялось против кода на:** `dev`@`6d094ca0` (текущий `HEAD`/`origin/dev` на момент ревью). -**Вердикт:** жёлтый · High: 0 · Medium: 2 (оба в скоупе, возвращаются автору). +- Issue: [#301](https://github.com/Matysh/houseplan-card/issues/301) — Add search/filter to entity selector for doors, windows and other openings +- Трек: `small` (лёгкий) — ТЗ живёт в теле/комментарии issue, отдельного файла в `docs/specs/` нет +- Этап: ТЗ на ревью (PROCESS.md §2.4) +- Заход: r1 · блокирующих циклов израсходовано (на входе) 0 из 2 +- Ревьюер: свежая сессия, без контекста автора +- Материал: финальная редакция ТЗ в комментарии issue `IC_kwDOTOcLQM8AAAABQjQZeg` (после всех правок `accept`), код на `dev`@`fd4fc801` (HEAD на момент ревью) -## Замечание к нумерации захода +## Скоуп ревью -В истории issue уже есть два опубликованных вердикта «жёлтый · заход r1» (первый — -после сбоя автоматизации, по словам владельца, метка не переставилась; второй — -«переисполнение», названное автором «первым засчитанным циклом»), и оба раза -автор вносил правки в текст ТЗ. Тем не менее конвейер передал этот запуск как -`r1 · 0/2` — то есть с точки зрения системы состояния предыдущие проходы не -засчитаны (ни один не сдвинул метку `S4-spec-review`). Я делаю ставку на эту -информацию, а не на прочитанные комментарии, и провожу **полный** разбор, как -предписано для r1, а не разбор по дельте (§2.10 применяется только со второго -цикла). Ниже я всё же сверяю, закрыты ли находки предыдущих (незасчитанных) -проходов по существу — не потому что это обязательно на r1, а потому что это -дёшево и предотвращает регресс уже обсуждённых мест. +ТЗ описывает замену нативного ``-селектора (контакт, замок) — -переводятся на существующий паттерн поиска `dropbtn`/`droppanel`/`candlist`, уже -использованный для привязки маркера, `run`-цели и источника измерения комнаты. -Формат конфига и набор кандидатов не меняются. По `docs/SCOPE.md` это улучшение -J4/J6 (editor ergonomics), не новая работа продукта — конфликта с рамкой нет. +Замечание по контексту захода: в комментариях issue уже есть **четыре** более ранних вердикта «жёлтый · заход r1», каждый со своими Medium-находками и последующим `accept`-исправлением автора (владелец явно отметил, что первый прогон конвейера не переставил метку, и последующие — по всей видимости, повторы того же сбоя, раз каждый снова маркирован «заход r1»). Поскольку эти прогоны не считаются циклами (метка не переходила), я не наследую их выводы на слово — ниже приведена независимая сверка того, что все находки этих прогонов закрыты в тексте, который сейчас фактически лежит в issue. ## Как проверялось -- Прочитаны `docs/SCOPE.md`, `AGENTS.md`, `PROCESS.md` (целиком, включая §2.4, - §2.5, §2.10, §4, §5, §7.1, §7.2, §8). -- Прочитано тело issue #301 и вся цепочка комментариев (два предыдущих вердикта - и правки автора между ними). -- Каждая фактическая ссылка ТЗ на код сверена чтением `src/houseplan-card.ts` на - `dev`@`6d094ca0`: - - `opt()` — строка 19463 (совпадает); - - `_contactCandidates()` — строка 12871, `_lockCandidates()` — строка 12888 - (совпадают, включая сортировку `doorish ? 0 : 1` и алфавит внутри группы); - - `_runCandidates()` — строка 13815, вызов на рендере — строки 20981/20984, - кап `slice(0, 40)` — строка 20996; - - `_bindingCandidates()` — строка 13832, безусловная `filtered.sort(...)` и - `slice(0, 200)` — строка ~13901–13906 (пересортировка подтверждена: `sort` - вызывается независимо от того, пуст ли `bindingFilter`); - - `_roomSrcCandidates()` — строка 18703, тоже безусловный `list.sort(...)` + - `slice(0, 200)` (тот же дефект, что у `_bindingCandidates()` — второй проход - справедливо это заметил); - - паттерн `dropbtn`/`droppanel`/`candlist` — строки 20868–20900 (binding), - 20981–21000 (run), 21705–21721 (roomSrc) — визуально идентичны, строка - кандидата везде рендерится как `labelsub`; - - `_saveOpening()` — строка 12751, кнопка `Save` — строка 19557; - - guard `passage` без контакта — строка 19519 (`d.type !== 'passage'`), guard - замка только для `door`/`gate` — строка 19527; - - i18n: `opening.search_ph` в `src/i18n/en.json` и `ru.json` **отсутствует** - (проверено `python3 -c "json.load(...)"` по обоим файлам) — заявка на новый - ключ обоснована, это не переизобретение существующего; `marker.search_ph` - существует, но с другим текстом («Search device / group…») — использование - отдельного ключа для проёма оправдано контекстом; - - `demo/smoke_opening_binding.mjs` уже существует, но проверяет доступность - сущностей после tombstone через прямой вызов `_contactCandidates()`/ - `_lockCandidates()`, а не UI выбора — пересечения с предлагаемым - `smoke_opening_entity_search.mjs` нет; - - `scripts/mutation-gate.mjs` — реестр существует, предложенные id - (`opening-search-*`) в нём отсутствуют, что ожидаемо: это будущие мутанты, - ТЗ не выдаёт их за уже существующие. -- Прочитан `docs/TOUCH-SUPPORT.md` целиком и `docs/UX-MODES.md` (полнотекстовый - поиск по «autofocus», «поиск», «фокус» — совпадений нет) — в проекте нет - канонической нормы, ожидающей или запрещающей автофокус в такой панели. -- Прочитан `docs/USER-GUIDE.ru.md` §9 (проёмы) — обещанная правка документации не - противоречит существующей терминологии раздела. +Инструмент проверки — чтение, не исполнение (стадия ТЗ, кода ещё нет). Каждая фактическая ссылка ТЗ на код сверена построчно с `src/houseplan-card.ts` на `dev@fd4fc801`: + +| Ссылка ТЗ | Файл:строка | Проверено | +|---|---|---| +| `opt()` — нативный `