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

Reply via email to