captureTo

Where this element's transitions go (§4.8.2). The factory is called once per experiment, at beforeExperiment(), with the provenance a row needs to be written without a live Model — which is what lets a sink be tested standalone or write from another thread. The sink it returns is opened and closed for you, per experiment.

This is the declared form of capture, for a model that always records. It is now one line over the general mechanism — it attaches a RollingSink — so it is no longer the only way in: DecisionElement.attachTransitionSink adds a sink to a model that is already built, from main() or from a tool layer, and ksl.modeling.decision.capture.DecisionCapture does it for every decision element in a model at once.

Calling it twice attaches two sinks and both record, which is what it reads as. It used to overwrite, so the first declaration was silently discarded.