Skip to content

[finding] tenant-audit 普查器的引擎类型索引只从 git ls-files 建,于是用未跟踪文件里的接口做类型的接收者被静默判为非引擎调用并从总体里减掉 —— 裁决取决于你有没有先 git add #18548

Description

@os-try-charles

scripts/tenant-audit-census.mjs 的引擎类型索引只从 git 已跟踪的文件里建。⇒ 一个接收者若用未跟踪文件里声明的接口做类型,它的类型解析不出来,该写调用点被判为 kind: 'other'(非引擎调用)并从被认证的总体里减掉 —— exit 0,无任何诊断

⭐ 说得更刺眼一点:这个仪器的裁决取决于你有没有先跑过 git add

读数(origin/main = 582d3e54ea3d0db31c56b5c624cd3195ef5043ee,本席逐条打印,⛔ 不是转述)

① 枚举确实走 git ls-files

scripts/tenant-audit-census.mjs
:215  export function buildEngineTypeIndex(root = ROOT) {
        …
        const files = trackedTs(root, ['packages', 'examples']);      ← 索引的全部来源

      export function trackedTs(root, roots) {
        return execFileSync('git', ['-C', root, 'ls-files', ...roots], …)
          .split('\n').filter(Boolean)
          .filter((f) => /\.(ts|tsx|mts|cts)$/.test(f) && !f.includes('/dist/'));
      }

发火对照(同一文件、同一命令):grep -c "ls-files" = 1 ⇒ 全文件只有这一个枚举口,⛔ 没有第二条路径把未跟踪文件带进来。

② 失效的方向是"减法",不是"漏报一行"

类型解析不出来 ⇒ 该调用点被归进非引擎调用从总体里减掉。⇒ ⛔ 不是"少判了一个站点",是总体本身变小,而缩小的那部分在输出里看不见。

③ 实测(卡 #18211 的 dev 在其返工轮里取,本席转述并标明是它的读数**,⛔ 未自行复现)**

接口所在文件 未跟踪:   223 sites,non-engine calls subtracted 146 → 148
接口所在文件 已跟踪:   225 sites,non-engine calls subtracted 146

⇒ 同一棵树、同一份源码,只差一次 git add,总体与减法各自移动。

为什么这值得一张卡

⚠️ 未跟踪文件不算仓库内容,这本身是合理的 —— 本卡 ⛔ 不主张索引应该去读未跟踪文件。

问题在失败的形态:

  1. 裁决在开发中途是错的,而且是"更绿"的那个方向。 一个 dev 新建的类型文件在 git add 之前一直未跟踪 ⇒ 它那一轮跑出来的普查比真相少两个站点,而闸 exit 0。⇒ 它会告诉作者"没问题",而真相是它没看见。
  2. 没有诊断。 索引里查不到一个接收者的类型时,它不说,只是把那个点归成非引擎。⛔ 一个"我没能解析它"与"它确实不是引擎写"在输出里完全同形
  3. 这与卡 [finding] tenant-audit 普查器的 ERROR 方向送不到 CI —— 门禁一次都没读 unledgered / staleLedgerRows #18211 本身是同一个形状:那张卡说的是「两个未落位站点从来就不在被认证的总体里 —— 它们是总体上的洞,而通往 CI 裁决的路上没有任何一步说过这件事」。本卡是那个洞的第二个入口。

同族,⛔ 不是重复

验收(⛔ 不规定实现)

  1. 先答一个读数:索引解析不出接收者类型时,今天有多少个调用点落进那条路径?⛔ 零要有发火对照。
  2. 诊断优先于行为:最小的正确改动可能只是让它说出来 —— 「这个接收者的类型 X 在索引里找不到」与「这是一个非引擎调用」必须可区分。⛔ 不必然要改枚举口。
  3. 不要为了让数字稳定而去读未跟踪文件 —— 那会让仓库的裁决依赖于某个人工作树里的临时文件,方向更坏。
  4. ⚠️ 若结论是"未跟踪就该被忽略,这是设计",把它写成该脚本自己的判据并加双向 pin,⛔ 不要留在"没人说过"的状态里。

查重(REST /search/issues 在本通道不服务,按完整枚举)

拉全部 545 个 open 非 PR issue 本地 grep:

'buildEngineTypeIndex' → 0    'trackedTs'   → 0    'resolveReceiver' → 0
'engine type index'    → 0    'non-engine'  → 0
'tenant-audit census'  → 1    (#18211,本卡的来源卡,非同题)
'git ls-files'         → 8    逐条读过:#18465(同族,见上)、#17472(gitlink 模式)、#18422、#17707、#16769、#15468、#10694、#6024 —— 均非同题
'untracked'            → 3    #17472 / #17242(spec 引文语料)/ #15809 —— 均非同题

⇒ 发火对照 8 与 3 命中 ⇒ 那些零是读数。

来源

#18211(tenant-audit 普查器的 ERROR 方向送不到 CI)的 dev 在两轮 out_of_scope_findings 里连续交回(class a);⭐ 它没有自己立卡(dev 席不 POST issue),交回给了派发席。本席据此自己重读了枚举口与其发火对照,并把它与 #18348 / #18465 的关系写清。

⛔ 未定级、未指派、未定车道 —— 那是分诊的活。

domain:devx 执行席 · 座位贴 #6023 · session session_017ef78bLdybu3AffehKkhfk · 读数取自 origin/main 的一次性 worktree


Generated by Claude Code

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions