Files
natsnet/docs/plans/phases/phase6sessions/readme.md
Joseph Doherty 88b1391ef0 feat: port session 07 — Protocol Parser, Auth extras (TPM/certidp/certstore), Internal utilities & data structures
Session 07 scope (5 features, 17 tests, ~1165 Go LOC):
- Protocol/ParserTypes.cs: ParserState enum (79 states), PublishArgument, ParseContext
- Protocol/IProtocolHandler.cs: handler interface decoupling parser from client
- Protocol/ProtocolParser.cs: Parse(), ProtoSnippet(), OverMaxControlLineLimit(),
  ProcessPub/HeaderPub/RoutedMsgArgs/RoutedHeaderMsgArgs, ClonePubArg(), GetHeader()
- tests/Protocol/ProtocolParserTests.cs: 17 tests via TestProtocolHandler stub

Auth extras from session 06 (committed separately):
- Auth/TpmKeyProvider.cs, Auth/CertificateIdentityProvider/, Auth/CertificateStore/

Internal utilities & data structures (session 06 overflow):
- Internal/AccessTimeService.cs, ElasticPointer.cs, SystemMemory.cs, ProcessStatsProvider.cs
- Internal/DataStructures/GenericSublist.cs, HashWheel.cs
- Internal/DataStructures/SubjectTree.cs, SubjectTreeNode.cs, SubjectTreeParts.cs

All 461 tests pass (460 unit + 1 integration). DB updated for features 2588-2592 and tests 2598-2614.
2026-02-26 13:16:56 -05:00

144 lines
6.0 KiB
Markdown

# Phase 6 Sessions: Server Module Breakdown
The server module (module 8) contains **3,394 features**, **3,137 unit tests**, and **~103K Go LOC** across 64 source files. It has been split into **23 sessions** targeting ~5K Go LOC each, ordered by dependency (bottom-up).
## Session Map
| Session | Name | Go LOC | Features | Tests | Go Files |
|---------|------|--------|----------|-------|----------|
| [01](session-01.md) | Foundation Types | 626 | 46 | 17 | const, errors, errors_gen, proto, ring, rate_counter, sdm, nkey |
| [02](session-02.md) | Utilities & Queues | 1,325 | 68 | 57 | util, ipqueue, sendq, scheduler, subject_transform |
| [03](session-03.md) | Configuration & Options | 5,400 | 86 | 89 | opts |
| [04](session-04.md) | Logging, Signals & Services | 534 | 34 | 27 | log, signal*, service* |
| [05](session-05.md) | Subscription Index | 1,416 | 81 | 96 | sublist |
| [06](session-06.md) | Auth & JWT | 2,196 | 43 | 131 | auth, auth_callout, jwt, ciphersuites |
| [07](session-07.md) | Protocol Parser | 1,165 | 5 | 17 | parser |
| [08](session-08.md) | Client Connection | 5,953 | 195 | 113 | client, client_proxyproto |
| [09](session-09.md) | Server Core — Init & Config | ~1,950 | ~76 | ~20 | server.go (first half) |
| [10](session-10.md) | Server Core — Runtime & Lifecycle | ~1,881 | ~98 | ~27 | server.go (second half) |
| [11](session-11.md) | Accounts & Directory Store | 4,493 | 234 | 84 | accounts, dirstore |
| [12](session-12.md) | Events, Monitoring & Tracing | 6,319 | 218 | 188 | events, monitor, monitor_sort_opts, msgtrace |
| [13](session-13.md) | Configuration Reload | 2,085 | 89 | 73 | reload |
| [14](session-14.md) | Routes | 2,988 | 57 | 70 | route |
| [15](session-15.md) | Leaf Nodes | 3,091 | 71 | 120 | leafnode |
| [16](session-16.md) | Gateways | 2,816 | 91 | 88 | gateway |
| [17](session-17.md) | Store Interfaces & Memory Store | 2,879 | 135 | 58 | store, memstore, disk_avail* |
| [18](session-18.md) | File Store | 11,421 | 312 | 249 | filestore |
| [19](session-19.md) | JetStream Core | 9,504 | 374 | 406 | jetstream, jetstream_api, jetstream_errors*, jetstream_events, jetstream_versioning, jetstream_batching |
| [20](session-20.md) | JetStream Cluster & Raft | 14,176 | 429 | 617 | raft, jetstream_cluster |
| [21](session-21.md) | Streams & Consumers | 12,700 | 402 | 315 | stream, consumer |
| [22](session-22.md) | MQTT | 4,758 | 153 | 162 | mqtt |
| [23](session-23.md) | WebSocket & OCSP | 2,962 | 97 | 113 | websocket, ocsp, ocsp_peer, ocsp_responsecache |
| | **Totals** | **~103K** | **3,394** | **3,137** | |
## Dependency Graph
```
S01 Foundation
├── S02 Utilities
├── S03 Options
├── S04 Logging
├── S05 Sublist ← S02
├── S06 Auth ← S03
└── S07 Parser
S08 Client ← S02, S03, S05, S07
S09 Server Init ← S03, S04, S05, S06
S10 Server Runtime ← S08, S09
S11 Accounts ← S02, S03, S05, S06
S12 Events & Monitor ← S08, S09, S11
S13 Reload ← S03, S09
S14 Routes ← S07, S08, S09
S15 Leafnodes ← S07, S08, S09, S14
S16 Gateways ← S07, S08, S09, S11, S14
S17 Store Interfaces ← S01, S02
S18 FileStore ← S17
S19 JetStream Core ← S08, S09, S11, S17
S20 JetStream Cluster ← S14, S17, S19
S21 Streams & Consumers ← S08, S09, S11, S17, S19
S22 MQTT ← S08, S09, S11, S17, S19
S23 WebSocket & OCSP ← S08, S09
```
## Multi-Sitting Sessions
Sessions 18, 19, 20, and 21 exceed the ~5K target and include sub-batching guidance in their individual files. Plan for 2-3 sittings each.
| Session | Go LOC | Recommended Sittings |
|---------|--------|---------------------|
| S18 File Store | 11,421 | 2-3 |
| S19 JetStream Core | 9,504 | 2-3 |
| S20 JetStream Cluster & Raft | 14,176 | 3-4 |
| S21 Streams & Consumers | 12,700 | 2-3 |
## Execution Order
Sessions should be executed roughly in order (S01 → S23), but parallel tracks are possible:
**Track A (Core):** S01 → S02 → S03 → S04 → S05 → S07 → S08 → S09 → S10
**Track B (Auth/Accounts):** S06 → S11 (after S03, S05)
**Track C (Networking):** S14 → S15 → S16 (after S08, S09)
**Track D (Storage):** S17 → S18 (after S01, S02)
**Track E (JetStream):** S19 → S20 → S21 (after S09, S11, S17)
**Track F (Protocols):** S22 → S23 (after S08, S09, S19)
**Cross-cutting:** S12, S13 (after S09, S11)
## How to Use
### Starting point
Begin with **Session 01** (Foundation Types). It has no dependencies and everything else builds on it.
### Session loop
Repeat until all 23 sessions are complete:
1. **Pick the next session.** Work through sessions in numerical order (S01 → S23). The numbering follows the dependency graph, so each session's prerequisites are already done by the time you reach it. If you want to parallelise, check the dependency graph above — any session whose dependencies are all complete is eligible.
2. **Open a new Claude Code session.** Reference the session file:
```
Port session N per docs/plans/phases/phase6sessions/session-NN.md
```
3. **Port features.** For each feature in the session:
- Mark as `stub` in `porting.db`
- Implement the .NET code referencing the Go source
- Mark as `complete` in `porting.db`
4. **Port tests.** For each test listed in the session file:
- Implement the xUnit test
- Run it: `dotnet test --filter "FullyQualifiedName~ClassName"`
- Mark as `complete` in `porting.db`
5. **Verify the build.** Run `dotnet build` and `dotnet test` to confirm nothing is broken.
6. **Commit.** Commit all changes with a message like `feat: port session NN — <session name>`.
7. **Check progress.**
```bash
dotnet run --project tools/NatsNet.PortTracker -- report summary --db porting.db
```
### Multi-sitting sessions
Sessions 18, 19, 20, and 21 are too large for a single sitting. Each session file contains sub-batching guidance (e.g., 18a, 18b, 18c). Commit after each sub-batch rather than waiting for the entire session.
### Completion
All 23 sessions are done when:
- Every feature in module 8 is `complete` or `n/a`
- Every unit test in module 8 is `complete` or `n/a`
- `dotnet build` succeeds
- `dotnet test` passes