Apply sequence policy across loading tiers

This commit is contained in:
2026-10-16 18:59:52 +00:00
parent 25cf6d32b6
commit 190431740a
6 changed files with 230 additions and 14 deletions

View File

@@ -121,7 +121,7 @@ func assembleBaseInputTrackedForRole[T any](source Source, options Options[T], d
}
}
if options.Imports {
input.composition, input.sources, diagnostics = loadImportedDocumentsTrackedWithProcessing(source, options.Filesystem, parsed, destination, options.Definition.Version, limits, accounting, visited, hostToken, versionState, versionProcessing)
input.composition, input.sources, diagnostics = loadImportedDocumentsTrackedWithProcessing(source, options.Filesystem, parsed, destination, options.Definition.Version, limits, accounting, visited, hostToken, versionState, versionProcessing, options.sequencePolicy)
if len(diagnostics) != 0 {
return input, diagnostics
}
@@ -196,7 +196,7 @@ func applyInputLayers[T any](source Source, options Options[T], input assembledI
if !activeOverlay(options.Overlay) && len(options.Overrides) == 0 {
return input, nil
}
composition, diagnostics := compositionForInput(input)
composition, diagnostics := compositionForInputWithPolicy(input, options.sequencePolicy)
if len(diagnostics) != 0 {
return input, diagnostics
}
@@ -231,13 +231,17 @@ func applyInputLayers[T any](source Source, options Options[T], input assembledI
// compositionForInput initializes one handoff for overlays and CLI, including
// defaults-only CLI input. Raw source bytes and mapping keys retain their budgets.
func compositionForInput(input assembledInput) (*composedDocument, []Diagnostic) {
return compositionForInputWithPolicy(input, sequencePolicy{})
}
func compositionForInputWithPolicy(input assembledInput, policy sequencePolicy) (*composedDocument, []Diagnostic) {
if input.composition != nil {
return input.composition, nil
}
if input.document == nil {
return &composedDocument{root: &document.Node{Kind: document.Mapping}, origins: make(map[string]Origin)}, nil
}
composition, diagnostics := composeDocuments(input.document)
composition, diagnostics := composeDocumentsWithPolicy(policy, input.document)
if len(diagnostics) != 0 {
return nil, diagnostics
}