feat(compare-alert): failed 混合单某平台真技术失败被业务 headline 盖住时补判 T1 #221

Merged
guke merged 2 commits from feat-compare-alert-mixed-failure-criteria into main 2026-08-06 16:36:25 +08:00
Member
No description provided.
guke added 2 commits 2026-08-06 15:55:43 +08:00
一条比价里若某平台是干净业务结局(京东 items_not_found),fail_reason 会被派生成它当
headline,盖住另一平台的真技术崩溃(淘宝 status=failed / 比价过程出错),报警只看这单一
fail_reason → 静默漏报。新增 _target_technical_failure_reason 扫 raw_payload.platform_results:
任一目标平台 status=failed 且 reason 非业务话术(biz_exclude 过滤打烊/未找到等误标)→ 补判 T1。
纯业务失败仍不误报。线上 trace 20260806_144544。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
卡片摘要追加一行判据,让收报警的人一眼知道为什么报:深度放弃=耗时>{配置}s 或 步数>{配置}
(阈值取自 COMPARE_ALERT_CANCELLED_MS/STEP_THRESHOLD、随配置变);系统技术失败=无业务原因的
系统错 或 任一平台 status=failed;T2/T6 同理,只列当期出现的类型。追加进摘要 markdown、不新增
卡片元素(不打断 table 位置)。format_alert_card 加两个阈值参数(默认=config 默认,worker 传实值)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Author
Member

🤖 review-pr 深审结论

🟢 低风险 · 置信度 0.9 — 逻辑克制、契约核对通过、测试全绿,可直接合。

净改动failed 分支在返回「纯业务失败」前补判 T1——扫 raw_payload.platform_results,任一非源平台 status=failed 且 reason 非业务话术 → 判「技术失败」(原本这类被干净业务 headline 盖住、漏报);卡片摘要加「判据」说明行(T5 带当前配置阈值)。

构建/测试状态(已实跑)

  • venv pytest tests/test_compare_alert_rules.py tests/test_compare_alert_format.py49 passed(含本 PR 新增 4 个:masked-failure→T1、业务话术 no-false-positive、判据 legend、阈值随配置变化)。
  • 铁律1 契约核对:worker 新引用的 settings.COMPARE_ALERT_CANCELLED_MS_THRESHOLD/STEP_THRESHOLDapp/core/config.py:140-141 存在(默认 90000/30)→ 无 AttributeError 风险;classify_record 确有 biz_exclude_keywords 形参;raw_payload.platform_results[*].status 是他处已用的真实结构(admin comparison.py:103)。合并 origin/main 干净。

问题

  • 无。

正面

  • 不下调既有告警:新 T1 排在 T6/T2 判定之后、return None 之前,原 T6/T2 仍归 T6/T2;只把「原本漏报的 masked 技术失败」补成 T1,无回归。
  • 防误报到位biz_exclude 过滤 pricebot 把打烊/不配送误标成 failed 的业务话术;源平台 status='source' + is_source 双保险不误判。
  • 判据阈值随配置动态展示(测试验证非写死 90/30)。
  • 测试正例 + 反例(no-false-positive)都覆盖。

建议

  • 无。

只读深审 · worktree 合并 origin/main(干净)+ 实跑 venv pytest(49 passed)

## 🤖 review-pr 深审结论 🟢 **低风险** · 置信度 0.9 — 逻辑克制、契约核对通过、测试全绿,可直接合。 **净改动**:`failed` 分支在返回「纯业务失败」前补判 **T1**——扫 `raw_payload.platform_results`,任一非源平台 `status=failed` 且 reason 非业务话术 → 判「技术失败」(原本这类被干净业务 headline 盖住、漏报);卡片摘要加「判据」说明行(T5 带当前配置阈值)。 ### 构建/测试状态(已实跑) - venv `pytest tests/test_compare_alert_rules.py tests/test_compare_alert_format.py`:**49 passed**(含本 PR 新增 4 个:masked-failure→T1、业务话术 no-false-positive、判据 legend、阈值随配置变化)。 - **铁律1 契约核对**:worker 新引用的 `settings.COMPARE_ALERT_CANCELLED_MS_THRESHOLD/STEP_THRESHOLD` 在 `app/core/config.py:140-141` 存在(默认 90000/30)→ 无 AttributeError 风险;`classify_record` 确有 `biz_exclude_keywords` 形参;`raw_payload.platform_results[*].status` 是他处已用的真实结构(admin `comparison.py:103`)。合并 `origin/main` 干净。 ### 问题 - 无。 ### 正面 - **不下调既有告警**:新 T1 排在 T6/T2 判定之后、`return None` 之前,原 T6/T2 仍归 T6/T2;只把「原本漏报的 masked 技术失败」补成 T1,无回归。 - **防误报到位**:`biz_exclude` 过滤 pricebot 把打烊/不配送误标成 `failed` 的业务话术;源平台 `status='source'` + `is_source` 双保险不误判。 - 判据阈值随配置动态展示(测试验证非写死 90/30)。 - 测试正例 + 反例(no-false-positive)都覆盖。 ### 建议 - 无。 <sub>只读深审 · worktree 合并 origin/main(干净)+ 实跑 venv pytest(49 passed)</sub>
guke merged commit 43376abae6 into main 2026-08-06 16:36:24 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WonderableAI/shaguabijia-app-server#221