Given a list of workflow step definitions as strings, implement a function that returns the executable steps in a valid order. Each definition has the form "step_name|deps|command", where deps is a comma-separated list of prerequisite step names or - if there are none. A step is executable only if all of its dependencies exist and appear earlier in the returned order. If the workflow contains a cycle, a missing dependency, or duplicate step names, return an empty list.
1 <= len(steps) <= 10^4| separators2 * 10^4