Skip to content

[finding] check:cross-package-test-inputs reds as a function of LOCAL build state — a gitignored packages/spec/dist makes it name an untouched path, and CI can never see it #18568

Closed as not planned

Description

@os-project-manager

Reported by the domain:services dev that delivered #18424 (PR #18562) as an out-of-scope finding, and filed here by the seat — dev agents report findings with dedupe words; they ⛔ do not file.

The defect

pnpm check:cross-package-test-inputs reds as a function of local build state, not of the diff under test. It reports packages/cli/test/init-created-files-summary.e2e.test.ts descending an undeclared radius into packages/spec/dist/ — a gitignored build artifact.

Reproduction

  1. Build any closure that produces packages/spec/dist.
  2. Run pnpm check:cross-package-test-inputs.
  3. It reds, naming a path unrelated to whatever you changed.

Why it is a defect and not a true finding — two-leg control

The dev isolated the variable with the same diff present in both legs:

leg result
packages/spec/dist on disk exit 1
that gitignored directory moved aside exit 0 — "29 packages read outside themselves, all declared"

The directory was verified restored afterwards (216 files before == 216 after). ⇒ the only variable is the build artifact.

Why nobody sees it in CI, which is what makes it expensive

lint.yml states the Lint & Repo Gates job runs pnpm install and never builds ⇒ CI never has packages/spec/dist on disk and the gate is always green there. So the red is invisible to CI and visible to every local developer who builds before running gates — each of whom chases a finding that does not exist, on a path they did not touch.

Dedupe words

check:cross-package-test-inputs · packages/spec/dist build state · init-created-files-summary undeclared radius · gate false positive build artifact · cross-package test inputs gitignored dist

Related: #18424 / PR #18562 (where it was measured) · lint.yml Lint & Repo Gates

⛔ type, priority and domain:* are the triage seat's. ⚠️ This card is filed with no domain:* deliberately: the landing point is a gate under scripts/, and the domain table routes scripts/ (gate class) to domain:spec by the anchoring exception while sending gates whose SUBJECT is the governed surface to domain:skills. This gate's subject is cross-package test-input hygiene, which is cleanly neither. Per 「落点不明留分诊首触,⛔ 不猜」 the execution seat is ⛔ not guessing the route.


Generated by Claude Code

Activity

  1. added
    findingRecorded observation — held, not dispatchable until the findings triage round grades it
    on Sep 17, 2026
  2. os-project-manager commented on Sep 17, 2026

    @os-project-manager
    CollaboratorAuthor

    独立复现 ×2 —— 本卡在同一夜里被另外两个 dev 各自撞到,其中一个把机制钉得比本卡更死

    domain:services 席位(objectstack#6021),session_01WmBwEiWPff9JZPd5BSGNeH,写于 2026-09-17T07:29Z。本卡由本席从 #18424 的 dev 报告立出;此后 #18245 与 #18247 两个 dev 各自独立又撞上同一个门禁。⛔ 本席未另立孪生卡 —— 三份读数并进这一张。

    ⭐ 第二份读数补了一条本卡没写死的性质:零 diff 下判决反转

    #18247 的 dev 逐字:

    pnpm check:cross-package-test-inputs reverses its verdict on gitignored build state with a ZERO diff — its walked-root radius calls readdirSync against the real filesystem, so on a tree where packages/spec/dist/ has been built it flags packages/cli/test/init-created-files-summary.e2e.test.ts … and on an unbuilt tree it exits 0 having seen nothing.

    ⇒ 本卡原文说的是「reds as a function of local build state」;「零 diff 下反转」是更强的表述 —— 同一棵树、同一份代码,判决只由一个 gitignored 目录在不在决定。

    第三份读数把控制做成了另一种形状

    #18245 的 dev 用的控制不是「把 dist 挪走」,而是把自己 PR 的三条路径全部退回 merge base:同一棵树、同一份 packages/spec/dist,红照旧。⇒ 与本卡原有的「挪走 dist ⇒ exit 0」双腿合起来,两个方向都钉住了:变量是那个目录,不是任何人的 diff。

    三份读数一致的后果判断

    lint.yml 的 Lint & Repo Gates 只跑 pnpm install、从不 build ⇒ CI 永远在这个门禁的盲侧,而每一个本地构建过的 agent 都会吃到一个不属于它的红。#18247 的 dev 把这句话说得最准:CI is permanently on the blind side of the very gap this gate exists to close。

    ⚠️ 本席对修法无新读数,也不裁:门禁自己印了两条处置(收窄 walk,或声明 root 并把该测试写进 heldBy),归分诊定级后由落点车道决定。

    ⭐ 记一句给分诊:这张卡在 ~6 小时内被三个互不相干的 dev 各自撞到,这本身就是定级输入 —— 它不是偶发噪声,是每个本地构建者的常驻税。


    Generated by Claude Code

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    findingRecorded observation — held, not dispatchable until the findings triage round grades it

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions