Okay, doing this: watch bluetoothd; if it pegs a core and stays there while advertising is up, restart the bluetooth service, and only touch the shared radio if that alone doesn't clear it.
This might happen: a connected phone drops and reconnects; discovery blips for a few seconds; on Zero 3W / A7Z the shared radio can make Wi-Fi hiccup.
This might not happen: recording is not interrupted and no footage is lost.
Nothing might happen: if bluetooth never stalls, it never fires. Pure insurance.
Restart the light service first, escalate to the radio only if needed best
Always bounce the whole radio — simpler, but blips Wi-Fi every time.
Okay, doing this: when a record attempt hits the stale-key block, set the leftover key aside and retry, so the next tap records.
This might happen: the hat records immediately — no power-cycle, no field visit.
This might not happen: nothing is deleted (the key is kept aside, never destroyed); the normal path is untouched.
Nothing might happen: a hat that never lost power mid-record has no stale key, so it never triggers.
Clear it in place, records on the next tap best
Heal only on the next reboot — what the current fix does; still needs a power-cycle.
Okay, doing this: drop the every-5s Wi-Fi check and update the app's connection status from NetworkManager's own change signals instead.
This might happen: the repeated background check disappears; the app still shows live connection status.
This might not happen: no change to the radio (it never scanned) and no change to how it auto-connects.
Nothing might happen: the operator sees the same status as before.
Event-driven from NetworkManager signals best
Just slow the check to ~15s — trivial, keeps the background work.
Read only when asked — simplest, but loses the live "Wi-Fi dropped" update.
Okay, doing this: the auto-enroll already works — on first internet a new hat installs Tailscale, joins with its one-time key, retries until it's on, then wipes the key. The change is to stop copy-pasting those ~150 lines into every board's first-boot script and keep one shared copy.
This might happen: one place to fix enrollment; the four board images stop drifting apart (they already have).
This might not happen: nothing changes in how a new hat actually enrolls — same steps, same behavior.
Nothing might happen: hats already on the tailnet are untouched; this only affects freshly-imaged cards.
One shared enroll unit every board image uses best
Leave it duplicated per board — works today, but drifts and has to be fixed four times.
Okay, doing this: if a hat's update state is stuck on "checking" past a timeout, reset it to idle automatically on the next check, instead of someone having to fix it by hand.
This might happen: a wedged hat can check and update on its own again; no manual intervention.
This might not happen: no change to a healthy update, and the safe A/B install + auto-rollback stays exactly as-is.
Nothing might happen: hats that never wedge never notice. The rest of the OTA is already clean — nothing else to simplify there.
Auto-reset a stale "checking" on the next check best
Keep resetting it by hand — what happens today.