There’s always one !done per command, so that one is expected.
As for the two !trap replies… It seems like the reason is a somewhat weird design of the way commands are validated. Maybe one error refers to the menu, while the other refers to the command in that menu not existing. Or maybe one of the !trap replies is kept for backwards compatibility reasons (notice that one doesn’t have the “category” property)… that I can’t quite put my finger on (I mean, most people just check for “any” !trap replies, not for replies matching a certain pattern).