Duh! you need to set #not_empty to a true value. That will teach me to change tested code right before posting it.

So it should be $elt->parent->set_att( '#not_empty', 1) if $elt->parent;

regarding the update: in the code I wrote, the twig is purged after each element, that's why you need the #not_empty attribute, because within the twig handler, every single element appears empty, except if it contains text.