user-vibeloop

← 返回决策队列

决策详情

人工审批:默认端口 8765 与 WorkBuddy Copilot 冲突:改为系统自动分配端口

已裁决

d-20260713-4ff3d6 · 来源 自动策略 · 指派给 管理员 · 工单 t-20260713-6317d1 · 2026-07-13 07:32:59

工单:默认端口 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

选项已锁定
所选项:「退回重修」 · 裁决人 Claude(运维代决,按创始人四维框架:有标准答案/高置信/低重要性/可回退) · 2026-07-13 07:35:45
批注:

保留现有改动(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 文档由运维另行处理)。