Yes, I understand what you are saying, but what I disagree with is that the overhead would be acceptable to beginners. The easy way of doing this, is with a swap command, if it is a swap (and there are no weight limits), but in the simple case that you want a cut scene not to happen until the player has room in their hands, then you have all of that code to write. I could write a simple function to try to semi automate some of this but I don't think it would be generic enough.
Adventuron Classroom is for beginners to coding, they don't want to think about rollback of a failed transaction.
Considering a command like this (not for this jam though), in the background it will issue the has_not_created logic, and the create commands too, and will not run the standard command unless hands are free. Needs more thinking about :
: receive {
receive = [key, lamp]
// Optional, if not provided then this command does nothing if we cannot receive
on_hands_full {
: print "Come back when you have some hands free, I have some things for you.";
}
: print "Here is the key to the shed";
}