Auto 档下原生分类器瞬时故障存在 60–90s 硬拒绝窗口,Cindy fallback 来不及介入
- Dominant language
- TypeScript
- Stars
- 2.7k
- Forks
- 395
- Avg merge
- 21h 48m
- Merged PRs (30d)
- 776
Description
## 现象
Auto 权限档下,Claude 原生安全分类器出现瞬时故障(429 / 5xx / 408)时,用户会连续遇到工具被拒,且**没有任何权限弹窗**。SDK 直接返回类似文案:
```
claude-sonnet-5 is temporarily unavailable, so auto mode cannot determine the safety of Bash right now.
```
只读操作仍可用,写/执行类工具全部被拒。最坏情况持续约 60–90 秒后才切到 Cindy fallback。
## 根因
`apps/desktop/src/main/maker-host/claude-auto-permission-fallback.ts:133`
```ts
const TRANSIENT_EPISODE_MS = 30_000;
const TRANSIENT_WINDOW_MS = 10 * 60_000;
const TRANSIENT_EPISODE_THRESHOLD = 3;
```
瞬时状态码按「故障段」记账,需要**连续 3 段**(段以 30s 固定桶为锚)才通知 coordinator 切 Cindy fallback。也就是说要持续失败约 1 分钟、或用户间隔性重试 3 次,降级才生效。
这个阈值是 #596(一次偶发限流不该改写用户偏好)和 #758(确定性 429 不能把用户留在无限 fail-closed)的折中,方向没问题。但折中留下的窗口期内:
- 每一次工具调用都被硬拒
- Cindy 完全不介入,`useCindyAutoReviewFallback` 尚未触发
- 用户侧零提示,只能看到模型转述的"被拒绝了"
`README` 级的表现就是"Auto 档突然不工作了,重试几次又好了"。
## 影响面
只影响走官方 Claude OAuth 路由(`mutableAutoReviewCredentialMode === 'oauth-bearer'`)的会话——这恰好是绝大多数订阅用户的默认路径。
## 建议改法(保持独立)
不动阈值语义,只补窗口期的用户可见性与自救:
1. **首次**检测到分类器故障(还未达升级阈值)时,向该会话发一条会话级系统提示(一次即可,不逐条),说明"自动审核暂时不可用,正在重试;可临时切到询问档"。
2. 可选:把首段故障的处理从"什么都不做"改成"本段内的工具调用改走 Cindy fallback 试一次",成功即不打扰用户,失败再计入 episode。这条比降低阈值更安全——不改写用户偏好,也不留死亡窗口。
## 独立性
只改 `claude-auto-permission-fallback.ts` + 一条会话级通知通道,不依赖其他 auto-review issue。
## 验证
- 用 proxy 注入连续 429,确认窗口期内有一次性提示、且不逐条弹窗
- 确认分类器恢复后(2xx)记账清零逻辑仍生效(`claude-auto-permission-fallback.ts:179`)
Contributor guide
Research direction
Start in apps/desktop/src/main/maker-host/claude-auto-permission-fallback.ts, especially the transient episode thresholds around line 133 and the recovery logic around line 179. Trace the existing session-level notification path, then use a proxy to inject repeated 429 responses and verify one window-period notice, no per-call prompts, and cleared accounting after a 2xx response.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- authorization, desktop
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 56/100