Preserve proposal outcomes and classify filtered proposals
This commit is contained in:
21
internal/framework/validators/filtering.go
Normal file
21
internal/framework/validators/filtering.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package validators
|
||||
|
||||
import (
|
||||
"gitea.maximumdirect.net/eric/audita/internal/framework/outcomes"
|
||||
"gitea.maximumdirect.net/eric/audita/internal/framework/proposals"
|
||||
)
|
||||
|
||||
// DefectiveProposalReason recognizes a safely rejected defect in a proposal
|
||||
// response. Editorial disagreement and later apply-time conflicts are excluded.
|
||||
func DefectiveProposalReason(reason string) (outcomes.ReasonCode, bool) {
|
||||
switch reason {
|
||||
case ReasonInvalidTargetSegment, ReasonMissingTargetSegment,
|
||||
ReasonEmptyOriginalText, ReasonMissingOriginalText,
|
||||
ReasonInvalidConfidence, ReasonNoEffect, ReasonEmptyResultingText,
|
||||
string(proposals.SkipReasonAmbiguousOriginal),
|
||||
string(proposals.SkipReasonInvalidProposal):
|
||||
return outcomes.ReasonCode(reason), true
|
||||
default:
|
||||
return "", false
|
||||
}
|
||||
}
|
||||
20
internal/framework/validators/filtering_test.go
Normal file
20
internal/framework/validators/filtering_test.go
Normal file
@@ -0,0 +1,20 @@
|
||||
package validators
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestDefectiveProposalReasonSeparatesFilteringFromEditorialRejection(t *testing.T) {
|
||||
for _, reason := range []string{
|
||||
ReasonInvalidTargetSegment, ReasonMissingTargetSegment, ReasonEmptyOriginalText,
|
||||
ReasonMissingOriginalText, ReasonInvalidConfidence, ReasonNoEffect,
|
||||
ReasonEmptyResultingText, "ambiguous_original_text",
|
||||
} {
|
||||
if got, ok := DefectiveProposalReason(reason); !ok || string(got) != reason {
|
||||
t.Fatalf("defective proposal %q classified as %q, %t", reason, got, ok)
|
||||
}
|
||||
}
|
||||
for _, reason := range []string{ReasonLowConfidence, ReasonProtectedGlossaryTerm, "editorial_rejection", ReasonValidatorInputTooLarge} {
|
||||
if got, ok := DefectiveProposalReason(reason); ok {
|
||||
t.Fatalf("ordinary rejection %q classified as %q", reason, got)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -113,11 +113,11 @@ func EnforceDecisionCardinality(candidate []proposals.EnrichedCorrectionProposal
|
||||
}
|
||||
|
||||
func approval(index int) Decision {
|
||||
return Decision{ProposalIndex: index, Approved: true, ReasonCode: ReasonApproved, Message: "approved"}
|
||||
return Decision{ProposalIndex: index, Approved: true, Disposition: DispositionApproved, ReasonCode: ReasonApproved, Message: "approved"}
|
||||
}
|
||||
|
||||
func rejection(index int, reasonCode string, msg string) Decision {
|
||||
return Decision{ProposalIndex: index, Approved: false, ReasonCode: reasonCode, Message: strings.TrimSpace(msg)}
|
||||
return Decision{ProposalIndex: index, Approved: false, Disposition: DispositionRejected, ReasonCode: reasonCode, Message: strings.TrimSpace(msg)}
|
||||
}
|
||||
|
||||
func confidenceThresholdForModule(moduleKey string, cfg *config.Config) float64 {
|
||||
|
||||
Reference in New Issue
Block a user