# JetStream Final Remaining Parity Design **Date:** 2026-02-23 **Status:** Approved **Scope:** Complete all remaining JetStream functionality and required transport prerequisites from Go in the .NET server, with strict parity closure criteria. ## 1. Architecture and Scope Boundary Remaining parity is executed in three ordered layers: 1. Cluster transport prerequisites - Complete route wire protocol behavior (RS+/RS-, RMSG forwarding, route pool baseline). - Replace gateway and leaf-node stub behavior with functional networking/handshake/interest propagation sufficient for JetStream parity dependencies. 2. JetStream semantic completion - Finish stream/consumer behavior still marked partial (retention/discard/runtime policy enforcement, delivery/replay/fetch/ack edge semantics, dedupe window/expected-header semantics, snapshot/restore durability semantics). 3. Parity closure and verification - Remove JetStream "partial" status from `differences.md` unless an explicit non-JetStream blocker remains. - Maintain evidence mapping from Go feature to .NET implementation and proving tests. ## 2. Component Plan ### A. Route/Gateway/Leaf transport completion - Expand: - `src/NATS.Server/Routes/RouteManager.cs` - `src/NATS.Server/Routes/RouteConnection.cs` - Add wire-level RS+/RS- and RMSG behavior, and route pool baseline behavior. - Replace stub-only behavior in: - `src/NATS.Server/Gateways/GatewayManager.cs` - `src/NATS.Server/LeafNodes/LeafNodeManager.cs` with functional baseline networking/handshake and interest propagation. ### B. JetStream API surface completion - Expand: - `src/NATS.Server/JetStream/Api/JetStreamApiSubjects.cs` - `src/NATS.Server/JetStream/Api/JetStreamApiRouter.cs` - `src/NATS.Server/JetStream/Api/Handlers/*` - Cover remaining Go API families and durable/create/control variants with contract-accurate response shapes. ### C. Stream/consumer semantic completion - Refine: - `src/NATS.Server/JetStream/StreamManager.cs` - `src/NATS.Server/JetStream/ConsumerManager.cs` - `src/NATS.Server/JetStream/Consumers/*` - `src/NATS.Server/JetStream/Publish/*` - Ensure modeled policies are fully enforced at runtime. ### D. Store/recovery and RAFT semantics - Expand: - `src/NATS.Server/JetStream/Storage/*` - `src/NATS.Server/JetStream/Snapshots/*` - `src/NATS.Server/Raft/*` - Move from shape-level support to behavior-level durability and distributed-state correctness. ### E. Monitoring + evidence - Update JetStream/cluster monitoring paths and models to reflect real runtime behavior. - Keep parity map and `differences.md` synchronized with test-backed implementation state. ## 3. Data Flow and Behavioral Contracts 1. Inter-server flow - Subscription changes emit RS+/RS- over links. - Remote interest updates local routing state. - Publish with remote interest forwards via RMSG-equivalent behavior preserving subject/reply/header semantics. 2. JetStream API flow - `$JS.API.*` arrives through request/reply message path. - Router dispatches handlers; handlers validate contract and cluster state; responses encode deterministic success/error semantics. 3. Publish/capture flow - Publish traverses normal routing and JetStream capture. - Preconditions run before append. - Append mutates stream state/indexes; mirror/source/consumer engines observe committed state. 4. Consumer delivery flow - Pull/push share canonical pending/ack/redelivery state. - Control operations (`pause/reset/unpin/request-next/update`) mutate consistent state. - Restart/recovery preserves deterministic observable behavior. 5. Store/recovery flow - Writes update payload and lookup structures. - Snapshot/restore and restart replay reconstruct equivalent stream/consumer state. - RAFT gates cluster-visible transitions where required. 6. Observability flow - `/jsz`, `/varz`, and cluster endpoints report live behavior after transport/JetStream completion. ## 4. Error Handling and Verification ### Error handling - Preserve JetStream-specific error semantics over generic fallbacks. - Maintain separate error classes for: - request/config validation - state conflicts/not found - leadership/quorum/stepdown - transport connectivity/peer state - storage/recovery integrity. ### Strict completion gate 1. No remaining JetStream "partial" in `differences.md` unless clearly blocked outside JetStream scope and explicitly documented. 2. Unit and integration evidence for each completed feature area (transport + JetStream). 3. Parity mapping document updated with Go contract, .NET file paths, proving tests, and status. 4. Regression gates pass: - focused JetStream/route/gateway/leaf/raft suites - full `dotnet test` - verification summary artifact.