refactor: merge cycle policy into semantic validation layer
Wire SemanticValidator into the production validator pipeline and consolidate cycle-policy types under core:validation. - Add SemanticValidator(CycleExitRule(requirePolicyForCycles=false)) to the prod ValidationPipeline (no-op default, preserves behavior) - Move CyclePolicy/Binding/Signature/Factory from core:transitions.policy to core:validation.policy (validation already owns ValidationContext) - Rename CyclePolicyBindingRule -> CycleExitRule (issue code unchanged) - Delete dead CyclePolicyResolver + PolicyValidation
This commit is contained in:
+1
-1
@@ -3,7 +3,7 @@ package com.correx.core.validation.model
|
||||
import com.correx.core.sessions.SessionState
|
||||
import com.correx.core.transitions.analysis.DetectedCycle
|
||||
import com.correx.core.transitions.graph.WorkflowGraph
|
||||
import com.correx.core.transitions.policy.CyclePolicyBinding
|
||||
import com.correx.core.validation.policy.CyclePolicyBinding
|
||||
|
||||
data class ValidationContext(
|
||||
val graph: WorkflowGraph,
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.correx.core.validation.policy
|
||||
|
||||
sealed interface CyclePolicy {
|
||||
data class Retry(
|
||||
val maxAttempts: Int
|
||||
) : CyclePolicy
|
||||
|
||||
data class Refinement(
|
||||
val maxIterations: Int
|
||||
) : CyclePolicy
|
||||
|
||||
data class Approval(
|
||||
val timeoutMs: Long
|
||||
) : CyclePolicy
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
package com.correx.core.validation.policy
|
||||
|
||||
data class CyclePolicyBinding(
|
||||
val cycle: CycleSignature,
|
||||
val policy: CyclePolicy
|
||||
)
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.correx.core.validation.policy
|
||||
|
||||
import com.correx.core.events.types.StageId
|
||||
import java.util.*
|
||||
|
||||
data class CycleSignature(
|
||||
val nodes: SortedSet<StageId>,
|
||||
val edges: SortedSet<Pair<StageId, StageId>>,
|
||||
)
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package com.correx.core.validation.policy
|
||||
|
||||
import com.correx.core.events.types.StageId
|
||||
import com.correx.core.transitions.graph.TransitionEdge
|
||||
import java.util.*
|
||||
|
||||
object CycleSignatureFactory {
|
||||
fun from(nodes: List<StageId>, edges: List<TransitionEdge>): CycleSignature {
|
||||
val nodeSet = TreeSet<StageId>(compareBy { it.value })
|
||||
nodeSet.addAll(nodes)
|
||||
|
||||
val edgeSet = TreeSet<Pair<StageId, StageId>>(
|
||||
compareBy({ it.first.value }, { it.second.value })
|
||||
)
|
||||
edges.forEach { edgeSet.add(it.from to it.to) }
|
||||
|
||||
return CycleSignature(nodes = nodeSet, edges = edgeSet)
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -1,12 +1,12 @@
|
||||
package com.correx.core.validation.semantic.rules
|
||||
|
||||
import com.correx.core.transitions.policy.CycleSignatureFactory
|
||||
import com.correx.core.validation.policy.CycleSignatureFactory
|
||||
import com.correx.core.validation.model.ValidationContext
|
||||
import com.correx.core.validation.model.ValidationIssue
|
||||
import com.correx.core.validation.model.ValidationSeverity
|
||||
import com.correx.core.validation.semantic.SemanticRule
|
||||
|
||||
class CyclePolicyBindingRule(
|
||||
class CycleExitRule(
|
||||
private val requirePolicyForCycles: Boolean
|
||||
) : SemanticRule {
|
||||
|
||||
Reference in New Issue
Block a user