Skip to content

T05 播放列表错误路径的自动跳轨口径 #90

Closed

Description

@wt159

Parent

#85 — [Spec] 播放器状态与公开 API 契约实现计划。

What to build

裁定并落地规格 §6.3 的登记项:播放列表错误路径现在只看 shouldAutoSkipOnError(),解码路径还看 info.action == ErrorAction::SkipTrack;规格已裁定自动跳轨口径以 ErrorAction::SkipTrack 为准。推荐统一到该口径,但硬边界是不使坏输入 55 例 / 396 断言与自动跳轨既有用例变红;若两者冲突,保留现状、补注释并在票里写明理由,不悄悄改判据。

  • 用错误码 × 回调计数的既有写法补一条可判定用例,锁住最终口径。
  • 不重构播放列表逻辑(doc/bad-input-spec.md §12 界外)、不改 shouldAutoSkipOnError() 的 count<=1 / failures<count 门槛(两处共用)。

Acceptance criteria

  • 两条路径的自动跳轨判据在票里明确记录为一致,或明确记录保留现状的完整理由
  • 有一条可红可绿的用例锁住该口径
  • 坏输入 55 例、test_playlist_advance.cpp 与错误相关用例全绿

Blocked by

#87(GitHub 原生 blocked_by 已连接)。.

必须遵守(来自 spec、ADR 0002/0003/0004 与 doc/bad-input-spec.md):

  • 七个控制入口保持 void;不新增错误码、不改 onError 签名、不新增状态机、不扩状态集合(对外仍 Playing/Paused/Stopped 三态)。
  • 判据不新造数值:沿用 max(1%,150ms)、r × good、5pp、零容差差分、getter 与回调 ≤50ms、状态序列无相邻重复、每曲一次 duration。
  • 坏输入 55 例 / 396 断言与覆盖度矩阵 15 行一字不动;14 个 sdk_* ctest 目标、TIMEOUT、-j4、快集 / 全量集划分全部不动。
  • 新增用例若写文件必须带 pid(-j4 撞名假红的教训);线程契约用 promise/future 或轮询验证,不裸 sleep。
  • 事实基线见 #76 的 research/public-api-contract-facts 分支;术语见 GLOSSARY.md。

Activity

  1. wt159 commented on Nov 8, 2026

    @wt159
    OwnerAuthor

    Resolution(2026-11-08,图外实现 effort #85 / PR #93)

    规格 §6.3 登记项按推荐裁定:补 ErrorAction::SkipTrack 检查,与 handleDecodeError 统一。AudioDeviceOpenFailed / AudioDeviceStartFailed 是 StopPlayback,不再靠自动跳轨绕过;DecodeInitFailed 等仍是 SkipTrack,坏输入 55 例与自动跳轨既有行为不变。

    不改 shouldAutoSkipOnError() 的 count<=1 / failures<count 门槛(两处共用)、不重构播放列表逻辑。test_error.cpp 新增 action 表判据,把口径依赖的 12 个输入值钉成可红可绿;并明确 PlaylistEmpty / ResampleInitFailed / ResampleFailed 是「有码不承诺上报」(#76 实测零上报点),后两者 action 为 SkipTrack,将来新增上报点须先显式重审。

    已知缺口:设备错误不跳轨缺端到端判据(无可稳定注入的设备错误接缝),由生产链改动 + 代码审查 + 全量回归锁定。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    ready-for-agent信息完备,agent 可直接开工

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions