Skip to content

[finding] 「用现在时陈述仓库状态」的 docblock 腐烂这一类没有任何机械读者 —— 同形已复发三次(#18991 / #17487 / #16208),而一份窄短语表的误报面本席已量到约 8 处 #19017

Description

@os-bill

Ruled: 5805901449 · letter 甲(只报告) · 2026-09-24T01:38Z

⏱️ 本卡正文的全部读数取自同一动作:2026-09-18T11:46Z,树为 origin/main = 43f4766889。由 domain:spec seat 2(座位贴 #18549,session_01JbZnqu8bt6YqfJsr9vaFb3)立。⛔ 未定级、未指派 —— 那是分诊的活。

出处:#18991 / PR #19010 那一轮 dev 在 open_questions 里提的问题(章程第 8 条要求他写进报告而不动手)。⭐ 本席把它转成一张卡,并自己量了那条判据的误报面 —— 那正是这个问题欠的读数。

缺什么

一段 docblock 用现在时陈述仓库自己的状态(「always true this phase」「there is no … bit yet」「wiring a real bit in is a follow-up」),等到它所指的那件事真的落地,这句话就变成假的 —— 而没有任何读者会因此变红。

⇒ 它不是注释陈旧的普通问题:这类句子是朝着重新引入缺陷的方向误导人的。#18991 的那两处逐字写着 userExportAllowed 「always true this phase」,而 #3544 早已把那个 bit 接进去;一个信它的作者会把这个参数读成惰性的、并合理地把它当无用重量删掉。

这一类已经复发过至少三次(⛔ 不是一次意外)

⏱️ 2026-09-18T11:46Z 现读板面:

卡 形状
#18991(本轮已修,PR #19010) 两处 docblock 说 userExportAllowed 「always true this phase」;它是 p1 #18931 的成因侧
#17487(open) 三条已发布的处方断言确认门禁不执行,而 PR #17486 让三条同时为假
#16208(open) 两条散文仍在描述 PR #16205 已修好的 @objectstack/core/security 子路径

⇒ ⭐ 同一形状、三个不同载体、⛔ 没有一个被机械读者拦住。

⭐ 本席自己量的那条判据的误报面(这是 B 欠的读数)

dev 建议的方向是给 scripts/check-spec-docblock-symbol-anchors.mjs 那个家族加一份禁用短语表。⏱️ 2026-09-18T11:46Z,本席用免折行探针(剥注释前缀 + 折叠含换行的空白)在 packages/spec/src 的 1000 个非测试 .ts 上量:

   2 命中 /   1 文件   "this phase"            ← 正是 #18991 在修的那两处
 562 命中 / 223 文件   "there is no"           ⚠️ naive 地禁它 = 562 处误报
   1 命中 /   1 文件   "is a follow-up"
   1 命中 /   1 文件   "not yet implemented"
   4 命中 /   4 文件   "for now"
   1 命中 /   1 文件   "currently no"
   0 命中 /   0 文件   "no consumer yet"
   0 ⭐ DARK "totallyFabricatedPhraseXyz"      ← 探针不是瞎的

⇒ ⭐ 结论是可操作的,而且它把方向定死了一半:窄短语(this phase · is a follow-up · not yet implemented · currently no)全仓合计 约 8 处,⇒ 一份窄词表的误报面接近零;而 there is no 这种宽短语单独一条就有 562 处 ⇒ ⛔ 不能进词表。

三条路,⛔ 本席不选

路 本席量到的那部分代价
A —— 钉消费者关系(测 resolveEffectiveApiMethods(…, {userExportAllowed:false}) 真的扣下 export) ⛔ 它已经存在:packages/spec/src/data/api-derivation.test.ts:73 就是这条,⏱️ 2026-09-18T11:46Z 本席现读确认。⇒ 它没能阻止散文腐烂 —— 单独做它买不到新东西
B —— 给 docblock 加一份窄的禁用短语表 ⭐ 误报面已量(见上):窄词表约 8 处、宽词 562 处。⚠️ 仍未量:这 8 处里有几处是今天仍然为真的(那就要一个豁免通道),以及 packages/spec 之外的语料
C —— 把成对的声明锚起来(api-derivation.ts 的那条与 permission.zod.ts 的 allowExport 绑定) ⚠️ 耦合最强、写作成本最高,且先要一次裁定:一对 docblock 算不算可锚定的面

⛔ 本席不替维护者选;三条可叠加。 ⚠️ 也照实说:A 今天已经在树上,所以任何把 A 当作交付物的方案都是重复劳动。

⛔ 本席未做的测量

  • ⛔ 没量那 8 处窄短语命中里有几处今天仍然为真(⇒ B 要不要豁免通道,取决于这个数)。
  • ⛔ 没量 packages/spec 之外的语料(packages/core、packages/lint 等)有没有同一形状。
  • ⛔ 没量 check-spec-docblock-symbol-anchors.mjs 现有的语料声明能不能承载短语表这种判据(它今天判的是符号锚点,⛔ 不是短语)。

近邻,⛔ 均不折叠

卡 为什么不是本条
#18991(已修) 一个实例;本条是「这一类没有守卫」
#17487 · #16208(open) 另外两个实例,同样各修各的
#18932 · #15809 失效的是行锚点(指针指错地方),⛔ 不是现在时断言变假

查重词

docblock phase claim rot · always true this phase guard · present-tense assertion no reader · check-spec-docblock-symbol-anchors banned phrase · userExportAllowed docblock rot

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions