Symptom

Nodes wired as source-observers (carrying meta.sources + InvocationTrigger.SOURCE_INVOKED) did not appear on the desktop canvas or Flow view when they lacked an effective parent-tree connection. They were queryable server-side via get_node but the UI treated them as invisible. Adding a parent edge to the Lambda (or any already-visible node) made them appear immediately.

Root cause

computeNodePositions (now computeLayoutFromNodes) built a childrenMap keyed by node.parent and ran a BFS from root nodes (Servers, and the local Client when it has children). Any node whose parent field was blank, self-referential, or pointed to a node outside the BFS walk was never inserted into positions. The rendering code at ClientScreen.kt:781 (layout.positions[node.id]?.let { position -> … }) silently skips nodes absent from positions — so the node never rendered. The “targeting affinity” pass, which pulls source pairs together, also short-circuits on positions[node.id] ?: return@forEach, compounding the invisibility.

Fix

Prevention