fix(serve): restore the transport-failure bridge test's transcript fetch shape - #8986
fix(serve): restore the transport-failure bridge test's transcript fetch shape#8986yiliang114 wants to merge 1 commit into
Conversation
The new bridge test from #8947 attaches with historyPageSize but without historyReplay: 'response'; #8933 (merged hours earlier) made historyPageSize a no-op outside response replay, so the transcript fetch the test waits for never happens and the wait spins on an empty call list. The two PRs crossed without conflict markers. Pass the response shape so the test exercises the transcript path again.
qwen-code-ci-bot
left a comment
There was a problem hiding this comment.
@yiliang114 This one is already fixed on main — flagging it here rather than reviewing a duplicate.
#8984 made the identical change (adding historyReplay: 'response' to this exact loadSession call in the transport-failure test) and merged at 06:39 UTC — about eight minutes before this PR's commit was authored (06:47 UTC), so the two efforts crossed without seeing each other. Current main is #8984's merge commit ec3b2cbb6, and the test is exercising the transcript path again there (CI on that commit: 18 green checks, no failures).
Since both PRs insert different lines at the same spot from the same base, this branch can no longer merge cleanly, and after a rebase there would be nothing left of the diff. Best to close this in favor of #8984. The follow-up idea from the description — having the daemon reject rather than silently ignore a historyPageSize without response replay — is worth its own issue so this class of silent no-op can't recur.
The request-changes here is only to gate the PR against approval/merge; no code change is needed — please close at your convenience.
中文说明
这个问题已经在 main 上修复了——先说明情况,避免对重复 PR 走完整审查。
#8984 做了完全相同的改动(在 transport-failure 测试的同一个 loadSession 调用里补上 historyReplay: 'response'),已于 UTC 06:39 合入;本 PR 的 commit 作于 06:47,晚了约 8 分钟,两边交错没看到对方。当前 main 就是 #8984 的合并提交 ec3b2cbb6,该用例在 main 上已重新走到 transcript 路径(该提交 CI:18 项通过,无失败)。
两个 PR 从同一 base 在同一位置插入了不同的行,本分支已无法干净合并;rebase 之后 diff 也基本为空。建议直接关闭,以 #8984 为准。描述里提到的后续想法——让 daemon 拒绝(而非静默忽略)不带 response replay 的 historyPageSize——值得单开一个 issue,避免这类静默空操作再次发生。
这里的 request changes 只是用来拦截合并——不需要改代码,方便时关闭即可。
— Qwen Code · qwen3.8-max
|
Superseded by #8984 (merged), which applies the same one-line fix (add historyReplay: 'response' to the transport-failure test's loadSession call). Closing as duplicate — root-cause analysis matches: #8933's request-shape gate silently no-ops historyPageSize outside response replay, and #8947's test was written against the pre-gate shape. |
What this PR does
The bridge test added by #8947 ("transport failure marks the channel dying before process exit") attaches with
historyPageSize: 10but withouthistoryReplay: 'response'. #8933, merged a few hours earlier, madehistoryPageSizea no-op outside response replay, so the transcript fetch the test waits for never happens and the wait spins on an empty ext-method call list. This one-line fix passes the response-replay shape so the test exercises the transcript path again, as it did when #8947's CI ran.Why it's needed
The two PRs crossed without conflict markers: #8947's CI ran against a base without #8933's request-shape gate and passed; after both merged, main fails this test deterministically (reproduced 3/3 locally), blocking every PR cut from the new main (e.g. runs 31566076525, 31566817858, 31566722008, 31566021116 all fail on the identical signature).
Reviewer Test Plan
How to verify
Run
cd packages/acp-bridge && npx vitest run src/bridge.test.ts -t "transport failure marks the channel dying before process exit"— before this change it fails deterministically withexpected [] to deep equally contain ObjectContaining{ method: 'qwen/status/session/transcript' }; after, it passes in ~200ms. The full bridge suite passes (568/568).Evidence (Before & After)
N/A (test-only change, no user-visible behavior).
Tested on
Environment (optional)
N/A — unit tests only.
Risk & Scope
historyPageSizecall sites already passhistoryReplay: 'response'.historyPageSizewithout response replay — a possible follow-up so this class of silent no-op cannot recur.Linked Issues
Unblocks main CI after the #8947 × #8933 semantic merge conflict.
中文说明
这个 PR 做了什么
#8947 新增的 bridge 用例("transport failure marks the channel dying before process exit")attach 时带了
historyPageSize: 10但没带historyReplay: 'response'。早几个小时合入的 #8933 已把historyPageSize在 response replay 之外变成空操作,于是测试等待的 transcript 拉取根本不会发生,等待在空的 ext-method 调用列表上空转。本 PR 用一行修复补上 response replay 形态,让测试重新走到 transcript 路径——与 #8947 CI 运行时的行为一致。为什么需要
两个 PR 交错合入且没有文本冲突标记:#8947 的 CI 跑在不含 #8933 请求形态门控的基线上所以通过了;两者都合入后,main 上该用例确定性失败(本地 3/3 复现),阻塞了所有基于新 main 的 PR(如 run 31566076525、31566817858、31566722008、31566021116 全部挂在同一签名)。
评审验证计划
如何验证
运行
cd packages/acp-bridge && npx vitest run src/bridge.test.ts -t "transport failure marks the channel dying before process exit"——改动前确定性失败于expected [] to deep equally contain ObjectContaining{ method: 'qwen/status/session/transcript' };改动后约 200ms 通过。完整 bridge 套件通过(568/568)。前后对比证据
N/A(纯测试变更,无用户可见行为)。
测试环境
macOS 已本地验证;Windows/Linux 由 CI 覆盖。
环境说明
N/A——仅单元测试。
风险与范围
historyPageSize调用点均已携带historyReplay: 'response'。historyPageSize——可作为后续跟进,避免这类静默空操作再次发生。关联 Issue
解除 #8947 与 #8933 语义合并冲突导致的 main CI 阻塞。