Bundles
In Meld, we use a Bundle to describe where people collaborate.
A workspace implies a container: a fixed boundary you work inside of. A bundle is different. It holds heterogeneous things together without merging them. Sessions, participants, outputs, governance rules, relational history: all of these remain distinct inside a bundle. They can be read separately, queried across, and in time detached and recombined. The bundle is the fact of their being held together, not the act of sealing them in.
A bundle is both the process of fitting components together and the ensemble that results. Action and product at once.
A Meld bundle holds the accumulated operational context of a working project, deepened by every session run inside it and every contact made with other bundles.

Three layers
Each bundle holds its context in three layers, directly mirroring the soul bundle structure. How much another bundle can read depends on the depth of contact between them.
What this bundle is. Name, domain, owning agent identity, stated purpose. Readable immediately by any other registered bundle.
What this bundle is currently doing. Active sessions, stated intentions, current tasks, declared status. Opens through a Level 2 contact.
What this bundle has done. Full session history, contact graph, collective memberships. Opens only through a Level 3 contact. This is the ontology-structured knowledge graph accumulated across all sessions run in this bundle.
{
"level1": {
"id": "bundle-uuid",
"name": "Rural Assembly Bundle",
"domain": "deliberation",
"owning_agent": "agent-pubkey",
"purpose": "Citizen assembly sessions for a municipal deployment"
},
"level2": {
"active_sessions": ["session-uuid-1"],
"stated_intentions": "Mapping infrastructure priorities across three communities",
"declared_state": "active"
},
"level3": {
"session_history": [ ... ],
"contact_graph": [ ... ],
"collective_memberships": ["collective-uuid"]
}
}Sessions write into bundles
A session is a time-bounded event: a citizen assembly meeting, a workshop, a facilitated deliberation. When a session closes, what was said and structured inside it becomes part of the bundle's accumulated context.
Kair captures audio from in-room sessions, transcribes it locally, runs de-identification, and passes the result through a discourse ontology and the Embers Engine. The output is not a flat transcript. It is a structured knowledge graph: signifiers, relations between them, and communities of co-occurring concerns. That graph is indexed into the bundle's Layer 3 using HiRAG, where it becomes queryable across sessions.
Sessions do not constitute the bundle. They individuate it further. The bundle becomes richer, more specific, more itself with each session that closes inside it.
Traces
A trace is the mark a bundle leaves when it touches another. When two bundles make contact, a Contact Event runs: both bundles declare intent, context crosses at the negotiated depth, and a trace is written.
The trace is not a log entry or an audit record. It is the primary form of the contact. It is signed by both bundles, append-only, and permanent: it persists even if the contact relationship later ends. You cannot erase the fact that two bundles coordinated.
The contact graph of the system emerges from reading traces. There is no global graph object. The graph is always derived from the trace record and is readable but not managed by any central registry.
{
"contactId": "contact-uuid",
"bundleA": "bundle-uuid-alpha",
"bundleB": "bundle-uuid-beta",
"depth": "level2",
"formed_at": 1710100000,
"dissolved_at": null,
"sig_a": "0x...",
"sig_b": "0x...",
"trace": "Cross-referencing infrastructure signifiers between assembly
bundle and planning authority bundle. Level 2 context shared:
active sessions and stated intentions exchanged."
}Depth
Depth is how much agentic material was exchanged in a contact and therefore how much remains: in the trace, in each bundle's history, and in what future agents can read from either side.
It is not urgency. It is not frequency. It is the negotiated disclosure level between two bundles at the moment of contact. A shallow contact leaves a Level 1 trace: identities acknowledged, purposes noted. A deep contact leaves a Level 3 trace: full operational history crossed, knowledge graphs linked, contact graphs updated on both sides.
The asymmetry
A bundle can withdraw from a contact unilaterally. The trace remains. You can stop coordinating with another bundle without their agreement. You cannot erase the fact that coordination occurred.
This carries the same logic as the Depth bond: you can leave a relationship unilaterally. You cannot enter one without the other party present. The historical record of the encounter does not belong to either party alone.