Add packaged per-camera X4 wake and preview recovery

This commit is contained in:
DCCONSTRUCTIONS
2026-09-10 14:20:52 +03:00
parent f164606828
commit d45b329de8
22 changed files with 1045 additions and 16 deletions
@@ -1259,3 +1259,136 @@ trigger/retry/preview restore ещё не реализованы; immediate warm
REPLUG04 не исправлен. Camera-side Wakeup On остаётся явной предпосылкой.
Installed Node0.8.19/X40.1.3-3 сохранены; clean Ubuntu и несколько циклов
ещё не квалифицированы. Новых OS packages/services/permissions не добавляли.
### REC01 / B15 — автоматическое восстановление, 10.09.2026
Intent после разрешения владельца «Погнали дальше»: model0.1.3-7 добавляет
per-instance recovery intent, отдельный fixed root wake helper, default-off
настройку в общей карточке Core/Node и возврат только preview. Полный контракт,
границы команд, OS ownership и rollback в docs15. Camera-side Wakeup On
остаётся явной предпосылкой. Установка сначала versioned package и Node bundle,
никаких ad-hoc изменений Ubuntu. Чтение10:40:23 UTC: Node0.8.19/X40.1.3-3,
три действующие службы active; RAM available5371MiB,swap0.
16 новых synthetic recovery/helper tests прошли локально. Первый локальный
запуск выявил только ошибку тестового mock root ownership в двух случаях;
исправлен fixture, повтор16/16 passed. Производственный trust check сохранён.
B15 source0bcd3f3e04251f27f959d1ce,58346786 bytes, SHA-256
697a553d3564fa3b2e8bcf8e3a3cd098983c14ebcb130a071fe8085ae02e6885.
Штатный versioned build на той же Ubuntu:1GiB/180CPU s/nice10, без SDK/device
access/install. Установленные службы/пакет не меняются во время квалификации.
B15 complete10:43:08.33194610:43:31.874127 UTC, monotonic335296.213035555,
duration23.542184s;75 tests passed4.792s. Model0.1.3-7,
revision45e14de38a278914eedf5cbb,58210794 bytes,SHA-256
96ce6b52fa72d79ec6f8b0d13bc2af53afda61077b40a3358a3d145295a62d19.
Result archive5ee6bc007f5c6436dbc2196f7baf1c15ebc8954fa0e4514e46cc53f06013e4f0
скачан, entries/hash/package проверены. Core fleet31 tests passed.
Readback10:44:29.267748 UTC,Mac monotonic457549.378966166: Core operational,
Rover006 online,X4 streaming/preview1/recording0. Private before.json SHA-256
612b32bea4badd208f025d5089cdab73667677e13a095d895f96fedb8811484a.
N11 intent: Node0.8.20 с B15 и общей UI-настройкой, DG прежний8c53f73.
Source d982b8d2bf3a390d6c70e3f3,2728 files,309752241 bytes,SHA-256
9762db8c6f47d318036e4ab84c04ad56baa50507945a58e8da3227a22abb3a35.
Штатный Linux builder на той же Mini,3GiB/150%CPU/256tasks/nice10,
sequential DG/Node/Core tests и builds. Это сборка, не установка; SDK/USB/SD
не вызываются. Перед дальнейшей штатной подготовкой preview будет остановлен
через Core при подтверждённом recording0; новые installed versions пока не заявлены.
N11 complete10:46:47.19873510:55:50.833998 UTC,monotonic335515.079830142,
duration543.635276s, cgroup memory peak3221225472 bytes (3GiB cap).
DG build/typecheck/registry/loading/catalog, Node UI tests/build, Go race tests
и binary, Core architecture/typecheck/819 tests/build прошли. Штатная политика
builder исключает прежний Python/Rerun fixture, не входящий в X4 build inputs.
Node0.8.20:168273420 bytes,SHA-256
4d021c638493d9d2ffba8a90530f95c232def024164b56881f426f905f773072.
Core dist:23067834 bytes,SHA-256
48ec9b799d638ca52fc4e1a824793370e93398e7d58b8c2bb089c364190f8808.
Result archive7280f5c8c89d881108579ad965272e18f9de2a01e68fef92f7250d2fce3551ca
скачан, entries/artifacts проверены, private qualified-n11.
P11 owner release63be43462a32d49daca823fb,168292853 bytes,SHA-256
ca8983dd94ea8257c81f83dd426b625f8b930c54d57c1ddcb15fea9935852824.
Далее штатный --plan/--launch, локальная Ubuntu OS authentication при запросе.
Node maintainer script штатно перезапускает Node и RealSense; владелец об этом
уведомлён, D455 проверяется после установки. X4 остановлена через обычный
Core preview.stop; STOP instrument SHA-256
630f686cff11d270e9604b5c596b0e64710397df3cd94f0069134502ce156976.
Model prepare instrumentfa2bd84fdacce3ab0e047d9a38ab23be870e67ff8b8a6895b4aee9642e0e3740
будет вызван после подтверждения Node0.8.20. Никаких прямых SDK/root ремонтов.
REC01-Core intent: активировать квалифицированные N11 frontend bytes и Core
action allowlist на единственном8000; текущая UI сохраняется в private
qualified-n11/core-dist-before, прежний sensors.py изf164606 сохраняется рядом.
Hash-bound activation instrument 36b01ca8ab5ba58a3ecb0e0503dbef4fa022e87bc807b09a8ec609108378c315.
Проверить новый PID/health и прежние Core/Node/vehicle/binding identities;
launchd restart наблюдается до55s, второй backend не создаётся.
REC01-Core complete11:01:10.98505611:01:43.659067 UTC,
Mac monotonic458551.0406405,duration32.674049916s. Один restart, PID46997→65164,
Core operational, identity hashes до/после совпали. Private activation report
SHA256d1e3d09dbb658f259f64bd201f5c8b7781560a8ac9bffb11fb5870eaea6427e0.
P11 первая попытка10:59:46.53313910:59:53.546295 UTC,
Ubuntu monotonic336294.414243883,duration7.013164s: APT package step100,
версии не изменены. preinst требует /prepare-safe от RealSense; D455 была
streaming, запись/playback отсутствовали. Штатный Core STOP выполнен
11:04:43.00213411:04:50.089636 UTC,Mac monotonic458763.058095666,
fresh idle подтверждён. Private report SHA256
9d6716fde1a31b17c9344fd202564de0a38b9b765c2545460124c506e97b8461.
Повторён тот же hash-bound --launch, без обхода preinst/ручного root ремонта.
P11 complete11:09:11.00658911:09:29.842966 UTC,
Ubuntu monotonic336858.887692502,duration18.836391699s,
session07b18fa6895e43999f6d043aaf983878. Все шаги0, UI ready,
Node0.8.20 установлен, Node/K1/RealSense active,NRestarts0.
PREP06 через Core queued11:10:21.069014 UTC,Mac monotonic459101.124631166,
complete receipt11:10:38.238343; fresh after11:10:43.252557,
monotonic459123.308188291. Установлен model0.1.3-7; broker/supervisor/wake
active, новая SDK session от11:10:33.074024, прежний instance, preview0/recording0.
Recovery supported/disabled по умолчанию. Report SHA256
82b7b43cb3ff21f6f0820f7cdb1642f710a90c9aaa58f7589c99ff23d447b9ed.
Первый read-only service check ошибочно запросил несуществующее имя
mission-core-insta360-broker; проверка правильного mission-core-insta360
подтвердила active. Служба не исправлялась/не перезапускалась вручную.
REC01-RESTORE11:12:19.54582811:12:27.665197 UTC,
Mac monotonic459219.601795958459227.7207915,
sourceac778fa8786e98586eb4456a2df7dc19acf795a23671a0d91494415ce6127784:
штатные D455 start(record=false) и X4 preview.start complete.
Instrument слишком рано потребовал online сразу после X4 receipt и остановил
readback на промежуточном offline. Команда не повторялась; последующее чтение
11:12:53 UTC подтвердило прежнюю X4 SDK session, preview1/recording0 и
свежие кадры D455. Private start-both.json SHA256
7ba21efb5c1cbe8e9a8a421f96169e29f546890a683a7298fd47adbf82b6d845.
Через новую Core UI включено recovery для этой X4; пользователь ранее явно
подтвердил camera-side Wakeup On. ARM readback11:13:25.509513 UTC,
Mac monotonic459285.565453666,enabled=true,phase=ready,
preview_wanted=true,recording0. Private armed.json SHA256
513c07fd09e543ea4d9423ff505e6be0c68339e91323e3963793d4bd94e54540.
Core browser video1280×640,readyState4,paused=false,currentTime68.848s.
Loading расположен внутри нажатой кнопки; SDK session/SD не меняются.
REC01-REPLUG intent11:14:15.854035 UTC,Mac monotonic459335.90952175,
source7aa48b033e688fca78968f05288075a51db8fe272d61b3955a9df50fa6daa4b7:
bounded600s observer читает только
Core inventory каждые2s, сохраняет UTC/monotonic/исходник hash. Владелец
попросил продолжить автономность; запрошено USB out35s→in без Power,
оставить кабель подключённым. Успех требует исчезновения и новой SDK session,
автовозврата preview и свежих decoded frames; отсутствие действия владельца
не считается аппаратной неудачей. Изменения Ubuntu вне installer отсутствуют.
REC01-REPLUG окно завершено11:19:48.340831 UTC через SIGINT только временного
observer, finally сохранил отчёт; duration332.486881666s,165 samples. Физическое
действие владельца не подтверждено, disappearance не наблюдалось; hardware
gate остаётся pending, это не failed recovery. Report SHA256
44ca7ee2c32229d957294178dde6cce0ab15eabb0526596846fcaa7a01761da3.
Последний readback11:19:46.880983: обе камеры online, прежние SDK sessions,
D455 color1625→6571, X4 recovery enabled/ready/preview_wanted. В браузере
живой1280×640 currentTime68.848→265.315→443.377s,readyState4,paused=false.
Expanded viewport и Escape проверены. Собственная QA вкладка закрыта,
временные build/activation/observer процессы завершены; штатные preview и
recovery intent сохранены для теста владельца. Native Node WebRTC ограничение
из docs09 не закрывается общей frontend сборкой. Ops MISSIONCOR-77 обновлена,
replug/recovery/checkers остаются незавершёнными.
@@ -1,5 +1,24 @@
# Insta360 X4 — состояние реализации 10.09.2026
## REC01 / B15 — установлено, физическая проверка восстановления открыта
[Per-instance recovery](15_INSTA360_X4_AUTOMATIC_RECOVERY.md) добавлен в broker
и отдельный fixed wake helper. В общей карточке Core/Node настройка default-off;
отключение работает без камеры. Сохраняются разрешение wake и намерение
preview; три ограниченные попытки, бюджет переживает restart. Запись/SD-команды
не повторяются. Preview — одна попытка в новой SDK session при recording0.
B15 model0.1.3-7 прошёл75 Ubuntu tests; Core fleet31 tests passed. N11 Node0.8.20
и общая UI квалифицированы на той же Mini: DG/Node/Go race/Core checks,
819 frontend tests и builds прошли. Core активирован на8000, identities сохранены.
P11 установил Node0.8.20; PREP06 из удалённого Core установил X40.1.3-7 и
запустил helper. Первый P11 штатно отказал из-за активного захвата D455;
после обычного STOP тот же installer завершился. Оба просмотра восстановлены.
В Core подтверждено живое1280×640; настройка recovery включена через карточку,
readback enabled=true/preview_wanted=true/recording0. REC01 USB out/in без
Power и возврат SDK/preview ещё требуют физического теста. Сборка и установка
не заменяют эту приёмку. Текущие версии — Node0.8.20/X40.1.3-7.
## WAKE01 — первый успешный Bluetooth wake с возвратом Android
Ubuntu выполнила один адресный20s wake advertisement при оставленном USB.
+8
View File
@@ -30,6 +30,14 @@ Node0.8.19 bundle пока остаётся0.1.3-3; его обновление
## Очередь реализации
**REC01 в работе:** код per-instance wake/preview recovery и настройка Core/Node
реализованы; B15 model0.1.3-7 прошёл75 Ubuntu tests. Node0.8.20 и X40.1.3-7
установлены штатно; общая UI активирована в Core, identities сохранены.
Оба просмотра возвращены, recovery включено через карточку X4. Ближайшее
действие — реальный USB out/in без Power с возвратом SDK/preview, затем
повторные циклы и проверка отмены. Аппаратная приёмка остаётся открытой.
Архитектура и границы — в docs15.
**Актуальный результат WAKE01:** один адресный Bluetooth wake с Ubuntu
разбудил X4 при подключённом USB; камера сама вернулась в Android/SDK,
владелец подтвердил экран. Node открыл прежний instance, D455 сохранила поток.
@@ -0,0 +1,71 @@
# X4 — восстановление подключения и просмотра
REC01 / B15, 10.09.2026. Продолжение принятого WAKE01. Штатно установлены
Node 0.8.20 и X4 0.1.3-7, общая UI активирована в Core. Настройка включена
через Core; физический USB out/in и автоматический возврат ещё не приняты.
## Поведение и полномочия
В существующей карточке каждой X4 есть отдельная настройка восстановления.
По умолчанию выключена. Для включения камера должна быть подключена по USB;
оператор подтверждает включённое на самой X4 «Пробуждение по Bluetooth».
USB disappearance не различает кнопку Power и потерю кабеля: перед намеренным
выключением оператор отключает восстановление. Настройка и её отключение
доступны через один контракт Core/Node, включая отключённую камеру.
Отдельный broker хранит для каждого полного device_id разрешение wake,
намерение просмотра, число попыток и сессию последней попытки восстановления
preview. После исчезновения выдерживается 8 секунд; максимум три wake-попытки
с порогами 8/40/100 секунд от потери связи. Неизвестный результат расходует
попытку. Перезапуск не обнуляет счётчик. Минута устойчивой связи обнуляет его;
оператор может отдельно выключить и снова включить восстановление.
Preview восстанавливается один раз в новой SDK session, только при сохранённом
намерении START и подтверждённом recording=0. STOP отменяет намерение, в том
числе без камеры. Повтор старого START receipt после STOP не возобновляет
намерение. Для автоматического START сохраняется отметка до вызова и отдельный
OperationRequest; unknown не повторяется в той же сессии. Record/photo/settings
и SD-команды не входят в алгоритм восстановления. Существующий media broker
закрывает источники/peers исчезнувшей SDK session; LiveViewport работает с новой.
## Граница Bluetooth и установка
Новый `mission-core-insta360-wake.service` — отдельный root helper с Unix socket,
kernel peer credentials допускают только root и UID model broker. Нет public
listener, SDK loading, USB writes, произвольных serial/path/command arguments.
При включении helper сам читает единственный полный serial из текущего USB
binding и сохраняет в root-only StateDirectory. API принимает только device_id,
boolean control либо attempt UUID. Известные совпадения radio suffix запрещены.
Один adapter lock сериализует wake для разных камер. Helper независимо
сохраняет до трёх attempt UUID за десять минут до публикации; повтор UUID
не переигрывает команду. Он запускает только установленный ble_wake.py с
private stdin. При отключении настройки завершается только child этой камеры.
Child SIGTERM снимает рекламу в finally; BlueZ удаляет её и при потере private
D-Bus owner, advertisement имеет собственный Timeout20s. Parent ограничивает
child45s; последующая установка защищена общим lifecycle lock.
От WAKE01 изменено только требование ранее сопоставленного BLE address:
для runtime оно необязательно, потому что wake адресуется USB serial suffix,
а выключенная X4 не обязана рекламироваться сама. Без сопоставленного адреса
helper не отключает никакие новые BLE connections. Неизвестное соединение
сохраняется и отмечается cleanup error; успех требует прежнего полного serial
в USB SDK. Ни discovery, ни Pair, ни GATT writes, ни глобальная настройка
адаптера не добавлены. Factory Pairable/Discoverable или занятый advertiser
дают ограниченный отказ; helper не перенастраивает BlueZ автоматически.
Model 0.1.3-7 владеет helper, service, broker recovery и их зависимостями
bluez/python3-dbus/python3-gi. prepare запускает сервис; prerm останавливает
его в общей процедуре quiesce. Новых apt/pip/chmod/service edits вне пакета нет.
Root serials/raw reports и broker intents/receipts не попадают в публичный
inventory или Git. Удаление пакета сохраняет журналы, не трогает SD-карту.
## Проверка
Synthetic tests проверяют default-off, независимые instances, границы попыток,
restart budget, stable reset, offline cancellation, запрет SD replay,
unknown preview receipt, сериализацию adapter, точный OS enrollment,
collision/SDK-owner guards и подтверждение camera-side prerequisite.
Сборка model и Node выполняется только существующим versioned artifact на Mini.
Фактические UTC/monotonic/hashes, установка и аппаратный итог — в ledger07.
Успех WAKE01 не заменяет REC01, несколько реальных камер или clean Ubuntu.