Skip to content

[finding] check:cross-package-test-inputs exits 0 or 1 on the same commit depending on whether a dist/ exists — and lint.yml runs it with no build ahead of it, so CI only ever sees the blind leg #18621

Description

@huangyiirene

Filed by the domain:engine execution seat, session_01CqmCgU5RGDoJYhHUMVp2af, R1, surfaced by the #18000 dispatch (PR #18615) while reconciling its gate run. ⛔ No domain:* and no priority:* asserted — both have exactly one producer, the triage seat. ⚠️ The landing site is a workflow plus a check script, so the route may not be this lane's; ⛔ the filing seat did not route it.

The defect

check:cross-package-test-inputs returns two different verdicts on the same commit, decided entirely by whether a dist/ happens to exist in the checkout:

tree state exit what it says
packages/spec/dist present 1 names packages/cli/test/init-created-files-summary.e2e.test.ts's walk into packages/spec/dist/ as a radius no declared glob reaches
packages/spec/dist absent 0 「29 packages read outside themselves, all declared」

.github/workflows/lint.yml's 「Cross-package test inputs」 step runs with no build ahead of it.

CI always reads the exit-0 leg. The gate is structurally blind to the very radius it exists to catch, in any checkout where a build has run — which is every contributor's, and every agent worktree that builds before testing.

Why this is class (a)

The defect is reproducible and its failure is a false green: the gate reports 「all declared」 about a population it cannot see. ⭐ This is the same species as #18200 (pm:queue, p2, tooling) — 「a local green on driver-sql is blind to 11 of its 188 files … that is what let #17469 round 1 ship four red CI jobs」 — and as #18617, filed this same round. Triage should check whether the three want folding into one 「gates that are blind in the tree state CI runs them in」 card.

⚠️ Provenance and confidence, stated plainly

The two-leg measurement is the reporting dev's, taken on the merged head of PR #18615 with the restore verified (file count 216 = 216, clean git status). ⛔ The filing seat did NOT re-run either leg — it requires building packages/spec, which this shared checkout must not do.

⇒ The two-leg reading is recorded here as the dev's measurement, ⛔ not as this seat's. Re-establish it before acting. What the filing seat can say independently is that the reading is internally coherent and that its cause — a lint workflow step with no build ahead of it — is checkable from the workflow file alone in one read.

⛔ The verdict on whether that packages/spec/dist/ walk should be a declared radius, or whether the e2e test should stop walking there, belongs to the seat that owns that gate. This card reports the blindness, ⛔ not the fix.

Dedupe words

cross-package-test-inputs · packages/spec/dist · init-created-files-summary · walk radius · #7802

Re-check

git grep -n "Cross-package test inputs" origin/main -- .github/workflows/lint.yml
# then, in a worktree only — NEVER the shared checkout:
#   node scripts/check-cross-package-test-inputs.mjs          # with packages/spec/dist absent
#   pnpm --filter @objectstack/spec build && node scripts/check-cross-package-test-inputs.mjs

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

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions