- conforms_to::[[Observation Form Contract]]
- has_epistemic_status::[[Empirical Observation]]
- in_practice_domain::[[eOS Continuum]]
- authored_by::[[Christopher Allen]]
- has_lifecycle::[[Seed Stage]]↗
- has_curation::[[Working Draft]]↗
One Observer on a Room Ancestor Fires for Every Room in the Cohort
Claim
In the eOS-Harness MVA running against DGD 1.7.9 plus the eOS-kernellib chat-app multi-agent-coherence branch, when an append observer is registered once on a room ancestor and three child rooms set that ancestor as their ur-object, a message posting in each child resolves the ancestor's observer through the UrHierarchy walk and records on the child's own log. A base room carries the chat-room.message:main append observer; three child rooms call set_ur_object(base) but register nothing themselves; a post_message in each child writes chat-room.message, and the dispatcher's ancestry walk resolves the base's observer with $this bound to the posting child, so the append lands on the child's own message log. All three children record their message from the single ancestor registration. The coherent reactive behavior is provided once, at the ancestor, to every member of the cohort -- there is no per-room registration and no coordination among the rooms. This re-exercises the dispatcher's ancestry walk (the same mechanism the merry-app walkthrough's dispatch-ancestry phase demonstrates) at the application tier.
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 into the isolated runtime staging tree.
Setup (verifiable from repo state):
- Driver: DGD 1.7.9 built from
dworkin/dgd; binary symlinked into the runtime staging tree. - Kernel layer: eOSContinuum/eOS-kernellib's chat-app multi-agent-coherence branch at HEAD
fbda75a. - Application layer:
examples/chat-app/, deployed with the Chat domain overlay. - Runtime config: the instance config; the chat-app smoke script (expected 20 sentinels).
Load-bearing source (a phase of examples/chat-app/sys/test.c):
/* register the append observer ONCE, on the ancestor */
MERRY_DAEMON->register_observer(base, "chat-room.message", "main", SRC_APPEND);
/* three child rooms inherit the ancestor; none register their own observer */
child_x->set_ur_object(base);
child_y->set_ur_object(base);
child_z->set_ur_object(base);
/* a post in each child resolves the ancestor's observer via the ancestry walk */
CHAT_DAEMON->post_message(niaj, child_x, "x");
CHAT_DAEMON->post_message(niaj, child_y, "y");
CHAT_DAEMON->post_message(niaj, child_z, "z");
/* asserts each child's log holds exactly 1 message -- ANCESTRY OK */
SRC_APPEND does Set($this, "chat-room.message-log", Get($this, ...) + ({ $new })); the dispatcher binds $this to the dispatch host (the posting child), so each append lands on the child that posted, not on the ancestor.
Smoke transcript (the load-bearing portion of the result log after boot 1):
ChatApp:test: ANCESTRY OK
ChatApp:test: NO-INHERIT OK
ANCESTRY OK writes only when all three children hold exactly one message each after their posts, proving the ancestor's single observer fired for every child. The assertion is inside catch{}; any child missing its append logs a distinct FAIL.
What the evidence establishes:
- One observer registered on a shared ancestor fires for every room in the cohort: three children record their message from a single registration on the base.
- The dispatch host is the posting child, not the ancestor: each append lands on the child's own log, so the inherited behavior is shared while the state stays per-room.
- The reactive coherence is provided by the platform via inheritance: the children carry no observer registration and no coordination -- registering once at the ancestor suffices for the whole cohort.
What the evidence does not establish:
- Per-clone overriding or re-enabling. The children carry no conflicting per-clone registration of the same key; the demonstration is the pure inherited case, not the descendant-overrides-ancestor or opt-back-in marker case.
- Cross-instance inheritance. The cohort is single-coherence-domain; an ancestry walk crossing a process or machine boundary is outside the platform's primitive and not exercised.
- The no-ancestor outcome. That a room with neither its own observer nor an ancestor records nothing is the paired negative Observation.
What Would Revise It
- A child that did not record its message would falsify the fans-out-to-every-clone claim; the current evidence shows all three children hold their message.
- An append landing on the ancestor rather than the posting child would contradict the
$this-is-the-child claim; the current evidence shows each child's own log holds its message. - A DGD or eOS-kernellib change to
find_observersancestry resolution or toquery_ur_objectsemantics would invalidate the snapshot; the claim rests on DGD 1.7.9 plus the cited eOS-kernellib HEAD.
Sources
examples/chat-app/sys/test.c(eOS-kernellib) -- the ancestry phase: one ancestor observer fires for three child rooms.examples/chat-app/obj/room.c(eOS-kernellib) -- theurinherit (set_ur_object/query_ur_object);SRC_APPENDintest.c.docs/chat-applications.md(eOS-kernellib) -- the "Multi-agent coherence" walkthrough, ancestry phase.- The result log written into the runtime staging tree's
usr/Chat/data/path -- carriesANCESTRY OKafter a clean boot. - The chat-app smoke script and the instance config -- the three-boot regression harness and runtime config.
Relations
-
conforms_to::[[Observation Form Contract]]
- Carries
has_epistemic_status::[[Empirical Observation]], names the measurement (one three-boot smoke run; the ancestry-phase assertion), states the limits (pure inherited case, no per-clone override; single-coherence-domain; the no-ancestor outcome is the paired negative), and lists concrete revision conditions.
- Carries
-
informs_downstream::[[Multiple Agents See Coherent State Without User-Land Coordination]]
- The Conviction holds that coherence is the platform's to provide, not the application's to arrange. This Observation shows inheritance carrying that load: a single ancestor registration provides coherent reactive behavior to every member of the cohort, so a new room joining the cohort needs no per-room observer setup or coordination.
-
contrasts_with::[[Without UrHierarchy-Inherited Observer Registration Each Chat Room Requires Its Own Observer Registration]]
- The negative-case peer. This case shows one ancestor registration serving the whole cohort; the negative shows that a room with no ancestor observer records nothing -- absent inheritance, every room would need its own registration. Together they bound the mechanism: the inherited observer is what lets one registration serve the cohort coherently.