Files
suaveplan/docs/network/implementation-status.md
2026-05-27 23:29:53 +01:00

125 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Network — Implementation Status
Source of truth: [`STATUS.md`](../../STATUS.md), [`openspec/specs/network/spec.md`](../../openspec/specs/network/spec.md), and the in-flight changes under `openspec/changes/network-*` and `openspec/changes/enterprise-network-*`.
## Shipped on `genesis` (genesis-original — newer plugin model)
| Package | Notes |
| --- | --- |
| `@suaveplan/network` | The substrate. `NetworkNode`, `NetworkPlugin`, `NetworkBus`, `MessageEnvelope`, `Transport`, `MessageRouter`, `PluginManager`, `NetworkTimestamp`, `VersionInfo`. NET-01..05, NET-12, NET-53..55. |
| `@suaveplan/network-plugin-protocol` | 13-byte binary header, encoder/decoder, pipeline, priority queue, batcher, TTL, loop detector, three serializers (JSON/Binary/MessagePack). NET-15..17, NET-25, NET-45, NET-57..59. |
| `@suaveplan/network-plugin-registry` | Fixed-capacity peer registry with bitpacker delta sync. NET-09, NET-13. |
| `@suaveplan/network-transport-webrtc` | WebRTC transport + PingManager. NET-06..07. |
| `@suaveplan/network-failover` | Heartbeat FSM, failover trigger. NET-10. |
| `@suaveplan/network-governance` | Election, voting, host selection. NET-08. |
| `@suaveplan/network-topology` | Tier 0/1/2 graph. NET-11. |
| `@suaveplan/network-transport-websockets` | WebSocket transport, queue, heartbeat, adapters. |
| `@suaveplan/network-testing` | MemoryTransport, FakeWebSocketAdapter, ConditionSimulator, TestPeer factory, EventCapture. |
## Pending — to be ported from `main` (older naming)
| Package | Description (from main `README.md`) |
| --- | --- |
| `@suaveplan/network-protocol` | Network protocol abstractions. **Older naming — most content already in `network-plugin-protocol`.** |
| `@suaveplan/network-registry` | Network service/peer registry. **Older naming — most content already in `network-plugin-registry`.** |
| `@suaveplan/network-webrtc` | WebRTC peer-to-peer networking. **Older naming — most content in `network-transport-webrtc`.** |
| `@suaveplan/network-libp2p` | libp2p-based decentralized networking. |
| `@suaveplan/network-libp2p-server` | libp2p server with auto-relay. |
| `@suaveplan/network-hyperswarm` | Hyperswarm DHT networking. |
| `@suaveplan/network-trystero-server` | Trystero serverless P2P "server" relay. |
| `@suaveplan/network-gundb-server` | Gun.js relay peer. |
| `@suaveplan/network-discovery-{crdt,gundb,peerjs,trystero,webtorrent,hybrid}` | Six discovery plugins. |
| `@suaveplan/network-bootstrap` | Network bootstrap and initialisation. |
| `@suaveplan/network-quality` | Network quality monitoring. |
| `@suaveplan/network-observability` | Application monitoring. |
| `@suaveplan/network-assignment` | Role/resource assignment. |
| `@suaveplan/network-standby-transport` | Pre-emptive WebRTC standby transport. |
The "older naming" rows reflect a 2025-era split where each subsystem lived in its own package; the newer `network-plugin-*` naming is the genesis plugin-architecture form. Some of these will be **archived without a port** (`network-protocol`, `network-registry`, `network-webrtc`) because their content is already in the genesis equivalents. Verify before porting.
## Planned — new on `genesis` (the `network-suite` 21 plugins)
The full set of plugins from `network-suite` ([proposal](../../openspec/changes/network-suite/proposal.md)). Already-shipped subset is omitted; the remaining are:
| Package | Spec | Notes |
| --- | --- | --- |
| `@suaveplan/network-plugin-transport-manager` | NET-23..26, 46, 60, 123..124 | Multi-transport orchestration. |
| `@suaveplan/network-plugin-content-delivery` | NET-35..36 | Mesh-wide chunk redundancy. The drive-mesh consumer side. |
| `@suaveplan/network-plugin-audit-mesh` | NET-37..39 | Signed append-only logs. |
| `@suaveplan/network-plugin-relay` | NET-40, 61..70 | Cross-mesh forwarding. |
| `@suaveplan/network-plugin-assignment` | NET-71..77 | Peer→mesh assignment. |
| `@suaveplan/network-plugin-partition` | NET-78..83 | Partition detection + merge. |
| `@suaveplan/network-plugin-circuit-breaker` | NET-84..90 | Per-path breaker. |
| `@suaveplan/network-plugin-qos` | NET-91..98 | QoS classes + quotas. |
| `@suaveplan/network-plugin-migration` | NET-99..105 | 8-step peer migration. |
| `@suaveplan/network-plugin-auth` | NET-106..112 | Mesh + capability tokens, cross-mesh trust. |
| `@suaveplan/network-plugin-server-bridge` | NET-31..34, 56 | Server WebSocket bridge + 4 hosting models + offline mode. |
| `@suaveplan/network-plugin-session` | NET-18..22 | Session trees, nested hierarchies, per-session election, capacity. |
| `@suaveplan/network-plugin-crypto-messages` | NET-27..30, 47..48 | Ed25519 message signing. Plugin security verifier. Tier policies. |
| `@suaveplan/network-plugin-middleware` | NET-41 | Priority middleware pipeline. |
| `@suaveplan/network-plugin-state` | NET-42 | Versioned path-based state. |
| `@suaveplan/network-plugin-monitor` | NET-44 | OTel-compatible metrics + tracing. |
| `@suaveplan/network-plugin-simulation` | NET-43 | Deterministic virtual mesh + scenarios. |
| `@suaveplan/network-plugin-governance` enhancements | NET-118..119 | HostSelector with HostHistory (some shipped). |
| `@suaveplan/network-plugin-topology` enhancements | NET-49..52, 120..122 | Adaptive tier depth, partition handling, geo, battery, message pool. |
`network-suite/REVIEW-GAPS.md` lists 10 cross-cutting gaps that the per-plugin proposals address. The package-name collision (`enterprise-network` vs `network-core`) was resolved by renaming `enterprise-network` to `network-client`.
## Pending changes to consolidate (cleanup work)
There are a number of `enterprise-network-*` and `enterprise-browser-network-*` change folders that pre-date the `network-suite` reorganisation. Most are now subsumed:
| Folder | Status |
| --- | --- |
| `enterprise-network` | Rename to `network-client`; subset of features now in `network-suite`. |
| `enterprise-network-bootstrap` | Subsumed by `network-core` `BootstrapOptions`. |
| `enterprise-network-failover` | Subsumed by `network-plugin-failover` (already shipped). |
| `enterprise-network-governance` | Subsumed by `network-plugin-governance` (already shipped). |
| `enterprise-network-protocol` | Subsumed by `network-plugin-protocol` (already shipped). |
| `enterprise-network-registry` | Subsumed by `network-plugin-registry` (already shipped). |
| `enterprise-network-quality` | To become `network-plugin-monitor`. |
| `enterprise-network-observability` | To become `network-plugin-monitor`. |
| `enterprise-network-rename` | A no-code change to rename `enterprise-network` → `network-client`. |
| `enterprise-network-assignment` | To become `network-plugin-assignment`. |
| `enterprise-network-standby-transport` | To become `network-plugin-transport-manager`'s standby/preemptive feature. |
| `enterprise-network-testing` | Already shipped as `@suaveplan/network-testing`. |
| `enterprise-network-transport-websockets` | Already shipped as `@suaveplan/network-transport-websockets`. |
| `enterprise-browser-network-*` | All to be consolidated under the discovery plugins or `network-transport-webrtc`. |
These folders should be reviewed, archived, or rewritten to point at the canonical `network-suite` proposals. They are clutter, not architecture.
## Critical-path order (network)
1. **Land the `enterprise-types-cross-cutting` archive** (shared with drive prerequisite).
2. **Land `network-suite` REVIEW-GAPS resolutions** (no code; just spec consolidation). Includes the rename `enterprise-network` → `network-client` and archive of the duplicate `enterprise-network-*` folders.
3. **Implement `network-plugin-crypto-messages`** — message signing is foundational for everything else.
4. **Implement `network-plugin-transport-manager`** — multi-transport orchestration. Existing webrtc + websockets transports plug in.
5. **Implement `network-plugin-session`** — sessions are the unit of group membership.
6. **Implement `network-plugin-server-bridge`** — enables `SERVER_TO_CLIENT_FAILOVER` model. Brings hosting-model selection into the mesh.
7. **Implement `network-plugin-auth`** — token issuance + cross-mesh trust.
8. **Implement `network-plugin-relay`** — cross-mesh hops.
9. **Implement `network-plugin-content-delivery`** — drive's bus consumer.
10. **Implement `network-plugin-audit-mesh`** — signed logs.
11. **Implement `network-plugin-partition` + `network-plugin-circuit-breaker` + `network-plugin-qos` + `network-plugin-migration`**. Resilience tier.
12. **Implement `network-plugin-state`, `network-plugin-monitor`, `network-plugin-simulation`, `network-plugin-middleware`**. Operational tier.
13. **Port the discovery plugins** in any order — they feed `network-plugin-registry`.
Steps 3–4 are blocking; the rest can parallelise within their tier.
## Test debt to inherit / avoid
The `docs/old-network-planning/` folder has several files documenting real test-isolation bugs in the main-branch network code: shared `MemoryTransport._instances`, singleton `TimerController`, real `setTimeout` in time-sensitive tests, voting history not cleared between tests. The genesis fix is structural:
- `MemoryTransport` from `@suaveplan/network-testing` is per-test (no static registry).
- `FakeClock` from `@suaveplan/testing` is the only timer source.
- Each `NetworkNode` is fresh per test.
- All integration tests use `@suaveplan/testing-integration` fixtures (parallel-start, reverse-stop, idempotent teardown).
Don't re-import the old test patterns when porting. Use the genesis testing infrastructure.
## Related cross-cutting work
- `enterprise-streams-redesign` — `BaseTransform`, `CryptoTransform`, `BaseDuplexStream`, `NetworkStreamImpl`. Required for `network-plugin-protocol`'s pipeline (CryptoTransform/compressStream) and for `drive-plugin-chunks`'s real streaming AEAD.
- `enterprise-streams-chunk-queue` — bounded backpressure-aware `ChunkQueue` bridging sync producers and async WHATWG consumers.
- `enterprise-streams-metadata` — pass-through `TransformStream` extracting MIME/EXIF/audio metadata via side-channel `metadata: Promise<ExtractedMetadata>`. Drive `metadata` plugin consumes this.