Design notes#

Five pages on decisions a space declaration forces, and what each option costs. The user guide shows the mechanisms running; these pages are about choosing between them.

They can be read in any order. The first two have the largest effect on the resulting space.

Choosing a mechanism

Which of bool + .when(), .choice(), .space() and a bool-per-item subset describes the situation, and why the choice is permanent.

Choosing a mechanism
Structured values

Declaring a value whose content is a structure, where the invariant lives, and what moving it inside a custom type costs.

Structured values
Predicate transparency

What margins, remaining_domain narrowing and bound-origin tightening cost as a predicate becomes opaque.

Predicate transparency
Rejection sampling

Why dense combinatorial constraints collapse the acceptance rate, the two remedies that apply, and the one that does not.

Rejection sampling
Anchors

Named whole configurations against per-parameter defaults, and why deriving one from the other beats restating it.

Anchors