@@ -486,14 +486,16 @@ type RefusedAttachOutcome =
486486 * ## Outside the refused write's unit of work — and why that needs a snapshot
487487 *
488488 * Measured on a real engine over sqlite: `engine.insert` opens NO transaction
489- * of its own, and neither does the generic `/data` create door, so on that
490- * door a system write made while the refusal unwinds lands and survives. But
491- * a caller may wrap the attach in a transaction of its own — an `atomic`
492- * batch, an explicit `transaction()` — and every engine call issued inside it,
493- * hook and middleware writes included, joins that transaction through the
494- * engine's ambient store (ADR-0034) and is rolled back with it: measured, the
495- * same write did not survive. A tombstone written from the gate in-line would
496- * therefore vanish exactly when the refusal aborts the caller's unit of work.
489+ * of its own (the refusal throws from `beforeInsert` with none open), and the
490+ * generic `/data` create door calls it without one (`createData` in the
491+ * protocol), so on that door a system write made while the refusal unwinds
492+ * lands and survives. But a caller may wrap the attach in a transaction of its
493+ * own — an `atomic` batch, an explicit `transaction()` — and every engine call
494+ * issued inside it, hook and middleware writes included, joins that
495+ * transaction through the engine's ambient store (ADR-0034) and is rolled back
496+ * with it: measured, the same write did not survive. A tombstone written from
497+ * the gate in-line would therefore vanish exactly when the refusal aborts the
498+ * caller's unit of work.
497499 *
498500 * The run is therefore DETACHED from the refusal's async context: it starts
499501 * on a later turn of the event loop, inside a snapshot of the context this
0 commit comments