Decision Element Builder
Properties
Which runs first when an epoch coincides with this element's warm-up (§4.6.4). build() checks myEpochPriority against the element's warmUpPriority and rejects a combination that contradicts what is declared here.
Functions
§4.4.5 — declare that a group of already-declared levers must be written as one act.
A budget that is itself a state (§4.4.6.1) — "ship no more than is on hand". The descriptor records envelope as the declared total and flags the constraint state-dependent, because a serialized descriptor cannot carry a lambda.
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.
As above, for a Counter — whose accumulation is its value (§4.2.5).
Declare a reward term: a rate times an accumulated quantity, differenced between epochs (§4.2.5).