---
title: "Step methods and commits"
description: "Each WaitFor or Execute invocation is a separate commit boundary. Dex"
canonical_url: "https://docs.superdurable.io/reference/rust/1.35.x/flows-and-steps/step-methods/"
source: "docs/reference-rust_versioned_docs/version-1.35.x/flows-and-steps/step-methods.mdx"
locale: "en"
---

# Step methods and commits

Each **WaitFor** or **Execute** invocation is a separate commit boundary. Dex
Server stages the Attribute writes and Channel publications from that method,
then commits them with its **Wait** or **StepDecision** only after the method
returns successfully. If the method fails, none of those durable changes are
committed. **WaitFor** and **Execute** do not share a commit. External API
calls are outside this atomic boundary.

Before its final **Wait** or **StepDecision**, a handler can send
[heartbeat checkpoints](https://docs.superdurable.io/reference/rust/1.35.x/flows-and-steps/step-options.md#heartbeat) and any number of best-effort
[Stream messages](https://docs.superdurable.io/concepts/primitives/stream.md). The response stream must end with
exactly one final result. These progress frames are not part of the method's
commit, and a Stream Store failure does not fail the Step.
