# AI-полигон: компоновка и остановка Bamboo ## Изменение интерфейса По замечаниям оператора viewport использует `--nodedc-radius-panel` и обрезает содержимое по этому радиусу. Статус, управление запуском/паузой/завершением и телеметрия вынесены над viewport. Переключатель камер находится в его верхнем левом углу, каноническое разворачивание — в верхнем правом. Общий fullscreen контейнер сохраняет название локации и управление над изображением. Заголовок локации исключён из прокручиваемой области: прокручивается только содержимое под ним. Профиль и Bamboo Trail больше не перекрывают друг друга. Контракты Worker, inference, модели, физика и пороги управления не изменялись. ## Проверка Последовательно прошли architecture 4/4, TypeScript, frontend 895/895 и production build. В браузере на каноническом `127.0.0.1:8000` проверены скругление, перенос управления, прокрутка, follow/overview/AI-camera, fullscreen и Escape. При прокрутке содержимого на 255 px заголовок остался на y=250.375 px; управление геометрически находится выше viewport. Видео показывало 28–30 FPS; в DOM нет canvas. GPU-рендеринг остаётся на Worker. QA-сцена `airun-1f27d76ef73748cc89958dc70dc9b28b` оставлена открытой для операторского просмотра: ready, follow, stream_ready=true, sim_time=0, inference_count=0. AI во время UI-проверки не запускался. Core PID 10918 продолжает обслуживать 8000; второго backend на 8765 нет. ## Причина остановки в пользовательском прогоне Источник: сохранённые Worker-журналы `motion.jsonl` и `camera/decisions.jsonl` прогона `airun-0ca108e35bed49128b077f6844cbd8eb`, созданного 2026-09-21T21:03:30.999Z. Журналы прочитаны без повторного запуска inference. Также просмотрены первый и последний сохранённые RGB-кадры; приватные кадры и полные журналы не входят в Git. - 262 решения: 10 `road`, 6 `uncertain`, 246 `no-road`. - Смещение от старта 0.0721 м, длина пути по snapshots 0.0726 м. - Последний motion snapshot: RTF 1.0, render 28 FPS, sensor 8 FPS, AI 8 Hz, inference 94 мс, возраст кадра 172 мс, road_fraction 0.02468. - Во всех сохранённых решениях obstacle_count=0. Остановка не была решением детектора о препятствии; RoadPolicy обнулила скорость из-за road_fraction ниже 0.35 в ближней области маски. На RGB-кадрах визуально сохраняется тропа. Это свидетельство ограничения сегментации/простого правила следования, а не доказательство непроходимости тропы для метрового ровера. Полные семантические маски не архивировались, поэтому конкретный ошибочный класс по этим журналам восстановить нельзя. ## Граница вывода Текущая RoadPolicy — camera-only baseline: она ищет полосу из шести классов GOOSE и задаёт скорость/поворот, но не оценивает высоту ступеньки, уклон, клиренс, опорную поверхность и сцепление. Скан даёт внешний вид; физическая опора в `run_realtime.py` — невидимая плоскость. Камни не имеют физических collision-форм, а масштаб скана ещё не подтверждён измеренной опорой. Следующая работа по автономии должна отдельно квалифицировать распознавание проезжаемого грунта и принятие решений на неровностях. Для проверки подъёма на камни потребуется метрически согласованная поверхность контакта и измеренный профиль аппарата. Порог не понижался ради демонстрации движения; успешное прохождение тропы и физическая проходимость этим изменением не заявляются.