任务:检查读得到绑定来源的任何片段
引擎现在给检查的来源文字只有两种:
- 边界解析过的引用,也就是主张顶层
quotes和 grounds 里的引用,以完整引用串为键。 - 检查用
reads声明要读的整份来源,以裸的src:<sha256>为键。
quote@1 拿完整引用串去查 sources.text(ref)。如果引用只出现在槽位数据里(例如缺陷转用例草稿的期望结果),就查不到,结果记成“引用 X 没有绑定到本次运行,无法核对引文”的未知,也不给修复轮。10-23 的一次真实运行就是这样:模型没把引文照抄进顶层 quotes,期望来源一项整项未知(进度记录)。那句说明也不对,来源其实是绑定了的。
目标:检查时按引用读出绑定在本次运行上的任何来源的片段,用边界同一个解析器。
- 分支和工作树:
hub-check-fragments,目录circle-hub-check-fragments(依赖已装好) - 可以改的路径:
hub/runs/engine/**(检查拿来源文字的那一处)、hub/rules/**(quote@1 的说明和结果),以及对应的测试和 README。别的路径不动;合约或词表缺什么,先回报。 - 规则:同前(不推送、不建 PR、不发布、不部署;不碰 7420、钥匙串、环境配置文件和任何真实系统;测试只用合成数据;
git commit -s)。 - 验证:
npx tsc --noEmit;node --test --test-concurrency=2对hub/runs/**、hub/rules/**、packs/**。
要做的
- 检查拿到的
sources.text(ref)先查边界已经解析过的。查不到、而引用的源文件绑定在本次运行上(运行的来源里有这个摘要,或是锁定的根的组成里的源文件),就用边界同一个解析器(hub/refs:解析器@版本、选择器、字符区间)解析出片段。同一次评估里同一个引用只解析一次,大小上限和现在一样。 - 改正结论和说明:
- 引用的源文件不是本次运行的输入:驳回,写明“引用的源文件不是这次运行的输入”,模型可以改。
- 源文件绑定了但选择器解析不出片段:驳回,写明“片段不存在”。
- 码用词表里已有的(例如 REFERENCE_UNRESOLVED),没有合适的先回报。
- 只有真读不到时才记未知(源文件取不回、超过大小上限、含凭据只保留),说明照实写原因。
- 读档位:解析出的片段遵守源文件此刻的读档位,和边界一致。只保留的来源不给文字,记未知,写“含凭据,原文不可读”。
- 测试:
- 引用只出现在槽位数据里也能核对:逐字的通过,不逐字的驳回。
- 源文件不是本次运行的输入,驳回。
- 选择器解析不出片段,驳回。
- 只保留的来源记未知。
- 同一个引用只解析一次。
- 每条规则都要有正例和反例。
- README 写明检查能读到哪些来源,以及包为什么不再需要把引文照抄进主张顶层
quotes。照抄进去仍然有用:边界会更早整份拒收错的引文。
完成后在终端里回报:提交号、测试数量、没做完或拿不准的地方。