7.0 KiB
OpenSpec Change: network-plugin-topology
- Change ID: network-plugin-topology
- Package:
@suaveplan/network-plugin-topology(new) - Status: PROPOSED
- Type: new-package
- Date: 2026-04-29
Why
The tiered network needs explicit topology management: promoting/demoting nodes across tiers, tracking group membership, and assigning nodes to latency groups. The genesis fsm and events packages provide primitives. This plugin implements the HierarchicalTopologyImpl (Tier 0 Host, Tier 1 SubHost, Tier 2 Leaf) and LatencyAssigner consumed by the network-webrtc mesh.
What changes
- ADDED:
TopologyPluginclass implementingNetworkPlugin. - ADDED:
HierarchicalTopologyImpl— managesTier 0 → Tier 1 → Tier 2hierarchy, promotion/demotion. - ADDED:
LatencyAssigner— assigns peers to latency groups based on RTT, rebalances periodically. - ADDED:
GroupManager— tracks group membership, handles join/leave. - ADDED:
NETWORK_TOPO_CODES— frozen error registry.
Out of scope
- Global topology view across many groups → deferred to federation layer.
- Persistent topology state → future
network-plugin-topology-persistence.
Source mapping
This change derives from ../suaveplan/enterprise/network-topology.md and ../suaveplan/packages/universal/network-topology/.
| Requirement | Source lines | Notes |
|---|---|---|
| Tier 0 Host, Tier 1 SubHost, Tier 2 Leaf | network-topology/README.md §HierarchicalTopologyImpl |
verbatim |
| Promotion/demotion | network-topology/README.md §HierarchicalTopologyImpl |
verbatim |
| Latency-based group assignment | network-topology/README.md §LatencyAssigner |
verbatim |
| Rebalancing | network-topology/README.md §LatencyAssigner |
verbatim |
Requirements with no source line
| Requirement | Justification |
|---|---|
TopologyPlugin implements NetworkPlugin |
Required to plug into NetworkNode |
Consumes election:result from bus |
Loose coupling to governance plugin |
Consumes peer:latency from bus |
Loose coupling to webrtc plugin |
Verification approach
src/topology/topology.spec-conformance.test.ts— pins tier assignment, promotion, demotion.src/latency/latency.spec-conformance.test.ts— pins group assignment, rebalancing, thresholds.src/group/group.spec-conformance.test.ts— pins join/leave, membership tracking.tests/dep-graph.test.ts— pins no direct import of webrtc or governance packages.
Enhancement: Resource-Constrained Adaptation
Source: docs/old-network-planning/ADAPT_3.md §Resource Management, PHASE_5.md §Performance Metrics, PLAN_ENHANCED_PHASE_5.md
The topology must adapt to device capabilities:
DeviceProfiler— classifies peers into profiles:CONSTRAINED,STANDARD,POWERFUL,SERVER.ResourceBalancer— monitors CPU, memory, bandwidth utilization. Detects imbalances and recommends promotions/demotions.AdaptiveTierDepth— adjusts maximum tier depth based on network size (logarithmic scaling) and available high-resource nodes.MessagePool— reduces allocations for constrained devices via object pooling.ZeroCopyPassing— where possible, passes message references instead of copying bytes between transport and protocol layers.BatteryAwareMode— whenDeviceProfileisCONSTRAINEDand battery level is low, reduces heartbeat frequency, defers non-urgent reorganizations, and lowers transport retry aggression.BandwidthConservation—moderateandaggressivemodes that reduce gossip frequency, compress registry deltas more aggressively, and batch lower-priority messages.
Enhancement: Tier Partition Handler
Source: docs/old-network-planning/MODULAR_IMPLEMENTATION_PHASE_5.md §TierPartitionHandler, TIER_PARTITION_HANDLER_TEST_FIX_PLAN.md
PartitionDetector— builds connectivity map, detects isolated subgraphs via multi-factor analysis (heartbeat, path verification, consensus).PartitionManager— allows partitions to function autonomously with local hierarchies. Tracks partition size, composition, resource distribution.PartitionRecovery— controlled reconnection with prioritized sequence. Merges hierarchies using primary partition selection (size-based, performance-based, or hybrid).StateReconciliationOnMerge— reconciles diverged states after partition healing.
Enhancement: Geographic-Aware Routing
Source: docs/old-network-planning/PLAN_ENHANCED_PHASE_5.md §Geographic Optimization
GeoLocator— tracks peer geographic region (inferred from latency or explicit metadata).RegionalClustering— preferentially groups peers from same region.GeoLatencyOptimizer— minimizes cross-region latency in parent-child assignments.
Enhancement: Circuit Breaker & Hysteresis
Source: docs/old-network-planning/PHASE_5.md §Cascading Failure Prevention
ReorganizationCircuitBreaker— pauses reorganizations during cascading failures:- Time-based: suspend for configurable period.
- Count-based: limit reorganizations per time window.
- Impact-based: evaluate disruption before proceeding.
PromotionHysteresis— cooldown periods after level changes to prevent oscillation.StabilityThreshold— minimum stability period before promotion eligibility.
Enhancement: Empty Tier Handling
Source: docs/old-network-planning/PHASE_5.md §Empty Tier Handling
EmptyTierDetector— monitors node counts per tier.EmptyTierRemover— removes empty tiers, reconnects adjacent levels, renumbers affected tiers.TierRenumberer— updates level numbers and configurations consistently.
Enhancement: Tiered Routing Rules
Gap: The topology plugin manages tiers but there is no specification for how messages flow between tiers. This enhancement adds explicit routing rules.
Routing rules:
- Leaf → Leaf (same mesh): Route through nearest common ancestor (Tier 1 or Tier 0). Direct leaf-to-leaf sends are disallowed unless the topology is flat (no Tier 1 sub-hosts).
- Leaf → Host: Direct if connected, else via Tier 1 sub-host.
- Host → Leaf: Forward through Tier 1 sub-hosts. Tier 0 does not flood all peers directly; it delegates to sub-hosts.
- Broadcast: Fan out from Tier 0 → Tier 1 → Tier 2 (tree broadcast, not mesh flood).
- Cross-tier credential delegation: Cross-tier operations require explicit credential delegation from a higher tier (enforced by
network-plugin-crypto-messages).
Components:
TieredRouter— implements the routing rules above. Consumes topology state and producesnextHopdecisions.BroadcastTree— builds a spanning tree from Tier 0 for mesh-wide broadcasts. Rebuilt on everytopology:changedevent.RouteCache— caches frequently used(sourceTier, targetTier, targetId) → nextHopmappings. Invalidated on topology changes.
Integration with partition plugin: When network-plugin-partition detects a split, TieredRouter falls back to partition-local routing. When partitions heal, the broadcast tree is rebuilt.
Migration impact
None — additive only.