Arms

object Arms(source)

Functions

Link copied to clipboard
fun blockers(experiment: Experiment, hypotheses: List<Hypothesis>, environment: Environment): List<Blocker>

The members of a manual experiment that no intervention can set, each with why.

Link copied to clipboard
fun config(base: ArmBase, interventions: List<Intervention>, label: String): ConfigResult

Applies interventions to base in order. In a container each one is also applied alone and checked against the unchanged control: its attributes must be mirrored and the image, command, run flags or Dockerfile steps must differ, so an intervention that does not reach the container is refused with the manifest's reason instead of being counted as a change.

Link copied to clipboard

The diff between two captured capsules: what 6d3 measures once both arms ran.

Link copied to clipboard
fun fromExperiment(experiment: Experiment, hypotheses: List<Hypothesis>, passing: Capsule, failing: Capsule, command: String, environment: Environment, digests: Map<String, String> = emptyMap(), mechanisms: Map<String, String> = emptyMap()): ArmSet?

The arms of a planner experiment: the passing side unchanged against the passing side with every flipped hypothesis moved to the failing capsule's values. Members that no intervention can set, or that the container does not mirror, become blockers and the experiment is not executable. A manual experiment has no arms and returns null; its instructions are the experiment.

Link copied to clipboard
fun pair(base: ArmBase, left: List<Intervention>, right: List<Intervention>, labels: Pair<String, String> = "control" to "treatment", mechanisms: Map<String, String> = emptyMap()): ArmSetResult

Builds a control and treatment pair, or an A and B pair when left is not empty.

Link copied to clipboard
fun predict(left: RunConfig, right: RunConfig): ArmDiff

The diff the interventions are expected to produce: attribute changes between the two capsules (static only), differing flags, files and steps, and, when the two containers have different base images, the members an image swap brings along: bundle attributes the image supplies rather than run.sh, and the components it ships (tzdata, CA bundle, shell).

Link copied to clipboard
fun verdict(diff: ArmDiff, primaries: List<String>, mechanisms: Map<String, String> = emptyMap()): BundleVerdict

The bundle rule. One non-volatile attribute that is the one the experiment set is BundleVerdict.Isolated; several, or one that is not the target, is BundleVerdict.Bundle with every member listed and the members not yet isolated (all but the target when exactly one attribute was set, else all of them); none is BundleVerdict.Empty. mechanisms maps an attribute to the sentence of a rule or probe for it that agreed; it is used only for the single target.