So, the curious thing here is that, although every name has a trunkname (even simple cards), and a card's trunk is based on its codename, not all cards have trunks.  For example, if "foob" doesn't exist, then Card.new(:name=>'foob+*right').trunk is nil.

I suspect that you took out the "if trunk" bit thinking that all cards have trunks, but that's evidently not quite right.  (I added a test that will reproduce the bug if you rollback the change above)