Skip to content

Commit 00ed254

Browse files
committed
docs(storage): say which half of the transaction boundary was measured and which was read
Claude-Session: https://claude.ai/code/session_01WYYhVJ78u7PhwFViWo1EmQ Co-authored-by: Claude <noreply@anthropic.com>
1 parent 259c2a7 commit 00ed254

1 file changed

Lines changed: 10 additions & 8 deletions

File tree

‎packages/services/service-storage/src/attachment-lifecycle.ts‎

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)