docs(design): 按两轮硕士生冷读改 0011 与 0012
0011 最要紧的一条是文档和代码对不上:Codex 那轮把坏行判据从「第一条解不开的行」改成了「有没有 被换行终结」,文档还停在旧规则上。改完顺带答掉冷读问的「末尾连着两条坏行算什么」——按新规则 第一条终结过的坏行就已经报错了。 三处确定性矛盾全部成立:标题写「fsync 在三处,其余三处不做」而正文写「那两次」、表格里 fsync=否 只有两行(改成按「一步之内四次写」重排,并把「处」的单位说清);「五个记录类」里没有「动作 结果」(它是逐步结果那条记录的一个字段,不是第六个记录类,表格行名会误导);「每步四次写」与 表格看着像五次(同一根因)。另外契约套件的状态从「24 条全跳过」改成不给会过期的数字,并把 skip 与 xfail 分开说——它们是「还没有实现」与「没有机器兜底」两回事。 还补了:一节名词解释(前缀持久性、耐久屏障、恢复判定、⑥ 都是首次出现即使用);「取消能穿过去」 那段原本自相矛盾(说线程会把写做完,又说没写完的是尾行);文件的字面约定(UTF-8、\n 结尾、 非 ASCII 不转义、目录不存在时创建)——这些恰恰是外部读取方必须知道的,而文档反复强调那份日志 要能离开这个库读懂;为什么保留键叫 record 而不是加下划线前缀;为什么用 to_thread;独占创建 只挡住一种撞车(两个进程同时续跑挡不住,登记为已知缺口);以及运行开始那次 fsync 真正的理由 是目录项而不是「读不出配置」。 最实的一条留到最后:那五维里的题目很可能带中文或空格,过不了运行标识的字符判据,而同一份 文档又规定不做转义。现在写明编码方式归下游自己选(要单射),并说清库为什么不替它选——库一旦 选了,文件名就不再等于运行标识,而它按标识去目录里找文件的用法就断了。migrations/dissect.md 同步登记。 0012:把 parent_card_id 这个笔误改成 parent_call_id(冷读的人不知道哪个对,只能问「card 是 什么」,正好把它顶出来);「每个源报四样」实际枚举了五样;补一节名词解释(scope、源、恒定采样 参数、推理开关全是首次出现即使用);补上本库这一侧的接缝签名与 ModelCall 的五个字段,并说明 中间那三个为什么一个都不往下传;补上非文本块报错、拼接不加分隔符的代价、1.1.1 那个 bug 到底 是什么、空串调用标识是防御而不是常规路径、以及为什么超时与重试次数不算模型身份。
This commit is contained in:
@@ -170,6 +170,13 @@ dissect 有一档实验要在同一时刻用不同的注入内容跑同一批题
|
||||
PolyLoop 的日志按运行标识分文件(`../design/0011-jsonl-run-store.md` 决策一),所以那五维要
|
||||
拼进运行标识;少一维的表现不再是覆盖,而是「日志里有别人的记录」,恢复会判成日志损坏。
|
||||
|
||||
**题目那一维不保证是安全字符,编码方式由 dissect 自己定。** PolyLoop 自带的那份存储要求运行
|
||||
标识只含字母、数字、点、下划线与连字符——它同时是文件名,而库不做转义(转义之后文件名就不再
|
||||
等于标识,按标识去目录里找文件这个用法就断了)。所以 `item_id` 里要是有中文、空格或标点,得
|
||||
由 dissect 选一种**单射**的编码把它变过去(哈希、百分号编码、自己维护一张映射表都行)。
|
||||
**选哪种归 dissect**,因为只有它知道那份标识事后要怎么被人认出来——而它的分析方式是让模型去翻
|
||||
文件,所以「一眼认得出是哪一次」这件事对它有实际价值,哈希成一串十六进制未必合适。
|
||||
|
||||
**这条日志和 `Rollout.to_jsonl` 那份轨迹是两样东西,不要混。** 前者是意图日志,记的是「准备
|
||||
做什么、做完了没有」,为的是崩了能续;后者是产物,记的是逐步轨迹,给反思模型读。前者由库写,
|
||||
后者迁移后由 dissect 自己从 `RunResult.steps` 重组(见下一条)。
|
||||
|
||||
Reference in New Issue
Block a user