Normalize baseline and source history evidence

This commit is contained in:
2026-10-26 15:01:54 +00:00
parent 2419e63717
commit 3828b117e8
6 changed files with 472 additions and 31 deletions

View File

@@ -8,8 +8,9 @@ import (
)
type overlayRecord struct {
change Change
displaced []displacedDefinition
change Change
displaced []displacedDefinition
introduced []historyPathOrigin
}
type displacedDefinition struct {
@@ -357,7 +358,8 @@ func mergeOverlayMappings(result *composedDocument, target, overlay *document.No
Path: path.clone(), Origin: incomingOrigin(incomingOrigins, path, incoming, layer),
Previous: previousOrigins(previous),
},
displaced: displaced,
displaced: displaced,
introduced: overlayPathOrigins(incoming, incomingOrigins, path, layer),
})
}
},
@@ -395,7 +397,7 @@ func recordOverlayReplacement(
Path: path.clone(), Origin: incomingOrigin(incomingOrigins, path, incoming, layer),
Previous: previousOrigins(previous),
},
displaced: displaced,
displaced: displaced, introduced: overlayPathOrigins(incoming, incomingOrigins, path, layer),
})
}
}
@@ -518,6 +520,17 @@ func collectOverlayOriginsFrom(origins, incomingOrigins map[string]Origin, node
collectOverlayOriginsAt(origins, incomingOrigins, node, path, path, layer)
}
func overlayPathOrigins(node *document.Node, incomingOrigins map[string]Origin, path Path, layer Layer) []historyPathOrigin {
var introduced []historyPathOrigin
walkDocument(node, path, func(affected Path, value *document.Node) {
introduced = append(introduced, historyPathOrigin{
path: affected.clone(), origin: incomingOrigin(incomingOrigins, affected, value, layer),
sensitive: value.Sensitive,
})
})
return introduced
}
func collectOverlayOriginsAt(origins, incomingOrigins map[string]Origin, node *document.Node, from, to Path, layer Layer) {
walkDocument(node, Path{}, func(relative Path, value *document.Node) {
source := appendDestination(from, relative)
@@ -633,6 +646,12 @@ func cloneOverlayRecords(records []overlayRecord) []overlayRecord {
path: displaced.path.clone(), origin: cloneOrigin(displaced.origin),
}
}
cloned[index].introduced = make([]historyPathOrigin, len(record.introduced))
for introducedIndex, introduced := range record.introduced {
cloned[index].introduced[introducedIndex] = historyPathOrigin{
path: introduced.path.clone(), origin: cloneOrigin(introduced.origin), sensitive: introduced.sensitive,
}
}
}
return cloned
}