docs(perception): record bounded binary ingress evidence and remaining bridge
This commit is contained in:
@@ -8,6 +8,9 @@ GO на инженерную реализацию этапа 2, не полны
|
||||
Продолжение на 2026-09-02 11:00 МСК: начат этап 2, вынесен общий scheduler
|
||||
и реализован per-cell expiry. Два новых Worker-прогона и точная parity приведены
|
||||
в последнем разделе этого же журнала. Этап 2 целиком ещё не закрыт.
|
||||
Продолжение на 12:35 МСК: третий инкремент — общий bounded binary raw IPC,
|
||||
103/103 исходных событий до End и negative EOF на Worker. Это raw-digest probe,
|
||||
не новый полный model run. Decoder/full-graph bridge ещё требуется.
|
||||
Продолжение на 12:00 МСК: добавлены subprocess lifecycle, Worker-local
|
||||
cooperative ownership и fencing; normal/две expiry пробы и межконтейнерное
|
||||
владение проверены. Последний раздел фиксирует этот второй инкремент этапа 2.
|
||||
@@ -1341,3 +1344,113 @@ trusted recovery/inventory enforcement и standalone image без code/model mou
|
||||
Stage 3 UI/registry/batch cutover не начинался. Все real-time/network/full-session/
|
||||
quality/vehicle gates и actuation=false сохраняются; новый image build и
|
||||
исторический NVCR403 blocker в этом шаге не проверялись.
|
||||
|
||||
## Этап 2, третий инкремент — bounded binary raw IPC, 2026-09-02 12:35 МСК
|
||||
|
||||
Коммиты: `da60fef` — общий wire/sender/receiver и raw byte reservations;
|
||||
`a937400` — End-marker до закрытия probe, unique run/epoch по experiment;
|
||||
`79ce55d` — reuse существующего raw-first ingress без изменения wire v1.
|
||||
Ни одного нового model run, изменения весов/thresholds/clocks или переключения
|
||||
product LAB path в этом инкременте нет.
|
||||
|
||||
### Что реально реализовано
|
||||
|
||||
`missioncore.live-perception-wire/v2` сохраняет поля `LiveIngressEvent`:
|
||||
session/generation, ingress и source sequences, modality/source, original capture
|
||||
и source-host arrival stamps. JSON metadata использует decimal uint64 strings;
|
||||
payload бинарный, без base64, PNG-конверсии или целого архива. Header ≤64 KiB,
|
||||
fragment ≤1 MiB, raw camera event ≤1 MiB, LiDAR/pose ≤2 MiB — прежние modality
|
||||
bounds, не новый источник/протокол K1. Full StreamStart и acquisition mapping
|
||||
сверяются на Open; binding SHA повторяется на каждом fragment/control.
|
||||
Это integrity/fencing, не сетевая authentication.
|
||||
|
||||
Один receiver собирает одно событие; проверяет offsets, размер, SHA каждого
|
||||
fragment и целого observation, source identity/sequence/clock. Camera без init
|
||||
отклоняется; gap требует нового init. Парсинг NAL/IDR/codec и превращение fMP4
|
||||
в кадры пока не реализованы этим слоем. End — явное событие, не prerequisite
|
||||
для доставки; Cancel и modality gap/unavailable отдельны. Неожиданный EOF,
|
||||
timeout, порча и переполнение завершают bound stream, не растягивают source time.
|
||||
Неверный Open ещё не bound peer и не может отменить текущего владельца.
|
||||
|
||||
Sender синхронный, без фоновой очереди; source adapter отвечает за pacing и
|
||||
владение исходным payload. Receiver thread tracked общим lifecycle, idle read
|
||||
перепроверяет lease. Reassembly и raw/header copies резервируются **до**
|
||||
аллокации в том же 16-MiB бюджете, что queued/active bundles. Cancel не освобождает
|
||||
live reservations. Callback получает borrowed raw bytes только на время вызова;
|
||||
будущий decoder обязан отдельно резервировать scratch до выделения памяти и
|
||||
не удерживать raw вне этого контракта. Counter не заменяет RSS: Python object,
|
||||
kernel/socket, source cache и model tensor budgets проверяются отдельно.
|
||||
|
||||
### Worker 006: фактический inter-process input
|
||||
|
||||
Принятый experiment: `perception-stage2-binary-ingress-worker-20260902T1232MSK`.
|
||||
Один временный CPU-only контейнер, network none, без GPU request, 2 CPU / 768 MiB,
|
||||
read-only image, ограниченный tmpfs; новый image не строился. Источник и receiver
|
||||
разделены процессом/socket. Source adapter читает существующие camera init/media
|
||||
по одному chunk с проверкой index SHA и incrementally — прежний normalized
|
||||
sensor NPZ. Точки сохраняют xyz f64 + intensity u8, pose — position/quaternion;
|
||||
это normalized archive inputs, не выданные за исходный vendor packet/K1 live feed.
|
||||
Отсутствующий у этих sensor rows UTC не придумывается (0), original host stamps
|
||||
сохранены. Calibration в hash-only probe не используется и явно имеет synthetic
|
||||
identity; model scene по этому probe не допускается.
|
||||
|
||||
Источник ограничен 32 camera events для canary, но receiver не получает ни
|
||||
frame count, ни duration, ни inventory. Prefix и bounded prerelease sensor rows
|
||||
не скрываются: считано 146/4598 pose rows, 139/4570 point batches,
|
||||
333168/10751258 xyz rows. Это не полный pass, не full-file hash и не полный decode.
|
||||
|
||||
| Метрика | Принятый raw IPC probe |
|
||||
| --- | --- |
|
||||
| Sent / received | 103 / 103, exact bytes/metadata |
|
||||
| Состав | init 1, camera 32, LiDAR 34, pose 36 |
|
||||
| Доставка каждого data channel до End | PASS |
|
||||
| Wire bytes | 4,061,693 |
|
||||
| Пик input byte budget / остаток | 553,991 / 0 bytes |
|
||||
| Cgroup memory peak normal | 51,773,440 bytes |
|
||||
| Source release lag max | 3.717 ms |
|
||||
| Межпроцессный send-start → hash callback p50/p95/p99/max | 0.292 / 0.419 / 0.601 / 0.669 ms |
|
||||
| Sender write p95/p99 | 0.190 / 0.316 ms |
|
||||
|
||||
Интервалы измерены на одной Linux kernel monotonic timeline, не вычитанием
|
||||
несогласованных source/remote clocks. Эти sub-ms значения не включают decode,
|
||||
модели, TGS, scene delivery, сетевой маршрут или browser. Их нельзя прибавить
|
||||
к прошлому p99 и объявить новую real-time квалификацию без полного замера.
|
||||
|
||||
Отдельная synthetic negative проба оборвала LiDAR observation 1,048,593 bytes
|
||||
после первого 1-MiB fragment: started=1, completed=0, incomplete=1,
|
||||
terminal=failed, никакого payload callback. Peak bytes 2,293,803 (включая
|
||||
консервативный copy reserve), после cleanup 0. Обе пробы: lease released,
|
||||
owned children=0 live, active GPU/CPU calls=0. Временный source process и
|
||||
контейнер убраны; никаких постоянных volumes/leases этим probe не создано.
|
||||
|
||||
### Неуспешные попытки и финальная фиксация
|
||||
|
||||
Попытка `1230MSK` отклонена до observations: в diagnostic code pack не хватило
|
||||
`k1link.data_plane` (и зависимого perception contracts); точный import failure
|
||||
подтверждён отдельным CPU-only check. Исправлен только состав snapshot.
|
||||
PowerShell stderr redirection также исправлена для сохранения traceback.
|
||||
Попытка `1231MSK` передала 103/103 и корректно обработала negative EOF, но
|
||||
финальный source timestamp мог не сохраниться: source закрывал socket до записи
|
||||
marker, а supervisor уже останавливал child. Acceptance остановлена на missing
|
||||
evidence. Marker перенесён до End; следующий отдельный experiment повторил обе
|
||||
пробы. Старые folders/logs/owner results не перезаписывались.
|
||||
|
||||
276 focused tests PASS (включая 40 новых ingress cases и legacy live-perception
|
||||
regressions); Ruff, mypy четырёх core modules, diff-check PASS. Full suite не
|
||||
запускался; прежние baseline-symlink/NVCR403 вопросы не пересматривались.
|
||||
|
||||
Manifest: `.runtime/perception-stage2-binary-ingress-worker-20260902T1232MSK/manifest.json`,
|
||||
42 artifacts, SHA-256
|
||||
`2a5492080027a86de9f176f051c9265e29f377d1d9207c86ac93cdff7632505a`.
|
||||
Он ссылается на отдельные sealed rejected manifests 1230/1231. Копии evidence
|
||||
находятся в одноимённых папках `D:/NDC_MISSIONCORE/runtime/experiments/`.
|
||||
Model/raw inputs в Git не добавлялись. Четыре Mission Core сервиса продолжали
|
||||
работу, Triton ready=200; Ollama/Frigate exited/restart=no. Probe/import-check
|
||||
containers=0. GPU auto P8, 979 MiB, 450 W; Mac 8000=200, 8765 закрыт.
|
||||
|
||||
**Gate:** принят bounded raw IPC core. Следующий шаг — persistent incremental
|
||||
camera decoder и causal sensor adapter, соединяющие этот ingress с тем же
|
||||
полным DDRNet/RF-DETR/geometry/motion/TGS/policy графом, затем full-graph
|
||||
parity/timing на новом входе. Network/gRPC/authentication, constant controller
|
||||
root/recovery/inventory, standalone image и product cutover остаются открытыми.
|
||||
Этап 2 не закрыт, этапы 3–4 не начаты; actuation=false.
|
||||
|
||||
Reference in New Issue
Block a user