Implemented this in Commit dcbe9fecf.
It's a wierd one, I had to cobble it together from various existing checks and variables in LemGame. The code is somewhat counter-intuitive in that I had to say "if not Lem Selected" when I thought it would be "if Lem Selected", but it could be that something is reversing the logic somewhere else. I'd like to investigate it further and get to know exactly what's going on in case it can be refined/improved.
Anyway, we now have an "assign fail" sound! At the moment it's the "builder-running-out-of-bricks" sound (ting.wav) but pitch shifted up slightly so it's discernable from the actual builder brick tone. Eventually, I'll replace this with a dedicated sound that can then be user-customised by replacing it with whatever sound you like.
For steel checks, it's the "destructive-skill-has-just-hit-steel" sound (chink.wav). It's probably best to keep this one as-is, since it makes sense to let the player know that the reason they can't assign the skill is because there's steel. For any other type of failed assignment (trying to assign a Builder to a lem that's already building, any permanent skill to an athlete that already has that permanent skill, Bashers whilst a lem is falling, Laserers to a Blocker, etc, etc) it's the default assign fail sound as described above.
Hopefully, I'll get a dedicated sound sorted in time for the release of 2.1 (sooon!)