docs(perception): record recoverable input policy and decoder continuity proof
This commit is contained in:
@@ -1936,3 +1936,99 @@ disabled. Optional primitive не засчитывается за готовый
|
||||
125-ms PASS, auto-clock FAIL, 52 source gaps и quality limits не изменены.
|
||||
Full-source transfer не возвращён, модели/пороги/TTL/CPU-GPU schedule прежние.
|
||||
Этап 2 не закрыт, этапы 3–4 не начаты; registry/UI не переключены, actuation=false.
|
||||
|
||||
## 2026-09-02 15:30 МСК — этап 2, инкремент 8: resident runtime и восстановление входа
|
||||
|
||||
**Результат:** по уточнению владельца transient input/telemetry loss отделён от
|
||||
аварии всего профиля. Новый явно включаемый common-runtime режим умеет ждать,
|
||||
сохраняя local lease и процессы, затем принимать новую input epoch. При этом
|
||||
полный DDRNet/RF-DETR/geometry/TGS pilot ещё не подключён к этому режиму;
|
||||
нынешний результат — primitives + проверка настоящего CPU H.264 decoder.
|
||||
|
||||
Код `c31c46c`: `streaming_continuity.py`, lifecycle/readiness/ingress/scheduler,
|
||||
decoder RPC reset, causal sensor-window reset и focused tests. Один resident
|
||||
StreamStart/lease generation сохраняется; новая input epoch меняет только
|
||||
входную идентичность и проверяется уже существующим wire v2. Исходный acquisition
|
||||
session/generation не подменяется. Модели не получают новой startup-команды.
|
||||
|
||||
`recover_input=True` требует доверенный mapped source clock; с readiness нужен
|
||||
`recoverable=True`. Эти параметры должны войти в effective configuration.
|
||||
Исторические one-shot diagnostics сохраняют прежний default; включение флага
|
||||
без настоящего reset/resume adapter не считается миграцией full profile.
|
||||
|
||||
### Пауза, свежесть и настоящая авария
|
||||
|
||||
- EOF без End, IPC deadline, обрыв соединения, source/sequence gap переводят
|
||||
вход в waiting. Pending input удаляется; active borrowed buffers остаются
|
||||
зарезервированы до возврата callback. Старые packets/results не пройдут gate.
|
||||
Serial GPU stage умеет отбросить obsolete работу и продолжить ждать.
|
||||
- Новая epoch ждёт завершения старого receiver и active/queued work. Decoder
|
||||
сбрасывает codec/DTS references внутри прежнего PID; causal sensor window
|
||||
очищает историю, сохраняя фиксированный memory budget. Возобновление требует
|
||||
fresh decoded keyframe, pose/points не старее reconnect cutoff и успешного
|
||||
temporal reset; evidence повторно проверяется после reset. Возникшая в это
|
||||
время новая пауза не может быть затёрта окончанием старого reset.
|
||||
- Временная потеря/неполнота GPU facts или strict performance envelope вызывает
|
||||
ожидание, не освобождение ownership. Fresh telemetry сама не возобновляет
|
||||
старую epoch. Worker-local lease renewals независимы от GCS/входной сети.
|
||||
- Подтверждённый wrong owner/generation/image/config/worker, competing GPU client,
|
||||
нарушенный trusted clock contract, настоящая утрата local lease, child/decoder
|
||||
failure и cancel остаются terminal. Отсутствие данных от K1 само по себе ещё
|
||||
не доказывает смерть сканера. Управление ровером и его onboard stop/hold,
|
||||
stale-command rejection и resume policy здесь не реализованы.
|
||||
|
||||
### Worker CPU-only proof
|
||||
|
||||
Session `perception-stage2-continuity-worker-20260902T1518MSK`, фактический запуск
|
||||
12:18:37 UTC / 15:18:37 МСК. Один временный `ndc-perception-continuity-cpu-probe`:
|
||||
прежний pinned image, runc, network none, read-only code, 2 CPU / 768 MiB,
|
||||
pids64, tmpfs256MiB, **без GPU devices и моделей**. Существующие PyAV18/NumPy
|
||||
подключены read-only; model assets не монтируются, образ не пересобирается.
|
||||
|
||||
Прочитана одна ограниченная строка camera index, init и один существующий H.264
|
||||
fragment. Он декодируется три раза, каждый раз с новым синтетическим current
|
||||
timestamp и synthetic pose/одной точкой. Source counter тикает через каждые
|
||||
50 ms независимо от входной связи. Это не полный replay реальной записи,
|
||||
не DDRNet inference, не настоящий JointGraph temporal/TGS reset и не TCP тест.
|
||||
|
||||
| Проверка | Фактический результат |
|
||||
| --- | --- |
|
||||
| Input epochs | 3, lease generation 1 сохранена |
|
||||
| Обрывы IPC | 150 ms и 2.2 s, оба waiting → resync |
|
||||
| Source ticks во время обрыва | 3 и 44; никакой догоняющей очереди |
|
||||
| Resident процессы | PID 10/11 неизменны: CPU sentinel и настоящий decoder |
|
||||
| Decoded BGR | 3/3 одинаковы, SHA-256 `051a6087d897b91b63163975d92b78501cdd98b4c227f7683f05946cd434da37` |
|
||||
| Local heartbeat | 54 renewals; пауза 2.2 s длиннее lease TTL 2 s не убила профиль |
|
||||
| Peak input / final input | 5,275,461 / 0 bytes |
|
||||
| Завершение | Explicit End; children=0, lease released, temporary container removed |
|
||||
|
||||
Тесты отдельно проверяют повторные EOF/idle/incomplete/gap циклы, ограничение
|
||||
числа threads, stale input/result, pause during reset, reset failure, soft
|
||||
telemetry recovery, hard conflict и настоящий lease expiry. 375 focused tests
|
||||
PASS (4.15 s), Ruff/format 14 changed files PASS, mypy 7 modules PASS. Только
|
||||
прежнее Starlette/httpx предупреждение. Нет моделей/load/full build на Mac;
|
||||
canonical 8000=200, 8765 закрыт.
|
||||
|
||||
Worker before/after: service IDs/StartedAt/restart counts совпали, Triton ready
|
||||
200, Ollama/Frigate exited/restart=no. GPU P8, 0%, 210/405 MHz, power limit450 W,
|
||||
980→985 MiB. Это read-only preservation snapshots, не continuous collector и
|
||||
не доказательство exclusive GPU readiness. У трёх legacy agents уже были
|
||||
restart counts43/4/5; их известная проблема не исправлялась и не скрывается.
|
||||
Настройки services/clocks/quotas не менялись, старые evidence/recordings/weights
|
||||
сохранены. Удалены только временные CPU container и fixture lease directory.
|
||||
|
||||
Evidence `.runtime/perception-stage2-continuity-worker-20260902T1518MSK/manifest.json`:
|
||||
85 artifacts, SHA-256
|
||||
`fbd327d129c88caa13b7183b1ae2c4767e877a6f5472c0f430875cfd7401ed46`.
|
||||
73 code hashes сверены между preregistered snapshot, Worker и текущим commit.
|
||||
Сохранены исходный manifest, commands, report, before/after/cleanup, analysis,
|
||||
dependency evidence hashes; sealed manifest/analysis скопированы на Worker.
|
||||
|
||||
**Далее в том же этапе 2:** перевести полный PilotController/BinaryGraphBridge
|
||||
и output consumer на pause/resume, реализовать действительный reset tracking,
|
||||
motion, rolling geometry/TGS/costmap и провести последовательный full-graph
|
||||
fault probe с сохранением модельных PID. Затем настоящий trusted collector,
|
||||
control/network boundary и самостоятельная упаковка. Старый terminal-readiness
|
||||
TARGET предыдущего инкремента уточнён, но его историческое evidence не переписано.
|
||||
GPU latency заново не измерялась: conditional PASS / auto-clock FAIL и source
|
||||
gaps остаются прежними. Этап 2 не закрыт; этапы 3–4 не начаты, actuation=false.
|
||||
|
||||
Reference in New Issue
Block a user