You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
percolator-launch runs zero tests in CI on playground, the branch every PR targets. The app's own suite — 2702 tests — is never executed by any workflow. The ✅ Merge Gate still reports green, because it treats skipped as not failed.
I found this while checking why my own PR #2446 (which fixes the pnpm audit gate) showed Security Tests skipping.
The chain
1. Every real test job is gated on a directory that no longer exists.
test.yml gates four jobs on detect-packages, which probes for packages/shared/package.json:
So all four are skipped on every run, on every branch. This is not a transient path filter — it cannot become true without restoring the old monorepo layout.
2. pr-check.yml is gated the same way, per-step.
Every build and test step there carries if: hashFiles('packages/<x>/package.json') != ''. With packages/ gone, the only step in Build & Fast Tests that actually executes is:
- name: Build frontendrun: cd app && npx next build
3. Nothing anywhere runs the app suite.
grep -nE "vitest|app && .*test|test:app|pnpm test" across all four workflows (deploy.yml, pr-check.yml, smoke-test.yml, test.yml) returns zero matches. app/package.json defines "test": "vitest run" and no workflow ever calls it.
Skipped jobs report 'skipped', not 'failure'. Four of the five needs are always skipped, so the gate passes on type-check alone — while displaying a step literally named "All checks passed".
What actually runs on a playground PR
Check
Runs?
What it proves
Type Check (tsc --noEmit)
✅
types compile
Build & Fast Tests
⚠️
only next build
Vercel × 3
✅
deploy succeeds
Detect packages
✅
a no-op probe
Unit / Integration / E2E / Security Tests
❌ skipped
—
✅ Merge Gate
✅ green
that 4 gates were skipped
Impact
95 tests are failing on playground right now and nothing surfaces it. I measured this on clean origin/playground: 28 failed | 230 passed | 1 skipped test files, 95 failed | 2591 passed | 16 skipped tests. That number is invisible to CI, which is presumably why it has been allowed to grow.
Needs a decision before anyone implements it, because step 1 will immediately turn CI red:
Add a job that runs cd app && pnpm test. This is the real gap. It will fail on day one with those 95 tests, so land it as non-blocking (continue-on-error: true) first to make the number visible, then fix the tests, then make it blocking.
Fix the Merge Gate's skip semantics — require success() for the jobs that must run, rather than merely "not failure", so a silently-skipped gate can never read as a pass.
Summary
percolator-launchruns zero tests in CI onplayground, the branch every PR targets. The app's own suite — 2702 tests — is never executed by any workflow. The✅ Merge Gatestill reports green, because it treats skipped as not failed.I found this while checking why my own PR #2446 (which fixes the
pnpm auditgate) showedSecurity Tests skipping.The chain
1. Every real test job is gated on a directory that no longer exists.
test.ymlgates four jobs ondetect-packages, which probes forpackages/shared/package.json:packages/does not exist onplaygroundor onmain— both branches contain onlyapp/:So all four are skipped on every run, on every branch. This is not a transient path filter — it cannot become true without restoring the old monorepo layout.
2.
pr-check.ymlis gated the same way, per-step.Every build and test step there carries
if: hashFiles('packages/<x>/package.json') != ''. Withpackages/gone, the only step inBuild & Fast Teststhat actually executes is:3. Nothing anywhere runs the app suite.
grep -nE "vitest|app && .*test|test:app|pnpm test"across all four workflows (deploy.yml,pr-check.yml,smoke-test.yml,test.yml) returns zero matches.app/package.jsondefines"test": "vitest run"and no workflow ever calls it.4. The Merge Gate green-lights it.
Skipped jobs report
'skipped', not'failure'. Four of the five needs are always skipped, so the gate passes ontype-checkalone — while displaying a step literally named "All checks passed".What actually runs on a
playgroundPRtsc --noEmit)next buildImpact
playgroundright now and nothing surfaces it. I measured this on cleanorigin/playground:28 failed | 230 passed | 1 skippedtest files,95 failed | 2591 passed | 16 skippedtests. That number is invisible to CI, which is presumably why it has been allowed to grow.pnpm audit --audit-level=highstep — the one security gate in the repo — has never run here. It currently finds 2 critical + 17 high advisories (see fix(deps): raise stale pnpm override floors to current advisory patched versions #2446).Vercel – percolator-playgroundcheck fails: project is missing NEXT_PUBLIC_API_URL #2445 but inverted: instead of a red check trained to be ignored, it is a green check that certifies nothing.Proposed fix
Needs a decision before anyone implements it, because step 1 will immediately turn CI red:
cd app && pnpm test. This is the real gap. It will fail on day one with those 95 tests, so land it as non-blocking (continue-on-error: true) first to make the number visible, then fix the tests, then make it blocking.security-testsfromhas_packages—pnpm auditoperates on the workspace root and needs nopackages/. fix(deps): raise stale pnpm override floors to current advisory patched versions #2446 fixes the findings; this is what would make the gate actually execute.success()for the jobs that must run, rather than merely "not failure", so a silently-skipped gate can never read as a pass.packages/*scaffolding. These workflows describe a monorepo that no longer exists; leaving the dead conditionals invites the same confusion again. Related: [PROCESS] Open issues targetplayground, butmainis 288 commits behind — work is being done against a stale branch #2440 (main/playground drift).Happy to implement whichever shape is preferred — flagging rather than unilaterally turning everyone's CI red.