任务:缺陷转用例的查重在真实规模上判得出来

缺陷转用例在真实客户端上已经交付:命令头和已有回归文档双向相同,期望结果的引文全部逐字。唯独查重一项 Hub 记为未决。用例索引视图即使只带 document,node,title 三个字段也有 14.7 MB,视图的字节预算只放得下约 45,000 个条目里的 27,102 个,所以“不重复”说不出来。包的 README 写的“裁剪后 2 至 3 MiB”是合成数据上的估计,真实规模上不成立。

查重只需要和草稿用同一组命令的已有用例比。核心的索引视图已经有 only=<取值>(只列这些键的条目),所以不改核心,改包:让绑定的索引收窄到草稿要用的命令,再让检查知道哪些草稿在收窄的范围里判得出来。

  • 分支和工作树:hub-d2c-dup,目录 circle-hub-d2c-dup(依赖已装好)
  • 可以改的路径:packs/workflow/defect-to-case/**、scripts/real/accept/defect-to-case*.ts 及其测试。包升到 1.3.0,重签。别的路径不动;核心缺什么先回报。
  • 规则:同前(不推送、不建 PR、不发布、不部署,不碰 7420、钥匙串、环境配置文件和任何真实系统;测试只用合成数据;git commit -s)。
  • 验证:npx tsc --noEmit;node --test --test-concurrency=2 "packs/**/*.test.ts" "scripts/real/**/*.test.ts";node packs/workflow/defect-to-case/pack-files.ts --check。

要做的

  1. 绑定写法:indexed_cases 改为 knowledge:index:<产品>:<构建>?kind=case&key=commands&only=<命令路径,逗号分隔>&fields=<检查要用的字段>。only 列草稿要用到的命令路径(和索引的键同一写法),由模型在读完缺陷之后、开始运行时写上。fields 必须带上 commands,好让每个条目带着自己完整的命令列表:收窄以后,一个条目只出现在列出的键下,靠键拼不回它的命令集合。查重要比的其他字段(反向标记、标题,以及文档和节点号)也要列上,没列的字段不能拿来比。SKILL.md、workflow.json 的描述和样例照这个写。
  2. 判得出来的范围:草稿的命令集合 S 里至少有一个在 only 里,这条草稿才判得出来。和它重复的已有用例带着 S 里的每一个命令,所以一定出现在那个键下。S 和 only 不相交的草稿记为未知,说明索引没有收窄到它用的命令。不传 only 时照旧:视图完整才判得出来,被截断就记未知。
  3. 去掉 functions/expected.ts 自动绑定的那份不带 fields 的同一索引:它白占一份预算,查重也不用它。
  4. 紧凑索引按条目的 commands 字段算命令集合,不再靠键拼;条目没带 commands 字段时,查重记为未知并说明原因,不能把它当成没有命令。
  5. README 改正:删掉“2 至 3 MiB”的估计,写上真实规模的测量(视图 14.7 MB,预算内只放得下约 45,000 个条目中的 27,102 个),以及收窄的写法和判得出来的范围。
  6. 测试:合成索引,覆盖收窄后找到重复、收窄后没有重复、草稿命令不在 only 里、条目缺 commands 字段、不收窄但视图被截断这几种情况;每条新规则有正例和反例。

完成后在终端里回报:提交号、测试数量、没做完或拿不准的地方。