Skip to content
Nautilo Documentation
BuildConceptsEntity model

Relationship matrix

All 92 stable entity relationships, including 88 current invariants and four explicitly future Device and encryption relationships.

This matrix is exhaustive by design. It gives coding agents one stable page per entity pair, including deliberate no-direct-edge invariants that prevent the wrong ownership or authorization model from creeping into code.

  • 88 rows describe current implemented behavior or a deliberate current no-edge invariant.
  • 4 rows describe target-only durable Device and application-encryption architecture. They are not current product behavior.
  • Read the machine-readable relationship index.

Verification is still in progress

Status classifications were reconciled before migration. Public code-anchor verification is pinned to Nautilo 4b3ea604 and must close before these pages become release-canonical.

Stable IDEntitiesStatusAudited invariant or evidence
REL-ACT-AGTActor ↔ AgentimplementedAgent-kind Actor mirror and actors.agent_id back-pointer are current.
REL-ACT-CAPActor ↔ CapabilityimplementedCapability authority is resolved through human/agent policy, not a direct Actor edge.
REL-ACT-CHNActor ↔ ChannelimplementedChannel is Room-edge vocabulary; Actor participation is deliberately indirect.
REL-ACT-CONActor ↔ ConnectionimplementedConnection ownership resolves through user/agent identity, not generic Actor.
REL-ACT-DEVActor ↔ DeviceimplementedNo canonical Actor–Device edge exists; current client/session identities are deliberate runtime concerns.
REL-ACT-GRPActor ↔ GroupimplementedGroup membership uses user/agent principals rather than generic Actor.
REL-ACT-HUMActor ↔ HumanimplementedA user-kind Actor belongs to one Human and supplies that Human’s participant identity.
REL-ACT-NSPActor ↔ NamespaceimplementedNamespace access is derived through user/agent policy rather than Actor FK.
REL-ACT-RLYActor ↔ RelayimplementedRelay identity resolves to user/session context; no direct Actor edge is required.
REL-ACT-RMSActor ↔ Roomimplementedroom_members.actor_id is the direct Actor-to-Room participation edge.
REL-ACT-ROLActor ↔ RoleimplementedRoles bind principals through groups/policy, not generic Actor.
REL-ACT-SRVActor ↔ ServerimplementedActors are local to the deployment today; foreign-origin federation stubs remain future scope.
REL-ACT-TOLActor ↔ ToolimplementedTool execution receives resolved principal context rather than an Actor relationship.
REL-AGT-CAPAgent ↔ CapabilityimplementedAgent authority is resolved through policy and grants; no direct capability join is required.
REL-AGT-CHNAgent ↔ ChannelimplementedAgent participation in channel-like Room edges is current and indirect.
REL-AGT-CONAgent ↔ ConnectionimplementedVault records, Agent scope, readable Namespaces, and Tool Connection requirements are current; per-Namespace derived keys remain future security design.
REL-AGT-DEVAgent ↔ DeviceimplementedAgent work reaches clients through sessions/Relay; a direct Device edge is intentionally absent.
REL-AGT-GRPAgent ↔ GroupimplementedAgent group membership and resulting authority are current.
REL-AGT-HUMAgent ↔ HumanimplementedProfile ownership and manage_agents authority form the current Human-to-Agent relationship.
REL-AGT-NSPAgent ↔ NamespaceimplementedAgent-readable and shared Namespace behavior is current; “ownership” terminology needs owner review.
REL-AGT-RLYAgent ↔ RelayimplementedThe Relay registry and capability-matched execution are current; the supported implementations are the ones present in the pinned source tree.
REL-AGT-RMSAgent ↔ RoomimplementedAgent Room membership, routing, and conversational participation are current.
REL-AGT-ROLAgent ↔ RoleimplementedAgent authority is mediated through group/role policy rather than a per-Agent role table.
REL-AGT-SRVAgent ↔ ServerimplementedAgents are deployment-local current entities.
REL-AGT-TOLAgent ↔ ToolimplementedAgent tool execution and catalog filtering are current runtime behavior.
REL-CAP-CHNCapability ↔ ChannelimplementedChannel-like behavior is governed through Room/policy context, not a direct edge.
REL-CAP-CONCapability ↔ ConnectionimplementedConnection use is gated through policy and scope, not a Capability FK on each secret.
REL-CAP-DEVCapability ↔ DeviceimplementedDevice/client permissions are runtime/session concerns; no direct durable edge is current.
REL-CAP-GRPCapability ↔ GroupimplementedGroup roles aggregate capabilities through the current RBAC joins.
REL-CAP-HUMCapability ↔ HumanimplementedHuman capabilities are derived from group-role membership.
REL-CAP-NSPCapability ↔ NamespaceimplementedThe no-direct-edge invariant is current; obsolete shared-memory capability slugs are absent from the catalog.
REL-CAP-RLYCapability ↔ RelayimplementedCurrent Relay capability snapshots describe executor features; they are distinct from Human authorization Capabilities.
REL-CAP-RMSCapability ↔ RoomimplementedRoom actions consume resolved policy; no per-Room capability join is required.
REL-CAP-ROLCapability ↔ RoleimplementedRole-capability joins and the canonical role ladder are current.
REL-CAP-SRVCapability ↔ ServerimplementedCapability definitions and grants are server-local.
REL-CAP-TOLCapability ↔ ToolimplementedTool availability is dynamically filtered by resolved policy and runtime context.
REL-CHN-CONChannel ↔ ConnectionimplementedConnection use occurs through tools/Room context, not a Channel secret edge.
REL-CHN-DEVChannel ↔ DevicetargetNo canonical Channel–Device relationship exists; MLS/device fan-out belongs to the future security model.
REL-CHN-GRPChannel ↔ GroupimplementedChannel-like Room access is mediated by Room membership and policy.
REL-CHN-HUMChannel ↔ HumanimplementedHuman participation in channel-like Rooms is current.
REL-CHN-NSPChannel ↔ NamespaceimplementedChannel is vocabulary over a Room already bound to a Namespace.
REL-CHN-RLYChannel ↔ RelayimplementedRelay can surface Room communication without a durable Channel edge.
REL-CHN-RMSChannel ↔ RoomimplementedChannel is an attribute/interaction shape of Room, not a separate stored entity.
REL-CHN-ROLChannel ↔ RoleimplementedChannel actions use resolved Room/server policy rather than channel-specific roles.
REL-CHN-SRVChannel ↔ ServerimplementedChannel-like Rooms are deployment-local current behavior.
REL-CHN-TOLChannel ↔ ToolimplementedTool use occurs in Room/session context; no Channel–Tool join is needed.
REL-CON-DEVConnection ↔ DeviceimplementedSecret access is mediated through authenticated user/agent runtime context, not a durable Device edge.
REL-CON-GRPConnection ↔ GroupimplementedGroup policy may authorize use, but vault scope is not modeled as a direct Group relationship.
REL-CON-HUMConnection ↔ HumanimplementedVault metadata now records authored_by_user_id; routes supply the session user.
REL-CON-NSPConnection ↔ NamespaceimplementedUser, Agent, and Namespace-scoped ConnectionScope behavior is current.
REL-CON-RLYConnection ↔ RelayimplementedConnection brokering through Relay/tool execution is current without exposing stored values in catalog metadata.
REL-CON-RMSConnection ↔ RoomimplementedRoom access resolves indirectly through its Namespace and active execution context.
REL-CON-ROLConnection ↔ RoleimplementedPolicy gates Connection operations; no direct Role join is necessary.
REL-CON-SRVConnection ↔ ServerimplementedEach deployment owns its Vault backend; per-Namespace derived-key claims remain future crypto design.
REL-CON-TOLConnection ↔ ToolimplementedTool catalog entries can declare Connection requirements and runtime tooling resolves them.
REL-DEV-GRPDevice ↔ GroupimplementedCurrent session/client identity does not require a durable Device–Group join.
REL-DEV-HUMDevice ↔ HumantargetInstallation and workstation identities exist, but a unified durable multi-user Device entity does not.
REL-DEV-NSPDevice ↔ NamespaceimplementedNamespace access follows authenticated principal context rather than Device ownership.
REL-DEV-RLYDevice ↔ RelaytargetRelay tokens bind user and installation and sessions bind Relay identity; the canonical Device ontology is still future work.
REL-DEV-RMSDevice ↔ RoomtargetDurable per-Device Room/MLS membership is future application-encryption work.
REL-DEV-ROLDevice ↔ RoleimplementedAuthorization belongs to the principal, not the client device.
REL-DEV-SRVDevice ↔ ServerimplementedAuth sessions, installation identity, and Relay binding provide the current runtime association; durable Device remains target-only.
REL-DEV-TOLDevice ↔ ToolimplementedPlatform/client constraints filter tool availability at runtime.
REL-GRP-HUMGroup ↔ HumanimplementedHuman group membership is current.
REL-GRP-NSPGroup ↔ NamespaceimplementedNamespace authority is derived through group-role policy rather than a direct Group FK.
REL-GRP-RLYGroup ↔ RelayimplementedRelay operations use authenticated principal policy rather than Group ownership.
REL-GRP-RMSGroup ↔ RoomimplementedRoom access and membership are distinct from server-wide Group membership by design.
REL-GRP-ROLGroup ↔ RoleimplementedThe many-to-many group-role join is current.
REL-GRP-SRVGroup ↔ ServerimplementedGroups are server-local current entities.
REL-GRP-TOLGroup ↔ ToolimplementedTool policy is derived through roles/capabilities, not a direct Group–Tool join.
REL-HUM-NSPHuman ↔ NamespaceimplementedNamespace readability queries and grants are current; normalize the file-and-symbol citation format.
REL-HUM-RLYHuman ↔ RelayimplementedRelay tokens bind user_id and installation identity, giving current Relay sessions a persistent Human association.
REL-HUM-RMSHuman ↔ RoomimplementedHuman Room membership through user-kind Actors is current.
REL-HUM-ROLHuman ↔ RoleimplementedHuman roles are derived through group membership.
REL-HUM-SRVHuman ↔ Serverimplementedusers.server records current deployment locality; foreign-user stubs belong to future federation.
REL-HUM-TOLHuman ↔ ToolimplementedPer-user policy, activation, posture, and context filter tool use dynamically.
REL-NSP-RLYNamespace ↔ RelayimplementedRelay execution receives scoped context without a durable Namespace–Relay join.
REL-NSP-RMSNamespace ↔ RoomimplementedEvery Room has a Namespace; universal top-level 1:1 uniqueness is an application convention, not a schema guarantee.
REL-NSP-ROLNamespace ↔ RoleimplementedNamespace access combines scoped grants and server policy; no direct Role FK is required.
REL-NSP-SRVNamespace ↔ ServerimplementedNamespaces are deployment-local through their current Room and data relationships; there is no namespaces.owner_id column.
REL-NSP-TOLNamespace ↔ ToolimplementedNamespace-aware tool envelopes and execution context are current.
REL-RLY-RMSRelay ↔ RoomimplementedRelay participates in Room work through authenticated sessions and tool/browser execution.
REL-RLY-ROLRelay ↔ RoleimplementedRelay actions inherit principal policy and capability snapshots.
REL-RLY-SRVRelay ↔ ServerimplementedRelay registration and endpoints are scoped to the deployment.
REL-RLY-TOLRelay ↔ ToolimplementedRelay capability advertisement and proxy execution are current.
REL-RMS-RMSRoom ↔ RoomimplementedParent Room, thread-root, Room-kind, and inherited Namespace behavior define the current Subthread relationship.
REL-RMS-ROLRoom ↔ RoleimplementedRoom actions use resolved server policy and membership rather than per-Room roles.
REL-RMS-SRVRoom ↔ ServerimplementedRooms are server-local current entities; cross-server/federated Rooms remain future scope.
REL-RMS-TOLRoom ↔ ToolimplementedRoom/session context participates in current tool availability and execution.
REL-ROL-SRVRole ↔ ServerimplementedRoles are server-local, Groups carry them through the many-to-many group_roles join, and the canonical ladder is seeded per deployment.
REL-ROL-TOLRole ↔ ToolimplementedTool authorization is indirect through Role → Capability → Tool; no direct Role-to-Tool join is required.
REL-SRV-TOLServer ↔ ToolimplementedTool catalog, activation, policy, and runtime availability are deployment-scoped.