diff --git a/generated/build-from-skills.manifest.json b/generated/build-from-skills.manifest.json index 80e5f63..7e0facf 100644 --- a/generated/build-from-skills.manifest.json +++ b/generated/build-from-skills.manifest.json @@ -1,6 +1,6 @@ { "version": 1, - "generatedAt": "2026-04-11T21:14:22.852Z", + "generatedAt": "2026-04-30T12:46:51.797Z", "templates": [ { "template": "agents/ai-architect.md.tmpl", diff --git a/generated/skill-manifest.json b/generated/skill-manifest.json index 5c0adb2..3c44f1a 100644 --- a/generated/skill-manifest.json +++ b/generated/skill-manifest.json @@ -1,5 +1,5 @@ { - "generatedAt": "2026-04-28T18:37:08.157Z", + "generatedAt": "2026-04-30T12:46:51.769Z", "version": 2, "skills": { "vercel-agent": { @@ -4316,7 +4316,8 @@ { "pattern": "export\\s+default\\s+function", "message": "Use named exports (GET, POST, PUT, DELETE) instead of default export for route handlers", - "severity": "error" + "severity": "error", + "skipIfFileContains": "(?:^|\\\\n)\\\\s*['\\\"]use\\\\s+client['\\\"]|export\\\\s+const\\\\s+(?:metadata|dynamic|revalidate|fetchCache|runtime)\\\\b|export\\\\s+default\\\\s+(?:async\\\\s+)?function\\\\s+\\\\w*(?:Page|Layout|Loading|Error|NotFound|Sitemap|Template|Default|sitemap|robots|opengraph|manifest)\\\\b|<[A-Z][A-Za-z0-9]*|\\\\{\\\\s*children\\\\s*[,}:]|MetadataRoute\\\\.|from\\\\s+['\\\"]next/(?:font|image|link|navigation|headers|cookies)['\\\"]" }, { "pattern": "NextApiRequest|NextApiResponse", diff --git a/skills/vercel-functions/SKILL.md b/skills/vercel-functions/SKILL.md index 16df88e..b32f58d 100644 --- a/skills/vercel-functions/SKILL.md +++ b/skills/vercel-functions/SKILL.md @@ -27,6 +27,13 @@ validate: pattern: export\s+default\s+function message: 'Use named exports (GET, POST, PUT, DELETE) instead of default export for route handlers' severity: error + # Skip on App Router page / layout / loading / error / not-found / sitemap / template / default files, + # which require a default export by Next.js convention. Detected via the 'use client' directive, + # an App Router config export (metadata, dynamic, revalidate, fetchCache, runtime), an `export default + # function` whose name matches an App Router file (Page / Layout / Loading / etc.), or any JSX + # element with a capitalised component tag — all signals that the file is a page-style file rather + # than a route handler. See anthropics/claude-code#54989. + skipIfFileContains: "(?:^|\\n)\\s*['\"]use\\s+client['\"]|export\\s+const\\s+(?:metadata|dynamic|revalidate|fetchCache|runtime)\\b|export\\s+default\\s+(?:async\\s+)?function\\s+\\w*(?:Page|Layout|Loading|Error|NotFound|Sitemap|Template|Default|sitemap|robots|opengraph|manifest)\\b|<[A-Z][A-Za-z0-9]*|\\{\\s*children\\s*[,}:]|MetadataRoute\\.|from\\s+['\"]next/(?:font|image|link|navigation|headers|cookies)['\"]" - pattern: NextApiRequest|NextApiResponse message: 'NextApiRequest/NextApiResponse are Pages Router types — use Web API Request/Response'