One named slot: declared or raw, with its children and its own findings.
outcome_key is the container's slot_outcome_key declaration for
this slot, normalized (ADR-0005 decision 10, proposed 10f) - the config
key each child in this slot carries its outcome under, or nil when
the type declared none. It is here as well as on the children so that a
consumer can ask the question of the slot without walking into it.
condition is the source text of the condition this slot is subject
to: the parent type's own :expression config field keyed by this
slot's name, read through the value_path ADR-0002 decision 7 was
amended to carry. nil when the type declares no such field, when the
author has not written one yet, or when the value stored there is not a
non-empty string.
It is resolved here for the reason Node.outcome is: the rendering side
reads one string and never learns that core.branch is the type whose
arms are guarded. A host type that keys an :expression field by one of
its own slot names gets the same chip, and nothing here tests a type name
to decide it.
Summary
Types
@type t() :: %StatifierBlocks.ViewModel.Slot{ arity: StatifierBlocks.BlockType.slot_arity() | nil, children: [StatifierBlocks.ViewModel.Node.t()], condition: String.t() | nil, declared?: boolean(), findings: [StatifierBlocks.Finding.t()], label: String.t(), name: StatifierBlocks.Block.slot_name(), outcome_key: String.t() | nil, style: :primary | :secondary | :failure | :tray }