Skip to content

v0.1.24 — 行式日志的单行契约(escVal 补转 CR)

Choose a tag to compare

@ScreamingMaggot ScreamingMaggot released this 29 Sep 13:40
· 22 commits to master since this release

一个被上一个 bug 藏起来的 bug

重建事故会话被漂移 #11 写坏的 118 行 [T] 时(按源重放、调用真实 foldOne),覆写后自检发现:逻辑行 218,物理行 642。

toolfold.mjs 的 escVal 转义了 \n,漏了 \r。Windows 工具正文是 \r\n,于是 cmd= / head= / tail= 里留下裸 CR;写进行式日志后 CR 自身被当换行 ⇒ 一行撑成多行 ⇒ 面板 parseTranscript 与任何按行解析的下游读到垃圾续行。

原事故日志里没暴露,纯属侥幸:漂移 #11 让 action='?' 走了 fallbackRule,根本没生成携带正文的字段。两个 bug 互相遮蔽,修好前者才让后者现形。

改动与验收

  • escVal:special 判定加入 \r,并补 .replace(/\r/g,'\r')。foldOne 的每条 [T]/[V] 保证单行。
  • 新增 tests/toolfold-single-line.test.mjs:pwsh / read / edit / grep / 未知工具五类输入(正文一律含 \r\n)断言单行契约。反证:把 escVal 退回修复前,同一输入 → 旧版输出含裸 CR: true,测试确实抓得住。
  • 重建后的只增日志自检:物理行 218 = 逻辑行 218、无标记续行 0、问号行 0;[T] 118 行(域分布 fs 54 / shell 46 / web 11 / jobs 4 / todo 2 / fs-search 1),66 行带真实目标路径,另新增 11 行 [V] 数值锚点。行尾与原文件一致(宿主本就写 CRLF)。