Vercel plugin: false positive "Use named exports" error on page.tsx / layout.tsx files
Bug
The Vercel plugin's posttooluse-validate hook fires a false positive ERROR on every page.tsx, layout.tsx, sitemap.ts, loading.tsx, and not-found.tsx file in a Next.js App Router project.
Error message:
[ERROR]: Use named exports (GET, POST, PUT, DELETE) instead of default export for route handlers
Root cause: The validation rule in vercel-functions skill uses the regex pattern export\s+default\s+function which matches ALL files containing a default export. However, this rule is only relevant for route.ts files (API route handlers). Next.js App Router requires default exports for page.tsx, layout.tsx, sitemap.ts, loading.tsx, error.tsx, and not-found.tsx.
Location in plugin: skills/vercel-functions/SKILL.md lines 27-29:
validate:
-
pattern: export\s+default\s+function
message: 'Use named exports (GET, POST, PUT, DELETE) instead of default export for route handlers'
severity: error
Impact
- Fires on every Write/Edit to any page or layout file
- Displays a misleading ERROR that the user has to mentally ignore every time
- Cannot be suppressed without disabling the entire
vercel-functionsskill - Particularly noisy in projects with many pages (my project has 44 page.tsx files)
Suggested fix
Add a filename filter so the rule only fires on route.ts / route.js files:
validate:
-
pattern: export\s+default\s+function
message: 'Use named exports (GET, POST, PUT, DELETE) instead of default export for route handlers'
severity: error
onlyIfFilename: 'route\.(ts|js)$'
Or alternatively, use skipIfFilename to exclude known App Router files:
skipIfFilename: 'page\.(tsx|jsx)$|layout\.(tsx|jsx)$|sitemap\.(ts|js)$|loading\.(tsx|jsx)$|error\.(tsx|jsx)$|not-found\.(tsx|jsx)$'
Environment
- Claude Code version: 2.1.119
- Vercel plugin version: 0.32.4 (claude-plugins-official)
- Framework: Next.js 16 App Router
- Plugin source:
vercel@claude-plugins-official
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗