A multi-node test mesh

A single hub exercises client-to-hub traffic, but not routing between nodes: escalation up a tree, propagation across subtrees, node-to-node INTERCOM, and what happens when a relay drops. The hivetree project builds a real tree of hubs with one docker compose up, so this traffic can be exercised end to end.

The shape

m0   root master

/ \ r1 r2 relays, each connected upstream to m0

Each node runs one container: a local message bus and hivemind-core. The two relays connect upstream to the root, which turns them into relays for the leaves beneath them (Nested Hives). Leaf clients connect to a relay and send traffic that crosses real hops.

The mesh runs the latest published HiveMind alphas. To test an unreleased build, drop its wheel into the image and rebuild — the rest of the tree is unchanged.

What it exercises

The included probes drive the routing message types across the tree and check the result:

  • Escalate — a leaf sends an utterance up to the root.
  • Propagate — a message from a leaf under one relay reaches a leaf under the other, across the root.
  • INTERCOM — a leaf sends an encrypted, signed message to one other leaf, which only that leaf can read.
  • Relay loss — one relay is stopped, and the other subtree keeps working.

The tree is also where a routing or delivery finding is reproduced before it is believed, and where a fix is re-checked after it lands. It complements the unit and end-to-end tests in hivemind-core, which check one hub against itself and can not reach cross-node routing.

Setup notes

Two settings trip up a first run:

A node's network and agent plugins are named by their entry-point names in server.json, not their package names. The websocket network plugin is hivemind-websocket-plugin.

allowed_types is deny-by-default and also gates the inner message type of a BUS, QUERY, or ESCALATE payload. A client that sends an utterance needs recognizer_loop:utterance allowed, not only bus (Permissions).


← Libraries · Home · ELI5 →