68 KiB
type, work_item_id, title, version, status, verdict, created_at, updated_at, authors, related, adr_refs
| type | work_item_id | title | version | status | verdict | created_at | updated_at | authors | related | adr_refs | ||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| test-report | ET-013 | Test Report: Перепады высот на z9-z11 — zoom-aware paint | 13 | blocked | BLOCKED | 2026-06-04 | 2026-06-07 |
|
|
|
Test Report — ET-013
v13 (2026-06-07). Независимый перепрогон (tester re-run, свежий экземпляр). Состояние кода ET-013 неизменно с v2 (фича в
main:5be81f9feat,099669dfix-whitelist;git diff main...HEADзатрагивает только docs —12-review.md,13-test-report.md). Прогон в venv/tmp/et013-venv-r241(projectrequirements.txt+ pytest/ pytest-asyncio/ruff). Review #19 — APPROVED (P0/P1 в коде нет).
- Окружение/health.
curlв песочнице недоступен (command not found) — probe черезpython3 urllib.GET /enduro/api/health→ 200 ({"status":"ok","db_path":"/app/data/centralfederal.sqlite", "db_exists":true}).- Полный авто-регресс (
pytest tests/ --asyncio-mode=auto) → 254 passed, 7 skipped, 4 deselected, 0 failed (4.10 s). Регрессий ET-007/008/009/011/012 нет (AC-17).- ET-013 unit+integration → 23 passed / 7 skipped (17 unit PASS [opacity/contrast stops + монотонность,
nearest, регрессия z8=0.70, пик z9-z11≥0.80, обратная совместимостьapplyTerrainLayer, порогzoom < 9+ отсутствие< 10, hint «Зум 9+», call-count, привязка paint+minzoom к слою] + 6 integration PASS [whitelist hypso/hillshade/ tri, 404 на unknown-layer/missing-tile/invalid-zoom] + 7 integration SKIP — нет PNG-fixtures, AC-15/AC-16/AC-22 ✅).- Lint
ruff check .→ All checks passed! (exit 0, AC-18).- Деплой ET-013 на test подтверждён:
app.js(len 132149) содержитHILLSHADE_PAINT/TRI_PAINT/raster-contrast/'nearest'/opacityOrPaint/if (zoom < 9); нетif (zoom < 10).index.htmlhint = «Зум 9+» (нет «Зум 10+»). Деплой корректно запрашивает z9 hillshade (AC-01 ✅).Cache-Controlсуществующего тайла (tri/10/616/695, ctimage/png, 83705 B) =max-age=31536000→ REQ-F-18 соблюдён (флагimmutable/publicколеблется на nginx-edge между прогонами; P3, вне скоупа).- ❌ Pre-deploy probe AC-19 / REQ-F-20 §1 — повторно FAIL (P1): hillshade z9-тайлы отсутствуют на test-среде. Канонические XYZ-probe из TRZ (
9/308/158,10/617/317,11/1234/635) → все 404 (XYZ ≠ TMS-схема среды). Скан по реальному TMS вокруг центра[37.6, 54.5](grid 5×5): hillshade z9 → 0/25 → 200 (все 404), z8 → 0/25; при этом hillshade z10 → 20/25 → 200, z11 → 25/25 → 200; TRI z8/z9/z10/z11 → 25/25 → 200. Слой hillshade по-прежнему начинается с z10. PH-6 follow-up из v1..v12 так и не выполнен.- Следствие для UX: на z9 включённые «Тени рельефа» дают пустой слой (тайлы 404) — видны только «Перепады» (TRI z9 есть). Нарушены AC-03 («на карте видны тени рельефа» при z9) и AC-19 (z9/z10/z11 = 200).
- UI Playwright (TC-UI-01..12) — NOT EXECUTED:
$UI_TEST_RUNNERпуст,/home/slin/tools/ui-test/run_tests.jsотсутствует,playwright/браузеры не установлены (require('playwright')→ not found, нет~/.cache/ms-playwright). Визуальная приёмка AC-07..AC-13 не выполнена (см. таблицу «Visual / UI тесты» ниже).Вердикт — BLOCKED по pre-deploy gate AC-19 (без изменений с v8..v12).
back-to:devне требуется: дефекта кода нет (Review #19 APPROVED, unit/integration/lint зелёные, деплой корректен). Блокер инфраструктурный — на test-среде не нарезаны z9-тайлы hillshade. Разблокировка = PH-6 follow-up (догенеритьdata/terrain/hillshade/9/*над ЦФО и задеплоить), затем повторный AC-19 + Playwright TC-UI-01..12 в окружении с браузерами.Visual / UI тесты (v13)
Раннер UI-тестов недоступен в песочнице (
$UI_TEST_RUNNERпуст,run_tests.jsотсутствует,playwrightне установлен). Все check-visual — NOT EXECUTED (BLOCKED). Дополнительно TC, завязанные на hillshade z9, заблокированы отсутствием тайлов (AC-19).
TC Назначение Вердикт Причина TC-UI-01-Z9 hillshade доступен/виден на z9 BLOCKED нет runner + нет z9-тайлов hillshade TC-UI-02-Z8-REGRESS TRI на z8 как до ET-013 NOT EXECUTED нет runner (TRI z8 тайлы есть) TC-UI-03-Z9-Q читаемость перепадов z9 BLOCKED нет runner + нет z9-тайлов hillshade TC-UI-04-Z10-Q читаемость z10 NOT EXECUTED нет runner (тайлы z10 есть) TC-UI-05-Z11-Q читаемость z11 NOT EXECUTED нет runner (тайлы z11 есть) TC-UI-06-Z14-REGRESS hillshade не перегрет z14 NOT EXECUTED нет runner TC-UI-07-Z9-MOBILE mobile, hillshade z9 BLOCKED нет runner + нет z9-тайлов TC-UI-08-Z10-SAT-Q спутник + hillshade z10 NOT EXECUTED нет runner TC-UI-09-Z10-DARK-Q тёмная тема + hillshade z10 NOT EXECUTED нет runner TC-UI-10-PERSIST localStorage переживает F5 NOT EXECUTED нет runner TC-UI-11-NETWORK-Q сетевой объём ≤135% (M-10) NOT EXECUTED нет runner/DevTools TC-UI-12-Z9-PAN pan на z9 без лагов BLOCKED нет runner + нет z9-тайлов
v12 (2026-06-07). Независимый перепрогон (tester re-run). Состояние кода ET-013 неизменно с v2 (фича в
main:5be81f9feat,099669dfix-whitelist; последующие коммиты — только docs/review). Перепроверено в свежем venv/tmp/et013-venv-r-new(--system-site-packages+src/api/requirements.txt+pytest/pytest-asyncio/ruff):
- Окружение/health.
curlв песочнице недоступен (command not found) — probe черезpython3 urllib.GET /enduro/api/health→ 200 ({"status":"ok","db_path":"/app/data/centralfederal.sqlite","db_exists":true}).- Полный авто-регресс (
make test=pytest tests/ --asyncio-mode=auto) → 254 passed, 7 skipped, 4 deselected, 0 failed (4.47 s). Регрессий ET-007/008/009/011/012 нет.- ET-013 unit+integration → 23 passed / 7 skipped (17 unit PASS + 6 integration PASS [whitelist hypso/hillshade/tri, 404 на unknown-layer/ missing-tile/invalid-zoom] + 7 integration SKIP — нет PNG-fixtures, AC-16).
- Lint
ruff check .→ All checks passed! (exit 0, AC-18).- Деплой ET-013 на test подтверждён:
app.js(len 132149) содержитHILLSHADE_PAINT/TRI_PAINT/raster-contrast/'nearest'/opacityOrPaint/if (zoom < 9); нетif (zoom < 10).index.htmlhint = «Зум 9+» (нет «Зум 10+»). Деплой корректно запрашивает z9 hillshade.Cache-Controlсуществующего тайла (tri/10/618/697) =max-age=31536000, ctimage/png→ REQ-F-18 соблюдён (флагimmutable/publicколеблется на nginx-edge между прогонами; P3, вне скоупа).- ❌ Pre-deploy probe AC-19 / REQ-F-20 §1 — повторно FAIL (P1): hillshade z9-тайлы отсутствуют на test-среде. Канонические XYZ-probe из TRZ (
9/308/158,10/617/317,11/1234/635) → все 404 (XYZ ≠ TMS-схема среды). Скан по реальному TMS вокруг центра[37.6, 54.5]: hillshade z9 grid 7×7 → 0/49 → 200 (все 404), z8 → 404; при этом hillshade z10 grid 4×4 → 12/16 → 200 и z11 (1237/1395) → 200; TRI z8/z9/z10/z11 (TMS) → 200. Слой hillshade по-прежнему начинается с z10. PH-6 follow-up из v1..v11 так и не выполнен.- Следствие для UX: на z9 включённые «Тени рельефа» дают пустой слой (тайлы 404) — видны только «Перепады» (TRI z9 есть). Нарушены AC-03 («на карте видны тени рельефа» при z9) и AC-19 (z9/z10/z11 = 200).
- UI Playwright (TC-UI-01..12) — NOT EXECUTED:
$UI_TEST_RUNNERпуст,/home/slin/tools/ui-test/run_tests.jsотсутствует,playwright/браузеры не установлены (require('playwright')→ not found, нет~/.cache/ms-playwright). Визуальная приёмка AC-07..AC-13 не выполнена.Вердикт — BLOCKED по pre-deploy gate AC-19 (без изменений с v8..v11).
back-to:devне требуется: дефекта кода нет (Review #18 APPROVED, unit/integration/lint зелёные, деплой корректен). Блокер инфраструктурный — на test-среде не нарезаны z9-тайлы hillshade. Разблокировка = PH-6 follow-up (догенеритьdata/terrain/hillshade/9/*над ЦФО и задеплоить), затем повторный AC-19 + Playwright TC-UI-01..12 в окружении с браузерами.
v11 (2026-06-06). Независимый перепрогон после Review v15 (APPROVED, run_id=236). HEAD =
ac4140e reviewer(ET): auto-commit run_id=236. С момента содержательных коммитов (5be81f9feat,099669dfix-whitelist) ниsrc/, ниtests/не менялись —git diff main..HEAD -- src/ tests/показывает только «удаления» из-за отставания ветки отmain(фича уже смержена вmain, который ушёл вперёд на ET-014/015). Состояние кода ET-013 идентично v2..v10. Перепроверено в свежем venv/tmp/et013-venv-r237(--system-site-packages+requirements.txt+pytest/pytest-asyncio/ruff):
- Окружение/health.
curlв песочнице недоступен (command not found), probe выполнены черезpython3 urllib.GET /enduro/api/health→ 200 ({"status":"ok","db_path":"/app/data/centralfederal.sqlite","db_exists":true}).- Полный авто-регресс (
pytest tests/ --asyncio-mode=auto) → 254 passed, 7 skipped, 4 deselected, 0 failed (4.21 s). Регрессий ET-007/008/009/011/012 нет.- ET-013 unit+integration → 23 passed / 7 skipped (17 unit PASS + 6 integration PASS [whitelist hypso/hillshade/tri, 404 на unknown-layer/ missing-tile/invalid-zoom] + 7 integration SKIP — нет PNG-fixtures, AC-16).
- Lint
ruff check src/api/→ All checks passed! (exit 0, AC-18).- Деплой ET-013 на test подтверждён:
app.js(len 132149) содержитHILLSHADE_PAINT/TRI_PAINT/raster-contrast/'nearest'/opacityOrPaint/if (zoom < 9)и вызовapplyTerrainLayer('terrain-hillshade', …, HILLSHADE_PAINT, 9, 15); нетif (zoom < 10);index.htmlhint = «Зум 9+» (нет «Зум 10+»). Деплой действительно запрашивает z9 hillshade.Cache-Controlсуществующего тайла (tri/10/618/697) =max-age=31536000→ REQ-F-18 соблюдён (флагimmutable/publicколеблется на nginx-edge между прогонами; P3, вне скоупа).- ❌ Pre-deploy probe AC-19 / REQ-F-20 §1 — повторно FAIL (P1): hillshade z9 тайлы отсутствуют на test-среде. Канонические probe из TRZ (
9/308/158,10/617/317,11/1234/635) → все 404 (XYZ-координаты не совпадают с TMS-покрытием test-среды). Скан по реальному TMS вокруг центра[37.6, 54.5]: hillshade z9 grid 7×7 (центр 309/348) → 0/49 → 200 (все 404); hillshade z8 → 404. При этом hillshade z10 (618/697) и z11 (1237/1395) → 200; TRI z8/z9/z10/z11 (TMS) → 200. Слой hillshade начинается с z10. PH-6 follow-up из v1..v10 так и не выполнен — z9-тайлы hillshade не нарезаны.- Следствие для UX: на z9 включённые «Тени рельефа» дают пустой слой (тайлы 404) — видны только «Перепады» (TRI z9 есть). Нарушены AC-03 («на карте видны тени рельефа» при z9) и AC-19 (все три z9/z10/z11 = 200).
- UI Playwright (TC-UI-01..12) — NOT EXECUTED:
$UI_TEST_RUNNERпуст,/home/slin/tools/ui-test/run_tests.jsотсутствует,playwright/браузеры не установлены (require('playwright')→ not found, нет~/.cache/ms-playwright). Визуальная приёмка AC-07..AC-13 не выполнена.Вердикт — BLOCKED по pre-deploy gate AC-19 (без изменений с v8..v10).
back-to:devне требуется: дефекта кода нет (Review v15 APPROVED, unit/integration/lint зелёные, деплой корректен). Блокер инфраструктурный — на test-среде не нарезаны z9-тайлы hillshade. Разблокировка = PH-6 follow-up (догенеритьdata/terrain/hillshade/9/*над ЦФО и задеплоить), затем повторный AC-19 + Playwright TC-UI-01..12 в окружении с браузерами.
v10 (2026-06-06). Независимый перепрогон после Review v14 (APPROVED). Состояние кода идентично v2..v9 (фича в
main:5be81f9feat,099669dfix-whitelist; последующие коммиты — только docs). Перепроверено в свежем venv/tmp/et013-venv(--system-site-packages+defusedxml,shapely,mapbox_vector_tile,lxml,ruff):
- Health
GET /enduro/api/health→ 200 ({"status":"ok","db_exists":true}).- Полный авто-регресс (
pytest tests/) → 254 passed, 7 skipped, 4 deselected, 0 failed (4.58 s). Регрессий ET-007/008/009/011/012 нет.- ET-013 unit+integration → 23 passed / 7 skipped (17 unit PASS + 6 integration PASS [whitelist hypso/hillshade/tri, 404 на unknown-layer/ missing-tile/invalid-zoom] + 7 integration SKIP — нет PNG-fixtures, AC-16).
- Lint
ruff check src/api/→ All checks passed! (exit 0, AC-18).- Деплой ET-013 на test подтверждён:
app.js(len 132172) содержитHILLSHADE_PAINT/TRI_PAINT/raster-contrast/'nearest'/if (zoom < 9)(и нетif (zoom < 10)); вызов hillshade =applyTerrainLayer('terrain-hillshade', …, HILLSHADE_PAINT, 9, 15). Деплой действительно запрашивает z9 hillshade.Cache-Controlсуществующего тайла (tri/10/618/697) =max-age=31536000, public, immutable→ REQ-F-18 соблюдён.- ❌ Pre-deploy probe AC-19 / REQ-F-20 §1 — повторно FAIL (P1): hillshade z9 тайлы отсутствуют на test-среде. Скан окрестности тестового центра
[37.6, 54.5](TMS):x∈[306..312] × y∈[345..352]→ 0/56 → 200 (все 404); hillshade z8 → 404. При этом hillshade z10 (618/697) и z11 (1237/1395) → 200; TRI z9/z10/z11 (309/348,618/697,1237/1395) → 200. Слой hillshade начинается с z10. PH-6 follow-up из v1..v9 так и не выполнен — z9-тайлы hillshade не нарезаны.- Следствие для UX: на z9 включённые «Тени рельефа» дают пустой слой (тайлы 404) — видны только «Перепады» (TRI z9 есть). Нарушены AC-03 («на карте видны тени рельефа» при z9) и AC-19 (все три z9/z10/z11 = 200).
- UI Playwright (TC-UI-01..12) — NOT EXECUTED:
$UI_TEST_RUNNERне задан,/home/slin/tools/ui-test/run_tests.jsотсутствует,playwright/браузеры не установлены в песочнице (require('playwright')→ not found,~/.cache/ms-playwrightпуст). Визуальная приёмка AC-07..AC-13 не выполнена.Вердикт — BLOCKED по pre-deploy gate AC-19.
back-to:devне требуется: дефекта кода нет (Review v14 APPROVED, unit/integration/lint зелёные, деплой корректен). Блокер — инфраструктурный: на test-среде не нарезаны z9-тайлы hillshade. Разблокировка = PH-6 follow-up (догенеритьdata/terrain/hillshade/9/*над ЦФО и задеплоить), затем повторный прогон AC-19 + Playwright TC-UI-01..12.
v9 (2026-06-06). Перепрогон после Review v13 (APPROVED, run_id=232). HEAD =
dd7e1bf reviewer(ET): auto-commit from reviewer run_id=232. С момента содержательных коммитов (5be81f9feat,099669dfix-whitelist) ниsrc/, ниtests/не менялись — все последующие коммиты (reviewer run 230/232, tester run 229) только docs. Состояние кода идентично v2..v8. Независимо перепроверено в свежем venv/tmp/et013venv(deps изsrc/api/requirements.txt+pytest/pytest-asyncio/ruff):
- Health
GET /enduro/api/health→ 200 ({"status":"ok","db_exists":true}).- Полный авто-регресс (
pytest tests/ --asyncio-mode=auto) → 254 passed, 7 skipped, 4 deselected, 0 failed (3.83 s). Регрессий ET-007/008/009/011/012 нет.- ET-013 unit+integration → 23 passed / 7 skipped (17 unit + 6 integration PASS + 7 integration SKIP; skip ожидаемы — нет PNG-fixtures, AC-16).
- Lint
ruff check src/api/→ All checks passed! (exit 0, AC-18).- Деплой ET-013 на test подтверждён:
app.js(len 132149) содержитHILLSHADE_PAINT/TRI_PAINT/opacityOrPaint/raster-contrast/'nearest'/if (zoom < 9)(и нетif (zoom < 10)); hint = «Зум 9+».- ❌ Pre-deploy probe AC-19 — повторно FAIL (P1): hillshade z9 тайлы всё ещё 404 (
9/308/158,9/309/348,9/307/347→ 404; grid 5×5 вокруг(309,348)→ 0/25 → 200; hillshade z8 → 404; стек начинается с z10). hillshade z10/z11 (TMS618/697,1237/1395) → 200; TRI z8/z9/z10/z11 (TMS) → 200. PH-6 follow-up из v1..v8 так и не выполнен.- UI Playwright (TC-UI-01..12) — снова NOT EXECUTED:
$UI_TEST_RUNNERпуст,/home/slin/tools/ui-test/run_tests.jsотсутствует,playwright/npxнедоступны (node без playwright-модуля).Вердикт остаётся BLOCKED по pre-deploy gate AC-19.
back-to:devне требуется — дефекта кода нет (Review v13 APPROVED), блокер инфраструктурный (нет нарезанных z9-тайлов hillshade на test-среде).
v8 (2026-06-06). Перепрогон после Review v11 (APPROVED, run_id=228). HEAD =
78f74db reviewer(ET): auto-commit from reviewer run_id=228.git diff 099669d..HEAD --stat -- src/ tests/→ пусто: с момента содержательных коммитов (5be81f9feat,099669dfix-whitelist) ниsrc/, ниtests/не менялись. Состояние кода идентично v2..v7. Независимо перепроверено (venv/tmp/et013venv, deps проекта):
- Health
GET /enduro/api/health→ 200 ({"status":"ok","db_exists":true}).- Полный авто-регресс (
pytest tests/ --asyncio-mode=auto) → 254 passed, 7 skipped, 4 deselected, 0 failed (3.87 s). Регрессий ET-007/008/009/011/012 нет.- ET-013 unit+integration → 23 passed / 7 skipped (17 unit + 6 integration PASS + 7 integration SKIP; skip ожидаемы — нет PNG-fixtures, AC-16).
- Lint
ruff check src/api/→ All checks passed! (exit 0, AC-18).- Деплой ET-013 на test подтверждён:
app.js(len 132172) содержитHILLSHADE_PAINT/TRI_PAINT/opacityOrPaint/raster-contrast/'nearest'/if (zoom < 9)(и нетif (zoom < 10)); hint = «Зум 9+».- ❌ Pre-deploy probe AC-19 — повторно FAIL (P1): hillshade z9 тайлы всё ещё 404 (
9/308/158,9/309/348→ 404; grid 5×5 вокруг(309,348)→ 0/25 → 200; 4 разнесённых точки z9 → 0/4; hillshade z8 → 404; стек начинается с z10). hillshade z10/z11 (TMS618/697,1237/1395) → 200; TRI z8/z9/z10/z11 (TMS) → 200. PH-6 follow-up из v1..v7 так и не выполнен.Cache-Controlна test-среде сноваmax-age=31536000, public, immutable(флаг колеблется на nginx-edge между прогонами; функционально и формально REQ-F-18 соблюдён). P3, не в скоупе.- UI Playwright (TC-UI-01..12) — снова NOT EXECUTED:
$UI_TEST_RUNNERпуст,/home/slin/tools/ui-test/run_tests.jsотсутствует,playwright/npxнедоступны (node без playwright-модуля).Вердикт остаётся BLOCKED по pre-deploy gate AC-19.
back-to:devне требуется — дефекта кода нет (Review v11 APPROVED), блокер инфраструктурный (нет нарезанных z9-тайлов hillshade на test-среде).
v7 (2026-06-06). Перепрогон после Review v9 (APPROVED, run_id=224). HEAD =
7866174 reviewer(ET): auto-commit from reviewer run_id=224.git diff 099669d..HEAD --stat -- src/ tests/→ пусто: с момента содержательных коммитов (5be81f9feat,099669dfix-whitelist) вsrc//tests/изменений нет. Состояние кода идентично v2..v6. Независимо перепроверено (venv/tmp/et013venv, deps проекта):
- Health
GET /enduro/api/health→ 200 ({"status":"ok","db_exists":true}).- Полный авто-регресс (
pytest tests/ --asyncio-mode=auto) → 254 passed, 7 skipped, 4 deselected, 0 failed (4.29 s). Регрессий ET-007/008/009/011/012 нет.- ET-013 unit+integration → 23 passed / 7 skipped (17 unit PASS + 6 integration PASS + 7 integration SKIP; skip ожидаемы — нет PNG-fixtures, AC-16).
- Lint
ruff check src/api/→ All checks passed! (exit 0, AC-18).- Деплой ET-013 на test подтверждён:
app.js(len 132149) содержитHILLSHADE_PAINT/TRI_PAINT/opacityOrPaint/raster-contrast/'nearest'/if (zoom < 9)(и нетif (zoom < 10)); hint = «Зум 9+».- ❌ Pre-deploy probe AC-19 — повторно FAIL (P1): hillshade z9 тайлы всё ещё 404 (
9/309/348,9/308/158→ 404; grid 3×3 вокруг(309,348)→ 0/9 → 200; hillshade z8 → 404; стек начинается с z10). hillshade z10/z11 (TMS618/697,1237/1395) → 200; TRI z8/z9/z10/z11 (TMS) → 200. PH-6 follow-up из v1..v6 так и не выполнен.- Изменение со времён v6: заголовок
Cache-Controlна test-среде сноваmax-age=31536000(безimmutable) — флаг колеблется на nginx-edge между прогонами. Функционально (1 год кэша) достаточно; формально REQ-F-18/IT-TILE-CACHE-HEADER соблюдён на backend-уровне (integrationtest_terrain_tile_cache_control_immutable, корректно SKIP). Остаётся P3, не в скоупе ET-013.- UI Playwright (TC-UI-01..12) — снова NOT EXECUTED:
$UI_TEST_RUNNERпуст,/home/slin/tools/ui-test/run_tests.jsотсутствует,playwright/npxнедоступны (node v22 без playwright-модуля).Вердикт остаётся BLOCKED по pre-deploy gate AC-19.
back-to:devне требуется — дефекта кода нет (Review v9 APPROVED), блокер инфраструктурный (нет нарезанных z9-тайлов hillshade на test-среде).
v6 (2026-06-06). Перепрогон после Review v8 (APPROVED, run_id=222). HEAD =
4bb160d reviewer(ET): auto-commit from reviewer run_id=222.git diff 099669d..HEAD --stat -- src/ tests/→ пусто: с момента содержательных коммитов (5be81f9feat,099669dfix-whitelist) вsrc//tests/изменений нет (всё после — docs-коммиты ревью/тестера). Состояние кода идентично v2..v5 и не изменилось. Независимо перепроверено в свежем venv/tmp/et013venv(deps изsrc/api/requirements.txt+pytest/pytest-asyncio/ruff):
- Health
GET /enduro/api/health→ 200 ({"status":"ok","db_exists":true}).- Полный авто-регресс (
pytest tests/ --asyncio-mode=auto) → 254 passed, 7 skipped, 4 deselected, 0 failed (4.03 s). Регрессий ET-007/008/009/011/012 нет.- ET-013 unit+integration (
test_terrain_paint.py+test_terrain_z9_tiles.py) → 23 passed / 7 skipped (= 17 unit PASS + 6 integration PASS + 7 integration SKIP; skip ожидаемы — нет PNG-fixtures в sandbox, AC-16).- Lint
ruff check src/api/→ All checks passed! (exit 0, AC-18).- Деплой ET-013 на test-среде подтверждён:
app.js(len 132172) содержитHILLSHADE_PAINT/TRI_PAINT/opacityOrPaint/raster-contrast/'nearest'/if (zoom < 9)(и нетif (zoom < 10)); hint = «Зум 9+».- ❌ Pre-deploy probe AC-19 — повторно FAIL (P1): hillshade z9 тайлы всё ещё 404 в обеих схемах (XYZ
9/309/163, TMS9/309/348; канонический9/308/158→ 404). Расширенный зонд: hillshade z9 по 6 точкам ЦФО → 0/6 → 200, grid 5×5 вокруг(309,348)→ 0/25 → 200; hillshade z8 → 404. hillshade z10/z11 (TMS618/697,1237/1395) → 200; TRI z8/z9/z10/z11 (TMS) → 200. PH-6 follow-up из v1..v5 так и не выполнен.- Изменение со времён v5: заголовок
Cache-Controlна test-среде теперь содержитimmutable(max-age=31536000, public, immutable) — ранее (v5)immutableстрипался nginx-проксей. P3-02 более не воспроизводится (REQ-F-18 / IT-TILE-CACHE-HEADER на edge-слое соблюдён). Понижаю P3-02 до «resolved».- UI Playwright (TC-UI-01..12) — снова NOT EXECUTED: раннера
/home/slin/tools/ui-test/run_tests.jsнет,$UI_TEST_RUNNERпуст,playwright/npxнедоступны (node v22без playwright-модуля).Вердикт остаётся BLOCKED по pre-deploy gate AC-19.
back-to:devне требуется — дефекта кода нет (Review v8 APPROVED), блокер инфраструктурный (нет нарезанных z9-тайлов hillshade на test-среде).
v5 (2026-06-06). Перепрогон после Review v7 (APPROVED, run_id=220). HEAD =
c9da18f reviewer(ET): auto-commit from reviewer run_id=220.git diff e948861..HEAD --stat -- src/ tests/→ пусто: с момента v3/v4 в коде/тестах изменений нет (только docs-коммиты ревью run 216/220 и тестера run 217). Состояние идентично v4 и не изменилось. Повторно проверено независимо в свежем venv/tmp/et013venv:
- Health
GET /enduro/api/health→ 200 ({"status":"ok"}).- Полный авто-регресс (
pytest tests/) → 254 passed, 7 skipped, 4 deselected, 0 failed (4.26 s). Регрессий ET-007/008/009/011/012 нет.- ET-013 unit (
test_terrain_paint.py) → 17/17 PASS.- ET-013 integration (
test_terrain_z9_tiles.py) → 6 PASS / 7 SKIP (skip ожидаемы: нет PNG-fixtures в sandbox, AC-16).- Lint
ruff check src/api/→ All checks passed! (exit 0, AC-18).- Деплой ET-013 на test-среде подтверждён:
app.jsсодержитHILLSHADE_PAINT/TRI_PAINT/opacityOrPaint/raster-contrast/'nearest'/if (zoom < 9)(и нетif (zoom < 10)); hint = «Зум 9+».- ❌ Pre-deploy probe AC-19 — повторно FAIL (P1): hillshade z9 тайлы всё ещё 404 (
/terrain/hillshade/9/309/{163,348}.png→ 404 в обеих схемах XYZ/TMS; канонический9/308/158.png→ 404). z10/z11 hillshade (TMS) → 200; TRI z5/z8/z9/z10/z11 → 200. PH-6 follow-up из v1..v4 так и не выполнен.- UI Playwright (TC-UI-01..12) — снова NOT EXECUTED: раннера
/home/slin/tools/ui-test/run_tests.jsнет,$UI_TEST_RUNNERпуст,npx/playwright недоступны.Вердикт остаётся BLOCKED по pre-deploy gate AC-19.
back-to:devне требуется — дефекта кода нет, блокер инфраструктурный (нет нарезанных z9-тайлов на test-среде).
v4 (2026-06-06). Перепрогон после Review v6 (APPROVED). HEAD =
89b83e3 reviewer(ET): auto-commit from reviewer run_id=216.git diff e948861..HEAD --stat -- src/ tests/→ пусто: с момента v3 в коде/тестах изменений нет (только docs-коммиты ревью run 215/216). Состояние идентично v3 и не изменилось: ET-013 выкатан на test-среду (HILLSHADE_PAINT/TRI_PAINT, hint «Зум 9+»,if (zoom < 9)подтверждены в/enduro/app.js), но hillshade z9-тайлы по-прежнему 404 (grid 5×5 вокруг(309,348)→ 0/25 → 200; 6 точек ЦФО → 0/6; hillshade-стек начинается с z10). PH-6 follow-up из v1/v2/v3 так и не выполнен. Полный авто-регресс зелёный (254 passed, 7 skipped, 4 deselected, 0 failed), ET-013 unit 17/17 PASS, integration 6 PASS / 7 SKIP. UI Playwright — снова NOT EXECUTED (раннер$UI_TEST_RUNNERпуст,/home/slin/tools/ui-test/run_tests.jsотсутствует, playwright не установлен). Вердикт остаётся BLOCKED по pre-deploy gate AC-19.back-to:devне требуется — дефекта кода нет.
v3 (2026-06-06). Перепрогон после Review v5 (APPROVED). HEAD =
e948861 reviewer(ET): auto-commit from reviewer run_id=214. С момента v2 в коде/тестах изменений нет (только docs-коммиты ревью). Состояние не изменилось: ET-013 выкатан на test-среду (HILLSHADE_PAINT/TRI_PAINT, hint «Зум 9+»,if (zoom < 9)), но hillshade z9-тайлы по-прежнему 404 (grid 5×5 вокруг(309,348)под TMS → 0/25 → 200). PH-6 follow-up из v1/v2 так и не выполнен. Полный авто-регресс зелёный (254 passed, 7 skipped, 0 failed), ET-013 unit 17/17, integration 6 PASS / 7 SKIP. UI Playwright — снова NOT EXECUTED (раннер/Playwright в контейнере отсутствуют). Вердикт остаётся BLOCKED по тому же pre-deploy gate AC-19.
v2 (2026-06-06). Перепрогон после Review v3 (APPROVED). Главное изменение со времён v1: ET-013 уже выкатан на test-среду. При этом hillshade z9 тайлы отсутствуют (404). Полный авто-регресс зелёный (254 passed). Вердикт BLOCKED по pre-deploy gate AC-19.
TL;DR
- Линтер ✅ (см. примечание ниже), полный авто-регресс 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-z81:1 соответствует TRZ (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(и весь 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: раннер
(
$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 и AC-19: «При 404 —
задача останавливается, тайлы z9 нужно догенерировать в рамках PH-6
follow-up». Следующий шаг — выполнить PH-6 follow-up
(«generate hillshade tiles z8-z9 для CFO») и после генерации тайлов
повторно прогнать pre-deploy probe + Playwright UI suite. Это не
дефект кода ET-013 — back-to:dev для фронтенда не требуется.
1. Окружение прогона (v3)
| Параметр | Значение |
|---|---|
| Ветка | feature/ET-013-z9-z11-z8 |
| HEAD (v3) | e948861 reviewer(ET): auto-commit from reviewer run_id=214 (со времён v2 — только docs-коммиты ревью; src/,tests/ без изменений) |
| HEAD (v2) | 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 (изолированный 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 РАЗВЁРНУТ (изменение со времён v1). app.js содержит HILLSHADE_PAINT/TRI_PAINT/opacityOrPaint/raster-contrast/'nearest'/if (zoom < 9); hint = «Зум 9+». |
Сетевая проверка /health:
GET /enduro/api/health → 200
{"status":"ok","db_path":"/app/data/centralfederal.sqlite","db_exists":true}
Проверка факта деплоя ET-013 (urllib против test-среды):
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+»
2. Шаг 1 — линт
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 --asyncio-mode=auto -v
=================== 17 passed (unit) · 6 passed + 7 skipped (integration) ===================
| Suite | Кейсов | PASS | SKIP | Покрытие AC |
|---|---|---|---|---|
tests/unit/test_terrain_paint.py |
17 | 17 | 0 | AC-01, AC-04, AC-05, AC-15, AC-22 |
tests/integration/test_terrain_z9_tiles.py |
13 | 6 | 7 | AC-16 |
Что покрывают unit-тесты (выборка):
test_hillshade_paint_defined,test_hillshade_opacity_is_interpolate_by_zoom,test_hillshade_opacity_stops,test_hillshade_contrast_peak_z9,test_hillshade_resampling_nearest— структураHILLSHADE_PAINT, stops 9/10/11/12/14 → 0.65/0.60/0.55/0.50/0.40, contrast пик z9 ≥0.30 / z14 ≤0.10.test_tri_paint_defined,test_tri_opacity_z8_regression(«8, 0.70» ровно, защита AC-06),test_tri_opacity_peak_z9_z11(z10/z11 ≥ 0.80),test_tri_resampling_nearest.test_apply_terrain_layer_signature_uses_opacity_or_paint,test_apply_terrain_layer_normalizes_number_to_legacy_paint,test_apply_terrain_layer_uses_paint_variable— обратная совместимостьapplyTerrainLayer(AC-22).test_minzoom_threshold_lowered_to_9(if (zoom < 9)найден,< 10отсутствует),test_hint_text_updated_to_z9(«Зум 9+»),test_apply_terrain_layer_caller_count(ровно 2 вызова),test_hillshade_call_uses_paint_constant_and_minzoom_9,test_tri_call_uses_paint_constant_and_minzoom_5.
Что покрывают integration-тесты:
- PASS:
test_known_terrain_layer_accepted_by_whitelist[hypso|hillshade|tri](доказывает фикс F-1 review v1),test_unknown_terrain_layer_returns_404,test_missing_terrain_tile_returns_404,test_invalid_zoom_returns_404. - SKIP:
test_terrain_tile_available_z9_z10_z11[*]×6,test_terrain_tile_cache_control_immutable— требуют PNG-fixtures вdata/terrain/, которых нет в sandbox-репо. Skip — корректный механизм через_maybe_skip; AC-16 говорит «при отсутствии тайлов в CI — тесты skipped с reason», что в точности и наблюдается.
Результат: ✅ PASS (AC-15, AC-16 в части автоматики, AC-17, AC-18).
4. Шаг 3 — E2E (контракт API на test-среде)
4.1 IT-TILE-* «вживую» против test-среды
Поскольку sandbox без data fixtures даёт SKIP, я выполнил эквивалент
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 генерится до z12 в PH-6, регрессия известная, в скоупе ET-013 не трогается). Это не новая регрессия ET-013, такое же поведение было до ET-013. Фиксирую как P3 для PH-6 follow-up.
² 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 across 6 CFO points : 0/6 → все 404
hillshade z=9 grid 5×5 around (309,348) : 0/9 → все 404
То есть на z=9 нет ни одного hillshade-тайла, не только «целевого»; данных просто нет в pipeline.
4.2 Заголовок Cache-Control
hillshade z=10 → Cache-Control: max-age=31536000
hillshade z=11 → Cache-Control: max-age=31536000
tri z=8 → Cache-Control: max-age=31536000
…
Только max-age=31536000; immutable-флаг отсутствует в ответах
nginx-перед-fastapi на test-среде. Это предсуществующая ситуация
(не введена ET-013): backend FastAPI отдаёт Cache-Control: max-age=…, immutable, но nginx-конфиг на test-среде стрипает immutable. На
бизнес-логику это не влияет (max-age=1y достаточен), но формальная
формулировка REQ-F-18 / IT-TILE-CACHE-HEADER «immutable сохраняется»
выполняется только на backend-уровне (см. integration-тест
test_terrain_tile_cache_control_immutable, корректно SKIPPED здесь).
Не блокер ET-013. Фиксирую как P3 (известная инфра-косметика,
не в скоупе).
4.3 /health стабилен
См. раздел 1. ✅
5. Шаг 4 — UI / Visual тесты
5.1 Состояние раннера
$UI_TEST_RUNNER → (пусто)
ls /home/slin/tools/ui-test/ → No such file or directory
which playwright / npx → not found
node -e require.resolve(playwright)→ playwright NOT installed
find / -name run_tests.js -path *ui* → (нет результатов)
UI-test раннер, Playwright и npx в этом контейнере отсутствуют.
Запустить TC-UI-01..12 автоматически невозможно. node v22.22.2
присутствует, но без playwright-модуля и браузеров.
5.2 Состояние test-среды (ET-013 РАЗВЁРНУТ)
GET https://openclaw.mva154.duckdns.org/enduro/app.js
HILLSHADE_PAINT in body: True
TRI_PAINT in body: True
'if (zoom < 9)' in body: True
opacityOrPaint in body: True
GET /enduro/ → hint «Зум 9+»
В отличие от v1, на test-среде сейчас выкатан код ET-013. Поэтому визуальные TC уже релевантны — но раннер недоступен (§5.1), а ключевой для z9 контент (hillshade-тайлы) отсутствует (§4.1).
Visual / UI тесты
Автоматический прогон визуальных кейсов в текущем контейнере не выполнен (нет раннера/Playwright). Ниже — статус каждого TC с учётом фактического состояния test-среды (ET-013 выкатан; hillshade z9 = 404; hillshade z10/z11 = 200; TRI z9-z11 = 200). Кейсы, зависящие от hillshade z9, помечены FAIL по данным §4.1 — это не требует скриншота: слой физически не имеет тайлов и отрисуется пустым.
| 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. |
Легенда: FAIL — кейс провален по объективным данным (404-тайлы);
NOT RUN — не выполнен из-за отсутствия раннера/Playwright, требует
ручного/Playwright-прогона оператором после устранения P1. Результаты
приколоть к 14-deploy-log.md.
6. Матрица Acceptance Criteria → Test
| AC | Покрытие | Результат |
|---|---|---|
| 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-слоя | ❌ 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 | ❌ 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 | ❌ 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/ — 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 |
Итого: 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).
7. Findings
P0
Нет.
P1
P1-01 — Pre-deploy gate AC-19: hillshade z=9 тайлы отсутствуют
Где. Test-среда https://openclaw.mva154.duckdns.org/enduro/terrain/hillshade/9/*.png.
v3 re-confirm (2026-06-06). Перепроверено повторно: /api/health →
200; hillshade z9/{308/158, 309/348, 307/347, 310/349} → 404; grid 5×5
вокруг TMS (309,348) → 0/25 → 200; hillshade z10/z11 (TMS 618/697,
1237/1395) → 200; TRI z5/z8/z9/z10/z11/z12 → 200. ET-013-код на test
по-прежнему выкатан (HILLSHADE_PAINT/TRI_PAINT/zoom < 9, hint
«Зум 9+»). Изменений нет — блокер тот же.
Симптом. Все запросы вида GET /terrain/hillshade/9/X/Y.png (и
hillshade/5..8/…) возвращают 404. Покрытие отсутствует на всю
изученную область юга МО / ЦФО (проверено 6 точками ЦФО + grid'ом 5×5
вокруг целевой плитки (309, 348) под TMS). hillshade-стек начинается
только с z10.
Почему блокер (в 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»). На z10/z11 hillshade и на z9-z11 TRI — работают корректно (тайлы 200).
Что делать. TRZ REQ-F-20 §1 и AC-19 однозначно говорят:
Если 404 — задача останавливается, тайлы z9 нужно догенерировать в рамках PH-6 follow-up.
Действия:
- Открыть PH-6 follow-up: «Generate hillshade tiles z8-z9 for CFO
coverage» (как минимум область, покрываемая текущим
data/terrain/hillshade/10..14/). - После генерации повторно прогнать probe из §4.1.
- После 200 OK на z=9 — повторный запуск Tester'а + переход на Deployer.
Severity = P1, не P0 только потому, что: (a) код ET-013 корректен и proven unit/integration-тестами; (b) деградирован только z9 hillshade — z10/z11 hillshade и z9-z11 TRI работают; (c) рабочий процесс PH-6 follow-up — стандартная процедура для такого класса проблем. Тем не менее в v2 проблема фактическая (ET-013 уже на test), а не только pre-deploy-гипотеза.
P2
Нет.
P3
P3-01 — TRI z=14 отдаёт 404 (предсуществующая регрессия PH-6, не в скоупе ET-013)
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, на проде через
nginx остаётся только max-age=31536000. Формально REQ-F-18 нарушен
на edge-слое, но max-age=1y функционально достаточен. Не в скоупе
ET-013.
P3-03 — from __future__ import annotations в unit-тесте не используется
tests/unit/test_terrain_paint.py:15 — косметика (унаследовано из
review v2 F-5).
P3-04 — Комментарий в HILLSHADE_PAINT не учитывает MapLibre clamping ниже z9
src/web/app.js:2728-2733 — унаследовано из review v2 F-3. Не блокер;
актуально только если UI-минзум hillshade когда-нибудь понизят до z<9.
8. Документация work item (AC-20)
docs/work-items/ET-013/
00-business-request.md ✅
01-brd.md ✅
02-trz.md ✅
03-acceptance-criteria.md ✅
04-test-plan.yaml ✅
04b-ui-test-cases.md ✅
06-adr/ADR-017-zoom-aware-terrain-paint.md ✅
07-infra-requirements.md ✅
08-data-requirements.md ✅
10-tech-risks.md ✅
12-review.md ✅
13-test-report.md ← этот файл
14-deploy-log.md ⏳ ожидается после устранения P1-01
9. Вердикт
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/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».
Что должно произойти дальше
- Открыть/выполнить PH-6 follow-up: «Generate hillshade tiles
z5..z9 for CFO coverage area» (≈ область, покрытая
data/terrain/hillshade/10/, расширенная вверх по zoom-иерархии). В v1 этот follow-up был рекомендован, но не выполнен — тайлы z9 по-прежнему 404. - После генерации тайлов:
- повторный пробинг по §4.1 — ячейки hillshade/tri × z=9..11 → 200;
- повторный запуск Tester'а (патч-версия отчёта);
- визуальная приёмка z9.
- Deployer / оператор (ручная Playwright-приёмка):
- выполнить ручные шаги REQ-F-20 §2: открыть карту,
setZoom(9), включить hillshade, скриншот → визуальная приёмка AC-03..AC-05; - прогнать 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.
- выполнить ручные шаги REQ-F-20 §2: открыть карту,
- Если визуальная приёмка AC-07..AC-09 «перепады недостаточно выразительны» — корректировка stops в HILLSHADE_PAINT/TRI_PAINT (калибровка, не баг — см. BRD §6).
Что НЕ нужно делать
- Не 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.
12. Изменения в v4 (относительно v3)
- Перезапуск после Review v6 (APPROVED). HEAD сдвинут
e948861 → 89b83e3, ноgit diff e948861..HEAD --stat -- src/ tests/даёт пусто — новые коммиты (tester run 215, reviewer run 216) — только docs. Код/тесты бит-в-бит совпадают с v3. - Окружение прогона:
make/curlв контейнере отсутствуют → pytest запущен напрямую в изолированном venv/tmp/et013venv(deps:shapely/lxml/defusedxml/mapbox-vector-tile/pytest-asyncio), HTTP-зонд — черезurllib. - Авто-регресс повторён:
pytest tests/→ 254 passed, 7 skipped, 4 deselected, 0 failed (3.98s). ET-013 unit 17/17 PASS, integration 6 PASS / 7 SKIP (skip — нет PNG-fixtures в sandbox, механизм по AC-16). Регрессий ET-007/008/009/011/012 нет. - Pre-deploy probe AC-19 повторён → результат идентичен v3:
/api/health→ 200 (db_exists: true)./enduro/app.jsсодержитHILLSHADE_PAINT/TRI_PAINT/opacityOrPaint/raster-contrast/'nearest'/if (zoom < 9)→ ET-013 выкатан.hillshade/9/308/158,hillshade/9/309/348→ 404; grid 5×5 вокруг(309,348)→ 0/25 → 200; 6 точек ЦФО → 0/6;hillshade/5..8→ 404 (стек начинается с z10).hillshade/10,hillshade/11→ 200;tri/8,tri/9,tri/10,tri/11→ 200.- PH-6 follow-up по нарезке hillshade z5..z9 так и не выполнен.
- UI Playwright — снова NOT EXECUTED (раннер/Playwright недоступны). Visual-таблица §5 и матрица AC §6 без изменений относительно v3.
- Вердикт без изменений: BLOCKED (AC-19, P1-01).
back-to:devне требуется — код корректен (Review v6 APPROVED), это блокер данных PH-6.
11. Изменения в v3 (относительно v2)
- Перезапуск после Review v5 (APPROVED). HEAD сдвинут
badd559 → e948861, но это только docs-коммиты ревью —src/иtests/бит-в-бит совпадают с v2. Авто-регресс повторён: 254 passed, 7 skipped, 0 failed; ET-013 unit 17/17 PASS, integration 6 PASS / 7 SKIP. - Pre-deploy probe AC-19 повторён → результат идентичен v2: hillshade z9 отсутствует целиком (grid 5×5 → 0/25), z10/z11 работают, TRI z5-z12 работают. PH-6 follow-up по нарезке z9-тайлов так и не выполнен.
- UI Playwright — снова NOT EXECUTED (раннер
$UI_TEST_RUNNERпуст,/home/slin/tools/ui-test/run_tests.jsотсутствует, playwright не установлен). - Вердикт без изменений: BLOCKED (AC-19, P1-01).
back-to:devне требуется — дефекта кода нет.
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.