Files
natsnet/docs/plans/2026-02-27-batch-27-jetstream-core-implementation-plan.md
Joseph Doherty c05d93618e Add batch plans for batches 23-30 (rounds 12-15)
Generated design docs and implementation plans via Codex for:
- Batch 23: Routes
- Batch 24: Leaf Nodes
- Batch 25: Gateways
- Batch 26: WebSocket
- Batch 27: JetStream Core
- Batch 28: JetStream API
- Batch 29: JetStream Batching
- Batch 30: Raft Part 1

All plans include mandatory verification protocol and anti-stub guardrails.
Updated batches.md with file paths and planned status.
2026-02-27 16:33:10 -05:00

23 KiB

Batch 27 JetStream Core Implementation Plan

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

Goal: Port and verify Batch 27 JetStream core behavior (82 features, 77 tests) from server/jetstream.go into .NET without stubs, with evidence-based status updates.

Architecture: Implement JetStream core behavior in grouped waves across NatsServer, Account, JetStream, and JsAccount code paths, then port mapped tests by class waves with strict per-test verification evidence. Promote status only through stub -> complete -> verified after mandatory build/test/stub gates.

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

Design doc: docs/plans/2026-02-27-batch-27-jetstream-core-design.md


Batch 27 Scope

  • Batch ID: 27
  • Dependencies: 5, 8, 19
  • Go source: golang/nats-server/server/jetstream.go
  • Feature count: 82
  • Test count: 77

Primary source targets:

  • dotnet/src/ZB.MOM.NatsNet.Server/NatsServer.cs
  • dotnet/src/ZB.MOM.NatsNet.Server/NatsServer.Lifecycle.cs
  • dotnet/src/ZB.MOM.NatsNet.Server/NatsServerTypes.cs
  • dotnet/src/ZB.MOM.NatsNet.Server/Accounts/Account.cs
  • dotnet/src/ZB.MOM.NatsNet.Server/JetStream/JetStreamTypes.cs
  • dotnet/src/ZB.MOM.NatsNet.Server/JetStream/*.cs (new or existing core behavior files)

Primary test targets:

  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/AccountTests.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/EventsHandlerTests.Impltests.cs
  • dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog/JetStreamFileStoreTests.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/JetStreamVersioningTests.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/MessageTracerTests.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 27 must follow this protocol. No exceptions.

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

  1. Read mapping and Go span:
    dotnet run --project tools/NatsNet.PortTracker -- feature show <feature_id> --db porting.db
    sed -n '<start_line>,<end_line>p' golang/nats-server/server/jetstream.go
    
  2. Implement exactly one feature behavior in mapped C# target.
  3. Build immediately:
    dotnet build dotnet/
    
  4. Run smallest related test filter (feature-local) and confirm discovery:
    dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~<RelatedClass>"
    
  5. If green, add feature ID to the current complete-candidate list.
  6. If red, fix before touching the next feature ID.

Per-Test Verification Loop (REQUIRED for each test ID)

  1. Read mapping and Go span:
    dotnet run --project tools/NatsNet.PortTracker -- test show <test_id> --db porting.db
    
  2. Port one test method (Arrange/Act/Assert, calls production code).
  3. Run single-test filter and capture output:
    dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ \
      --filter "FullyQualifiedName~ZB.MOM.NatsNet.Server.Tests.ImplBacklog.<ClassName>.<MethodName>" \
      --verbosity normal
    
  4. Verify output includes Passed: 1, Failed: 0 (not Passed: 0).
  5. Only then add test ID to verified-candidate list.

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

rg -n "(NotImplementedException|Assert\.True\(true\)|Assert\.Pass|// TODO|// PLACEHOLDER|throw new Exception\(\"TODO\"\))" \
  dotnet/src/ZB.MOM.NatsNet.Server \
  dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog

rg -n "^\s*(public|internal|private)\s+.*\)\s*\{\s*\}$" \
  dotnet/src/ZB.MOM.NatsNet.Server

Any new match in touched files blocks status promotion.

Build Gate (REQUIRED)

  • Required after every feature group and before every status promotion:
    dotnet build dotnet/
    
  • Build succeeded is mandatory.

Test Gate (REQUIRED)

Before setting any feature to verified, all relevant Batch 27 backlog classes touched in the current wave must pass.

Minimum gate commands:

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.EventsHandlerTests"
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.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.JetStreamVersioningTests"
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.MqttHandlerTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.MessageTracerTests"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.ConcurrencyTests1"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.ConcurrencyTests2"
dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --filter "FullyQualifiedName~ImplBacklog.NatsServerTests"

Status Update Protocol (REQUIRED, hard limit enforced)

  • Max 15 IDs per feature batch-update or test batch-update command.
  • Status progression:
    • Start work: deferred/not_started -> stub
    • After feature/test evidence: stub -> complete
    • After full gate evidence: complete -> verified
  • Evidence required per update chunk:
    • latest build success output
    • latest relevant test success output
    • latest stub-scan output (no unresolved new matches)

Command template:

dotnet run --project tools/NatsNet.PortTracker -- \
  feature batch-update --ids "<max-15-ids>" --set-status <stub|complete|verified> --db porting.db --execute

dotnet run --project tools/NatsNet.PortTracker -- \
  test batch-update --ids "<max-15-ids>" --set-status <stub|complete|verified> --db porting.db --execute

Checkpoint Protocol Between Tasks (REQUIRED)

At end of every task (before next task):

  1. Run build gate:
    dotnet build dotnet/
    
  2. Run test checkpoint:
    dotnet test dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ --verbosity normal
    
  3. Record checkpoint summary (pass/fail/skip, stub scan result, updated IDs).
  4. Commit checkpoint before next task.

ANTI-STUB GUARDRAILS (NON-NEGOTIABLE)

Forbidden Patterns

The following indicate fake progress and are forbidden in Batch 27 feature/test code:

  • throw new NotImplementedException()
  • Empty feature method body ({ }) for mapped methods
  • Assert.True(true) / equivalent trivial pass assertion
  • Assert.Pass()
  • // TODO or // PLACEHOLDER in newly ported feature/test method bodies
  • Returning trivial constants (null, 0, false, string.Empty) where Go behavior is non-trivial
  • Test methods that do not invoke production code

Hard Limits

  • Max ~20 features per feature task group.
  • Max 15 IDs per status update command.
  • One test class at a time for test verification/status promotion.
  • No verified updates when any touched file still contains unresolved stub-pattern matches.
  • No cross-group status promotion; only update IDs in the active task group.

If You Get Stuck (MANDATORY)

  1. Stop the current ID immediately.
  2. Do not leave placeholder code/tests behind.
  3. Mark blocked item as 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. Move to next unblocked ID.
  5. Deferred with reason is correct; stubbing is not.

Feature Group Map (Max ~20 Features Each)

Group 1 (20 IDs): Server Enable/Disable Bootstrap and Account Wiring

1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387

Group 2 (19 IDs): Engine State/Getters and Account Enable Core

1388,1389,1390,1391,1392,1394,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408

Group 3 (18 IDs): Usage Foundations and Limits Helpers

1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426

Group 4 (17 IDs): jsAccount Limits Enforcement and Resource Accounting

1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443

Group 5 (8 IDs): Dynamic Config/Validation/Error Tail

1444,1445,1446,1447,1448,1449,1450,1451


Test Wave Map

Wave A (19 IDs): Cross-Module Small/Medium Classes

100,101,102,314,345,1804,1806,2160,2161,2243,2244,2245,2248,2259,2343,2345,2346,2478,2890

Wave B (17 IDs): Storage/Consumer/Concurrency Support

356,379,389,390,391,392,463,1295,1302,1308,1314,1336,2397,2403,2409,2424,2430

Wave C (41 IDs): JetStreamEngine Heavy Class

1466,1467,1529,1548,1549,1550,1581,1583,1584,1589,1595,1600,1604,1608,1609,1617,1620,1621,1629,1631,1632,1648,1649,1650,1651,1654,1666,1672,1673,1675,1683,1684,1689,1721,1723,1724,1732,1739,1740,1744,1780


Task 1: Preflight, Dependency Gate, and Batch Start

Files:

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

Step 1: Verify dependency batches are complete

dotnet run --project tools/NatsNet.PortTracker -- batch show 5 --db porting.db
dotnet run --project tools/NatsNet.PortTracker -- batch show 8 --db porting.db
dotnet run --project tools/NatsNet.PortTracker -- batch show 19 --db porting.db

Expected: all required predecessor work for Batch 27 is complete/verified enough to start.

Step 2: Start Batch 27

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

Step 3: Capture baseline health

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

Step 4: Checkpoint commit

git add porting.db
git commit -m "chore(batch27): start jetstream core batch"

Task 2: Implement Feature Group 1 (20 IDs)

Files:

  • Modify: dotnet/src/ZB.MOM.NatsNet.Server/NatsServer*.cs (JetStream lifecycle/config methods)
  • Modify: dotnet/src/ZB.MOM.NatsNet.Server/Accounts/Account.cs
  • Modify/create as needed: dotnet/src/ZB.MOM.NatsNet.Server/JetStream/*.cs

Step 1: Mark Group 1 IDs as stub (max 15 per call)

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382" --set-status stub --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1383,1384,1385,1386,1387" --set-status stub --db porting.db --execute

Step 2: Execute Per-Feature Verification Loop for all 20 IDs

Step 3: Run mandatory stub scan + build gate + targeted test gate

Step 4: Mark Group 1 as complete (chunked)

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382" --set-status complete --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1383,1384,1385,1386,1387" --set-status complete --db porting.db --execute

Step 5: Run checkpoint protocol and commit

git add dotnet/src/ZB.MOM.NatsNet.Server porting.db
git commit -m "feat(batch27): implement jetstream bootstrap and account wiring"

Task 3: Implement Feature Group 2 (19 IDs)

Files:

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

Step 1: Mark Group 2 IDs as stub (chunked)

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1388,1389,1390,1391,1392,1394,1396,1397,1398,1399,1400,1401,1402,1403,1404" --set-status stub --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1405,1406,1407,1408" --set-status stub --db porting.db --execute

Step 2: Execute Per-Feature Verification Loop for all 19 IDs

Step 3: Run mandatory stub scan + build gate + targeted test gate

Step 4: Mark Group 2 as complete (chunked)

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1388,1389,1390,1391,1392,1394,1396,1397,1398,1399,1400,1401,1402,1403,1404" --set-status complete --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1405,1406,1407,1408" --set-status complete --db porting.db --execute

Step 5: Run checkpoint protocol and commit

git add dotnet/src/ZB.MOM.NatsNet.Server porting.db
git commit -m "feat(batch27): implement jetstream engine state and account enable core"

Task 4: Implement Feature Group 3 (18 IDs)

Files:

  • Modify: dotnet/src/ZB.MOM.NatsNet.Server/Accounts/Account.cs
  • Modify: dotnet/src/ZB.MOM.NatsNet.Server/JetStream/*.cs

Step 1: Mark Group 3 IDs as stub (chunked)

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423" --set-status stub --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1424,1425,1426" --set-status stub --db porting.db --execute

Step 2: Execute Per-Feature Verification Loop for all 18 IDs

Step 3: Run mandatory stub scan + build gate + targeted test gate

Step 4: Mark Group 3 as complete (chunked)

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423" --set-status complete --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1424,1425,1426" --set-status complete --db porting.db --execute

Step 5: Run checkpoint protocol and commit

git add dotnet/src/ZB.MOM.NatsNet.Server porting.db
git commit -m "feat(batch27): implement jetstream usage foundations and limit helpers"

Task 5: Implement Feature Group 4 (17 IDs)

Files:

  • Modify: dotnet/src/ZB.MOM.NatsNet.Server/JetStream/*.cs
  • Modify: dotnet/src/ZB.MOM.NatsNet.Server/Accounts/Account.cs

Step 1: Mark Group 4 IDs as stub (chunked)

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441" --set-status stub --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1442,1443" --set-status stub --db porting.db --execute

Step 2: Execute Per-Feature Verification Loop for all 17 IDs

Step 3: Run mandatory stub scan + build gate + targeted test gate

Step 4: Mark Group 4 as complete (chunked)

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441" --set-status complete --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1442,1443" --set-status complete --db porting.db --execute

Step 5: Run checkpoint protocol and commit

git add dotnet/src/ZB.MOM.NatsNet.Server porting.db
git commit -m "feat(batch27): implement jsaccount limit checks and resource accounting"

Task 6: Implement Feature Group 5 (8 IDs)

Files:

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

Step 1: Mark Group 5 IDs as stub

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1444,1445,1446,1447,1448,1449,1450,1451" --set-status stub --db porting.db --execute

Step 2: Execute Per-Feature Verification Loop for all 8 IDs

Step 3: Run mandatory stub scan + build gate + targeted test gate

Step 4: Mark Group 5 as complete

dotnet run --project tools/NatsNet.PortTracker -- feature batch-update --ids "1444,1445,1446,1447,1448,1449,1450,1451" --set-status complete --db porting.db --execute

Step 5: Run checkpoint protocol and commit

git add dotnet/src/ZB.MOM.NatsNet.Server porting.db
git commit -m "feat(batch27): implement jetstream config validation and error tail"

Task 7: Port Test Wave A (19 IDs)

Files:

  • Modify backlog class files for: AccountTests, EventsHandlerTests, MonitoringHandlerTests, JetStreamVersioningTests, MqttHandlerTests, MessageTracerTests, ConcurrencyTests2, NatsServerTests

Step 1: Mark Wave A tests as stub (max 15 IDs)

dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "100,101,102,314,345,1804,1806,2160,2161,2243,2244,2245,2248,2259,2343" --set-status stub --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "2345,2346,2478,2890" --set-status stub --db porting.db --execute

Step 2: Execute Per-Test Verification Loop for each ID

Step 3: Class-level gates + stub scans for each touched class

Step 4: Mark Wave A tests verified (chunked)

dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "100,101,102,314,345,1804,1806,2160,2161,2243,2244,2245,2248,2259,2343" --set-status verified --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "2345,2346,2478,2890" --set-status verified --db porting.db --execute

Step 5: Checkpoint protocol and commit

git add dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog porting.db
git commit -m "test(batch27): port wave-a cross-module jetstream tests"

Task 8: Port Test Wave B (17 IDs)

Files:

  • Modify backlog class files: JetStreamFileStoreTests, NatsConsumerTests, ConcurrencyTests1

Step 1: Mark Wave B tests as stub (chunked)

dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "356,379,389,390,391,392,463,1295,1302,1308,1314,1336,2397,2403,2409" --set-status stub --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "2424,2430" --set-status stub --db porting.db --execute

Step 2: Execute Per-Test Verification Loop for each ID

Step 3: Class-level gates + stub scans for each touched class

Step 4: Mark Wave B tests verified (chunked)

dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "356,379,389,390,391,392,463,1295,1302,1308,1314,1336,2397,2403,2409" --set-status verified --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "2424,2430" --set-status verified --db porting.db --execute

Step 5: Checkpoint protocol and commit

git add dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog porting.db
git commit -m "test(batch27): port wave-b filestore-consumer-concurrency tests"

Task 9: Port Test Wave C (JetStreamEngineTests, 41 IDs)

Files:

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

Step 1: Mark Wave C tests as stub (3 chunks)

dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "1466,1467,1529,1548,1549,1550,1581,1583,1584,1589,1595,1600,1604,1608,1609" --set-status stub --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "1617,1620,1621,1629,1631,1632,1648,1649,1650,1651,1654,1666,1672,1673,1675" --set-status stub --db porting.db --execute
dotnet run --project tools/NatsNet.PortTracker -- test batch-update --ids "1683,1684,1689,1721,1723,1724,1732,1739,1740,1744,1780" --set-status stub --db porting.db --execute

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

For each sub-batch:

  1. Run per-test verification loop for each method.
  2. Run class gate for JetStreamEngineTests.
  3. Run stub scan and assertion-density check.
  4. If unsupported benchmark/perf/runtime behavior is encountered, defer with reason immediately.

Step 3: Mark verified/deferred with evidence (max 15 IDs per call)

Step 4: Checkpoint protocol and commit

git add dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog porting.db
git commit -m "test(batch27): port jetstream engine heavy test wave"

Task 10: Final Verification, Status Closure, and Batch Completion

Files:

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

Step 1: Final feature verification promotion (chunked max 15 IDs)

Promote each feature group from complete -> verified only after all relevant tests are green.

Step 2: Final test status reconciliation

  • Ensure every Batch 27 test ID is verified or deferred with explicit reason.

Step 3: Full repo verification gates

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

Step 4: Complete batch + summary checks

dotnet run --project tools/NatsNet.PortTracker -- batch complete 27 --db porting.db
dotnet run --project tools/NatsNet.PortTracker -- batch show 27 --db porting.db
dotnet run --project tools/NatsNet.PortTracker -- report summary --db porting.db
./reports/generate-report.sh

Step 5: Final commit

git add dotnet/src/ZB.MOM.NatsNet.Server dotnet/tests/ZB.MOM.NatsNet.Server.Tests/ImplBacklog porting.db reports/
git commit -m "feat(batch27): complete jetstream core features and mapped tests"

Execution Notes

  • Do not execute this plan while dependencies (5,8,19) are still blocked.
  • Do not bypass verification protocol for speed.
  • Deferred-with-reason is acceptable; stubbed code/tests are not.