docs(perception): record full-graph network and recovery evidence

This commit is contained in:
DCCONSTRUCTIONS
2026-09-02 19:05:13 +03:00
parent 6469505c41
commit 0cc6b96306
3 changed files with 221 additions and 8 deletions
@@ -1,10 +1,14 @@
# Observatory: четыре этапа создания полного real-time Perception-профиля
Дата: 2026-09-01; обновлено 2026-09-02 18:11 МСК. **Этап 1 закрыт; этап 2 в работе. Инкремент 12: внешний gRPC/TLS binary candidate, одноразовый доступ и bounded backpressure.** Код `0310592`. Два CPU-only межмашинных повтора Mac↔Worker через существующий SSH-маршрут дали16/16 точных payload/reply; обрыв2.20s сохранил resident CPU sentinel и локальный lease. Итоговые105 focused tests и20 Worker transport tests PASS. Это не full-graph network qualification: реальный `BinaryGraphBridge`, scene/layer codecs, production выдача grant/clock mapping и standalone ещё не подключены к этому endpoint. Этапы3–4 не начаты.
Дата: 2026-09-01; обновлено 2026-09-02 19:00 МСК. **Этап 1 закрыт; этап 2 в работе. Инкремент 13: полный graph с реальным сетевым входом и выходом.** CPU source/receiver вынесен в отдельный контейнер без GPU; модельный контейнер не получает запись через mounts. Через gRPC/TLS возвращаются настоящая маска512×512, detections/distance/motion и grid/costmap/policy. Обычный1× прогон:128/128 exact raw к reference, p95/p99 до готового consumer-view106.150/115.349ms, max126.910ms (один кадр выше125ms). 76/128 полных свежих scene;52 исходные sensor gaps не скрыты.
Финальный same-Mac RTT min/median/max14.360/23.919/120.815ms (не one-way age/FPS), peak mailbox6,750,559B, RSS57,244KiB, после закрытия0bytes. Source clock и resume proof синтетические, моделей0. Default64KiB HTTP/2 window не выдержал250ms для1,048,595B; fixed1MiB прошёл без изменения deadline. Реальный slow-reader выявил блокирование отправки error status; его deadline и deferred quarantine cleanup исправлены и проверены. Evidence16 artifacts: `.runtime/perception-stage2-grpc-20260902T1500Z/manifest.json`, SHA-256 `adf5eaf092feaed6721f66e2adaceded0cdbf55754e1f9953f54623bfb52d331`.
Отдельный обрыв2.2s:102 результатов +26 учтённых пропусков24–49, resume50 с теми же четырьмя PID и lease generation1; одна очистка temporal history, без backlog. p95/p99 принятых результатов107.098/110.817ms; отдельный gap доступности2.725s. Начальный лишний reconnect из-за раннего init исправлен без увеличения idle-timeout и проверен повтором.146 focused tests PASS,2 больших Worker-only теста пропущены локально. Максимальный ответ460248B остаётся внутри1MiB; peak tracked13,217,791B, после закрытия0.
Следующий проверяемый результат этапа2: подать реальную запись с application-side source через этот endpoint в существующий полный graph, вернуть общие scene/layer outputs с явными размерными/возрастными ограничениями, повторить normal/reconnect/slow-consumer canary последовательно. Транспорт не имеет права вызывать batch materializer или заново запускать модели при сетевой паузе. Текущий outbound cap1MiB требует проверки реальных слоёв/фрагментации; расширять его молча нельзя. После этого — самостоятельный image. Продуктовый LAB path пока не переключён.
Граница доказательства: два контейнера одного Worker с проверенным общим Linux monotonic clock, временные штатные частоты2610/10251MHz; **не Mac↔Worker full-graph, не radio/live и не standalone**. История зависимых слоёв после gap закономерно отличается от uninterrupted reference. Все230 опубликованных scene/масок проверены на стороне приёмника и повторно сверены. [Подробный отчёт](../experiments/perception/PERCEPTION_STREAM_STAGE2_NETWORK_2026-09-02.md). Evidence236 artifacts: `.runtime/perception-stage2-network-graph-20260902T1541Z/manifest.json`, SHA-256 `d1bc7e26850a2d9050ee1d8f8a5ece2e6b8c53e2e7dba381cbd4445d68a5ec17`.
Следующий проверяемый результат этапа2: application-side выдача grant + измеренное сопоставление часов, полный graph Mac↔Worker и slow-consumer canary, затем самостоятельный image без developer/model mounts. Начальный retry/выдача grant текущего bounded pilot не являются production recovery service. Продуктовый LAB path пока не переключён; этапы3–4 не начаты. Worker services и auto clocks восстановлены, Ollama/Frigate остаются exited/restart=no, временные контейнеры/network/lease удалены. Mac8000 и Worker telemetry работают.
Предыдущий инкремент12 (`0310592`, `1916122`): CPU-only gRPC/TLS proof Mac↔Worker,16/16 payload/reply; синтетический source clock и CPU sentinel, моделей0. Same-Mac RTT14.360/23.919/120.815ms min/median/max — не one-way age/FPS.105 local и20 Worker tests PASS, проверены bounded slow-reader/quarantine. Evidence `.runtime/perception-stage2-grpc-20260902T1500Z/manifest.json`, SHA-256 `adf5eaf092feaed6721f66e2adaceded0cdbf55754e1f9953f54623bfb52d331`.
Предыдущий инкремент11 (`c570f7d`, `2ef8c08`): восстановлены System/Worker telemetry plane и независимый runtime exporter. Телеметрия остаётся отдельным наблюдателем, а не выдающим lease/GPU authority контуром.
@@ -336,6 +340,6 @@ EoMT — семейство ViT-моделей сегментации изобр
## Outcomes / retrospective
Этап 1 завершён; этап 2 продолжается. Реальный scoped host collector/control adapter подключён к полному профилю. Normal exact raw128/128, задержка reply2.2s → WAIT/resync с теми же четырьмя PID,26 пропусков без backlog/старой истории,404 focused tests. Сохранены исправленный warmup abort и независимые показатели доступности/accepted-frame latency. Следом внешний data-plane/auth/recovery, затем standalone packaging. Native-host GPU inventory не квалифицирован; Docker scope не выдаётся за полный host audit. Batch/registry/UI и этапы34 не начаты, actuation=false. Mac8000=200,8765 закрыт; auto clocks и четыре Worker services восстановлены, Ollama/Frigate exited/restart=no, временных collectors/container/lease нет.
Этап1 завершён; этап2 продолжается. Помимо scoped host control, полный graph теперь связан gRPC/TLS с отдельным CPU source/receiver: normal128/128 exact raw, gap2.2s → WAIT/resync с теми же четырьмя PID/lease и26 учтёнными пропусками.146 focused tests текущего инкремента PASS; ранее404 checks относились к host-control инкременту. Consumer-ready p95/p99 normal106.150/115.349ms; это same-kernel container-network при stock fixed clocks, не Mac↔Worker. Следом межмашинные clock/grant integration и slow consumer, затем standalone packaging. Native-host GPU inventory не квалифицирован; Docker scope не выдаётся за полный host audit. Batch/registry/UI и этапы34 не начаты, actuation=false. Mac8000=200,8765 закрыт; auto clocks и четыре Worker services восстановлены, Ollama/Frigate exited/restart=no, временных collectors/container/network/lease/key/grant нет.
После этапа 4 здесь будут перечислены digest самостоятельного полного образа, измеренные статусы и ошибки по recordings, реально проверенные source/hardware/config комбинации, состояние сохранённого EoMT-варианта и оставшиеся physical-live/quality/vehicle-integration ограничения. Готовый Docker и готовая автономия не отождествляются.
@@ -1,9 +1,9 @@
# ADR 0049 — Stream-first full perception profiles
Date: 2026-09-01; updated 2026-09-02 18:11 MSK. Status: stage-1 engineering
baseline complete; stage-2 authenticated gRPC candidate has cross-host CPU proof.
Full-graph network integration, native-host GPU inventory, standalone image and
product cutover remain open; transport proof is not physical-live acceptance.
Date: 2026-09-01; updated 2026-09-02 19:00 MSK. Status: stage-1 engineering
baseline complete; stage-2 full graph has authenticated container-network proof.
Cross-host full-graph clock/grant integration, native-host GPU inventory,
standalone image and product cutover remain open. This is not physical-live acceptance.
Execution order remains the four stages in
[the ExecPlan](../OBSERVATORY_REALTIME_PROFILES_EXECPLAN.md).
@@ -777,3 +777,55 @@ warns that a completed write need not mean network delivery;
[channel options](https://github.com/grpc/grpc/blob/master/include/grpc/impl/channel_arg_names.h)
documents the fixed lookahead window. Source and actual behavior were checked;
these references alone are not a performance qualification.
## Stage 2 increment 13: full graph over container networking (2026-09-02)
The same `BinaryGraphInput` decoder and causal sensor cut now feed the full
graph from `NetworkGraphBridge`. Source and receiver execute in a separate
CPU-only container. No camera/index/sensor recording mount exists in the GPU
container. Resident DDRNet/RF-DETR/decoder/TGS children and the local Worker
lease remain owned by the existing controller; remote ingress cannot restart
models or renew the lease.
The return payload carries the existing scene plus the actual uint8 segmentation
plane. Grid coordinates join the costmap digest. Result1MiB, JSON512KiB and plane
512KiB caps are checked before parsing/retention; total framing also fits1MiB.
The receiver verifies raw mask and all layer hashes and independently derives
freshness/policy. Network arrival, integrity-validation completion and complete
consumer-view readiness are recorded separately.
The pilot verifies a common Linux boot and zero monotonic namespace offsets.
Its grant file is trusted local control, read-only to the source; source status
uses a separate mount. It is **not** the production grant delivery or cross-host
clock mapping implementation. A foreign clock cannot be silently subtracted.
Final normal128b:128/128 byte-exact received scenes, raw model/geometry/motion/
costmap parity to the prior reference, no queue drops, one input epoch, no resets.
Consumer-ready p95/p99/max106.150/115.349/126.910ms. One frame exceeds125ms;76/128
scenes have complete six-layer freshness, with52 original missing sensor pairs.
Gap128b:2.2s disconnect,102 completed +26 omissions2449, fresh keyframe/pair
resume50, exactly one temporal reset, same four PIDs and lease generation1.
Consumer-ready p95/p99/max107.098/110.817/117.317ms; availability gap2.725s.
Post-gap history-dependent outputs are not asserted equal to uninterrupted
history. All230 mask/scene receipts and their derived views were rechecked.
These runs use temporary stock2610/10251MHz clocks,450W,8CPU/8GiB model and
2CPU/1GiB source envelopes. They prove container-network behavior on one
Worker, **not** Mac↔Worker/radio/live latency. Observed result maximum460248B,
tracked peak13,217,791B, residual0. Full-model slow consumer and cross-host
clock/grant integration precede standalone packaging; product cutover remains
closed. Diagnostic startup retry is not a production recovery service.
Source init originally preceded the delayed start by2s and triggered a spurious
idle timeout. The source now connects100ms before release, without relaxing
the timeout. Final normal/gap have zero/one intended recovery. Missing runner,
read-only mountpoint and launcher ExitCode failures are retained as rejected
attempts.146 focused tests pass;2 larger Worker-only tests skipped on Mac.
Evidence236 artifacts at
`.runtime/perception-stage2-network-graph-20260902T1541Z/manifest.json`, SHA256
`d1bc7e26850a2d9050ee1d8f8a5ece2e6b8c53e2e7dba381cbd4445d68a5ec17`.
See [the detailed report](../../experiments/perception/PERCEPTION_STREAM_STAGE2_NETWORK_2026-09-02.md).
Four prior services and automatic clocks restored; transient containers,
networks, lease volumes, keys and grants removed. Ollama/Frigate stay disabled.
Mac8000 and Worker telemetry remain available; no8765 or external deployment.