Clarify pipeline composition envelope handling

This commit is contained in:
2026-09-05 00:31:32 +00:00
parent abd405015b
commit 979d8049b1
5 changed files with 118 additions and 40 deletions

View File

@@ -26,18 +26,13 @@ type compositionNode struct {
value string
path string
sources []string
line int
column int
fields []compositionField
items []*compositionNode
}
type compositionField struct {
key string
value *compositionNode
order int
line int
column int
key string
value *compositionNode
}
// compositionValueRecord is a deterministic semantic leaf projection. Lists
@@ -104,7 +99,7 @@ func buildCompositionNode(node *yaml.Node, source, path string) (*compositionNod
}
result := &compositionNode{
kind: node.Kind, tag: node.Tag, value: node.Value, path: path,
sources: []string{source}, line: node.Line, column: node.Column,
sources: []string{source},
}
switch node.Kind {
@@ -139,10 +134,7 @@ func buildCompositionNode(node *yaml.Node, source, path string) (*compositionNod
if err != nil {
return nil, err
}
result.fields = append(result.fields, compositionField{
key: key, value: child, order: len(result.fields),
line: keyNode.Line, column: keyNode.Column,
})
result.fields = append(result.fields, compositionField{key: key, value: child})
}
case yaml.SequenceNode:
for index, childNode := range node.Content {
@@ -263,7 +255,6 @@ func mergeAdditiveNodes(base, incoming *compositionNode) (*compositionNode, erro
index := compositionFieldIndex(base.fields, incomingField.key)
if index < 0 {
field := cloneCompositionField(incomingField)
field.order = len(base.fields)
base.fields = append(base.fields, field)
continue
}
@@ -322,7 +313,6 @@ func mergeOverlayNodes(base, overlay *compositionNode) (*compositionNode, error)
index := compositionFieldIndex(base.fields, overlayField.key)
if index < 0 {
field := cloneCompositionField(overlayField)
field.order = len(base.fields)
base.fields = append(base.fields, field)
continue
}
@@ -644,7 +634,7 @@ func cloneCompositionNode(node *compositionNode) *compositionNode {
}
clone := &compositionNode{
kind: node.kind, tag: node.tag, value: node.value, path: node.path,
sources: append([]string(nil), node.sources...), line: node.line, column: node.column,
sources: append([]string(nil), node.sources...),
}
for _, field := range node.fields {
clone.fields = append(clone.fields, cloneCompositionField(field))
@@ -656,10 +646,7 @@ func cloneCompositionNode(node *compositionNode) *compositionNode {
}
func cloneCompositionField(field compositionField) compositionField {
return compositionField{
key: field.key, value: cloneCompositionNode(field.value), order: field.order,
line: field.line, column: field.column,
}
return compositionField{key: field.key, value: cloneCompositionNode(field.value)}
}
func compositionFieldIndex(fields []compositionField, key string) int {