Isolate standalone input completion
This commit is contained in:
@@ -716,6 +716,15 @@ destination accounting, item placement, and passive resource-context tests still
|
|||||||
exercise the same observable behavior. Do not require exact private helper calls.
|
exercise the same observable behavior. Do not require exact private helper calls.
|
||||||
Focused check: `go test ./internal/engine -run 'Discovery|Destination|Source|Resource|Filesystem'`.
|
Focused check: `go test ./internal/engine -run 'Discovery|Destination|Source|Resource|Filesystem'`.
|
||||||
|
|
||||||
|
Status: **complete** (second part of F02). Prior completed commits: `2736ddf`,
|
||||||
|
`deb9aa5`, `ae3408a`, `ea27f17`, `08a8c25`, `877c497`, `8aba43d`, `7bf2f0c`,
|
||||||
|
`0f9ecf1`, `119b42c`, `247a12b`, `4fcff5f`, `12d350a`, `08f2a8f`, `826062a`,
|
||||||
|
`e4a5ecb`, `3122e2f`, `6f6130f`, `4fd3bee`, `4bf940c`, and `d8bf6ab`. Validation
|
||||||
|
passed: `env GOTOOLCHAIN=local GOPROXY=off GOTELEMETRY=off go test ./internal/engine -run 'Discovery|Destination|Source|Resource|Filesystem' -count=1`,
|
||||||
|
`env GOTOOLCHAIN=local GOPROXY=off GOTELEMETRY=off go test ./internal/engine -count=1`,
|
||||||
|
`env GOTOOLCHAIN=local GOPROXY=off GOTELEMETRY=off go test ./... -count=1`,
|
||||||
|
and `git diff --check`.
|
||||||
|
|
||||||
## Stage 23 — Clarify Ordinary Context And Structural-Expansion Handoffs
|
## Stage 23 — Clarify Ordinary Context And Structural-Expansion Handoffs
|
||||||
|
|
||||||
Finding: third part of **F02**.
|
Finding: third part of **F02**.
|
||||||
|
|||||||
@@ -37,8 +37,6 @@ func acquireInput(request inputAcquisitionRequest, policy acquisitionPolicy, sta
|
|||||||
destination := request.input.destination
|
destination := request.input.destination
|
||||||
accounting := state.accounting
|
accounting := state.accounting
|
||||||
versionState := state.versionState
|
versionState := state.versionState
|
||||||
visited := tier.visited
|
|
||||||
hostToken := tier.hostToken
|
|
||||||
sourceID := "source-" + strconv.Itoa(accounting.sources+1)
|
sourceID := "source-" + strconv.Itoa(accounting.sources+1)
|
||||||
selectedSource := source
|
selectedSource := source
|
||||||
if source.kind == sourceSearch {
|
if source.kind == sourceSearch {
|
||||||
@@ -114,20 +112,35 @@ func acquireInput(request inputAcquisitionRequest, policy acquisitionPolicy, sta
|
|||||||
input.document = input.composition.root
|
input.document = input.composition.root
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
input.sources = sourceInfos(parsed.source)
|
input, diagnostics = acquireStandaloneInput(input, request, versionProcessing, policy, tier)
|
||||||
if versionProcessing != nil {
|
if len(diagnostics) != 0 {
|
||||||
input.document = versionProcessing.payload
|
return input, diagnostics
|
||||||
}
|
}
|
||||||
if request.input.filesystem != nil && (selectedSource.kind == sourceNone || !activeOverlay(request.ordinaryOverlay)) {
|
}
|
||||||
resolved, diagnostic := validateFilesystemContext(selectedSource, request.input.filesystem, parsed, tier.hostToken)
|
return completeAcquisitionContexts(input, request, tier)
|
||||||
|
}
|
||||||
|
|
||||||
|
func acquireStandaloneInput(input assembledInput, request inputAcquisitionRequest, processing *sourceVersionProcessingResult, policy acquisitionPolicy, tier *tierAcquisitionState) (assembledInput, []Diagnostic) {
|
||||||
|
parsed := input.parsed
|
||||||
|
input.sources = sourceInfos(parsed.source)
|
||||||
|
if processing != nil {
|
||||||
|
input.document = processing.payload
|
||||||
|
}
|
||||||
|
if request.input.filesystem != nil && (input.source.kind == sourceNone || !activeOverlay(request.ordinaryOverlay)) {
|
||||||
|
resolved, diagnostic := validateFilesystemContext(input.source, request.input.filesystem, parsed, tier.hostToken)
|
||||||
if diagnostic != nil {
|
if diagnostic != nil {
|
||||||
return input, []Diagnostic{*diagnostic}
|
return input, []Diagnostic{*diagnostic}
|
||||||
}
|
}
|
||||||
input.resolvedFilesystem = &resolved
|
input.resolvedFilesystem = &resolved
|
||||||
}
|
}
|
||||||
|
if request.input.imports || input.document == nil {
|
||||||
|
return input, nil
|
||||||
}
|
}
|
||||||
if !request.input.imports && input.document != nil {
|
|
||||||
_, placed, err := placeDocumentWithMode(input.document, destination, request.input.placementMode, input.document.Location, parseLimits.document.Depth, parseLimits.document.Nodes)
|
limits := policy.importLimits
|
||||||
|
placement := request.input.destination
|
||||||
|
documentLimits := defaultParseLimits().document
|
||||||
|
_, placed, err := placeDocumentWithMode(input.document, placement, request.input.placementMode, input.document.Location, documentLimits.Depth, documentLimits.Nodes)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return input, []Diagnostic{sourceDiagnostic(CodeSourceLimitExceeded, parsed.source.ID, "configuration exceeds the source depth or node limit after destination placement")}
|
return input, []Diagnostic{sourceDiagnostic(CodeSourceLimitExceeded, parsed.source.ID, "configuration exceeds the source depth or node limit after destination placement")}
|
||||||
}
|
}
|
||||||
@@ -135,34 +148,40 @@ func acquireInput(request inputAcquisitionRequest, policy acquisitionPolicy, sta
|
|||||||
input.document = placed
|
input.document = placed
|
||||||
identity := importKeyForMainSource(parsed.source)
|
identity := importKeyForMainSource(parsed.source)
|
||||||
var sequenceDeclarations []sequenceDeclarationSpec
|
var sequenceDeclarations []sequenceDeclarationSpec
|
||||||
if versionProcessing != nil {
|
if processing != nil {
|
||||||
sequenceDeclarations = cloneSequenceDeclarations(versionProcessing.sequences)
|
sequenceDeclarations = cloneSequenceDeclarations(processing.sequences)
|
||||||
}
|
}
|
||||||
input.acquisition = []acquisitionScope{{
|
input.acquisition = []acquisitionScope{{
|
||||||
owner: identity,
|
owner: identity,
|
||||||
destination: destination.clone(),
|
destination: placement.clone(),
|
||||||
contributions: []acquiredContribution{{
|
contributions: []acquiredContribution{{
|
||||||
source: cloneSourceInfo(*parsed.source), payload: localPayload,
|
source: cloneSourceInfo(*parsed.source), payload: localPayload,
|
||||||
identity: identity, role: importRoleMain, scopeOwner: identity,
|
identity: identity, role: importRoleMain, scopeOwner: identity,
|
||||||
document: placed, destination: destination.clone(), processing: versionProcessing,
|
document: placed, destination: placement.clone(), processing: processing,
|
||||||
sequenceDeclarations: sequenceDeclarations,
|
sequenceDeclarations: sequenceDeclarations,
|
||||||
}},
|
}},
|
||||||
}}
|
}}
|
||||||
rawNodes := countInputNodes(parsed.document)
|
rawNodes := countInputNodes(parsed.document)
|
||||||
placementNodes := destinationWrapperNodeCountForMode(destination, request.input.placementMode)
|
placementNodes := destinationWrapperNodeCountForMode(placement, request.input.placementMode)
|
||||||
|
accounting := input.accounting
|
||||||
if accounting.sources+1 > limits.sources || accounting.bytes+parsed.bytes > limits.bytes || accounting.nodes+rawNodes+placementNodes > limits.nodes {
|
if accounting.sources+1 > limits.sources || accounting.bytes+parsed.bytes > limits.bytes || accounting.nodes+rawNodes+placementNodes > limits.nodes {
|
||||||
return input, []Diagnostic{sourceDiagnostic(CodeSourceLimitExceeded, parsed.source.ID, "configuration exceeds the aggregate input limit")}
|
return input, []Diagnostic{sourceDiagnostic(CodeSourceLimitExceeded, parsed.source.ID, "configuration exceeds the aggregate input limit")}
|
||||||
}
|
}
|
||||||
if diagnostic := registerAcquiredSource(selectedSource, request.input.filesystem, parsed.source, visited, hostToken); diagnostic != nil {
|
if diagnostic := registerAcquiredSource(input.source, request.input.filesystem, parsed.source, tier.visited, tier.hostToken); diagnostic != nil {
|
||||||
return input, []Diagnostic{*diagnostic}
|
return input, []Diagnostic{*diagnostic}
|
||||||
}
|
}
|
||||||
accounting.sources++
|
accounting.sources++
|
||||||
accounting.bytes += parsed.bytes
|
accounting.bytes += parsed.bytes
|
||||||
accounting.nodes += rawNodes + placementNodes
|
accounting.nodes += rawNodes + placementNodes
|
||||||
|
return input, nil
|
||||||
}
|
}
|
||||||
if !activeOverlay(request.ordinaryOverlay) || request.input.imports {
|
|
||||||
if input.resolvedFilesystem == nil && len(input.sources) != 0 && (selectedSource.kind == sourceFile || request.input.filesystem != nil || nativeContext(selectedSource, request.input.filesystem)) {
|
func completeAcquisitionContexts(input assembledInput, request inputAcquisitionRequest, tier *tierAcquisitionState) (assembledInput, []Diagnostic) {
|
||||||
resolved, diagnostic := resolveFilesystemContext(selectedSource, request.input.filesystem, parsed, tier.hostToken)
|
if activeOverlay(request.ordinaryOverlay) && !request.input.imports {
|
||||||
|
return input, nil
|
||||||
|
}
|
||||||
|
if input.resolvedFilesystem == nil && len(input.sources) != 0 && (input.source.kind == sourceFile || request.input.filesystem != nil || nativeContext(input.source, request.input.filesystem)) {
|
||||||
|
resolved, diagnostic := resolveFilesystemContext(input.source, request.input.filesystem, input.parsed, tier.hostToken)
|
||||||
if diagnostic != nil {
|
if diagnostic != nil {
|
||||||
return input, []Diagnostic{*diagnostic}
|
return input, []Diagnostic{*diagnostic}
|
||||||
}
|
}
|
||||||
@@ -173,7 +192,6 @@ func acquireInput(request inputAcquisitionRequest, policy acquisitionPolicy, sta
|
|||||||
return input, []Diagnostic{*diagnostic}
|
return input, []Diagnostic{*diagnostic}
|
||||||
}
|
}
|
||||||
input.contexts = contexts
|
input.contexts = contexts
|
||||||
}
|
|
||||||
return input, nil
|
return input, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user