Normalize inheritance history evidence

This commit is contained in:
2026-10-26 15:25:02 +00:00
parent 11f7154874
commit da74d4190d
8 changed files with 482 additions and 76 deletions

View File

@@ -4,20 +4,23 @@ import "gitea.maximumdirect.net/eric/ConfigKit/internal/document"
func appendInheritanceExplanation(explanation *Explanation, working **document.Node, query Path, operations []inheritanceOperation, secrets map[string]bool) {
for _, operation := range operations {
changes := projectedInheritanceChanges(query, operation)
selectionPath := query
if operation.transfer != nil {
selectionPath = operationPathForQuery(operation.transfer.to, query)
}
selections := resolveInheritanceAttribution(operation, selectionPath)
if operation.control != nil {
if !pathsIntersect(operation.control.path, query) {
control := selectInheritanceEvidence(selections, inheritanceEvidenceControl, inheritanceEvidenceControl)
if control == nil || !pathsIntersect(operation.control.path, query) {
continue
}
before := valueSnapshot(*working, query, secrets)
replaceHistoryPath(working, operation.control.path, nil)
after := valueSnapshot(*working, query, secrets)
if len(changes) != 0 {
explanation.History = append(explanation.History, ValueChange{
Before: before, After: after, Origin: cloneOrigin(changes[0].Origin),
Dependencies: clonePaths(changes[0].Dependencies),
})
}
explanation.History = append(explanation.History, ValueChange{
Before: before, After: after, Origin: cloneOrigin(control.origin),
Dependencies: clonePaths(control.dependencies),
})
continue
}
if operation.transfer == nil {
@@ -32,13 +35,11 @@ func appendInheritanceExplanation(explanation *Explanation, working **document.N
replaceHistoryPath(working, operation.transfer.to.Key(field), identity)
}
afterParent := valueSnapshot(*working, query, secrets)
parent, parentPresent := transferredOperationOrigin(operation, operationPathForQuery(operation.transfer.to, query))
if pathsIntersect(operation.transfer.to, query) && parentPresent {
parent.Operation = ChangeInheritance
parent.Inheritance = projectInheritanceSteps(parent)
parent := selectInheritanceEvidence(selections, inheritanceEvidenceParent, inheritanceEvidenceParent)
if pathsIntersect(operation.transfer.to, query) && parent != nil {
explanation.History = append(explanation.History, ValueChange{
Before: before, After: afterParent, Origin: parent,
Dependencies: []Path{operation.transfer.from.clone(), operation.transfer.reference.clone()},
Before: before, After: afterParent, Origin: cloneOrigin(parent.origin),
Dependencies: clonePaths(parent.dependencies),
})
}
replaceHistoryPath(working, operation.transfer.to, operation.effective)
@@ -46,14 +47,12 @@ func appendInheritanceExplanation(explanation *Explanation, working **document.N
continue
}
afterChild := valueSnapshot(*working, query, secrets)
if len(changes) != 0 {
last := changes[len(changes)-1]
if !parentPresent || len(changes) > 1 {
explanation.History = append(explanation.History, ValueChange{
Before: afterParent, After: afterChild, Origin: cloneOrigin(last.Origin),
Dependencies: clonePaths(last.Dependencies),
})
}
child := selectInheritanceEvidence(selections, inheritanceEvidenceChild, inheritanceEvidenceRemoval, inheritanceEvidenceDisplaced)
if child != nil && (parent == nil || len(selections) > 1) {
explanation.History = append(explanation.History, ValueChange{
Before: afterParent, After: afterChild, Origin: cloneOrigin(child.origin),
Dependencies: clonePaths(child.dependencies),
})
}
}
}