From f092078a7511f11101d980b89670453c9491b0ec Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Thu, 10 Sep 2026 12:59:24 -0600 Subject: [PATCH] docs(graph): clarify runtime guard wording and nested paths for agent inputs --- Graph-Agents.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Graph-Agents.md b/Graph-Agents.md index 6dab61d..26e7c10 100644 --- a/Graph-Agents.md +++ b/Graph-Agents.md @@ -309,7 +309,9 @@ resolved strictly (a missing key fails the node before the child starts, with - A value that is exactly one reference (`"{{inner_width}}"`) hands the parent's JSON value through unchanged: numbers stay numbers, lists stay lists, objects stay objects. Scripts in the child see the real type; - the child's own templates stringify it the usual way. + the child's own templates stringify it the usual way. Nested paths work + the same way (`"{{limits.width}}"` hands through `limits.width` with its + type intact). - Anything else (`"Repo: {{repo}}"`, `"{{a}}-{{b}}"`) renders to a string. - **`null` is a value, not an absence.** A lone `"{{k}}"` whose parent value is `null` overlays the child's default with `null`. Because `state_updates` @@ -318,7 +320,11 @@ resolved strictly (a missing key fails the node before the child starts, with `x: null`, not its own default. **Two things are rejected**, both at load time by the validator and again at -runtime for graphs running with `validate_before_run: false`: +runtime for graphs running with `validate_before_run: false`. The validator +messages below name the node; the runtime guards name the agent instead +(`agent '' has no graph.yaml; …` / `agent '': `inputs.initial_prompt` +is reserved …`) and arrive wrapped in the usual `at node '': Agent '' +failed:` context, so the node is still recoverable from the error chain. - `inputs:` on a node whose `agent` has a `config.yaml` but no `graph.yaml` (`agent node '': `inputs:` requires agent '' to be a graph agent