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. Дата: 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.
@@ -1,5 +1,10 @@
# ADR 0049 — Stream-first full perception profiles # ADR 0049 — Stream-first full perception profiles
> Product scope/order partially superseded on 2026-09-02 by
> [ADR 0050](0050-recorded-observatory-first.md): recorded calculation and cached
> review come first. Live-stream contracts and historical measurements below
> remain intact; remote realtime is no longer the Observatory release gate.
Date: 2026-09-01; updated 2026-09-02 19:42 MSK. Status: stage-1 engineering Date: 2026-09-01; updated 2026-09-02 19:42 MSK. Status: stage-1 engineering
baseline complete; stage-2 has full graph container-network proof plus authenticated baseline complete; stage-2 has full graph container-network proof plus authenticated
cross-host grant delivery and bounded clock intervals. Continuous clock readiness is cross-host grant delivery and bounded clock intervals. Continuous clock readiness is
@@ -0,0 +1,74 @@
# ADR 0050 — Recorded Observatory first; portable profiles then onboard
Date: 2026-09-02. Decision accepted by the owner; implementation in progress.
This supersedes ADR 0049's realtime-first product gate and execution order,
not its live-stream integrity, ownership or safety contracts.
## Decision
The primary operator workflow is a complete calculation of a compatible K1
recording with a selected immutable profile, followed by publication and cached
review. Processing may be slower than acquisition. Network latency is evidence,
not a prerequisite for using the laboratory. After this workflow works, compare
Docker configurations; later qualify the selected configuration on actual
onboard hardware. No vehicle or remote-realtime acceptance is claimed now.
Keep the existing source admission, queue, artifact store, publication recovery,
streaming runtime and common viewer. Do not introduce another per-LAB application.
One Worker executes one active profile; alternative profiles remain sequential.
M4.9T5 currently supplies CPU TGS; LAB V1 supplies sequential EoMT/DDRNet, not the
complete future detector/distance/motion/TGS/policy profile.
## Recorded analysis versus realtime rehearsal
Recorded analysis preserves source timestamps and causal ordering, uses bounded
backpressure, and accounts for every required scheduled input/result. Its elapsed
wall time need not match the source clock. Source sensor gaps remain unknown.
Do not disguise live drop/resync as a complete recorded result. Introducing this
execution mode requires an explicit versioned contract, not silently weakening
the existing 1× live freshness, deadline or ownership gates.
Realtime rehearsal remains an independent qualification. Historical network
canaries retain their original FAIL results and thresholds. Neither cached video
playback FPS nor end-to-end upload/export time is a Worker compute benchmark.
Measure preparation, warmup, processing, delivery and publication separately;
onboard estimates are conditional on matching hardware and effective config.
## Result identity and UI
Only compatible, not-yet-calculated current profile versions belong in the
calculation selector. Published results of every version remain below as evidence.
All calculated means no Calculate action, an empty/disabled selector, and Refresh.
Refresh, source selection and cached review must never start inference.
Reuse requires the exact admitted source fingerprint and immutable definition
(including model, image, configuration, adapter and result-contract identities).
An old LAB name, a legacy overlay, or compute success without publication is not
a matching cache. Missing/corrupt artifacts must not suppress a valid retry.
Publication failure retries publication, not computation, while the sealed package
is recoverable. Changed profile versions become new calculations.
## First implementation increment
Portable queue admission now opts into an atomic duplicate-computation guard.
It uses the existing job identity, not a second cache key ontology, and rejects a
different request while the identical job is active, requires reconciliation, or
has a sealed result pending/failed publication. The check and INSERT use one SQLite
transaction. Exact retries retain the original idempotency semantics. A genuinely
failed compute can be retried with a new request key. Legacy queue callers retain
their existing policy; no schema migration or Worker/image change is introduced.
Published-cache verification, catalog projection, selector changes, progress and
complete recorded-analysis execution are still pending. This increment does not
mark stage 1 or the full workflow complete. Tests cover concurrent admission,
durability, changed source/profile, failure retry and HTTP 409 duplicate handling.
## Boundaries
No Synology deployment, hardware actuation, motor integration, new capture,
silent model substitutions or deletion of recordings/results. A Docker image's
portability does not promise that a CUDA build runs unchanged on Apple Silicon.
Physical-live and onboard/vehicle acceptance require the actual target hardware.
The only maintained execution plan is
[the four-stage ExecPlan](../OBSERVATORY_REALTIME_PROFILES_EXECPLAN.md).