Document AI Inference architecture and freeze current baseline
This commit is contained in:
@@ -0,0 +1,289 @@
|
||||
# AI Inference — принципы работы и фактическая архитектура
|
||||
|
||||
Срез на 5 сентября 2026 года. Репозиторий MISSION CORE, ветка `main`, исходный код аудита `e56eb42507d005cc372ac4a53785a080b116e227`. Изменения этого среза: терминология интерфейса и фиксация архитектуры. Исполнитель, модели, очередь, Rerun и способы обмена данными не рефакторились.
|
||||
|
||||
## 01. Решение и границы закрытия
|
||||
|
||||
AI Inference — текущий лабораторный путь применения выбранной AI-конфигурации к сохранённой физической записи и просмотра сохранённых доказательств. Раздел находится в LAB приложения Mission Core. Название «Обсерватория» больше не используется в текущем пользовательском интерфейсе. Технические `observatory` в URL, схемах, именах Python/TypeScript, Docker labels и старых evidence сохраняются для совместимости.
|
||||
|
||||
По решению владельца этот этап временно зафиксирован. Завершены архитектурный срез и консолидация контекста; пользовательская приёмка ещё не завершена. Это не статус production-ready, не доказательство real-time и не разрешение на управление транспортом. Поля `actuation_allowed`, `commands_enabled`, `navigation_or_safety_accepted`, `production_accepted` у действующих portable definitions имеют значение false.
|
||||
|
||||
Новые эксперименты строятся через этот путь. Старые LAB V1/M4.x и их приложения не становятся основой новых пользовательских поверхностей. Их результаты, код квалификации и происхождение алгоритмов сохраняются как история. Использование действующего TGS executor, выросшего из M4.9, не требует возвращать старый интерфейс лаборатории.
|
||||
|
||||
Worker выключен. В этом аудите его не включали, Docker daemon на нём не опрашивали, ничего не устанавливали и не запускали. Факты разделены на код и текущую конфигурацию Core, локальный сохранённый каталог/журнал, исторические измерения и непроверенные возможности.
|
||||
|
||||
## 02. Что является источником правды
|
||||
|
||||
Для текущей реализации первичны `config/observatory-ai-modules.json`, `config/observatory-portable-run-definitions.json`, `config/observatory-worker-runtime-candidates.json`, `config/observatory-domain-ontology.json` и соответствующие исполнители в `src/k1link/observatory/`. Наличие записи `executor.state=ready` означает сохранённую регистрацию executor identity, а не работающую сейчас машину.
|
||||
|
||||
Машинный срез: [2026-09-05-ai-inference-evidence.json](2026-09-05-ai-inference-evidence.json). В нём сохранены каталожные identities, ресурсные профили, текущая композиция и отобранные поля локальных jobs. Снимок не содержит ключей доступа, исходного видео, облаков, весов моделей и полных runtime-логов.
|
||||
|
||||
Связанные решения: [ADR 0051](../adr/0051-modular-observatory-profiles.md), [история маршрута](../OBSERVATORY_REALTIME_PROFILES_EXECPLAN.md), [handoff 3 сентября](../../experiments/perception/OBSERVATORY_MODULAR_HANDOFF_2026-09-03.md), [runbook Worker](../runbooks/OBSERVATORY_PORTABLE_WORKER_006.md). Старые слова CURRENT/«следующий шаг» в исторических отчётах не являются новыми поручениями и не отменяют этот срез.
|
||||
|
||||
Ops MISSION CORE: #75 «AI Inference · Принципы работы и архитектура» (`e5768b6c-0817-4e9e-a786-f9167586c7dc`) с полным содержанием этого отчёта; #73 — история перехода к модульным профилям; #74 — подробный реестр кастомизации Rerun; #66 — канон Rerun; #9 — история AI Worker; #65 — историческая LAB V1. Новая карта не стирает свидетельства ошибок в старых картах. Статус Done у #75 означает завершение документирования среза; открытые пункты пользовательской/target-приёмки перечислены в checker и ниже.
|
||||
|
||||
## 03. Основные сущности и их владельцы
|
||||
|
||||
| Сущность | Значение и владелец |
|
||||
|---|---|
|
||||
| Физическая сессия | Запись оборудования: видео, LiDAR, pose/trajectory, временные шкалы, калибровка и provenance. Каталог сессий Core; не результат AI. |
|
||||
| Версия модуля | Модель либо связанная алгоритмическая функция с точными image/code/model/contract identities, входами и выходами. Реестр модулей и sealed package. |
|
||||
| CompositionSpec | Неизменяемый проверенный набор версий, параметров, зависимостей и execution policy; не привязан к одной конкретной записи. |
|
||||
| LAB / composition run | Применение композиции к точному source snapshot; связывает состав, member jobs и опубликованные результаты. |
|
||||
| Recorded job / attempt / lease | Единица выдачи работы и её конкретное владение исполнителем. Durable очередь Core, claim token и generation fencing. |
|
||||
| Portable result | Неизменяемые артефакты и метаданные доказательства, identities, покрытие и authority. Публикуются на Core. |
|
||||
| LAB display profile | Изменяемое оформление просмотра, отдельно от расчётной конфигурации и raw evidence. Хранится на Core по result_id. |
|
||||
| Viewer session | Временное положение камеры, FOLLOW, включённые слои и пропорции окон. Не следует отождествлять с сохранением всего LAB profile. |
|
||||
| Worker / installed executor | Доверенный исполнитель, которому разрешены конкретные версии packages и ресурсы. Не произвольная удалённая shell-машина из UI. |
|
||||
|
||||
Изменение цвета или размера точек не пересчитывает модель. Переименование отображаемой LAB не меняет immutable composition/result identity. Удаление из пользовательского каталога не следует трактовать как переписывание доказательства или автоматический Docker prune.
|
||||
|
||||
## 04. Пользовательский путь
|
||||
|
||||
Оператор выбирает сохранённую сессию. Core сообщает доступные каналы и применимость setup. Кнопка «Сконфигурировать AI-слой» открывает выбор по функциональным группам. UI получает каталог с сервера; он не извлекает возможности из свободного названия LAB.
|
||||
|
||||
Выбранные модули проходят проверку зависимостей и совместимости источника. Сохраняется точная композиция. Core создаёт либо использует уже существующие подходящие member jobs/results, показывает их совместный статус, а после публикации открывает связанный визуальный разбор. Повторный просмотр готовой LAB не должен запускать inference.
|
||||
|
||||
Название строки состоит из реальных конфигурационных значений. Название исходной сессии в строках списка не дублируется; в заголовке открытого результата сохраняется полный контекст. Дата и время расчёта, сортировка по времени, просмотр, переименование и удаление доступны в каталоге. Прогресс относится к активной обработке; готовая строка не должна навсегда оставаться шкалой 100%.
|
||||
|
||||
Глобальный смысл состояний: инициализация → передача на сервер → расчёт. Внутри расчёта могут быть подготовка камеры/LiDAR, загрузка модели, собственно inference и сборка результата. Эти подэтапы должны называться по фактической операции. Процент очереди/пакета нельзя интерпретировать как долю кадров модели или обещание точного ETA.
|
||||
|
||||
## 05. Каталог модулей и зависимости
|
||||
|
||||
| Модуль | Входы → выходы | Текущее назначение |
|
||||
|---|---|---|
|
||||
| camera-source | source.camera → camera.frames | Служебная подготовка камеры, добавляется зависимостью. Не отдельный пользовательский эксперимент. |
|
||||
| DDRNet-39 · GOOSE | camera.frames → segmentation.mask | Семантическая сегментация выбранной версией DDRNet. |
|
||||
| EoMT Large · Cityscapes | camera.frames → segmentation.mask | Альтернативный провайдер сегментации. |
|
||||
| RF-DETR Large | camera.frames → detections.2d | Детекция объектов; текущий package содержит TensorRT engine. |
|
||||
| Дистанция до объектов | detections.2d + source.calibration + source.lidar + source.pose → objects.ranged | Сопоставление детекций с калиброванными LiDAR/pose; собственных обученных весов нет. |
|
||||
| TRAVEL TGS | source.calibration + source.lidar + source.pose → geometry.costmap + geometry.ground | Геометрическая обработка, ground/costmap; без отдельной ML-модели. |
|
||||
|
||||
В новой композиции допускается не более одного провайдера в группе. DDRNet и EoMT — альтернативы, не два одновременно выбранных segmentation provider. Зависимости включаются детерминированно; range требует RF-DETR. Циклы, неоднозначные провайдеры и пустой недопустимый граф отвергаются.
|
||||
|
||||
Группы motion и policy присутствуют в модели каталога, но в текущем реестре пусты. Это не доказательство установленных модулей движения или управления. Полный исторический perception prototype имел более широкий состав; его нельзя автоматически приписать текущему UI.
|
||||
|
||||
Разрешённые параметры расчёта ограничены версией модуля: у текущих stateless AI modules cadence допускает 1; у TGS causal history-seconds допускает 1 и действует reset-at-source-start. Это вычислительные контракты. Пользовательский slider накопления SLAM 0–500 секунд относится к отображению и не увеличивает расчётную историю TGS.
|
||||
|
||||
## 06. Граф: декларация и реальное исполнение
|
||||
|
||||
`modular_composition.py` проверяет capabilities, identities, параметры и топологический порядок. `modular_composition_store.py` сохраняет неизменяемую спецификацию. Execution policy текущих композиций: `recorded-observation-only`, `max_parallel_nodes=1`. `composition_runs.py` связывает source, composition и результаты запуска.
|
||||
|
||||
Важная граница реализации: `web/modular_observatory_api.py` переводит известный набор модулей в заранее поддержанные setup IDs. Это работающий ограниченный композитор, но ещё не универсальный runtime, который исполняет произвольный DAG из любого числа новых Docker-узлов под одной lease.
|
||||
|
||||
Текущие AI setup IDs: `ai-segmentation-ddrnet-v1`, `ai-segmentation-eomt-v1`, `ai-detection-rf-detr-v1`, `ai-range-object-distance-v1`; геометрия — `m49-tgs-portable-v2`. Когда выбран range, отдельный standalone RF-DETR job не создаётся: RF-DETR выполняется внутри range package. Поэтому полная выбранная конфигурация DDRNet + RF-DETR + range + TGS даёт три member jobs, а не четыре.
|
||||
|
||||
Подходящий ранее созданный non-failed job может быть использован снова; опубликованный member result связывается с новой композиционной проекцией. Точная повторная отправка композиции с существующей допустимой работой не должна размножать расчёты; конфликт сообщает API. Failed execution допускает повторную попытку по действующему маршруту.
|
||||
|
||||
Очередь отдельного job durable. Создание группы member jobs и запись composition-run projection не являются одной общей SQL-транзакцией универсального DAG. Нельзя обещать атомарность всей композиции на основании транзакционности очереди. Полноценное расширение scheduler и его аварийная приёмка остаются отдельной работой.
|
||||
|
||||
## 07. Схема коммуникации
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
UI[Web UI: AI Inference] -->|same-origin HTTP| Core[Mission Core API :8000]
|
||||
Core --> Catalog[Sessions / composition / ontology projection]
|
||||
Core --> Queue[Durable recorded queue]
|
||||
Worker[Installed Worker agent] -->|claim / renew / progress / terminal| Core
|
||||
Core -->|verified source package| Worker
|
||||
Worker -->|local Docker API| Steps[Sequential compute containers]
|
||||
Steps -->|sealed output| Worker
|
||||
Worker -->|manifest + verified member uploads| Core
|
||||
Core --> Publish[Publication / artifact store / result catalogue]
|
||||
Publish -->|base + overlay + profile| Viewer[Official Rerun in Web UI]
|
||||
```
|
||||
|
||||
Браузер обращается к Core, не управляет Docker и не соединяется напрямую с Worker. Worker забирает работу у Core по HTTP pull-протоколу. Нынешний recorded-путь не отправляет каждый кадр через отдельный браузерный запрос или gRPC-поток: исходный пакет передаётся, вычислительные шаги работают с локальными входами, выход затем публикуется обратно.
|
||||
|
||||
Live telemetry оборудования — отдельный контур. Telegraf → MQTT → normalizer → Timescale → Core/System не заменяет HTTP job protocol. Свежая телеметрия не доказывает успешную публикацию LAB, а сохранённая LAB остаётся читаемой без работающего Worker.
|
||||
|
||||
## 08. Адресация, туннель и доверие
|
||||
|
||||
Файлы: `worker_http_transport.py`, `worker_tunnel_launchd.py`, `worker_container_proxy.py`, `worker_agent.py`. Текущий Core слушает локально `127.0.0.1:8000`. На Mac управляется SSH reverse tunnel через alias `mission-gpu`: `-R 127.0.0.1:18080:127.0.0.1:8000`, с BatchMode, ExitOnForwardFailure и keepalive.
|
||||
|
||||
Внутри agent container клиент обращается к loopback proxy :18080. Proxy направляет запросы на `host.docker.internal:18080`; на Windows host это loopback endpoint SSH-туннеля к Core. Следовательно, loopback HTTP защищён транспортом SSH на межмашинном участке. Здесь нет утверждения о публичном HTTP-порту Worker без защиты.
|
||||
|
||||
Transport принимает HTTPS либо HTTP только для loopback, передаёт Bearer auth и contour identity. Текущее исполнение привязано к `worker-006`. Два HTTP connection slots оставляют возможность служебного обмена при передаче пакета. Ключи, значения credentials и файлы с ними намеренно не входят в карту.
|
||||
|
||||
Это конкретная топология Mac Core ↔ Windows/Docker Desktop Worker. Наличие протокола не означает, что имя другого компьютера можно просто подставить в UI. Linux host networking и `host.docker.internal`, доверие SSH, токен, contour binding и установленный release потребуют согласованной адаптации. Реализация регистрации нового Worker в этот этап не входит.
|
||||
|
||||
## 09. Lease, очередь и восстановление
|
||||
|
||||
Worker вызывает `/api/v1/worker/observatory/recorded-jobs/claims` с claim schema v3 и перечнем поддержанных executor identities. При отсутствии работы получает 204. Затем идут start, lease renew, progress и terminal; upload result package имеет отдельные plan/member/complete операции.
|
||||
|
||||
Core сверяет source/definition/executor/resource/result contracts. Claim token и generation защищают от публикации запоздалым исполнителем. UI не может передать произвольный image, shell command, mount или network target через job. Вычислитель получает выбранный установленный package.
|
||||
|
||||
Ресурсные профили текущего Worker закрепляют последовательную работу на NVIDIA RTX 4090 и concurrency=1. Это не доказательство параллельного исполнения всех модулей. Политика допускает преимущество live-работы над recorded; текущие тяжёлые recorded jobs non-checkpointable. После вытеснения/ошибки до sealed результата нельзя обещать продолжение ровно с последнего кадра.
|
||||
|
||||
Worker имеет ограниченное восстановление транспортных ошибок и heartbeat; Core хранит durable job/publication state. Если вычисление завершено и результат запечатан, повтор публикации не должен повторять inference. Если результат ещё не запечатан, повторный запуск может начать обработку заново. История failed attempts сохраняется, а не становится фиктивным успехом при появлении следующего успешного результата.
|
||||
|
||||
## 10. Docker: что действительно упаковано
|
||||
|
||||
Нужно различать agent image, compute module image, installed package и реально запущенный контейнер. Agent опрашивает Core и управляет этапами. Compute container выполняет ограниченный шаг. Package закрепляет последовательность, изображения, assets, команды и contracts. Контейнерный ID — конкретный экземпляр на машине; его текущего значения этот offline-аудит не устанавливает.
|
||||
|
||||
Dockerfiles находятся в `experiments/perception/worker/observatory_portable/`: `Dockerfile.ai-module-camera-source`, `Dockerfile.ai-module-ddrnet`, `Dockerfile.ai-module-eomt`, `Dockerfile.ai-module-rf-detr`, `Dockerfile.ai-module-object-distance`, файлы installed-lab worker agent и специализированного M4.9 executor. Builder: `scripts/build_modular_ai_worker_release.py`. Исполнение: `installed_lab_packages.py`, `installed_lab_package_runner.py`, `modular_installed_package_steps.py`, installed worker service/container main; для TGS — `m49_worker_service.py` и соответствующий main.
|
||||
|
||||
Модульность сейчас прежде всего логическая и контрактная. Camera-source использует private base `ndc/mission-core-installed-lab-v1-eomt-step:ee0efdd9af72`; DDRNet — `ndc/mission-core-installed-lab-v1-ddrnet-step:439127908dba`; RF-DETR и object-distance опираются на `ndc-k1-perception-ddrnet39-rfdetr-tgs:stage1-joint-20260901`. Поэтому нельзя описывать каждый модуль как уже минимальный полностью независимый образ без наследованных окружений.
|
||||
|
||||
Некоторые FROM закреплены tag, хотя установленный release и готовые images проверяются по SHA. Для воспроизводимой чистой пересборки нужны именно соответствующие private bases, внешние assets и версии инструментов; один текст Dockerfile без них недостаточен. Отдельные conda/Python/model environments внутри compute stages остаются частью переносимого комплекта.
|
||||
|
||||
`ModuleSpec.docker_name` и ownership labels задают идентичность/наименование, а не доказывают наличие отдельного постоянно работающего сервиса на каждый модуль. В частности, TRAVEL TGS в текущем пути использует квалифицированный специализированный executor. Старые контейнеры LAB V1/других исследований не удалялись этой фиксацией.
|
||||
|
||||
## 11. Зафиксированные образы, модели и releases
|
||||
|
||||
SHA ниже взяты из текущих versioned registries; это конфигурационный срез, не сегодняшняя команда docker inspect на выключенном Worker.
|
||||
|
||||
| Модуль | Compute image SHA-256 |
|
||||
|---|---|
|
||||
| camera-source | da926459aee0a841bbdfaf80a0eb5fbead354c56794d1f3384eeba66d0a49e00 |
|
||||
| DDRNet | 489fc7d1157fd0f1cd1d82e06a15737b7b2aaaf72b2ddb2aca2992b91a97488e |
|
||||
| EoMT | 5b770178e4a5c8fbe8f8ddab3b83a598973dbe103b669851110b11a0918ab846 |
|
||||
| RF-DETR | 2b8b44be8e9ee4060aa6997fc4c025ad7120f37ecd720a9e59b5e02ac6c90f66 |
|
||||
| object-distance | 69d68f64981b41e5bcce1e642433e3d466b88c51942a5ba3aec9180d8ed04263 |
|
||||
| TRAVEL TGS | f9278ab21aa65045be993dd19bffc25f49955e19598893ac78cc4761ca63ecf3 |
|
||||
|
||||
Веса DDRNet: `b99c2838051bcd7b092fd3970aa62a77d5c0bbb809c9b9afb2ff4b0ebdaa4ee6`. EoMT weights: `c265da9a74f58f5c3f4826d23ca4ca78beac0b106cca5842beca61580de5b782`. RF-DETR TensorRT engine: `b8a40b3580edff001ec9680de68707242294ff590ab296000fae371f1083f695`. TensorRT engine не следует считать универсальным переносимым checkpoint для любого GPU/runtime.
|
||||
|
||||
У четырёх новых AI setup текущий executor image SHA `7a1d425b4678dcade7d7d6ffd14733d639a4df29f45e1759ba4c512e930da8ab`, release ID `ai-modular-installed-package-v1`, release SHA `97bfe743689766285b22627c4020d10df7949ef1f4546ef904dccb9ca4c6f721`. Все привязаны к worker-006.
|
||||
|
||||
TGS definition v3 использует image `f9278ab2…`, release `m49-tgs-portable-executor-v1`, release SHA `c5b0670d943fe0452ef4bbfbc144ab2439a1a674f9ef164798ad9f8b1ecc29fa`. Старая совместная LAB V1 definition v2 с executor `5ad7d95b…` и release `66785862…` остаётся в совместимом реестре; она не заменяет новые modular setups.
|
||||
|
||||
Важно сохранять provenance каждого результата: успешно опубликованный DDRNet member произведён предыдущим release `ecbb0edc1c4c3708329247a2210ef98dfa776bf948974e778ba6d131ad17a924`, хотя image agent совпадает. Range member использует текущий `97bfe743…`. Совпадение agent image не означает одинаковость sealed package. Каталоги `.runtime/*v8/v9/v10` — локальные артефакты сборки; наибольший номер папки не является источником истины о фактически установленном release.
|
||||
|
||||
## 12. Ресурсы и изоляция compute
|
||||
|
||||
Installed agent — доверенный оркестратор с доступом к Docker API/socket. Его нельзя описывать как полностью непривилегированный компонент без влияния на host.
|
||||
|
||||
Дочерние вычислительные контейнеры запускаются с ограничениями package runner: `network=none`, read-only root filesystem, drop ALL capabilities, no-new-privileges, без privileged mode. Входы, модели и проверенные code assets монтируются read-only; writable output ограничен каталогом шага. Заданы RAM/MemorySwap, CPU NanoCpus, Pids, SHM/tmpfs и GPU DeviceRequests. Точное значение бюджета зависит от resource profile/package, а не от свободного UI ввода.
|
||||
|
||||
GPU device admission не является жёсткой квотой VRAM. На имеющейся конфигурации действует последовательный допуск. Обещание безопасной параллельной работы N разных GPU моделей требует отдельного замера памяти и admission policy.
|
||||
|
||||
Историческая инвентаризация 3 сентября сообщала 11 containers, 7 running/4 stopped, 80 images, 9 volumes. Эти числа сохранены в архиве, но не являются текущим состоянием выключенного Worker. Другие исследования/сервисы, включая Gaussian и retained LAB packages, не следует автоматически считать зависимостями AI Inference или удалять по этой карте.
|
||||
|
||||
## 13. Передача данных и фактический кэш
|
||||
|
||||
Source package строится из конкретной сессии и проверенных members. Проверяются digest, размер и допустимость путей. `worker_source_cache.py` содержит source CAS (`.source-cas-v1`), который позволяет повторно использовать совпадающие исходные bytes. Кэш не разрешает смешивать похожие записи или произвольные версии калибровки.
|
||||
|
||||
Холодная подготовка остаётся существенной: загрузка camera archive завершается до extraction; декодирование/согласование камеры и LiDAR может предшествовать модельному этапу. Model-neutral camera-source убирает логическую зависимость подготовки от выбора segmentation, но не доказывает, что каждый отдельный job уже использует один готовый общий prepared-frame cache.
|
||||
|
||||
`portable_result_cache.py` и composition member reuse работают на уровне совпадающих сохранённых результатов. Чтение уже опубликованного результата не должно требовать GPU Worker.
|
||||
|
||||
Особенно важная проверка: `modular_node_cache.py` и `node_input_identity` существуют и покрыты тестами, но поиск production call sites обнаруживает определения и тесты без подключения `ModularNodeCache` к основному исполнителю. Поэтому универсальный кэш каждого узла композиции пока не заявляется работающей функцией. Старое намерение «каждый модуль считается один раз для всех LAB» ещё не равно реализации.
|
||||
|
||||
## 14. Результат и публикация
|
||||
|
||||
Результат связывает source snapshot, exact definition, module/package/model identities, временное покрытие и артефакты. `portable_artifact_transport.py` принимает manifest и members, `portable_result_publisher.py` создаёт опубликованную проекцию, `portable_publication_reconciler.py` доводит durable publication/outbox до согласованного состояния.
|
||||
|
||||
Результат проверки/расчёта и построенный для Rerun cache — разные артефакты. Смена renderer identity может потребовать перестроить производный cache; она не должна переписать исходные sealed results. Недоступный или неподходящий source должен давать явное состояние, а не демонстрационные точки вместо реальных данных.
|
||||
|
||||
Готовность полной LAB означает доступность требуемых member results по composition projection. Она не делает timestamps всех member jobs одинаковыми и не доказывает, что весь состав был вычислен одним совместным запуском. Сохранённая точная конфигурация важнее свободного названия строки.
|
||||
|
||||
## 15. Что действительно есть в текущем каталоге
|
||||
|
||||
Проверено через локальный Core API 5 сентября, без подключения Worker. Источник: `20260828T130511Z_viewer_live`, имя RAVNOVES004TREE, XGRIDS LixelKity K1, capture profile `xgrids-k1.viewer-live.fw-3.0.2.v1`, длительность 808.779 секунды (13:28.779).
|
||||
|
||||
В текущей проекции есть ready composition `ai-composition-33389babab33b801e8892f7b991683487eef2deea507486e52569fe943082e4b`, composition SHA `230396b858b09eea3d1d3a190c5e32d1d5e379da0058d32341026937fbb5cf24`. Создана 4 сентября в 06:59:35 UTC. Состав: DDRNet, RF-DETR, object-distance, TGS. Связаны три опубликованных member result; в UI также доступны отдельные сохранённые DDRNet и TGS строки.
|
||||
|
||||
| Member | Job | От создания job до публикации, UTC |
|
||||
|---|---|---|
|
||||
| DDRNet | observatory-run-ef3c14a64fca4d5a8674df82a5a0fca2 | 04.09 03:57:16.996 → 04:26:44.704; 29 мин 27.708 с |
|
||||
| TRAVEL TGS | observatory-run-b230216709dc4c59bc56c98c7e329bf1 | 03.09 08:08:03.013 → 08:31:39.776; 23 мин 36.763 с |
|
||||
| object-distance, включая RF-DETR | observatory-run-185e25280d58472ab8b4a0245a35c888 | 04.09 06:29:36.181 → 07:00:02.263; 30 мин 26.082 с |
|
||||
|
||||
Result IDs: `ai-layer-ddrnet-7c6a79942683933390f5ff0ecf2c6da1867d40032e91303746a567198772ce5c`; `m49-tgs-portable-review-a09d2b4a07d103e4f3693ba746a51be2197214768774eabfded4f109ae80dce4`; `ai-layer-object-distance-05f3931621585c9ac32132bef8c7afa961cea317cc29def09a8312339f8421e4`.
|
||||
|
||||
Это wall time конкретных успешных jobs, включая всё между enqueue и publication; это не model latency. Не надо складывать эти числа и называть суммой latency одного composition run: его members переиспользованы из разных дат.
|
||||
|
||||
История по этой сессии и setup при запросе до 100 jobs: DDRNet — 7, из них 1 succeeded/published и 6 failed; range — 7, из них 1 succeeded/published и 6 failed; TGS — 4, из них 1 succeeded/published, 1 succeeded с publication not-required и 2 failed. У новых standalone EoMT и RF-DETR setup — 0 jobs для этой сессии. Ноль здесь не означает отсутствия модели или старых экспериментов; успешный standalone recorded прогон ими в этом срезе не подтверждён. Действующие failures не стираются итоговой готовностью одной LAB.
|
||||
|
||||
## 16. Реальное покрытие и смысл измерений
|
||||
|
||||
Полная длительность источника и фактическое покрытие результатов должны быть отдельными полями. Исторический TGS handoff для этой записи указывает 6830 camera anchors, 6811 LiDAR matches и 19 unobserved; processing schedule примерно 39.215–757.160 секунды внутри источника 808.779 секунды. Надпись «полный маршрут» не должна скрывать начальные/конечные непокрытые интервалы и отсутствующие наблюдения.
|
||||
|
||||
В сохранённом TGS performance: candidate TGS p50=1.204 ms, p95=2.6075 ms, p99=3.2357 ms, max=4.651 ms. Более широкий stage wall: p50=17.676102 ms, p95=29.99172 ms, p99=36.24682261 ms, max=1269.499327 ms. Это разные границы измерения внутри алгоритма и обвязки; они не опровергают десятки минут enqueue→publish при подготовке записи.
|
||||
|
||||
Для честного сравнения нужно сохранять source rate, coverage, cold/warm режим, hardware/runtime identity, sample count и границы: queue wait; source transfer; decode/align; warmup; model/algorithm compute; serialize/seal; result upload/publication; replay preparation. Нельзя вычитать p95 одной фазы из p95 другой и получать корректный p95 остатка. FPS визуального воспроизведения Rerun тоже не является inference FPS.
|
||||
|
||||
Текущий recorded-first путь предназначен для воспроизводимых сравнений и сохранённых доказательств. Из имеющихся результатов не следует ни обещание полного real-time, ни утверждение, что модель сама считает один кадр две секунды. Долгие пользовательские ожидания из истории были реальными и должны оставаться частью performance backlog.
|
||||
|
||||
## 17. Предыдущий streaming experiment и его результат
|
||||
|
||||
Сохранены исследования `experiments/perception/worker/streaming_profile_stage1/`, [stage 1](../../experiments/perception/PERCEPTION_STREAM_STAGE1_2026-09-01.md), [cross-host graph](../../experiments/perception/PERCEPTION_STREAM_STAGE2_CROSSHOST_GRAPH_2026-09-02.md), [control clock](../../experiments/perception/PERCEPTION_STREAM_STAGE2_CONTROL_CLOCK_2026-09-02.md), [TLS attribution](../../experiments/perception/PERCEPTION_STREAM_STAGE2_TLS_ATTRIBUTION_2026-09-02.md), [LAN route](../../experiments/perception/PERCEPTION_STREAM_STAGE2_LAN_ROUTE_2026-09-02.md). Подробные receipts также перенесены из Desktop в архив.
|
||||
|
||||
Это отдельный resident perception prototype: DDRNet/RF-DETR, LiDAR/range, motion, TGS/costmap и policy stages, бинарный обмен gRPC/TLS и pacing источника 1×. Он не является текущим recorded HTTP worker protocol и не становится автоматически модулем motion/policy в сегодняшнем UI.
|
||||
|
||||
Исторический joint image: `986dbe7126992359c69da0ddda674925a5efe8e3429a6d5f60765f9c9ad34a4e`, tag `ndc-k1-perception-ddrnet39-rfdetr-tgs:stage1-joint-20260901`. Использовались model/code mounts; это не полностью автономный образ. Конкретный приёмочный фрагмент: 32 released/accepted results с byte-exact доставкой; fresh scene outputs — 12. Эти числа нельзя заменять фразой «32 полностью свежих результатов сцены».
|
||||
|
||||
На Worker локально compute→local receiver p95/p99 = 74.243/76.322 ms. Межмашинная граница Mac source-due→consumer-ready p95/p99 = 205.864/213.751 ms при gate 125 ms: FAIL. Min 86.598 ms, median 121.85 ms не превращают хвосты в PASS. Историческая проверка выявила Wi-Fi с обеих сторон и TCP tails 67.921–91.142 ms ниже приложения; это основание изучать сеть, а не основание объявить всё задержкой модели. Истощение VRAM в этом конкретном опыте не было доказано.
|
||||
|
||||
Опыты показывают полезный compute budget и нерешённый end-to-end gate на тогдашней сети. Перенос resident runtime на будущий борт, совместимость другого GPU и абсолютный real-time не квалифицированы этим отчётом. Повторный streaming benchmark сейчас не запускался.
|
||||
|
||||
## 18. Локальная онтология и связи с оборудованием
|
||||
|
||||
В Mission Core уже есть предметная проекция: `config/observatory-domain-ontology.json` и `src/k1link/observatory/domain_ontology.py`. Она связывает transport/equipment/mount, capture profile, source session, module version/image, worker, composition, run/job/result, LAB view profile и layers/panes.
|
||||
|
||||
Она обслуживает согласованные запросы планирования, dispatch, публикации и replay: точная подпись конфигурации, состав member results, доступные слои и готовность. Идентичности берутся из существующих реестров/хранилищ; это не конкурирующая база, самовольно переименовывающая raw evidence.
|
||||
|
||||
Онтология отдельного NDC Platform repository не изменялась, runtime dependency на неё для AI Inference не добавлялась. Архитектурный принцип связанной модели применён локально. Формальное присутствие transport/equipment сущностей не равно готовой регистрации любого оборудования, универсальному драйверу RealSense или автоматическому конструктору 50 камер.
|
||||
|
||||
## 19. Rerun: один runtime, локальные контролы и сохранение
|
||||
|
||||
Полная самостоятельная карта: Ops #74 и [2026-09-05-rerun-customization-inventory.md](2026-09-05-rerun-customization-inventory.md), с [проверкой upstream](2026-09-05-rerun-upstream-evidence.json). В ней перечислены все действующие и архивные надстройки, точные файлы, хеши и upgrade gates. Здесь только роль в AI Inference.
|
||||
|
||||
Используется официальный Rerun 0.36.3; установленные JS/WASM и Python SDK в предыдущем аудите побайтно сверены с upstream. Recorded viewer живёт в same-origin iframe, имеет один native renderer/store/clock. Камера и spatial — виды внутри общего viewer. Внешний SplitPane владеет разделением, контролы принадлежат своим секциям, native layout получает согласованную долю. Верхняя панель переносит не помещающиеся группы; refresh/fullscreen относятся к общему layout.
|
||||
|
||||
Слои строятся из capabilities результата: фон КАМЕРА независим от segmentation и РАМОК; кнопка рамок зависит от detections; TGS от geometry evidence. Отключённый фон камеры не должен выключать остальные 2D layers. Один тип источника допускает одно окно. Сегодня реализованы camera/spatial и single-pane варианты, а не произвольное дерево из 50 камер.
|
||||
|
||||
ИСХ. ТОЧКИ и ЛОК. SLAM сейчас используют одно sealed `/world/points`. Отличаются отображение/накопление и дополнительные trajectory controls; это не две независимые коллекции «математические» и «декоративные». Изменения размера/цвета не меняют raw/AI расчёт.
|
||||
|
||||
Надстройка FOLLOW и восстановления eye использует прикладной журнал native gestures и blueprint. Это не официальный универсальный get-camera-pose API. Не все gestures покрыты: WASD, double-click/picking-fit, inertia могут расходиться с журналом. Такие ограничения явно оставлены в #74; этот документ не объявляет все пользовательские сценарии зума принятыми.
|
||||
|
||||
Server-side LAB display profile сохраняет point_size, accumulation_seconds, color_mode, palette, show_grid, show_labels, show_camera_frustums отдельно от immutable result. Применение point size/накопления/цвета/grid подключено; show_labels и show_camera_frustums сохраняются, но визуально не подключены к текущему canonical LAB пути. Layer toggles, FOLLOW, eye и split ratio в этот durable profile не входят.
|
||||
|
||||
Slider накопления 0–500 s и точный ввод конечного неотрицательного значения без верхнего product cap; размер slider 0.1–10 px, точный ввод ≥0.1 без верхнего cap. Закрытие настроек отправляет PUT; ошибка не должна блокировать закрытие и показывается компактным сообщением. Только успешная серверная запись подтверждает сохранение после очистки локального кэша. Сохранение в памяти/localStorage само по себе этого не доказывает.
|
||||
|
||||
## 20. Переносимость — что возможно и чего ещё нет
|
||||
|
||||
| Объект переноса | Реальное условие |
|
||||
|---|---|
|
||||
| Просмотр готовых LAB на другом Core | Перенести каталог, source/result artifacts, lineage и profiles с сохранением identities; обеспечить renderer/SDK и восстановление производных caches. Worker для просмотра не требуется. |
|
||||
| Та же композиция на другой записи K1 | Источник обязан пройти admission по требуемым каналам, калибровке, media epoch/codec, геометрии и timestamps. Один совпавший label недостаточен. |
|
||||
| GPU-модули на другом AI Worker | Нужны compatible CPU architecture/GPU/CUDA/TensorRT, exact images, private bases для rebuild, models/code assets, installed package, resource profiles и протокол связи. Не один docker load. |
|
||||
| Worker с другим именем/contour | Сейчас имеются worker-006 bindings и проверки. Общая динамическая регистрация/автовыбор любого Worker не заявляется готовой. В эту задачу не входит. |
|
||||
| Linux вместо Windows Docker Desktop | Нужна проверка network/host bridge, paths, mounts, GPU runtime и SSH topology; host.docker.internal нельзя молча считать одинаковым. |
|
||||
| Новая модель | Требуются ModuleSpec, versioned image/contract, adapter/installed steps, setup projection, input/result verification, capability→viewer mapping и evidence. Сейчас UI не универсальный marketplace Docker images. |
|
||||
| Другое оборудование / 50 камер | Нужны source adapters, calibration/time contracts, admission и расширение layout/ресурсной модели. Сущности онтологии дают место для этого, но не готовую реализацию. |
|
||||
| Бортовой real-time | Resident prototype, recorded LAB и бортовая qualification — разные границы. Нужен отдельный измеренный deployment на выбранном target. |
|
||||
|
||||
Переносимость достигнута в identities, пакетах, протоколах и сохранённых результатах. Привязки к Worker-006, K1 и имеющимся окружениям остаются конкретными. Утверждение «полностью независимо от host» сегодня было бы неточным. Изменять эти границы ради красивого отчёта без работающего Worker не стали.
|
||||
|
||||
## 21. Архив Desktop без потери контекста
|
||||
|
||||
Два относящихся к AI Inference документа перенесены побайтно в `docs/handoff/ai-inference-source-documents/` и снабжены [manifest.json](../handoff/ai-inference-source-documents/manifest.json). Это полные исходные тексты, включая ошибки, планы, замеры, списки Docker и последовательные обновления; не только краткий пересказ.
|
||||
|
||||
| Исходный файл Desktop | Bytes | SHA-256 |
|
||||
|---|---:|---|
|
||||
| _MISSING_CORE_MODULAR_AUDIT_AND_PLAN_2026-09-03.md | 53637 | d6c201d083fbec4b1db031379b515ff821a09ccfa0cea62443e211a9d76cb1c2 |
|
||||
| _MISSING_CORE_OBSERVATORY_DOCKER_LABS_FINAL_STATUS_2026-09-01.md | 330260 | 45e870700baddab8f31a2f0f0bfe1f9e99e8e73a490195c1e6a3beb5265e49ee |
|
||||
|
||||
Другие документы на Desktop не объявляются перенесёнными этой картой. Исходники не удалялись автоматически. После публикации commit пользователь может удалить именно эти два оригинала: versioned копии и хеши остаются в репозитории, а их актуальная интерпретация — здесь и в Ops.
|
||||
|
||||
Исторические указания из этих файлов не исполняются как команды. Раннее требование «весь профиль в одном монолитном образе» заменено ADR 0051. Историческое описание node cache как цели отделено от фактического отсутствия production wiring. Старые Docker inventories и streaming receipts датированы; не выдаются за результаты сегодняшнего запуска.
|
||||
|
||||
## 22. Проверки этого изменения и открытые границы
|
||||
|
||||
Для переименования выполнены архитектурные frontend tests (4 passed), полный frontend typecheck, полный unit suite (759 passed), production build и targeted Python tests `test_modular_observatory_api.py`/`test_observatory_setups.py` (22 passed). Изменения runtime поведения и новые вычислительные jobs в этом этапе не выполнялись.
|
||||
|
||||
В открытом in-app browser обновлена сборка и пройден путь LAB → AI Inference. Новые sidebar label, eyebrow, title и aria-подсказки удаления подтверждены реальным UI. Проверены обычный и развёрнутый shell, три сохранённых строки с датами/действиями; открыта полная сохранённая конфигурация с камерой, DDRNet, рамками и TGS. Fullscreen самого результата и возврат по Escape проверены. Escape на shell сам по себе не меняет его состояние; это не объявляется успешным закрытием shell. Текущая задача не меняет политику Escape/диалогов. Реальная сохранённая конфигурация оставляется для просмотра владельцем.
|
||||
|
||||
Срез временно закрыт по документации. Открыты: окончательная пользовательская приёмка навигации Rerun и настроек; два неподключённых display fields; полный native camera-state API вместо неполного gesture journal; универсальный multi-pane constructor; универсальное исполнение DAG/production node cache; новые Worker/оборудование и target CUDA qualification; end-to-end real-time gate и полноценные cold/warm phase metrics. Это границы текущего продукта, не скрыто выполненные пункты.
|
||||
|
||||
При возобновлении работы исходная точка — этот срез, actual registry и конкретные new measurements. Legacy LAB приложения автоматически не возвращаются; неизвестные состояния выключенного Worker сначала проверяются после его появления. Любое следующее обновление Rerun проходит отдельно по карте #74.
|
||||
|
||||
## 23. Изменённые файлы и эксплуатационная фиксация
|
||||
|
||||
Переименование: `apps/control-station/src/productModel.ts`, `components/laboratory/LaboratoryPresentation.tsx`, `workspaces/observatory/ObservatoryWorkspace.tsx`, `core/observatory/{aiComposition,catalogMutations,useObservatoryCatalog}.ts` внутри frontend; `src/k1link/observatory/setups.py`, `src/k1link/web/{observatory_api,modular_observatory_api}.py`. Обновлены ожидания существующих `observatoryWorkspace.test.mjs` и `observatoryCatalogMutations.test.mjs`. Дизайн, identifiers, параметры расчёта и бинарные модели не изменены.
|
||||
|
||||
Документация: этот отчёт, JSON evidence, README/manifest и две полные копии в `docs/handoff/ai-inference-source-documents/`; указатели текущего среза в ADR 0051 и историческом ExecPlan. Ops #75 создана как текущая архитектурная карта; #73 переименована в историческую карту с указателем #75 и сохранением всех прежних блоков.
|
||||
|
||||
Production frontend bundle пересобран. Канонический локальный LaunchAgent `com.nodedc.mission-core.local` перезапущен из того же checkout для применения Python-текстов. `/api/health` на :8000 подтверждает operational=true, plugin runtimes 1/1, готовность источников и artifact store. Новый сервер на другом порту не создавался; удалённый Worker не запускался. Код и архив публикуются в main обычным commit/push без переписывания истории. Точный итоговый commit указывается в финальном блоке Ops #75.
|
||||
@@ -0,0 +1,850 @@
|
||||
{
|
||||
"snapshot_date": "2026-09-05T06:51:04.590227+00:00",
|
||||
"code_baseline": "e56eb42507d005cc372ac4a53785a080b116e227",
|
||||
"worker_live_inspection": false,
|
||||
"source_session_id": "20260828T130511Z_viewer_live",
|
||||
"modules_registry": {
|
||||
"schema_version": "missioncore.observatory-ai-module-registry/v1",
|
||||
"modules": [
|
||||
{
|
||||
"module_id": "camera-source",
|
||||
"label": "Подготовка камеры K1",
|
||||
"group": "preparation",
|
||||
"image_sha256": "da926459aee0a841bbdfaf80a0eb5fbead354c56794d1f3384eeba66d0a49e00",
|
||||
"implementation_sha256": "a0b1a74887e5f1cf78e867f81f246bae08e872fed320a2939986c17913418524",
|
||||
"model_sha256": null,
|
||||
"contract_sha256": "87c9e8864f9469719e69bfd750c418e077944a6260ffc6fd3ce12daf4a1da7d5",
|
||||
"requires": [
|
||||
"source.camera"
|
||||
],
|
||||
"provides": [
|
||||
"camera.frames"
|
||||
],
|
||||
"optional_inputs": [],
|
||||
"parameter_choices": {
|
||||
"cadence": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"defaults": {
|
||||
"cadence": 1
|
||||
},
|
||||
"state_policy": "stateless"
|
||||
},
|
||||
{
|
||||
"module_id": "ddrnet",
|
||||
"label": "DDRNet-39 · GOOSE",
|
||||
"group": "segmentation",
|
||||
"image_sha256": "489fc7d1157fd0f1cd1d82e06a15737b7b2aaaf72b2ddb2aca2992b91a97488e",
|
||||
"implementation_sha256": "9a3fceb65374ccc3dccdbe02691c2b62376ff3a3a6d16439cb9f6266e73c78b0",
|
||||
"model_sha256": "b99c2838051bcd7b092fd3970aa62a77d5c0bbb809c9b9afb2ff4b0ebdaa4ee6",
|
||||
"contract_sha256": "197c9d7dd0f55f79992215a57e450c5442f3d1510d74083bcf123577f85da199",
|
||||
"requires": [
|
||||
"camera.frames"
|
||||
],
|
||||
"provides": [
|
||||
"segmentation.mask"
|
||||
],
|
||||
"optional_inputs": [],
|
||||
"parameter_choices": {
|
||||
"cadence": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"defaults": {
|
||||
"cadence": 1
|
||||
},
|
||||
"state_policy": "stateless"
|
||||
},
|
||||
{
|
||||
"module_id": "eomt",
|
||||
"label": "EoMT Large · Cityscapes",
|
||||
"group": "segmentation",
|
||||
"image_sha256": "5b770178e4a5c8fbe8f8ddab3b83a598973dbe103b669851110b11a0918ab846",
|
||||
"implementation_sha256": "17ac471d5c51f70b3af6fb6046e1880c731691253c338b1626702ce4ca375d2b",
|
||||
"model_sha256": "c265da9a74f58f5c3f4826d23ca4ca78beac0b106cca5842beca61580de5b782",
|
||||
"contract_sha256": "09ca841400b08af0607d19d346f78ab768567256c8c58789a6ade4ede8f425a0",
|
||||
"requires": [
|
||||
"camera.frames"
|
||||
],
|
||||
"provides": [
|
||||
"segmentation.mask"
|
||||
],
|
||||
"optional_inputs": [],
|
||||
"parameter_choices": {
|
||||
"cadence": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"defaults": {
|
||||
"cadence": 1
|
||||
},
|
||||
"state_policy": "stateless"
|
||||
},
|
||||
{
|
||||
"module_id": "tgs",
|
||||
"label": "TRAVEL TGS · облако и карта проходимости",
|
||||
"group": "geometry",
|
||||
"image_sha256": "f9278ab21aa65045be993dd19bffc25f49955e19598893ac78cc4761ca63ecf3",
|
||||
"implementation_sha256": "52813392aabd02efc5c2b8f7c22ed88e3ef4cc8ad3aafeba2792efe503e29fe9",
|
||||
"model_sha256": null,
|
||||
"contract_sha256": "9dd80c8e2504559d2156fca933de6eb27901e35305e6853aeb84707e1cb13892",
|
||||
"requires": [
|
||||
"source.calibration",
|
||||
"source.lidar",
|
||||
"source.pose"
|
||||
],
|
||||
"provides": [
|
||||
"geometry.costmap",
|
||||
"geometry.ground"
|
||||
],
|
||||
"optional_inputs": [],
|
||||
"parameter_choices": {
|
||||
"history-seconds": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"defaults": {
|
||||
"history-seconds": 1
|
||||
},
|
||||
"state_policy": "causal-reset-at-source-start"
|
||||
},
|
||||
{
|
||||
"module_id": "rf-detr",
|
||||
"label": "RF-DETR Large · рамки объектов",
|
||||
"group": "detection",
|
||||
"image_sha256": "2b8b44be8e9ee4060aa6997fc4c025ad7120f37ecd720a9e59b5e02ac6c90f66",
|
||||
"implementation_sha256": "4eb580eb938164bf0624e94fdc3b046aacf32fb8022c93c67fa26bab7c3d19d0",
|
||||
"model_sha256": "b8a40b3580edff001ec9680de68707242294ff590ab296000fae371f1083f695",
|
||||
"contract_sha256": "815d0afd24355da3a462e0423dab8284165c89cebd136d7c8584a32602178b96",
|
||||
"requires": [
|
||||
"camera.frames"
|
||||
],
|
||||
"provides": [
|
||||
"detections.2d"
|
||||
],
|
||||
"optional_inputs": [],
|
||||
"parameter_choices": {
|
||||
"cadence": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"defaults": {
|
||||
"cadence": 1
|
||||
},
|
||||
"state_policy": "stateless"
|
||||
},
|
||||
{
|
||||
"module_id": "object-distance",
|
||||
"label": "Дистанция до объектов · K1 LiDAR",
|
||||
"group": "range",
|
||||
"image_sha256": "69d68f64981b41e5bcce1e642433e3d466b88c51942a5ba3aec9180d8ed04263",
|
||||
"implementation_sha256": "0e3e426e2f768bc019a3715a50fc77a88626869abd9fa919e1aef5763d0c53da",
|
||||
"model_sha256": null,
|
||||
"contract_sha256": "5a6e446f009420352587f83388331b368d00950ab2fb896c6350aaa9b31c2e2e",
|
||||
"requires": [
|
||||
"detections.2d",
|
||||
"source.calibration",
|
||||
"source.lidar",
|
||||
"source.pose"
|
||||
],
|
||||
"provides": [
|
||||
"objects.ranged"
|
||||
],
|
||||
"optional_inputs": [],
|
||||
"parameter_choices": {
|
||||
"cadence": [
|
||||
1
|
||||
]
|
||||
},
|
||||
"defaults": {
|
||||
"cadence": 1
|
||||
},
|
||||
"state_policy": "stateless"
|
||||
}
|
||||
]
|
||||
},
|
||||
"configured_definitions": [
|
||||
{
|
||||
"setup_id": "lab-v1-eomt-ddrnet-portable-v1",
|
||||
"definition_sha256": "269d71a24b4e63cff54e01273f9d4b35fc6cdd72bc6fadec206169ae0777e6ac",
|
||||
"version": 2,
|
||||
"executor": {
|
||||
"contour_id": "worker-006",
|
||||
"image_sha256": "5ad7d95baac63af13812cb693d492add4e806a333aba8e60edb2ea1aba754373",
|
||||
"reason": null,
|
||||
"reason_code": null,
|
||||
"release_id": "lab-v1-installed-package-v1",
|
||||
"release_sha256": "667858623962cd6d9849a8985b803f59e429916b5c56f76a6fc6c80c0c54526b",
|
||||
"state": "ready"
|
||||
},
|
||||
"resource_profile": {
|
||||
"accelerator_id": "nvidia-rtx-4090",
|
||||
"allowed_checkpoints": [],
|
||||
"checkpoint_policy": "non-checkpointable",
|
||||
"concurrency": 1,
|
||||
"contour_id": "worker-006",
|
||||
"profile_id": "worker006-single-gpu-sequential-ai-v1",
|
||||
"profile_sha256": "7468138cad115210eda18e7a3350e3423d3d39ac0aae650b3266cdc2bc63fd5d",
|
||||
"schema_version": "missioncore.observatory-portable-resource-profile/v2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"setup_id": "m49-tgs-portable-v2",
|
||||
"definition_sha256": "f56d6321bd794ccdfb7d2e3b05d044b11f616ffb81ee29517386cc253046d4eb",
|
||||
"version": 3,
|
||||
"executor": {
|
||||
"contour_id": "worker-006",
|
||||
"image_sha256": "f9278ab21aa65045be993dd19bffc25f49955e19598893ac78cc4761ca63ecf3",
|
||||
"reason": null,
|
||||
"reason_code": null,
|
||||
"release_id": "m49-tgs-portable-executor-v1",
|
||||
"release_sha256": "c5b0670d943fe0452ef4bbfbc144ab2439a1a674f9ef164798ad9f8b1ecc29fa",
|
||||
"state": "ready"
|
||||
},
|
||||
"resource_profile": {
|
||||
"accelerator_id": "cpu-only",
|
||||
"allowed_checkpoints": [],
|
||||
"checkpoint_policy": "non-checkpointable",
|
||||
"concurrency": 1,
|
||||
"contour_id": "worker-006",
|
||||
"profile_id": "worker006-cpu-single-run-portable-v2",
|
||||
"profile_sha256": "49e373f1cbf314e7fab2d176db295f3d3d9ddbbcbd724bbde988ef60ad767dee",
|
||||
"schema_version": "missioncore.observatory-portable-resource-profile/v2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"setup_id": "ai-segmentation-ddrnet-v1",
|
||||
"definition_sha256": "04dd11b9bca4956bc253c970a9020a5fac80e9ef5981ff1fffc32b9646087fec",
|
||||
"version": 1,
|
||||
"executor": {
|
||||
"contour_id": "worker-006",
|
||||
"image_sha256": "7a1d425b4678dcade7d7d6ffd14733d639a4df29f45e1759ba4c512e930da8ab",
|
||||
"reason": null,
|
||||
"reason_code": null,
|
||||
"release_id": "ai-modular-installed-package-v1",
|
||||
"release_sha256": "97bfe743689766285b22627c4020d10df7949ef1f4546ef904dccb9ca4c6f721",
|
||||
"state": "ready"
|
||||
},
|
||||
"resource_profile": {
|
||||
"accelerator_id": "nvidia-rtx-4090",
|
||||
"allowed_checkpoints": [],
|
||||
"checkpoint_policy": "non-checkpointable",
|
||||
"concurrency": 1,
|
||||
"contour_id": "worker-006",
|
||||
"profile_id": "worker006-single-gpu-sequential-ai-v1",
|
||||
"profile_sha256": "7468138cad115210eda18e7a3350e3423d3d39ac0aae650b3266cdc2bc63fd5d",
|
||||
"schema_version": "missioncore.observatory-portable-resource-profile/v2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"setup_id": "ai-segmentation-eomt-v1",
|
||||
"definition_sha256": "387f42bdf707b0e3e357fec1cfb5aa90a64133ebf0095f9b01d749ca2364d47c",
|
||||
"version": 1,
|
||||
"executor": {
|
||||
"contour_id": "worker-006",
|
||||
"image_sha256": "7a1d425b4678dcade7d7d6ffd14733d639a4df29f45e1759ba4c512e930da8ab",
|
||||
"reason": null,
|
||||
"reason_code": null,
|
||||
"release_id": "ai-modular-installed-package-v1",
|
||||
"release_sha256": "97bfe743689766285b22627c4020d10df7949ef1f4546ef904dccb9ca4c6f721",
|
||||
"state": "ready"
|
||||
},
|
||||
"resource_profile": {
|
||||
"accelerator_id": "nvidia-rtx-4090",
|
||||
"allowed_checkpoints": [],
|
||||
"checkpoint_policy": "non-checkpointable",
|
||||
"concurrency": 1,
|
||||
"contour_id": "worker-006",
|
||||
"profile_id": "worker006-single-gpu-sequential-ai-v1",
|
||||
"profile_sha256": "7468138cad115210eda18e7a3350e3423d3d39ac0aae650b3266cdc2bc63fd5d",
|
||||
"schema_version": "missioncore.observatory-portable-resource-profile/v2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"setup_id": "ai-detection-rf-detr-v1",
|
||||
"definition_sha256": "598ce44f087c392ee95a024c3c45c95bdd02ad8530a3ccbac13422c2ad2f4a94",
|
||||
"version": 1,
|
||||
"executor": {
|
||||
"contour_id": "worker-006",
|
||||
"image_sha256": "7a1d425b4678dcade7d7d6ffd14733d639a4df29f45e1759ba4c512e930da8ab",
|
||||
"reason": null,
|
||||
"reason_code": null,
|
||||
"release_id": "ai-modular-installed-package-v1",
|
||||
"release_sha256": "97bfe743689766285b22627c4020d10df7949ef1f4546ef904dccb9ca4c6f721",
|
||||
"state": "ready"
|
||||
},
|
||||
"resource_profile": {
|
||||
"accelerator_id": "nvidia-rtx-4090",
|
||||
"allowed_checkpoints": [],
|
||||
"checkpoint_policy": "non-checkpointable",
|
||||
"concurrency": 1,
|
||||
"contour_id": "worker-006",
|
||||
"profile_id": "worker006-single-gpu-sequential-ai-v1",
|
||||
"profile_sha256": "7468138cad115210eda18e7a3350e3423d3d39ac0aae650b3266cdc2bc63fd5d",
|
||||
"schema_version": "missioncore.observatory-portable-resource-profile/v2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"setup_id": "ai-range-object-distance-v1",
|
||||
"definition_sha256": "af5e637b78c670930b60cd4527b611aba4af601e6da58aa4dc8326ea6e13c5c2",
|
||||
"version": 1,
|
||||
"executor": {
|
||||
"contour_id": "worker-006",
|
||||
"image_sha256": "7a1d425b4678dcade7d7d6ffd14733d639a4df29f45e1759ba4c512e930da8ab",
|
||||
"reason": null,
|
||||
"reason_code": null,
|
||||
"release_id": "ai-modular-installed-package-v1",
|
||||
"release_sha256": "97bfe743689766285b22627c4020d10df7949ef1f4546ef904dccb9ca4c6f721",
|
||||
"state": "ready"
|
||||
},
|
||||
"resource_profile": {
|
||||
"accelerator_id": "nvidia-rtx-4090",
|
||||
"allowed_checkpoints": [],
|
||||
"checkpoint_policy": "non-checkpointable",
|
||||
"concurrency": 1,
|
||||
"contour_id": "worker-006",
|
||||
"profile_id": "worker006-single-gpu-sequential-ai-object-distance-v1",
|
||||
"profile_sha256": "c244efed459915508044fed4ef0e73c810fbe750e5e379d06723f734bd4385ca",
|
||||
"schema_version": "missioncore.observatory-portable-resource-profile/v2"
|
||||
}
|
||||
}
|
||||
],
|
||||
"composition_runs": {
|
||||
"schema_version": "missioncore.observatory-ai-composition-run-list/v1",
|
||||
"items": [
|
||||
{
|
||||
"schema_version": "missioncore.observatory-ai-composition-run/v1",
|
||||
"run_id": "ai-composition-33389babab33b801e8892f7b991683487eef2deea507486e52569fe943082e4b",
|
||||
"source_session_id": "20260828T130511Z_viewer_live",
|
||||
"composition_sha256": "230396b858b09eea3d1d3a190c5e32d1d5e379da0058d32341026937fbb5cf24",
|
||||
"module_ids": [
|
||||
"tgs",
|
||||
"ddrnet",
|
||||
"rf-detr",
|
||||
"object-distance"
|
||||
],
|
||||
"setup_ids": [
|
||||
"ai-segmentation-ddrnet-v1",
|
||||
"m49-tgs-portable-v2",
|
||||
"ai-range-object-distance-v1"
|
||||
],
|
||||
"job_ids": [
|
||||
"observatory-run-ef3c14a64fca4d5a8674df82a5a0fca2",
|
||||
"observatory-run-b230216709dc4c59bc56c98c7e329bf1",
|
||||
"observatory-run-185e25280d58472ab8b4a0245a35c888"
|
||||
],
|
||||
"created_at_utc": "2026-09-04T06:59:35.000Z",
|
||||
"state": "ready",
|
||||
"configuration_label": "RAVNOVES004TREE · DDRNet-39 · GOOSE · RF-DETR Large · TRAVEL TGS · Дистанция до объектов · K1 LiDAR",
|
||||
"display_name": "DDRNet-39 · GOOSE · RF-DETR Large · TRAVEL TGS · Дистанция до объектов · K1 LiDAR",
|
||||
"presentation": {
|
||||
"schema_version": "missioncore.observatory-presentation-projection/v1",
|
||||
"modules": [
|
||||
{
|
||||
"module_id": "ddrnet",
|
||||
"label": "DDRNet-39 · GOOSE"
|
||||
},
|
||||
{
|
||||
"module_id": "rf-detr",
|
||||
"label": "RF-DETR Large"
|
||||
},
|
||||
{
|
||||
"module_id": "tgs",
|
||||
"label": "TRAVEL TGS"
|
||||
},
|
||||
{
|
||||
"module_id": "object-distance",
|
||||
"label": "Дистанция до объектов · K1 LiDAR"
|
||||
}
|
||||
],
|
||||
"configuration_label": "DDRNet-39 · GOOSE · RF-DETR Large · TRAVEL TGS · Дистанция до объектов · K1 LiDAR",
|
||||
"viewer_layers": [
|
||||
{
|
||||
"layer_id": "camera.source",
|
||||
"pane_id": "camera",
|
||||
"label": "КАМЕРА",
|
||||
"control": "toggle",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"layer_id": "camera.ddrnet",
|
||||
"pane_id": "camera",
|
||||
"label": "DDRNET",
|
||||
"control": "toggle",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"layer_id": "camera.detections",
|
||||
"pane_id": "camera",
|
||||
"label": "РАМКИ",
|
||||
"control": "toggle",
|
||||
"order": 40
|
||||
},
|
||||
{
|
||||
"layer_id": "spatial.source-points",
|
||||
"pane_id": "spatial",
|
||||
"label": "ИСХ. ТОЧКИ",
|
||||
"control": "toggle",
|
||||
"order": 10
|
||||
},
|
||||
{
|
||||
"layer_id": "spatial.local-slam",
|
||||
"pane_id": "spatial",
|
||||
"label": "ЛОК. SLAM",
|
||||
"control": "toggle-with-settings",
|
||||
"order": 20
|
||||
},
|
||||
{
|
||||
"layer_id": "spatial.tgs",
|
||||
"pane_id": "spatial",
|
||||
"label": "TGS",
|
||||
"control": "toggle",
|
||||
"order": 30
|
||||
}
|
||||
]
|
||||
},
|
||||
"jobs": [
|
||||
{
|
||||
"schema_version": "missioncore.observatory-recorded-job/v1",
|
||||
"job_id": "observatory-run-ef3c14a64fca4d5a8674df82a5a0fca2",
|
||||
"idempotency_key": "ai-layer:fba5a33f38ba5beace38e4a4e99b4a468d2d6d760370027a9a6563b3c1279eae",
|
||||
"request_sha256": "16c22588dc443c1296782a4c4034fb895f888fddc8777a6d892b9f94da99b064",
|
||||
"identity_sha256": "47ddde3a49a77e9783a0ffaddff5f3219a0dc0cace1b77dbf71610575d5973b6",
|
||||
"submission_receipt_sha256": "8d7267ed9f652054fc9b42afb5faa341195d3fcbaad7a3f4fcb3979f827d91da",
|
||||
"source": {
|
||||
"session_id": "20260828T130511Z_viewer_live",
|
||||
"catalog_sha256": "2db6b8f109f5cc31bb32733ca633e03becca83d1f140a68ecc9ec9522010c24e",
|
||||
"bundle_sha256": "ee8aa75ff7fbf747ad62161d6e3bc83e291253e6df219a4d1b3a07bc69c79e84",
|
||||
"capability_manifest_sha256": "a4adc08ab0f867fcf7992aacaedd63328c9af222c829238c3f6e58903b95fa5e",
|
||||
"adapter": {
|
||||
"adapter_id": "xgrids-k1-recorded-ai-layer-v1",
|
||||
"version": 1,
|
||||
"adapter_sha256": "2b8e624b2b16b00c9dd75b96e4c56c5438aa6889b0b2fa7a2b2da39d6aa81c6e"
|
||||
}
|
||||
},
|
||||
"setup": {
|
||||
"setup_id": "ai-segmentation-ddrnet-v1",
|
||||
"definition_id": "ai-segmentation-ddrnet",
|
||||
"definition_version": 1,
|
||||
"definition_sha256": "e2f1b59e8680e0ad7e715cf61cac1bfe53b183429f933a65fd3ec22e1e198f16"
|
||||
},
|
||||
"executor": {
|
||||
"release_id": "ai-modular-installed-package-v1",
|
||||
"release_sha256": "ecbb0edc1c4c3708329247a2210ef98dfa776bf948974e778ba6d131ad17a924",
|
||||
"image_sha256": "7a1d425b4678dcade7d7d6ffd14733d639a4df29f45e1759ba4c512e930da8ab",
|
||||
"model_release_ids": [
|
||||
"lab-v1-ddrnet-39-goose-fine-64-v1"
|
||||
],
|
||||
"learned_models": [
|
||||
"lab-v1-ddrnet-39-goose-fine-64-v1"
|
||||
],
|
||||
"model_manifest_sha256": "c9144b30d054e3d495961486a4aed70ae5f60bcadadb4e3309865ced4123739e",
|
||||
"resource_profile_id": "worker006-single-gpu-sequential-ai-v1",
|
||||
"resource_profile_sha256": "7468138cad115210eda18e7a3350e3423d3d39ac0aae650b3266cdc2bc63fd5d"
|
||||
},
|
||||
"checkpoint_policy": {
|
||||
"mode": "non-checkpointable",
|
||||
"allowed_checkpoints": [],
|
||||
"last_checkpoint_id": null
|
||||
},
|
||||
"priority": {
|
||||
"class": "recorded",
|
||||
"rank": 100,
|
||||
"server_owned": true
|
||||
},
|
||||
"state": "succeeded",
|
||||
"preemption_requested": false,
|
||||
"restart_from_zero": false,
|
||||
"preemption_receipt_sha256": null,
|
||||
"claim_generation": 1,
|
||||
"claim_lease": null,
|
||||
"result": {
|
||||
"result_id": "ai-layer-ddrnet-7c6a79942683933390f5ff0ecf2c6da1867d40032e91303746a567198772ce5c",
|
||||
"sha256": "cbc433c51f49c63f45673f53ab5491d1cdbca04f2da7c5c9515c9f47c61cf01e"
|
||||
},
|
||||
"terminal": {
|
||||
"code": "result-sealed",
|
||||
"message": "Recorded result was sealed by the Worker."
|
||||
},
|
||||
"publication": {
|
||||
"state": "published",
|
||||
"attempts": 1,
|
||||
"error": null,
|
||||
"published_at_utc": "2026-09-04T04:26:44.704Z"
|
||||
},
|
||||
"created_at_utc": "2026-09-04T03:57:16.996Z",
|
||||
"updated_at_utc": "2026-09-04T04:26:44.704Z",
|
||||
"authority": {
|
||||
"commands_enabled": false,
|
||||
"actuation_allowed": false,
|
||||
"navigation_or_safety_accepted": false,
|
||||
"production_accepted": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"schema_version": "missioncore.observatory-recorded-job/v1",
|
||||
"job_id": "observatory-run-b230216709dc4c59bc56c98c7e329bf1",
|
||||
"idempotency_key": "observatory-ui:8966e8a8-cfde-4ff1-9361-e6becd9f0a87",
|
||||
"request_sha256": "b18a41134bfc18d007b2d94aed7b71dcfdb51791ae1f1f78bf8665c719a33c59",
|
||||
"identity_sha256": "bbf59ed8c0087b17e14b0f5f5ea903456e17f05bd4c7608744c05671c4e1382b",
|
||||
"submission_receipt_sha256": "72b4d576ec79cf9df64d8a7c1f9c4decd316c52c1f0dcd48438dc3323cc4642b",
|
||||
"source": {
|
||||
"session_id": "20260828T130511Z_viewer_live",
|
||||
"catalog_sha256": "2db6b8f109f5cc31bb32733ca633e03becca83d1f140a68ecc9ec9522010c24e",
|
||||
"bundle_sha256": "2412ee2374590a3b0bca8849a2410188325397b1651b7ae2916c48ead664c417",
|
||||
"capability_manifest_sha256": "c7c23096144bbb28b62edb1a8dad1b916decfac82c781687d22380721cafba96",
|
||||
"adapter": {
|
||||
"adapter_id": "xgrids-k1-recorded-observatory-v2",
|
||||
"version": 2,
|
||||
"adapter_sha256": "4e12be6d2503e2e237eddb290b28d6a7d16cf983855b6d8e6b4e3b65d2feb0de"
|
||||
}
|
||||
},
|
||||
"setup": {
|
||||
"setup_id": "m49-tgs-portable-v2",
|
||||
"definition_id": "m49-tgs-portable",
|
||||
"definition_version": 3,
|
||||
"definition_sha256": "f56d6321bd794ccdfb7d2e3b05d044b11f616ffb81ee29517386cc253046d4eb"
|
||||
},
|
||||
"executor": {
|
||||
"release_id": "m49-tgs-portable-executor-v1",
|
||||
"release_sha256": "c5b0670d943fe0452ef4bbfbc144ab2439a1a674f9ef164798ad9f8b1ecc29fa",
|
||||
"image_sha256": "f9278ab21aa65045be993dd19bffc25f49955e19598893ac78cc4761ca63ecf3",
|
||||
"model_release_ids": [],
|
||||
"learned_models": [],
|
||||
"model_manifest_sha256": "489a43448f720a9b5c7993dc8279d167b77191a586f0d87b6d38b81cf728e2f1",
|
||||
"resource_profile_id": "worker006-cpu-single-run-portable-v2",
|
||||
"resource_profile_sha256": "49e373f1cbf314e7fab2d176db295f3d3d9ddbbcbd724bbde988ef60ad767dee"
|
||||
},
|
||||
"checkpoint_policy": {
|
||||
"mode": "non-checkpointable",
|
||||
"allowed_checkpoints": [],
|
||||
"last_checkpoint_id": null
|
||||
},
|
||||
"priority": {
|
||||
"class": "recorded",
|
||||
"rank": 100,
|
||||
"server_owned": true
|
||||
},
|
||||
"state": "succeeded",
|
||||
"preemption_requested": false,
|
||||
"restart_from_zero": false,
|
||||
"preemption_receipt_sha256": null,
|
||||
"claim_generation": 1,
|
||||
"claim_lease": null,
|
||||
"result": {
|
||||
"result_id": "m49-tgs-portable-review-a09d2b4a07d103e4f3693ba746a51be2197214768774eabfded4f109ae80dce4",
|
||||
"sha256": "52e8afd6aaa38b615008463b873b94feae160946a69ce67aba12efc5f12b1589"
|
||||
},
|
||||
"terminal": {
|
||||
"code": "result-sealed",
|
||||
"message": "Recorded result was sealed by the Worker."
|
||||
},
|
||||
"publication": {
|
||||
"state": "published",
|
||||
"attempts": 1,
|
||||
"error": null,
|
||||
"published_at_utc": "2026-09-03T08:31:39.776Z"
|
||||
},
|
||||
"created_at_utc": "2026-09-03T08:08:03.013Z",
|
||||
"updated_at_utc": "2026-09-03T08:31:39.776Z",
|
||||
"authority": {
|
||||
"commands_enabled": false,
|
||||
"actuation_allowed": false,
|
||||
"navigation_or_safety_accepted": false,
|
||||
"production_accepted": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"schema_version": "missioncore.observatory-recorded-job/v1",
|
||||
"job_id": "observatory-run-185e25280d58472ab8b4a0245a35c888",
|
||||
"idempotency_key": "ai-layer:502ec972ec9e6d190720d1e820e6b204066ed31c560baf571797e6aed74b154b",
|
||||
"request_sha256": "bf3cd7b4dd0738f1a52341ccd4b9cc39db542e83c2c7ce1dda31a80c4932bc8d",
|
||||
"identity_sha256": "568a9d42642aee9ce798c5e2f8920651d1fd9b383293345a2a7ab322685900f2",
|
||||
"submission_receipt_sha256": "e568e257e941e63a3e84b95311fa15e33dcf31defacacaa55b5a617c6a8731a7",
|
||||
"source": {
|
||||
"session_id": "20260828T130511Z_viewer_live",
|
||||
"catalog_sha256": "2db6b8f109f5cc31bb32733ca633e03becca83d1f140a68ecc9ec9522010c24e",
|
||||
"bundle_sha256": "2412ee2374590a3b0bca8849a2410188325397b1651b7ae2916c48ead664c417",
|
||||
"capability_manifest_sha256": "c7c23096144bbb28b62edb1a8dad1b916decfac82c781687d22380721cafba96",
|
||||
"adapter": {
|
||||
"adapter_id": "xgrids-k1-recorded-observatory-v2",
|
||||
"version": 2,
|
||||
"adapter_sha256": "4e12be6d2503e2e237eddb290b28d6a7d16cf983855b6d8e6b4e3b65d2feb0de"
|
||||
}
|
||||
},
|
||||
"setup": {
|
||||
"setup_id": "ai-range-object-distance-v1",
|
||||
"definition_id": "ai-range-object-distance",
|
||||
"definition_version": 1,
|
||||
"definition_sha256": "af5e637b78c670930b60cd4527b611aba4af601e6da58aa4dc8326ea6e13c5c2"
|
||||
},
|
||||
"executor": {
|
||||
"release_id": "ai-modular-installed-package-v1",
|
||||
"release_sha256": "97bfe743689766285b22627c4020d10df7949ef1f4546ef904dccb9ca4c6f721",
|
||||
"image_sha256": "7a1d425b4678dcade7d7d6ffd14733d639a4df29f45e1759ba4c512e930da8ab",
|
||||
"model_release_ids": [
|
||||
"rf-detr-large-native-kb4-v1"
|
||||
],
|
||||
"learned_models": [
|
||||
"rf-detr-large-native-kb4-v1"
|
||||
],
|
||||
"model_manifest_sha256": "edef8446597b801f67538e9e1f056cbb55e56bf61ca4127efd97ce98e7473788",
|
||||
"resource_profile_id": "worker006-single-gpu-sequential-ai-object-distance-v1",
|
||||
"resource_profile_sha256": "c244efed459915508044fed4ef0e73c810fbe750e5e379d06723f734bd4385ca"
|
||||
},
|
||||
"checkpoint_policy": {
|
||||
"mode": "non-checkpointable",
|
||||
"allowed_checkpoints": [],
|
||||
"last_checkpoint_id": null
|
||||
},
|
||||
"priority": {
|
||||
"class": "recorded",
|
||||
"rank": 100,
|
||||
"server_owned": true
|
||||
},
|
||||
"state": "succeeded",
|
||||
"preemption_requested": false,
|
||||
"restart_from_zero": false,
|
||||
"preemption_receipt_sha256": null,
|
||||
"claim_generation": 1,
|
||||
"claim_lease": null,
|
||||
"result": {
|
||||
"result_id": "ai-layer-object-distance-05f3931621585c9ac32132bef8c7afa961cea317cc29def09a8312339f8421e4",
|
||||
"sha256": "05e9431dd5cfb7e55b8d59644cdadccf67588974975455e376d37f880f4652f6"
|
||||
},
|
||||
"terminal": {
|
||||
"code": "result-sealed",
|
||||
"message": "Recorded result was sealed by the Worker."
|
||||
},
|
||||
"publication": {
|
||||
"state": "published",
|
||||
"attempts": 1,
|
||||
"error": null,
|
||||
"published_at_utc": "2026-09-04T07:00:02.263Z"
|
||||
},
|
||||
"created_at_utc": "2026-09-04T06:29:36.181Z",
|
||||
"updated_at_utc": "2026-09-04T07:00:02.263Z",
|
||||
"authority": {
|
||||
"commands_enabled": false,
|
||||
"actuation_allowed": false,
|
||||
"navigation_or_safety_accepted": false,
|
||||
"production_accepted": false
|
||||
}
|
||||
}
|
||||
],
|
||||
"result_ids": [
|
||||
"ai-layer-ddrnet-7c6a79942683933390f5ff0ecf2c6da1867d40032e91303746a567198772ce5c",
|
||||
"m49-tgs-portable-review-a09d2b4a07d103e4f3693ba746a51be2197214768774eabfded4f109ae80dce4",
|
||||
"ai-layer-object-distance-05f3931621585c9ac32132bef8c7afa961cea317cc29def09a8312339f8421e4"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"recorded_jobs": {
|
||||
"ai-segmentation-ddrnet-v1": [
|
||||
{
|
||||
"job_id": "observatory-run-ef3c14a64fca4d5a8674df82a5a0fca2",
|
||||
"state": "succeeded",
|
||||
"publication": {
|
||||
"state": "published",
|
||||
"attempts": 1,
|
||||
"error": null,
|
||||
"published_at_utc": "2026-09-04T04:26:44.704Z"
|
||||
}
|
||||
},
|
||||
{
|
||||
"job_id": "observatory-run-884ad2f787244abdb12373a8f6f2d2e0",
|
||||
"state": "failed",
|
||||
"publication": {
|
||||
"state": "not-required",
|
||||
"attempts": 0,
|
||||
"error": null,
|
||||
"published_at_utc": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"job_id": "observatory-run-db32fced93ad46b6a3f7d2ff7421a557",
|
||||
"state": "failed",
|
||||
"publication": {
|
||||
"state": "not-required",
|
||||
"attempts": 0,
|
||||
"error": null,
|
||||
"published_at_utc": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"job_id": "observatory-run-77f8470a8593454ab777bcacf2d47b9f",
|
||||
"state": "failed",
|
||||
"publication": {
|
||||
"state": "not-required",
|
||||
"attempts": 0,
|
||||
"error": null,
|
||||
"published_at_utc": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"job_id": "observatory-run-24de2abb929a42738e4cfef6c4e86b95",
|
||||
"state": "failed",
|
||||
"publication": {
|
||||
"state": "not-required",
|
||||
"attempts": 0,
|
||||
"error": null,
|
||||
"published_at_utc": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"job_id": "observatory-run-cc9c9c5cd18844f0ab25fb20524e5073",
|
||||
"state": "failed",
|
||||
"publication": {
|
||||
"state": "not-required",
|
||||
"attempts": 0,
|
||||
"error": null,
|
||||
"published_at_utc": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"job_id": "observatory-run-1079d7c81ea0499e86738abfc1c35f49",
|
||||
"state": "failed",
|
||||
"publication": {
|
||||
"state": "not-required",
|
||||
"attempts": 0,
|
||||
"error": null,
|
||||
"published_at_utc": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"ai-segmentation-eomt-v1": [],
|
||||
"ai-detection-rf-detr-v1": [],
|
||||
"ai-range-object-distance-v1": [
|
||||
{
|
||||
"job_id": "observatory-run-185e25280d58472ab8b4a0245a35c888",
|
||||
"state": "succeeded",
|
||||
"publication": {
|
||||
"state": "published",
|
||||
"attempts": 1,
|
||||
"error": null,
|
||||
"published_at_utc": "2026-09-04T07:00:02.263Z"
|
||||
}
|
||||
},
|
||||
{
|
||||
"job_id": "observatory-run-cef3ba45c2024c55b6fb461e653d7187",
|
||||
"state": "failed",
|
||||
"publication": {
|
||||
"state": "not-required",
|
||||
"attempts": 0,
|
||||
"error": null,
|
||||
"published_at_utc": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"job_id": "observatory-run-5ab19401156d4d05b770ba57384387f0",
|
||||
"state": "failed",
|
||||
"publication": {
|
||||
"state": "not-required",
|
||||
"attempts": 0,
|
||||
"error": null,
|
||||
"published_at_utc": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"job_id": "observatory-run-f1a3cd0475964d62867cf17f135efbaa",
|
||||
"state": "failed",
|
||||
"publication": {
|
||||
"state": "not-required",
|
||||
"attempts": 0,
|
||||
"error": null,
|
||||
"published_at_utc": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"job_id": "observatory-run-96c0b491ae604772af19bca478837599",
|
||||
"state": "failed",
|
||||
"publication": {
|
||||
"state": "not-required",
|
||||
"attempts": 0,
|
||||
"error": null,
|
||||
"published_at_utc": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"job_id": "observatory-run-ee9d0b283b68470c91db5199a0374146",
|
||||
"state": "failed",
|
||||
"publication": {
|
||||
"state": "not-required",
|
||||
"attempts": 0,
|
||||
"error": null,
|
||||
"published_at_utc": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"job_id": "observatory-run-500a5a3b31e34061b52e1c09ff4f9604",
|
||||
"state": "failed",
|
||||
"publication": {
|
||||
"state": "not-required",
|
||||
"attempts": 0,
|
||||
"error": null,
|
||||
"published_at_utc": null
|
||||
}
|
||||
}
|
||||
],
|
||||
"m49-tgs-portable-v2": [
|
||||
{
|
||||
"job_id": "observatory-run-b230216709dc4c59bc56c98c7e329bf1",
|
||||
"state": "succeeded",
|
||||
"publication": {
|
||||
"state": "published",
|
||||
"attempts": 1,
|
||||
"error": null,
|
||||
"published_at_utc": "2026-09-03T08:31:39.776Z"
|
||||
}
|
||||
},
|
||||
{
|
||||
"job_id": "observatory-run-d9e1089a503d46988847ad9f86cbf7d9",
|
||||
"state": "succeeded",
|
||||
"publication": {
|
||||
"state": "not-required",
|
||||
"attempts": 0,
|
||||
"error": null,
|
||||
"published_at_utc": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"job_id": "observatory-run-e8645450dbe74f08b5944f35d3ee5c9f",
|
||||
"state": "failed",
|
||||
"publication": {
|
||||
"state": "not-required",
|
||||
"attempts": 0,
|
||||
"error": null,
|
||||
"published_at_utc": null
|
||||
}
|
||||
},
|
||||
{
|
||||
"job_id": "observatory-run-a627da1692cb4a2a9106d3e7e2870a90",
|
||||
"state": "failed",
|
||||
"publication": {
|
||||
"state": "not-required",
|
||||
"attempts": 0,
|
||||
"error": null,
|
||||
"published_at_utc": null
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"desktop_documents": {
|
||||
"archived_at": "2026-09-05",
|
||||
"role": "historical_desktop_reports_not_current_instructions",
|
||||
"files": [
|
||||
{
|
||||
"filename": "_MISSING_CORE_MODULAR_AUDIT_AND_PLAN_2026-09-03.md",
|
||||
"sha256": "d6c201d083fbec4b1db031379b515ff821a09ccfa0cea62443e211a9d76cb1c2",
|
||||
"bytes": 53637
|
||||
},
|
||||
{
|
||||
"filename": "_MISSING_CORE_OBSERVATORY_DOCKER_LABS_FINAL_STATUS_2026-09-01.md",
|
||||
"sha256": "45e870700baddab8f31a2f0f0bfe1f9e99e8e73a490195c1e6a3beb5265e49ee",
|
||||
"bytes": 330260
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user