feat(compare-alert): 报警末帧列补「停留Xs」(dwell-only,不显总帧数) #226
Reference in New Issue
Block a user
Delete Branch "feat-compare-alert-last-frame-dwell"
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?
描述
Summary
区分「一到结算页就崩(停留<1s)」vs「在结算页干转 40s 才放弃」;T5 卡死路径不变。
last_step / read_stuck_points.last 附 dwell;删重构后无人调用的 _platform_stuck。
规避「总帧数配末段时长」误导);failed / cancelled 兜底两处接上。
🤖 review-pr 深审结论
🟢 看着没问题(置信度 0.9)。把「末段扫描」抽成单一
_last_segment,卡死判据(≥threshold)与末帧停留(dwell)复用它;末帧路径新增「停留Xs」展示(dwell-only,不显总帧数)。对既有卡死检测行为保持,纯增量。核对(合并 main 后)
last_step(trace_dir, *, max_tail)新增必填max_tail,唯一调用方compare_alert_worker.py已同步传入 ✓seg is None → continue与旧版「_platform_stuck→None+ 独立末帧_read_head→ps None」两处跳过等价:any_frames=True在continue之前(trace_stuck.py:136)就已置位,故「是否有帧」判定不变,continue只跳过卡点/末帧候选 ✓StuckPoint同时保留stuck_ms(卡死路径)与dwell_ms(末帧路径),无删字段;_fmt_last只作用于res.last/last_step结果(均带dwell_ms),卡死点仍走原stuck_ms口径——各取所需,不串 ✓测试/构建:✅ 已实跑(合并 main 后 worktree,venv Py3.12)
pytest tests/test_trace_stuck.py tests/test_compare_alert_stuck_worker.py→ 35 passed(含作者补的 continue 分支回归 + <1s 边界)alembic heads单头(savings_record_trace_id)issues:无 high/med。
trace_stuck.py:144卡死点用第 4 个位置参把局部变量dwell_ms传进stuck_ms字段(值对、语义也对,因卡死段时长即 stuck_ms);写成关键字stuck_ms=dwell_ms可免读者误以为在设dwell_ms字段。_fmt_last用round(dwell_ms/1000)(banker's rounding,1.5s→2s)——展示用,可接受。正面:单一
_last_segment作两处口径的真相源、等价性有注释兜底;_fmt_last在dwell_ms=None(缺 ts/时钟回退)时优雅退化为只显环节;测试覆盖到边界。建议:可选把
:144改成stuck_ms=dwell_ms关键字,纯可读性,无需阻断合并。