Известные расхождения контрактов¶
В каталоге 96-acceptance/ этой ветки нет файла 00-verdict.md. Ниже — зафиксированные в репозитории
и воспроизведённые на https://aerozveno.ff (2026-09-17) расхождения между ТЗ, документацией, фронтом и кодом.
Воздушное пространство и приёмка¶
В рабочей копии нет каталога docs/task5/96-acceptance/. Для сравнения с жюри:
96-status/00-final-status.md, 93-review/99-defects.md;
архивный текст вердикта — git show accept/geoscan-final:docs/task5/96-acceptance/00-verdict.md (вне пути в клоне).
Ветка fix3/regression-solver на момент документирования не меняла HTTP-контракт gateway; расхождения ниже проверены на https://aerozveno.ff (образ commit 7173c9af по /status).
| Тема | Что говорит приёмка (архив) | Что в коде этой ветки (2026-09-17) |
|---|---|---|
| НФЗ в маршрутах | Round-1: планировщик «не обходит» НФЗ, заход сквозь зону на s02 | Транзиты вызывают route_avoiding_nfz (planner/pipeline.py:212,316, planner/coverage/nfz_route.py); тесты planner/tests/test_nfz_avoid.py, test_airspace_clip.py. Сквозной REST completed не означает admitted: true — валидатор отдельно |
| Граница allowed (разрешённое ВП) | Вердикт: маршрут может выходить за airspace.allowed; ловится постфактум G1-02 |
В planner/planner/routing/ обращений к allowed нет (grep); замер — planner/metrics.py:127-158, проверка — validator/checks/g1_airspace.py:67-102 |
Вывод для демо: цепочка POST /api/plans → completed → export/kml показывает работу API и планировщика,
но не заменяет чтение POST /api/validate (report.admitted, checks[]) и сценариев с НФЗ/allowed (s02, s03).
Приёмка и качество плана¶
| ID / тема | Симптом | Статус в коде |
|---|---|---|
| G3-04 / energy (история) | В сводке рисков M1 G3-04 на s01 ещё фигурирует как открытая тема энергомодели | docs/task5/96-status/00-final-status.md:81-83, docs/task5/98-fixes/energy-model.md |
| G3-04 / стенд сейчас | POST /api/validate (репозиторный s01 + план 2acdc05c-… или документ s01 со стенда): admitted: true, fails [], warn G1-05/G2-04 |
Прогон 2026-09-17 в rest-reference.md; CLI на s01: «ВЕРДИКТ: план допущен» (96-status/00-final-status.md:69-72) |
| Предупреждения vs fail | G1-05 — warn; жёсткий fail в checks[] блокирует admitted |
validator/admission.py:47-55 |
REST gateway¶
| Тема | Деталь | Ссылка |
|---|---|---|
Валидация POST /api/plans |
Только inline scenario; запрос с одним scenario_id не прогоняется через AJV |
scenario-schema.pipe.ts:37-40 |
objective в POST /api/plans |
Строка не сверяется со схемой objective.criterion; неверное значение уйдёт в планировщик |
plans.service.ts:366-371, замечание в frontend-on-aerozveno.md:209 |
| Именование JSON | Обёртка job: camelCase (planId); документ плана: snake_case |
plans.service.ts:183-215 vs plan.schema.json |
| Метрики GET vs план | metrics.coverage_fraction на GET — из gRPC coverage_frac; в plan.metrics — поля по схеме плана |
plan-metrics.ts:27-28 |
| OpenAPI snapshot | Клиент хранит снимок путей в openapi.snapshot.json; тест сравнивает с live /api/openapi.json |
test_gateway_api.py:187-193 |
gRPC¶
| Тема | Деталь |
|---|---|
Validator ValidateRequest |
Нормальный REST: parse-validate-body.ts:7-12 → scenario_json + plan_json; gRPC-клиент: validator.client.ts:64-67; fallback одним JSON — convert.py:43-56 |
| Аутентификация | Insecure gRPC внутри кластера + x-service-api-key; не экспонируется наружу |
Planner Plan stream |
HTTP-клиент должен читать до PlanResult; обрыв stream → job failed |
Фронтенд ↔ API¶
Подробная таблица (исправлено / осталось): docs/task5/95-deploy/frontend-on-aerozveno.md:190-209.
Не устранено на момент документа:
- перекрытия съёмки по умолчанию на UI при отсутствии полей в серверном сценарии (#12);
- поля борта
enabled/battery_left_fracvsavailable_from(#13); airspace.floor_m/ceiling_mна UI vs пусто в демо-сценариях (#14);- краткий список сценариев без площади и критерия (#15).
Исторические дефекты (частично закрыты)¶
Архив замечаний ревью: docs/task5/93-review/99-defects.md — многие пункты (отсутствие /api/plans,
схемы, SSE) закрыты в M1 (docs/task5/96-status/00-final-status.md:45-48). При чтении defect-листа
сверяйте с текущим кодом gateway, а не только с текстом D-xx.
Что проверить перед демо жюри¶
GET /readyz— 200.POST /api/plansсscenario_id: s01-simple→ дождатьсяcompleted(поллинг или SSE).GET .../export/kml— файл открывается в Google Earth / QGIS.POST /api/validate— смотретьreport.admittedи списокchecks, не толькоviolationsв metrics.- Для неосуществимого сценария —
s08-infeasible-gsd→failedсerror.detailsили 422 на входе.