Execution model

Connecties, branching en runtime uitvoering

Deze pagina legt uit hoe de graph wordt opgebouwd en uitgevoerd: connection schema, branch routing, context-overdracht en validatie.

Connecties, branching en runtime uitvoering overzicht
Connecties, branching en runtime uitvoering overzicht.

1. Connection schema

Veld Type Required Beschrijving
idstringYesUnieke connection ID.
sourceIdstringYesBron node ID.
targetIdstringYesDoel node ID.
branchstringNo*Toegestane waarden: default, if, else. Essentieel bij condition-like nodes.
labelstring|nullNoUI-label; legacy labels YES/NO worden naar branch gemapt.
{
  "id": "edge_cond_if",
  "sourceId": "cond_revenue_down",
  "targetId": "action_medium",
  "branch": "if",
  "label": "YES"
}

2. Branching regels

Condition en LLM condition

  • Node types condition en llmcondition kiezen tijdens runtime een if- of else-branch.
  • Verbind alleen de branches die downstream werk moeten uitvoeren.
  • Als de gekozen branch niet verbonden is, eindigt de flow geldig op deze node.

Legacy mapping

  • YES of IF label wordt gezien als if.
  • NO of ELSE label wordt gezien als else.
  • Andere waarden vallen terug op default.

Branch selectie tijdens runtime

  • condition: evaluatie true = if, false = else.
  • llmcondition: modeloutput wordt naar boolean geparsed, daarna idem.
  • Als operands ontbreken in condition, route valt deterministisch terug op else.
  • Een if- of else-branch mag naar action, sql, elementnode, llmresponse of een andere bewuste vervolgstap gaan. Verifieer bij Element branches altijd dat element.elementId naar het juiste Element wijst.
  • Elke node mag terminal zijn. Een action of sql node kan dus ook midden in de graph staan en daarna via een default-edge doorgaan.
  • llmresponse route is altijd default.

3. Runtime traversing en context

Entry node selectie

  • Eerst alle nodes met 0 inbound edges.
  • Als die er niet zijn: trigger nodes.
  • Daarna: datasource nodes.
  • Geen entry gevonden = runtime error.

Context merge gedrag

  • NodeContext reist mee over alle edges.
  • Bij meerdere inbound paden worden contexten samengevoegd.
  • Filters, metrics, math-values, llm traces en history blijven beschikbaar downstream.
  • Template tokens lezen uit deze merged context.

Safety guards

  • UI voorkomt cycles bij connecteren via wouldCreateCycle().
  • Runtime heeft een traverselimit: max(len(nodes) * 10, 100).
  • Overschrijding geeft error: Automation traversal exceeded safety limit.
  • Test runs geven notificatieresultaten terug voor notificatie-nodes en terminal_node resultaten wanneer traversal eindigt op een niet-notificatie-node.
  • Tenant-admins met datasource-managementtoegang kunnen recente runs en redacted input/output per node inspecteren via Admin → Autoflow-runs.

Geplande run auth

  • Opslaan of testen controleert of de maker de automation mag configureren; dat is niet genoeg voor latere scheduled runs.
  • Scheduler start een geplande run met een kortlevend intern on-behalf-of token voor de opgeslagen owner/effectieve gebruiker.
  • Runner stuurt dezelfde access context door naar datasource nodes, data-worker-agent, Element execution, Dashbot, dashview-mcp en andere tool backends.
  • Ontvangende services valideren de context en halen actuele permissies en forced filters op voordat zij data lezen of tools uitvoeren.
  • Als de gebruiker na het aanmaken toegang verliest of forced filters wijzigen, gebruikt de volgende run de nieuwe scope of faalt hij binnen die scope.

4. Validatie in AI flow generatie en runtime

Laag Regel Typische fouttekst
Blueprint validatie Meerdere uitgaande condition edges voor dezelfde branch zijn dubbelzinnig. duplicate outgoing branch connections: if
Schema validatie Node moet id hebben. nodes.*.id: Field required
Schema validatie Connection moet sourceId en targetId hebben. connections.*.sourceId: Field required
Runner Node IDs moeten uniek zijn. Duplicate node id ...
Runner Edge moet naar bestaande nodes wijzen. Connection references unknown source/target node

5. Build checklist voor stabiele flows

  1. Gebruik op elke node een expliciete id (geen alleen key).
  2. Gebruik in connecties altijd sourceId en targetId.
  3. Zet bij condition/llmcondition if en/of else edges alleen voor branches die echt door moeten lopen.
  4. Controleer dat nodes zonder uitgaande edge bewust terminal zijn; elke node type mag de laatste uitgevoerde node zijn.
  5. Voer Test uit na iedere branch- of metricwijziging.
  6. Gebruik via MCP validate_autoflow voor de payload en test_autoflow voor runtimegedrag.
{
  "connections": [
    { "id": "edge_1", "sourceId": "metric_current", "targetId": "cond_drop", "branch": "default" },
    { "id": "edge_2", "sourceId": "metric_previous", "targetId": "cond_drop", "branch": "default" },
    { "id": "edge_3", "sourceId": "cond_drop", "targetId": "action_medium", "branch": "if" },
    { "id": "edge_4", "sourceId": "cond_drop", "targetId": "action_ok", "branch": "else" }
  ]
}