From c6ee0dc03b17323e9e8e7efac3a2c418cb7c613f Mon Sep 17 00:00:00 2001 From: Sebatian Rath Date: Mon, 19 Jan 2026 00:20:42 -0500 Subject: [PATCH 1/8] Improve comment --- core/graph.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/graph.go b/core/graph.go index e3f8889..9a12c3f 100644 --- a/core/graph.go +++ b/core/graph.go @@ -561,7 +561,6 @@ func LoadNode(parent NodeBaseInterface, parentId string, nodeData any, validate return nil, "", nil } - // 1. Check ID // We attempt to get the ID. If it fails, we record the error but CONTINUE // processing (if validating) to check Type, Inputs, and Outputs. id, idErr := utils.GetTypedPropertyByPath[string](nodeI, "id") @@ -571,7 +570,6 @@ func LoadNode(parent NodeBaseInterface, parentId string, nodeData any, validate } } - // 2. Check Type // If Type is missing, loading "makes no sense" as we cannot select a factory. // We must early out here. nodeType, typeErr := utils.GetTypedPropertyByPath[string](nodeI, "type") From 915defa8aa93b8c53063e682c9f319fc6a85ff28 Mon Sep 17 00:00:00 2001 From: Sebatian Rath Date: Mon, 19 Jan 2026 00:21:31 -0500 Subject: [PATCH 2/8] Reader is closed by http client instance --- nodes/http@v1.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/nodes/http@v1.go b/nodes/http@v1.go index bb389d2..ce6b1fd 100644 --- a/nodes/http@v1.go +++ b/nodes/http@v1.go @@ -105,14 +105,6 @@ func (n *HttpNode) ExecuteImpl(c *core.ExecutionState, inputId core.InputId, pre defer resp.Body.Close() } - // Ensure the input reader is closed in all cases. - // If closing the reader fails without a prior error, - // treat it as an error which is part of the connection op. - err = utils.SafeCloseReader(reader) - if err != nil && connErr == nil { - connErr = err - } - var dsf core.DataStreamFactory var statusCode int From f2ae1adc799c6c113ede8fb59bbfcb96b6b2d7a1 Mon Sep 17 00:00:00 2001 From: Sebatian Rath Date: Mon, 19 Jan 2026 00:22:33 -0500 Subject: [PATCH 3/8] Set node label to improve error messages --- core/graph.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/graph.go b/core/graph.go index 9a12c3f..02f87c0 100644 --- a/core/graph.go +++ b/core/graph.go @@ -580,6 +580,8 @@ func LoadNode(parent NodeBaseInterface, parentId string, nodeData any, validate return nil, "", nil } + nodeLabel, _ := utils.GetTypedPropertyByPath[string](nodeI, "label") + var ( n NodeBaseInterface factoryErrs []error @@ -613,6 +615,9 @@ func LoadNode(parent NodeBaseInterface, parentId string, nodeData any, validate } if idErr == nil { + if nodeLabel != "" { + n.SetLabel(nodeLabel) + } n.SetId(id) if parentId != "" { n.SetFullPath(parentId + "/" + id) From e3f0d57da3ac015ef72df390fc00deda4ac579d3 Mon Sep 17 00:00:00 2001 From: Sebatian Rath Date: Mon, 19 Jan 2026 00:23:33 -0500 Subject: [PATCH 4/8] Check if requested value is actually nil by checking if the value was found or not --- core/inputs.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/core/inputs.go b/core/inputs.go index 7d10df2..0de5586 100644 --- a/core/inputs.go +++ b/core/inputs.go @@ -324,6 +324,7 @@ func (n *Inputs) GetInputValues() map[InputId]any { func (n *Inputs) InputValueById(ec *ExecutionState, host NodeWithInputs, inputId InputId, inputArrayPortId *InputId) (value any, err error) { var finalValue any + var valueFound bool var inputDef InputDefinition var inputDefExists bool @@ -343,12 +344,11 @@ func (n *Inputs) InputValueById(ec *ExecutionState, host NodeWithInputs, inputId dstIsGroupInputsNode := strings.HasPrefix(dataSource.DstNode.GetNodeTypeId(), "core/group-inputs@") regardCache := !srcIsGroupNode && !srcIsGroupInputsNode && !srcIsGroupOutputsNode && !dstIsGroupInputsNode - var ok bool if regardCache { - finalValue, ok = ec.GetDataFromOutputCache(dataSource.SrcNode.GetCacheId(), outputCacheIdForCache, cacheType) + finalValue, valueFound = ec.GetDataFromOutputCache(dataSource.SrcNode.GetCacheId(), outputCacheIdForCache, cacheType) } - if ok { + if valueFound { if utils.GetLogLevel() == utils.LogLevelDebug { utils.LogOut.Debugf("PushNodeVisit: (cached) %s, execute: %t\n", dataSource.SrcNode.GetId(), false) } @@ -385,6 +385,7 @@ func (n *Inputs) InputValueById(ec *ExecutionState, host NodeWithInputs, inputId } } finalValue = v + valueFound = true if regardCache { ec.CacheDataOutput(dataSource.SrcNode.GetCacheId(), outputCacheIdForCache, finalValue, cacheType) @@ -400,10 +401,12 @@ func (n *Inputs) InputValueById(ec *ExecutionState, host NodeWithInputs, inputId inputDef, inputDefExists = n.inputDefs[inputId] } - if userExists && inputValue != nil { + if userExists { finalValue = inputValue + valueFound = true } else if inputDefExists && inputDef.Default != nil { finalValue = inputDef.Default + valueFound = true } else if inputDefExists && inputDef.Required { return nil, CreateErr(ec, &ErrNoInputValue{}, "no value for input '%v' (%s)", inputDef.Name, inputId) } else if inputDefExists { @@ -414,7 +417,7 @@ func (n *Inputs) InputValueById(ec *ExecutionState, host NodeWithInputs, inputId } } - if finalValue == nil { + if !valueFound { if inputDefExists { return nil, CreateErr(ec, &ErrNoInputValue{}, "no value for input '%v' (%s)", inputDef.Name, inputId) } From c638fe162abb206c55582c191de3c5d1644057cf Mon Sep 17 00:00:00 2001 From: Sebatian Rath Date: Mon, 19 Jan 2026 00:23:50 -0500 Subject: [PATCH 5/8] Add missing length field for DataStreamFactory --- nodes/start@v1.go | 1 + 1 file changed, 1 insertion(+) diff --git a/nodes/start@v1.go b/nodes/start@v1.go index 3ebae63..a00102d 100644 --- a/nodes/start@v1.go +++ b/nodes/start@v1.go @@ -24,6 +24,7 @@ func (n *StartNode) ExecuteEntry(c *core.ExecutionState, outputValues map[core.O dsf := core.DataStreamFactory{ Reader: os.Stdin, + Length: -1, } err := n.Outputs.SetOutputValue(c, ni.Core_start_v1_Output_stdin, dsf, core.SetOutputValueOpts{}) From a0b7b512f2f3773ab2ae1fe0349e9a387fa00d68 Mon Sep 17 00:00:00 2001 From: Sebatian Rath Date: Mon, 19 Jan 2026 00:24:39 -0500 Subject: [PATCH 6/8] Accept any value for any and unknown outputs This is for instance needed with the property-setter/getter --- core/outputs.go | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/core/outputs.go b/core/outputs.go index 8283b0b..2d7ce39 100644 --- a/core/outputs.go +++ b/core/outputs.go @@ -164,6 +164,12 @@ func (n *Outputs) SetOutputValue(ec *ExecutionState, outputId OutputId, value an } func isValueValidForOutput(value any, expectedType string) bool { + + if expectedType == "any" || expectedType == "unknown" { + return true + } + + // if its not unknown or any but nil then the value is not compatible if value == nil { return false } @@ -171,10 +177,6 @@ func isValueValidForOutput(value any, expectedType string) bool { valueType := reflect.TypeOf(value) kind := valueType.Kind() - if expectedType == "any" || expectedType == "unknown" { - return true - } - _, mappingExists := validKindsForExpectedType[expectedType] if mappingExists { _, valid := validKindsForExpectedType[expectedType][kind] From 8493d77be8c68281c89ec18adc4aae9e8214f181 Mon Sep 17 00:00:00 2001 From: Sebatian Rath Date: Mon, 19 Jan 2026 00:39:53 -0500 Subject: [PATCH 7/8] Minor cleanup in unit test --- nodes/test@v1_test.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nodes/test@v1_test.go b/nodes/test@v1_test.go index 3dfa212..aa87ca4 100644 --- a/nodes/test@v1_test.go +++ b/nodes/test@v1_test.go @@ -58,6 +58,8 @@ func Test_InputValueById_Casting(t *testing.T) { SAME_AS_OUTPUT := core.OutputId("") + var constReader io.Reader = strings.NewReader("hello") + tests := []struct { output any // the value for the output port @@ -93,7 +95,8 @@ func Test_InputValueById_Casting(t *testing.T) { // test stream ports {core.DataStreamFactory{ - Reader: strings.NewReader("hello"), + Reader: constReader, + Length: core.GetReaderLength(constReader), }, ni.Core_test_v1_Output_output_stream_foo123, SAME_AS_OUTPUT, ni.Core_test_v1_Input_input_stream_foo123, core.DataStreamFactory{}, expectError{}}, {"hello", ni.Core_test_v1_Output_output_string_foo123, SAME_AS_OUTPUT, ni.Core_test_v1_Input_input_stream_foo123, strings.NewReader(""), expectError{}}, {"hello", ni.Core_test_v1_Output_output_string_foo123, SAME_AS_OUTPUT, ni.Core_test_v1_Input_input_stream_foo123, core.DataStreamFactory{}, expectError{}}, From fe0ae1125e28bcf64ae18f471de825edd86a8c60 Mon Sep 17 00:00:00 2001 From: Sebatian Rath Date: Mon, 19 Jan 2026 00:40:54 -0500 Subject: [PATCH 8/8] Add error handler for new web app editor console --- core/errors.go | 100 ++++++++++++++++++ sessions/session.go | 2 +- tests_e2e/references/reference_app.sh_l12 | 2 +- .../references/reference_dir-walk.sh_l56 | 8 +- .../reference_error_no_output.sh_l8 | 14 +-- .../references/reference_group-error.sh_l8 | 6 +- .../reference_group-port-collision.sh_l13 | 4 +- tests_e2e/references/reference_index.sh_l20 | 14 +-- .../reference_run-python-embedded.sh_l13 | 4 +- .../references/reference_select-data.sh_l9 | 14 +-- .../reference_string-transform.sh_l61 | 14 +-- 11 files changed, 141 insertions(+), 41 deletions(-) diff --git a/core/errors.go b/core/errors.go index a3ade88..9fd721a 100644 --- a/core/errors.go +++ b/core/errors.go @@ -3,6 +3,7 @@ package core import ( "bytes" "database/sql" + "encoding/json" "errors" "fmt" "net" @@ -176,10 +177,108 @@ func indentString(input string, indentSpaces int, numbering bool) string { return strings.Join(lines, "\n") } +const ( + // web-safe hex equivalents for the frontend + WebColorRed = "#FF5555" // for color.FgRed + WebColorYellow = "#FFFF55" // for color.FgYellow + WebColorCyan = "#8BE9FD" // for color.FgCyan + WebColorMagenta = "#FF79C6" // for color.FgMagenta +) + +type CtxMsg struct { + Message string `json:"msg"` + Depth int `json:"level"` + FullPath string `json:"fullPath"` +} + +type WebErrorPayload struct { + IsLeafError bool `json:"isLeafError"` + Context []CtxMsg `json:"context,omitempty"` + + Error string `json:"error"` + ErrorColor string `json:"errorColor"` + + Hint string `json:"hint,omitempty"` + HintColor string `json:"hintColor,omitempty"` + + StackTrace []string `json:"stackTrace,omitempty"` +} + func (e *LeafError) Format(f fmt.State, c rune) { switch c { case 'v': + // Below is the JSON output formatting for the web editor console + if f.Flag('#') { + payload := WebErrorPayload{ + IsLeafError: true, + Error: e.ErrorWithCauses(), + ErrorColor: "#FF5555", + } + + if e.Context != nil && len(e.Context.Visited) > 0 { + var previousNode NodeBaseInterface + for _, item := range e.Context.Visited { + currentNode := item.Node + + // TODO: (Seb) improve this + // In the logs, group nodes appear twice, once when entered, and once + // when the group-outputs node comes back and executes the group node again. + // While this is expected for the execution flow, we don't want to have that + // in the logs, it looks very confusing. + if previousNode != nil && + strings.HasPrefix(previousNode.GetNodeTypeId(), "core/group-outputs@") && + strings.HasPrefix(currentNode.GetNodeTypeId(), "core/group@") { + + previousNode = currentNode + continue + } + + nodeNameOrLabel := currentNode.GetLabel() + if nodeNameOrLabel == "" { + nodeNameOrLabel = currentNode.GetName() + } + + var msg string + if item.Execute { + msg = fmt.Sprintf("execute '%s'", nodeNameOrLabel) + } else { + msg = fmt.Sprintf("request input from '%s'", nodeNameOrLabel) + } + + payload.Context = append(payload.Context, CtxMsg{ + Message: msg, + Depth: strings.Count(currentNode.GetFullPath(), "/") + 1, + FullPath: currentNode.GetFullPath(), + }) + + previousNode = item.Node + } + } + + payload.Hint = getErrorHint(e) + if payload.Hint != "" { + payload.HintColor = "#FFFF55" + } + + if f.Flag('+') { + rawStack := e.StackTrace() + payload.StackTrace = strings.Split(rawStack, "\n") + } + + jsonBytes, err := json.Marshal(payload) + if err != nil { + // Fallback in case of JSON error + fmt.Fprint(f, e.Error()) + return + } + + fmt.Fprint(f, string(jsonBytes)) + return + } + + // This below is the regular terminal output formatting + var ( tmpErrEmoji string tmpHintEmoji string @@ -245,6 +344,7 @@ func (e *LeafError) Format(f fmt.State, c rune) { fmt.Fprint(f, output) return + case 's': fmt.Fprint(f, e.Error()) } diff --git a/sessions/session.go b/sessions/session.go index 50f2fae..a5acf2f 100644 --- a/sessions/session.go +++ b/sessions/session.go @@ -945,7 +945,7 @@ func runGraphFromConn(ctx context.Context, graphData string, opts core.RunOpts, // send final error, even if error lines were already streamed sendEncryptedJSON(ws, map[string]string{ "type": MsgTypeJobError, - "error": fmt.Sprintf("Graph execution failed: %v", runErr), + "error": fmt.Sprintf("%#v", runErr), }, sharedKey) return // Exit, the deferred lock release will still run } diff --git a/tests_e2e/references/reference_app.sh_l12 b/tests_e2e/references/reference_app.sh_l12 index 7272134..658ac05 100644 --- a/tests_e2e/references/reference_app.sh_l12 +++ b/tests_e2e/references/reference_app.sh_l12 @@ -23,7 +23,7 @@ hint: stack trace: github.com/actionforge/actrun-cli/core.RunGraphFromFile - graph.go:1028 + graph.go:1031 github.com/actionforge/actrun-cli/cmd.cmdRootRun cmd_root.go:175 github.com/spf13/cobra.(*Command).execute diff --git a/tests_e2e/references/reference_dir-walk.sh_l56 b/tests_e2e/references/reference_dir-walk.sh_l56 index 5447237..112d61b 100644 --- a/tests_e2e/references/reference_dir-walk.sh_l56 +++ b/tests_e2e/references/reference_dir-walk.sh_l56 @@ -36,15 +36,15 @@ github.com/actionforge/actrun-cli/nodes.(*WalkNode).ExecuteImpl github.com/actionforge/actrun-cli/core.(*Executions).Execute executions.go:56 github.com/actionforge/actrun-cli/nodes.(*StartNode).ExecuteImpl - start@v1.go:49 + start@v1.go:50 github.com/actionforge/actrun-cli/nodes.(*StartNode).ExecuteEntry - start@v1.go:44 + start@v1.go:45 github.com/actionforge/actrun-cli/core.RunGraph graph.go:426 github.com/actionforge/actrun-cli/core.RunGraphFromString - graph.go:1013 + graph.go:1016 github.com/actionforge/actrun-cli/core.RunGraphFromFile - graph.go:1031 + graph.go:1034 github.com/actionforge/actrun-cli/cmd.cmdRootRun cmd_root.go:175 github.com/spf13/cobra.(*Command).execute diff --git a/tests_e2e/references/reference_error_no_output.sh_l8 b/tests_e2e/references/reference_error_no_output.sh_l8 index b9d09a0..6bfd8d1 100644 --- a/tests_e2e/references/reference_error_no_output.sh_l8 +++ b/tests_e2e/references/reference_error_no_output.sh_l8 @@ -37,25 +37,25 @@ github.com/actionforge/actrun-cli/core.(*Outputs).OutputValueById github.com/actionforge/actrun-cli/core.(*Inputs).InputValueById inputs.go:364 github.com/actionforge/actrun-cli/core.inputValueById[...] - inputs.go:472 + inputs.go:475 github.com/actionforge/actrun-cli/core.InputValueFromSubInputs[...] - inputs.go:467 + inputs.go:470 github.com/actionforge/actrun-cli/core.InputArrayValueById[...] - inputs.go:549 + inputs.go:552 github.com/actionforge/actrun-cli/nodes.(*PrintNode).ExecuteImpl print@v1.go:27 github.com/actionforge/actrun-cli/core.(*Executions).Execute executions.go:56 github.com/actionforge/actrun-cli/nodes.(*StartNode).ExecuteImpl - start@v1.go:49 + start@v1.go:50 github.com/actionforge/actrun-cli/nodes.(*StartNode).ExecuteEntry - start@v1.go:44 + start@v1.go:45 github.com/actionforge/actrun-cli/core.RunGraph graph.go:426 github.com/actionforge/actrun-cli/core.RunGraphFromString - graph.go:1013 + graph.go:1016 github.com/actionforge/actrun-cli/core.RunGraphFromFile - graph.go:1031 + graph.go:1034 github.com/actionforge/actrun-cli/cmd.cmdRootRun cmd_root.go:175 github.com/spf13/cobra.(*Command).execute diff --git a/tests_e2e/references/reference_group-error.sh_l8 b/tests_e2e/references/reference_group-error.sh_l8 index 8819706..dc9ef92 100644 --- a/tests_e2e/references/reference_group-error.sh_l8 +++ b/tests_e2e/references/reference_group-error.sh_l8 @@ -246,11 +246,11 @@ github.com/actionforge/actrun-cli/nodes.(*GroupNode).ExecuteImpl github.com/actionforge/actrun-cli/core.(*Executions).Execute executions.go:56 github.com/actionforge/actrun-cli/nodes.(*StartNode).ExecuteImpl - start@v1.go:49 + start@v1.go:50 github.com/actionforge/actrun-cli/nodes.(*StartNode).ExecuteEntry - start@v1.go:44 + start@v1.go:45 github.com/actionforge/actrun-cli/core.RunGraph graph.go:426 github.com/actionforge/actrun-cli/core.RunGraphFromString - graph.go:1013 + graph.go:1016 diff --git a/tests_e2e/references/reference_group-port-collision.sh_l13 b/tests_e2e/references/reference_group-port-collision.sh_l13 index 484b08f..683482b 100644 --- a/tests_e2e/references/reference_group-port-collision.sh_l13 +++ b/tests_e2e/references/reference_group-port-collision.sh_l13 @@ -33,9 +33,9 @@ github.com/actionforge/actrun-cli/core.LoadGraph github.com/actionforge/actrun-cli/core.RunGraph graph.go:275 github.com/actionforge/actrun-cli/core.RunGraphFromString - graph.go:1013 + graph.go:1016 github.com/actionforge/actrun-cli/core.RunGraphFromFile - graph.go:1031 + graph.go:1034 github.com/actionforge/actrun-cli/cmd.cmdRootRun cmd_root.go:175 github.com/spf13/cobra.(*Command).execute diff --git a/tests_e2e/references/reference_index.sh_l20 b/tests_e2e/references/reference_index.sh_l20 index 9fdb1ce..8fe1af6 100644 --- a/tests_e2e/references/reference_index.sh_l20 +++ b/tests_e2e/references/reference_index.sh_l20 @@ -66,11 +66,11 @@ github.com/actionforge/actrun-cli/nodes.(*ArrayGet).OutputValueById github.com/actionforge/actrun-cli/core.(*Inputs).InputValueById inputs.go:364 github.com/actionforge/actrun-cli/core.inputValueById[...] - inputs.go:472 + inputs.go:475 github.com/actionforge/actrun-cli/core.InputValueFromSubInputs[...] - inputs.go:467 + inputs.go:470 github.com/actionforge/actrun-cli/core.InputArrayValueById[...] - inputs.go:549 + inputs.go:552 github.com/actionforge/actrun-cli/nodes.(*PrintNode).ExecuteImpl print@v1.go:27 github.com/actionforge/actrun-cli/core.(*Executions).Execute @@ -80,15 +80,15 @@ github.com/actionforge/actrun-cli/nodes.(*LoopNode).ExecuteImpl github.com/actionforge/actrun-cli/core.(*Executions).Execute executions.go:56 github.com/actionforge/actrun-cli/nodes.(*StartNode).ExecuteImpl - start@v1.go:49 + start@v1.go:50 github.com/actionforge/actrun-cli/nodes.(*StartNode).ExecuteEntry - start@v1.go:44 + start@v1.go:45 github.com/actionforge/actrun-cli/core.RunGraph graph.go:426 github.com/actionforge/actrun-cli/core.RunGraphFromString - graph.go:1013 + graph.go:1016 github.com/actionforge/actrun-cli/core.RunGraphFromFile - graph.go:1031 + graph.go:1034 github.com/actionforge/actrun-cli/cmd.cmdRootRun cmd_root.go:175 github.com/spf13/cobra.(*Command).execute diff --git a/tests_e2e/references/reference_run-python-embedded.sh_l13 b/tests_e2e/references/reference_run-python-embedded.sh_l13 index a1c6a1e..7f5f41f 100644 --- a/tests_e2e/references/reference_run-python-embedded.sh_l13 +++ b/tests_e2e/references/reference_run-python-embedded.sh_l13 @@ -37,9 +37,9 @@ github.com/actionforge/actrun-cli/core.LoadGraph github.com/actionforge/actrun-cli/core.RunGraph graph.go:275 github.com/actionforge/actrun-cli/core.RunGraphFromString - graph.go:1013 + graph.go:1016 github.com/actionforge/actrun-cli/core.RunGraphFromFile - graph.go:1031 + graph.go:1034 github.com/actionforge/actrun-cli/cmd.cmdRootRun cmd_root.go:175 github.com/spf13/cobra.(*Command).execute diff --git a/tests_e2e/references/reference_select-data.sh_l9 b/tests_e2e/references/reference_select-data.sh_l9 index 3a91386..4d670c6 100644 --- a/tests_e2e/references/reference_select-data.sh_l9 +++ b/tests_e2e/references/reference_select-data.sh_l9 @@ -73,11 +73,11 @@ github.com/actionforge/actrun-cli/nodes.(*SelectDataNode).OutputValueById github.com/actionforge/actrun-cli/core.(*Inputs).InputValueById inputs.go:364 github.com/actionforge/actrun-cli/core.inputValueById[...] - inputs.go:472 + inputs.go:475 github.com/actionforge/actrun-cli/core.InputValueFromSubInputs[...] - inputs.go:467 + inputs.go:470 github.com/actionforge/actrun-cli/core.InputArrayValueById[...] - inputs.go:549 + inputs.go:552 github.com/actionforge/actrun-cli/nodes.(*PrintNode).ExecuteImpl print@v1.go:27 github.com/actionforge/actrun-cli/core.(*Executions).Execute @@ -87,15 +87,15 @@ github.com/actionforge/actrun-cli/nodes.(*LoopNode).ExecuteImpl github.com/actionforge/actrun-cli/core.(*Executions).Execute executions.go:56 github.com/actionforge/actrun-cli/nodes.(*StartNode).ExecuteImpl - start@v1.go:49 + start@v1.go:50 github.com/actionforge/actrun-cli/nodes.(*StartNode).ExecuteEntry - start@v1.go:44 + start@v1.go:45 github.com/actionforge/actrun-cli/core.RunGraph graph.go:426 github.com/actionforge/actrun-cli/core.RunGraphFromString - graph.go:1013 + graph.go:1016 github.com/actionforge/actrun-cli/core.RunGraphFromFile - graph.go:1031 + graph.go:1034 github.com/actionforge/actrun-cli/cmd.cmdRootRun cmd_root.go:175 github.com/spf13/cobra.(*Command).execute diff --git a/tests_e2e/references/reference_string-transform.sh_l61 b/tests_e2e/references/reference_string-transform.sh_l61 index 6c950ff..7e4bbaa 100644 --- a/tests_e2e/references/reference_string-transform.sh_l61 +++ b/tests_e2e/references/reference_string-transform.sh_l61 @@ -37,25 +37,25 @@ github.com/actionforge/actrun-cli/nodes.(*StringTransform).OutputValueById github.com/actionforge/actrun-cli/core.(*Inputs).InputValueById inputs.go:364 github.com/actionforge/actrun-cli/core.inputValueById[...] - inputs.go:472 + inputs.go:475 github.com/actionforge/actrun-cli/core.InputValueFromSubInputs[...] - inputs.go:467 + inputs.go:470 github.com/actionforge/actrun-cli/core.InputArrayValueById[...] - inputs.go:549 + inputs.go:552 github.com/actionforge/actrun-cli/nodes.(*PrintNode).ExecuteImpl print@v1.go:27 github.com/actionforge/actrun-cli/core.(*Executions).Execute executions.go:56 github.com/actionforge/actrun-cli/nodes.(*StartNode).ExecuteImpl - start@v1.go:49 + start@v1.go:50 github.com/actionforge/actrun-cli/nodes.(*StartNode).ExecuteEntry - start@v1.go:44 + start@v1.go:45 github.com/actionforge/actrun-cli/core.RunGraph graph.go:426 github.com/actionforge/actrun-cli/core.RunGraphFromString - graph.go:1013 + graph.go:1016 github.com/actionforge/actrun-cli/core.RunGraphFromFile - graph.go:1031 + graph.go:1034 github.com/actionforge/actrun-cli/cmd.cmdRootRun cmd_root.go:175 github.com/spf13/cobra.(*Command).execute