Workflow and cluster

Phase G delivers durable workflow without a full distributed cluster runtime.

Production: duroxide-pg

Enable id_effect_workflow feature duroxide. DuroxideStepJournal persists completed steps on the shared PostgreSQL pool; duroxide-pg migrations run via bootstrap_duroxide_schema.

#![allow(unused)]
fn main() {
use id_effect_workflow::{DuroxideStepJournal, StepJournal, bootstrap_duroxide_schema};
bootstrap_duroxide_schema(&pool).await?;
let mut journal = DuroxideStepJournal::new(pool);
journal.register_workflow("order-42")?;
let out: String = journal.run_step_typed("order-42", 0, "validate", || Ok("ok".into()))?;
}

Register providers with provide_duroxide_pg.

Dev / tests: SQLite (memory feature)

DurableWorkflowLog (default memory feature) uses bundled SQLite for local demos.

FSM integration

register_fsm, step_durable, and restore_state are generic over StepJournal.

cargo run -p id_effect_fsm --example 002_durable_door_fsm
# with PostgreSQL journal (requires DATABASE_URL):
cargo run -p id_effect_fsm --example 002_durable_door_fsm \
  -p id_effect_workflow --features duroxide

External orchestrators

Temporal (and similar) remain the recommended path for multi-region cluster workflow — documented, not reimplemented in-crate.

Charter ADR: docs/platform/adrs/adr-workflow-charter.md.