Skip to content

Two-machine x0x propagation fails for direct, pubsub, groups, stores, and tasks #23

Description

@dirvine

Summary

During local/studio stress testing with the released x0x 0.21.2 daemon, the core read-only surfaces passed, but stateful cross-node delivery did not propagate reliably between the MacBook Swift instance and the studio Dioxus instance.

Targets:

  • MacBook/local: b3ce9af3bbed63cabfb0d36ac2436dae3a1a4fcce45f82119db0b31b76d1d69e, x0x 0.21.2, connected, ~4 peers
  • Studio: 1675f91fd4c59095646db9c7603cc68811f7bbe898afe5f746653875973cea4c, x0x 0.21.2, connected, ~10 peers

What passed

cargo test -p communitas-x0x-client --test live_matrix_contract -- --ignored --nocapture with a two-target matrix passed:

  • health/status/agent
  • identity cards
  • discovery/presence/find/reachability
  • network status and bootstrap cache
  • websocket connect/ping
  • SSE connect
  • constitution and GUI HTML surfaces

Contacts/trust also passed in the mutation harness:

  • mutual agent-card import
  • block/unblock/trust
  • machine add/pin/unpin
  • remove/re-add
  • synthetic revocation lifecycle

Failures observed

Direct messaging and file transfer

POST /direct/send local -> studio failed:

HTTP 504 {"detail":"timed out after 1 retries over 12.004431084s","error":"timeout","ok":false}

File transfer then failed with the same underlying condition:

HTTP 500 {"error":"send offer failed: peer disconnected: agent not connected: [22, 117, 249, ...]","ok":false}

Pubsub / events

Studio subscribed to a unique topic via POST /subscribe, local published via POST /publish, and studio /events did not receive the message within 120 seconds.

FAIL gossip pubsub local->studio: timeout waiting for SSE studio/events

Public group messages

A public_open group could be created locally and joined by studio, but public group messages did not converge both ways via GET /groups/:id/messages.

Request-access groups

After importing the group card on studio, POST /groups/:id/requests returned ok: true on studio. The owner/local daemon still reported zero pending requests and approving the returned request id failed with 404.

studio request: {"ok":true,"group_id":"...","request_id":"eb8edad904b646a59895a764a534fe65"}
local GET /groups/:id/requests -> []
local approve -> HTTP 404

Stores and tasks

A store created locally and joined by studio allowed local CRUD, but cross-node replication/update/delete did not appear:

store create/join/put/update/delete: replicated=False updated=False deleted=False

A task list created with the same topic on both nodes returned the same id, but tasks did not cross-appear:

task/kanban create/add/claim/complete: done=False cross_visible=False local_id=codex.ta studio_id=codex.ta

The done=False portion is partly a GUI/client interpretation bug because the daemon returns states such as done:<agent_id>; that is being patched separately. The cross visibility remained false.

Mutation timeout after applying state

One PATCH /groups/:id request timed out in the client, but the local group description later showed the mutation had applied. That suggests at least one mutation route can apply state but fail to return in time under load.

Expected

For two connected healthy daemons with mutual trusted contacts:

  • direct messages should deliver to /direct/events or fail with actionable connection diagnostics before app-level send
  • pubsub messages should reach subscribed peers
  • group messages, join requests, stores, and task CRDT state should converge across joined members
  • mutation endpoints should not leave clients in an ambiguous timed-out-but-applied state

Notes

This likely overlaps with #11 but is broader than the initial-message-drop case: the two-machine run showed no cross-node delivery for several stateful surfaces despite read-only discovery and WebSocket/SSE connection tests passing.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions