Generated design docs and implementation plans via Codex for: - Batch 13: FileStore Read/Query - Batch 14: FileStore Write/Lifecycle - Batch 15: MsgBlock + ConsumerFileStore - Batch 18: Server Core - Batch 19: Accounts Core - Batch 20: Accounts Resolvers - Batch 21: Events + MsgTrace - Batch 22: Monitoring All plans include mandatory verification protocol and anti-stub guardrails. Updated batches.md with file paths and planned status.
5.3 KiB
5.3 KiB
Batch 19 Accounts Core Design
Context
- Batch:
19(Accounts Core) - Scope:
92features,9tests - Dependencies: Batches
16,18 - Primary Go reference:
golang/nats-server/server/accounts.go - Primary .NET target:
dotnet/src/ZB.MOM.NatsNet.Server/Accounts/Account.cs
Batch 19 is the largest non-JetStream account behavior surface: service import/export wiring, reverse reply tracking, activation and issuer checks, leaf-node cluster bookkeeping, and account-level message tracing hooks.
Constraints
- No stubs for feature or test completion.
- Port behavior from Go intent, not line-for-line syntax.
- Keep batch execution chunked (max ~20 features per task group).
- Keep PortTracker status updates evidence-based and chunked (max 15 IDs per update call).
- Dependencies
16and18must be complete before execution starts.
Approaches Considered
Approach A (Recommended): Incremental Port in Existing Account.cs + Backlog Test Hardening
- Keep
Accountin its current file and add missing methods in ordered regions. - Use feature groups aligned to Go line ranges and behavior domains.
- Promote features
stub -> completeduring implementation; only promote toverifiedafter related tests are green. - Port only Batch 19 test IDs in existing backlog classes first, then run broader account-related suite gates.
Pros:
- Lowest structural risk and least file churn.
- Preserves current locking/state conventions already used in
Account.cs. - Easier diff review against Go line ranges and PortTracker IDs.
Cons:
Account.csgrows further until later refactor batch.
Approach B: Convert Account to Partial Class and Split by Domain During Port
- First convert
Accounttopartial, then create files likeAccount.ServiceImports.cs,Account.StreamImports.cs, etc. - Port methods into these new files while adding tests.
Pros:
- Cleaner file organization.
- Better long-term readability.
Cons:
- Larger structural change while behavior is still moving.
- Higher merge risk and harder one-to-one audit against existing method maps.
Approach C: Minimal Compile-First Skeletons, Fill Later
- Add signatures and placeholders quickly to satisfy compile, then fill behavior in later passes.
Pros:
- Fast initial progress indicators.
Cons:
- Violates anti-stub requirements.
- High risk of false progress and broken verification integrity.
Decision: Approach A.
Proposed Architecture
1. Keep Account Behavior Localized to Account.cs
- Implement missing Batch 19 methods directly in
Account.cs. - Only modify
AccountTypes.cswhen a missing helper type/field is required by real behavior. - Avoid cross-module refactors while porting this batch.
2. Feature Grouping Strategy
Use five implementation groups with contiguous, behavior-aligned IDs:
- Group 1 (17 features): identity, trace destination, connection/interest, leaf cluster registration, base service export registration
- Group 2 (20 features): latency tracking send paths + service import cycle checks + pending response counters
- Group 3 (20 features): service import map mutation, reverse response tracking, internal subscription lifecycle, response wildcard processing
- Group 4 (20 features): service reply generation, thresholds, response import wiring, stream import/export add and authorization checks
- Group 5 (15 features): activation expiration paths, issuer trust checks, bearer/expiration handling, external auth helpers
Each group is independently buildable and testable.
3. Test Porting Strategy for the 9 Batch Tests
Port only these IDs in backlog classes:
81,82,95->ImplBacklog/AccountTests.Impltests.cs658,666->ImplBacklog/GatewayHandlerTests.Impltests.cs1935,1952,1955->ImplBacklog/LeafNodeHandlerTests.Impltests.cs2359->ImplBacklog/MessageTracerTests.Impltests.cs
Replace placeholder tests with behavioral assertions derived from Go test intent.
4. Verification-First Status Flow
- During coding: move feature IDs to
stub. - After implementation + build + related tests: move to
complete. - After full related test gate and evidence capture: move to
verified. - If blocked: keep
deferredwith explicit reason (no placeholder code).
Error Handling and Concurrency Design Notes
- Preserve lock discipline already used in
Account.cs(_mu,_lmu,_sqmu,_eventIdsMu). - Do not widen lock scopes unless required for correctness parity with Go behavior.
- Preserve existing exception-return pattern used by account APIs (
Exception?return for validation paths). - Preserve current JWT placeholder boundaries; if JWT-infra dependency is missing, defer with reason instead of stubbing.
Risks and Mitigations
- Risk: long
Account.csdiffs become hard to review.- Mitigation: strict feature grouping + per-group checkpoints + frequent commits.
- Risk: false-positive "passing" backlog tests.
- Mitigation: anti-stub scans and required per-test behavioral assertions.
- Risk: status inflation without evidence.
- Mitigation: max-15 ID update chunks + required command output evidence per chunk.
Success Criteria
- All 92 Batch 19 feature IDs are
verifiedor explicitlydeferredwith reason. - All 9 Batch 19 test IDs are
verifiedor explicitlydeferredwith reason. - No forbidden stub patterns in touched source/tests.
- Full build and required test gates pass at each checkpoint.