Scan

We scanned 200 AI-built apps. 89 of 200 still use GitHub Actions built for Node 20, which GitHub now runs on Node 24.

That is 45% of the apps. In all, 93 of the 200 apps (47%) have at least one problem that breaks now or will break. We count only the 16 rules a person checked against real code, and leave out traps that are only deprecated. Measured October 21, 2026.

What we found

Each trap links to its page, with the cause and the fix. Most common first.

TrapServiceKind of problemApps
JavaScript actions that declare node20 now run on Node 24 and the Node 20 opt-out stops workingGitHub ActionsAlready changed89
A stuck click burns the whole test and fails as 'Test timeout of 30000ms exceeded' instead of naming the locatorPlaywrightWrong results with no error16
Commit or tag pushed by a workflow with GITHUB_TOKEN does not trigger the next workflowGitHub ActionsWrong results with no error6
npx playwright install hangs after the first browser download on Playwright 1.55 to 1.59 with recent Node releasesPlaywrightBreaks now5
Vercel never caches an API route response even though it sets Cache-Control max-ageVercelWrong results with no error5
Server-side fetch to process.env.VERCEL_URL returns 401 or the Vercel login HTMLVercelBreaks now4
PutObject with ACL public-read fails with AccessControlListNotSupported on a new S3 bucketAmazon Web ServicesBreaks now2
Code calling gpt-3.5-turbo, gpt-4, gpt-4-turbo, o1, o3-mini or o4-mini breaks on 2026-10-23OpenAI APIWill break2
429 rate_limit_error that retries never clear because the monthly API spend limit was reachedAnthropic APIWrong results with no error2
Next.js 16 warns middleware is deprecated, and proxy.ts throws if you set runtime = 'edge'Next.jsDeprecated2
Prompt caching silently does nothing: cache_creation_input_tokens and cache_read_input_tokens stay 0Anthropic APIWrong results with no error2
Discord bot crashes on login with Used disallowed intents or close code 4014DiscordBreaks now1
Discord bot that echoes user text pings @everyone or whole rolesDiscordWrong results with no error1
Slack signature check always fails because the framework already parsed the bodySlackBreaks now1
latest_invoice.payment_intent is gone, so a new subscription has no client_secret to confirmStripeBreaks now1
Resend Audiences calls and audienceId still work but are deprecated in favor of SegmentsResendDeprecated1

By service

How many apps had at least one of these problems with each service.

  • GitHub Actions93 apps
  • Playwright20 apps
  • Vercel6 apps
  • Anthropic API4 apps
  • Amazon Web Services2 apps
  • OpenAI API2 apps
  • Next.js2 apps
  • Discord1 app
  • Slack1 app
  • Stripe1 app
  • Resend1 app

How we did it

We found the apps with GitHub code search for a CLAUDE.md, .cursorrules or AGENTS.md file, a sign that an AI coding tool was used. We kept an app only if it is public, is under 200 MB, has a package.json or pyproject.toml at the root, was pushed to in the last 90 days, and is not a fork or archived. This is a sample of what GitHub search returns, not of every AI-built app.

Each app was cloned, scanned with Footgun on our own machine, and deleted. No app is named here, and the results we publish hold nothing that identifies one.

We count only findings from rules a person checked against real code. The Node 20 rule was written before we scanned the second half of the apps and was not changed after. On that half, every one of its 23 hits we checked was right. Which other rules to count was decided after seeing all 200 apps.

Check your own app

Run npx @getfootgun/footgun scan in your project, or /footgun:scan in Claude Code with the Footgun plugin. Setup is in the docs.