I'm sort of pondering a project in which I think a DSL would be a good
fit for user programmability to control transactional flow.  I'm
thinking about how the DSL might look, and have come up with something
like this:

    get :approval, :from => [:manager, :system_owner]
    if :approval == :ok
      get :information, :request => :clearance, :from =>
[:person_with_role, "Security Role"]
      modify :person, :with => [:clearance, :clearance_date => :now]
      notify :success => [:requestee, :requestor]
    else
      notify :failure => [:requestee, :requestor]
      finish
    end

    # unrelated to the code above
    push :change, :of => :cn, :to => :accounts, :where => ":attribute
== :old_cn"


It would expand much deeper, but for now, that's what I have.  Any
thoughts on how best to implement something like this, how I could
make it a little cleaner, and how I might deal with completing the
flow after a system failure would be much appreciated