The GitHub Actions job "CI" on rocketmq-dashboard.git/fix/tool-dry-run-audit has failed. Run started by GitHub user unbridled-41 (triggered by unbridled-41).
Head commit for run: 7d81cc9f48ae0d07252aa5a7cb07971c658cb791 / unbridled-41 <[email protected]> fix(ai): stop auditing a dry-run tool call as an applied change A mutating tool call with `dry_run: true` stops at the mutation filter's plan: if (context.dryRun()) { String token = tokenService.issue(context); return new MutationOutput<>(MutationOutput.Status.PLANNED, ...); } but the outermost audit filter records every non-throwing call identically: this.record(context, "SUCCESS", null); so `POST /api/ai/tools/rmq.topic.delete/execute {"dry_run":true}` (and the same call through MCP) wrote the same row as a real deletion - `operation=DELETE_TOPIC, target=rmq.topic.delete, detail=null, result=SUCCESS` - and nothing in /api/audit-logs or its CSV export tells the two apart. An auditor answering "who deleted topic X" therefore reads rows for calls that deleted nothing. Keep the SUCCESS vocabulary and mark the preview in the detail column ("dry_run=true (preview only, nothing applied)") for a MutationOutput whose status is PLANNED; an executed change keeps the empty detail. Tests (server/): mvn -o -B -ntp test -Dtest='ToolMutationFilterTest,ToolDryRunAuditTest' -> Tests run: 7, Failures: 0, Errors: 0. - new ToolDryRunAuditTest#aPreviewIsAuditedAsSuchInsteadOfAsAnAppliedChangeTest fails before this change (the recorded detail is null) and passes after it, and asserts the handler never executed. - #anAppliedChangeIsAuditedWithoutThePreviewMarkerTest guards the execution path. - mvn -o -B -ntp checkstyle:check passes. Report URL: https://github.com/apache/rocketmq-dashboard/actions/runs/37979669557 With regards, GitHub Actions via GitBox
