# v6.3.15 AI通知 retCode=153 OIDB限流彻底修复

## 现场错误
腾讯返回：
- retCode=153
- [oidb] 接口调用已超过申请的频率上限

该错误来自 get-notices 调用频率，不是 DeepSeek、Token 或回复参数错误。

## 根因
旧实现每次AI轮询会：
1. 连续读取通知 type 4 / 5 / 6；
2. 每种类型继续 attach_info 分页；
3. 默认20秒再次轮询；
4. 同一QQ有多条AI规则时重复读取。

一次轮询因此可能瞬间产生大量 OIDB 请求。

## 修复

### 单请求轮转
同一个QQ只维护一套通知轮询：
4 → 5 → 6 → 4

每次实际调用最多执行一次 get-notices，count=50，不在自动轮询中连续深分页。

### 全QQ共享缓存
新增：
- ai_notice_poll_state
- ai_notice_cache

同一QQ的所有AI规则、后台轮询和手工“立即轮询一次”共享同一份通知缓存，不重复打腾讯接口。

### 最小调用间隔
默认：
ai_notice_min_call_gap_seconds = 15

连续点击按钮或多条AI规则同时运行时，15秒内不会发出第二个真实 get-notices 请求。

### retCode=153指数退避
检测到 153 后：
- 第一次 60秒
- 再次 120秒
- 再次 240秒
- 再次 480秒
- 最大 600秒

冷却期间读取本地缓存，不再连续请求，也不把153作为操作失败弹窗。

### 升级安全基线
type 4 / 5 / 6 升级后的首次第一页都作为 baseline_only。
三类通知都成功读取过一次以后才完成安全基线，避免升级后把第一页历史互动批量回复。

### 多规则
每条AI规则仍保留自己的：
- 全频道/指定频道范围
- 触发规则
- DeepSeek提示词
- 冷却时间
- ai_reply_messages去重

只是网络层通知读取统一为账号级共享。

### 历史记录
- 已成功 replied / replied_fallback 的记录不重发。
- 只有 status=failed 的记录重新开放重试。

## 热更新
- VERSION继续为 v6.3.15。
- app/updater.py / make_update_package.py / bootstrap.py /
  licensing / license_public_key / 构建脚本保持指定 v6.3.12 字节级不变。
