# Defaults
Defaults are certified when struct_of or signature_of compiles the schema,
then rematerialized and validated whenever their key is missing.
A supplied key never runs its default recipe.
| Default | Each missing-key serving |
|---|---|
Scalar, date, time, None |
Reused; immutable |
| Enum member | Reused; singleton |
| List | New list, contents rematerialized recursively |
| Tuple | Contents rematerialized recursively |
| Dataclass instance | Reconstructed through its constructor |
default_factory |
Called again |
Factories run once for certification and once per serving. Instance reconstruction
runs __init__ and __post_init__; equality is preserved, internal aliases are
not. Tuple immutability does not cause mutable contents to be shared.
Recipes must be pure and deterministic, without shared mutable state or observable
side effects. Do not mutate recipe objects or the certified Field.default.
The core cannot enforce purity, but invalid values fail both at certification and
at serving, with a default path segment:
count: default: expected int, got str
Use field(default_factory=...) for mutable dataclass field defaults, as Python
requires. Function defaults have no such restriction, but fresh defaults apply
only through signature_of(fn).resolve(...) or .build(...). Calling the function
directly retains Python's usual shared-default behavior.