ⓘ Reference
A Rail is a money-movement contract — one well-known way value flows between roles. ACH origination, wire settlement, intra-day pool balancing, fee debits all live as Rails. Every transaction must match a rail by (rail_name, source_role, destination_role).
Required: name (unique identifier; chains, templates, and limit schedules all reference rails by this name — it doubles as the L1 matview's rail_name column value). Endpoint roles (source_role / destination_role) are edited on the rail itself after it's created — required for the validator to accept the rail as connected.
Single-leg rail requires:
leg_role+leg_direction(Debit/Credit/Variable).- A reconciler attachment — non-aggregating single-legs can't reconcile their own drift (SPEC §S3 + C3). Either attach to a TransferTemplate (closes its
expected_net) or to an aggregating Rail (sweeps into its bundle). The Reconciler picker fieldset below handles this atomically with the save (BB.1). Exception: aggregating single-legs are self-reconciling and skip this requirement. - Variable-direction single-legs MUST attach to a TransferTemplate (validator C3); they can't sweep into an aggregating Rail. The template's
expected_netdetermines this leg's amount at firing time.