docs: review document for #628

Issue: #628
User-Visible: no
This commit is contained in:
claude[bot]
2026-09-25 10:21:04 +00:00
parent a32744255f
commit e095c710f9
2 changed files with 169 additions and 1 deletions
+167
View File
@@ -0,0 +1,167 @@
# CODE-REVIEW-628-r2
Issue: #628 · Материал раунда: `a32744255f10b6d5dfa590ab24cb94b4e7d020de` (HEAD,
рабочая копия на нём) · диапазон `origin/dev..HEAD` (4 коммита), дифф
`origin/dev...HEAD`.
## Скоуп
Инфраструктурная задача без ТЗ (трек «infrastructure-only», AGENTS.md):
разовый `git gc --prune=now` клона владельца на Windows-машине, замер
до/после, фиксация решения в `docs/DEVELOPMENT.md`. Скоуп и AC не менялись
с r1 (см. `docs/reviews/CODE-REVIEW-628-r1.md`).
Диапазон `origin/dev..HEAD` — четыре коммита:
```
774b7c7e docs: record repository GC baseline
f86bc34d docs: review document for #628 (пайплайн, r1)
054a7139 docs: preserve workstation section hierarchy (правка автора по r1)
a3274425 docs(reviews): индекс после сдвига каталога (#628) (пайплайн)
```
`774b7c7e` содержит тот же текст, что рецензировался в r1 под именем
`66b2b576` — этот SHA осиротел ребейзом, что документ r1 сам предсказал
(«ребейз его осиротит, и это нормально»); материал ищется по дереву/блобу
(REVIEWER.md, «Повторный раунд»), и `774b7c7e` — тот же diff `+27` строк по
`docs/DEVELOPMENT.md`, что и `66b2b576` в r1 (проверено построчным `git
diff` — идентичен процитированному в r1 тексту). `f86bc34d` и `a3274425` —
служебные коммиты конвейера (публикация документа r1, пересчёт индекса);
их дифф не относится к продукту задачи. Единственный содержательный коммит
автора в этом раунде — `054a7139`.
Трейлеры на `054a7139` и `a3274425`: `Issue: #628`, `User-Visible: no` —
верно, оба коммита не меняют видимое пользователю поведение (внутренняя
`docs/DEVELOPMENT.md` и служебный `docs/reviews/INDEX.md`); правка
CHANGELOG не требуется и не сделана. Дифф не касается `src/**`,
`custom_components/**/*.py`, манифестов — задача остаётся вне класса A.
## Закрытие раунда r1
| Находка r1 | Чем закрыта | Где это видно |
|---|---|---|
| Medium: новый раздел `## Local repository maintenance (#628)` разрывал секцию `## Local Windows workstation` и её подсекцию `### ⚠️ File-sync pitfalls (critical)`, меняя владельца подсекции по дереву заголовков | Коммит `054a7139` «docs: preserve workstation section hierarchy» переносит блок `## Local repository maintenance (#628)` **после** `### ⚠️ File-sync pitfalls (critical)` и **перед** `## Tests`, оставляя `File-sync pitfalls` подсекцией `Local Windows workstation` | `git diff 774b7c7e 054a7139 -- docs/DEVELOPMENT.md` — чистое перемещение блока (12 строк вверх/вниз, содержание не тронуто); `grep -n '^#' docs/DEVELOPMENT.md` на HEAD: `93 ## Local Windows workstation` → `168 ### ⚠️ File-sync pitfalls (critical)` → `177 ## Local repository maintenance (#628)` → `204 ## Tests` — иерархия и порядок ровно те, что требовала находка |
## Унаследовано из r1 (не перепроверялось заново)
- Арифметика четырёх чисел раздела `## Local repository maintenance (#628)`
(1084.39 → 467.63 MiB, разница 616.76, порог 487.63) — перепроверена
вручную в r1, текст блока в этом раунде не менялся (подтверждено диффом
`054a7139`: перемещение без правки содержимого) — доказательство r1
остаётся в силе.
- AC1 (решение владельца зафиксировано текстом, совпадающим с выбранным
«вариант 1» и умолчаниями-отказами по LFS/`dist/**`/истории) — та же
логика и тот же неизменный текст, разобрано в r1.
- Единственность источника чисел (`size-pack`/`count-objects`/`git gc`
встречаются в `docs/**` только в этом разделе) — проверено в r1 по
неизменному тексту; дополнительно перепроверено в этом раунде (см. ниже)
на предмет того, что перемещение блока не создало второго вхождения.
- Трейлеры коммита `774b7c7e` (`Issue: #628`, `User-Visible: no`) — те же,
что были на предыдущем SHA этого коммита, разобраны в r1.
- Дешёвые гейты (`typecheck`/`test`/`build`) не нужны диффу без кода —
установлено в r1 и остаётся верным: `054a7139` и `a3274425` тоже не
трогают код.
## Как проверялось в этом раунде
- Прочитаны новые комментарии issue #628 с r1: ответ владельца — не
требовался (Medium в скоупе фиксится автором без эскалации); отчёт
автора «Исправлен Medium из r1: `File-sync pitfalls` снова является
подсекцией `Local Windows workstation`… Новый SHA: `78cdc4e5`» — этот
локальный SHA не встречается в текущей истории, что ожидаемо: пуш
прошёл через ребейз пайплайна и лёг как `054a7139` (то же
правило «SHA не резолвится — не находка», примерено уже ко всей цепочке
этого раунда).
- `git log --oneline origin/dev..HEAD` и `git diff origin/dev...HEAD --stat`
— подтверждён полный список изменённых файлов: `docs/DEVELOPMENT.md`
(+27/-0 относительно `dev`), `docs/reviews/CODE-REVIEW-628-r1.md` (новый,
публикация r1), `docs/reviews/INDEX.md` (+2/-1, пересчёт индекса).
- `git diff origin/dev...HEAD -- docs/DEVELOPMENT.md` прочитан целиком:
единственный блок изменений — вставка раздела `## Local repository
maintenance (#628)` в 27 строк ровно между `### File-sync pitfalls` и
`## Tests`; никакого разрыва существующих секций, содержание раздела
не изменилось.
- `git diff 774b7c7e 054a7139 -- docs/DEVELOPMENT.md` — прочитан отдельно,
чтобы убедиться, что правка автора — чистое перемещение блока (12 строк
вверх, 9 строк вниз в терминах unified diff), а не переписывание текста;
подтверждено: строки внутри обоих блоков побайтово совпадают до и после.
- `grep -n '^#' docs/DEVELOPMENT.md` на HEAD — построено полное дерево
заголовков файла, порядок секций в диапазоне строк 93–236 прочитан
целиком (`Read` offset 93, limit 115) и сверен со смыслом: `Local
Windows workstation` → её подсекция `File-sync pitfalls` → новая
`Local repository maintenance (#628)` → `Tests`. Логическая
принадлежность подсекции восстановлена.
- `grep -rn "size-pack|count-objects|git gc" docs/` — повторно (после
перемещения блока) единственное вхождение всё ещё в
`docs/DEVELOPMENT.md`, второго источника с конфликтующим числом не
появилось.
- `git diff origin/dev...HEAD --check` — 0 находок (нет висячих
пробелов/конфликт-маркеров).
- `node scripts/check-docs.mjs --screenshots=warn` — прогнал сам:
`Documentation checks passed (7 files, 12 external links)`, то же
неотносящееся к диффу предупреждение про устаревший screenshot
fingerprint, что и в r1 и в отчёте автора.
- Проверены трейлеры `054a7139` и `a3274425` (`git show -s --format`) —
`Issue: #628`, `User-Visible: no` на обоих.
- Green Validate на материале раунда (`a3274425`) подтверждён владельцем
промпта: https://github.com/Matysh/houseplan-card/actions/runs/36122795014
— покрывает `typecheck`/`test`/`build`+сверку бандла, их повторно не
гонял.
## Находки
Нет. Единственная Medium-находка r1 закрыта чистым перемещением блока без
побочных изменений; новых находок при разборе дельты не появилось.
## Что проверено и корректно
- AC1 и AC2 — без изменений с r1, остаются доказанными (см. «Унаследовано
из r1»).
- Structural fix Medium-находки r1 — подтверждён построением дерева
заголовков и побайтовым сравнением содержимого блоков до/после
перемещения.
- Трейлеры всех содержательных коммитов раунда корректны.
- Дифф раунда не расширяет скоуп: единственный контентный файл —
`docs/DEVELOPMENT.md`, правка ограничена перестановкой ранее
рецензированного блока.
- Единственность источника чисел сохранена после перемещения.
## Чего не проверял и почему
- **`npx tsc --noEmit`, `npm test`, `npm run build`** — не перегонял: дифф
раунда не содержит кода (только `docs/**`), и зелёный Validate на точном
SHA материала (`a3274425`, run 36122795014) уже покрывает эти гейты.
- **Смоки, `golden:verify`, `pytest tests_backend`, инварианты модели,
performance-профили** — не прогонял и не применимы: дифф не в `src/**`,
`demo/**`, Python или геометрии, ни один не назван в AC1/AC2.
`smoke-select.mjs` не запускал по той же причине.
- **Сам замер AC2** (2026-10-25 или позже) — вне предмета этого раунда, как
и в r1: документ готовит критерий, будущий замер — отдельное действие.
- **Первичный факт измерений владельца** (`git gc` на его Windows-машине) —
не перепроверял повторно: числа не менялись с r1, где уже была
пересчитана их внутренняя арифметика; повторный пересчёт дельта не
требует, так как текст блока не редактировался, только перемещён.
## Вердикт
Зелёный: единственная Medium-находка r1 закрыта точечным перемещением
блока без изменения содержания и без побочных эффектов; новых находок
нет. High: 0, Medium: 0.
---
<!-- material-anchors: заполняется конвейером (#414) -->
---
<!-- material-anchors: сгенерировано конвейером (#414) -->
## Материал раунда
- Ветка: `issue/628-repository-gc`, коммит `a32744255f10` — ребейз его осиротит, и это нормально: ниже якоря, которые ребейз не меняет.
- Дерево материала: `2b98213a6dc9ec3a9cb60908bcb00eb22dfdd0fd`
```
git log --all --format='%H %T' | grep 2b98213a6dc9
```
- Тело issue: `9b54257641bbb6e8f0276842401740d958c3593af319626ccc1c8a88e0e6c671`
- Вердикт конвейера: `green` · High 0
+2 -1
View File
@@ -1,6 +1,6 @@
# Индекс ревью
Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 1050, issue: 370. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). H/M — число High/Medium по строке вердикта или заголовкам находок. Файлы — пути, названные в находках; ищите по имени файла: `grep form-kit INDEX.md`.
Генерируется `node scripts/reviews-index.mjs` (#635) — не редактировать руками. Документов: 1051, issue: 370. Вердикт: 🟢 зелёный · 🟡 жёлтый · 🔴 красный · ⚪ не распознан (свободная форма старых документов). H/M — число High/Medium по строке вердикта или заголовкам находок. Файлы — пути, названные в находках; ищите по имени файла: `grep form-kit INDEX.md`.
| Issue | Документ | Этап · раунд | Вердикт | H | M | Находки | Файлы |
|---|---|---|---|---:|---:|---|---|
@@ -42,6 +42,7 @@
| #629 | [CODE-REVIEW-629-r1.md](CODE-REVIEW-629-r1.md) | code · r1 | 🟢 зелёный | 0 | 0 | — | — |
| #629 | [CODE-REVIEW-629-r2.md](CODE-REVIEW-629-r2.md) | code · r2 | 🟢 зелёный | 0 | 0 | — | — |
| #628 | [CODE-REVIEW-628-r1.md](CODE-REVIEW-628-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | Новый раздел разрывает существующую секцию «Local Windows workstation» и меняет владель… | `docs/DEVELOPMENT.md` |
| #628 | [CODE-REVIEW-628-r2.md](CODE-REVIEW-628-r2.md) | code · r2 | 🟢 зелёный | 0 | 0 | — | — |
| #627 | [SPEC-REVIEW-627-r1.md](SPEC-REVIEW-627-r1.md) | spec · r1 | 🟢 зелёный | 0 | 0 | избыточное (не противоречивое) условие в AC2; влияние на touch не названо явным пунктом | `docs/TOUCH-SUPPORT.md` |
| #627 | [CODE-REVIEW-627-r1.md](CODE-REVIEW-627-r1.md) | code · r1 | 🟡 жёлтый | 0 | 1 | demo/smoke_danger_confirmation.mjs не переведён на ожидание составного гейта; диалог оп… | `demo/smoke_danger_confirmation.mjs` `src/houseplan-card.ts` `de.ts` `smoke_danger_confirm_branches.mjs` |
| #627 | [CODE-REVIEW-627-r2.md](CODE-REVIEW-627-r2.md) | code · r2 | 🟢 зелёный | 0 | 0 | — | — |