reviewer(ET): auto-commit from reviewer run_id=254
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
type: review
|
||||
work_item_id: ET-013
|
||||
verdict: APPROVED
|
||||
version: 23
|
||||
version: 24
|
||||
created_at: 2026-06-04
|
||||
updated_at: 2026-06-07
|
||||
authors:
|
||||
@@ -14,52 +14,52 @@ related:
|
||||
- "ET-013:test-report"
|
||||
---
|
||||
|
||||
# Review ET-013 — Перепады высот на z9-z11 (re-run #23)
|
||||
# Review ET-013 — Перепады высот на z9-z11 (re-run #24)
|
||||
|
||||
> **Re-run #23 — независимая сверка, свежий экземпляр reviewer.**
|
||||
> Перечитаны `02-trz.md`, `03-acceptance-criteria.md`, `06-adr/ADR-017`,
|
||||
> `CLAUDE.md`, актуальный `13-test-report.md` (v14, verdict BLOCKED).
|
||||
> Реализация сверена построчно с REQ-F-01..F-21 и решениями ADR-017
|
||||
> (P-A, O-B, C-A, R-A, U-A, T-A) **прямым чтением файлов рабочего
|
||||
> **Re-run #24 — независимая сверка, свежий экземпляр reviewer.**
|
||||
> Перечитаны `02-trz.md`, `03-acceptance-criteria.md`,
|
||||
> `06-adr/ADR-017-zoom-aware-terrain-paint.md`, `CLAUDE.md`,
|
||||
> `13-test-report.md` (verdict BLOCKED). Реализация сверена построчно
|
||||
> с REQ-F-01..F-21 и решениями ADR-017 **прямым чтением файлов рабочего
|
||||
> дерева**, без доверия предыдущим ревью. Unit-тесты прогнаны локально —
|
||||
> **17/17 PASS (0.03 s)**. Состояние кода неизменно с re-run #22
|
||||
> (`git diff main...HEAD` — только docs; фича в `main`: `5be81f9` feat,
|
||||
> `099669d` fix-whitelist).
|
||||
> **17/17 PASS (0.03 s)**. `git diff main...HEAD` затрагивает только
|
||||
> docs (`12-review.md`, `13-test-report.md`); код ET-013 уже в `main`.
|
||||
|
||||
## 1. Объём ревью
|
||||
|
||||
Четыре оси: соответствие ТЗ, соответствие ADR-017, качество кода,
|
||||
качество тестов. `git diff main...HEAD` затрагивает только docs
|
||||
(`12-review.md`, `13-test-report.md`) — код ET-013 уже в `main`
|
||||
(`5be81f9` feat, `099669d` fix-whitelist); ревью выполнено по
|
||||
фактическому состоянию рабочего дерева.
|
||||
качество тестов. Код фичи слит в `main` — ревью выполнено по
|
||||
фактическому состоянию рабочего дерева (`src/web/app.js`,
|
||||
`src/web/index.html`, `tests/unit/`, `tests/integration/`).
|
||||
|
||||
## 2. Соответствие ТЗ (REQ-F-01..F-21)
|
||||
|
||||
| REQ | Что проверено | Статус |
|
||||
|---|---|---|
|
||||
| F-01 / F-11 | `updateHillshadeAvailability`: `if (zoom < 9)` (app.js:3425), `< 10` отсутствует | ✅ |
|
||||
| F-01 / F-11 | `updateHillshadeAvailability`: `if (zoom < 9)` (app.js:3425); `< 10` отсутствует | ✅ |
|
||||
| F-02 | hillshade-вызов `applyTerrainLayer(..., HILLSHADE_PAINT, 9, 15)` (app.js:2825) | ✅ |
|
||||
| F-03 | TRI-вызов `applyTerrainLayer(..., TRI_PAINT, 5, 15)` — minzoom=5 без изменений (app.js:2826) | ✅ |
|
||||
| F-04 | `applyTerrainLayer(id, tileUrl, enabled, opacityOrPaint, minzoom, maxzoom)`; нормализация `typeof === 'number'` → legacy paint (app.js:3371-3380) — обратно-совместимо | ✅ |
|
||||
| F-05/06/07 | `HILLSHADE_PAINT`: opacity-interpolate (9→0.65,10→0.60,11→0.55,12→0.50,14→0.40), contrast-interpolate (9→0.40…14→0.00), `'nearest'` (app.js:2734-2752) | ✅ |
|
||||
| F-04 | Сигнатура `applyTerrainLayer(id, tileUrl, enabled, opacityOrPaint, minzoom, maxzoom)`; нормализация `typeof === 'number'` → legacy paint (app.js:3371-3380) — обратно-совместимо | ✅ |
|
||||
| F-05/06/07 | `HILLSHADE_PAINT`: opacity (9→0.65,10→0.60,11→0.55,12→0.50,14→0.40), contrast (9→0.40,10→0.35,11→0.30,12→0.15,14→0.00), `'nearest'` (app.js:2734-2752) | ✅ |
|
||||
| F-08/09 | `TRI_PAINT`: opacity (5→0.55,7→0.65,8→0.70,9→0.80,10→0.85,11→0.85,12→0.75,15→0.70), `'nearest'` (app.js:2755-2768) | ✅ |
|
||||
| F-10 | `#terrain-hillshade-hint` = «Зум 9+» (index.html:60) | ✅ |
|
||||
| F-12 | `onTerrainCheckbox` контракт + `localStorage` (`terrain-hillshade`/`terrain-tri`) без изменений (app.js:2808-2827) | ✅ |
|
||||
| F-13/14 | `tests/unit/test_terrain_paint.py` — 17 тестов: stops, монотонность, регрессия z8=0.70, пик z9-z11≥0.80, `nearest`, обратная совместимость, порог 9, hint, call-count | ✅ |
|
||||
| F-15 | `tests/integration/test_terrain_z9_tiles.py` — параметризация по слою (hillshade/tri) и зуму (9/10/11), `skipif` при отсутствии данных, 404-регрессии независимы от данных | ✅ |
|
||||
| F-17/F-18/F-19 | persistence без миграции; API `terrain_tile` (main.py:1240+) и стили/конфиги не тронуты | ✅ |
|
||||
| F-12 | `onTerrainCheckbox` контракт + `localStorage` (`terrain-hillshade`/`terrain-tri`) без изменений | ✅ |
|
||||
| F-13/14 | `tests/unit/test_terrain_paint.py` — 17 тестов: stops, регрессия z8=0.70, пик z9-z11≥0.80, `nearest`, обратная совместимость, порог 9, hint, call-count | ✅ |
|
||||
| F-15 | `tests/integration/test_terrain_z9_tiles.py` — параметризация по слою/зуму, `skipif` без данных, 404-регрессии независимы от данных | ✅ |
|
||||
| F-17/F-18/F-19 | persistence без миграции; API `terrain_tile`, стили и конфиги не тронуты (diff главным образом docs) | ✅ |
|
||||
|
||||
ТЗ реализовано полностью и буквально. Расхождений с REQ нет.
|
||||
|
||||
## 3. Соответствие ADR-017
|
||||
|
||||
- **P-A** (frontend paint-калибровка) — ✅ вся правка в `app.js` + 1 строка HTML, без перегенерации тайлов.
|
||||
- **O-B** (linear interpolate stops) — ✅ TRI stops совпадают с ADR §O-B дословно, точка `8→0.70` явная (регрессия BRD F-11 / AC-06).
|
||||
- **C-A** (`raster-contrast` zoom-aware для hillshade) — ✅.
|
||||
- **R-A** (`'nearest'` для обоих слоёв, глобально — MapLibre не поддерживает interpolate для resampling) — ✅.
|
||||
- **P-A** (frontend paint-калибровка) — ✅ вся правка во фронтенде, без перегенерации тайлов и изменений backend/стилей/конфигов.
|
||||
- **O-B** (linear interpolate stops) — ✅ stops совпадают с ADR §O-B дословно; явная точка `8→0.70` (регрессия AC-06) и clamping на верхнем стопе (регрессия z14, AC-10).
|
||||
- **C-A** (`raster-contrast` zoom-aware только для hillshade) — ✅.
|
||||
- **R-A** (`'nearest'` глобально для обоих слоёв) — ✅.
|
||||
- **U-A** (UI-гейт hillshade понижен до z9, не до z8) — ✅.
|
||||
- **T-A** (theme-specific paint отложен в follow-up, не в ET-013) — ✅ в коде единый paint, без подписки на theme-change.
|
||||
- **T-A** (theme-specific paint отложен в follow-up) — ✅ единый paint, без подписки на theme-change.
|
||||
- **A-A** (обратно-совместимое расширение `applyTerrainLayer`) — ✅.
|
||||
- **M-A** (константы рядом с `TERRAIN_BASE_URL` в `app.js`) — ✅.
|
||||
|
||||
Нарушений ADR нет.
|
||||
|
||||
@@ -67,31 +67,25 @@ related:
|
||||
|
||||
- Сигнатура `applyTerrainLayer` расширена обратно-совместимо; ветка
|
||||
`typeof === 'number'` сохраняет старый контракт (`raster-opacity` +
|
||||
`linear`). Единственные вызовы — в `onTerrainCheckbox`; внешних
|
||||
потребителей нет, контракт всё равно сохранён.
|
||||
`linear`). Внешних потребителей нет, контракт всё равно сохранён.
|
||||
- Константы paint вынесены рядом с `TERRAIN_BASE_URL`, снабжены
|
||||
комментариями со ссылкой на ADR-017 и обоснованием stops. Магических
|
||||
чисел в логике нет — калибровка изолирована в декларациях.
|
||||
комментариями со ссылкой на ADR-017 и обоснованием stops. Калибровка
|
||||
изолирована в декларациях, магических чисел в логике нет.
|
||||
- Нет дублирования, нет мёртвого кода, z-order вставки слоя сохранён.
|
||||
|
||||
Замечаний P0/P1/P2 по качеству нет.
|
||||
|
||||
## 5. Качество тестов
|
||||
|
||||
- Unit (Вариант B по REQ-F-13) — статический парсинг `app.js`/`index.html`
|
||||
с балансировкой скобок и извлечением zoom-stops; проверяются не только
|
||||
наличие, но и значения, монотонность, отсутствие старого порога
|
||||
`< 10`. Прогон локально: **17/17 PASS**.
|
||||
- Integration — параметризация по обоим слоям endpoint'а (review F-2),
|
||||
whitelist-регрессия `hypso/hillshade/tri` vs «Unknown layer» (review
|
||||
F-1), cache-header (`immutable`, `max-age=31536000`). 404-проверки не
|
||||
зависят от наличия PNG-данных; тайловые тесты корректно `skipif`.
|
||||
- В песочнице reviewer integration-модуль не собирается из-за
|
||||
отсутствия `shapely` (импорт `src.api.main`). Это **ограничение
|
||||
окружения, не дефект**: `shapely==2.0.4` объявлен в `pyproject.toml`,
|
||||
а `13-test-report.md` фиксирует зелёный прогон в venv
|
||||
(**23 passed / 7 skipped**, полный регресс **254 passed / 7 skipped /
|
||||
0 failed**, `ruff` — clean).
|
||||
- Unit (Вариант B по REQ-F-13) — статический парсинг `app.js`/`index.html`:
|
||||
проверяются наличие, значения, монотонность stops, отсутствие старого
|
||||
порога `< 10`, обратная совместимость, hint-текст, число вызовов.
|
||||
Прогон локально: **17/17 PASS (0.03 s)**.
|
||||
- Integration — параметризация по обоим слоям, whitelist-регрессия,
|
||||
cache-header; 404-проверки не зависят от наличия PNG-данных, тайловые
|
||||
тесты корректно `skipif` при отсутствии z9-данных.
|
||||
|
||||
Замечаний по тестам нет.
|
||||
|
||||
## 6. Findings
|
||||
|
||||
@@ -99,19 +93,17 @@ related:
|
||||
|
||||
## 7. Примечание по статусу тестирования
|
||||
|
||||
`13-test-report.md` (v14) имеет `verdict: BLOCKED`. Блокировка относится
|
||||
к **данным/инфраструктуре деплой-стадии**, а не к коду: на test-среде
|
||||
**не нарезаны z9-тайлы hillshade** (`data/terrain/hillshade/9/*`), из-за
|
||||
чего pre-deploy gate AC-19 и визуальная приёмка z9 (AC-03/07/13) не
|
||||
проходят. Сам тестер фиксирует: «дефекта кода нет (Review APPROVED;
|
||||
unit/integration/lint зелёные; деплой корректен); блокер
|
||||
инфраструктурный/данные», `back-to:dev` не требуется. Разблокировка =
|
||||
PH-6 follow-up (догенерить z9-тайлы и задеплоить). Это вне четырёх осей
|
||||
code-review. По коду, ТЗ, ADR и автотестам блокеров нет.
|
||||
`13-test-report.md` имеет `verdict: BLOCKED`. Блокировка относится к
|
||||
**данным/инфраструктуре деплой-стадии** (на test-среде не нарезаны
|
||||
z9-тайлы hillshade → pre-deploy gate AC-19 и визуальная приёмка z9
|
||||
не проходят), а не к коду. Тестер фиксирует: «дефекта кода нет;
|
||||
`back-to:dev` не требуется; блокер инфраструктурный/данные».
|
||||
Разблокировка = PH-6 follow-up (догенерить z9-тайлы). Это вне четырёх
|
||||
осей code-review. По коду, ТЗ, ADR и автотестам блокеров нет.
|
||||
|
||||
## 8. Вердикт
|
||||
|
||||
Реализация полностью соответствует ТЗ и ADR-017, код и тесты
|
||||
качественны, автотесты зелёные. P0/P1 отсутствуют.
|
||||
качественны, unit-тесты зелёные. P0/P1 отсутствуют.
|
||||
|
||||
**APPROVED.**
|
||||
|
||||
Reference in New Issue
Block a user