fix(web): stamp exam-quality cards and raise rectification timeouts
Independent Staging Quality Gate / validate (push) Successful in 12m43s
Independent Staging Quality Gate / publish (push) Successful in 17m3s

Recorded-year quality probes were spoken-only, so the interview had no
choice card. Compare also re-scored after batch until the 105s attempt
aborted the turn.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jesse_Chen
2026-08-26 10:18:57 +08:00
parent 9326b7d0a4
commit 7416e02fa9
20 changed files with 444 additions and 61 deletions
+32
View File
@@ -5659,6 +5659,38 @@
- 复发自:BUG-309validate 跳过 `next build`,publish 才暴露类型错误);BUG-384 口语绑定收窄了 payload
- 修复版本:待发布
## BUG-388 | 证据已写入并重算后整轮仍被 105 秒 attempt 超时打成 run_timeout
- 状态:resolved
- 首次发现:2026-08-26
- 最近更新:2026-08-26
- 影响面:`runV9AgentTurn` attempt 超时、`record-evidence-batch` 自动重算、`compare-candidates`、公开 `run.failed`、已盖戳 `open_question`
- 用户现象:自由文本回答当前追问后,界面已显示读取 Case、记下证据、比较候选(两次工具完成事件都带同一套已执行方法),随后 `run.failed` `code=run_timeout`,文案「服务端运行超时,状态已记录。」没有口语气泡,也没有点选卡。
- 触发条件:`POST /api/rectification/agent` `action=message`;本轮 `record-evidence-batch``accepted` 并自动重算;模型接着调用 `compare-candidates`,再以相同参数第二次 `read-case`attempt 墙钟超过 105 秒。本轮没有已盖戳点选卡可点。
- 根因:(1) 运行器 attempt 超时是 105 秒,路由 `maxDuration` 120 秒;Python 评分单次上限 60 秒。`scoreAndPersistCurrentEvidence` 每次都先打引擎,指纹缓存只发生在随后的 persist RPC,因此 batch 自动重算之后的 compare 会再跑一轮完整评分。(2) 第二次 `read-case` 只有 `completed` 没有 `started`,符合相同参数重复 tool-call 被跳过 started 回执。(3) 超时走 `failedAttempt`,发生在把已盖戳题干接到口语之前,所以工具已提交的状态不会变成可见回复。
- 修复:attempt 超时提到 210 秒,agent / regenerate 路由 `maxDuration` 提到 240 秒。证据指纹和候选窗指纹都未变时 compare 直接复用已落盘快照,不再打 Python。超时且本轮已盖戳 `open_question` 时仍落该题干并完成本轮,而不是空失败。不改 Skill `10.0.11`,不打开 `confirmation_allowed`
- 验证:`frontend/tests/rectification-v9-status-security.test.ts``frontend/tests/rectification-v9-stream.test.ts``frontend/tests/rectification-answer-choice.test.ts`
- 防复发:compare 在相同证据/范围指纹上不得再调用 `runV9CandidateScore`。attempt 超时必须小于路由 `maxDuration`。超时后若工具已盖戳题干,不得把整轮打成空 `run_timeout`。不得把 Cookie、JWT、案例 ID 或用户原文写入本记录。
- 相关记录:BUG-078、BUG-368、BUG-384、BUG-389
- 复发自:BUG-078(评分已完成后叙事超时把整轮打成失败)
- 修复版本:待发布
## BUG-389 | 已记下学业年后发挥质量追问没有点选卡
- 状态:resolved
- 首次发现:2026-08-26
- 最近更新:2026-08-26
- 影响面:`method_followup_plan``persistServerOwnedFocus``known_event_quality`
- 用户现象:记下带年份的学业经历后,口语会问那次考试有没有发挥失常,界面却没有 A/B/C/D 点选卡,只能打字。dasha 冲突反推卡仍按采用门等待,不在此列。
- 触发条件:账本已有该年学业等可评分事件;decision receipt 含 `known_event_quality`;采用门 3 件/2 领域未齐,下一方法层仍是感情收集。
- 根因:`remainingReverseVerifyProbes` 跳过 `known_event_quality`。采用前只有 dasha 冲突探针能变成 `event_probe` 点选卡,且还要等 3 件/2 领域。发挥质量探针留在 receipt 里,模型用自然语言问,服务器不盖 `choice_frame`。即便盖了,`information_gain` 为 0 也会被 `shouldSkipDiscriminatorFollowup` 丢掉。
- 修复:已记下对应年份后,`known_event_quality` 在方法轮换之前出 `event_quality` 点选卡,不要求采用门。摘要已编码发挥质量则不再出卡。零信息增益不再挡住发挥质量卡。dasha 冲突探针仍等 3 件/2 领域。不改 Skill `10.0.11`
- 验证:`frontend/tests/rectification-eight-method.test.ts``frontend/tests/rectification-server-focus.test.ts``tests/test_rectification_event_probes.py`
- 防复发:已记下年份的发挥质量探针必须挂 `choice_frame` 并持久化。不得把 dasha 冲突探针的采用门门槛套到发挥质量卡上。不得把 `confirmation_allowed` 改成 true。
- 相关记录:BUG-348、BUG-384、BUG-386、BUG-388
- 复发自:BUG-384(口语问发挥质量,点选卡却被冲突探针占住;采用门修好后变成完全没有卡)
- 修复版本:待发布
## BUG-379 | 生时纠正已记入学后仍编造高考年并再问入学
- 状态:resolved