---
name: dag_resolve_env
kind: function
lang: go
domain: core
version: "1.0.0"
purity: pure
signature: "func DagResolveEnv(dag DagDefinition, environ []string) DagDefinition"
description: "Resuelve referencias a variables de entorno (${VAR} y $VAR) en un DagDefinition. Mergea environ del sistema con dag.Env (dag.Env tiene precedencia), y sustituye en Command, Script, Dir, Args y Env values de cada step. No muta el DagDefinition original."
tags: [dag, env, substitution, variable-expansion, pure]
uses_functions: []
uses_types: [dag_definition_go_core, dag_step_go_core]
returns: []
returns_optional: false
error_type: ""
imports: [strings]
params:
  - name: dag
    desc: "DagDefinition parseado con posibles referencias ${VAR} en sus campos"
  - name: environ
    desc: "lista de strings KEY=VALUE del entorno del sistema (tipicamente os.Environ())"
output: "nuevo DagDefinition con todas las referencias de variables sustituidas por sus valores"
tested: false
tests: []
test_file_path: ""
file_path: "functions/core/dag_resolve_env.go"
---

## Ejemplo

```go
dag, _ := DagParse(yamlData)
resolved := DagResolveEnv(dag, os.Environ())
// resolved.Steps[0].Command tiene ${PROJECT_DIR} sustituido
```

## Notas

Funcion pura. No muta el DagDefinition de entrada — retorna una copia con los campos resueltos. Precedencia de variables: environ base < dag.Env < step.Env. Sustituye tanto ${VAR} (con llaves) como $VAR (bare). Si una variable no existe en el entorno, se deja sin sustituir. Los campos sustituidos son: DagDefinition.WorkingDir, Env values del DAG, y por step: Command, Script, Dir, Args, Env values.
