任务:跨版本线那一对的条目核对(6b 回归范围与维护巡检的后半句)
6b 对这项能力的验收有两句:Hub 算出的两个构建之差,等于独立脚本在原始命令树上算出的命令差;范围里的用例,正好是索引里所挂命令在差里的那些。前一句跨版本线那一对已经核过(30 条路径,口径一致)。后一句在同一版本线那一对上只核了场景里列出的 18 个条目;跨版本线那一对(回归范围 2,096 个用例、维护巡检 1,147 个)还没核。
- 分支和工作树:
hub-scope-cases,目录circle-hub-scope-cases(依赖已装好) - 可以改的路径:
scripts/real/accept/scope-cases.ts、scripts/real/hub-call.ts和它们的测试。别的路径不动。 - 规则:同前(不推送、不建 PR、不发布、不部署,不碰 7420、钥匙串、环境配置文件和任何真实系统;测试只用合成数据,照真实结构做,不带真实内容;
git commit -s)。脚本自己解析导出的 JSON,不导入包或核心的函数,也不读 Hub 的结论文字。 - 验证:
npx tsc --noEmit;node --test --test-concurrency=2 "scripts/real/**/*.test.ts"。
要做的
hub-call.ts现在只打印给模型看的文字。加一个选项--structured <文件>:每次调用的结构化结果(structuredContent)按调用顺序追加写进这个文件,一次调用一行 JSON;出错的调用照样写一行,并标明出错。屏幕上的输出不变。合成测试用一个本地的假 MCP 服务器。- 输入都由集成者导出:
- 独立命令差:
scripts/real/gold/command-diff.ts的输出,有added、removed、modified三张路径表; - 两个根在变更路径上的节点:集成者用
get_nodes取回的应答(root是该构建的根,paths是变更路径,depth为 0,按cursor翻页),存成 JSON Lines,每行一份应答,形状见contracts/src/tools.ts的GetNodesOutput;后一个构建一份文件,前一个构建一份文件; - 两次运行的导出:
circle-hub run show <运行> --json,条目在run.items,条目编号写作文档:节点。
- 独立命令差:
- 计算:
- 期望的回归范围:后一个根里,新增和修改路径的节点上、种类为
case的条目,按数据里的document和node去重; - 期望的维护巡检:前一个根里,删除和修改路径节点上的同类条目,同样去重。
- 和两次运行的条目逐个比较,报告相等的、只在运行里的、只在期望里的各有多少;不等的逐条列出,最多 50 条,另写总数。
- 判“输入不全”而不判相等的情况:某个节点的应答带着下一页的游标,文件里却没有下一页;或者条目没有
data。
- 期望的回归范围:后一个根里,新增和修改路径的节点上、种类为
- 合成测试:
- 两个根、三类路径的小例子:同一用例挂在两条变更路径下只算一个;挂在没变的路径下的不进期望;删除路径上的只进巡检;
- 分页拼接;
- 输入不全的判定;
- 比较的正反例。
完成后在终端里回报:提交号、测试数量、没做完或拿不准的地方。