# Epic 3 — Transition Engine

## completed deliverables

### 1. workflow graph model

implemented deterministic workflow topology representation.

core structures:

* `WorkflowGraph`
* `TransitionEdge`
* `StageId`
* `TransitionId`
* `TransitionCondition`
* `EvaluationContext`

graph characteristics:

* immutable
* deterministic
* replay-safe
* runtime-agnostic

---

## 2. deterministic transition resolution

implemented pure transition evaluation engine.

properties:

* evaluates only outgoing edges from current stage
* deterministic ordering
* sequential evaluation only
* first matching transition wins
* stable replay behavior

core components:

* `DefaultTransitionResolver`
* `TransitionConditionEvaluator`
* `TransitionDecision`

---

## 3. cycle analysis infrastructure

implemented read-only graph cycle analysis.

implemented:

* deterministic adjacency construction
* DFS-based traversal
* cycle extraction
* cycle canonicalization
* duplicate elimination

important:

* analysis only
* no runtime execution semantics yet
* no scheduler/orchestrator coupling

architectural rule:

* cycles are structurally allowed
* behavior constraints belong to future policy/runtime layers

---

## 4. stage execution contract

defined strict execution boundary between:

* transition engine
* runtime execution

implemented concepts:

* stage execution request
* stage execution result
* deterministic execution semantics
* execution/event separation

important:

* transitions engine does NOT execute runtime logic
* transitions engine does NOT orchestrate scheduling

---

## 5. transition event model

added workflow execution events into event system.

implemented events:

* `StageStartedEvent`
* `StageCompletedEvent`
* `StageFailedEvent`
* `TransitionExecutedEvent`

properties:

* serializable
* append-only compatible
* replay-safe
* session-scoped

---

## 6. event-native session integration

reworked session architecture from:

* FSM + lossy mapping

into:

* deterministic event reduction

removed conceptual dependency on:

* collapsed transition semantics
* imperative FSM mutation

introduced:

* `SessionReducer`
* `DefaultSessionReducer`

session state now evolves via:

```text id="e1"
StoredEvent → SessionReducer → SessionState
```

instead of:

```text id="e2"
StoredEvent → Mapper → FSM → State
```

---

## 7. projection architecture alignment

aligned sessions with true event-sourcing semantics.

final rules:

* event stream is single source of truth
* projections are pure deterministic folds
* no hidden mutable state
* no runtime side effects
* replay reconstructs full state deterministically

---

## 8. replay integration

integrated transition execution into replay pipeline.

final replay flow:

```text id="e3"
Workflow execution
→ transition events
→ EventStore
→ replay
→ SessionProjector
→ SessionState
```

transition execution now becomes part of durable system history.

---

## 9. testing completed

implemented coverage for:

* reducer semantics
* deterministic replay
* projector lifecycle behavior
* transition resolution
* transition event serialization
* replay integration

removed obsolete tests:

* `SessionFsm`
* `SessionEventMapper`
* mapper-driven FSM semantics

---

# final architecture after Epic 3

```text id="e4"
WorkflowGraph
    ↓
TransitionResolver
    ↓
Stage Execution
    ↓
Transition Events
    ↓
Event Store
    ↓
Replay / Projection
    ↓
SessionState
```

---

# major architectural outcomes

Epic 3 established:

* deterministic workflow execution
* replay-safe orchestration semantics
* event-native state derivation
* strict separation of:

    * execution
    * transitions
    * persistence
    * projections
    * runtime orchestration

---

# what Epic 3 intentionally does NOT include

not implemented yet:

* retry policies
* bounded runtime loop enforcement
* approval gating
* tool orchestration policies
* scheduling
* runtime budgeting
* adaptive routing logic

those belong to future epics.

---

# final state

Correx now has:

> a deterministic, event-sourced workflow transition engine with replay-consistent session projection and no hidden state mutation.
