Versions and publishing
A protocol has versions with a lifecycle:draft → in_review → active → superseded/discarded. Only one version is active at a time; calls always use the active version. Before activation, each version passes a publish validation that checks flow consistency (targets exist, no cycles, decision branches with a guaranteed exit, valid score bands, etc.).
A version holds: questions, flow phrases, flow webhooks, and decision nodes, plus version-level catalogs (custom variables, score bands, alert rules, guardrails, system phrases, and scheduling config).
The flow as a graph of nodes

The path is governed by node order and by conditional rules that decide, at each step, what comes next.