"Flow" names the object kind, not the algorithm (stock vs flow: groups are
stock, trajectories are flow). Every trajectory detector returns a flow –
the temporal decomposition of the DAG into trajectories plus the confluence
tree – so this predicate accepts the result of sniff_trajectory_braid()
and of any future sniff_trajectory_<algo>() detector. is_flow() is the
cheap predicate; validate_flow() is the contract's authoritative checker.
See also
sniff_trajectory_braid(), validate_flow()
Other trajectory detection:
sniff_trajectory_braid(),
sniff_trajectory_channel(),
sniff_trajectory_dag(),
subset.birddog_flow(),
validate_flow()
