wait_until's catalog scalar_shorthand_key is condition. The parser stores a bare scalar body under id because a shorthand that names a gate key must not land in params (_decompose_action), but the emitter's shorthand_key has no matching fallback, so on round trip it cannot collapse the scalar and writes wait_until: {id: ...}, which esphome rejects.
Fix: give the emitter the same rule the parser applies (gate key or branch name as shorthand falls back to id), in one shared helper so the two cannot drift, and pin the round trip with a test.
Pre-existing, surfaced by esphbot while reviewing #2793 (closed).
wait_until's catalogscalar_shorthand_keyiscondition. The parser stores a bare scalar body underidbecause a shorthand that names a gate key must not land inparams(_decompose_action), but the emitter'sshorthand_keyhas no matching fallback, so on round trip it cannot collapse the scalar and writeswait_until: {id: ...}, which esphome rejects.Fix: give the emitter the same rule the parser applies (gate key or branch name as shorthand falls back to
id), in one shared helper so the two cannot drift, and pin the round trip with a test.Pre-existing, surfaced by esphbot while reviewing #2793 (closed).