Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

[Bug]: /goal verifier aborts the whole run on a single denied web_fetch/web_search call (paused(verifier_capability))

Đang mở
#419 2 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

  • #467 của @amszuidas — đã đóng, không merge

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
72/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
typescript
Lĩnh vực
ai, devtools

Hướng nghiên cứu

Read packages/local-runtime-v2/src/application/agent/goal-subagent-coordinator.ts, focusing on GoalVerifierChildCoordinator.beforeTool and beforeLlm, then inspect goal-verifier-reminder.ts. Verify the denied-call regression behavior: initial network denials allow recovery without aborting, repeated denials still pause the verifier, and the reminder states that the run is offline and missing evidence can be PARTIAL.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

bug needs-triage

Summary

In /goal mode, a Goal verifier child that calls web_fetch or web_search once has its entire run aborted, and the user gets a hard error instead of a verdict:

GOAL_VERIFIER_CAPABILITY_VIOLATION: readonly Goal verification blocked tool "web_fetch".
# → 出了点小问题,请稍后重试

The Goal settles as paused(verifier_capability).

The objective of a Goal is always about the local workspace, and the child still holds read, grep and bash, so a single denied network call has a straightforward local answer. Stopping the run for it leaves the user with no way forward.

Root cause

GoalVerifierChildCoordinator.beforeTool blocks the call and latches a capability_violation issue. The next beforeLlm converts any latched issue into an abort:

// beforeTool — the latch happens here
this.latchIssue(state, { code: 'capability_violation', message: reason });
return { block: true, reason };

// beforeLlm — and the run dies on the very next turn
if (state.issue) return { type: 'abort', reason: state.issue.message };

beforeTool's own comment states "the blocked result goes back to the model and the next beforeLlm stops the run on the latched issue" — the recovery is described but never reachable. The child cannot act on the rejection, because it is stopped before it gets a turn in which to do so.

Two things make this reachable in practice:

  1. renderGoalVerifierReminder describes the read-only boundary in detail but never says the two network tools are unavailable. The model has no way to know in advance.
  2. web_fetch/web_search are precisely the two tools that survive the verifier role's five-tool grant minus the canonical read-only ceiling, so they are the only calls that ever reach this guard.

Suggested direction

Count denied calls per run and allow a bounded number of them to be spent on recovery:

  • First N denials (N≈2): still block: true, but the reason states the run is offline and names the local alternative, and no issue is latched — the child continues and can reach the same evidence.
  • Past N: the child is looping rather than detouring; latch capability_violation as today.

route_unavailable and child_budget_exhausted would be untouched, and maxTurns/maxTokens stay as the outer bound on a child that keeps retrying.

Independently, adding one clause to the reminder — that the run is offline and that a missing-evidence situation is a PARTIAL rather than a reason to reach for the network — would stop the common case from spending a turn on a denied call at all.

On the current design intent

FAILURE_REASONS.capability_violation → paused(verifier_capability) is documented as owned by the readonly guard / tool catalog layer. That framing is right for a genuine catalog defect, but a model reaching for web_search once on a local objective is not one, and pausing the whole Goal surfaces as an unexplained failure to the user. Keeping the latch for the repeat case preserves the intent; it only stops firing on a single recoverable mistake.

Environment

  • App: MiniMax Code 3.0.74-inside.104 (macOS, arm64)
  • Reproduced on the released build; the same code path is in packages/local-runtime-v2/src/application/agent/goal-subagent-coordinator.ts and goal-verifier-reminder.ts

A fix with tests and a verified fail-before/pass-after regression is ready in a fork branch (Hylouis233:work) — happy to open a PR if that is preferred over a maintainer-side patch.

Ngôn ngữ chính
TypeScript
Star
2.1k
Fork
271
Merge trung bình
15 giờ 10 phút
Pull request đã merge (30 ngày)
34

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của MiniMax-AI/minimax-code

Tất cả issue của MiniMax-AI/minimax-code

Issue tương tự

Thêm issue về TypeScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.