Classify framework process diagnostics
This commit is contained in:
@@ -260,7 +260,6 @@ func runProducerAttempts(ctx context.Context, config producerAttemptConfig, prod
|
||||
provenance = append(provenance, producerAttemptProvenance{Number: number, Kind: kind, Outcome: producerAttemptIncompleteAccepted, Validation: report})
|
||||
if config.Policy.ValidatorFailure == ValidatorFailureWarnContinue {
|
||||
warnings := terminalWarnings(output, report)
|
||||
warnings = append(warnings, incompleteValidationWarnings(report)...)
|
||||
return producerAttemptTerminal{Action: producerTerminalIncompleteAccepted, Value: output.Value, Warnings: warnings, Diagnostics: cloneProducerDiagnostics(output.Diagnostics), Validation: report, ValidationIncomplete: true, Provenance: cloneProducerAttemptProvenance(provenance)}, nil
|
||||
}
|
||||
return failedProducerAttempt(provenance), validatorFailureError(*incomplete)
|
||||
@@ -324,22 +323,27 @@ func cloneProducerDiagnostics(diagnostics []contracts.ProducerDiagnostic) []cont
|
||||
return contracts.CloneProducerDiagnostics(diagnostics)
|
||||
}
|
||||
|
||||
// incompleteValidationWarnings reports only validators that exhausted their
|
||||
// execution budget. It never reports rejected candidates, and it uses fixed
|
||||
// text so provider errors and correction content cannot cross this boundary.
|
||||
func incompleteValidationWarnings(report validationReport) []contracts.Warning {
|
||||
warnings := make([]contracts.Warning, 0)
|
||||
// incompleteValidationDiagnostics reports every applicable validator that
|
||||
// could not complete under warn_continue. It uses fixed text so provider
|
||||
// errors and arbitrary validator prose cannot cross this boundary.
|
||||
func incompleteValidationDiagnostics(report validationReport) []validationDiagnosticRecord {
|
||||
diagnostics := make([]validationDiagnosticRecord, 0)
|
||||
for _, record := range report.records {
|
||||
if record.outcome != validationFailed {
|
||||
if record.outcome != validationFailed && record.outcome != validationSkipped {
|
||||
continue
|
||||
}
|
||||
warnings = append(warnings, contracts.Warning{
|
||||
Scope: record.validatorName,
|
||||
ReasonCode: "validator_execution_incomplete",
|
||||
Message: "Validator execution did not complete within its configured budget.",
|
||||
})
|
||||
diagnostics = append(diagnostics, validationDiagnosticRecord{validatorName: record.validatorName, diagnostic: contracts.ProducerDiagnostic{
|
||||
Disposition: contracts.DiagnosticDispositionWarning,
|
||||
Category: contracts.DiagnosticCategoryValidationIncomplete,
|
||||
ReasonCode: "validator_execution_incomplete",
|
||||
OccurrenceCount: 1,
|
||||
Samples: []contracts.DiagnosticSample{{
|
||||
Scope: record.validatorName,
|
||||
Message: "Validator execution did not complete within its configured budget.",
|
||||
}},
|
||||
}})
|
||||
}
|
||||
return warnings
|
||||
return diagnostics
|
||||
}
|
||||
|
||||
// validationSummary projects a terminal state-machine result into the durable
|
||||
|
||||
Reference in New Issue
Block a user