docs(observatory): prioritize recorded laboratories and cached review before onboard profiles

This commit is contained in:
DCCONSTRUCTIONS
2026-09-02 23:16:01 +03:00
parent 35c1249631
commit 049ed3eed4
3 changed files with 187 additions and 1 deletions
+108 -1
View File
@@ -1,4 +1,111 @@
# Observatory: четыре этапа создания полного real-time Perception-профиля
# Observatory: четыре этапа — записанные лаборатории → переносимые профили → борт
## Актуальное решение владельца — 2026-09-02
**Этот раздел заменяет прежний порядок и GO-зависимости плана ниже.** Сначала
доводим лабораторный продукт на записях, затем экспериментируем с составом
Docker-профилей, затем переносим выбранный профиль на подходящий бортовой
компьютер. Сетевые 125 ms, Ethernet, LTE и наличие беспилотника больше не
являются условиями готовности Observatory. Старый этап 1 и инкременты 1–18
сохраняются как выполненная инженерная работа; отрицательные realtime-замеры
не переименовываются в PASS.
Основной путь: **запись → совместимый ещё не рассчитанный профиль → Рассчитать
→ фактический прогресс → проверенная публикация → сохранённый просмотр**.
Просмотр, Refresh и выбор записи не запускают модели. Готовые результаты всех
версий остаются в «Лабораторных доказательствах». Если рассчитаны все текущие
совместимые профили, выбор пуст/недоступен, кнопки «Рассчитать» нет, «Обновить»
остаётся. Старое имя LAB не доказывает совпадение версии конфигурации.
### Этап 1 — Идентичность расчёта и переиспользование результата (в работе)
Первый инкремент: portable submit защищён атомарной проверкой существующей
job identity. Другой ключ запроса не создаёт дубликат active/reconciliation
или pending/failed-publication job; точный retry идемпотентен, failed compute
можно повторить. 88 focused backend/queue/Worker-API/publication tests PASS;
Ruff lint и mypy трёх изменённых source files PASS. Полный frontend/GPU-прогон
не выполнялся: UI и модели не изменены. Cache projection/селектор/прогресс ещё
не реализованы, этап не закрыт. Решение: [ADR 0050](adr/0050-recorded-observatory-first.md).
Runtime check 23:15 МСК: canonical8000 перезапущен на новом коде, PID55765,
health/portable catalog HTTP200,8765 отсутствует. Модельных заданий не создано;
durable queue содержит10 failed и1 succeeded/not-required, live leases0.
Обнаружен существовавший ДО перезапуска blocker:50000 claim receipts при
лимите50000, из них49985 пустых,15 с job. Последний receipt2026-09-01T17:28:39.238Z;
новые Worker polls продолжают получать503. Каталог всё ещё рекламирует ready,
что не доказывает работоспособность claim-пути. Следующий инкремент этапа1:
исправить bounded empty-poll lifecycle и readiness без удаления audit history
и нарушения идемпотентности старых claim IDs; затем verified-cache projection.
Не повышать бесконечно лимит и не чистить receipts вслепую.
- Сверить каталог, очередь, публикацию и просмотр для текущих M4.9T5 и LAB V1.
- Связать готовность с точной исходной записью и immutable RunDefinition,
включающей image/model/config/adapter/result-contract identities.
- Подавлять повторную постановку активного идентичного расчёта на backend;
опубликованный кэш признавать только при проверенной привязке и доступных
артефактах. Failed/partial/unpublished не считать готовым результатом.
- Отделить архивные результаты от исполняемых профилей и не прятать новую
версию профиля из-за старого результата с похожим названием.
Выход: контрактные тесты для другой записи/версии, повторного клика, гонки,
ошибки публикации и отсутствующих артефактов; актуальные документы. Это ещё
не полный пользовательский acceptance.
### Этап 2 — Полный пользовательский цикл записанной лаборатории
- Единый селектор только совместимых нерассчитанных профилей; все доступные
результаты ниже, без скрытого ограничения первыми шестью карточками.
- Очередь, реальные счётчики/этапы прогресса, ошибки, повтор публикации без
inference, автоматическое обновление после публикации.
- Полный расчёт с сохранением результатов и исходной временной шкалы;
скорость расчёта может быть ниже скорости записи. Ограниченные очереди и
backpressure вместо накопления всей записи в RAM. Разделить режим полноты
записанного анализа и строгий realtime-rehearsal: не отключать freshness
и drop-политику live глобально и не терять кадры ради wall-clock темпа
в режиме полного анализа.
- Последовательно проверить текущие два профиля на совместимых записях:
публикация, перезапуск приложения, повторный просмотр без модели/GPU,
отсутствие дубликатов. Не объявлять LAB V1 полным detector/distance/TGS
профилем: сейчас это последовательные EoMT и DDRNet; M4.9T5 — CPU TGS.
Выход: настоящий путь через canonical8000 и Worker, полный сохранённый
результат и воспроизводимый просмотр. До такого proof этап открыт.
### Этап 3 — Эксперименты с переносимыми Docker-конфигурациями
- Переиспользовать наработанный streaming runtime и общий контроль исполнения.
В первую очередь новый DDRNet + RF-DETR + LiDAR/distance + motion +
TGS/costmap + policy-shadow, без зависимости от чужих архивных overlays.
- Один Worker006/4090 — один активный профиль. EoMT сохраняется; альтернативы
не выполняются параллельно. Понятные profile/image имена с `ndc-` и digest.
- Измерять отдельно подготовку, прогрев, Worker compute/full-graph latency,
доставку, публикацию и wall time всего задания. Перегрузка — результат
эксперимента, а не повод запретить лабораторный расчёт.
- Условный прогноз onboard FPS относится только к измеренным железу, образу,
настройкам и составу; не выводится из viewer FPS или времени скачивания.
Выход: сравнимые результаты конфигураций на нескольких записях, известные
ошибки, воспроизводимые образы; не обязательный remote realtime PASS.
### Этап 4 — Отбор профиля и проверка переноса на борт
- Выбрать удачный immutable образ/config по лабораторной матрице качества и
производительности; исключить checkout и скрытые model caches из зависимостей.
- Проверить тот же образ и входной контракт на фактическом бортовом компьютере
после его появления. Другая архитектура CPU/GPU может потребовать отдельной
сборки и новой квалификации; Docker не обещает NVIDIA→Apple Silicon перенос
без изменений.
- Physical-live, контроллеры/моторы, аварийная остановка и автономная навигация
имеют отдельную приёмку. Пока только observation-only/policy-shadow.
Выход сейчас: пакет кандидата, матрица evidence и явные ограничения; реальный
перенос остаётся pending до появления оборудования, не блокируя этапы 1–3.
## История прежнего realtime-first плана (не текущие команды и зависимости)
Ниже сохранены прежние измерения, этапы и решения. Все слова «следующий»,
«GO», «не открыты» и старые номера этапов в этой истории относятся к состоянию
до решения выше. Приоритет имеют четыре актуальных этапа выше.
Дата: 2026-09-01; обновлено 2026-09-02 22:35 МСК. **Этап1 закрыт; этап2 продолжается. Инкремент18: существенный транспортный хвост локализован ниже Perception-приложения; full-profile latency не пересчитывалась.** Код `6af4c20`: bounded TLS-record witnesses в CPU-only diagnostic. A/B/A без/с/без свидетелей сохраняет RPC p95 96.093/93.895/95.145ms.424/424 encrypted records и192/192 RPC сопоставлены;288 raw clock exchanges пересчитаны. Из13 post-start tails >50ms восемь приходятся на request transit, пять на response transit; начальный TLS/startup sample не получает выдуманного clock mapping.