Flow composition languages permit the construction of longrunning transactions from collections of independent, atomic services. Due to environmental limitations, such transactions usually cannot be made to conform to standard ACID semantics. We propose set consistency, a powerful, yet intuitive, notion of consistency for long-running transactions. Set consistency specifications are written as predicates over the atomic actions of a process and require that the set of atomic actions executed along any system trace must satisfy the set consistency requirement. Set consistency generalizes cancellation semantics, a standard consistency requirement for long-running transactions, where failed processes are responsible for undoing any partially completed work, and can express strictly stronger requirements such as mutual exclusion or dependency. We believe that such predicates are both intuitive for developers and useful for representing real world constraints. We formalize a core calculus...