@startuml
interface Validator
interface SemanticRule

class ValidationPipeline
class GraphValidator
class TransitionValidator
class SessionValidator
class SemanticValidator
class CyclePolicyBindingRule
class ArtifactPayloadValidator
class ApprovalTrigger

class ValidationOutcome
class ValidationReport
class ValidationSection
class ValidationIssue
class ValidationContext

package "core:transitions" <<External>> {
  [WorkflowGraph]
  [DetectedCycle]
  [CyclePolicyBinding]
  [TransitionEdge]
}
package "core:artifacts" <<External>> {
  [FileWrittenArtifact]
  [ProcessResultArtifact]
}
package "core:artifacts-store" <<External>> {
  [ArtifactStore]
}

Validator <|.. GraphValidator
Validator <|.. TransitionValidator
Validator <|.. SessionValidator
Validator <|.. SemanticValidator
Validator <|.. ArtifactPayloadValidator
SemanticValidator --> "rules" SemanticRule
SemanticRule <|.. CyclePolicyBindingRule
ValidationPipeline --> "validators" Validator
ValidationPipeline --> ApprovalTrigger
ValidationPipeline ..> ValidationOutcome
ValidationOutcome --> ValidationReport
ValidationOutcome ..> ApprovalRequest
ValidationReport --> "sections" ValidationSection
ValidationSection --> "issues" ValidationIssue
ValidationIssue --> ValidationSeverity
ValidationIssue --> ValidationLocation

GraphValidator ..> "core:transitions"
TransitionValidator ..> "core:transitions"
SessionValidator ..> "core:sessions"
CyclePolicyBindingRule ..> "core:transitions"
ArtifactPayloadValidator ..> "core:artifacts"
ArtifactPayloadValidator ..> "core:artifacts-store"
ValidationContext ..> "core:transitions"
ValidationContext ..> "core:sessions"

@enduml
