修复:统一比价记录状态枚举口径 #209
Reference in New Issue
Block a user
Delete Branch "codex/comparison-status-three-state"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
变更说明
验证
🤖 review-pr 深审结论
🟢 可合并 · 置信度 0.88 —— below_minimum 归 success 语义合理、迁移安全可逆、测试通过、迁移链单 head。
改动:below_minimum(未达起送) 记录级 status 归为 success,细分结局保留在
raw_payload/platform_results。正确性核对(合并后)
_normalize_record_status(status) = success if below_minimum else status。语义合理——below_minimum 是「走到结算、得出可信结论」的正常完成态,记录级计成功,细分原因(未满起送)保留供结果卡展示;向后兼容(旧无 record_status 回退二态派生)。upgrade把历史 below_minimum→success(清 fail_reason);downgrade精准可逆(只回滚raw_outcome=below_minimum的 success,不碰原生 success)。down_revision=limit_policy_global_bundle(#207 head),合并态alembic heads单 head ✓ —— 上轮 #207/#208 双 head 在 main 已解决。构建/测试(实跑 .venv 合并后):✅
test_compare_harvest+test_comparison_below_minimum_migration18 passed。提示(info)
风险 🟢。
— 🤖 review-pr 自动深审 @linkeyu
修复:将未达起送归为比价成功to 修复:统一比价记录状态枚举口径🤖 review-pr 深审结论
🟡 需产品/作者确认 · 置信度 0.8 — 状态枚举归一化(写归一 + 读别名 + 可逆数据迁移)实现自洽、Alembic 单 head、相关测试全绿(PR 自身用例 31 项通过,无新增失败)。唯一需确认的是「未满起送计成功并触发完成奖励」这一业务后果。
需确认 / 关注
below_minimum(购物车未达起送门槛)现归success,且会让harvest_done的newly_success=True→ 触发邀请 / 里程碑「完成比价」奖励(app/repositories/comparison.py:684、count_success:861)。PR 描述讲了状态分桶,但没点明它同时翻转了完成奖励口径——建议产品确认「未满起送也发成功奖励 / 计入战绩」符合预期。历史 below_minimum 行经迁移改为 success(downgrade 可逆)。comparison_records_summary(app/admin/repositories/queries.py)用别名集兼容旧细分值,但同类消费方app/admin/repositories/stats.py(总览 comparison_success / success_rate / 时段统计)、ops_marquee.py、ops_stat.py、queries.py:1108/1249、services/comparison_llm_backfill.py:138仍用裸status=="success"/.in_(("success","failed"))。对新写入行(已归一)与迁移后全部正确,只在「部署→执行迁移」窗口对旧细分行少计。迁移随本 PR 落地,暴露面很小;建议要么同样套别名保持跨面一致,要么注明这些依赖迁移后状态。构建 / 测试(已实跑,诚实)
合并最新
main后隔离 worktree 实跑(clone.venv/ pytest 8.4):test_comparison_below_minimum_migration.py→ 1 passed(up / down 双向)test_compare_harvest.py+test_comparison_admin_summary.py→ 30 passedtest_invite_compare_reward3 项在 base main 无本 PR 时同样失败(origin/main 与纯 PR head 上复现一致,既有环境/配置问题);test_compare_record::test_records_ordered_flag为既有用例顺序污染(单跑通过)。ScriptDirectory.get_heads()= 单 head(comparison_below_min_success),无多头。做得好
_derive_from_platforms的record_status or status回退(原 platforms 路径忽略客户端 status),并有 legacy upsert 用例覆盖。raw_payload只回滚被本次归一的行,不误伤普通 success。建议
below_minimum → success的奖励 / 战绩口径后果。stats.py等消费方也套_COMPARISON_*别名,跨统计面一致。🤖 自动深审 · 全程只读 · 合并 base 后隔离 worktree 实跑
🤖 review-pr 深审结论(增量复审 @f1dd0f4a)
🟡 需产品确认 · 0.8(总体结论同上轮 #issuecomment-3300)——本次新提交「后台详情透传逐平台卡片数据」干净且有测试覆盖,未改变上轮判断。
本次增量(
7dee829 → f1dd0f4a,仅 2 文件 +13 行)app/admin/schemas/comparison.py:AdminComparisonDetail新增platforms: list = [],把 pricebot 渲染就绪的逐平台卡片模型透传给后台详情接口。可选字段带默认值、加性变更、向后兼容;ORMComparisonRecord.platforms(app/models/comparison.py:119,nullable=False default=list)确有该属性,Pydanticfrom_attributes正常填充。配套 admin-web#100 前端展示。tests/test_admin_read.py:+12 行覆盖detail.json()["platforms"][0]的status/is_best透传。构建 / 测试(已实跑,诚实)
main(Alembic 仍 单 headcomparison_below_min_success)后隔离 worktree 实跑:test_admin_read + compare_harvest + comparison_admin_summary + migration→ 55 passed。仍需确认(同上轮,未随本提交改变)
below_minimum(未满起送)归success且触发newly_success→ 完成 / 邀请 / 里程碑奖励——请产品确认奖励口径。stats.py/ops_marquee/ops_stat等消费方仍用裸status=="success",迁移后一致、仅「部署→执行迁移」窗口对旧细分行少计(详见上轮 3300)。🤖 自动深审 · 增量复审 · 合并 base 后隔离 worktree 实跑