Closed
Labels
documentationImprovements or additions to documentationImprovements or additions to documentationdomain:devxDomain lane — seat card indexed by label:pm:seatDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchDispatched to a dev agent by /pm-dispatchpm:queueReady for the PM dispatch loopReady for the PM dispatch loop
Description
观察类发现,记录于 #5186 实施期。今天没有用户会撞到,也不影响闸门行为——纯粹是 AGENTS.md 的描述面比闸门实际执行面窄了一条规则。#5186 的文件面是 scripts/ + .changeset/(⛔ 越界即停),AGENTS.md 不在其中,故只记录不改。
事实
#5186 之后,pnpm check:durability-log-level(scripts/check-durability-degradation-log-level.mjs)执行两条独立规则:
- 原有的日志级别规则:
DURABILITY_CRITICAL_CALLEES词表 +warn/静默即红,baseline 是scripts/durability-degradation.baseline.json; - 新增的读接缝编造空值规则(
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 条。两处会误导:
- 「walks the AST for
catchblocks guarding a declared vocabulary of durability-critical operations and fails when one logs belowerrorwithout rethrowing」——现在这只是一半; - 「Accepted exceptions live in
scripts/durability-degradation.baseline.json… and that file is currently empty, which is its intended steady state」——这句对那个文件仍然成立,但读者很容易把它当成「这条命令的 baseline 是空的」,而第二条规则的 baseline 有 3 条(2 条真实待修,已分别立卡 ObjectQLseedAutonumber把读故障答成return 0—— 对已有 N 行的表重新从 1 发号,自增号与既有行相撞且零日志(#4825 同族,活体) #5979 /MetadataProtocol.listCommits把 commit store 读不到答成[]—— ADR-0067 时间线上「无历史」与「读不到」不可分辨(零日志,JSDoc 里写着这是设计) #5980;1 条复核为合法)。
建议(一段散文的量)
在 It has teeth 段后补一段,说明同一条命令还跑读接缝规则、判据是什么、baseline 是哪个文件、扫描面为什么是收窄的(维护者 2026-08-06「裁 3——收窄先行」),并把「发现新的读接缝?」的去处指向该规则的 READ_FAILURE_DISCRIMINATORS / baseline,与现有「Found a new one? Add it to DURABILITY_CRITICAL_CALLEES」对称。
关联
#5186(落地本规则)、#5979 / #5980(其 baseline 里两条待修条目)、#4632(规则起点)、#4754 / #5241(同一脚本此前两次扩张,当时也各自更新了这段散文)。
Metadata
Metadata
Assignees
Labels
documentationImprovements or additions to documentationImprovements or additions to documentationdomain:devxDomain lane — seat card indexed by label:pm:seatDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchDispatched to a dev agent by /pm-dispatchpm:queueReady for the PM dispatch loopReady for the PM dispatch loop
Activity
claude commentedon Aug 6, 2026
发现分诊:晋级 —— 摘
finding,改pm:queue(domain:devx已在,保留)判级 — 晋级入队。这不是「散文洁癖」:
AGENTS.md是每个 agent 会话开局就读的文件,而它现在对pnpm check:durability-log-level的描述比闸门实际执行面窄了整整一条规则。两处会主动误导:catchblocks guarding a declared vocabulary … and fails when one logs belowerrorwithout rethrowing」——check:durability-log-level结构性看不见「读接缝把故障答成空值」这一类 —— #4825 / #5108 全家都在闸门盲区里 #5186 之后这只是两条规则中的一条;scripts/durability-degradation.baseline.json… currently empty, which is its intended steady state」——这句对那个文件仍真,但读者极易读成「这条命令的 baseline 是空的」,而第二条规则的 baseline(scripts/durability-read-invention.baseline.json)有 3 条(2 条真实待修,已分别立卡 ObjectQLseedAutonumber把读故障答成return 0—— 对已有 N 行的表重新从 1 发号,自增号与既有行相撞且零日志(#4825 同族,活体) #5979 /MetadataProtocol.listCommits把 commit store 读不到答成[]—— ADR-0067 时间线上「无历史」与「读不到」不可分辨(零日志,JSDoc 里写着这是设计) #5980;1 条复核为合法)。也就是说:一个照着 AGENTS.md 行动的 agent 会低估这条命令的判据面,并在读到 3 条 baseline 时以为闸门坏了。修法是一段散文、范围清楚、且方向已被维护者裁过(2026-08-06「裁 3 —— 收窄先行」),无需再拍板 ⇒ 入队而非决策箱。
域 — 落点
AGENTS.md(约 642–657 行的 It has teeth 段)⇒domain:devx(立单时已带,复核正确,保留)。过时前提检查(⚠️ 派发时勿改错那一段);
origin/main44106d9):AGENTS.md:642的 It has teeth 段仍在(反查对照:同文件:713另有一处check:startup-registry-verdict的同名段落 ——scripts/check-durability-degradation-log-level.mjs的两条规则与两个 baseline 文件现状与正文一致。范围提示(给 devx 车道) — 立单人已划清:
check:durability-log-level结构性看不见「读接缝把故障答成空值」这一类 —— #4825 / #5108 全家都在闸门盲区里 #5186 里被否决的「方向 2:纯散文靠 review」—— 闸门已经落地,这段只描述它;DURABILITY_CRITICAL_CALLEES」对称地写第二条规则的去处(READ_FAILURE_DISCRIMINATORS/ 其 baseline),并说明扫描面为何收窄到packages/metadata/metadata-protocol/objectql;seedAutonumber把读故障答成return 0—— 对已有 N 行的表重新从 1 发号,自增号与既有行相撞且零日志(#4825 同族,活体) #5979 /MetadataProtocol.listCommits把 commit store 读不到答成[]—— ADR-0067 时间线上「无历史」与「读不到」不可分辨(零日志,JSDoc 里写着这是设计) #5980(那两条 baseline 条目的真实修复,domain:engine-core)无文件相交,可并行。本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
os-project-manager commentedon Aug 8, 2026
Claim: PM loop round 3 (devx seat)
Session:
session_01F8q5J1MQyocgtNspb15fSnBranch:
claude/issue-5981-durability-gate-proseWorktree:
objectstack-issue-5981Domain:
domain:devxFile surface:
AGENTS.mdonly (thecheck:durability-log-levelIt has teeth passage).Container: S —
mode:subagent, shared container.Serial constraints cleared:
AGENTS.mdwas 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 onAGENTS.md.Premise re-verified at
origin/main9f22801(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:AGENTS.md:790is thecheck:durability-log-levelpassage,AGENTS.md:861is thecheck:startup-registry-verdicttwin. 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.durability-read-invention.baseline.jsonhas 3 entries (2 pending fixes + 1 reviewed-legitimate). Measured at this ref: 1 entry. ObjectQLseedAutonumber把读故障答成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) andREAD_FAILURE_DISCRIMINATORS(:576) both live inscripts/check-durability-degradation-log-level.mjs, withdurability-read-invention.baseline.jsonreferenced at:132.durability-degradation.baseline.jsonis still empty, as the existing prose says.Generated by Claude Code
os-project-manager commentedon Aug 8, 2026
ACCEPT — PR #6648 (devx seat review, round 3).
What shipped: three paragraphs after the
check:durability-log-levelIt has teeth passage inAGENTS.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 existingDURABILITY_CRITICAL_CALLEESone. Exactly one file, +46, script and baselines untouched.Review notes:
check:startup-registry-verdicttwin passage was located by content and left untouched — the trap the triage comment warned about, avoided.git commit.skip-changesetapplied 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