Midwess

Commands have no implicit handler-wide transaction. Every session.request("pgpaw.sql", { sql, params }) call is one statement in its own transaction: it commits before its promise resolves or rolls back on failure. Interactive multi-statement transactions are unsupported on the wire, so an atomic group belongs in one SQL statement (a data-modifying CTE) or behind idempotent mutations.

Steps are different only on the kernel side. A Step's output, emitted signals, scheduling, and job disposition commit atomically as one fenced durable transition — but its application SQL commits independently through session.request("pgpaw.sql", …) like a Command's. A retried Step may re-issue committed application writes; make them idempotent. On replay, a committed Step returns its stored output without repeating kernel effects.