You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Replace df.break() JSON sentinel with typed NodeError
Refactor break propagation from an in-band {"__break__": true} sentinel string to a typed NodeError::Break enum so Rust's ? operator auto-propagates break through compound nodes (THEN/IF/JOIN/RACE/subtree). The loop node is now the sole break catcher, so forgetting to propagate a break is a compile error rather than a silently-ignored value.
- Add NodeError { Break, Failure } + NodeResult; From<String>/<&str> map to Failure so activity/helper errors auto-convert.
- Carry break across the sub-orchestration boundary via a typed SubtreeControl field on SubtreeEnvelope instead of a sentinel in result.
- Preserve in-flight-upgrade safety: parse_subtree_envelope re-raises a legacy {"__break__"} sentinel (written by <=0.2.2 binaries) as NodeError::Break so breaks persisted by an older binary are not silently swallowed after upgrade.
- Document the Break-is-control-flow contract on the execute() entry point.
- Add 10 unit tests for envelope parsing (legacy + typed) and tighten the break-in-join-race E2E to assert the exact break value.
Fixes#148
0 commit comments