Repository navigation
Releases: context-and-oss/NimBus
Release list
NimBus v4.8.0
NimBus 4.8.0 adds agent API keys, so agents built on NimBus.Agents can call the agent API wherever sign-in is required, and adds workflow prompts to the operator MCP server. It also fixes bugs in the agent API, NimBus Identity, the SQL Server libraries and the Resolver.
Highlights
- Added agent API keys. A site Owner issues each agent its own key in Settings → Agent keys, sees when it was last used, and can revoke or remove it. The agent sends the key as
X-NimBus-Agent-Key(AgentOptions.ApiKey), and it works only on/api/agent/*. - Added four workflow prompts to the operator MCP server:
triage,investigate-message,recover-messageandfailure-report. They only guide the client; every read and change still goes through the existing tools, with their authorization and audit. - Changed Operations → Delete all events to wipe the endpoint completely. It recreates the endpoint's subscription and Deferred subscription, then deletes its events and stored message history, and it is now audit-logged. The storage-only Purge data… item is gone from the endpoint row menu.
- Added an
aspire deploypath that publishes the CrmErpDemo to Azure Container Apps, including the Agent Zone and the enrichment agent, which signs in with an agent API key. - Fixed the agent API handing out and settling the same pending hand-off twice when an agent returned to receive before the Resolver had processed its settlement. That also wrote two
CompleteHandoffaudit rows. - Fixed every request from a NimBus Identity user who holds a role failing with a 500 ("Collection was modified").
- Fixed the NimBus Identity bootstrap admin being created with no role, which left a fresh store with no one able to grant access.
- Fixed the NimBus SQL Server libraries failing to sign in with
Authentication=Active Directory …connection strings on SqlClient 7. - Fixed three gaps in the Resolver's throttled-store redelivery. Dead-letter replay now starts a fresh throttle budget, any failure to schedule the retry copy falls back to broker redelivery, and throttled heartbeats retry in place.
Compatibility
IEndpointMetadataStore adds GetAgentApiKeySettings, TrySetAgentApiKeySettings, GetAgentApiKeyUsage and RecordAgentApiKeyUse, and IMessageTrackingStore adds PurgeStoredMessages. None has a default implementation, so custom stores must add them; the Cosmos DB, SQL Server and in-memory stores already do. SQL Server applies migration 0024_AgentApiKeys on startup; with VerifyOnly, run it from your pipeline first. Cosmos DB keeps agent keys in the existing settings container, so no nb infra apply is needed. MessageAuditType adds AgentApiKeyCreated, AgentApiKeyRevoked and AgentApiKeyRemoved, which are always recorded.
The WebApp adds GET/POST /api/admin/agent-keys, POST /api/admin/agent-keys/{keyId}/revoke and DELETE /api/admin/agent-keys/{keyId}, all for site Owners only. A request carrying an agent key whose X-Agent-Id names a different agent gets 403. Delete all events now also recreates the endpoint's Service Bus subscriptions and deletes its stored message history; audit records are kept. POST /api/endpoint/{endpointName}/purge remains but the UI no longer calls it. A newly created Identity bootstrap admin is now a site Owner (EIP_Management). The SQL Server libraries now depend on Microsoft.Data.SqlClient.Extensions.Azure. The three-argument HandoffSettlementService constructor is obsolete. No topology change or wire change.
This release was validated at commit 180f8d7 with the full .NET Release build and 3,776 tests in CI (2 skipped), live Cosmos DB and SQL Server conformance suites with no skipped tests, and Service Bus emulator compatibility checks. The frontend production build and 726 frontend tests passed against the release commit's sources. The hand-off fix was checked live in the local CrmErpDemo, with one settlement and one audit row for each of six contacts. The agents' Azure deployment was checked through aspire publish output only, not a real deploy.
PRs: #239, #240, #242, #243, #244, #245, #246, #247, #248, #249, #250, #252, #253, #254, #255, #256, #257, #258, #259
Commits: v4.7.0...v4.8.0
NimBus v4.7.0
NimBus 4.7.0 replaces the Admin page with separate Operations, Topology and Settings pages, and fixes several bugs in the WebApp, the Resolver, the CLI and the Cosmos DB store.
Highlights
- Changed the Admin page into three site-Owner pages under Manage: Operations, Topology and Settings. Each tab, setting and operation has its own URL, and
/Adminredirects to Operations. - Added a status strip and an Endpoints table to Operations. The table puts each endpoint's Receive and Send switches beside its failed, dead-lettered and pending counts. Operations open one at a time from a grouped list, pre-filled for the chosen endpoint, and the sidebar shows how many endpoints are paused.
- Added live status, a one-line summary and safe quick actions to each Settings row. Each feature's settings open in a tabbed panel that counts unsaved changes and asks before discarding them.
- Added Pages, Operations and Settings sections to the Ctrl K command palette for site Owners. The Heartbeat, Audit Log and Simulate pages gain links to their settings.
- Changed Delete single event to ask for the event ID to be typed, like every other delete. Confirm buttons now name their action.
- Fixed the Failed page sometimes not moving to the next page when Next was pressed on the last loaded failure.
- Fixed Settings → MCP access presenting the MCP resource app ID as the client ID to sign in with. The connection instructions now explain the separate client registration and its redirect port.
- Fixed a fresh local Aspire session failing every WebApp request with
IDW10106. A WebApp with no sign-in method configured now stops at startup with a message naming the settings to set. - Fixed CLI deployments placing new resources in West Europe instead of the resource group's region.
- Fixed the Resolver crashing at startup when the Service Bus namespace setting holds a connection string whose
SharedAccessKeyis not written in that exact case. - Fixed a dead-lettered message losing the handler's exception when a failure-disposition classifier returned an unknown value.
- Fixed the Cosmos DB subscription store writing notification types and timestamps that depend on the server's culture, for example under Turkish.
Compatibility
The Admin page and its tabs are gone. /Admin redirects to /Operations, so update bookmarks and runbooks that point at a specific Admin tab. A WebApp with no sign-in method configured (no Entra client ID, Identity or local development authentication) now fails at startup instead of returning 500 on every request. When locationParam is not set, deploy.core.bicep and deploy.webapp.bicep now default to the resource group's region instead of westeurope. The CLI still keeps existing resources in their current region, but raw-Bicep deployments to a resource group outside West Europe should set locationParam. An unknown failure disposition now raises InvalidOperationException, with the handler's exception as InnerException, instead of ArgumentOutOfRangeException. An invalid subscription type or email in the Cosmos DB subscription store raises ArgumentException instead of Exception. The repository's solution file is now src/NimBus.slnx, and every project now runs the .NET analyzers; their warnings are not errors. No public API addition, schema migration, topology change or wire change.
This release was validated at commit 0058ae5 with the full .NET Release build and 3,647 tests in CI (2 skipped), live Cosmos DB and SQL Server conformance suites with no skipped tests, and Service Bus emulator compatibility checks. The frontend production build and 715 frontend tests passed against the release commit's sources. The new Settings panels were checked against a mock API only, not a real deployment.
PRs: #217, #218, #219, #223, #226, #227, #229, #230, #231, #232, #233, #234, #235, #236, #237, #238
Commits: v4.6.0...v4.7.0
NimBus v4.6.0
NimBus 4.6.0 adds an Admin tab where site Owners can turn the operator MCP endpoint off and narrow what AI agents may do, without a redeploy or an Entra change.
Highlights
- Added Admin → MCP access, where a site Owner can switch the
/mcpendpoint on and off and turn off payloads, report, classify, resubmit and skip for agents. They can also restrict which workloads, people, client apps and endpoints agents may reach, and lower the rate limits. Before saving, a review step marks each change as widening or narrowing access, and Turn off now disables the endpoint at once. - Added an effective-access preview, connection instructions and recent MCP activity to the tab. Switched-off tools disappear from
tools/listandpermittedActions, and refused calls are audited asMcpAccessRefused. - Fixed
nimbus_classify_failureaccepting an attempt that belongs to another endpoint, and it now re-checks the Contributor role against fresh access-control lists before classifying.
Compatibility
IEndpointMetadataStore adds GetMcpAccessSettings and TrySetMcpAccessSettings without default implementations, so custom implementations must add them; the Cosmos DB, SQL Server and in-memory stores already do. SQL Server applies migration 0023_McpAccessSettings on startup; with VerifyOnly, run it from your pipeline first. Cosmos DB stores the policy in the existing settings container, so no nb infra apply is needed. MessageAuditType adds UpdateMcpSettings and McpAccessRefused, which are always recorded.
The WebApp adds GET/PUT /api/admin/mcp/settings, POST /api/admin/mcp/turn-off and GET /api/admin/mcp/activity, all for site Owners only. The deployment settings (NimBus__Mcp__*, the Entra registration and the rate-limit maxima) remain the ceiling, and the Admin policy can only narrow it. Until a policy is saved, MCP behaves as in 4.5.0. Once a policy turns the endpoint off, /mcp answers 503 [Disabled]; if the policy cannot be read at startup, it answers 503 [Unavailable]. No topology change or wire change.
This release was validated at commit 0f3b02e with the full .NET Release build and 3,629 tests in CI (2 skipped), live Cosmos DB and SQL Server conformance suites with no skipped tests, and Service Bus emulator compatibility checks. The frontend production build passed against the release commit's sources; in the full frontend run, 568 of 569 tests passed, and the one timeout came from a Failed-page test that is flaky under load, unchanged since 4.5.0, and passes when its file runs alone. The Admin policy has not yet been piloted against a real Entra deployment.
Commits: v4.5.0...v4.6.0
NimBus v4.5.0
NimBus 4.5.0 lets an operator's AI agent recover failed messages through the operator MCP server, and guards every resubmit and skip against a message that changed since it was loaded.
Highlights
- Added four recovery tools to the operator MCP server:
nimbus_resubmit_messageandnimbus_skip_message, which run only after animbus_prepare_actionpreview and its two-minute token bound to the caller and the message's version, plusnimbus_set_message_reportedandnimbus_classify_failure. Each needs its own delegated Entra scope and the endpoint Contributor role. - Improved resubmit, skip, resubmit with changes and mark reported in the Web UI and REST API: they share one guarded path with the MCP tools, so a message that changed since it was loaded is refused with a 409 and a toast, and a Web UI click and an agent acting on the same message send exactly one command.
- Improved the audit trail for those commands: the role is re-checked against fresh access-control lists, the audit row is written before anything is sent, the command is refused with a 503 when it cannot be written, and a failed publish restores the message and is recorded as
CommandNotSent. - Fixed MCP operator tool results leaving out members whose value is null.
Compatibility
IMessageTrackingStore adds TryArchiveUnresolvedEvent and TryRestoreArchivedEvent, which the Cosmos DB, SQL Server and in-memory stores implement. Their default implementations throw NotSupportedException, so a custom store must implement both atomically before the WebApp can resubmit or skip. IEndpointAuthorizationService adds HasRoleFreshAsync, which defaults to HasRoleAsync, and MessageAuditType adds CommandNotSent.
The REST resubmit, skip and resubmit-with-changes operations can now return 409 and 503. Resubmit, ResubmitWithChanges, Skip, ReportEvent and CommandNotSent audit rows are always recorded, whatever is selected in Admin → Audit. The MCP endpoint advertises four new delegated scopes (nimbus.resubmit, nimbus.skip, nimbus.annotate, nimbus.classify); existing clients keep working, and the recovery tools stay unavailable until you add the scopes to the MCP app registration (docs/mcp-server.md). They are rate limited to 5 changes per 60 seconds per caller (RateLimiting:McpMutations). No schema migration, topology change or wire change.
This release was validated at commit 023891a with the full .NET Release build and 3,574 tests in CI (2 skipped), live Cosmos DB and SQL Server conformance suites with no skipped tests, and Service Bus emulator compatibility checks. The frontend production build and 559 frontend tests passed against the release commit's sources; the delegated Azure pilot of the recovery tools follows this release.
PRs: #207, #208, #209, #210, #211, #212, #213
Commits: v4.4.0...v4.5.0
NimBus v4.4.0
NimBus 4.4.0 adds a custom date range to the Insights page and quick time presets to the Audit Log, and moves the WebApp to Tailwind CSS 4.
Highlights
- Added a Custom period to the Insights page, using the same start and end picker and 90-day limit as the Metrics page.
- Added Created in presets to the Audit Log: Last hour, Last 24 hours, Last 7 days and Last 30 days fill Created From, leave the range open up to now and search with the other filters kept. The free From and To fields still allow any span.
- Improved the WebApp's build by upgrading to Tailwind CSS 4 and tailwind-merge 3, with the v3 look kept, and by sharing one custom date range picker across the Failed, Metrics and Insights pages.
Compatibility
This release changes only the WebApp's frontend. The library packages are republished at 4.4.0 without code changes. No public API, schema migration, topology change or wire change.
This release was validated at commit d61ecdb with the full .NET Release build and 3,528 tests in CI (2 skipped), live Cosmos DB and SQL Server conformance suites with no skipped tests, and Service Bus emulator compatibility checks. The frontend production build and 556 frontend tests passed in a clean checkout of the release commit; no manual Azure or CRM/ERP end-to-end run was performed for this release.
Commits: v4.3.0...v4.4.0
NimBus v4.3.0
NimBus 4.3.0 adds custom date ranges to the Failed and Metrics pages, resilience helpers for adapters and a local NimBus stack that runs from nuget.org packages, and fixes endpoint filters matching other endpoints by prefix.
Highlights
- Added a Custom date range to the Failed page time picker: presets stay one-click, and a local start and end time apply together and are kept in the URL.
- Added a Custom period to the Metrics page, bucketed by minute, hour or day according to its span and limited to 90 days.
- Added Retry-After support to retry policies: an exception implementing
IRetryAfterHintmakes the scheduled retry wait at least the server's hint, capped atMaxDelay, andAddExceptionRule<TException>matches rules on exception type instead of stack-trace text. - Added
Akaule.NimBus.Extensions.HttpwithAddAzureBearerToken(scopes), a cached Microsoft Entra bearer-token handler for adapter HTTP clients. - Added a local NimBus stack from packages:
Akaule.NimBus.AspireHostingruns the Resolver, WebApp and Service Bus emulator, which now also ship as thenimbus-resolver,nimbus-webappandnimbus-sb-emulatordotnet tools. - Fixed
EventFilter.EndPointIdmatching by prefix on SQL Server and in-memory, which let a Reader of one endpoint see another endpoint's events with a longer name, and let bulk skip and delete-by-status change the other endpoint's rows. - Fixed the Resolver dead-letter replay action being hidden when the topic name's casing differed, and restored the Failed page controls and side-panel navigation.
- Fixed two npm security advisories and updated the WebApp's npm dependencies within their current majors.
Compatibility
EventFilter.EndPointId is now an exact, case-insensitive match on every provider; callers that relied on prefix matching must query each endpoint. Event id, session id and last message id filters stay prefix matches.
IMetricsStore adds (from, to) overloads of its five queries with default implementations that forward to the existing members, which are now [Obsolete] and will be removed in v5; the Cosmos DB, SQL Server and in-memory stores implement the new overloads. The /api/metrics endpoints take optional from and to query parameters and return 400 for an invalid custom window. IRetryPolicyProvider adds an exception overload with a default implementation.
Akaule.NimBus.ServiceDefaults is published for the first time, and its standard HTTP resilience handler is now opt-in through AddServiceDefaults(options => options.UseStandardResilienceHandler = true); hosts that copied ServiceDefaults from the repository and want the old behaviour must opt in. No schema migration, topology change or wire change.
This release was validated at commit 2c13174 with the full .NET Release build and 3,528 tests in CI (2 skipped), live Cosmos DB and SQL Server conformance suites with no skipped tests, and Service Bus emulator compatibility checks. The frontend production build and 552 frontend tests passed in a clean checkout of the release commit; no manual Azure or CRM/ERP end-to-end run was performed for this release.
PRs: #184, #191, #192, #193, #194, #195, #196, #197, #198, #199, #200, #201
Commits: v4.2.0...v4.3.0
NimBus v4.2.0
NimBus 4.2.0 redesigns the Failed page, lets operators choose which actions are audited, and fixes duplicate handling after retries and circuit-breaker settlement.
Highlights
- Added an Application Insights–style layout to the Failed page: filter pills, one search box, a range brush and an End-to-end transaction details side panel that opens in place of leaving the list.
- Added an Admin → Audit tab where a site Owner chooses which operator actions are recorded; every type stays on by default, and access-denied attempts and audit-setting changes are always recorded.
- Improved Metrics: activity and event-type charts are now bar charts, and the "Top failure causes" teaser is removed in favour of the Failed page's By error view. The Failed page now defaults to the last 24 hours.
- Fixed the inbox running a handler again when the source redelivered an event that a retry, resubmission or deferred replay had already completed.
- Fixed a circuit opening mid-failure leaving a delivery half-settled, which left the event Failed and its session blocked until an operator resubmitted it.
- Fixed skips, handoff settlements and duplicates counting as circuit-breaker successes, which could close a half-open circuit without calling the dependency.
- Fixed the circuit-open reason and the
PartialRevealvalidation error formatting numbers with the host culture. - Added a Dynamics 365 Sales and Business Central sample,
samples/DynamicsBcDemo.
Compatibility
IEndpointMetadataStore adds GetAuditSettings and SetAuditSettings without default implementations, so custom implementations must add them; the Cosmos DB, SQL Server and in-memory stores already do. SQL Server applies migration 0022_AuditSettings on startup; with VerifyOnly, run it from your pipeline first. Cosmos DB stores the selection in the existing settings container, so no nb infra apply is needed.
Retries and parked copies now carry an optional InboxMessageId application property, and SessionState adds BlockedByMessageId; both are additive, so mixed SDK versions keep working, but endpoints get the duplicate fix only once their SDK packages are upgraded. IMessageContext.GetBlockedByMessageId has a default implementation. HandlerOutcome adds NotDispatched; exhaustive switches over it need a new case. No Service Bus topology change.
This release was validated at commit 8963a18 with the full .NET Release build and 3,438 tests in CI, live Cosmos DB and SQL Server conformance suites with no skipped tests, and Service Bus emulator compatibility checks. The frontend production build and 527 frontend tests passed in a clean checkout of the release commit; no manual Azure or CRM/ERP end-to-end run was performed for this release.
PRs: #169, #170, #171, #172, #173, #174, #175, #176, #177, #178, #179, #180, #181, #183
Commits: v4.1.0...v4.2.0
NimBus v4.1.0
NimBus 4.1.0 adds clearer failure-classification guidance and fixes deferred replay, circuit-breaker accounting, SQL outbox ordering and Cosmos DB time-range queries.
Highlights
- Added an explanation of how failures are classified to Admin → Failure intelligence, with threshold sliders, live sample evaluations and clearer category and guidance descriptions on event details.
- Fixed deferred drains repeatedly replaying messages that become blocked again, which could flood the audit trail and hold up other sessions.
- Fixed session-lock expiry during long deferred drains, reducing interrupted drains and duplicate replays.
- Fixed failed retries and resubmissions being counted as circuit-breaker successes, which could close a circuit while its dependency was still unavailable.
- Fixed SQL Server outbox batches dispatching messages in random GUID order when timestamps matched; new rows now dispatch in insertion order.
- Fixed Cosmos DB timestamp comparisons omitting or including the wrong rows at time-range boundaries in searches, failure histograms and heartbeat gaps, and reporting the wrong oldest failure within a second.
- Improved deployment, retry, handoff, MCP and demo documentation to match the implemented behavior.
Compatibility
SQL Server outbox initialization adds a sequence, a nullable SequenceNumber column and a replacement dispatch-order index. With AutoCreateTable enabled, startup applies these changes; otherwise run EnsureTableExistsAsync with schema-change permissions before starting the upgraded outbox. Existing pending rows dispatch first in their previous timestamp order; their original order within timestamp ties cannot be recovered. Custom IOutbox implementations must preserve store order for messages sharing a creation timestamp.
IMessageContext.HandledFailure is an additive property with a default implementation, so existing custom contexts remain source-compatible. Custom contexts must store its value to benefit from the circuit-breaker fix; the supplied Service Bus and in-memory contexts already do. Deferred replays now receive a fresh message ID, and re-parked copies carry that ID as their parent so the drain can recognize them; upgrade endpoint SDK packages to receive the fix. No Service Bus topology change or Cosmos DB schema migration is required. The proposed v5 Cosmos storage redesign is not included.
This release was validated at commit 4d8bea57 with the full .NET Release build and 3,286 tests in CI, live Cosmos DB and SQL Server conformance suites with no skipped tests, and Service Bus emulator compatibility checks. The frontend production build and 466 frontend tests passed in a clean checkout of the release commit; no new manual Azure or CRM/ERP end-to-end run was performed for this release.
PRs: #159, #160, #161, #162, #163, #164, #165, #166, #167, #168
Commits: v4.0.0...v4.1.0
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
NimBus v3.11.0
NimBus 3.11.0 fixes the Application Insights log query, which stopped working when Microsoft retired API keys for the query API, by authenticating with the WebApp's managed identity.
Highlights
- Fixed the event logs endpoint (
GET /api/event/details/{endpointId}/{id}/logs), which stopped returning logs when Microsoft retired API keys for the Application Insights query API on 2026-03-31; the WebApp now sends a Microsoft Entra token from its managed identity. - Added a Reader role assignment for the WebApp's managed identity on the Application Insights component to
deploy.webapp.bicep, the role Microsoft documents for Entra-authenticated queries. - Fixed
nb infra applydeleting and recreating themanagement-appApplication Insights API key on every run; it no longer creates, deletes or passes a key.
Compatibility
No schema migration, topology change or message wire change. Run nb infra apply before or together with nb deploy apps, because the WebApp needs the Reader grant; without it the event logs endpoint keeps returning no logs, as it has since the key retirement.
The web app deployment now assigns Reader (acdd72a7-3385-48ef-bd42-f606fba81ae7). If the deploying identity is limited by the ABAC condition from the Azure requirements guide, add Reader to that condition first. If the WebApp identity already holds Reader on the component from a manual grant, delete that assignment, or the deployment fails with RoleAssignmentExists.
The apiKey parameter of deploy.webapp.bicep is deprecated and ignored, and is removed in the next major version. AppInsights:ApiKey is no longer read, and the next deployment removes the setting. Existing management-app keys stay in place until you delete them. See Application Insights log queries.
This release was validated at commit 0326fe6 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, 411 frontend tests, the frontend production build, and a manual run of the new query path against a deployed Application Insights component with a developer credential.
Commits: v3.10.0...v3.11.0