# SPEC-REVIEW-309-r1 Issue: https://github.com/Matysh/houseplan-card/issues/309 «Стыковочные узлы: визуальный лимит mitre и устранение паразитных парных патчей» Этап: spec (обычный трек — сложность/риск владельца 6/10 и 7/10, `small` невозможен) Заход: r1 · блокирующих циклов израсходовано 0 из 4 Ревьюер: Claude (сессия ревью ТЗ), артефакт: `docs/specs/309-junction-visual-limit.md` в ветке `issue/309-junction-visual-limit`, коммит `ff623cd4` (только этот файл; `git diff origin/dev...HEAD --stat` — 1 файл, 72 строки, никакого кода). ## Скоуп ТЗ описывает три класса визуальных артефактов кладки в узлах стыка стен (шип, горб, ступенька), обнаруженных владельцем на реальном экспорте после #302 (полный mitre). Решения владельца зафиксированы 2026-08-25 в аналитике issue: визуальный порог среза `1.5·max(h)` вместо санитарного `MITRE_LIMIT=4`, форма среза — плоская фаска перпендикулярно биссектрисе, устранение паразитных mitre-патчей между не-соседними по азимуту лучами узла. Продуктовая рамка — рендер кладки стен как таковой, то есть J1 SCOPE.md («show the whole home... spatially», точность отображения) и J6 («keep the plan true»): задача не расширяет и не меняет job, чинит форму существующей геометрии, принятой в #302. Соответствие подтверждаю. ## Как проверялось Не на веру автору — с чтением текущего кода `src/wall-thickness.ts`, `src/physical-geometry.ts`, `demo/golden/matrix.mjs`, `docs/WALL-THICKNESS.md`, `docs/specs/README.md`, `PROCESS.md` §2.4/§2.5/§7.1/§7.2, `AGENTS.md`, `docs/SCOPE.md`: 1. `src/wall-thickness.ts:80` — `MITRE_LIMIT = 4` существует и является ровно тем санитарным пределом, о котором говорит §3.1 ТЗ. 2. `src/wall-thickness.ts:1082-1150` (`linearWallJoinPatches`) — построчно подтверждает: (a) функция перебирает **все** пары лучей `i