Every problem the runtime would refuse a Flow agent's steps and paths for, as messages that name
the steps. Empty when the flow can run.
The flow is compiled with CompileFlowToTaskGraph and the result validated with
ValidateTaskGraphSpec, exactly as a Flow agent is before it runs, so a flow this passes is one
the runtime runs and a flow it refuses is one the runtime refuses. That covers every Decision step
the flow can reach: its configuration, its key, each condition that reads decisions.<key> (the
key, the question, and whether that question's answer has the field read), and a fork on a Choice
question that has no path for one of its options.
Two checks come from outside the compiler, because it cannot see what they catch:
a path whose origin or destination names no step, which the compiler drops without a word and
AgentSpecSync cannot save;
a key two Decision steps share when the flow cannot reach one of them. The compiler checks only
the steps it compiles, but the in-run walker checks every step, since it can start at any.
Names behind IDs are not resolved here: each ID stands in for its own name. The Architect checks
a spec's actions, and a Decision step's prompt, separately. It also accepts a step whose sub-agent
or inline prompt has no ID until the spec is saved, so a placeholder stands in for that ID.
Every problem the runtime would refuse a Flow agent's steps and paths for, as messages that name the steps. Empty when the flow can run.
The flow is compiled with
CompileFlowToTaskGraphand the result validated withValidateTaskGraphSpec, exactly as a Flow agent is before it runs, so a flow this passes is one the runtime runs and a flow it refuses is one the runtime refuses. That covers every Decision step the flow can reach: its configuration, its key, each condition that readsdecisions.<key>(the key, the question, and whether that question's answer has the field read), and a fork on a Choice question that has no path for one of its options.Two checks come from outside the compiler, because it cannot see what they catch:
AgentSpecSynccannot save;Names behind IDs are not resolved here: each ID stands in for its own name. The Architect checks a spec's actions, and a Decision step's prompt, separately. It also accepts a step whose sub-agent or inline prompt has no ID until the spec is saved, so a placeholder stands in for that ID.