docs(observatory): record real M49 publication and restart acceptance
This commit is contained in:
@@ -2,9 +2,10 @@
|
||||
|
||||
## Актуальный маршрут — 2026-09-03
|
||||
|
||||
Сверено с кодом `e436fb5`, evidence до `44afadb` и последними решениями владельца.
|
||||
Эта актуализация меняет только документы: новые расчёты, сборки, измерения Worker
|
||||
и изменения сервисов не выполнялись. Разделы до журнала инкрементов — текущий
|
||||
Сверено с кодом `bee8552`, установкой `54c8d82`, исправлением reindex `bd947b4`
|
||||
и последними решениями владельца. M4.9T5 ×004TREE рассчитан через UI, опубликован
|
||||
и повторно открыт как документ из кэша после перезапуска. Визуальный replay ещё
|
||||
не реализован для этого portable-результата. Разделы до журнала инкрементов — текущий
|
||||
маршрут; исторические «следующий шаг» и «этап открыт/закрыт» ниже не команды.
|
||||
|
||||
### Цель и результат
|
||||
@@ -26,20 +27,31 @@ PASS через Wi-Fi/LTE не является условием готовно
|
||||
выбор только совместимых нерассчитанных portable profiles и общие viewer contracts.
|
||||
- **UI:** готовность видна только по результату внизу. Все текущие профили
|
||||
рассчитаны → выбор пуст, «Рассчитать» нет, «Обновить» остаётся. Плашек завершения
|
||||
нет; во время работы пока только индикатор ожидания. Лимит первых 6 карточек снят,
|
||||
нет; во время работы общий индикатор показывает настоящую фазу и доступные счётчики.
|
||||
Внутри первичного decode/передачи архива детальные счётчики ещё отсутствуют.
|
||||
Лимит первых 6 карточек снят,
|
||||
но пагинация сотен записей ещё не доказана.
|
||||
- **Последняя приёмка, не новый замер:** 720 frontend tests, 52 focused queue/API
|
||||
tests, typecheck/build и browser QA PASS. В очереди тогда 11 jobs: 10 failed и
|
||||
1 succeeded/not-required; точного нового published cache hit не было.
|
||||
Положительные all-cached/reuse сценарии пока доказаны synthetic tests.
|
||||
- **Последняя приёмка:** 726 frontend tests, 128 focused progress/queue/API/
|
||||
transport tests, отдельно40 runtime/wiring и3 installer tests, typecheck/build,
|
||||
Ruff/mypy и browser QA. Для найденного при рестарте cache-дефекта — ещё89
|
||||
session/publication и72 admission/cache/queue/API tests. Эти проходы пересекаются,
|
||||
их суммы не являются числом уникальных тестов.
|
||||
В очереди12 jobs: прежние10 failed,1 succeeded/not-required и1 новый published.
|
||||
Все11 прежних jobs сохранены. Новый exact cache/document повторно открыт
|
||||
после исправления no-op reindex и перезапуска; видео/TGS-view ещё не принят.
|
||||
- **Реальный M49-результат:** 6830 camera-fragment anchors, 6811 доступных LiDAR
|
||||
и19 UNOBSERVED; учёт149733073 rolling-point contributions сходится,0 unaccounted.
|
||||
Расписание39.215–757.160s не покрывает все808.779s исходной сессии. Полный цикл
|
||||
23:36.763; TGS p95 2.6075ms и runner-stage p95 29.99172ms — только эти стадии,
|
||||
не full-profile/onboard FPS и не качество сегментации.
|
||||
- **Текущие составы:** M4.9T5 — CPU TGS; LAB V1 — последовательные EoMT и DDRNet.
|
||||
Ни один не равен полному будущему AI-профилю рига. Архивные overlays в одном
|
||||
viewer не доказывают, что один Docker вычислил все слои.
|
||||
- **Есть инженерный прототип полного графа:** DDRNet/RF-DETR/geometry/distance/
|
||||
motion/TGS/costmap/policy-shadow и короткие потоковые proofs. Не пишем заново.
|
||||
Самостоятельный продуктовый образ и полный recorded-run этого состава не приняты.
|
||||
- **Не закрыто:** реальные счётчики прогресса, полный recorded-analysis текущими
|
||||
профилями, publish→cache→view после перезапуска на реальных данных, полный поиск/
|
||||
- **Не закрыто:** полный recorded-analysis текущими
|
||||
профилями, синхронный сохранённый visual replay, матрица двух профилей/записей, полный поиск/
|
||||
пагинация каталога, standalone и фактический перенос на борт.
|
||||
|
||||
Источники: [ADR 0050](adr/0050-recorded-observatory-first.md),
|
||||
@@ -48,6 +60,8 @@ PASS через Wi-Fi/LTE не является условием готовно
|
||||
Desktop final-status — операторская сводка и история; подробный маршрут ведётся
|
||||
только здесь. Из CODEX_V5 взяты разделение CURRENT/TARGET, критерии готовности и
|
||||
сохранение выполненной работы, не неподтверждённые сведения о runtime.
|
||||
Текущее исполнение и точные declarations:
|
||||
[progress / первый запуск](../experiments/perception/OBSERVATORY_RECORDED_PROGRESS_2026-09-03.md).
|
||||
|
||||
## Границы исполнения
|
||||
|
||||
@@ -90,6 +104,11 @@ normal/expanded UI; последний код `e436fb5` и отчёты выше
|
||||
наработанным runtime. Явно оформить версионированный `recorded-analysis` отдельно
|
||||
от `realtime-rehearsal`; сначала малые контрактные fixtures, не долгий GPU-run.
|
||||
|
||||
**Частично выполнено:** bounded attempt-scoped progress реализован и активирован.
|
||||
Новый M49-run использовал прежний профиль и полностью выполнил его расписание.
|
||||
Это не закрывает 2A: целиковый input barrier и `_capture_arrays()` до replay-cache
|
||||
lookup ещё сохранены. Progress observation не является новым режимом исполнения.
|
||||
|
||||
- Сохранить source timestamps и causal ordering. Медленный Worker притормаживает
|
||||
подачу, а не выбрасывает обязательные кадры ради 1×. Учитывается каждый вход/
|
||||
выход по расписанию профиля; stride, sensor gaps и overload drops различаются.
|
||||
@@ -110,6 +129,18 @@ normal/expanded UI; последний код `e436fb5` и отчёты выше
|
||||
timeline. Это приёмка CPU TGS, не полного detector/segmentation профиля.
|
||||
Историческая M4.9 projection без review binding не заменяет этот proof.
|
||||
|
||||
**Доказано на новом run:** compute → seal → publication с первой попытки,
|
||||
точный cache hit, исчезновение M49 из выбора и открытие документа после рестарта.
|
||||
Найден и исправлен no-op reindex: служебная переиндексация больше не меняет
|
||||
source identity; реальное изменение по-прежнему требует нового расчёта.
|
||||
**Осталось в2B:** portable review сейчас JSON, не проигрыватель. Подключить
|
||||
typed result/frame reader и общий `CanonicalRecordedLabReplay`, ленивое чтение
|
||||
сохранённых TGS/costmap и точную камеру/временную привязку. Проверить coverage,
|
||||
seek/play/pause, normal/expanded/restore/Escape и повторное открытие без job.
|
||||
Сначала использовать уже sealed пакет; не считать заново и не подмешивать
|
||||
архивные E47/M49 semantics. Название «полный маршрут и воспроизведение» само
|
||||
по себе не доказывает доступность replay или полноту всей исходной сессии.
|
||||
|
||||
**2C. LAB V1 и другая запись.** Выполнить LAB V1 × 004TREE, затем оба профиля
|
||||
× RAVNOVES00, строго последовательно. Медленная EoMT не возвращает нас к гонке
|
||||
за сетевым FPS. Не менять незаметно состав, cadence или разрешение ради PASS.
|
||||
@@ -132,7 +163,7 @@ RAVNOVES01 — отрицательный случай до подтверждё
|
||||
**Приёмка:** матрица 2 профиля × 2 совместимые записи, полные обязательные выходы,
|
||||
честный прогресс, published package, сохранённый просмотр без compute после
|
||||
перезапуска, проверенные recovery/negative cases и сохранность истории.
|
||||
Успешный первый M4.9 run закрывает 2B, не автоматически весь этап 2.
|
||||
Первый M4.9 run **с принятым визуальным replay** закрывает 2B, не весь этап 2.
|
||||
Зависимости: основа 1, текущие записи и Worker; не новый полный профиль или борт.
|
||||
|
||||
## Этап 3 — Самостоятельные Docker-профили и лабораторные эксперименты
|
||||
@@ -165,6 +196,9 @@ RAVNOVES01 — отрицательный случай до подтверждё
|
||||
|
||||
## Этап 4 — Отбор кандидата и перенос на фактический борт
|
||||
|
||||
По уточнению владельца 2026-09-03 это будущий пункт: сейчас никакой перенос на
|
||||
борт, изменение onboard runtime или подключение контроллеров не выполняется.
|
||||
|
||||
**Цель:** выбранная конфигурация воспроизводится на целевом компьютере, её
|
||||
границы известны до подключения автономного управления.
|
||||
|
||||
@@ -183,15 +217,23 @@ watchdog, stop/slow при пропаже данных, моторы и авто
|
||||
|
||||
- [x] 2026-09-03 — этап 1: queue/cache/identity/selector реализованы и локально проверены.
|
||||
- [x] 2026-09-03 — история сохранена, completed-status UI удалён.
|
||||
- [ ] Этап 2A — полный recorded-analysis и счётчики; сейчас только activity indicator.
|
||||
- [ ] Этап 2B–2D — новый M4.9 full run, затем LAB V1/вторая запись, cache/recovery/каталог.
|
||||
- [x] Этап 2A, часть progress — реальные bounded Worker → backend → UI snapshots.
|
||||
- [ ] Этап 2A, остаток — versioned recorded-analysis и устранение полного input barrier.
|
||||
- [x] Этап 2B, compute/publish/cache — M4.9 ×004TREE завершён; документ повторно открыт после рестарта.
|
||||
- [x] Найденный reindex-дефект exact cache исправлен; исходная связь восстановлена по точному SHA proof.
|
||||
- [ ] Этап 2B, visual — синхронное воспроизведение сохранённых camera/TGS, coverage и viewer acceptance.
|
||||
- [ ] Этап 2C–2D — LAB V1/вторая запись, cache/recovery/каталог.
|
||||
- [ ] Этап 3 — самостоятельный полный профиль и сравнение конфигураций.
|
||||
- [ ] Этап 4 — кандидат, затем фактическая бортовая квалификация.
|
||||
- [x] 2026-09-03 — план актуализирован; в этом ходе следующие пункты не исполнялись.
|
||||
- [x] 2026-09-03 — план и Desktop-сводка синхронизируются с фактическим исполнением.
|
||||
|
||||
**Непосредственно следующий инкремент — 2A:** сверить пути executor/progress,
|
||||
оформить минимальный режим полного анализа и настоящие счётчики, проверить на
|
||||
малых fixtures. Затем 2B — M4.9T5 × 004TREE до сохранённого просмотра.
|
||||
**Следующий крупный инкремент — остаток2B:** общий сохранённый camera/TGS-viewer
|
||||
для уже опубликованного результата job
|
||||
`observatory-run-b230216709dc4c59bc56c98c7e329bf1`, без нового compute.
|
||||
Result ID и пакет — в связанном progress evidence. Проверять реальную визуальную
|
||||
синхронизацию/coverage, не только JSON/наличие файлов.
|
||||
Отдельно закрыть остаток2A версионированным incremental input;
|
||||
не объявлять прежний whole-recording materializer потоковым.
|
||||
Не начинать снова с claim/v3, memory repair, селектора или сетевого canary.
|
||||
|
||||
## Карта продолжения, проверка и восстановление
|
||||
|
||||
@@ -52,8 +52,11 @@ is recoverable. Changed profile versions become new calculations.
|
||||
|
||||
The checkpoints below are chronological evidence, not a current TODO list.
|
||||
As of 2026-09-03, the queue/claim/cache/selector foundation is implemented and
|
||||
locally checked. Full recorded-analysis, measured progress and end-to-end
|
||||
published review on real recordings remain unaccepted; the current four-stage
|
||||
locally checked. Attempt-bound progress is implemented and active (`bee8552`,
|
||||
control-agent installation `54c8d82`). One real M49 run succeeded and published;
|
||||
exact cached document reopening survives restart after the no-op reindex fix
|
||||
`bd947b4`. Full recorded-analysis and synchronized saved visual replay remain
|
||||
unaccepted; the current four-stage
|
||||
route and next increment are maintained only in the linked ExecPlan.
|
||||
|
||||
## First implementation increment
|
||||
@@ -151,6 +154,32 @@ Historical terminal logs do not become a new selection's error. The existing
|
||||
responsive selector layout follows workspace width, including restored narrow
|
||||
windows, rather than only the browser viewport.
|
||||
|
||||
## Real progress, publication and restart proof — 2026-09-03
|
||||
|
||||
Worker-to-backend-to-UI progress is claim/generation/sequence-bound and stored as
|
||||
one bounded current row per job. It does not renew ownership or change live
|
||||
semantics. One UI-submitted M49 × RAVNOVES004TREE run published on its first
|
||||
attempt after 1416.763 s. All 6830 fragment-schedule rows and result artifacts
|
||||
were verified; 19 missing-LiDAR positions remain UNOBSERVED, point accounting
|
||||
has zero unaccounted contributions. The schedule spans 39.215–757.160 s, not
|
||||
the whole 808.779 s source session. This CPU-only result is not a full AI profile.
|
||||
|
||||
An actual canonical restart exposed a missed case: unchanged archive discovery
|
||||
advanced the source row's update clock, changing its admitted catalog hash and
|
||||
hiding the exact cache hit. Reconciliation now preserves the **entire existing
|
||||
snapshot** when only that incidental clock differs. Real changes still alter
|
||||
identity; the fingerprint, package and computation schemas are not weakened.
|
||||
The affected source's one clock field was restored only after reconstructing
|
||||
its exact admitted hash, with backup and transactional before/after fences.
|
||||
No source bytes, result provenance or job identity were rewritten.
|
||||
|
||||
Following activation/restart, the same catalog, job and cached result document
|
||||
reopened; all previous jobs and claim history remain. However, the portable
|
||||
review currently renders a checked JSON document/artifact inventory, not video
|
||||
and TGS. Therefore stage 2B stays open for a common schema-bound saved visual
|
||||
adapter, using this sealed result without recomputation or legacy overlays.
|
||||
See [real-run and restart evidence](../../experiments/perception/OBSERVATORY_RECORDED_PROGRESS_2026-09-03.md).
|
||||
|
||||
## Boundaries
|
||||
|
||||
No Synology deployment, hardware actuation, motor integration, new capture,
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
# Recorded Observatory — attempt-bound progress and first real run
|
||||
|
||||
Date: 2026-09-03. Current implementation: `bee8552`.
|
||||
Date: 2026-09-03. Progress: `bee8552`; control layers: `54c8d82`;
|
||||
unchanged-source reindex fix: `bd947b4`.
|
||||
This is an observation/control-plane increment of stage 2, not onboard or
|
||||
full recorded-analysis acceptance. No Synology release, physical acquisition,
|
||||
actuation, model replacement or GPU benchmark is involved.
|
||||
@@ -37,6 +38,8 @@ actuation, model replacement or GPU benchmark is involved.
|
||||
actual subprocess invocation and timeout child cleanup. A separate **40 tests**
|
||||
cover portable runtime, M49 entrypoint/queue/LAB V1 wiring and minimal imports.
|
||||
Ruff and focused mypy pass. The existing TestClient deprecation warning remains.
|
||||
- Exact offline installer: **3 tests** covering file/hash inventory and declaration
|
||||
fences. These are separate from the 128 + 40 backend checks above.
|
||||
- Canonical8000 was replaced only while the queue was idle. Previous UI output
|
||||
and a SQLite backup were retained. All rows in the six pre-existing tables
|
||||
matched their pre-update hashes; the new progress table was empty.
|
||||
@@ -74,7 +77,7 @@ predecessors alongside replacements, use the old package launcher to overwrite
|
||||
the control layer, or restore an old SQLite backup over newer work. No reboot
|
||||
was performed; installed restart declarations, not reboot recovery, were checked.
|
||||
|
||||
## Real run — status at 08:20 UTC
|
||||
## Real run — succeeded and published
|
||||
|
||||
One ordinary UI Calculate action submitted:
|
||||
|
||||
@@ -82,16 +85,81 @@ One ordinary UI Calculate action submitted:
|
||||
- Setup: `m49-tgs-portable-v2`, definition
|
||||
`f56d6321bd794ccdfb7d2e3b05d044b11f616ffb81ee29517386cc253046d4eb`.
|
||||
- Job: `observatory-run-b230216709dc4c59bc56c98c7e329bf1`, generation 1.
|
||||
- Input inventory: 6837 members. Delivery completed after approximately 298 s;
|
||||
input preparation is still running. There is no result/cache/view acceptance yet.
|
||||
- Queue: 10 retained failures, one retained historical success/not-required,
|
||||
one running job, one current progress row. No second model/profile was started.
|
||||
- Input inventory: 6837 members. Delivery completed after approximately 298 s.
|
||||
Initial LiDAR decode and source-stage construction completed before TGS; this
|
||||
remains a whole-input executor, not the target incremental runtime.
|
||||
- Submitted `2026-09-03T08:08:03.013Z`; published on the first attempt at
|
||||
`2026-09-03T08:31:39.776Z`: **1416.763 s / 23 min 36.763 s** end to end.
|
||||
- Result: `m49-tgs-portable-review-a09d2b4a07d103e4f3693ba746a51be2197214768774eabfded4f109ae80dce4`.
|
||||
Package SHA-256: `52e8afd6aaa38b615008463b873b94feae160946a69ce67aba12efc5f12b1589`.
|
||||
Central manifest: `0297a3502e7510e3d126ddf33e1afc2ef495638255351cd37a6dbed5b42ab832`.
|
||||
- All **10 central artifacts**, including the package manifest, independently
|
||||
passed byte-length and streaming SHA-256 verification on the Mac. The package
|
||||
contains 9 result members plus that manifest; sampled transfer progress ending
|
||||
at 8/9 is not the publication/completeness authority.
|
||||
- **6830 ordered schedule rows**, **2244 costmap cells** per row. There are
|
||||
6811 available LiDAR associations and 19 missing ones; the corresponding
|
||||
costmap states are all UNOBSERVED and their height bounds remain NaN.
|
||||
- Point accounting: 149733073 eligible = 36777326 ground + 112748049 nonground +
|
||||
207698 rejected; **0 unaccounted**. Counts cover rolling-window contributions,
|
||||
not unique physical points across the entire route. Rejected is not free space.
|
||||
- Source-session duration is 808.779495667 s. This profile schedules one anchor
|
||||
per admitted camera fragment: first 39.215263458 s, last 757.160263458 s;
|
||||
the camera epoch ends at 757.260263458 s. Its 717.945 s anchor span is not
|
||||
proof of coverage of every second of the 13:29 source or every decoded image.
|
||||
- Exact runner trace: TGS-only p50/p95 **1.204 / 2.6075 ms**, stage-wall p50/p95
|
||||
**17.676102 / 29.991720 ms**. Sums are 9.122023 s TGS and 131.038739079 s
|
||||
stage wall. These exclude source preparation, result assembly and transfer.
|
||||
JSON `effective_fps=9.51187` is schedule cadence, not processing/onboard FPS.
|
||||
- Final queue: 10 retained failures, one retained historical success/not-required,
|
||||
one new success/published, one v3 claim grant and one progress row. All 11 old
|
||||
jobs, the 50000 legacy claim receipts and previous reconciliation remain intact.
|
||||
No second profile, LAB V1, ML/GPU model or onboard execution was started.
|
||||
|
||||
An early diagnosis based on a stationary 556912640-byte temporary camera archive
|
||||
did **not** prove a network stall. That equals the sealed archive's complete
|
||||
length; the job subsequently advanced normally. Do not report it as a proven
|
||||
transport outage or benchmark.
|
||||
|
||||
## Restart found and fixed a real cache defect
|
||||
|
||||
The first idle-only canonical restart recovered health in 20.985 s and preserved
|
||||
all 12 job rows, but **failed cache acceptance**. The result document still opened;
|
||||
the profile reappeared in the calculation selector. Archive reconciliation
|
||||
unconditionally replaced `observation_sessions.updated_at_utc`; that field is
|
||||
part of the exact source catalog hash, so unchanged data looked like a new source.
|
||||
|
||||
`bd947b4` keeps the existing fingerprint algorithm and all source/artifact fields.
|
||||
Inside the candidate transaction it compares the complete before/after snapshot
|
||||
with the previous update clock. If everything else is identical, it rolls back
|
||||
the no-op reindex. Real session/source/artifact differences still commit with
|
||||
the new timestamp. This does not introduce matching by LAB name or weaken source
|
||||
or result integrity.
|
||||
|
||||
The already-published job needed one bounded metadata repair: changing only its
|
||||
source row's clock from `2026-09-03T08:36:25.809Z` back to
|
||||
`2026-09-03T08:06:12.724Z` reconstructs **exactly** the admitted full-catalog hash
|
||||
`2db6b8f109f5cc31bb32733ca633e03becca83d1f140a68ecc9ec9522010c24e`.
|
||||
The old clock was recovered by a bounded, read-only millisecond candidate check
|
||||
in this turn's known startup/admission interval; no other field was varied.
|
||||
A SQLite backup was retained. The transaction rechecked the current hash, then
|
||||
the reconstructed admitted hash, and changed only that one field in one row.
|
||||
Raw evidence, package/provenance and job receipts were not rewritten or recomputed.
|
||||
Do not generalize this repair to another source without the same exact hash proof.
|
||||
|
||||
Validation: **89 session-store/publication tests** (including 7 new regressions),
|
||||
**72 admission/LAB-cache/queue/API tests**, Ruff and focused mypy pass. A new store,
|
||||
reconciliation with a later clock and cold result cache preserve reuse; actual
|
||||
session/source/artifact changes still invalidate it. No frontend rebuild was
|
||||
needed for this backend-only repair; the previously verified progress UI remains.
|
||||
|
||||
After activation/restart, canonical8000 recovered in 20.650 s with PID77997.
|
||||
Catalog, complete job projection and result view equal their pre-restart values.
|
||||
Browser Refresh/reopen keeps M49 below, only LAB V1 remains in the selector,
|
||||
and the exact result document opens with no new job. The 12 job rows remain
|
||||
unchanged. This proves saved **document/cache** persistence, not visual replay.
|
||||
The first failed acceptance is retained in the evidence, not overwritten as PASS.
|
||||
|
||||
## Remaining boundaries — not hidden by the progress feature
|
||||
|
||||
1. This does not introduce `recorded-analysis` into the retained live runtime.
|
||||
@@ -106,10 +174,21 @@ transport outage or benchmark.
|
||||
4. Phase snapshots are not a complete performance trace. Warmup/stage timings,
|
||||
throughput, all required-frame accounting and onboard estimates need separate
|
||||
evidence. These UI counts are not FPS or real-time qualification.
|
||||
5. Stage 2B remains open until this run publishes an exact, reviewable result and
|
||||
cached reopening is verified. LAB V1 and the other recording follow sequentially.
|
||||
5. **Stage 2B is not closed.** Publication and cached document reopening after
|
||||
restart are proved, but `portable-result-review` currently renders JSON and
|
||||
the artifact inventory, not synchronized camera/TGS playback. The existing
|
||||
title “полный маршрут и воспроизведение” is not an accepted capability proof.
|
||||
Add a schema-bound, bounded saved-data adapter to the common replay pattern;
|
||||
admit only this result's arrays and the exact source camera timeline. Do not
|
||||
reuse the legacy 4489-frame M49/E47 overlays or invent semantic/detector layers.
|
||||
Reuse this sealed result to validate the viewer without another inference run.
|
||||
6. LAB V1 and the other recording follow sequentially after the first visual
|
||||
cycle. Full time coverage/source synchronization must be qualified separately
|
||||
from counts on the current fragment schedule.
|
||||
|
||||
Private evidence, not Git: `.runtime/observatory-progress-DbxaPA/` contains the
|
||||
SQLite backup and row hashes, payload/plan/receipt/declarations, build/test logs,
|
||||
submitted job and bounded read-only progress observations. Model assets and
|
||||
submitted/completed jobs, result/artifact checks, restart failure, exact clock
|
||||
repair proof/backup and cache/history acceptance, plus bounded read-only progress
|
||||
observations. Model assets and
|
||||
recorded camera/LiDAR payloads are not copied into this report.
|
||||
|
||||
Reference in New Issue
Block a user