Filed by the domain:spec execution seat 4(座位贴 #18917,session_01AmH9bKvGoLjiY86Q4Z3og2)—— 出自 #18314 / PR #18935 那一轮 dev 的 out_of_scope_findings。dev 不立卡,由席位立。⛔ 填 bare:finding only。
⚠️ 本卡装了两个缺陷,它们同文件、但不同类、修法也不同。 合在一起立是因为都属于「这个门禁自己声明的契约 vs 它自己的行为」、且一个 worktree 就能做完;⭐ 分诊若判该拆,请拆,本席不反对。
Dedupe words: check-single-claim-paths EXIT_CONFLICT · transport failure exit 1 accusation · selfTestReachedVerdict phantom handshake · self-test async IIFE flag · exit code is not a handshake
A. 传输失败以 exit 1 退出,而这个文件把 1 定义为「指控」
scripts/check-single-claim-paths.mjs 的头部(⏱️ 本席 06:47Z 自读 origin/main):120-122:
* 0 judged, clean.
* 1 judged, an earlier open PR already claims a listed path.
* 2 NOT WIRED — no PR context, or an INCOMPLETE one …
⇒ 1 是一句指控:它说「另一个更早的 open PR 已经占了你列的某条路径」。而一次传输失败也走到 1。
探针(dev 提供,本席未复跑,⛔ 标注来源):PR_NUMBER=99999999 GITHUB_REPOSITORY=objectstack-ai/objectstack node scripts/check-single-claim-paths.mjs ⇒ unhandled rejection + exit 1。
⭐ 这个文件自己写明了为什么这要紧:「a mis-wired gate must not read as an accusation, because it would be red on every PR at once for something no author did」。⇒ 它给自己定了规矩,而这条路径违反了它。
⚠️ PR #18935 在两个方向上都没有改变这一条(本席核过它的 diff:只加 re-exec,退出码契约未动)。
⛔ 不是一处有界的就地修复:新增一个退出码是契约变更,还要带一个新的验证面。⇒ 定级与路线归分诊/维护者,本席不预判。
B. self-test 的握手旗标在异步块之前同步置位 ⇒ 永远不会报「没跑完」
⏱️ 本席 06:48Z 自读 origin/main:
:545 let selfTestReachedVerdict = false;
:693 selfTestReachedVerdict = true; —— 紧接着下一行就是 return (async () => {
:770 读取该旗标
⇒ 旗标在那个负责跑断言并打印结论的异步块开始之前就已经是 true。该异步块里任何一次提前 return 或抛出,旗标仍然是 true ⇒ 调度方永远说不出「这个 self-test 没走到结论」—— 而那正是这个旗标存在的理由。
它违反的契约是成文的,本席自核 AGENTS.md:1039,逐字:
SAY the self-test never reached its verdict. ⛔ An exit code is not a handshake.
AGENTS.md:1044 并把三件套点名:SELF_TEST_BATTERIES、SELF_TEST_BATTERY_FLOOR、selfTestReachedVerdict。
⇒ 修法是把置位移到最后一条语句(成功行打印之后),按 AGENTS.md 的原话。⭐ 一行移动,与 A 完全不同的规模。
⛔ 没量的部分
- ⛔ 没量其它带同一三件套的门禁有没有同样的置位顺序错误。⚠️ 承接者值得先跑一遍普查再决定是一张卡还是一类卡 —— 如果是一类,本卡 B 半应当升级为普查卡。
- ⛔ A 的探针本席未复跑,只核了它所违反的那条头部契约确实存在且
1 确实是指控语义。
domain:spec 执行席 4 · 座位贴 #18917 · B 的行号与 AGENTS.md 引文为本席 2026-09-18T06:47-06:48Z 自取
Generated by Claude Code
Filed by the
domain:specexecution seat 4(座位贴 #18917,session_01AmH9bKvGoLjiY86Q4Z3og2)—— 出自 #18314 / PR #18935 那一轮 dev 的out_of_scope_findings。dev 不立卡,由席位立。⛔ 填 bare:findingonly。Dedupe words:
check-single-claim-paths EXIT_CONFLICT·transport failure exit 1 accusation·selfTestReachedVerdict phantom handshake·self-test async IIFE flag·exit code is not a handshakeA. 传输失败以 exit 1 退出,而这个文件把 1 定义为「指控」
scripts/check-single-claim-paths.mjs的头部(⏱️ 本席 06:47Z 自读origin/main):120-122:⇒
1是一句指控:它说「另一个更早的 open PR 已经占了你列的某条路径」。而一次传输失败也走到 1。探针(dev 提供,本席未复跑,⛔ 标注来源):
PR_NUMBER=99999999 GITHUB_REPOSITORY=objectstack-ai/objectstack node scripts/check-single-claim-paths.mjs⇒ unhandled rejection + exit 1。⭐ 这个文件自己写明了为什么这要紧:「a mis-wired gate must not read as an accusation, because it would be red on every PR at once for something no author did」。⇒ 它给自己定了规矩,而这条路径违反了它。
⛔ 不是一处有界的就地修复:新增一个退出码是契约变更,还要带一个新的验证面。⇒ 定级与路线归分诊/维护者,本席不预判。
B. self-test 的握手旗标在异步块之前同步置位 ⇒ 永远不会报「没跑完」
⏱️ 本席 06:48Z 自读
origin/main::545let selfTestReachedVerdict = false;:693selfTestReachedVerdict = true;—— 紧接着下一行就是return (async () => {:770读取该旗标⇒ 旗标在那个负责跑断言并打印结论的异步块开始之前就已经是
true。该异步块里任何一次提前 return 或抛出,旗标仍然是true⇒ 调度方永远说不出「这个 self-test 没走到结论」—— 而那正是这个旗标存在的理由。它违反的契约是成文的,本席自核
AGENTS.md:1039,逐字:AGENTS.md:1044并把三件套点名:SELF_TEST_BATTERIES、SELF_TEST_BATTERY_FLOOR、selfTestReachedVerdict。⇒ 修法是把置位移到最后一条语句(成功行打印之后),按
AGENTS.md的原话。⭐ 一行移动,与 A 完全不同的规模。⛔ 没量的部分
1确实是指控语义。domain:spec执行席 4 · 座位贴 #18917 · B 的行号与AGENTS.md引文为本席 2026-09-18T06:47-06:48Z 自取Generated by Claude Code