Перейти к содержанию

Известные расхождения контрактов

В каталоге 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/planscompletedexport/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-12scenario_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_frac vs available_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.


Что проверить перед демо жюри

  1. GET /readyz — 200.
  2. POST /api/plans с scenario_id: s01-simple → дождаться completed (поллинг или SSE).
  3. GET .../export/kml — файл открывается в Google Earth / QGIS.
  4. POST /api/validate — смотреть report.admitted и список checks, не только violations в metrics.
  5. Для неосуществимого сценария — s08-infeasible-gsdfailed с error.details или 422 на входе.