An Atomic Cross-Agent Property Write Either Commits Fully or Rolls Back Fully

Claim

In the eOS-Harness MVA running against DGD 1.7.9 plus the eOSContinuum/eOS-kernellib feature/cohesive-lift branch, when one operation appends a message to two separate rooms through the Merry batch surface in atomic mode, the two writes are a single all-or-nothing unit. cross_write(room_a, room_b, content) appends the same message mapping to each room's chat-room.message-log; run through MERRY->batch(this_object(), "cross_write", args, ([ "atomic": 1 ])) the commit path lands both rooms. A sibling cross_write_then_fail appends to the first room and then throws; under the atomic batch DGD rolls both writes back, so neither room retains the message. The all-or-nothing boundary spans two distinct objects with no application-level transaction code: the runtime carries the coordination that keeps the two writes coherent. This extends the single-room atomic-rollback demonstration (a post and its observer's cross-user write rolling back together) across the cross-room boundary.

Grounds

This is an Empirical Observation. The grounds are a captured three-boot smoke run 2026-05-31 against the live MVA demonstration instance with examples/chat-app/ overlaid at the isolated runtime staging tree's src/usr/Chat/.

Setup (verifiable from repo state):

Load-bearing source (the cross-room writer and phase 9d of examples/chat-app/sys/test.c):

/* the cross-room writer: append one message to TWO rooms */
void cross_write(object room_a, object room_b, string content)
{
    mapping msg;
    msg = ([ "content": content, "timestamp": time() ]);
    room_a->set_property("chat-room.message-log", room_a->query_messages() + ({ msg }));
    room_b->set_property("chat-room.message-log", room_b->query_messages() + ({ msg }));
}

/* phase 9d: commit lands both; deliberate failure rolls both back */
MERRY_DAEMON->batch(this_object(), "cross_write",
                    ({ room_ba, room_bb, "commit" }), ([ "atomic": 1 ]));
/* asserts both rooms hold 1 message -- ATOMIC-COMMIT OK */
MERRY_DAEMON->batch(this_object(), "cross_write_then_fail",
                    ({ room_ba, room_bb, "rollback" }), ([ "atomic": 1 ]));
/* throws; asserts both rooms STILL hold only the committed 1 -- ATOMIC-ROLLBACK OK */

cross_write_then_fail appends to room_a then error()s before the second append; the atomic batch's error propagates and DGD unwinds the whole task, including the first append.

Smoke transcript (the load-bearing portion of the result log after boot 1):

ChatApp:test: ATOMIC-COMMIT OK
ChatApp:test: ATOMIC-ROLLBACK OK
ChatApp:test: PARTIAL-STATE OK

ATOMIC-COMMIT OK writes only when both rooms hold exactly one message after the committing batch. ATOMIC-ROLLBACK OK writes only when the failing atomic batch threw AND both rooms still hold only the committed message (the partial first write rolled back). Both assertions are inside catch{}.

What the evidence establishes:

What the evidence does not establish:

What Would Revise It

Sources

Relations