Files
natsnet/docs/plans/2026-02-27-batch-20-accounts-resolvers-implementation-plan.md
Joseph Doherty dc3e162608 Add batch plans for batches 13-15, 18-22 (rounds 8-11)
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.
2026-02-27 15:43:14 -05:00

24 KiB

Batch 20 Accounts Resolvers Implementation Plan

For Codex: REQUIRED SUB-SKILL: Use executeplan to implement this plan task-by-task.

Goal: Port and verify Batch 20 (Accounts Resolvers) by implementing 38 resolver/account features from server/accounts.go and validating 98 mapped tests without introducing stubs.

Architecture: Implement in existing account/resolver files (AccountResolver.cs, NatsServer.Accounts.cs, Account.cs, AccountTypes.cs) in two feature groups (19 IDs each), then verify/port mapped tests in class-based waves. Status changes are evidence-driven and chunked to max 15 IDs per update.

Tech Stack: .NET 10, C# latest, xUnit 3, Shouldly, NSubstitute, PortTracker CLI, SQLite (porting.db)

Design doc: docs/plans/2026-02-27-batch-20-accounts-resolvers-design.md


Batch 20 Scope

  • Batch ID: 20
  • Name: Accounts Resolvers
  • Dependency: batch 19
  • Go source: golang/nats-server/server/accounts.go
  • Features: 38
  • Tests: 98

Primary source files:

  • dotnet/src/ZB.MOM.NatsNet.Server/Accounts/AccountResolver.cs
  • dotnet/src/ZB.MOM.NatsNet.Server/NatsServer.Accounts.cs
  • dotnet/src/ZB.MOM.NatsNet.Server/Accounts/Account.cs
  • dotnet/src/ZB.MOM.NatsNet.Server/Accounts/AccountTypes.cs

Primary mapped test files:

  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/AccountTests.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/ConfigReloaderTests.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/NatsConsumerTests.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/JetStreamEngineTests.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/JwtProcessorTests.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/EventsHandlerTests.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/MonitoringHandlerTests.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/MqttHandlerTests.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/MqttExternalTests.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/GatewayHandlerTests.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/JetStreamBatchingTests.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/JetStreamFileStoreTests.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/ConcurrencyTests1.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/ConcurrencyTests2.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/NatsServerTests.Impltests.cs

MANDATORY VERIFICATION PROTOCOL

NON-NEGOTIABLE: Every feature and test in Batch 20 must follow this protocol.

Per-Feature Verification Loop (REQUIRED for every feature ID)

  1. Read feature metadata and Go source before editing:
    dotnet run --project tools/NatsNet.PortTracker -- feature show <feature_id> --db porting.db
    sed -n '<start_line>,<end_line>p' golang/nats-server/server/accounts.go
    
  2. Implement C# behavior in mapped file/class/method (no placeholders).
  3. Build immediately:
    dotnet build dotnet/
    
  4. Run smallest related test filter immediately (class-level minimum):
    dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ \
      --filter "FullyQualifiedName~<RelatedClassName>"
    
  5. Only after green build + related tests: add feature ID to group complete candidate list.
  6. If failing, fix before starting the next feature ID.

Stub Detection Check (REQUIRED after every feature group and test class)

Run on touched files and fail the task if new stub hits are introduced:

# Forbidden tokens and TODO markers
rg -n "(NotImplementedException|TODO|PLACEHOLDER|throw new Exception\(\"TODO\"\))" \
  dotnet/src/ZB.MOM.NatsNet.Server/Accounts/AccountResolver.cs \
  dotnet/src/ZB.MOM.NatsNet.Server/NatsServer.Accounts.cs \
  dotnet/src/ZB.MOM.NatsNet.Server/Accounts/Account.cs \
  dotnet/src/ZB.MOM.NatsNet.Server/Accounts/AccountTypes.cs \
  dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/*.Impltests.cs

# Empty method-body detector
rg -n "^\s*(public|internal|private|protected)\s+[^=;]+\)\s*\{\s*\}$" \
  dotnet/src/ZB.MOM.NatsNet.Server/Accounts/AccountResolver.cs \
  dotnet/src/ZB.MOM.NatsNet.Server/NatsServer.Accounts.cs \
  dotnet/src/ZB.MOM.NatsNet.Server/Accounts/Account.cs \
  dotnet/src/ZB.MOM.NatsNet.Server/Accounts/AccountTypes.cs

If any new violations appear, remove/fix them or defer the blocked ID with reason. Do not continue.

Build Gate (REQUIRED after each feature group)

dotnet build dotnet/

Build succeeded is required before any group IDs move to complete or verified.

Test Gate (REQUIRED before setting any feature to verified)

All related mapped tests for that feature group must pass:

dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.AccountTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.JwtProcessorTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.ConfigReloaderTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.EventsHandlerTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.MonitoringHandlerTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.NatsConsumerTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.JetStreamEngineTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.ConcurrencyTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.Mqtt"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.GatewayHandlerTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.JetStreamBatchingTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.JetStreamFileStoreTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.NatsServerTests"

No feature ID may be set to verified until mapped tests are passing or explicitly deferred with reason.

Status Update Protocol (REQUIRED)

  • Maximum 15 IDs per feature batch-update or test batch-update command.
  • Allowed status flow only: deferred/not_started -> stub -> complete -> verified.
  • Each status update chunk requires evidence captured in notes/log:
    • successful build summary
    • successful related test summary
    • clean stub-scan outcome for touched files
  • Never bulk-update across unrelated groups/classes in one command.

Checkpoint Protocol Between Tasks (REQUIRED)

After every implementation/testing task before starting next task:

  1. Full build:
    dotnet build dotnet/
    
  2. Full unit test run:
    dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/
    
  3. Commit checkpoint:
    git add dotnet/src/ZB.MOM.NatsNet.Server/Accounts \
      dotnet/src/ZB.MOM.NatsNet.Server/NatsServer.Accounts.cs \
      dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog \
      porting.db
    git commit -m "<task-specific message>"
    

ANTI-STUB GUARDRAILS (NON-NEGOTIABLE)

Forbidden Patterns

The following patterns are forbidden in any completed Batch 20 feature or test:

  • throw new NotImplementedException()
  • Empty method bodies for mapped feature methods ({ })
  • // TODO or // PLACEHOLDER inside newly implemented feature/test bodies
  • Placeholder pass assertions (Assert.True(true), equivalent always-pass checks)
  • Fake behavior returns (return null;, return string.Empty;, return 0;, return false;) where Go behavior is non-trivial
  • Tests with no real Arrange/Act/Assert against production code

Hard Limits

  • Max ~20 features per implementation group (this plan uses 19 + 19).
  • Max 15 IDs per any status-update command.
  • Max one feature group in active status transition at a time.
  • No feature may reach verified while its mapped tests are still stubbed/unverified without explicit deferred reason.
  • Mandatory checkpoint commit after every task.

If You Get Stuck (REQUIRED BEHAVIOR)

  1. Stop work on the blocked ID immediately.
  2. Remove any partial placeholder code for that ID.
  3. Keep or set status to deferred with explicit reason:
    dotnet run --project tools/NatsNet.PortTracker -- feature update <id> --status deferred --override "blocked: <specific reason>" --db porting.db
    dotnet run --project tools/NatsNet.PortTracker -- test update <id> --status deferred --override "blocked: <specific reason>" --db porting.db
    
  4. Continue with the next unblocked ID.
  5. Do not create stubs to preserve momentum.

Feature Groups (Max ~20)

Group 1 (19 Features)

150,183,197,208,209,215,250,251,252,253,258,259,260,261,306,307,310,316,318

Group 2 (19 Features)

319,320,326,327,328,330,331,334,335,336,337,338,339,341,343,345,346,347,349


Test Waves (98 Total)

Wave 1 (18 tests)

  • Account: 86,87,105,108
  • JWT: 1819,1821,1823,1825,1830,1831,1841,1849,1894
  • Events: 307,346,347
  • Monitoring: 2125,2141

Wave 2 (40 tests)

  • Config reload: 2721,2722,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2741,2742,2743,2744,2745,2746,2750,2752,2753,2754,2761,2767,2768,2769,2770,2771,2773,2775,2776,2779,2781,2793

Wave 3 (40 tests)

  • NatsConsumer: 1238,1254,1296,1300,1305,1307,1322,1324,1329,1331,1351,1354,1360,1375,1377,1378
  • JetStreamEngine: 1566,1578,1579,1679,1680,1698,1705,1706,1712,1729,1730,1738
  • Concurrency: 2379,2386,2444,2445,2500
  • MQTT/Gateway/Other: 2169,2184,2262,683,723,493,2893

Task 1: Preflight and Batch Start

Files:

  • Read: docs/standards/dotnet-standards.md
  • Read: golang/nats-server/server/accounts.go
  • Read: docs/plans/2026-02-27-batch-20-accounts-resolvers-design.md

Step 1: Confirm dependency and scope

dotnet run --project tools/NatsNet.PortTracker -- batch list --db porting.db
dotnet run --project tools/NatsNet.PortTracker -- batch show 20 --db porting.db
dotnet run --project tools/NatsNet.PortTracker -- report summary --db porting.db

Expected: Batch 20 depends on Batch 19 and remains pending or ready.

Step 2: Start the batch

dotnet run --project tools/NatsNet.PortTracker -- batch start 20 --db porting.db

Expected: batch status becomes in_progress.

Step 3: Baseline verification

dotnet build dotnet/
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/

Expected: baseline output captured before edits.

Step 4: Commit checkpoint

git add porting.db
git commit -m "chore(batch20): start accounts resolvers batch"

Task 2: Implement Feature Group 1 (19 IDs)

Files:

  • Modify: dotnet/src/ZB.MOM.NatsNet.Server/Accounts/AccountTypes.cs
  • Modify: dotnet/src/ZB.MOM.NatsNet.Server/Accounts/Account.cs
  • Modify: dotnet/src/ZB.MOM.NatsNet.Server/NatsServer.Accounts.cs

Step 1: Move Group 1 to stub in max-15 chunks

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "150,183,197,208,209,215,250,251,252,253,258,259,260,261,306" --set-status stub --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "307,310,316,318" --set-status stub --db porting.db --execute

Step 2: Execute per-feature verification loop for all 19 IDs

For each ID: feature show -> read Go range -> implement -> build -> run related tests.

Step 3: Group build + focused tests

dotnet build dotnet/
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.AccountTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.JwtProcessorTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.EventsHandlerTests"

Step 4: Run stub detection check

Use the mandatory stub-scan commands.

Step 5: Move Group 1 to complete in max-15 chunks

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "150,183,197,208,209,215,250,251,252,253,258,259,260,261,306" --set-status complete --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "307,310,316,318" --set-status complete --db porting.db --execute

Step 6: Checkpoint protocol + commit

dotnet build dotnet/
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/
git add dotnet/src/ZB.MOM.NatsNet.Server/Accounts/Account.cs \
  dotnet/src/ZB.MOM.NatsNet.Server/Accounts/AccountTypes.cs \
  dotnet/src/ZB.MOM.NatsNet.Server/NatsServer.Accounts.cs \
  porting.db
git commit -m "feat(batch20): implement resolver/latency/account refresh group"

Task 3: Implement Feature Group 2 (19 IDs)

Files:

  • Modify: dotnet/src/ZB.MOM.NatsNet.Server/Accounts/AccountResolver.cs
  • Modify: dotnet/src/ZB.MOM.NatsNet.Server/NatsServer.Accounts.cs
  • Modify: dotnet/src/ZB.MOM.NatsNet.Server/Accounts/Account.cs

Step 1: Move Group 2 to stub in max-15 chunks

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "319,320,326,327,328,330,331,334,335,336,337,338,339,341,343" --set-status stub --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "345,346,347,349" --set-status stub --db porting.db --execute

Step 2: Execute per-feature verification loop for all 19 IDs

For each ID: feature show -> Go source -> implement -> build -> targeted tests.

Step 3: Group build + focused tests

dotnet build dotnet/
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.AccountTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.ConfigReloaderTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.MonitoringHandlerTests"

Step 4: Run stub detection check

Use the mandatory stub-scan commands.

Step 5: Move Group 2 to complete in max-15 chunks

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "319,320,326,327,328,330,331,334,335,336,337,338,339,341,343" --set-status complete --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "345,346,347,349" --set-status complete --db porting.db --execute

Step 6: Checkpoint protocol + commit

dotnet build dotnet/
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/
git add dotnet/src/ZB.MOM.NatsNet.Server/Accounts/AccountResolver.cs \
  dotnet/src/ZB.MOM.NatsNet.Server/NatsServer.Accounts.cs \
  dotnet/src/ZB.MOM.NatsNet.Server/Accounts/Account.cs \
  porting.db
git commit -m "feat(batch20): implement resolver backends and operator helper paths"

Task 4: Port and Verify Test Wave 1 (18 IDs)

Files:

  • Modify: dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/AccountTests.Impltests.cs
  • Modify: dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/JwtProcessorTests.Impltests.cs
  • Modify: dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/EventsHandlerTests.Impltests.cs
  • Modify: dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/MonitoringHandlerTests.Impltests.cs

Step 1: Move Wave 1 IDs to stub in max-15 chunks

dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "86,87,105,108,1819,1821,1823,1825,1830,1831,1841,1849,1894,307,346" --set-status stub --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "347,2125,2141" --set-status stub --db porting.db --execute

Step 2: Per-test loop for each ID

For each test ID: test show -> read Go test range -> port behavior -> run single test -> verify Passed: 1.

Step 3: Class-level gates

dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.AccountTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.JwtProcessorTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.EventsHandlerTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.MonitoringHandlerTests"

Step 4: Stub scan + move Wave 1 to verified

dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "86,87,105,108,1819,1821,1823,1825,1830,1831,1841,1849,1894,307,346" --set-status verified --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "347,2125,2141" --set-status verified --db porting.db --execute

Step 5: Checkpoint protocol + commit

dotnet build dotnet/
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/
git add dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog porting.db
git commit -m "test(batch20): verify account jwt events monitoring mapped tests"

Task 5: Port and Verify Test Wave 2 (Config Reload, 40 IDs)

Files:

  • Modify: dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/ConfigReloaderTests.Impltests.cs

Step 1: Move Wave 2 IDs to stub in max-15 chunks

dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "2721,2722,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736" --set-status stub --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "2737,2738,2739,2741,2742,2743,2744,2745,2746,2750,2752,2753,2754,2761,2767" --set-status stub --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "2768,2769,2770,2771,2773,2775,2776,2779,2781,2793" --set-status stub --db porting.db --execute

Step 2: Port in sub-batches of ~10 tests

For each sub-batch: port tests -> run single-test checks -> run full class filter.

Step 3: Class gate

dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.ConfigReloaderTests"

Expected: all 40 mapped IDs passing.

Step 4: Stub scan + move Wave 2 IDs to verified in same 3 chunks

Run the same ID chunks with --set-status verified.

Step 5: Checkpoint protocol + commit

dotnet build dotnet/
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/
git add dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/ConfigReloaderTests.Impltests.cs porting.db
git commit -m "test(batch20): verify config reload mapped tests"

Task 6: Port and Verify Test Wave 3 (40 IDs)

Files:

  • Modify: dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/NatsConsumerTests.Impltests.cs
  • Modify: dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/JetStreamEngineTests.Impltests.cs
  • Modify: dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/ConcurrencyTests1.Impltests.cs
  • Modify: dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/ConcurrencyTests2.Impltests.cs
  • Modify: dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/MqttExternalTests.Impltests.cs
  • Modify: dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/MqttHandlerTests.Impltests.cs
  • Modify: dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/GatewayHandlerTests.Impltests.cs
  • Modify: dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/JetStreamBatchingTests.Impltests.cs
  • Modify: dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/JetStreamFileStoreTests.Impltests.cs
  • Modify: dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/NatsServerTests.Impltests.cs

Step 1: Move Wave 3 IDs to stub in max-15 chunks

dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "1238,1254,1296,1300,1305,1307,1322,1324,1329,1331,1351,1354,1360,1375,1377" --set-status stub --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "1378,1566,1578,1579,1679,1680,1698,1705,1706,1712,1729,1730,1738,2379,2386" --set-status stub --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "2444,2445,2500,2169,2184,2262,683,723,493,2893" --set-status stub --db porting.db --execute

Step 2: Port and verify per class

Run single-test loops and then class filters for each touched class.

Step 3: Class gates

dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.NatsConsumerTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.JetStreamEngineTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.ConcurrencyTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.Mqtt"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.GatewayHandlerTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.JetStreamBatchingTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.JetStreamFileStoreTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.NatsServerTests"

Step 4: Stub scan + move Wave 3 IDs to verified in same 3 chunks

Run the same ID chunks with --set-status verified.

Step 5: Checkpoint protocol + commit

dotnet build dotnet/
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/
git add dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog porting.db
git commit -m "test(batch20): verify jetstream mqtt concurrency and misc mapped tests"

Task 7: Final Feature Verification, Batch Completion, and Report

Files:

  • Modify: porting.db
  • Generate: reports/current.md (via report script)

Step 1: Promote feature groups from complete to verified in max-15 chunks

Group 1:

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "150,183,197,208,209,215,250,251,252,253,258,259,260,261,306" --set-status verified --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "307,310,316,318" --set-status verified --db porting.db --execute

Group 2:

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "319,320,326,327,328,330,331,334,335,336,337,338,339,341,343" --set-status verified --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "345,346,347,349" --set-status verified --db porting.db --execute

Step 2: Final full gates

dotnet build dotnet/
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/
dotnet run --project tools/NatsNet.PortTracker -- batch show 20 --db porting.db
dotnet run --project tools/NatsNet.PortTracker -- batch complete 20 --db porting.db

Expected: batch completion succeeds (or explicit list of blocked IDs).

Step 3: Dependency/report update and commit

dotnet run --project tools/NatsNet.PortTracker -- dependency ready --db porting.db
./reports/generate-report.sh
git add porting.db reports/
git commit -m "chore(batch20): complete accounts resolvers batch"

Evidence Checklist (Use Before Every Status Update)

  1. Feature/test IDs updated are listed explicitly (<=15 per command).
  2. Build output captured and green.
  3. Related test output captured and green.
  4. Stub scan re-run and no new violations in touched files.
  5. Any blocked IDs are deferred with explicit reason (no placeholders).