Repository navigation
NimBus v4.0.0
NimBus 4.0.0 adds private networking, an operator MCP endpoint, a redesigned Monitor and a Failed messages page across all endpoints, and as a major release it makes the storage providers agree on missing rows and removes the deprecated API.
Highlights
- Added a private networking deployment mode (
--network-mode privateonnb infra applyandnb setup): every NimBus endpoint is reached only through private endpoints in your subnets, with a pre-flight DNS check and a cleanup path back to public mode. Public mode stays the default. - Added an opt-in operator MCP endpoint,
/mcp, to the WebApp: eleven read-only tools let AI agents inspect endpoint health, messages, metrics and failure classifications with the caller's NimBus roles. It uses its own Microsoft Entra app registration in Azure and needs no sign-in under Aspire. - Improved the Monitor wall: a flat display with server-computed failing-since times and acknowledgements shared across devices.
- Added Failed messages, one page of failed and dead-lettered messages across every endpoint you can read.
- Fixed the storage providers disagreeing about missing rows and absent fields; Cosmos DB, SQL Server and in-memory now behave the same, pinned by conformance tests.
- Fixed SQL Server dropping the handoff fields on message rows and stamping status timestamps at
datetimeprecision, which could return the wrong row as a session's latest update. - Fixed the Resolver writing a retry audit entry before the event writes it records had succeeded.
- Fixed Admin → Storage containers offering to delete the Integration Intelligence containers.
Compatibility
- Single-row getters on
IMessageTrackingStoreandIEndpointMetadataStorereturnnullfor a missing row on every provider; SQL Server and in-memory used to throwEndpointNotFoundExceptionorMessageNotFoundException. SQL Server returnsnull, not"", for NULL optional strings. Cosmos DBGetEventignores removed and archived rows and returns the latest update,GetFailedMessagereturns the newest message that carriesErrorContent, andGetEventByIdmatches the stored{EventId}_{SessionId}id on every provider. - The Service Bus defer API is removed:
Defer,DeferOnly,ReceiveNextDeferred,ReceiveNextDeferredWithPopandRestoreNextDeferredonIMessageContext, andDeferAsyncandReceiveDeferredMessageAsynconIServiceBusSession. Legacy deferred sequence numbers no longer block a session, and aContinuationRequestis completed without processing. If an endpoint ever used the defer API, let 3.x drain its deferred messages before upgrading;nb endpoint purge --state Deferredremoves any left over. IPermanentFailureClassifieris removed; implementIFailureDispositionClassifier, whichDefaultPermanentFailureClassifiernow implements.StrictMessageHandlerhas one constructor with optional parameters, replacing the three that tookIPermanentFailureClassifier.INimBusMessageStoreincludesIEndpointAcknowledgementStore, so custom aggregate stores must add its three members, andendpointacknowledgementsis now a reserved endpoint id.- Nullable annotations changed on public surface:
IPublisherClient.PublishmessageId,IServiceBusManagement.CreateCustomRuleactionandUpdateSubscriptionforwardTo,IEventJsonMasker.TryCollectSensitiveValuesandIMessageContext.DeadLetterexception, plus model properties that are nowstring?. Implementations with nullable enabled see CS8767 until they match. - The
NimBus.Mcpstdio server is removed; it was never published as a package. Point MCP clients at the WebApp's/mcp, and use theNimBus.AgentsREST SDK for agents that publish or subscribe on the bus. - The Resolver namespace
NimBus.Broker.Servicesis nowNimBus.Resolver.Services, and the WebApp's generated storage-hook action isStoragehookReceiveAsync; the route is unchanged.
IResponseService.SendContinuationRequestToSelf and SessionState.DeferredSequenceNumbers are newly obsolete and are removed in v5.
On Cosmos DB, run nb infra apply before nb deploy apps: it declares the new endpointacknowledgements container, which the WebApp can't create under managed identity. SQL Server applies migrations 0020_EndpointAcknowledgements and 0021_MessageHandoff on startup; with VerifyOnly, run them from your pipeline first. Resubmit, skip and resubmit-with-changes answer 404 instead of 400 for a missing message, and the event lookup answers 404 instead of 500 for an unknown event. Monitor acknowledgements stored in the browser by 3.x are dropped. /mcp stays off until NimBus__Mcp__Enabled is set; see the operator MCP guide and private networking.
This release was validated at commit 0acf177 with the full .NET Release build and test suite in CI, live Cosmos DB and SQL Server conformance suites with no skipped tests, Service Bus emulator compatibility checks, the CRM/ERP end-to-end suite, 458 frontend tests, and the frontend production build. The /mcp Microsoft Entra sign-in is covered by tests with locally signed tokens and hasn't yet been piloted against a live tenant.
PRs: #138, #139, #140, #141, #142, #143, #144, #145, #146, #147, #148, #150, #151, #152, #153, #154, #155, #156, #157, #158
Commits: v3.11.0...v4.0.0