feat(events): RefinementIterationEvent + orchestration state counter
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
package com.correx.core.events.events
|
||||
|
||||
import com.correx.core.events.types.SessionId
|
||||
import kotlinx.serialization.SerialName
|
||||
import kotlinx.serialization.Serializable
|
||||
|
||||
/**
|
||||
* Records one pass through a refinement cycle (e.g. implementer→reviewer→implementer).
|
||||
* [cycleKey] identifies the loop (e.g. "implement->review"). [iteration] is 1-based.
|
||||
* Recorded so the runtime refinement guard is replay-deterministic (invariant #8).
|
||||
*/
|
||||
@Serializable
|
||||
@SerialName("RefinementIteration")
|
||||
data class RefinementIterationEvent(
|
||||
val sessionId: SessionId,
|
||||
val cycleKey: String,
|
||||
val iteration: Int,
|
||||
val maxIterations: Int,
|
||||
) : EventPayload
|
||||
@@ -14,4 +14,5 @@ data class OrchestrationState(
|
||||
val pendingApproval: Boolean = false,
|
||||
val failureReason: String? = null,
|
||||
val retryPolicy: RetryPolicy? = null,
|
||||
val refinementIterations: Map<String, Int> = emptyMap(),
|
||||
)
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.correx.core.events.events.ModelLoadedEvent
|
||||
import com.correx.core.events.events.ModelUnloadedEvent
|
||||
import com.correx.core.events.events.OrchestrationPausedEvent
|
||||
import com.correx.core.events.events.OrchestrationResumedEvent
|
||||
import com.correx.core.events.events.RefinementIterationEvent
|
||||
import com.correx.core.events.events.RetryAttemptedEvent
|
||||
import com.correx.core.events.events.RiskAssessedEvent
|
||||
import com.correx.core.events.events.StageCompletedEvent
|
||||
@@ -78,6 +79,7 @@ val eventModule = SerializersModule {
|
||||
subclass(WorkflowFailedEvent::class)
|
||||
subclass(WorkflowCompletedEvent::class)
|
||||
subclass(RetryAttemptedEvent::class)
|
||||
subclass(RefinementIterationEvent::class)
|
||||
subclass(RiskAssessedEvent::class)
|
||||
subclass(ChatSessionStartedEvent::class)
|
||||
subclass(ChatTurnEvent::class)
|
||||
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.correx.core.events.serialization
|
||||
|
||||
import com.correx.core.events.events.EventPayload
|
||||
import com.correx.core.events.events.RefinementIterationEvent
|
||||
import com.correx.core.events.types.SessionId
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class RefinementEventSerializationTest {
|
||||
|
||||
@Test
|
||||
fun `RefinementIterationEvent round-trips as polymorphic EventPayload`() {
|
||||
val sample: EventPayload = RefinementIterationEvent(
|
||||
sessionId = SessionId("s"),
|
||||
cycleKey = "implement->review",
|
||||
iteration = 2,
|
||||
maxIterations = 3,
|
||||
)
|
||||
val encoded = eventJson.encodeToString(EventPayload.serializer(), sample)
|
||||
assertTrue(encoded.contains("\"type\":\"RefinementIteration\""), "SerialName must be present: $encoded")
|
||||
val decoded = eventJson.decodeFromString(EventPayload.serializer(), encoded)
|
||||
assertEquals(sample, decoded)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user