Found by the domain:devx PM seat (#6023, session session_01DdCnBGcHeufjrq7drTD3wt) when a dispatched dev caught my own dispatch briefing handing it a package name that does not exist. Filed unassigned, observation class — recording the mechanism, not claiming a remedy.
Measured, live, just now
$ pnpm --filter @objectstack/adapter-hono test --maxWorkers=2
No projects matched the filters in "/home/user/objectstack"
$ echo $?
0
The real package is @objectstack/hono (packages/adapters/hono/package.json). The directory is adapters/hono, so @objectstack/adapter-hono is the name a reader guesses from the path — and guessing wrong costs nothing visible.
Why this is a verification-integrity defect, not a typo
⚠️Exit 0 is the whole problem. Every discipline this repo relies on to make a test run trustworthy is defeated by it:
cmd > log 2>&1; ec=$? — the rule that exists because a pipe swallows the exit code — faithfully captures 0.- A report saying "suite green, exit 0" is then true and worthless: nothing ran.
- It composes with the sibling trap already on the books: ⛔ never write
-- when passing args to vitest through pnpm, because cac silently discards everything after it. Both failure modes end at exit 0, nothing measured, output that reads like success.
This is the repo's recurring defect class — a partial result that reads like a complete one — sitting underneath the very command agents use to prove results.
The instance that surfaced it
My dispatch briefing for #10835 spelled the filter @objectstack/adapter-hono inside the "how to run vitest correctly" warning. The dev ran it, got the silent green, checked whether the filter had actually matched, found it had not, and corrected me. Its own words: "a silent green that would have made an entire verification round fictitious."
⭐ It caught this on its own initiative — my briefing did not tell it to verify the filter matched. Had it trusted the exit code, its entire test section would have been fiction, and the exit codes in it would all have been genuine.
No guard exists
Checked before filing, precisely rather than loosely: no script under scripts/ and no workflow under .github/workflows/ contains the string No projects matched the filters, and none carries a zero-match guard. (Four scripts matched a looser filter.*exists|verify.*filter grep; a targeted re-grep shows none of them guards this. The loose grep was wrong, the targeted one settles it.)
Directions, not a recommendation
- Make the wrapper refuse. A thin
scripts/pm/ runner that resolves the filter against the workspace before delegating, and exits non-zero on zero matches. Cheapest, but only protects callers who use it. - A gate over declared filters. Every
pnpm --filter <name> spelled in package.json scripts, workflows, and scripts/** must name a real workspace package. Catches the committed population; catches nothing an agent types ad hoc — which is the population that actually bit here. - ⚠️Fix the dispatch template's example so it stops teaching a name that does not exist. That file is
.claude/skills/** — governed, human-merge-only — so it is named here rather than done. Note the template already carries the ---separator warning, so the surrounding prose is about this exact class; the example beneath it is an instance of it.
⛔ I have not picked between these, and 1 and 2 are not substitutes: they protect disjoint populations.
Refs: #10835 / PR #10849 (where it surfaced) · the ---separator trap (same shape, same exit code)
Generated by Claude Code
Found by the
domain:devxPM seat (#6023, sessionsession_01DdCnBGcHeufjrq7drTD3wt) when a dispatched dev caught my own dispatch briefing handing it a package name that does not exist. Filed unassigned, observation class — recording the mechanism, not claiming a remedy.Measured, live, just now
The real package is
@objectstack/hono(packages/adapters/hono/package.json). The directory isadapters/hono, so@objectstack/adapter-honois the name a reader guesses from the path — and guessing wrong costs nothing visible.Why this is a verification-integrity defect, not a typo
cmd > log 2>&1; ec=$?— the rule that exists because a pipe swallows the exit code — faithfully captures 0.--when passing args to vitest through pnpm, becausecacsilently discards everything after it. Both failure modes end at exit 0, nothing measured, output that reads like success.This is the repo's recurring defect class — a partial result that reads like a complete one — sitting underneath the very command agents use to prove results.
The instance that surfaced it
My dispatch briefing for #10835 spelled the filter
@objectstack/adapter-honoinside the "how to run vitest correctly" warning. The dev ran it, got the silent green, checked whether the filter had actually matched, found it had not, and corrected me. Its own words: "a silent green that would have made an entire verification round fictitious."⭐ It caught this on its own initiative — my briefing did not tell it to verify the filter matched. Had it trusted the exit code, its entire test section would have been fiction, and the exit codes in it would all have been genuine.
No guard exists
Checked before filing, precisely rather than loosely: no script under
scripts/and no workflow under.github/workflows/contains the stringNo projects matched the filters, and none carries a zero-match guard. (Four scripts matched a looserfilter.*exists|verify.*filtergrep; a targeted re-grep shows none of them guards this. The loose grep was wrong, the targeted one settles it.)Directions, not a recommendation
scripts/pm/runner that resolves the filter against the workspace before delegating, and exits non-zero on zero matches. Cheapest, but only protects callers who use it.pnpm --filter <name>spelled inpackage.jsonscripts, workflows, andscripts/**must name a real workspace package. Catches the committed population; catches nothing an agent types ad hoc — which is the population that actually bit here..claude/skills/**— governed, human-merge-only — so it is named here rather than done. Note the template already carries the---separator warning, so the surrounding prose is about this exact class; the example beneath it is an instance of it.⛔ I have not picked between these, and 1 and 2 are not substitutes: they protect disjoint populations.
Refs: #10835 / PR #10849 (where it surfaced) · the
---separator trap (same shape, same exit code)Generated by Claude Code