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.