Skip to content

os-dev.md 的「自扫」正则比门禁本身还窄:#5460 把 DEL 纳入扫描面后,那条指令会给出假绿 #5484

Closed

Description

@os-zhuang

发现于 #5460(PR #5479)的实施。按 Prime Directive #10 单独记录,未在那个 PR 里扩大范围。

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

事实

.claude/agents/os-dev.md「Byte discipline」段末尾(⚠️ 行号已随 #5441/PR #5501 位移:原 :263,现约 :274 —— 按内容 grep,不按行号)要求 dev agent 在改动涉及控制字符时,除了跑门禁还要逐字节自扫,并给出了具体命令:

grep -naP '[ \x00-\x08 \x0b \x0c \x0e-\x1f ]' FILES

(实际文件里没有空格,这里加空格只是为了在 issue 正文里可读。)

这个字符类等于 #5157 当时的扫描面。#5460 把 DEL(U+007F)加进了 scripts/check-nul-bytes.mjs 的扫描面,但这条指令里的字符类没跟着动 —— 于是它现在比门禁本身还窄。

全仓陈述该模式的地方共三处,另两处都是对的:

位置 状态
scripts/check-nul-bytes.mjs #5460 已更新(含 0x7f)
.changeset/control-byte-gate-scans-all-c0.md 历史文档,凝固在 #5157 当时的语义,正确
.claude/agents/os-dev.md(Byte discipline 段) 未更新

为什么这不只是文字陈旧

那句指令的原话是「self-scan beyond the gate ... the gate's blind spots are exactly where these bytes hide」。它的存在理由就是覆盖门禁够不到的地方,而现在它覆盖的是门禁的真子集:

  • agent 写完一处 0x7f,按指令自扫 → 绿;
  • 推上去,CI 的 check:nul-bytes → 红。

即这条指令会在它唯一被设计来防的那个场景里给出假绿,把本可在本地一秒发现的问题推迟一整个 CI 轮次。#5460 的实施过程里事故源复现了五次,每次都是靠这条自扫或工具校验当场抓住的 —— 这条指令是真在被使用的,不是死文档。

这也正是 #4890 的教训在指令文件上的重演:指令文件落在扫描面之外,而它恰好是在讲这件事的那份文件。

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

一行:把那个字符类补上 \x7f。

更值得一并考虑的是为什么会漂:同一个事实写在三处、靠人肉同步。#5461 已经承认这点(「语义变化写在脚本头、报错文案和 CI 步骤三处」),#5460 又手工同步了一轮 CI 注释。可选的根治方向是让门禁自己导出扫描面的可读拼写(脚本已有 escapeFor()/hex()),让指令与 CI 注释引用它而不是各抄一份;但那是独立的一单,成本远大于本条,交分诊判断是否值得。

归类

按 os-dev 归档口径这是 observation-class。裁定(2026-08-05):晋级 pm:queue,方向为一行字符类补 \x7f。

Blocked-by: #5460(已解除:PR #5479 MERGED)
Blocked-by: #5441(已解除:PR #5501 于 2026-08-05 15:0xZ MERGED,os-dev.md 文件面释放)

Activity

  1. added
    domain:devxDomain lane — seat card indexed by label:pm:seat
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    pm:queueReady for the PM dispatch loop
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    and removed
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Aug 5, 2026
  2. os-zhuang commented on Aug 5, 2026

    @os-zhuang
    ContributorAuthor

    解锁 + 晋级(devx 车道 PM,session_01GX3sL71LFq8m2usg6VqTSE,2026-08-05):Blocked-by: #5460 已解除(PR #5479 MERGED,DEL 已入扫描面 —— 本单描述的「指令窄于门禁」自此为真),按 08-05 已录裁定摘 finding 换 pm:queue(范围:os-dev.md:263 字符类补 \x7f 一行;「三处手抄单源化」的根治方向留在正文,由分诊轮另判)。

    改锁 Blocked-by: #5441:该单(维护者插队,在飞)文件面含 .claude/agents/os-dev.md,同文件跨轮串行;#5441 落地后本单回队,施工时以合并后的 os-dev.md 行号为准。


    Generated by Claude Code

  3. removed
    pm:blockedBlocked by another issue/PR — body carries Blocked-by: #N
    on Aug 5, 2026
  4. os-zhuang commented on Aug 5, 2026

    @os-zhuang
    ContributorAuthor

    解锁 sweep(devx 车道 PM,session_01GX3sL71LFq8m2usg6VqTSE,2026-08-05):Blocked-by: #5441 已解除(PR #5501 MERGED),摘 pm:blocked,本单完全可派。按维护者暂停指令本波不派发 —— 留给下一波 devx PM 首批(一行修,方向已裁:字符类补 \x7f + 按内容 grep 定位,PR #5501 已把该段推移到约 :274)。


    Generated by Claude Code

  5. self-assigned this
    on Aug 5, 2026
  6. os-zhuang commented on Aug 5, 2026

    @os-zhuang
    ContributorAuthor

    认领:PM 循环第 5 轮(devx 车道,恢复后首轮)
    会话:session_01GX3sL71LFq8m2usg6VqTSE
    分支:claude/issue-5484-osdev-selfscan-del
    Worktree:objectstack-issue-5484
    域:domain:devx
    文件面:.claude/agents/os-dev.md(Byte discipline 段一处字符类,按内容 grep 定位,现约 :274)

    前提已核:origin/main os-dev.md:274 字符类仍无 \x7f。方向已裁(08-05):补 \x7f 一行;「三处手抄单源化」根治方向留在正文,不在本单实施。


    Generated by Claude Code

  7. os-zhuang commented on Aug 5, 2026

    @os-zhuang
    ContributorAuthor

    验收(devx 车道 PM,session_01GX3sL71LFq8m2usg6VqTSE,2026-08-05):ACCEPT → PR #5577,转 ready 并挂 auto-merge。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

domain:devxDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchpm:queueReady for the PM dispatch loop

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions