人工审批:默认端口 8765 与 WorkBuddy Copilot 冲突:改为系统自动分配端口
已裁决工单:默认端口 8765 与 WorkBuddy Copilot 冲突:改为系统自动分配端口(t-20260713-6317d1)
修复摘要:将 --port 默认值从 8765 改为 0(系统自动分配),彻底让出 WorkBuddy 的固定端口;bind_server 和实际端口打印/--open 逻辑早已支持 port=0,无需改动;同步新增回归断言确保默认值不被回退到 8765。
改动文件:src/cutpoint_lab/studio/server.py, tests/test_studio_app.py
judge 裁定:verdict=escalate,bugReal=true,fixEffective=false,regressionRisk=low,constraintsRespected=true
judge 理由:
- Bug 真实存在:server.py 原 default=8765 与 WorkBuddy 固定端口冲突,日志可证实。
- 需求 ① 已满足:argparse default 从 8765 改为 0,help 文本同步更新。
- 需求 ② 无法从 diff 验证:工单要求 '启动时打印、以及 --open 自动打开的地址必须使用实际绑定的端口'。diff 未展示 main() 的 URL 打印逻辑和 --open 的 webbrowser.open 调用。若这两处仍拼 args.port(=0),用户会看到 http://127.0.0.1:0 或空白浏览器,修复实际无效。
- 需求 ④ 修复者自认未完成:scripts/studio_web.py 的 docstring/usage 未更新,以 '保护路径' 为由搁置,工单验收标准明确要求文档同步。
- 回归测试第一部分是冗余测试:test_default_port_is_zero_not_8765 中创建了独立的 ArgumentParser 并断言其 default=0,这个断言测的是测试自己写的 parser 而非 server_main 的 parser,即使 server.py 没改也能通过,属于无效断言。第二部分(--help 不含 8765)是有效的,但整体测试未覆盖 --open 实际打开 URL 这一关键路径。
- pipeline 报错(源媒体不存在)系测试设计内预期错误,与本次改动无关,已确认 86/86 全绿。
转人工原因:
- judge 无法判定:Bug 真实存在:server.py 原 default=8765 与 WorkBuddy 固定端口冲突,日志可证实。;需求 ① 已满足:argparse default 从 8765 改为 0,help 文本同步更新。;需求 ② 无法从 diff 验证:工单要求 '启动时打印、以及 --open 自动打开的地址必须使用实际绑定的端口'。diff 未展示 main() 的 URL 打印逻辑和 --open 的 webbrowser.open 调用。若这两处仍拼 args.port(=0),用户会看到 http://127.0.0.1:0 或空白浏览器,修复实际无效。;需求 ④ 修复者自认未完成:scripts/studio_web.py 的 docstring/usage 未更新,以 '保护路径' 为由搁置,工单验收标准明确要求文档同步。;回归测试第一部分是冗余测试:test_default_port_is_zero_not_8765 中创建了独立的 ArgumentParser 并断言其 default=0,这个断言测的是测试自己写的 parser 而非 server_main 的 parser,即使 server.py 没改也能通过,属于无效断言。第二部分(--help 不含 8765)是有效的,但整体测试未覆盖 --open 实际打开 URL 这一关键路径。;pipeline 报错(源媒体不存在)系测试设计内预期错误,与本次改动无关,已确认 86/86 全绿。
AI 对这个决策的四维评估(供判断参考):
- 有无标准答案:无(品味/偏好/方向类)
- AI 置信度:中
- 重要性:高
- 可回退性:可撤销
- 为何升级:需要人工读取 server.py main() 函数中 URL 构造与 --open 的实现,确认是否用 server.server_address[1] 取真实绑定端口;若已正确实现则可降级为 approve,否则需补充改动。
在工单详情页可查看完整 diff:/tickets/t-20260713-6317d1
保留现有改动(default=0 正确;--open/打印已实证使用真实绑定端口 server.py:611-615,无需改动)。只需修一处:test_studio_app.py 里 test_default_port_is_zero_not_8765 的第一部分断言无效——它新建了一个独立 ArgumentParser 再断言 default=0,测的是测试自己而非 server 的 parser,server.py 回退到 8765 它也能通过。请改为对 server 真实入口的断言(例如导入 server 模块解析空参数列表后断言 args.port==0,或等价方式);--help 不含 8765 的第二部分断言保留。不要碰 scripts/**(usage 文档由运维另行处理)。