diff --git a/dotnet/tests/ZB.MOM.NatsNet.Server.IntegrationTests/JetStream/JetStreamConsumerTests.cs b/dotnet/tests/ZB.MOM.NatsNet.Server.IntegrationTests/JetStream/JetStreamConsumerTests.cs
new file mode 100644
index 0000000..c19e92d
--- /dev/null
+++ b/dotnet/tests/ZB.MOM.NatsNet.Server.IntegrationTests/JetStream/JetStreamConsumerTests.cs
@@ -0,0 +1,194 @@
+// Copyright 2025 The NATS Authors
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Mirrors server/jetstream_consumer_test.go in the NATS server Go source.
+// ALL tests in this file are deferred: they require a running JetStream server.
+
+namespace ZB.MOM.NatsNet.Server.IntegrationTests.JetStream;
+
+///
+/// Integration tests for JetStream consumer operations.
+/// Mirrors server/jetstream_consumer_test.go.
+/// All tests are deferred pending JetStream server infrastructure.
+///
+[Trait("Category", "Integration")]
+public sealed class JetStreamConsumerTests
+{
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void MultipleFiltersLastPerSubject_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void Delete_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void StuckAckPending_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void Unpin_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void WithPriorityGroups_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PriorityPullRequests_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void RetryAckAfterTimeout_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void SwitchLeaderDuringInflightAck_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void MessageDeletedDuringRedelivery_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void DeliveryCount_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void Create_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void EphemeralRecoveryAfterServerRestart_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void MaxDeliveryAndServerRestart_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void DeleteAndServerRestart_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void DurableReconnectWithOnlyPending_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void Reconnect_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void DurableReconnect_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void CleanupWithRetentionPolicy_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void InternalClientLeak_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void NoMsgPayload_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PendingCountWithRedeliveries_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void MaxDeliverUpdate_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void StreamUpdate_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void UpdateFilterSubject_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PullConsumerOneShotOnMaxAckLimit_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PendingLowerThanStreamFirstSeq_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void EOFBugNewFileStore_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void Purge_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void FilterUpdate_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void AckFloorWithExpired_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void DefaultsFromStream_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void NakThenAckFloorMove_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PauseViaEndpoint_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void SurvivesRestart_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void DontDecrementPendingCountOnSkippedMsg_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PendingCountAfterMsgAckAboveFloor_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PullCrossAccountExpires_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PullLastPerSubjectRedeliveries_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PullLargeBatchExpired_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void StateAlwaysFromStore_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PullNoWaitBatchLargerThanPending_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void NotInactiveDuringAckWait_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void NotInactiveDuringAckWaitBackoff_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void Prioritized_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void MaxDeliverUnderflow_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void NoWaitNoMessagesOnEos_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void NoWaitNoMessagesOnEosWithDeliveredMsgs_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void WithCorruptStateIsDeleted_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void NoDeleteAfterConcurrentShutdownAndLeaderChange_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void OnlyRecalculatePendingIfFilterSubjectUpdated_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void CheckNumPending_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void AllowOverlappingSubjectsIfNotSubset_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void ResetToSequence_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void ResetToSequenceConstraintOnStartSeq_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void ResetToSequenceConstraintOnStartTime_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void SingleFilterSubjectInFilterSubjects_ShouldSucceed() { }
+}
diff --git a/dotnet/tests/ZB.MOM.NatsNet.Server.IntegrationTests/JetStream/JetStreamTests.cs b/dotnet/tests/ZB.MOM.NatsNet.Server.IntegrationTests/JetStream/JetStreamTests.cs
new file mode 100644
index 0000000..a12346a
--- /dev/null
+++ b/dotnet/tests/ZB.MOM.NatsNet.Server.IntegrationTests/JetStream/JetStreamTests.cs
@@ -0,0 +1,236 @@
+// Copyright 2025 The NATS Authors
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Mirrors server/jetstream_test.go in the NATS server Go source.
+// ALL tests in this file are deferred: they require a running JetStream server.
+
+namespace ZB.MOM.NatsNet.Server.IntegrationTests.JetStream;
+
+///
+/// Integration tests for JetStream core operations.
+/// Mirrors server/jetstream_test.go.
+/// All tests are deferred pending JetStream server infrastructure.
+///
+[Trait("Category", "Integration")]
+public sealed class JetStreamTests
+{
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void AddStreamOverlapWithJSAPISubjects_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PublishDeDupe_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void UsageNoReservation_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void UsageReservationNegativeMaxBytes_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void SnapshotsAPI_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void InterestRetentionStreamWithFilteredConsumers_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void SimpleFileRecovery_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PushConsumerFlowControl_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void FilteredStreamNames_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void UpdateStream_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void DeleteMsg_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void DeliveryAfterServerRestart_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void ConfigReloadWithGlobalAccount_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void GetLastMsgBySubject_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void GetLastMsgBySubjectAfterUpdate_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void LastSequenceBySubject_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void LastSequenceBySubjectWithSubject_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void MirrorBasics_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void SourceBasics_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void SourceWorkingQueueWithLimit_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void StreamSourceFromKV_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void InputTransform_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void ServerEncryption_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void EphemeralPullConsumers_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void RemoveExternalSource_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void InvalidRestoreRequests_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void ProperErrorDueToOverlapSubjects_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void MsgBlkFailOnKernelFault_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PartialPurgeWithAckPending_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PurgeWithRedeliveredPending_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void LastSequenceBySubjectConcurrent_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void LimitsToInterestPolicy_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void LimitsToInterestPolicyWhileAcking_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void SyncInterval_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void SubjectFilteredPurgeClearsPendingAcks_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void AckAllWithLargeFirstSequenceAndNoAckFloor_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void AckAllWithLargeFirstSequenceAndNoAckFloorWithInterestPolicy_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void AuditStreams_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void SourceRemovalAndReAdd_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void RateLimitHighStreamIngestDefaults_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void SourcingClipStartSeq_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void MirroringClipStartSeq_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void MessageTTLWhenSourcing_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void MessageTTLWhenMirroring_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void InterestMaxDeliveryReached_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void WQMaxDeliveryReached_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void MaxDeliveryRedeliveredReporting_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void UpgradeConsumerVersioning_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void THWExpireTasksRace_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void StreamRetentionUpdatesConsumers_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void MaxMsgsPerSubjectAndDeliverLastPerSubject_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void AllowMsgCounter_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void AllowMsgCounterMaxPayloadAndSize_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void AllowMsgCounterMirror_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void AllowMsgCounterSourceAggregates_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void AllowMsgCounterSourceVerbatim_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void AllowMsgCounterSourceStartingAboveZero_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PromoteMirrorDeletingOrigin_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PromoteMirrorUpdatingOrigin_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void OfflineStreamAndConsumerAfterDowngrade_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void PersistModeAsync_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void RemoveTTLOnRemoveMsg_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void MessageTTLNotExpiring_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void DirectGetBatchParallelWriteDeadlock_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void StreamMirrorWithoutDuplicateWindow_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void StreamSourceWithoutDuplicateWindow_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void FileStoreErrorOpeningBlockAfterTruncate_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void CleanupNoInterestAboveThreshold_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void StoreFilterIsAll_ShouldSucceed() { }
+
+ [Fact(Skip = "deferred: requires running JetStream server")]
+ public void FlowControlCrossAccountFanOut_ShouldSucceed() { }
+}
diff --git a/reports/current.md b/reports/current.md
index 663a9e1..e9a3d6e 100644
--- a/reports/current.md
+++ b/reports/current.md
@@ -1,6 +1,6 @@
# NATS .NET Porting Status Report
-Generated: 2026-03-01 17:33:05 UTC
+Generated: 2026-03-01 17:33:18 UTC
## Modules (12 total)