Skip to main content

PipelinePhase

Enum PipelinePhase 

Source
pub enum PipelinePhase {
    Planning,
    Development,
    Review,
    CommitMessage,
    FinalValidation,
    Finalizing,
    Complete,
    AwaitingDevFix,
    Interrupted,
}
Expand description

Pipeline phases for checkpoint tracking.

These phases represent the major stages of the Ralph pipeline.

Variants§

§

Planning

§

Development

§

Review

§

CommitMessage

§

FinalValidation

§

Finalizing

Finalizing phase for cleanup operations before completion.

This phase handles:

  • Restoring PROMPT.md write permissions
  • Any other cleanup that must go through the effect system
§

Complete

§

AwaitingDevFix

Awaiting development agent to fix pipeline failure.

This phase occurs when the pipeline encounters a terminal failure condition (e.g., agent chain exhausted) but before transitioning to Interrupted. It signals that the development agent should be invoked to diagnose and fix the failure root cause.

§Failure Handling Flow
  1. ErrorEvent::AgentChainExhausted occurs in any phase
  2. Reducer transitions state to AwaitingDevFix
  3. Orchestration determines Effect::TriggerDevFixFlow
  4. Handler executes TriggerDevFixFlow: a. Writes completion marker to .agent/tmp/completion_marker (failure status) b. Emits DevFixTriggered event c. Dispatches dev-fix agent d. Emits DevFixCompleted event e. Emits CompletionMarkerEmitted event
  5. DevFixTriggered/DevFixCompleted events: no state change (stays in AwaitingDevFix)
  6. CompletionMarkerEmitted event: transitions to Interrupted
  7. Orchestration determines Effect::SaveCheckpoint for Interrupted
  8. Handler saves checkpoint, increments checkpoint_saved_count
  9. Event loop recognizes is_complete() == true and exits successfully
§Event Loop Termination Guarantees

The event loop MUST NOT exit with completed=false when in AwaitingDevFix phase. The failure handling flow is designed to always complete with:

  • Completion marker written to filesystem
  • State transitioned to Interrupted
  • Checkpoint saved (checkpoint_saved_count > 0)
  • Event loop returning completed=true

If the event loop exits with completed=false from AwaitingDevFix, this indicates a critical bug (e.g., max iterations reached before checkpoint saved).

§Completion Marker Requirement

The completion marker MUST be written before transitioning to Interrupted. This ensures external orchestration systems (CI, monitoring) can detect pipeline termination even if the event loop exits unexpectedly.

§Agent Chain Exhaustion Handling

When in AwaitingDevFix phase with an exhausted agent chain, orchestration falls through to phase-specific logic (TriggerDevFixFlow) instead of reporting exhaustion again. This prevents infinite loops where exhaustion is reported repeatedly.

Transitions:

  • From: Any phase where AgentChainExhausted error occurs
  • To: Interrupted (after dev-fix attempt completes or fails)
§

Interrupted

Trait Implementations§

Source§

impl Clone for PipelinePhase

Source§

fn clone(&self) -> PipelinePhase

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PipelinePhase

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for PipelinePhase

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for PipelinePhase

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for PipelinePhase

Source§

fn eq(&self, other: &PipelinePhase) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for PipelinePhase

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Copy for PipelinePhase

Source§

impl Eq for PipelinePhase

Source§

impl StructuralPartialEq for PipelinePhase

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,