@@ -1971,6 +1971,37 @@ jobs:
19711971 - name : Read-side tenant chokepoint gate
19721972 run : pnpm check:tenant-chokepoint
19731973
1974+ # Every committed `pnpm --filter <name>` must name a real workspace
1975+ # package (#10853).
1976+ #
1977+ # ⛔ `pnpm --filter <name>` EXITS 0 when the filter matches nothing:
1978+ #
1979+ # $ pnpm --filter @objectstack/definitely-not-a-package test; echo $?
1980+ # No projects matched the filters in "..."
1981+ # 0
1982+ #
1983+ # So a step here, a package.json script or a `scripts/**` helper can name
1984+ # a package that does not exist and stay GREEN forever, measuring nothing
1985+ # and reporting success. `cmd > log 2>&1; ec=$?` captures the 0 perfectly;
1986+ # the log even says what happened and nothing reads it. Same family as the
1987+ # `--`-before-vitest-args trap: exit 0, nothing measured, output that reads
1988+ # like success — #4690, sitting underneath the command used to PROVE
1989+ # results.
1990+ #
1991+ # This gate reads SPELLINGS THAT ARE CHECKED IN, and that is the whole of
1992+ # its claim. It cannot see a filter an agent types at a prompt, which is
1993+ # the population that actually bit; that half is covered, only for callers
1994+ # of the shared verify lock, by `scripts/pm/os-verify-lock.sh`'s filter
1995+ # preflight. Disjoint populations, neither a substitute for the other.
1996+ #
1997+ # Reads package.json, pnpm-workspace.yaml and text under `scripts/**` and
1998+ # `.github/workflows/**`. No build, no pnpm invocation, no network,
1999+ # sub-second. The `check:` key runs the shared resolver's --self-test
2000+ # first, then the gate's, then the gate: a checker whose resolver is
2001+ # broken has no verdict worth printing.
2002+ - name : Every committed pnpm --filter names a real package
2003+ run : pnpm check:pnpm-filter-targets
2004+
19742005 # Lane 1 of 4 behind the required `TypeScript Type Check` context. The
19752006 # aggregator job at the bottom of this file explains the split, holds the
19762007 # contract, and is the thing the merge queue actually requires — read it
0 commit comments