pub fn resolve_value_reference(
expr: &str,
vars: &HashMap<String, String>,
) -> StringExpand description
§Fase 66.1 — resolve a VALUE-POSITION expression (a for … in <expr>
iterable, a return <expr>) against the runtime bindings. These positions
carry no frontend value_kind classification (unlike a §60 kwarg), so this
resolves the three reference forms a flow author writes, in order:
"${X}"/"${e.field}"/$name— string interpolation (incl. the §66 dotted field-access). Detected by a$anywhere in the expr.Step.output— a step’s output. Steps bind their output under their BARE NAME (pure_shape/ the §36.x.e contract), so a trailing.outputmaps to the step-name key. This is the canonical form an author writes forfor e in ClassifyEdges.output/return Step.output(the same.outputsugarresolve_named_arg_valuehandles for kwargs).name— a barelet/ flow-param / step binding.
Falls back to the verbatim expr when nothing resolves (a genuine literal).
Mirrors the persist field-value resolution (store_row → interpolate_vars)
so a reference resolves identically in EVERY value position (the §66.1 fix:
a for-iterable + a return previously did a bare exact-key lookup, so
ClassifyEdges.output / ${Summarize} reached the runtime as the literal).