Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .github/workflows/lint.yml
Original file line numberDiff line numberDiff line change
Expand Up@@ -658,6 +658,34 @@ jobs:
- name: Cross-package test inputs
run: pnpm check:cross-package-test-inputs

# The inventory of `packages/**` tests coupled to `examples/**` (#8754).
# Sibling of the gate above, on the axis it cannot see: that one detects
# tests whose FILESYSTEM READS escape their package, this one detects
# tests that IMPORT an example app live. `packages/cli` dynamically
# imports `examples/app-showcase/src/ui/views/contact.view` and asserts
# `toEqual` over a hardcoded `_sections` key list; `packages/lint`
# statically imports the same app's `Contact`/`ContactViews`. Neither
# package declares a dependency on `@objectstack/example-showcase` — the
# coupling is a test-only relative import across a workspace boundary — so
# `turbo ls --affected` cannot reach them from an examples-only diff and
# the first signal is a red `Test Core` in the SHARED merge queue, which
# stalls every lane (queue build 31825946401; it caught #8231's remainder
# twice in one round, the second time through a package nobody had
# thought to check).
# ⛔ This gate grades DISCOVERY ONLY — "here are the coupled files, and
# here is what CI can see of each". It asserts nothing about how any of
# them should be written; adding a new live coupling is allowed, it only
# has to be RECORDED so the next example-app edit can be checked against
# the list. Classification is mechanical (declared workspace dep /
# declared turbo input glob / neither), and only the invisible tier needs
# a hand-written note, so the maintained half stays proportional to the
# gap. Checked in both directions: an undeclared coupling and a stale
# entry both fail, naming themselves.
# Inventory on demand: `pnpm examples:live-imports`.
# Static scan of test sources; sub-second.
- name: examples/** live-import inventory
run: pnpm check:examples-live-imports

# Tests must judge SOURCE, not a sibling's build artifact (#7668/#7849).
# Every publishable package resolves through `exports` to `dist/`, so a
# package whose tests import a workspace dep with no vitest source alias
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line numberDiff line numberDiff line change
Expand Up@@ -85,6 +85,8 @@
"check:shard-attestation": "node scripts/check-shard-attestation.mjs --self-test && node scripts/check-shard-attestation.mjs",
"check:required-contexts": "node scripts/check-required-contexts.mjs --self-test && node scripts/check-required-contexts.mjs",
"check:cross-package-test-inputs": "node scripts/check-cross-package-test-inputs.mjs --self-test && node scripts/check-cross-package-test-inputs.mjs",
"check:examples-live-imports": "node scripts/check-examples-live-imports.mjs --self-test && node scripts/check-examples-live-imports.mjs",
"examples:live-imports": "node scripts/check-examples-live-imports.mjs --list",
"check:test-source-alias": "node scripts/check-test-source-alias.mjs --self-test && node scripts/check-test-source-alias.mjs",
"check:type-source-resolution": "node scripts/check-type-source-resolution.mjs --self-test && node scripts/check-type-source-resolution.mjs",
"check:published-files": "node scripts/check-published-files.mjs --self-test && node scripts/check-published-files.mjs",
Expand Down
Loading
Loading