# Review: Enterprise Network Suite β€” Gap Analysis **Date**: 2026-04-29 **Updated**: 2026-05-01 **Reviewer**: Kimi Code CLI **Scope**: All OpenSpec network changes (`network-*`, `network-plugin-*`, capability specs) --- ## πŸ”΄ CRITICAL ISSUE: Package Name Collision There are **two competing `@suaveplan/network` packages** proposed: | Proposal | Date | Architecture | Target Path | |---|---|---|---| | `enterprise-network` | 2026-04-24 | HTTP/WebSocket client + URL utils | `universal/network/network` | | `network-core` | 2026-04-29 | Plugin-based mesh core (`NetworkNode`, `NetworkBus`) | `packages/network/network` | **Resolution**: `enterprise-network` is renamed to `@suaveplan/network-client` and moved to `universal/network/network-client`. The mesh core retains `@suaveplan/network`. See change `enterprise-network-rename`. --- ## πŸ”΄ CRITICAL GAP 1: Cross-Mesh Message Relay (The "Federation Layer") **Status**: βœ… CAPTURED in `network-plugin-relay` (change `network-plugin-relay`). **Conformance**: NET-61 through NET-70. --- ## πŸ”΄ CRITICAL GAP 2: Mesh Auto-Assignment / Load Balancing **Status**: βœ… CAPTURED in `network-plugin-assignment` (change `network-plugin-assignment`). **Conformance**: NET-71 through NET-77. --- ## 🟠 MAJOR GAP 3: Intra-Mesh Tiered Message Routing **Status**: βœ… CAPTURED as enhancement to `network-plugin-topology` (change `network-plugin-topology`). Tiered routing rules added to topology proposal: leafβ†’leaf via ancestor, hostβ†’leaf via sub-hosts, tree broadcast, cross-tier credential delegation. --- ## 🟠 MAJOR GAP 4: Split-Brain Detection & Resolution **Status**: βœ… CAPTURED in `network-plugin-partition` (change `network-plugin-partition`). **Conformance**: NET-78 through NET-83. `network-plugin-failover` updated to explicitly exclude split-brain and reference this plugin. --- ## 🟠 MAJOR GAP 5: Circuit Breakers at Mesh Boundary **Status**: βœ… CAPTURED in `network-plugin-circuit-breaker` (change `network-plugin-circuit-breaker`). **Conformance**: NET-84 through NET-90. --- ## 🟑 MEDIUM GAP 6: Mesh-Level Observability **Status**: βœ… PARTIALLY COVERED by `network-plugin-monitor` (NET-44). Mesh health aggregates and cross-mesh relay latency tracking are deferred to v2 as monitor enhancements. --- ## 🟑 MEDIUM GAP 7: Bandwidth Management / QoS **Status**: βœ… CAPTURED in `network-plugin-qos` (change `network-plugin-qos`). **Conformance**: NET-91 through NET-98. --- ## 🟑 MEDIUM GAP 8: Connection Migration **Status**: βœ… CAPTURED in `network-plugin-migration` (change `network-plugin-migration`). **Conformance**: NET-99 through NET-105. --- ## 🟑 MEDIUM GAP 9: Mesh-Level Security / Authentication **Status**: βœ… CAPTURED in `network-plugin-auth` (change `network-plugin-auth`). **Conformance**: NET-106 through NET-112. --- ## 🟒 MINOR GAP 10: Duplicate Proposal Consolidation **Status**: βœ… RESOLVED. The `enterprise-network-*` proposals (dated 2026-04-24) are standalone packages. The `network-plugin-*` proposals (dated 2026-04-29) are plugin-based and designed for the mesh architecture. The plugin-based approach is correct. Valuable primitives from the pre-existing proposals (observability, quality, testing, standby transport, assignment algorithms) are consumed as dependencies where applicable. --- ## Summary Table: Missing Packages | Priority | Package | Purpose | Status | |---|---|---|---| | πŸ”΄ P0 | `mesh-relay` / `network-plugin-relay` | Cross-mesh message routing | βœ… CAPTURED | | πŸ”΄ P0 | `mesh-assignment` / `network-plugin-assignment` | Auto-place peers into meshes | βœ… CAPTURED | | 🟠 P1 | `mesh-router` / tiered routing in topology | Intra-mesh tiered forwarding | βœ… CAPTURED | | 🟠 P1 | `mesh-partition` / split-brain detector | Partition detection & merge | βœ… CAPTURED | | 🟠 P1 | `mesh-circuit-breaker` | Relay path circuit breaking | βœ… CAPTURED | | 🟑 P2 | `mesh-qos` / protocol priority | Message prioritization | βœ… CAPTURED | | 🟒 P3 | `network-plugin-session` | Logical sessions, nested hierarchies, scoped routing | βœ… CREATED | | 🟑 P2 | `mesh-migration` | Peer migration between meshes | βœ… CAPTURED | | 🟑 P2 | `mesh-auth` | Mesh membership & relay auth | βœ… CAPTURED | | 🟒 P3 | β€” (consolidate duplicates) | Merge parallel proposals | βœ… RESOLVED | --- ## Recommended Architecture Overview ```text β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ MESH FEDERATION LAYER β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Relay β”‚ β”‚ Assignment β”‚ β”‚ Partition β”‚ β”‚ Circuit β”‚ β”‚ β”‚ β”‚ Router β”‚ β”‚ Engine β”‚ β”‚ Detector β”‚ β”‚ Breaker β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ Host Backbone (Tier 0 ↔ Tier 0) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ SESSION OVERLAY β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Session β”‚ β”‚ Session β”‚ β”‚ Session β”‚ β”‚ Parent β”‚ β”‚ β”‚ β”‚ Manager β”‚ β”‚ Router β”‚ β”‚ Host β”‚ β”‚ Bridge β”‚ β”‚ β”‚ β”‚ (Tree) β”‚ β”‚ (Scope) β”‚ β”‚ (Election) β”‚ β”‚ (State) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ Session-scoped messages β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ PER-MESH ORCHESTRATION β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ Topology β”‚ β”‚ Governance β”‚ β”‚ Failover β”‚ β”‚ Registry β”‚ β”‚ β”‚ β”‚ (Tiers) β”‚ β”‚ (Elections)β”‚ β”‚ (Health) β”‚ β”‚ (Peers) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ NetworkBus (intra-mesh) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ TRANSPORT LAYER β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ WebRTC β”‚ β”‚ WebSocket β”‚ β”‚ Standby β”‚ β”‚ Protocol β”‚ β”‚ β”‚ β”‚ (P2P) β”‚ β”‚ (Client) β”‚ β”‚ Transport β”‚ β”‚ (Encoding) β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- ## Next Steps 1. βœ… Resolve naming conflict β€” rename `enterprise-network` to `@suaveplan/network-client` 2. βœ… Create `network-plugin-relay` proposal β€” highest priority, enables the core user requirement 3. βœ… Create `network-plugin-assignment` proposal β€” enables automatic scaling 4. βœ… Update `network-plugin-topology` β€” add tiered routing specification 5. βœ… Create `network-plugin-partition` proposal β€” add split-brain detection 6. βœ… Create `network-plugin-circuit-breaker` proposal β€” add mesh boundary resilience 7. βœ… Create `network-plugin-qos` proposal β€” add bandwidth management 8. βœ… Create `network-plugin-migration` proposal β€” add peer migration 9. βœ… Create `network-plugin-auth` proposal β€” add mesh membership auth 10. βœ… Update `specs/network/spec.md` with NET-61 through NET-112 11. ⏳ Implement each new change following AGENTS.md verification standards