From c66d4fbde208a9e9144c7dfde5843e1f74b5f9b4 Mon Sep 17 00:00:00 2001 From: claude-bot Date: Sat, 6 Jun 2026 21:39:20 +0000 Subject: [PATCH] tester(ET): auto-commit from tester run_id=209 --- docs/work-items/ET-013/13-test-report.md | 398 ++++++++++++----------- 1 file changed, 215 insertions(+), 183 deletions(-) diff --git a/docs/work-items/ET-013/13-test-report.md b/docs/work-items/ET-013/13-test-report.md index b9e4304..a1a4586 100644 --- a/docs/work-items/ET-013/13-test-report.md +++ b/docs/work-items/ET-013/13-test-report.md @@ -2,11 +2,11 @@ type: test-report work_item_id: ET-013 title: "Test Report: Перепады высот на z9-z11 — zoom-aware paint" -version: 1 +version: 2 status: blocked verdict: BLOCKED created_at: 2026-06-04 -updated_at: 2026-06-04 +updated_at: 2026-06-06 authors: - "agent:tester" related: @@ -18,58 +18,69 @@ adr_refs: # Test Report — ET-013 +> **v2 (run_id текущий, 2026-06-06).** Перепрогон после Review v3 +> (APPROVED). Главное изменение со времён v1: **ET-013 уже выкатан +> на test-среду** (`app.js` содержит `HILLSHADE_PAINT`/`TRI_PAINT`, +> hint = «Зум 9+», `if (zoom < 9)`). При этом **hillshade z9 тайлы +> по-прежнему отсутствуют (404)** — PH-6 follow-up из v1 не выполнен. +> Полный авто-регресс теперь зелёный целиком (254 passed) — в venv +> доустановлены `shapely`/`defusedxml`/`lxml`/`pytest-asyncio`, которых +> не хватало в sandbox в v1. Вердикт остаётся **BLOCKED** по тому же +> pre-deploy gate AC-19. + ## TL;DR -- `make lint` ✅, прицельный прогон unit/integration ET-013 ✅ - (23 passed, 7 skipped — skip ожидаемы: нет PNG-fixtures в sandbox). -- Полный `make test` падает на этапе collection из-за **внешней** - проблемы (`ModuleNotFoundError: No module named 'lxml'` в тестах - `tests/api/test_gps_tracks_download.py` / `_gpx_builder.py`) — это - наследие ET-011, не имеет отношения к ET-013. После исключения - этих двух файлов: **191 passed, 46 skipped, 0 failed**, регрессий - ET-007/008/009/011/012 нет. +- Линтер ✅ (см. примечание ниже), полный авто-регресс **254 passed, + 7 skipped, 4 deselected, 0 failed** (в изолированном venv с + установленными зависимостями проекта). Регрессий ET-007/008/009/011/012 + нет. ET-013 unit — 17/17 PASS, integration — 6 PASS / 7 SKIP (skip + ожидаемы: нет PNG-fixtures в sandbox). - Код в ветке `feature/ET-013-z9-z11-z8` 1:1 соответствует TRZ - (REQ-F-01..F-21) и ADR-017 (подтверждено Review v2, **APPROVED**). -- **❌ Pre-deploy gate AC-19 — FAIL (P1):** на test-среде отсутствуют - тайлы `hillshade/9/*` (а также `hillshade/8/*`). Проверка по + (REQ-F-01..F-21) и ADR-017 (подтверждено Review v3, **APPROVED**). +- **ET-013 развёрнут на test-среде** (изменение со времён v1): + `GET /enduro/app.js` содержит `HILLSHADE_PAINT`, `TRI_PAINT`, + `opacityOrPaint`, `raster-contrast`, `'nearest'`, `if (zoom < 9)`; + hint в DOM = «Зум 9+». +- **❌ Pre-deploy gate AC-19 — FAIL (P1):** на test-среде по-прежнему + отсутствуют тайлы `hillshade/9/*` (и `hillshade/8/*`). Проверка по координатам `[37.6, 54.5]` (юг МО / Кашира — основная зона UI-тестов): - `hillshade/z9/309/348.png → 404`. Тайлы `hillshade/z10`, - `hillshade/z11`, `tri/z8..z11` присутствуют (200 OK). Это блокирует - основную пользовательскую ценность ET-013: после деплоя на z=9 - чекбокс «Тени рельефа» станет активным, но карта 404'нется на каждом - hillshade-запросе, и пользователь увидит включённый слой **без теней** - (хуже, чем до ET-013, где чекбокс был disabled с честным hint'ом - «Зум 10+»). + `hillshade/z9/309/348.png → 404` (и весь grid 5×5 вокруг + 6 точек + ЦФО → 404). Тайлы `hillshade/z10`, `hillshade/z11`, `tri/z5..z12` + присутствуют (200 OK). **Так как ET-013 уже выкатан**, проблема из + гипотетической стала фактической: прямо сейчас на test-среде при + `setZoom(9)` чекбокс «Тени рельефа» активен, но MapLibre 404'нется + на каждом hillshade-запросе → пользователь видит включённый слой + **без теней** (хуже, чем до ET-013, где чекбокс был disabled с + честным hint'ом «Зум 10+»). На z10/z11 hillshade и TRI z9-z11 — + работают, т.е. ET-013 функционален везде, кроме «заглавного» z9 + hillshade. - **UI Playwright (TC-UI-01..12) — NOT EXECUTED:** раннер - `/home/slin/tools/ui-test/run_tests.js` и `playwright`/`npx` - недоступны в этом контейнере. Дополнительно: test-среда сейчас - держит **до-ET-013** код (`if (zoom < 10)`, `HILLSHADE_PAINT` нет), - поэтому даже при наличии раннера большинство TC дали бы PASS «по - старому контракту» — нерелевантный сигнал. Визуальные TC должны - выполниться **после** деплоя. + (`$UI_TEST_RUNNER` пуст, `/home/slin/tools/ui-test/run_tests.js` + отсутствует) и `playwright`/`npx` недоступны в этом контейнере. + Визуальные TC должны выполниться оператором/Playwright после + устранения P1 (генерация z9-тайлов). См. §5. **Вердикт: BLOCKED.** Реализация ET-013 в коде корректна и готова, -но деплой остановлен по TRZ REQ-F-20 §1: «При 404 — задача -останавливается, тайлы z9 нужно догенерировать в рамках PH-6 -follow-up». Следующий шаг — открыть PH-6 follow-up +но деплой/закрытие остановлены по TRZ REQ-F-20 §1 и AC-19: «При 404 — +задача останавливается, тайлы z9 нужно догенерировать в рамках PH-6 +follow-up». Следующий шаг — выполнить PH-6 follow-up («generate hillshade tiles z8-z9 для CFO») и после генерации тайлов -повторно прогнать pre-deploy probe + Playwright UI suite. +повторно прогнать pre-deploy probe + Playwright UI suite. **Это не +дефект кода ET-013 — `back-to:dev` для фронтенда не требуется.** --- -## 1. Окружение прогона +## 1. Окружение прогона (v2) | Параметр | Значение | |-------------------------|-------------------------------------------------------------------------| | Ветка | `feature/ET-013-z9-z11-z8` | -| HEAD | `397dc60 reviewer(ET): auto-commit from reviewer run_id=84` | +| HEAD | `badd559 reviewer(ET): auto-commit from reviewer run_id=207` | | Содержательные коммиты | `5be81f9 feat(terrain): zoom-aware paint для hillshade/TRI на z9-z11 (ET-013)`
`099669d fix(terrain): расширить whitelist endpoint'а на `tri` (ET-013 review F-1)` | -| Python | 3.12.13 | -| pytest | 8.3.3 | -| Ruff | через `python -m ruff check src/api/` | +| Python | 3.12 (изолированный venv `/tmp/et013venv`) | +| Зависимости | `make`/`curl` в контейнере отсутствуют → pytest запущен напрямую (как в Makefile), HTTP — через `urllib.request`. В venv доустановлены `shapely`, `defusedxml`, `lxml`, `mapbox-vector-tile`, `pytest-asyncio` (по `src/api/requirements.txt`), что закрыло collection-ошибки v1. | | Test-среда (HTTP) | https://openclaw.mva154.duckdns.org/enduro/ | -| Состояние test-среды | **до-ET-013** (фронт ещё с `if (zoom < 10)`, без `HILLSHADE_PAINT`/`TRI_PAINT`). Это ожидаемо: деплой ET-013 — следующий этап пайплайна. | -| `curl` в sandbox | отсутствует; HTTP-проверки выполнены через `urllib.request` (Python). | +| Состояние test-среды | **ET-013 РАЗВЁРНУТ** (изменение со времён v1). `app.js` содержит `HILLSHADE_PAINT`/`TRI_PAINT`/`opacityOrPaint`/`raster-contrast`/`'nearest'`/`if (zoom < 9)`; hint = «Зум 9+». | Сетевая проверка `/health`: ``` @@ -77,29 +88,55 @@ GET /enduro/api/health → 200 {"status":"ok","db_path":"/app/data/centralfederal.sqlite","db_exists":true} ``` ---- - -## 2. Шаг 1 — `make lint` - +Проверка факта деплоя ET-013 (`urllib` против test-среды): ``` -python -m ruff check src/api/ -All checks passed! +GET /enduro/app.js → len=132149 + HILLSHADE_PAINT : True TRI_PAINT : True + opacityOrPaint : True raster-contrast: True + 'nearest' : True 'zoom < 9' : True +GET /enduro/ → hint #terrain-hillshade-hint = «Зум 9+» ``` -**Результат:** ✅ PASS (часть AC-18). --- -## 3. Шаг 2 — `make test` (целевой gate) +## 2. Шаг 1 — линт -### 3.1 Прицельный прогон ET-013 +`make`/`ruff` в контейнере недоступны, отдельный прогон линта в v2 не +выполнялся. Линт-статус AC-18 опирается на Review v3 (APPROVED, код не +менялся с v1, где `ruff check src/api/` = «All checks passed!»). Код +`src/`/`tests/` идентичен ревью-одобренному (`git diff` от ревью — +только docs). + +--- + +## 3. Шаг 2 — авто-регресс (целевой gate) + +### 3.1 Полный прогон (`pytest tests/`) + +В отличие от v1 (где sandbox не имел `lxml`/`shapely`/`defusedxml`/ +`pytest-asyncio` и collection падал), в v2 собран изолированный venv +со всеми зависимостями `src/api/requirements.txt` + `pytest-asyncio`. +Полный прогон зелёный целиком: + +``` +cd src/api && python -m pytest ../../tests/ --asyncio-mode=auto +========== 254 passed, 7 skipped, 4 deselected, 23 warnings in 4.27s ========== +``` + +- `4 deselected` — perf/network маркеры (стандартный exclude). +- `7 skipped` — `test_terrain_tile_available_z9_z10_z11[*]` (×6) и + `test_terrain_tile_cache_control_immutable` — требуют PNG-fixtures в + `data/terrain/`, которых нет в sandbox. Skip — корректный механизм + (AC-16: «при отсутствии тайлов — skipped с reason»). +- **0 failed. Регрессий ET-007 / ET-008 / ET-009 / ET-011 / ET-012 — НЕТ.** + +### 3.2 Прицельный прогон ET-013 ``` python -m pytest tests/unit/test_terrain_paint.py \ - tests/integration/test_terrain_z9_tiles.py -v + tests/integration/test_terrain_z9_tiles.py --asyncio-mode=auto -v -collected 30 items -… -=================== 23 passed, 7 skipped, 1 warning in 0.46s =================== +=================== 17 passed (unit) · 6 passed + 7 skipped (integration) =================== ``` | Suite | Кейсов | PASS | SKIP | Покрытие AC | @@ -135,37 +172,6 @@ collected 30 items механизм через `_maybe_skip`; AC-16 говорит «при отсутствии тайлов в CI — тесты skipped с reason», что в точности и наблюдается. -### 3.2 Полный регресс (`pytest tests/`) - -Полный прогон падает на collection из-за **внешней** проблемы: - -``` -ERROR tests/api/test_gps_tracks_download.py -ERROR tests/api/test_gps_tracks_gpx_builder.py - from lxml import etree as lxml_et -E ModuleNotFoundError: No module named 'lxml' -!!! Interrupted: 2 errors during collection !!! -``` - -`lxml` не установлен в этом контейнере. Это **наследие ET-011 / GPX -download**, не связано с ET-013 (ветка не трогает `gps_tracks/`). -В CI-окружении проекта `lxml` устанавливается через -`src/api/requirements.txt`, и эти тесты зелёные. - -Прогон без этих двух файлов: -``` -python -m pytest tests/ \ - --ignore=tests/api/test_gps_tracks_download.py \ - --ignore=tests/api/test_gps_tracks_gpx_builder.py -… -========== 191 passed, 46 skipped, 4 deselected, 79 warnings in 3.47s ========== -``` - -- `4 deselected` — perf/network маркеры (стандартный exclude). -- `46 skipped` — async-тесты `gps_tracks` (нет pytest-asyncio в - sandbox) + integration без fixtures. Не относится к ET-013. -- **Регрессий ET-007 / ET-008 / ET-009 / ET-011 / ET-012 — НЕТ.** - **Результат:** ✅ PASS (AC-15, AC-16 в части автоматики, AC-17, AC-18). --- @@ -175,31 +181,36 @@ python -m pytest tests/ \ ### 4.1 IT-TILE-* «вживую» против test-среды Поскольку sandbox без data fixtures даёт SKIP, я выполнил эквивалент -IT-TILE-* напрямую HTTP-запросом к test-среде. Координата +IT-TILE-* напрямую HTTP-запросом (`urllib`) к test-среде. Координата `[37.6, 54.5]` (юг МО / Кашира) — основная для UI-тестов (см. 04b-ui-test-cases.md §«Координаты»). Тайлы под TMS-схемой (как объявлено в `addSource(... scheme: 'tms' ...)`): | z | hillshade (x, y_tms) | hillshade status | tri (x, y_tms) | tri status | |----|---------------------------|------------------|---------------------------|------------| +| 5 | `5/19/21` | **❌ 404** ² | `5/19/21` | ✅ 200 | | 8 | `8/154/174` | **❌ 404** | `8/154/174` | ✅ 200 | | 9 | `9/309/348` | **❌ 404** | `9/309/348` | ✅ 200 | | 10 | `10/618/697` | ✅ 200 | `10/618/697` | ✅ 200 | | 11 | `11/1237/1395` | ✅ 200 | `11/1237/1395` | ✅ 200 | +| 12 | `12/2475/2790` | ✅ 200 | `12/2475/2790` | ✅ 200 | | 14 | `14/9903/11162` | ✅ 200 | `14/9903/11162` | ❌ 404 ¹ | -¹ TRI z=14 404 — за пределами TRI-стека (TRI генерится до z11 в -PH-6, регрессия известная, в скоупе ET-013 не трогается). Чекбокс TRI -на z=14 включит источник с minzoom=5/maxzoom=15, но реально тайлы -отдадутся только до z=11; визуально на z>11 — пусто. Это **не** +¹ TRI z=14 404 — за пределами TRI-стека (TRI генерится до z12 в +PH-6, регрессия известная, в скоупе ET-013 не трогается). Это **не** новая регрессия ET-013, такое же поведение было до ET-013. Фиксирую как P3 для PH-6 follow-up. -Дополнительная проверка покрытия hillshade z=9 — wide grid 5×5 вокруг -центра `(309, 348)`: +² hillshade на z5-z9 не сгенерирован вообще — hillshade-стек начинается +с z10. Это и есть корень P1: ET-013 объявляет hillshade c z9, но данных +ниже z10 нет. + +Дополнительная проверка покрытия hillshade z=9 — 6 точек ЦФО +(`[37.6,54.5]`, `[37.6,55.7]`, `[38.6,54.0]`, `[36.0,55.0]`, +`[39.0,55.0]`, `[37.0,53.5]`) + grid 5×5 вокруг центра `(309, 348)`: ``` -hillshade z=9 found: 0 tiles around (309,348) -hillshade z=10 found: 9 tiles around (618,697) +hillshade z=9 across 6 CFO points : 0/6 → все 404 +hillshade z=9 grid 5×5 around (309,348) : 0/9 → все 404 ``` То есть на z=9 нет ни одного hillshade-тайла, не только «целевого»; данных просто нет в pipeline. @@ -234,58 +245,60 @@ immutable`, но nginx-конфиг на test-среде стрипает `immut ### 5.1 Состояние раннера ``` +$UI_TEST_RUNNER → (пусто) ls /home/slin/tools/ui-test/ → No such file or directory which playwright / npx → not found -find / -name run_tests.js -type f → (нет результатов) +node -e require.resolve(playwright)→ playwright NOT installed +find / -name run_tests.js -path *ui* → (нет результатов) ``` UI-test раннер, Playwright и `npx` в этом контейнере отсутствуют. -Запустить TC-UI-01..12 невозможно. +Запустить TC-UI-01..12 автоматически невозможно. `node v22.22.2` +присутствует, но без playwright-модуля и браузеров. -### 5.2 Состояние test-среды (до-ET-013) +### 5.2 Состояние test-среды (ET-013 РАЗВЁРНУТ) ``` GET https://openclaw.mva154.duckdns.org/enduro/app.js -HILLSHADE_PAINT in body: False -TRI_PAINT in body: False -'if (zoom < 9)' in body: False -'if (zoom < 10)' in body: True +HILLSHADE_PAINT in body: True +TRI_PAINT in body: True +'if (zoom < 9)' in body: True +opacityOrPaint in body: True +GET /enduro/ → hint «Зум 9+» ``` -На test-среде сейчас выкатан **до-ET-013** код. Это **ожидаемо**: -деплой ET-013 — следующий этап пайплайна (deployer → `14-deploy-log.md`). -Визуальную регрессию TC-UI-01..12 имеет смысл прогонять только -ПОСЛЕ деплоя. +В отличие от v1, на test-среде сейчас выкатан **код ET-013**. Поэтому +визуальные TC уже релевантны — но раннер недоступен (§5.1), а ключевой +для z9 контент (hillshade-тайлы) отсутствует (§4.1). -### 5.3 План постдеплойного прогона (DEFERRED) +## Visual / UI тесты -| TC | Тип | viewport | Зум | Что проверяем | Severity | Статус | -|-------------------------|--------------------|----------|-----|-------------------------------------------------------|----------|--------------| -| TC-UI-01-Z9 | functional+visual | desktop | 9 | Чекбокс активен, hint скрыт, hillshade виден | **P1** | DEFERRED ¹ | -| TC-UI-02-Z8-REGRESS | regression+visual | desktop | 8 | TRI выглядит как до ET-013 | P2 | DEFERRED | -| TC-UI-03-Z9-Q | visual (qual.) | desktop | 9 | Перепады читаются ≥ z=8 | **P1** | DEFERRED ¹ | -| TC-UI-04-Z10-Q | visual (qual.) | desktop | 10 | Перепады читаются | P2 | DEFERRED | -| TC-UI-05-Z11-Q | visual (qual.) | desktop | 11 | Перепады читаются | P2 | DEFERRED | -| TC-UI-06-Z14-REGRESS | regression+visual | desktop | 14 | Hillshade не «перегрет» (opacity 0.40, contrast 0) | P2 | DEFERRED | -| TC-UI-07-Z9-MOBILE | visual | mobile | 9 | Чекбокс/hint работают, нет H-scroll | **P1** | DEFERRED ¹ | -| TC-UI-08-Z10-SAT-Q | visual (qual.) | desktop | 10 | Hillshade поверх спутника не «глушит» | P2 | DEFERRED | -| TC-UI-09-Z10-DARK-Q | visual (qual.) | desktop | 10 | Hillshade на тёмной теме читается | P2 | DEFERRED | -| TC-UI-10-PERSIST | functional+visual | desktop | 10 | F5 не теряет состояние, оба слоя восстановлены | P2 | DEFERRED | -| TC-UI-11-NETWORK-Q | perf (network) | desktop | 8-11 | Σ traffic ≤ 135% baseline | P2 | DEFERRED | -| TC-UI-12-Z9-PAN | perf+visual | desktop | 9 | Pan без «белых дыр» в hillshade/TRI | P3 | DEFERRED | +Автоматический прогон визуальных кейсов в текущем контейнере не +выполнен (нет раннера/Playwright). Ниже — статус каждого TC с учётом +**фактического** состояния test-среды (ET-013 выкатан; hillshade z9 = +404; hillshade z10/z11 = 200; TRI z9-z11 = 200). Кейсы, зависящие от +hillshade z9, помечены FAIL по данным §4.1 — это не требует скриншота: +слой физически не имеет тайлов и отрисуется пустым. -¹ **TC-UI-01, TC-UI-03, TC-UI-07 — заблокированы pre-deploy gate -(см. §4.1):** даже после деплоя ET-013 эти три кейса дадут FAIL, -потому что `/terrain/hillshade/9/*` отдаёт 404 → MapLibre нарисует -hillshade-слой пустым (или с «белыми дырами»), что не соответствует -AC-03 «На карте видны тени рельефа». +| TC | Зум | Проверка | Вердикт | Обоснование | +|----|-----|----------|---------|-------------| +| TC-UI-01-Z9 | 9 | Чекбокс активен, hint скрыт, hillshade виден | **FAIL (P1)** | Чекбокс/hint — OK (код выкатан), но hillshade z9 = 404 → теней нет. AC-03 не выполнен. | +| TC-UI-02-Z8-REGRESS | 8 | TRI как до ET-013 | NOT RUN | Нужен скриншот+baseline (нет раннера). TRI z8 = 200, код paint совпадает (unit PASS). | +| TC-UI-03-Z9-Q | 9 | Перепады читаются ≥ z8 | **FAIL (P1)** | hillshade z9 = 404; читаемость z9 деградирована относительно ожидания AC-07. TRI z9 работает, но hillshade-компонента отсутствует. | +| TC-UI-04-Z10-Q | 10 | Перепады читаются | NOT RUN | Контент есть (hillshade+TRI z10 = 200); требует визуальной приёмки оператором. | +| TC-UI-05-Z11-Q | 11 | Перепады читаются | NOT RUN | Контент есть (z11 = 200); визуальная приёмка. | +| TC-UI-06-Z14-REGRESS | 14 | Hillshade не «перегрет» | NOT RUN | hillshade z14 = 200, paint-stops подтверждены unit-тестом (opacity 0.40 / contrast 0). | +| TC-UI-07-Z9-MOBILE | 9 | Mobile: чекбокс/hint, нет H-scroll | **FAIL (P1)** | Та же причина, что TC-UI-01: hillshade z9 = 404. | +| TC-UI-08-Z10-SAT-Q | 10 | Hillshade поверх спутника | NOT RUN | Контент z10 есть; визуальная приёмка. | +| TC-UI-09-Z10-DARK-Q | 10 | Hillshade на тёмной теме | NOT RUN | Контент z10 есть; визуальная приёмка. | +| TC-UI-10-PERSIST | 10 | F5 не теряет состояние | NOT RUN | Логика persistence не менялась (REQ-F-17); требует браузера. | +| TC-UI-11-NETWORK-Q | 8-11 | Σ traffic ≤ 135% baseline | NOT RUN | Требует DevTools Network + baseline. | +| TC-UI-12-Z9-PAN | 9 | Pan без «белых дыр» | NOT RUN | На z9 hillshade-слой и так пустой (404) → проверка теряет смысл до фикса P1. | -**DEFERRED** = тест не запущен в текущем окружении и должен быть -выполнен оператором/Playwright против test-среды **после**: -(a) генерации hillshade z8-z9 тайлов (PH-6 follow-up); -(b) деплоя ET-013. - -Результаты приколоть к `14-deploy-log.md`. +**Легенда:** FAIL — кейс провален по объективным данным (404-тайлы); +NOT RUN — не выполнен из-за отсутствия раннера/Playwright, требует +ручного/Playwright-прогона оператором после устранения P1. Результаты +приколоть к `14-deploy-log.md`. --- @@ -295,30 +308,31 @@ AC-03 «На карте видны тени рельефа». |---------|-------------------------------------------------------------------------------------------|------------------------| | AC-01 | `test_minzoom_threshold_lowered_to_9`, `test_hint_text_updated_to_z9` | ✅ PASS | | AC-02 | DevTools на test-среде | ⏳ DEFER → deploy log | -| AC-03 | TC-UI-01-Z9 + видимость hillshade-слоя | **❌ BLOCKED** (нет тайлов z9) | +| AC-03 | TC-UI-01-Z9 + видимость hillshade-слоя | **❌ FAIL** (z9-тайлы 404, среда выкатана) | | AC-04 | `test_hillshade_opacity_is_interpolate_by_zoom`, `…contrast_peak_z9`, `…resampling_nearest` | ✅ PASS | | AC-05 | `test_tri_opacity_z8_regression`, `test_tri_opacity_peak_z9_z11`, `…resampling_nearest` | ✅ PASS | | AC-06 | `test_tri_opacity_z8_regression` (z8 = 0.70 ровно) + TC-UI-02-Z8-REGRESS | ✅ PASS (код) / ⏳ DEFER (visual) | -| AC-07 | TC-UI-03-Z9-Q | **❌ BLOCKED** (нет тайлов z9) | +| AC-07 | TC-UI-03-Z9-Q | **❌ FAIL** (z9-тайлы 404, среда выкатана) | | AC-08 | TC-UI-04-Z10-Q | ⏳ DEFER → deploy log | | AC-09 | TC-UI-05-Z11-Q | ⏳ DEFER → deploy log | | AC-10 | TC-UI-06-Z14-REGRESS | ⏳ DEFER → deploy log | | AC-11 | TC-UI-09-Z10-DARK-Q | ⏳ DEFER → deploy log | | AC-12 | TC-UI-08-Z10-SAT-Q | ⏳ DEFER → deploy log | -| AC-13 | TC-UI-07-Z9-MOBILE | **❌ BLOCKED** (нет тайлов z9) | +| AC-13 | TC-UI-07-Z9-MOBILE | **❌ FAIL** (z9-тайлы 404, среда выкатана) | | AC-14 | TC-UI-10-PERSIST | ⏳ DEFER → deploy log | | AC-15 | `pytest tests/unit/test_terrain_paint.py` — 17/17 | ✅ PASS | | AC-16 | `pytest tests/integration/test_terrain_z9_tiles.py` — 6 pass / 7 skip (по плану) | ✅ PASS | -| AC-17 | Полный `pytest tests/` (исключая lxml-зависимые) — 191 passed, 46 skipped | ✅ PASS | -| AC-18 | `make lint` (✅) + `make test` (✅ модуль ET-013; полный — внешняя lxml-проблема) | ✅ PASS | -| AC-19 | Pre-deploy `curl -sI .../hillshade/{9,10,11}/X/Y.png` — `hillshade/9` отдаёт **404** | **❌ FAIL (P1)** | +| AC-17 | Полный `pytest tests/` — **254 passed, 7 skipped, 4 deselected, 0 failed** | ✅ PASS | +| AC-18 | Линт (Review v3, код не менялся) + полный `pytest` зелёный | ✅ PASS | +| AC-19 | Pre-deploy probe `.../hillshade/{9,10,11}/X/Y.png` — `hillshade/9` отдаёт **404** | **❌ FAIL (P1)** | | AC-20 | Документация work item (см. §8) | ✅ PASS (12+ файлов) | | AC-21 | TC-UI-11-NETWORK-Q (требует baseline + Playwright) | ⏳ DEFER → deploy log | | AC-22 | `test_apply_terrain_layer_normalizes_number_to_legacy_paint` + `…uses_paint_variable` | ✅ PASS | -**Итого:** 10/22 AC закрыты автоматически зелёные · 1 AC **FAIL -(блокер P1)** · 3 AC **BLOCKED** (зависят от AC-19) · 8 AC -делегированы Deployer-агенту. +**Итого:** 11/22 AC закрыты авто-зелёные · 1 AC **FAIL (блокер P1, +AC-19)** · 3 AC **FAIL** (AC-03/07/13 — следствие AC-19: z9-тайлы 404) +· 7 AC делегированы Deployer-агенту (визуальная приёмка z10/z11/dark/ +sat/persist/network). --- @@ -334,21 +348,23 @@ AC-03 «На карте видны тени рельефа». **Где.** Test-среда `https://openclaw.mva154.duckdns.org/enduro/terrain/hillshade/9/*.png`. **Симптом.** Все запросы вида `GET /terrain/hillshade/9/X/Y.png` (и -`hillshade/8/…`) возвращают 404. Покрытие отсутствует на всю -изученную область юга МО / ЦФО (проверено grid'ом 5×5 вокруг -ожидаемой целевой плитки `(309, 348)` под TMS). +`hillshade/5..8/…`) возвращают 404. Покрытие отсутствует на всю +изученную область юга МО / ЦФО (проверено 6 точками ЦФО + grid'ом 5×5 +вокруг целевой плитки `(309, 348)` под TMS). hillshade-стек начинается +только с z10. -**Почему блокер.** После деплоя ET-013 фронт: -- понизит UI-минзум hillshade до 9 → чекбокс «Тени рельефа» станет - активным на z=9; -- понизит `source.minzoom` до 9 → MapLibre начнёт запрашивать - `/terrain/hillshade/9/X/Y.png`; -- получит 404 → слой нарисуется пустым. +**Почему блокер (в v2 — уже фактический, не гипотетический).** ET-013 +**уже выкатан** на test-среду: +- UI-минзум hillshade понижен до 9 → чекбокс «Тени рельефа» активен + на z=9; +- `source.minzoom` = 9 → MapLibre запрашивает `/terrain/hillshade/9/X/Y.png`; +- получает 404 → слой рисуется пустым **прямо сейчас**. -Пользователь увидит **включённый** слой **без теней**. Это хуже, чем +Пользователь видит **включённый** слой **без теней**. Это хуже, чем до ET-013, где чекбокс был disabled с честным hint'ом «Зум 10+». **Регрессия UX**, явно противоречащая AC-03 / AC-07 / AC-13 / BRD-цели -ET-013 («перепады читаются на z9-z11»). +ET-013 («перепады читаются на z9-z11»). На z10/z11 hillshade и на +z9-z11 TRI — работают корректно (тайлы 200). **Что делать.** TRZ REQ-F-20 §1 и AC-19 однозначно говорят: > Если 404 — задача останавливается, тайлы z9 нужно догенерировать в @@ -363,10 +379,11 @@ ET-013 («перепады читаются на z9-z11»). Deployer. **Severity = P1, не P0** только потому, что: (a) код ET-013 корректен -и proven unit/integration-тестами; (b) рег-серверная UI-страница -сейчас работает (тестовая среда держит до-ET-013, чекбокс правомерно -disabled); (c) рабочий процесс PH-6 follow-up — стандартная процедура -для такого класса проблем. +и proven unit/integration-тестами; (b) деградирован только z9 hillshade +— z10/z11 hillshade и z9-z11 TRI работают; (c) рабочий процесс PH-6 +follow-up — стандартная процедура для такого класса проблем. Тем не +менее в v2 проблема **фактическая** (ET-013 уже на test), а не только +pre-deploy-гипотеза. ### P2 Нет. @@ -374,9 +391,10 @@ disabled); (c) рабочий процесс PH-6 follow-up — стандарт ### P3 #### P3-01 — TRI z=14 отдаёт 404 (предсуществующая регрессия PH-6, не в скоупе ET-013) -`GET .../tri/14/X/Y.png → 404`. ET-013 не трогает TRI pipeline, -но при включённом TRI и z>11 пользователь видит пустой слой. Покрыть -follow-up'ом «extend TRI tiles to z14». +`GET .../tri/14/X/Y.png → 404` (TRI-стек заканчивается на z12). +ET-013 не трогает TRI pipeline, но при включённом TRI и z>12 +пользователь видит пустой слой. Покрыть follow-up'ом «extend TRI +tiles to z14». #### P3-02 — Cache-Control `immutable` стрипается nginx-проксей на test Backend FastAPI отдаёт `max-age=31536000, immutable`, на проде через @@ -417,46 +435,60 @@ docs/work-items/ET-013/ ## 9. Вердикт -**BLOCKED.** Реализация ET-013 в коде корректна и готова к деплою: -- `make lint` и прицельный `make test` (ET-013 модуль) — зелёные. -- 23/23 PASS unit/integration ET-013 (7 SKIP — ожидаемые без data - fixtures), 0 регрессий на 191 кейсе остальных тестов. -- Соответствие TRZ / ADR-017 — 1:1 (подтверждено Review v2). -- Контракт API на test-среде — стабилен. +**BLOCKED.** Реализация ET-013 в коде корректна: +- Полный авто-регресс зелёный: **254 passed, 7 skipped, 4 deselected, + 0 failed**. ET-013 unit 17/17 PASS, integration 6 PASS / 7 SKIP + (ожидаемо без data fixtures). Регрессий ET-007/008/009/011/012 нет. +- Соответствие TRZ / ADR-017 — 1:1 (подтверждено Review v3, APPROVED). +- Контракт API на test-среде стабилен; ET-013-фронт корректно выкатан. -Однако **pre-deploy gate AC-19 не пройден** (P1-01): на test-среде -отсутствуют `hillshade/z9/*` (и `z8`) тайлы. Деплой остановлен -согласно TRZ REQ-F-20 §1 и BRD-приоритету «UX-regression > frontend-fix -ready». +Однако **pre-deploy/acceptance gate AC-19 не пройден** (P1-01): на +test-среде отсутствуют тайлы `hillshade/z5..z9/*`. Поскольку ET-013 +уже на test, это даёт **фактическую** UX-регрессию: AC-03/AC-07/AC-13 +(z9 hillshade) — FAIL. Закрытие/полная приёмка остановлены согласно +TRZ REQ-F-20 §1 и BRD-приоритету «UX-regression > frontend-fix ready». ### Что должно произойти дальше -1. **Открыть PH-6 follow-up:** «Generate hillshade tiles z8..z9 for - CFO coverage area» (≈ область, покрытая `data/terrain/hillshade/10/`, - расширенная вверх по zoom-иерархии). +1. **Открыть/выполнить PH-6 follow-up:** «Generate hillshade tiles + z5..z9 for CFO coverage area» (≈ область, покрытая + `data/terrain/hillshade/10/`, расширенная вверх по zoom-иерархии). + В v1 этот follow-up был рекомендован, но **не выполнен** — тайлы + z9 по-прежнему 404. 2. **После генерации тайлов:** - - повторный пробинг по §4.1 — все 6 ячеек (hillshade/tri × z=9..11) - должны вернуть 200; - - повторный запуск Tester'а (изменения отчёта — в виде патча версии - v2 этого файла, без `back-to:dev` для самого ET-013); - - переход на Deployer. -3. **Deployer:** - - накатить ветку `feature/ET-013-z9-z11-z8` в test; + - повторный пробинг по §4.1 — ячейки hillshade/tri × z=9..11 → 200; + - повторный запуск Tester'а (патч-версия отчёта); + - визуальная приёмка z9. +3. **Deployer / оператор (ручная Playwright-приёмка):** - выполнить ручные шаги REQ-F-20 §2: открыть карту, `setZoom(9)`, включить hillshade, скриншот → визуальная приёмка AC-03..AC-05; - - прогнать Playwright TC-UI-01..12 (или хотя бы P1: TC-UI-01, - TC-UI-03, TC-UI-07); + - прогнать Playwright TC-UI-01..12 (приоритет P1: TC-UI-01, -03, -07; + плюс уже-исполнимые z10/z11/dark/sat/persist — TC-UI-04/05/06/08/09/10); - замерить network-объём (TC-UI-11/AC-21) против baseline; - зафиксировать всё в `14-deploy-log.md`. 4. **Если визуальная приёмка AC-07..AC-09 «перепады недостаточно выразительны»** — корректировка stops в HILLSHADE_PAINT/TRI_PAINT - (это калибровка, не баг — см. BRD §6 «известная итеративность - калибровки»). + (калибровка, не баг — см. BRD §6). ### Что НЕ нужно делать -- **Не back-to:dev для ET-013-frontend.** Код ETM-013 правильный, тесты - зелёные, ревью пройдено. Изменения в `src/web/app.js` / `src/web/index.html` - не требуются. -- **Не закрывать ET-013 без устранения P1-01.** Деплой без z9-тайлов - даст регрессию UX (включённый, но пустой hillshade на z=9). +- **Не back-to:dev для ET-013-frontend.** Код ET-013 правильный, тесты + зелёные, ревью пройдено (v3 APPROVED). Правки в `src/web/app.js` / + `src/web/index.html` не требуются — это блокер данных PH-6, не кода. +- **Не закрывать ET-013 без устранения P1-01.** Текущее состояние test + даёт включённый, но пустой hillshade на z=9. + +--- + +## 10. Изменения в v2 (относительно v1) + +- Полный авто-регресс теперь зелёный (254 passed) — в venv доустановлены + `shapely`/`defusedxml`/`lxml`/`mapbox-vector-tile`/`pytest-asyncio`, + чего не хватало в sandbox для v1 (collection-ошибки сняты). +- **test-среда теперь держит код ET-013** (в v1 — до-ET-013). Поэтому + AC-03/07/13 переведены из BLOCKED в **FAIL** (объективно проваливаются + на живой среде из-за 404-тайлов z9). +- Уточнены границы стеков: hillshade z10..z14 (200), TRI z5..z12 (200); + hillshade z5..z9 и TRI z13+ — отсутствуют. +- P1-01 остаётся открытым: PH-6 follow-up по z9-тайлам **не выполнен** + со времён v1.