fix: mark item rejected on selector_error for consistent bookkeeping

selector_error 分支(捕获 ValueError/FileNotFoundError)此前只返回 reason,
未 mark_item_rejected,导致 Phase 3 已 record 的 pending attempt 行永远停在
pending;而 hard-fail 分支会标记 rejected。两条失败路径落库风格现统一为
mark_item_rejected(异常路径无 outcome/observation,故不写 selector_scores)。

补单测 test_apply_grounded_selector_marks_rejected_on_error 守卫该路径。
This commit is contained in:
2026-07-14 14:49:41 -04:00
parent 46ac848176
commit 96e314c3a0
2 changed files with 85 additions and 1 deletions
+5 -1
View File
@@ -403,8 +403,12 @@ async def _apply_grounded_selector(
session_id=session_id,
)
except (ValueError, FileNotFoundError) as e:
# 异常路径无 outcome/observation 可落,但仍须 mark_item_rejected
# 与 hard-fail 路径落库风格一致(该 attempt 的 item 是死记录,重出新建 item_id)
reason = f"selector_error: {e}"
logger.warning("slot {} selector 异常 (attempt {}): {}", slot_id, attempt, e)
return None, f"selector_error: {e}"
store.mark_item_rejected(item_id, reason)
return None, reason
# observation 始终落库(含 hard-fail),供 EOB 退化观测与调参
store.update_selector_scores(item_id, json.dumps(outcome.observation, ensure_ascii=False))