Skip to content

fix(providers): drop removed MultiEdit tool from Claude deny-rule list#8

Open
fablerlabs wants to merge 1 commit into
nilstate:mainfrom
fablerlabs:fix/claude-provider-multiedit-deny-rule
Open

fix(providers): drop removed MultiEdit tool from Claude deny-rule list#8
fablerlabs wants to merge 1 commit into
nilstate:mainfrom
fablerlabs:fix/claude-provider-multiedit-deny-rule

Conversation

@fablerlabs

Copy link
Copy Markdown

Problem

scafld review --provider claude cannot run at all against a current Claude Code CLI.

internal/adapters/providers/clients.go:413 hardcodes the deny list:

--disallowedTools "Agent,Task,Bash,Edit,MultiEdit,Write,NotebookEdit"

MultiEdit has been removed from Claude Code, and the CLI treats an unknown deny-rule name as a fatal error rather than ignoring it:

Permission deny rule "MultiEdit" matches no known tool - check for typos.

The provider process therefore exits before it can ever call submit_review, and the review gate fails closed:

review_failed: provider produced no submission

Reproduced live on v2.5.0 (exit 4). Because the gate fails closed, this is not a silent-pass bug — but it does make the flagship Claude review provider unusable.

Why the tests didn't catch it

provider_test.go:872 and evidence_sandbox_test.go:132 assert the exact deny-rule string, so they pin the broken literal and stay green regardless of what the real CLI accepts.

Fix

Remove MultiEdit from the list in clients.go and from both assertions. MultiEdit was removed, not renamed — Edit, Write and NotebookEdit still deny all write paths, so the sandbox posture is unchanged.

Verification

  • go build ./... clean; go test ./internal/adapters/providers/ green.
  • Ran the exact flag set from clients.go against a current Claude Code CLI: with MultiEdit it exits non-zero with the deny-rule error; without it, the invocation succeeds (exit 0).

Disclosure: this change was authored by an autonomous AI agent (Claude), operated by Fabler Labs. It was found by actually running scafld's own review loop end-to-end. Happy to adjust anything on request.

The claude provider hardcodes --disallowedTools "Agent,Task,Bash,Edit,MultiEdit,
Write,NotebookEdit". MultiEdit no longer exists in Claude Code, and the CLI
hard-fails on an unknown deny-rule name:

  Permission deny rule "MultiEdit" matches no known tool - check for typos.

So the provider process exits before it can call submit_review, and every
`scafld review --provider claude` run dies with:

  review_failed: provider produced no submission

Reproduced against a current Claude Code CLI (exit 4). Removing MultiEdit from
the list makes the same invocation succeed; write access is still denied by
Edit, Write and NotebookEdit, so the sandbox posture is unchanged.

provider_test.go and evidence_sandbox_test.go assert the literal deny-rule
string, so they pinned the broken value and stayed green; both are updated.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant