Filed by the domain:spec execution seat 2(座位贴 #18549,session_01JbZnqu8bt6YqfJsr9vaFb3)out of the #18579 round(PR #18863),from that dev's open_questions —— dev 不立卡,由席位立。⛔ 填 bare:finding only;domain:* / 类型 / 优先级是分诊的。
⭐ 这是执行一条已裁卡时冒出的残留问题,⛔ 不是 #18579 被派发时问的那个问题。按半状态巡检 H52 的处方,残留问题另立新卡并链回已裁那张,⛔ 不在 #18579 上重挂 needs-user-decision —— 否则收件箱说不清开着的是哪一问,而 #18579 一关,这个问题的唯一可见性也跟着没了。
Dedupe words:delivers() message-includes leg unpinned · check-mode sandbox symlinks src · fixture def would ship to consumers · proof 4 fail-closed leg zero-defended · build-schemas closure has no seam。
缺什么
packages/spec/scripts/build-schemas.ts 的 proof 4 里,delivers()(⏱️ 2026-09-18T02:14Z 现读 origin/main 18cc3b1dfc,在 :1640)有一条腿今天由一个零防守:那条 message-includes 判断 —— 拒绝一个「照声明建出来、但没有带上声明自己那份 error map」的 strict 克隆。
那条腿是 fail-closed 的一半:读不出声明文本的拒绝被算作 "no evidence" 而⛔ 不是 "proved"。⇒ 它若哪天静默失效,普查不会变红,只会悄悄多出几条 "no evidence",而 "no evidence" 正是这套证明对一切它测不了的东西的正常答案。⇒ ⭐ 失效方向是「读作合规」,而且没有夹具会发火。
⛔ 三条路都被本仓自己写着的规矩堵住了 —— 这正是它不是「加个夹具」的原因
⏱️ 2026-09-18T02:14Z,逐条现读 origin/main 18cc3b1dfc:
| 路 |
做法 |
堵在哪 |
| A |
在出货的图上加一个合成 def |
@objectstack/spec 的 files[] 带 src/**/*.zod.ts ⇒ 一个假 schema 会随 tarball 发给消费者。⛔ 出局 |
| B |
在 check-mode 沙箱里加一个合成 def |
packages/spec/scripts/build-schemas-check-mode.test.ts 每个沙箱都用 fs.symlinkSync 接 src(:476 · :3374 · :3673 · :4039),而它自己 :410 的注释写着:「the real file; src/ is the fixture's own, so the population a run observes is the repo's」⇒ 夹具 def 只能写进真的 src,即退回 A。⚠️ 改成每个沙箱拷贝 src,是对一份 4466 行的 harness 做结构改造 |
| C |
把 delivers() 导出去做单测 |
它是 computeGuidanceRoutes 内部的一个 const 箭头函数(:1640),闭包在 zodByDefKey 上 ⇒ 导出它本身就是结构改造 |
⚠️ 一条要点名的未验证:#18579 的 dev 把 C 的阻塞理由写成「that file's header rule is no test-only seam」。⏱️ 2026-09-18T02:14Z 本席在 build-schemas.ts 里搜 test-only / test only / seam 三种拼法,命中 0(⭐ 亮控:同文件 proof 4 命中 12 ⇒ 搜索没死)。⇒ ⛔ 那条规矩本席证不了,来源点名为该 dev 的报告。⭐ 但 C 仍然被堵住 —— 靠的是上表那个结构事实(闭包),⛔ 不靠那条规矩。
⭐ 立卡席的倾向(⛔ 是建议,不是处方)
B,而且单独成卡。理由是 #18579 的 dev 给的,本席同意并转述:每个沙箱各自拷 src,同时也给 proof 4 其余几条 fail-closed 腿解锁了夹具,⛔ 不只是这一条。
⇒ 代价也要写明:那是对 4466 行 harness 的结构改造,沙箱建造时间会变(symlink → copy),而这份 harness 本身就是最慢的 --project repo 套件之一。⛔ 本席没有量那个代价。
⛔ 没量的部分,⛔ 不许当读数用
- ⛔ 没量每沙箱拷贝
src 会让 build-schemas-check-mode.test.ts 慢多少(它今天 85 个用例)。承接者第一件事就该量这个 —— 若代价不可接受,B 也出局,那么这条腿就得在「重构」和「承认它无防守并写进 docblock」之间选,而那是另一个问题。
- ⛔ 没量 proof 4 还有几条 fail-closed 腿处在同样无夹具的状态。卡面主张的是这一条,⛔ 不是一个总体。
- ⛔ 没量这条腿今天有没有实际静默失效过。⇒ 主张的是「没有夹具会发火」,⛔ 不是「它已经坏了」。
已经做了的对冲,⛔ 免得承接者以为什么都没有
PR #18863(卡 #18579)把今天守着这条腿的那个零连同它的取数树一起写进了 docblock —— 「at 88aa326deb that state held 9 keys on 4 defs…」,并明写「which defs sit in that last group is a fact about the graph at that commit and not a property of this proof」,叫下一个读者重测而不是改日期。⇒ ⭐ 那是一条记录,⛔ 不是一个夹具:它让下一个读者看得见这条腿靠什么站着,⛔ 但它不会在腿断的时候变红。
Refs:#18579 / PR #18863(这个问题从哪一轮溢出来的,以及那条零的现行记录)· #18301 / PR #18529(proof 4 本体)
Generated by Claude Code
Filed by the
domain:specexecution seat 2(座位贴 #18549,session_01JbZnqu8bt6YqfJsr9vaFb3)out of the #18579 round(PR #18863),from that dev'sopen_questions—— dev 不立卡,由席位立。⛔ 填 bare:findingonly;domain:*/ 类型 / 优先级是分诊的。⭐ 这是执行一条已裁卡时冒出的残留问题,⛔ 不是 #18579 被派发时问的那个问题。按半状态巡检 H52 的处方,残留问题另立新卡并链回已裁那张,⛔ 不在 #18579 上重挂
needs-user-decision—— 否则收件箱说不清开着的是哪一问,而 #18579 一关,这个问题的唯一可见性也跟着没了。Dedupe words:
delivers() message-includes leg unpinned·check-mode sandbox symlinks src·fixture def would ship to consumers·proof 4 fail-closed leg zero-defended·build-schemas closure has no seam。缺什么
packages/spec/scripts/build-schemas.ts的 proof 4 里,delivers()(⏱️ 2026-09-18T02:14Z 现读origin/main18cc3b1dfc,在:1640)有一条腿今天由一个零防守:那条message-includes 判断 —— 拒绝一个「照声明建出来、但没有带上声明自己那份 error map」的 strict 克隆。那条腿是 fail-closed 的一半:读不出声明文本的拒绝被算作 "no evidence" 而⛔ 不是 "proved"。⇒ 它若哪天静默失效,普查不会变红,只会悄悄多出几条 "no evidence",而 "no evidence" 正是这套证明对一切它测不了的东西的正常答案。⇒ ⭐ 失效方向是「读作合规」,而且没有夹具会发火。
⛔ 三条路都被本仓自己写着的规矩堵住了 —— 这正是它不是「加个夹具」的原因
⏱️ 2026-09-18T02:14Z,逐条现读
origin/main18cc3b1dfc:@objectstack/spec的files[]带src/**/*.zod.ts⇒ 一个假 schema 会随 tarball 发给消费者。⛔ 出局packages/spec/scripts/build-schemas-check-mode.test.ts每个沙箱都用fs.symlinkSync接src(:476·:3374·:3673·:4039),而它自己:410的注释写着:「the real file;src/is the fixture's own, so the population a run observes is the repo's」⇒ 夹具 def 只能写进真的src,即退回 A。src,是对一份 4466 行的 harness 做结构改造delivers()导出去做单测computeGuidanceRoutes内部的一个const箭头函数(:1640),闭包在zodByDefKey上 ⇒ 导出它本身就是结构改造build-schemas.ts里搜test-only/test only/seam三种拼法,命中 0(⭐ 亮控:同文件proof 4命中 12 ⇒ 搜索没死)。⇒ ⛔ 那条规矩本席证不了,来源点名为该 dev 的报告。⭐ 但 C 仍然被堵住 —— 靠的是上表那个结构事实(闭包),⛔ 不靠那条规矩。⭐ 立卡席的倾向(⛔ 是建议,不是处方)
B,而且单独成卡。理由是 #18579 的 dev 给的,本席同意并转述:每个沙箱各自拷
src,同时也给 proof 4 其余几条 fail-closed 腿解锁了夹具,⛔ 不只是这一条。⇒ 代价也要写明:那是对 4466 行 harness 的结构改造,沙箱建造时间会变(symlink → copy),而这份 harness 本身就是最慢的
--project repo套件之一。⛔ 本席没有量那个代价。⛔ 没量的部分,⛔ 不许当读数用
src会让build-schemas-check-mode.test.ts慢多少(它今天 85 个用例)。承接者第一件事就该量这个 —— 若代价不可接受,B 也出局,那么这条腿就得在「重构」和「承认它无防守并写进 docblock」之间选,而那是另一个问题。已经做了的对冲,⛔ 免得承接者以为什么都没有
PR #18863(卡 #18579)把今天守着这条腿的那个零连同它的取数树一起写进了 docblock —— 「at
88aa326debthat state held 9 keys on 4 defs…」,并明写「which defs sit in that last group is a fact about the graph at that commit and not a property of this proof」,叫下一个读者重测而不是改日期。⇒ ⭐ 那是一条记录,⛔ 不是一个夹具:它让下一个读者看得见这条腿靠什么站着,⛔ 但它不会在腿断的时候变红。Refs:#18579 / PR #18863(这个问题从哪一轮溢出来的,以及那条零的现行记录)· #18301 / PR #18529(proof 4 本体)
Generated by Claude Code