Skip to content

V4 阶段性交付:合并现有成果并保留未达标指标 - #7

Merged
a3384379 merged 51 commits into
masterfrom
codex/v4-phase4-cold-handoff-currentword
Sep 5, 2026
Merged

a3384379 merged 51 commits into
masterfrom
codex/v4-phase4-cold-handoff-currentword

Conversation

@a3384379

@a3384379 a3384379 commented Sep 5, 2026

Copy link
Copy Markdown
Owner

合并决定

维护者明确授权提前将现有 V4 成果合并 master,不等待原性能标准全部达标。此 PR 是阶段性交付,不代表第四阶段完成,不创建正式发布标签。

变更范围

保留现有分支全部提交历史,包括 iOS/Sony 产品 UI、Trace/SLO、精确歌词缓存校验、切歌及 CurrentWord 优化和已回退实验记录。使用普通 merge commit,不 squash、不 rebase、不 force push。
新增 docs/V4_ACCEPTANCE_STATUS.md,README 双语入口,并补上 master push CI。

未达标与延期

  • command→Track:30 次 NEXT/PREVIOUS p95 546.4/391.8ms,目标 350ms;最新 NEXT 5 次 p95 3153.6ms。
  • current lyric:PREVIOUS p95 566.6ms,目标 500ms。
  • word eligible 与首字:有效样本不足,不能以稳态 114ms 代替切歌验收。
  • 冷 Preview/HQ:NEXT 30 次 p95 1338.5/3600.5ms,超过 800/2500ms。
  • 两小时 Soak:Sony 系统蓝牙栈故障一次、L2CAP failure 四次,仍为 FAIL。
  • 自然播放完整 Trace/时钟验证未完成;双控制器真机延期;高置信预测来源为零,预取未实现。
  • Sony lint 历史 20 errors/33 warnings,无新增但未清零。

验证

应用代码 8c55cd4 的 CI 全绿:https://github.com/a3384379/MusicBleController/actions/runs/33938041361
iOS quick Required 6/6、Sony quick Required 8/8;Sony unit/assemble PASS;报告脚本 29 tests PASS。完整限制及缺样见验收文档。新提交只改文档及 CI 触发,PR 和合并后 master CI 分别复核。

工作区另有 4 个未提交部署文件,本 PR 不包含这些本地改动。其他开放 PR 不在本次操作范围。

sqz added 30 commits July 25, 2026 23:20
Add V3 capability negotiation, structured media status, reconnect improvements, updated Sony and iOS experiences, expanded tests, localization, architecture docs, and FlowTest artifacts.
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 5, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-05T02:33:09.508835Z 8062b63 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8062b63c22

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment on lines +108 to +110
val sampled = monoMs ?: clock()
val stableMonoMs = maxOf(sampled, lastMonoMs)
lastMonoMs = stableMonoMs

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Preserve sampled timestamps in trace events

When a timestamp captured earlier is recorded after another thread has appended a newer event—for example, BleNotifyQueue captures job.enqueuedAtMs before posting to its queue—this clamp replaces the real timestamp with lastMonoMs. That can reduce measured queue and phase latency to zero and prevents the report from detecting genuine out-of-order events, corrupting the V4 SLO results; the iOS buffer mirrors this behavior in BLEObservableStateModels.swift:1018. Keep the supplied timestamp unchanged and use sequence solely for append order.

Useful? React with 👍 / 👎.

Comment on lines +343 to +347
commands.playPause()
}

override fun onPause() {
commands.playPause()

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Make MediaSession play and pause idempotent

When a headset, system UI, or other media controller sends an explicit onPlay while playback is already active, this forwards PLAY_PAUSE, whose Sony handler toggles the current state, so the request pauses instead; repeated onPause similarly resumes an already paused track. Gate the toggle on the repository's current playback state or add explicit play and pause protocol commands.

Useful? React with 👍 / 👎.

Comment on lines +698 to +699
return (state.positionMs + nowElapsedMs - state.receivedAtElapsedMs)
.coerceIn(0L, state.durationMs.coerceAtLeast(0L))

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Keep advancing position when duration is unknown

For tracks whose media session omits duration, the Sony side intentionally sends duration = 0 while still providing a valid playback position. In that case the upper bound here becomes zero, so every playing position is clamped to 0; the controller's progress display and local lyric timeline remain at the beginning for the entire track. Only apply the upper bound when durationMs > 0, as the Sony runtime clock policy already does.

Useful? React with 👍 / 👎.

@a3384379
a3384379 merged commit 02633d1 into master Sep 5, 2026
4 checks passed
@a3384379

a3384379 commented Sep 5, 2026

Copy link
Copy Markdown
Owner Author

合并后验证与额外未闭环项(2026-09-05)

已普通合并到 master:02633d18cffa4b7a80e636f9a6f81feacba966bd。父提交为旧 master bc7d4bb 与源分支 8062b63,全部历史保留;主干文件树与已测试源分支完全一致。

新发现的 CI 稳定性待办:未解决

源分支与 master 的 iOS 首轮都在 testLastNowPlayingSnapshotStoreSaveLoadAndClear 失败(54 项中 1 项失败),现有工作流重启模拟器并重试一次后均为 54/54 PASS。源分支首轮断言在 PerformanceStabilityTests.swift:782,load 得到 nil 而预期为已保存快照。尚未定位根因,不能将其直接归咎于模拟器或宣称修复;最终绿色不代表首轮稳定通过。后续应独立复现并修复快照存储/测试同步问题,不以增加重试掩盖。

切歌、当前歌词、首字覆盖、冷 Preview/HQ、Sony Bluetooth 两小时稳定性、lint 历史问题及延期能力继续保持原状态,详见 https://github.com/a3384379/MusicBleController/blob/master/docs/V4_ACCEPTANCE_STATUS.md 。合并决定不等于 V4 全量验收完成。

未切换或重新安装设备应用;本地 4 个未提交 tools/deploy 文件保持原状,未包含在此合并中。

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant