tester(ET): auto-commit from tester run_id=209
This commit is contained in:
@@ -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)`<br>`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.
|
||||
|
||||
Reference in New Issue
Block a user