Skip to content

os-dev.md「Byte discipline」段陈述的危害只对 NUL 成立,却写成对整个字节类成立 —— agent 自扫命中后可据此把 CI 红判成误报 #5579

Description

@os-zhuang

发现于 #5484(PR #5577)的实施:那一单只裁定补字符类,本条按 Prime Directive #10 单独记录,未在该 PR 里扩大范围。

正文用 U+00XX 这种不含反斜杠转义的写法指代字节 —— 理由见 #5460

事实

.claude/agents/os-dev.md「Byte discipline」段(按内容 grep 定位,现约 :269-271)把危害陈述成:

One raw control byte makes grep treat the whole file as binary: zero matches, no signal, and the rule you just wrote becomes invisible to every agent that greps for it.

这是该段唯一给出的理由,而它只对 NUL 成立。门禁脚本头(scripts/check-nul-bytes.mjs,#5157 段)早就实测并写明了这点:「GNU grep 3.11 and ripgrep 14.1 report 'binary file matches' for a file carrying 0x00, and keep matching normally for one carrying 0x01 or 0x03」。本单在容器内独立复现,结论一致(grep 3.11 + ripgrep,样本均为「一枚控制字节 + 一行可搜索文本」,用 printf 生成,未粘贴裸字节):

样本字节 grep -n searchable(不加 -a) rg -n searchable
U+0000 binary file matches(不打印行内容) binary file matches (found "\0" byte around offset 6)
U+0001 2:searchable line 2:searchable line
U+007F 2:searchable line 2:searchable line

即:门禁扫描面里除 NUL 之外的每个字节(含 #5460 刚纳入、#5484 刚补进自扫字符类的 U+007F),都不会让文件被当成二进制。

为什么这不只是文字不精确

这条指令的读者是 agent,而 agent 会做一致性推理:

  1. agent 写出一枚 U+007F 或 U+0001,按 os-dev.md 的「自扫」正则比门禁本身还窄:#5460 把 DEL 纳入扫描面后,那条指令会给出假绿 #5484 修好的字符类自扫 → 命中;
  2. 它去核对指令给出的危害 —— grep 仍能正常搜到该文件、能打印行内容,危害描述不成立;
  3. 于是「本文件被 grep 当成二进制」这个唯一被陈述的判据落空,把门禁的红判成误报,或按「这条不适用于我这个字节」自行放行。

门禁脚本头恰好把真正适用于全字节类的三条危害写清楚了(渲染为空、两种拼写都搜不到、事故源不挑字节值),os-dev.md 一条都没搬 —— 它搬的是唯一那条不适用的。这与 #5484 是同一族问题的另一半:同一事实手抄多处,门禁那侧修了,指令这侧没跟

顺带两处同段陈旧(建议一并核,不单独开单):

处置建议(仅供分诊参考,未实施)

把该段的危害句改成与门禁脚本头一致的口径:NUL 那条危害点名 NUL,其余字节引用「渲染为空 / 两种拼写都不可搜 / 事故源不挑字节」三条(可压成一句,该文件是 prompt,每个词都进每次派单的 token 预算)。顺带修正上面两处陈旧计数与时态。

⚠️#5484 正文里留下的「单源化」方向属同一根因、不同表面:那条是让字符类别再手抄,这条是让危害论证别再手抄。若分诊决定做单源化,本条应作为它的验收面之一,而不是各修一次散文。

归类

observation-class:今天没有用户会撞到;它降低的是 agent 遵循这条指令的可靠性,且只有在 agent 恰好写出一枚非 NUL 控制字节时才发作。故只打 finding,不打 pm:queue,不指派 —— 严重度交分诊轮判。


Generated by Claude Code

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions