Refactor validators into package-owned components

This commit is contained in:
2026-05-14 00:28:28 +00:00
parent 3b160cf05b
commit 52ffe42e73
26 changed files with 775 additions and 98 deletions

View File

@@ -0,0 +1,55 @@
package metadata
import "gitea.maximumdirect.net/eric/audita/internal/framework/contracts"
type ExecutionClass string
const (
ExecutionClassDeterministic ExecutionClass = "deterministic"
ExecutionClassLLMBacked ExecutionClass = "llm_backed"
)
type ClassifiedValidator interface {
contracts.Validator
ExecutionClass() ExecutionClass
}
func ClassOf(v contracts.Validator) ExecutionClass {
if v == nil {
return ExecutionClassDeterministic
}
classified, ok := v.(ClassifiedValidator)
if !ok {
return ExecutionClassDeterministic
}
switch classified.ExecutionClass() {
case ExecutionClassLLMBacked:
return ExecutionClassLLMBacked
case ExecutionClassDeterministic:
return ExecutionClassDeterministic
default:
return ExecutionClassDeterministic
}
}
func Wrap(v contracts.Validator, class ExecutionClass) contracts.Validator {
if v == nil {
return nil
}
if class != ExecutionClassLLMBacked {
class = ExecutionClassDeterministic
}
return wrappedValidator{
Validator: v,
class: class,
}
}
type wrappedValidator struct {
contracts.Validator
class ExecutionClass
}
func (w wrappedValidator) ExecutionClass() ExecutionClass {
return w.class
}

View File

@@ -0,0 +1,30 @@
package metadata
import (
"context"
"testing"
"gitea.maximumdirect.net/eric/audita/internal/framework/contracts"
frameworkvalidators "gitea.maximumdirect.net/eric/audita/internal/framework/validators"
)
type unclassifiedValidator struct{}
func (u unclassifiedValidator) Name() string { return "unclassified" }
func (u unclassifiedValidator) Validate(_ context.Context, _ contracts.ValidationRequest) (frameworkvalidators.Result, error) {
return frameworkvalidators.Result{ValidatorName: u.Name(), Decisions: nil}, nil
}
func TestClassOfDefaultsToDeterministic(t *testing.T) {
if got := ClassOf(unclassifiedValidator{}); got != ExecutionClassDeterministic {
t.Fatalf("expected deterministic default class, got %q", got)
}
}
func TestWrapExposesExecutionClass(t *testing.T) {
wrapped := Wrap(unclassifiedValidator{}, ExecutionClassLLMBacked)
if got := ClassOf(wrapped); got != ExecutionClassLLMBacked {
t.Fatalf("expected llm_backed class, got %q", got)
}
}