                                  (flow-to-none-gen))))]
     (let [fcs (into [] (concat fcs-other fcs-none))]
       (is (thrown? Exception (v/validate-flow-conditions fcs []))))))
+
+
+(deftest short-circuit-placed-before-other
+  (checking
+    ":flow/short-circuit? true should be placed before other conditions"
+    (times 50)
+    [fcs-other (gen/not-empty
+                 (gen/vector (->> :a
+                                  (flow-condition-gen))))
+     fcs-short-circuit (gen/not-empty
+                        (gen/vector (->> :a
+                                         (flow-condition-gen)
+                                         (flow-short-circuit-condition-gen ))))]
+    (let [fcs (into [] (concat fcs-other fcs-short-circuit))]
+      (is (thrown? Exception (v/validate-flow-conditions fcs []))))))

                     (flow-condition-gen)
                     (flow-to-tasks-gen)
                     (false-flow-condition-gen)
                     (short-circuit-flow-condition-gen)))
    true-1
    (gen/not-empty (gen/vector (->> :a
                                    (flow-condition-gen)
                                    (flow-to-tasks-gen)
                                    (true-flow-condition-gen)
                                    (short-circuit-flow-condition-gen))))
    false-2
    (gen/vector (->> :a
                     (flow-condition-gen)
                     (flow-to-tasks-gen)
                     (false-flow-condition-gen)
                     (short-circuit-flow-condition-gen)))
    mixed-1
    (gen/vector (->> :a
                     (flow-condition-gen)

                  (gen/return {:flow/predicate ::false-pred
                               :pred/val false})))

(defn flow-short-circuit-condition-gen [base-gen]
  (merge-gen-maps base-gen (gen/return {:flow/short-circuit? true})))

(defn exception-flow-condition-gen [base-gen]
