Generated design docs and implementation plans via Codex for: - Batch 6: Opts package-level functions - Batch 7: Opts class methods + Reload - Batch 9: Auth, DirStore, OCSP foundations - Batch 10: OCSP Cache + JS Events - Batch 11: FileStore Init - Batch 12: FileStore Recovery - Batch 16: Client Core (first half) - Batch 17: Client Core (second half) All plans include mandatory verification protocol and anti-stub guardrails. Updated batches.md with file paths and planned status.
5.8 KiB
Batch 17 (Client Core second half) Design
Date: 2026-02-27
Scope: Design only for Batch 17 (server/client.go second-half mappings): 60 features and 9 tracked tests.
Context Snapshot
Batch metadata from PortTracker:
- Batch ID:
17 - Name:
Client Core (second half) - Dependency: batch
16 - Go file:
server/client.go - Features:
60(all currentlydeferred) - Tests:
9(all currentlydeferred)
Tracker status snapshot (report summary):
- Features:
1271 verified,2377 deferred,24 n_a,1 stub - Unit tests:
430 verified,2640 deferred,187 n_a - Overall progress:
1924 / 6942 (27.7%)
Problem Statement
Batch 17 is the heaviest client.go section: subscription/unsubscribe paths, delivery fanout, inbound message processing, header mutation helpers, service import plumbing, ping/stale timers, account-reload handling, reconnect/TLS handshakes, and rate-limited logging.
The main execution risk is false progress through placeholder methods/tests because:
ClientConnection.csstill contains explicit second-half stubs/comments.- Batch 17 tests include JetStream/FileStore/MemStore/Server tests with many non-Batch-17 deferred dependencies.
- Existing backlog tests include shallow placeholder patterns that can pass without validating behavior.
Working Set Breakdown
Feature groups (max ~20 each):
- Group A (20):
477-496
Subscription shadowing, unsubscribe flow, message header composition,deliverMsg, permission pruning, publish allow checks, reply classifiers. - Group B (20):
497-515,520
Inbound message pipeline, reply/service import handling, header get/set/remove helpers,processServiceImport, route-target accumulation,processMsgResults, ping timer processing. - Group C (20):
521,522,534,535,537,540,541,542,543,544,545,546,547,548,553,565,566,567,568,569
Ping interval adjustments, stale watcher, reload/reconnect/account cache helpers,ClientInfo.serviceAccount, client info enrichment, TLS handshake trio, allowed connection type conversion, rate-limit logging, first ping timer.
Tracked tests:
- File store scheduling/delete-marker cluster:
528,545,552,553,568,598 - Memory store scheduling/delete-marker cluster:
2053,2057 - Server rate-limit logging:
2901
Approaches
Approach A: Monolithic ClientConnection.cs port wave
Implement all 60 features in the existing file, then patch tests.
- Pros: fewer files and simpler search path.
- Cons: high merge risk, hard reviewability, harder to isolate regressions.
Approach B (Recommended): Three vertical feature groups with partial-class split and hard gates
Split second-half methods into focused ClientConnection partial files and execute three 20-feature groups with explicit build/test/stub gates between groups.
- Pros: reviewable increments, clearer ownership per concern, strong regression isolation.
- Cons: slightly more up-front file organization.
Approach C: Wrapper-heavy defer-first strategy
Add shallow wrappers for signatures, defer behavior-heavy methods and most tests.
- Pros: fastest status movement.
- Cons: poor parity confidence, audit churn, high risk of anti-stub violations.
Recommended Design
1. Architecture
- Keep
ClientConnectionas the primary host, but split second-half methods into dedicated partial files:ClientConnection.SubscriptionsAndDelivery.cs(Group A)ClientConnection.InboundAndHeaders.cs(Group B)ClientConnection.LifecycleAndTls.cs(Group C)
- Keep
ClientInfo.serviceAccountlogic inClientTypes.cs(or a focused companion file if needed). - Preserve existing first-half behavior in
ClientConnection.cs; do not refactor unrelated code.
2. Data/Control Flow
- Inbound path:
processInboundMsg-> subject mapping/service-import path ->processMsgResults. - Delivery path:
deliverMsg+ header generation + permission/reply tracking. - Timer/lifecycle path: ping interval decisions, stale detection, reconnect, and handshake transitions.
- Logging path: rate-limited wrappers funneling through existing server/client logging facilities.
3. Error Handling and Deferral
- Port behavior from Go line ranges, including close reasons and permission-deny behavior.
- If a feature/test requires missing infra (outside Batch 17 dependencies), keep it
deferredwith explicit reason and evidence. - Never use placeholder success paths to force status transitions.
4. Test Strategy
- Add/expand focused client-core tests first (to make feature verification real).
- Attempt the 9 tracked tests only after dependency precheck and feature readiness.
- For blocked tests, keep
deferredwith concrete blocker notes rather than adding shallow assertions.
5. Verification Contract
- Per-feature read/implement/build/test loop.
- Group-level stub scan, build gate, and related test gate before status promotion.
- Chunked status updates (
<=15IDs/update) with captured evidence.
Risks and Mitigations
- Large method complexity (
deliverMsg,processMsgResults)
Mitigation: isolate in Group A/B, add targeted tests before and after each port. - Cross-module test blockers (FileStore/MemStore/Server dependencies)
Mitigation: dependency precheck before each test; defer with explicit reason when blocked. - Stub regression under schedule pressure
Mitigation: mandatory anti-stub scans and hard status gates.
Success Criteria
- All 60 Batch 17 features are either behavior-verified or explicitly deferred with reason.
- All 9 Batch 17 tests are either genuinely verified or explicitly deferred with reason.
- No forbidden stub patterns remain in touched feature/test files.
- Status updates are evidence-backed, chunked, and auditable.
Non-Goals
- No implementation in this design document.
- No unrelated refactors outside Batch 17 scope.
- No synthetic "pass" tests or placeholder feature logic to satisfy tracker states.