Cut metadata history over to shared model

This commit is contained in:
2026-10-26 16:34:13 +00:00
parent 76521f7cd8
commit 4b4e15fc58
10 changed files with 206 additions and 118 deletions

View File

@@ -25,19 +25,41 @@ func preparePostDecodeOverrideContext(input assembledInput, before decodedConfig
metadata := metadataFromDecoded(before)
cliRecords := overrideMetadataRecords(before, assigned.overrides)
applications := structuralHistoryApplications(input)
var structuralOverlays []overlayRecord
if input.inheritance != nil && input.composition != nil {
structuralOverlays = input.composition.overlays
metadata.historyBuilder.setScratch(input.composition.root)
metadata.historyBuilder.observeSourceEvidence(input.composition.root, input.composition.origins, applications, structuralOverlays)
applyInheritanceMetadata(&metadata, input.composition.root, input.composition.origins, structuralOverlays, input.inheritance)
metadata.historyBuilder.setScratch(input.composition.root)
metadata.historyBuilder.observeInheritanceEvidence(input.inheritance.operations)
} else if input.composition != nil {
structuralOverlays = input.composition.overlays
metadata.historyBuilder.setScratch(input.composition.root)
metadata.historyBuilder.observeSourceEvidence(input.composition.root, input.composition.origins, applications, structuralOverlays)
applyOverlayMetadata(&metadata, structuralOverlays)
} else if len(applications) != 0 {
metadata.historyBuilder.observeSourceEvidence(input.document, nil, applications, nil)
}
metadata.historyBuilder.observePreCLICheckpoint(before.final, before.origins)
var postDecodeApps []historyApplication
for _, override := range assigned.overrides {
postDecodeApps = append(postDecodeApps, historyApplication{
layer: LayerCLI,
path: override.path.clone(),
value: document.Clone(override.value),
origin: overlayOrigin(LayerCLI, document.Location{SourceID: override.source.ID}),
})
}
if len(cliRecords) != 0 {
metadata.fields = make(map[string]FieldInfo)
collectFieldInfo(after.final, Path{}, after, metadata.fields)
appendPostDecodeCLIHistory(&metadata, cliRecords)
}
if len(cliRecords) != 0 || len(postDecodeApps) != 0 {
appendPostDecodeCLIHistory(&metadata, cliRecords, postDecodeApps, before.final)
}
metadata.historyBuilder.observePostCLICheckpoint(after.final, after.origins)
sources := cloneSourceInfos(input.sources)
knownSources := make(map[string]bool, len(sources)+len(assigned.overrides))
@@ -55,16 +77,6 @@ func preparePostDecodeOverrideContext(input assembledInput, before decodedConfig
}
resolution := newResolutionInput(metadata, assigned.final, sources, input.contexts)
applications := structuralHistoryApplications(input)
var postDecodeApps []historyApplication
for _, override := range assigned.overrides {
postDecodeApps = append(postDecodeApps, historyApplication{
layer: LayerCLI,
path: override.path.clone(),
value: document.Clone(override.value),
origin: overlayOrigin(LayerCLI, document.Location{SourceID: override.source.ID}),
})
}
finalizeEffectiveMetadataPaths(&metadata, assigned.final)
return postDecodeOverrideContext{
@@ -83,7 +95,9 @@ func preparePostDecodeOverrideContext(input assembledInput, before decodedConfig
// Source history is already assembled, with inheritance projected at query time.
// Reuse overlay event construction for CLI changes without reapplying displaced
// source definitions after those later assignments.
func appendPostDecodeCLIHistory(metadata *Metadata, records []overlayRecord) {
func appendPostDecodeCLIHistory(metadata *Metadata, records []overlayRecord, applications []historyApplication, before *document.Node) {
metadata.historyBuilder.setScratch(before)
metadata.historyBuilder.observeCLIEvidence(applications, records)
cli := Metadata{fields: metadata.fields}
applyOverlayMetadata(&cli, records)
for pointer, history := range cli.history {