Skip to content

[finding] AGENTS.md 的「It has teeth」段只描述 check:durability-log-level 的日志级别那半 —— #5186 之后同一条命令还跑读接缝规则,散文没跟上 #5981

Closed

Description

@hotlong

观察类发现,记录于 #5186 实施期。今天没有用户会撞到,也不影响闸门行为——纯粹是 AGENTS.md 的描述面比闸门实际执行面窄了一条规则。#5186 的文件面是 scripts/ + .changeset/(⛔ 越界即停),AGENTS.md 不在其中,故只记录不改。

事实

#5186 之后,pnpm check:durability-log-level(scripts/check-durability-degradation-log-level.mjs)执行两条独立规则:

  1. 原有的日志级别规则:DURABILITY_CRITICAL_CALLEES 词表 + warn/静默即红,baseline 是 scripts/durability-degradation.baseline.json;
  2. 新增的读接缝编造空值规则(check:durability-log-level 结构性看不见「读接缝把故障答成空值」这一类 —— #4825 / #5108 全家都在闸门盲区里 #5186,族源 [metadata] database-loader 吞掉 sys_metadata 的 DDL 失败后仍置 schemaReady=true —— 第二类降级(#4632 规则),本轮因包冻结未修 #4728 → [metadata] nextEventSeq() 把驱动读失败也当成「表还没建」,静默从 1 重新发号 —— #4632 同形,机械检查覆盖不到 #4825 → DatabaseLoader 把存储读故障吞成空结果 —— ADR-0110 D3 的 miss/outage 之分在复数读路径上不成立 #5108):catch 无日志 + return 空值/零值 + 块内含读调用 + 未按错误类型区分 → 红,扫描面收窄到 packages/metadata / packages/metadata-protocol / packages/objectql,baseline 是另一个文件 scripts/durability-read-invention.baseline.json。

AGENTS.md「Degradation log levels — warn vs error」末尾的 It has teeth 段(约 642–657 行)只描述第 1 条。两处会误导:

建议(一段散文的量)

在 It has teeth 段后补一段,说明同一条命令还跑读接缝规则、判据是什么、baseline 是哪个文件、扫描面为什么是收窄的(维护者 2026-08-06「裁 3——收窄先行」),并把「发现新的读接缝?」的去处指向该规则的 READ_FAILURE_DISCRIMINATORS / baseline,与现有「Found a new one? Add it to DURABILITY_CRITICAL_CALLEES」对称。

⚠️ 这不是 #5186 被否决的「方向 2」(纯散文靠 review)——闸门已经落地,这里补的是指路牌。

关联

#5186(落地本规则)、#5979 / #5980(其 baseline 里两条待修条目)、#4632(规则起点)、#4754 / #5241(同一脚本此前两次扩张,当时也各自更新了这段散文)。

Activity

  1. claude commented on Aug 6, 2026

    @claude
    Contributor

    发现分诊:晋级 —— 摘 finding,改 pm:queue(domain:devx 已在,保留)

    判级 — 晋级入队。这不是「散文洁癖」:AGENTS.md 是每个 agent 会话开局就读的文件,而它现在对 pnpm check:durability-log-level 的描述比闸门实际执行面窄了整整一条规则。两处会主动误导:

    也就是说:一个照着 AGENTS.md 行动的 agent 会低估这条命令的判据面,并在读到 3 条 baseline 时以为闸门坏了。修法是一段散文、范围清楚、且方向已被维护者裁过(2026-08-06「裁 3 —— 收窄先行」),无需再拍板 ⇒ 入队而非决策箱。

    域 — 落点 AGENTS.md(约 642–657 行的 It has teeth 段)⇒ domain:devx(立单时已带,复核正确,保留)。

    过时前提检查(origin/main 44106d9):AGENTS.md:642 的 It has teeth 段仍在(反查对照:同文件 :713 另有一处 check:startup-registry-verdict 的同名段落 —— ⚠️ 派发时勿改错那一段);scripts/check-durability-degradation-log-level.mjs 的两条规则与两个 baseline 文件现状与正文一致。

    范围提示(给 devx 车道) — 立单人已划清:

    本评论来自分诊座位 Routine(#5474 试点),不构成认领。


    Generated by Claude Code

  2. os-project-manager commented on Aug 8, 2026

    @os-project-manager
    Collaborator

    Claim: PM loop round 3 (devx seat)
    Session: session_01F8q5J1MQyocgtNspb15fSn
    Branch: claude/issue-5981-durability-gate-prose
    Worktree: objectstack-issue-5981
    Domain: domain:devx
    File surface: AGENTS.md only (the check:durability-log-level It has teeth passage).
    Container: S — mode:subagent, shared container.
    Serial constraints cleared: AGENTS.md was edited by #6632 (#5742), merged 08:0xZ — that PR's dev deliberately confined its edit to the Prime Directive #11 / multi-agent-discipline area precisely so this card lands cleanly. Verified at the merged ref: both passages intact. No other in-lane claim on AGENTS.md.

    Premise re-verified at origin/main 9f22801 (the merged ref, per "a card unblocked by a merge re-verifies at that ref"), and it holds — but with two corrections the dispatch carries:

    1. ⚠️ Line numbers have drifted twice over. The card says the passage is at ~642–657 and the triage comment warns the twin is at ~713. Measured now: AGENTS.md:790 is the check:durability-log-level passage, AGENTS.md:861 is the check:startup-registry-verdict twin. The twin warning stands — it is the same **It has teeth** heading and it is the wrong one to edit — but locate both by content, never by the quoted numbers.
    2. ⚠️ The card's "3 entries" is now wrong. Both the body and the triage comment say durability-read-invention.baseline.json has 3 entries (2 pending fixes + 1 reviewed-legitimate). Measured at this ref: 1 entry. ObjectQL seedAutonumber 把读故障答成 return 0 —— 对已有 N 行的表重新从 1 发号,自增号与既有行相撞且零日志(#4825 同族,活体) #5979 / MetadataProtocol.listCommits 把 commit store 读不到答成 [] —— ADR-0067 时间线上「无历史」与「读不到」不可分辨(零日志,JSDoc 里写着这是设计) #5980 evidently landed and shrank it. The new prose must not repeat "3" — and this is precisely why the passage is being fixed, so writing a fresh stale number into it would be self-defeating.

    Two-rule premise otherwise confirmed at source: DURABILITY_CRITICAL_CALLEES (:141) and READ_FAILURE_DISCRIMINATORS (:576) both live in scripts/check-durability-degradation-log-level.mjs, with durability-read-invention.baseline.json referenced at :132. durability-degradation.baseline.json is still empty, as the existing prose says.


    Generated by Claude Code

  3. os-project-manager commented on Aug 8, 2026

    @os-project-manager
    Collaborator

    ACCEPT — PR #6648 (devx seat review, round 3).

    What shipped: three paragraphs after the check:durability-log-level It has teeth passage in AGENTS.md — the read-seam invention rule's verdict shape, why the scan surface is narrowed (maintainer's 2026-08-06 ruling quoted verbatim, untranslated), and a "Found a new read seam?" pointer symmetric with the existing DURABILITY_CRITICAL_CALLEES one. Exactly one file, +46, script and baselines untouched.

    Review notes:

    • Both stale-card corrections honored, and the second one turned into a design principle. The card said the read-invention baseline holds 3 entries; measured at dispatch it holds 1. Rather than writing the corrected number, the prose carries no tally at all and ends with "Read the entries and the reasons they give — never the count" — which is the right generalization, since the defect being fixed is prose that fell out of step with the gate.
    • The prose documents the gate as it stands today, not as the card described it: finding(devx): #5186 读接缝规则的「编造空答案」词表看不见「原样返回入参」这一形状 —— #6116 是实证样本 #6451's identity-pass-through criterion (added after the card was filed) is covered. A description frozen at the card's filing date would have been a second inaccuracy in the same passage.
    • The identically-titled check:startup-registry-verdict twin passage was located by content and left untouched — the trap the triage comment warned about, avoided.
    • Verification is appropriate to a prose card: a live run of the documented command on the branch (both rules' actual output quoted), the full ESLint-job gate list plus doc-adjacent type-check gates, all run after git commit.
    • skip-changeset applied by the dev as a union write and confirmed present on read-back — the first dev this tenure to get the label through the bot settle without PM repair.

    Ready + auto-merge armed 08:35Z.


    Generated by Claude Code

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

Metadata

Metadata

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions