Repository navigation
Releases: uurf/ml_fleet_tools
Release list
v1.4.7 — local-liaison playbook set
Bilingual EN/JA playbooks for the three trainable liaison scenarios: deploy an APK, morning status→dashboard, EOD shutdown/reboot. All open with a Red/Blue show-set gate, lead with the show SSID, keep on-screen text English. deploy: wildcarded APK path, real ~25min/no-progress note. Docs only — ./update.sh to get them.
v1.4.6 — registry sync, asset-map fixes, deploy playbook, BLUE 1.1
ml_registry_sync.sh (canonical inventory bulk-build); asset_serial_list.csv corrections (120/151/317, matches registry); bilingual deploy_apk_playbook.html; KAGAMI_BLUE SHOW_EXPECTED_APK 0.1→1.1. Operators: ./update.sh when not mid-flash.
v1.4.5 — correct v1.4.3 (kiosk 1.0, RED app 1.1)
Fixes the erroneous v1.4.3 kiosk bump. Kiosks back to 1.0r/1.0b; RED show app SHOW_EXPECTED_APK 0.1→1.1 (no show suffix). BLUE app unchanged (0.1).
v1.4.4 — OS allow-list (1.12.1 accepted)
1.12.1 is expected drift (revives input-dead 1.4.1 devices). SHOW_EXPECTED_OS now a space-separated allow-list ("1.4.1 1.12.1"), honored by ml_status + dashboard. Open: confirm ADB parity on 1.12.1 via ml_provision.sh --check when network's back.
v1.4.3 — registry wiring + kiosk 1.1
Fleet deadlocked (servers out / APs rigging) — safe merge window.
- v1.4.2: ml_provision upserts serial→show to the canonical registry at provision_complete (validated live; warns on failure, doesn't abort).
- v1.4.3: SHOW_KIOSK_VERSION 1.0→1.1 (red 1.1r / blue 1.1b). Drop kiosk-…-v1.1{b,r}.apk in builds/. Devices on 1.0 flag as drift until redeployed.
Operators: ./update.sh when not mid-flash.
v1.4.1 — fleet-scale reliability + SHOW_SUBNET (+ staged migrate/registry)
Main caught up to dev. This is the batch that made fleet collection/status/shutdown reliable at scale (validated live today: red 48/48, blue 70/70 clean, shutdown one-pass).
Live-validated
ml_statusfleet-scale fix — builds its work list from the device file (no false-OFFLINE), parallel probe+connect, low per-device parallelism (ML_STATUS_PARALLEL, default 8), surfaces unreadable devices as ERROR + a post-collection sweep soTotalalways reconciles.- stdin-eat fix — backgrounded
adb shellwas consuming the loop's device list, so only ~MAX_PARALLEL devices survived a sweep. Fixed acrossml_status+ml_deploy(run_parallel/shutdown/push). SHOW_SUBNET(per-show; both shows172.16.40.0/22) + fixeddetect_subnet(no longer caps at /24) → no under-scan.ml_scan/ml_statusreset the adb server at start (ML_NO_KILLSERVER=1to skip) → no "unknown"/contention wall.
Staged — present but NOT yet live-validated (do not use for real ops until one supervised test)
ml_show_migrate.sh— RED↔BLUE single-device migration (USB; deploy→confirm→provision→inventory-move;--dry-run).apps_script/registry.gs— device→show membership web app (one row per serial; unwired reference — deploy when ready).- Per-show inventory foundation (
SHOW_INVENTORY_FILE→inventory/<show>.csv).
Operators: ./update.sh when not mid-flash. Known deferred: ml_deploy locate is silent on provisioned devices (notification sound disabled by provisioning).
v1.3.1 — ml_deploy locate (beep a device to find it)
Added
ml_deploy.sh locate <ip>— beeps a device repeatedly (6× default;LOCATE_BEEPS=N) so you can find it physically, without powering it off/rebooting. Usescmd notification post(the only adb-shell sound path on the locked ML2 user build). Names the device# from the show inventory; refuses an unauthed device (for those, shut down the others and find the one still on).
Operators: ./update.sh (when not mid-flash).
v1.3.0 — show config finalized + per-show inventory + status table fix
Config (confirmed packages/versions)
- RED
com.tindrum.kagami.red, BLUEcom.tindrum.kagami.blue;SHOW_EXPECTED_APK=0.1both; kiosk1.0r/1.0bpinned (supervisor bumps as builds iterate). SHOW_REMOVE_PACKAGES= other show's app + obsolete set (kagamu,anark,medusa,thelife); exact ids replace the old fuzzy name-matching.
Fixed
ml_statustable no longer smears when a cell fails (ANSI width miscount). Battery tidied to95%.
Added
- Per-show inventory:
SHOW_INVENTORY_FILE→inventory/$SHOW.csv;build_canonical_map.pywrites per-show inventory files from scans.
Operators: ./update.sh (when not mid-flash).
v1.2.8 — reliable shutdown + ops/inventory hardening
Daily-ops reliability batch.
Fixed
shutdownnow verifies + retries: probe 5555 → connect → power off → re-probe → retry stragglers (max 4 passes) → report any still up. One command, fleet actually down. Honors-d <ip>.connectprobes ports in parallel first and skips powered-off devices in ~2s (was hanging ~60s each → ~an hour with many off).run_parallelprints + counts every device (jobs finishing during throttling were counted silently; totals now reconcile). Benefits deploy/deploy-all.ml_os_flashdevice selection is clutter-proof: ignores WiFi adb (ip:5555), honorsANDROID_SERIAL, per-serial auth — a busyadb devicescan't block or mis-target a flash.
Tooling
utilities/build_canonical_map.py— join fleet scans → canonicalserial→device#+ reconciliation buckets.apps_script/reconcile_tracking.gs— durable Red↔Blue tracking-sheet maintenance.
Operators: ./update.sh (when not mid-flash).
v1.2.6 — per-show kiosk suffix check
Kiosk is one shared package (com.tindrum.kiosk) built per show as 1.Xr (RED) / 1.Xb (BLUE) — suffix = show, X = build.
Added
SHOW_KIOSK_SUFFIX(r/b).ml_status.shalways enforces the device kioskversionNameends with this show's suffix → flags a wrong-show kiosk (e.g. BLUE kiosk on a RED device) asWRONG-SHOW, independent of the exact-version check. Dashboard +--json(kiosk.expected_suffix) are suffix-aware.
Changed
SHOW_KIOSK_VERSIONis now drift-only and blanked during build churn so the dashboard doesn't false-flag every incrementing build. Pin it once builds stabilize; the wrong-show check works regardless.
Developer note
Kiosk versionName must carry the suffix and increment (1.0r → 1.1r → …, 1.0b → 1.1b → …); keep versionCode incrementing too.
Operators: ./update.sh when not mid-flash.