Repository navigation
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