In my spare time I created a library in Ruby that mimics something I needed at work. I call it PlanMachine9 (from outer space), and you can find what I threw together here: http://phrogz.net/RubyLibs/PlanMachine9/ I'm not ANNouncing it yet, because it's not packaged up or polished at all at this stage. I'm mostly trying to gauge interest before I potentially waste time doing that. Do any of you look at this and say "Oh, yeah, that would work really well for me to do____!" If so, I'd be interested in feedback around some aspects of it: * Should state transitions resulting from events be synchronous to the event firing, or should events be queued up and processed during a (timed or explicit) call to #update? * Is the env variable interesting, or would you always be replacing the machine-specific variables with direct access to variables in other code? (For example, the 'obstacles hit' count used in the example on that page could totally be an instance variable tracked on the Elevator class itself, removing any need for 'env' altogether.) * Are there any aspects of the precondition/postcondition/prelude/ postlude/action setup that you think you would never use, that I should remove to simplify things?