Classify framework process diagnostics

This commit is contained in:
2026-08-27 15:33:13 +00:00
parent ba569594a1
commit 5175cb0722
10 changed files with 71 additions and 27 deletions

View File

@@ -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