Release v3.2.1: New plugins, dependency updates, and docs#55
Release v3.2.1: New plugins, dependency updates, and docs#55
Conversation
- Update nuxt-seo with v5 migration guide and module changes - Update nuxt-ui-v4 with new chat components (auth-form, chat-reasoning, chat-shimmer, chat-tool), AI SDK v5 integration, and Nuxt v4 features - Add new nuxt-v5 plugin scaffold - Regenerate marketplace.json
- Rewrote SKILL.md with supply chain protection, cooldown periods, and post-install script hardening - Added 7 reference files (compatibility-matrix, cooldown-config-guide, package-manager-security, secrets-and-containers, staged-upgrades, supply-chain-security, testing-strategy) - Added 7 security templates (bunfig, dependabot, devcontainer, npmrc, pnpm-workspace, renovate, yarnrc) - Updated README.md with comprehensive documentation - Updated plugin.json description and expanded keywords - Regenerated marketplace.json to reflect new description and keywords Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add v3.2.1 (2026-04-01) changelog entry with new plugins and updates - Update README counts 167→170, fix stale 176 references - Update version to 3.2.1, date to 2026-04-01 - Add February-April 2026 section to Recent Additions - Update category counts (tooling 29, frontend 26)
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughAdds a new Nuxt v5 plugin (skills, agents, templates, commands), reworks dependency‑upgrade into a supply‑chain security workflow with many templates and references, upgrades nuxt-seo and nuxt-ui-v4 to v5/AI patterns, introduces frontmatter validation tooling and CI, bulk-updates many plugin manifests/keywords, and updates release/README metadata. Changes
Sequence Diagram(s)sequenceDiagram
rect rgba(25, 115, 255, 0.5)
participant User
end
rect rgba(16, 185, 129, 0.5)
participant NuxtSetup as "nuxt-setup (agent/command)"
end
rect rgba(234, 88, 12, 0.5)
participant FS as "Repository / File System"
end
rect rgba(158, 12, 248, 0.5)
participant PM as "Package Manager (npm/pnpm/bun)"
end
rect rgba(111, 111, 111, 0.5)
participant Cloud as "Deployment target (Cloudflare/Vercel)"
end
User ->> NuxtSetup: invoke /nuxt-setup with options
NuxtSetup ->> FS: generate project files (nuxt.config, app.vue, templates, server/api)
NuxtSetup ->> FS: create composables, tests, and deployment templates
NuxtSetup ->> PM: output install command(s) per chosen PM
PM -->> NuxtSetup: install result (success/failure)
NuxtSetup ->> Cloud: provide deployment snippets/config
NuxtSetup -->> User: display summary and next-step commands
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
✨ Finishing Touches🧪 Generate unit tests (beta)
|
There was a problem hiding this comment.
Actionable comments posted: 12
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
plugins/nuxt-seo/skills/nuxt-seo/references/installation-guide.md (1)
293-301:⚠️ Potential issue | 🟡 MinorIncorrect command syntax for manual installation.
Line 294 shows
npx nuxt@nuxtjs/seounder the "Bun" comment, but this command is invalid. `npx nuxt` doesn't accept package names as arguments. The Bun equivalent should be `bun add `@nuxtjs/seo.🔧 Proposed fix
# Bun -npx nuxt `@nuxtjs/seo` +bun add `@nuxtjs/seo` # npm npm install `@nuxtjs/seo`🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-seo/skills/nuxt-seo/references/installation-guide.md` around lines 293 - 301, Under the "Bun" section replace the invalid command string 'npx nuxt `@nuxtjs/seo`' with the correct Bun install command 'bun add `@nuxtjs/seo`'; locate the "Bun" heading and the line containing 'npx nuxt `@nuxtjs/seo`' in installation-guide.md and update it so the three package manager examples read Bun: 'bun add `@nuxtjs/seo`', npm: 'npm install `@nuxtjs/seo`', pnpm: 'pnpm add `@nuxtjs/seo`'.plugins/nuxt-seo/skills/nuxt-seo/SKILL.md (1)
160-176:⚠️ Potential issue | 🟡 MinorInconsistent module naming in installation commands.
Lines 161-164 use bare module names (
nuxt-robots,nuxt-sitemap,nuxt-og-image) while the module table (lines 58-65) uses scoped names (@nuxtjs/robots,@nuxtjs/sitemap). Use consistent naming throughout.```bash -npx nuxt module add nuxt-robots -npx nuxt module add nuxt-sitemap -npx nuxt module add nuxt-og-image +npx nuxt module add `@nuxtjs/robots` +npx nuxt module add `@nuxtjs/sitemap` +npx nuxt module add nuxt-og-image<details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@plugins/nuxt-seo/skills/nuxt-seo/SKILL.mdaround lines 160 - 176, The
install commands use unscoped package names while the module table uses scoped
names; update the bash examples so package names are consistent: replace the two
commands installing nuxt-robots and nuxt-sitemap with their scoped equivalents
@nuxtjs/robotsand@nuxtjs/sitemap(leave nuxt-og-image as-is), and ensure the
modules array in the TypeScript example uses the same package identifiers
('@nuxtjs/robots', '@nuxtjs/sitemap', 'nuxt-og-image') so install commands and
config match.</details> </blockquote></details> </blockquote></details>🟡 Minor comments (16)
plugins/nuxt-v5/skills/nuxt-production/references/performance.md-3-3 (1)
3-3:⚠️ Potential issue | 🟡 MinorVersion inconsistency: Document references "Nuxt 4" but is located in the nuxt-v5 plugin.
Similar to
hydration.md, this file references "Nuxt 4" but resides inplugins/nuxt-v5/.Proposed fix
-Comprehensive guide to optimizing Nuxt 4 applications for maximum performance. +Comprehensive guide to optimizing Nuxt 5 applications for maximum performance.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-production/references/performance.md` at line 3, The document in performance.md incorrectly references "Nuxt 4"; update that wording to "Nuxt 5" (and any other occurrences) to match the nuxt-v5 plugin set; also mirror the same fix applied in hydration.md by searching performance.md for "Nuxt 4" and replacing with "Nuxt 5", and scan the file for other version-specific terms or examples that need adjusting to Nuxt 5 compatibility.plugins/nuxt-v5/skills/nuxt-production/references/hydration.md-3-3 (1)
3-3:⚠️ Potential issue | 🟡 MinorVersion inconsistency: Document references "Nuxt 4" but is located in the nuxt-v5 plugin.
This file is in
plugins/nuxt-v5/but the description references "Nuxt 4". Should this be updated to "Nuxt 5" for consistency with the plugin directory?Proposed fix
-Complete guide to SSR hydration in Nuxt 4, common issues, and solutions. +Complete guide to SSR hydration in Nuxt 5, common issues, and solutions.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-production/references/hydration.md` at line 3, The document in plugins/nuxt-v5 (file hydration.md) incorrectly references "Nuxt 4"; update that wording to "Nuxt 5" for consistency—search for the string "Nuxt 4" in hydration.md (and any nearby headings or metadata in that file) and replace with "Nuxt 5", and ensure any contextual mentions (e.g., "Nuxt 4 SSR" or examples/comments) are adjusted so the document consistently targets Nuxt 5.plugins/nuxt-v5/skills/nuxt-production/references/testing-vitest.md-3-3 (1)
3-3:⚠️ Potential issue | 🟡 MinorVersion inconsistency: Document references "Nuxt 4" but is located in the nuxt-v5 plugin.
This is the third file in the nuxt-v5 plugin that references "Nuxt 4" instead of "Nuxt 5".
Proposed fix
-Comprehensive guide to testing Nuxt 4 applications with Vitest and `@nuxt/test-utils`. +Comprehensive guide to testing Nuxt 5 applications with Vitest and `@nuxt/test-utils`.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-production/references/testing-vitest.md` at line 3, The document in the nuxt-v5 plugin references "Nuxt 4" incorrectly; update the text in testing-vitest.md (search for the literal "Nuxt 4") to "Nuxt 5" so the guide matches the nuxt-v5 plugin context and ensure any other mentions of "Nuxt 4" in that file are replaced consistently.plugins/nuxt-v5/skills/nuxt-server/references/server.md-31-31 (1)
31-31:⚠️ Potential issue | 🟡 MinorBroken anchor link in Table of Contents.
The link
#error-handlingwon't resolve correctly because the actual heading is "Error Handling (v5)" which generates the anchor#error-handling-v5.Proposed fix
-- [Error Handling](`#error-handling`) +- [Error Handling](`#error-handling-v5`)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-server/references/server.md` at line 31, The Table of Contents link `[Error Handling](`#error-handling`)` is broken because the actual heading is "Error Handling (v5)" which produces the anchor `#error-handling-v5`; update the TOC entry in plugins/nuxt-v5/skills/nuxt-server/references/server.md to point to `#error-handling-v5` (or rename the heading to remove “(v5)” if you prefer the original anchor) so the anchor resolves correctly.plugins/nuxt-seo/skills/nuxt-seo/references/advanced-seo-guides.md-5-5 (1)
5-5:⚠️ Potential issue | 🟡 MinorUse a direct relative path for the migration guide reference.
Line 5 currently points to
references/v5-migration-guide.md; from this file location,./v5-migration-guide.mdis clearer and avoids path ambiguity.Suggested doc tweak
-> **v5 Note**: Several server-side APIs changed in v5. See `references/v5-migration-guide.md` for details. +> **v5 Note**: Several server-side APIs changed in v5. See `./v5-migration-guide.md` for details.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-seo/skills/nuxt-seo/references/advanced-seo-guides.md` at line 5, Update the migration-guide link in advanced-seo-guides.md: replace the relative path string "references/v5-migration-guide.md" with a direct relative path "./v5-migration-guide.md" so the link is unambiguous from this document's location; locate the reference text "**v5 Note**: Several server-side APIs changed in v5. See `references/v5-migration-guide.md` for details." and change the backticked path accordingly.plugins/dependency-upgrade/skills/dependency-upgrade/templates/npmrc-security.tmpl-9-10 (1)
9-10:⚠️ Potential issue | 🟡 MinorUpdate the npm CLI version requirement in the npmrc template comment.
The
allow-git=noneoption was introduced in npm CLI 11.9.0, not 11.10.0. Update line 9 to reflect the correct version:npm CLI 11.9.0+instead ofnpm CLI 11.10.0+.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/dependency-upgrade/skills/dependency-upgrade/templates/npmrc-security.tmpl` around lines 9 - 10, Update the inline comment above the `allow-git=none` setting in the npmrc template to state the correct npm CLI version; change the text that currently says "npm CLI 11.10.0+" to "npm CLI 11.9.0+" so the comment accurately reflects when `allow-git=none` was introduced (the setting is defined on the `allow-git=none` line in the npmrc-security.tmpl template).plugins/nuxt-v5/skills/nuxt-data/references/composables.md-1-3 (1)
1-3:⚠️ Potential issue | 🟡 MinorVersion mismatch: Document references Nuxt 4 but is in nuxt-v5 plugin.
Line 3 states "Comprehensive guide to creating and using composables in Nuxt 4" but this file resides in
plugins/nuxt-v5/. Update to reference Nuxt 5 for consistency with the plugin scope.Proposed fix
# Composables - Advanced Patterns -Comprehensive guide to creating and using composables in Nuxt 4. +Comprehensive guide to creating and using composables in Nuxt 5.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-data/references/composables.md` around lines 1 - 3, Update the heading sentence that currently reads "Comprehensive guide to creating and using composables in Nuxt 4" to reference Nuxt 5 (e.g., "Comprehensive guide to creating and using composables in Nuxt 5"); search the same file for any other "Nuxt 4" occurrences and replace them with "Nuxt 5" to keep the documentation consistent with the nuxt-v5 plugin.plugins/nuxt-seo/skills/nuxt-seo/references/installation-guide.md-407-419 (1)
407-419:⚠️ Potential issue | 🟡 MinorMislabeled package manager command.
Line 409-410 is labeled as "Bun" but shows an
npm uninstallcommand. This should either be labeled correctly or changed tobun remove.🔧 Proposed fix
Remove individual packages: ```bash -# Bun -npm uninstall nuxt-robots nuxt-sitemap nuxt-og-image nuxt-schema-org +# Bun +bun remove nuxt-robots nuxt-sitemap nuxt-og-image nuxt-schema-org # npm npm uninstall nuxt-robots nuxt-sitemap nuxt-og-image nuxt-schema-org🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-seo/skills/nuxt-seo/references/installation-guide.md` around lines 407 - 419, The "Bun" label in the uninstall section is incorrect: replace the npm command under the "Bun" heading with the proper Bun command so the block shows "bun remove nuxt-robots nuxt-sitemap nuxt-og-image nuxt-schema-org" while leaving the "npm" section unchanged; update the text in the installation-guide.md near the uninstall examples so the "Bun" heading matches the command shown.plugins/dependency-upgrade/skills/dependency-upgrade/references/staged-upgrades.md-146-162 (1)
146-162:⚠️ Potential issue | 🟡 MinorRegex
test()beforereplace()may skip matches.Using
test()on a global regex (/gflag) advanceslastIndex, so the subsequentreplace()may skip the first match. Either usereplace()alone (it's a no-op if no match) or resetlastIndexaftertest().🔧 Proposed fix
for (const [pattern, replacement] of replacements) { - if (pattern.test(content)) { - content = content.replace(pattern, replacement); + const newContent = content.replace(pattern, replacement); + if (newContent !== content) { + content = newContent; changed = true; totalChanges++; } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/dependency-upgrade/skills/dependency-upgrade/references/staged-upgrades.md` around lines 146 - 162, The loop uses pattern.test(content) before content.replace(), which breaks for global regexes because test() advances lastIndex; instead call content.replace(pattern, replacement) directly and detect changes by comparing the new string to the old (e.g., newContent !== content) to set changed and write the file; update totalChanges by the number of replacements found (use (content.match(pattern) || []).length) and assign content = newContent; adjust references to files, content, replacements, pattern, replacement, changed, and totalChanges accordingly.plugins/nuxt-ui-v4/skills/nuxt-ui-v4/references/nuxt-v4-features.md-166-178 (1)
166-178:⚠️ Potential issue | 🟡 MinorTruncated content placeholder left in document.
Line 168 contains
...)which appears to be leftover from an incomplete edit. The v4.2.0 components section header exists but the actual component list was removed, leaving only this artifact before the v4.6 section.🔧 Proposed fix - Remove or complete the section
### New Components (v4.2.0) -...) - -### New Components (v4.6) +See v4.6 below for the latest additions. + +### New Components (v4.6)Or if v4.2.0 components should be listed, add them back.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-ui-v4/skills/nuxt-ui-v4/references/nuxt-v4-features.md` around lines 166 - 178, Remove the stray placeholder "...)" under the "### New Components (v4.2.0)" heading (it is an unfinished edit) and either delete the entire empty v4.2.0 section or restore the original component list for v4.2.0 so the document flows correctly before the "### New Components (v4.6)" section; search for the "### New Components (v4.2.0)" header and the exact token "...)" to locate the spot to fix in nuxt-v4-features.md and update accordingly.plugins/nuxt-seo/skills/nuxt-seo/references/modules-overview.md-10-11 (1)
10-11:⚠️ Potential issue | 🟡 MinorBroken anchor links in Table of Contents.
The anchor fragments don't match the actual heading IDs. When
@nuxtjs/robotsand@nuxtjs/sitemapwere renamed fromnuxt-robotsandnuxt-sitemap, the ToC anchors weren't updated to match.🔧 Proposed fix
-2. [`@nuxtjs/robots` (Robots.txt & Bot Detection)](`#2-nuxt-robots-robotstxt--bot-detection`) -3. [`@nuxtjs/sitemap` (XML Sitemap Generation)](`#3-nuxt-sitemap-xml-sitemap-generation`) +2. [`@nuxtjs/robots` (Robots.txt & Bot Detection)](`#2-nuxtjsrobots-robotstxt--bot-detection`) +3. [`@nuxtjs/sitemap` (XML Sitemap Generation)](`#3-nuxtjssitemap-xml-sitemap-generation`)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-seo/skills/nuxt-seo/references/modules-overview.md` around lines 10 - 11, Update the broken Table of Contents anchor fragments so they match the actual heading IDs for the renamed packages: replace the existing anchors linking to "#2-nuxt-robots-robotstxt--bot-detection" and "#3-nuxt-sitemap-xml-sitemap-generation" with anchors that reflect the current headings for "@nuxtjs/robots" and "@nuxtjs/sitemap" (e.g., "#2-@nuxtjs/robots-robotstxt--bot-detection" and "#3-@nuxtjs/sitemap-xml-sitemap-generation" or whatever the generated slugger produces), ensuring the ToC entries for `@nuxtjs/robots` and `@nuxtjs/sitemap` exactly match the heading IDs in the document.plugins/nuxt-v5/skills/nuxt-production/references/deployment-cloudflare.md-1-4 (1)
1-4:⚠️ Potential issue | 🟡 MinorInconsistent Nuxt version reference.
The document header mentions "Nuxt 4 applications" but this file is located in the
nuxt-v5plugin. Update to reflect Nuxt 5.-Comprehensive guide to deploying Nuxt 4 applications on Cloudflare Pages and Workers, including NuxtHub integration and all bindings. +Comprehensive guide to deploying Nuxt 5 applications on Cloudflare Pages and Workers, including NuxtHub integration and all bindings.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-production/references/deployment-cloudflare.md` around lines 1 - 4, Update the document's Nuxt version references: change the header phrase "Nuxt 4 applications" to "Nuxt 5 applications" and scan the file for any other occurrences of "Nuxt 4" (e.g., in the opening line or description) and replace them with "Nuxt 5" so the content matches the nuxt-v5 plugin context.plugins/nuxt-v5/skills/nuxt-core/templates/nuxt.config.ts-82-96 (1)
82-96:⚠️ Potential issue | 🟡 MinorRemove the unnecessary empty
optimizeDeps.includearray.The
optimizeDeps.include: []configuration has no effect and can be safely removed.♻️ Remove unnecessary empty array
vite: { build: { rolldownOptions: { output: { manualChunks: { vendor: ['vue', 'vue-router'] } } } - }, - - optimizeDeps: { - include: [] } },🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-core/templates/nuxt.config.ts` around lines 82 - 96, Remove the no-op empty array optimizeDeps.include from the Vite config: locate the vite block (vite: { ... }) and delete the optimizeDeps: { include: [] } entry so the configuration no longer contains the unnecessary optimizeDeps.include key; ensure commas/braces around vite.build.rolldownOptions and the remaining vite settings are adjusted so the object remains valid.plugins/dependency-upgrade/skills/dependency-upgrade/SKILL.md-193-198 (1)
193-198:⚠️ Potential issue | 🟡 MinorTypo: "pnnpm" should be "pnpm".
Proposed fix
-**pnnpm (10.0+)**: Disabled by default. Allow specific packages in `pnpm-workspace.yaml`: +**pnpm (10.0+)**: Disabled by default. Allow specific packages in `pnpm-workspace.yaml`:🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/dependency-upgrade/skills/dependency-upgrade/SKILL.md` around lines 193 - 198, The README/skill documentation contains a typo: the heading and reference "**pnnpm (10.0+)**" should be corrected to "**pnpm (10.0+)**"; update the SKILL.md entry (the line containing the bolded package name) to replace "pnnpm" with "pnpm" so the documentation correctly references pnpm and its example `pnpm-workspace.yaml` settings.plugins/nuxt-ui-v4/README.md-224-225 (1)
224-225:⚠️ Potential issue | 🟡 MinorVersion number inconsistency with PR objectives.
The README shows
Version: 3.1.0but the PR is for release v3.2.1. This should be updated to reflect the correct version.Proposed fix
**Last Updated**: 2026-03-30 -**Version**: 3.1.0 +**Version**: 3.2.1🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-ui-v4/README.md` around lines 224 - 225, The README contains an incorrect version string "Version: 3.1.0" that must be updated to match the release v3.2.1; update the literal "Version: 3.1.0" to "Version: 3.2.1" in the README (look for the Version header line near the "Last Updated" metadata) and verify the displayed version exactly matches the PR/release tag.plugins/nuxt-v5/skills/nuxt-data/templates/composables/useAuth.ts-74-84 (1)
74-84:⚠️ Potential issue | 🟡 MinorSession check doesn't clear auth state when user is missing from response.
When
checkSessionreceives a successful response butdata.useris undefined/null (e.g., session expired), the existinguserandisAuthenticatedvalues remain unchanged. This could leave stale authentication state.Proposed fix to handle missing user in session response
try { const data = await $fetch<{ user?: User }>('/api/auth/session') if (data?.user) { state.value.user = data.user state.value.isAuthenticated = true + } else { + state.value.user = null + state.value.isAuthenticated = false } // Clear any previous session errors on success state.value.sessionError = null state.value.lastSessionCheck = Date.now()🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-data/templates/composables/useAuth.ts` around lines 74 - 84, The session check currently only updates state when data.user exists, leaving stale auth when the response is successful but user is missing; inside the checkSession try block (the $fetch call) ensure you explicitly clear authentication when data.user is falsy by setting state.value.user = null and state.value.isAuthenticated = false (while still clearing state.value.sessionError and updating state.value.lastSessionCheck), so that checkSession reliably resets auth state when the session has expired or no user is returned.🧹 Nitpick comments (22)
plugins/dependency-upgrade/skills/dependency-upgrade/references/compatibility-matrix.md (1)
101-103: Remove or link hardcoded Node.js LTS dates to official schedule.Node 18's "LTS until April 2025" is already outdated. Rather than maintaining hardcoded dates, link to the official Node.js release schedule or GitHub's Release WG where EOL dates are maintained. Update the table to focus on version compatibility and npm support, removing temporal data that decays.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/dependency-upgrade/skills/dependency-upgrade/references/compatibility-matrix.md` around lines 101 - 103, Update the compatibility table in compatibility-matrix.md by removing hardcoded LTS end-date text (e.g., the "LTS until April 2025/2026/2027" cells) and instead either add a link to the official Node.js release schedule (https://nodejs.org/en/about/releases) or the Node.js Release WG (https://github.com/nodejs/release) in a table caption or a new "Notes" column; keep rows like "18 LTS | 9.x | Yes" focused on version compatibility and npm support (refer to the three rows shown for 18/20/22 LTS) and ensure no static temporal data remains in those cells.plugins/nuxt-v5/skills/nuxt-production/references/testing-vitest.md (1)
370-384: Mock example missingrefimport.The
useFetchmock example usesref()but doesn't show the import. This could confuse users following the documentation.Proposed fix
### Mock useFetch ```typescript -import { vi } from 'vitest' +import { vi } from 'vitest' +import { ref } from 'vue' vi.mock('#app', () => ({ useFetch: vi.fn((url) => ({🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-production/references/testing-vitest.md` around lines 370 - 384, The example mock uses ref() but doesn't import it, causing the snippet to be invalid; update the mock example by adding an import for ref from 'vue' alongside the existing import of vi from 'vitest' so the mocked useFetch (in the vi.mock callback) can return data: ref(...), error: ref(...), and pending: ref(...) without errors; ensure the top of the snippet includes "import { ref } from 'vue'" and keep the vi.mock / useFetch names unchanged.plugins/nuxt-v5/skills/nuxt-production/references/performance.md (1)
398-412: Clarify Terser dependency requirement forterserOptions.Vite uses esbuild for minification by default. The
terserOptionsconfiguration only works ifterseris explicitly installed as a dependency and the build is configured to use it. Consider adding a note about this requirement.Suggested clarification
4. **Enable tree shaking** ```typescript // nuxt.config.ts +// Note: Requires `terser` to be installed: npm install -D terser export default defineNuxtConfig({ vite: { build: { + minify: 'terser', // Switch from esbuild to terser terserOptions: { compress: { drop_console: true // Remove console.logs } } } } })</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@plugins/nuxt-v5/skills/nuxt-production/references/performance.mdaround
lines 398 - 412, The docs show using terserOptions but don't state that Vite
uses esbuild by default; update the nuxt.config.ts example and note that
terserOptions only works when you switch minification to terser and install
terser as a dev dependency (e.g., npm install -D terser). Instruct readers to
set minify: 'terser' alongside terserOptions in the defineNuxtConfig Vite build
block and add a short comment/note about installing terser so terserOptions will
be applied.</details> </blockquote></details> <details> <summary>plugins/dependency-upgrade/README.md (1)</summary><blockquote> `59-66`: **Add language identifier to fenced code block.** The "Quick Usage" code block is missing a language identifier, which causes a markdownlint warning. Since these are example user prompts rather than executable code, use `text` as the language identifier. <details> <summary>📝 Proposed fix for markdown linting</summary> ```diff ## Quick Usage -``` +```text "Set up secure dependency management for my project using Bun" "Configure a 7-day cooldown period for npm installs" "Help me upgrade React from 18 to 19 safely" "Set up Dependabot with a cooldown period" "Configure post-install script blocking for pnpm"</details> As per static analysis, fenced code blocks should have a language specified (markdownlint rule MD040). <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@plugins/dependency-upgrade/README.mdaround lines 59 - 66, The "Quick Usage"
fenced code block is missing a language identifier; update the markdown in the
README's "Quick Usage" block to include the language tagtexton the opening
triple backticks (so the block that contains the five example prompts istext ...). Locate the fenced block in the README (the example prompts like "Set
up secure dependency management for my project using Bun") and addtextafter
the opening ``` to satisfy markdownlint MD040.</details> </blockquote></details> <details> <summary>README.md (1)</summary><blockquote> `148-162`: **New additions section is well-documented.** The "February - April 2026" section clearly documents the new plugins (nuxt-v5, supabase-postgres-best-practices, threejs), infrastructure additions, and plugin enhancements included in this release. *Minor typographical note*: Static analysis suggests using an en dash (–) instead of a hyphen (-) in "February - April 2026" for proper date range formatting. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@README.md` around lines 148 - 162, Replace the hyphen in the heading "February - April 2026" with an en dash (–) to use proper date range punctuation; locate the heading text "February - April 2026" in the README and update it to "February – April 2026" while ensuring surrounding formatting (the markdown heading and surrounding section content for Full-Stack Frameworks, Infrastructure, and Plugin Enhancements) remains unchanged. ``` </details> </blockquote></details> <details> <summary>plugins/nuxt-v5/skills/nuxt-data/references/composables.md (1)</summary><blockquote> `767-767`: **Stale "Last Updated" date.** The date shows `2025-11-09` but this is a new file in a v3.2.1 release (April 2026). Consider updating to reflect the actual creation date. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-data/references/composables.md` at line 767, Update the stale "**Last Updated**" metadata in plugins/nuxt-v5/skills/nuxt-data/references/composables.md by replacing the 2025-11-09 date with the actual creation/release date for this v3.2.1 file (April 2026); locate the "**Last Updated**:" line and set it to the correct ISO-style date (e.g., 2026-04-XX) that reflects the file's creation in the v3.2.1 release. ``` </details> </blockquote></details> <details> <summary>plugins/dependency-upgrade/skills/dependency-upgrade/references/staged-upgrades.md (2)</summary><blockquote> `22-35`: **Add language specifier to code block.** The code block showing upgrade ordering lacks a language specifier, which triggers a markdown lint warning. Adding `text` or `plaintext` would resolve this. <details> <summary>📝 Proposed fix</summary> ```diff -``` +```text 1. TypeScript / build tools 2. Core framework (React, Next.js, etc.) 3. Routing ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@plugins/dependency-upgrade/skills/dependency-upgrade/references/staged-upgrades.md
around lines 22 - 35, The fenced code block under "Phase 2: Ordering" is missing
a language specifier and triggers markdown-lint; update the triple-backtick
fence that contains the ordered list (the block starting with "1. TypeScript /
build tools") to include a language such as text or plaintext (e.g., replacewithtext) so the linter recognizes it as plain text while preserving the
existing list content.</details> --- `194-218`: **Rollback script has potential state issue.** The script does `git stash` then `git checkout -b upgrade-branch`, but if the upgrade fails, uncommitted stashed changes are never restored. Consider adding `git stash pop` in the failure path or documenting that stash is intentionally discarded. <details> <summary>💡 Suggested improvement</summary> ```diff # Save current state -git stash +git stash push -m "pre-upgrade-backup" git checkout -b upgrade-branch # Attempt upgrade @@ -213,4 +213,5 @@ echo "Upgrade failed, rolling back" git checkout main git branch -D upgrade-branch + git stash pop # Restore any uncommitted work bun install # Restore from lockfile fi ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/dependency-upgrade/skills/dependency-upgrade/references/staged-upgrades.md` around lines 194 - 218, The rollback.sh script stashes local changes then creates upgrade-branch but never restores the stash on failure, risking lost uncommitted work; update the failure path in rollback.sh to restore the stashed changes (e.g. run git stash pop or git stash apply followed by git stash drop) before deleting upgrade-branch and switching back to main, and ideally also pop or drop the stash on successful commit so the working tree is consistent; ensure you reference the git stash/gist handling near the git checkout -b upgrade-branch, the failure branch that checks bun test && bun run build, and the cleanup steps that run git checkout main and git branch -D upgrade-branch. ``` </details> </blockquote></details> <details> <summary>plugins/dependency-upgrade/skills/dependency-upgrade/references/secrets-and-containers.md (1)</summary><blockquote> `85-90`: **Redundant `--env-file` flags in example.** Line 89 shows `op run --env-file="./.env" -- node --env-file="./.env" server.js` which passes `--env-file` twice. If `op run` is resolving secrets from `.env`, Node's `--env-file` would re-read the unresolved secret references. Consider clarifying the intent or simplifying. <details> <summary>💡 Suggested clarification</summary> ```diff # Run with secret injection op run -- npm start -# With explicit env file -op run --env-file="./.env" -- node --env-file="./.env" server.js +# With explicit env file (op resolves secrets before passing to node) +op run --env-file="./.env" -- node server.js ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/dependency-upgrade/skills/dependency-upgrade/references/secrets-and-containers.md` around lines 85 - 90, The example shows redundant --env-file usage: the command `op run --env-file="./.env" -- node --env-file="./.env" server.js` passes the same env file to both `op run` and the `node` process, which is confusing; update the example to express the intended behavior by either removing the Node flag when `op run` is supplying the environment (e.g., `op run --env-file="./.env" -- node server.js`) or, if the intent is to demonstrate Node reading the file itself, move the env-file only to `node` (e.g., `op run -- node --env-file="./.env" server.js`), and add a short clarifying note referencing `op run` and `node --env-file` so readers know which process is responsible for loading the .env. ``` </details> </blockquote></details> <details> <summary>plugins/nuxt-v5/skills/nuxt-core/SKILL.md (1)</summary><blockquote> `46-82`: **Consider adding language identifier to directory structure code block.** Static analysis flagged this code block for missing a language specifier. For directory structure diagrams, you could use `text` or `plaintext`. <details> <summary>♻️ Proposed fix</summary> ```diff -``` +```text my-nuxt-app/ ├── app/ # Default srcDir ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@plugins/nuxt-v5/skills/nuxt-core/SKILL.mdaround lines 46 - 82, Update the
fenced directory-structure code block in SKILL.md to include a language
identifier (e.g., change the openingtotext) so the block is treated as
plain text; locate the directory diagram inside SKILL.md (the multiline block
starting with "my-nuxt-app/") and modify only the opening fence to ```text (no
other content changes).</details> </blockquote></details> <details> <summary>plugins/dependency-upgrade/skills/dependency-upgrade/references/testing-strategy.md (1)</summary><blockquote> `7-15`: **Consider adding a language identifier to the fenced code block.** Static analysis flagged this code block for missing a language specifier. Since this is an ASCII diagram, you could use `text` or `plaintext` as the language identifier to satisfy linters while preserving the content. <details> <summary>♻️ Proposed fix</summary> ```diff -``` +```text E2E Tests / \ Integration Tests / \ Unit Tests / \ Static Analysis (tsc, lint) ``` ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@plugins/dependency-upgrade/skills/dependency-upgrade/references/testing-strategy.md
around lines 7 - 15, The fenced ASCII-art code block in testing-strategy.md
lacks a language identifier which triggers static analysis; update the
triple-backtick fence to include a plain-language tag (e.g., "text" or
"plaintext") so the block becomestext (orplaintext) and preserves the
diagram while satisfying linters—target the ASCII diagram block between the
existing backticks in the file.</details> </blockquote></details> <details> <summary>plugins/nuxt-v5/skills/nuxt-server/templates/server/api/blog/index.get.ts (1)</summary><blockquote> `46-54`: **Avoid duplicate `Number(count)` conversion.** `Number(count)` is called twice on lines 51 and 52. Store the result in a variable for cleaner code. <details> <summary>♻️ Proposed fix</summary> ```diff + const total = Number(count) + return { data: allPosts, meta: { page, limit, - total: Number(count), - totalPages: Math.ceil(Number(count) / limit) + total, + totalPages: Math.ceil(total / limit) } } ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-server/templates/server/api/blog/index.get.ts` around lines 46 - 54, The code calls Number(count) twice when building the response object; assign Number(count) to a local variable (e.g., totalCount) before the return and use that variable for both total and totalPages calculations so the conversion is done once; update the return object (data: allPosts, meta: { page, limit, total: totalCount, totalPages: Math.ceil(totalCount / limit) }) and keep references to page, limit, allPosts, and count as-is. ``` </details> </blockquote></details> <details> <summary>plugins/nuxt-v5/skills/nuxt-production/templates/wrangler.toml (1)</summary><blockquote> `4-4`: **Compatibility date is set to a future date.** The `compatibility_date = "2025-12-19"` appears to be a placeholder or future date. Consider using a current or recent date, or add a comment indicating this should be updated to the deployment date. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-production/templates/wrangler.toml` at line 4, The compatibility_date in wrangler.toml is set to a future placeholder ("2025-12-19"); update the compatibility_date value to a current/recent deployment date (or replace it with a template placeholder and add a comment) so deployments use a realistic Cloudflare Workers compatibility date — look for the compatibility_date key in wrangler.toml and either set it to today's/recent date or add a clear comment explaining it must be updated at deploy time. ``` </details> </blockquote></details> <details> <summary>plugins/nuxt-v5/skills/nuxt-server/SKILL.md (1)</summary><blockquote> `1-519`: **SKILL.md exceeds 500-line limit.** At 519 lines, this file slightly exceeds the 500-line limit specified in the coding guidelines. Consider extracting one of the larger sections (e.g., "Database Integration" at lines 319-374 or "File Uploads" at lines 376-401) to a reference file. As per coding guidelines: "Maintain SKILL.md files at less than 500 lines after refactoring to ensure progressive disclosure of content." <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-server/SKILL.md` around lines 1 - 519, SKILL.md is 519 lines and exceeds the 500-line limit; extract one large section (recommend "Database Integration" or "File Uploads") into a new reference file (e.g., references/server-database.md or references/server-uploads.md), keep a short summary + pointer in SKILL.md, and remove the full copied section so SKILL.md drops below 500 lines. Update any internal references in SKILL.md that point to the moved content (e.g., "Database Integration", "File Uploads", and examples like useDB, readMultipartFormData) to reference the new file and ensure exported section titles and example symbols (useDB, drizzle, R2, readMultipartFormData) remain accurate in the new reference. Ensure metadata/versioning remains unchanged and run a quick line-count to confirm SKILL.md is under 500 lines. ``` </details> </blockquote></details> <details> <summary>plugins/nuxt-v5/commands/nuxt-setup.md (1)</summary><blockquote> `26-39`: **Consider adding language identifiers to code blocks.** The wizard configuration blocks lack language specifiers. While these aren't standard code, adding `yaml` or `text` would improve markdown lint compliance and editor syntax highlighting. <details> <summary>💡 Example fix for one block</summary> ```diff -``` +```yaml header: "Project Type" question: "What type of application are you building?" ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@plugins/nuxt-v5/commands/nuxt-setup.mdaround lines 26 - 39, The markdown
code blocks for the wizard config (the snippet containing keys like header,
question, options and the "Store as: projectType" note) should include a
language identifier (e.g., ```yaml) to improve linting and editor highlighting;
update each such block by prefixing the opening backticks with the appropriate
language (yaml or text) for all similar config/code blocks in the file.</details> </blockquote></details> <details> <summary>plugins/nuxt-ui-v4/skills/nuxt-ui-v4/SKILL.md (1)</summary><blockquote> `1-6`: **Description exceeds maximum length guideline.** The description is ~276 characters, exceeding the 200-character maximum specified in coding guidelines. Consider condensing while preserving key information. <details> <summary>💡 Suggested shorter description</summary> ```diff -description: Nuxt UI v4 component library for building Nuxt v4 applications. 125+ accessible components with Tailwind v4, Reka UI, dark mode, theming. Use for dashboards, forms, overlays, editors, page layouts, pricing pages, or encountering component, theming, or TypeScript errors. +description: Nuxt UI v4 - 125+ accessible components with Tailwind v4, Reka UI, theming. Use for dashboards, forms, AI chat, page layouts, or component/TypeScript errors. ``` </details> As per coding guidelines: "Keep skill descriptions concise (ideal <100 characters, maximum <200 characters)". <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-ui-v4/skills/nuxt-ui-v4/SKILL.md` around lines 1 - 6, The SKILL.md description for "name: nuxt-ui-v4" is too long (>200 chars); update the "description:" field to a concise version under 200 characters (ideally <100) that preserves key points (Nuxt UI v4, 125+ accessible components, Tailwind v4, theming/dark mode, MIT license) and replace the long sentence with a shortened phrase so the file's description meets the coding guideline. ``` </details> </blockquote></details> <details> <summary>plugins/nuxt-ui-v4/skills/nuxt-ui-v4/templates/components/ui-chat-full.vue (1)</summary><blockquote> `107-118`: **Consider adding type annotation for message parameter.** The `message: any` type loses type safety. Consider using the proper AI SDK message type if available. <details> <summary>💡 Suggested improvement</summary> ```diff -async function copyMessage(message: any) { +async function copyMessage(message: { id: string; parts?: Array<{ type: string; text?: string }> }) { ``` Or import the proper type from AI SDK if available: ```typescript import type { UIMessage } from '@ai-sdk/vue' ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-ui-v4/skills/nuxt-ui-v4/templates/components/ui-chat-full.vue` around lines 107 - 118, The copyMessage function currently types its parameter as message: any which loses type safety; change the signature to use the proper AI SDK message type (e.g., import and use UIMessage or the correct exported message type) and update usages inside copyMessage (such as message.parts and isTextUIPart checks) to reflect that type so TypeScript can validate properties—import the type (for example import type { UIMessage } from '@ai-sdk/vue') and replace message: any with message: UIMessage (or the SDK-equivalent) in the copyMessage declaration. ``` </details> </blockquote></details> <details> <summary>plugins/nuxt-v5/skills/nuxt-data/SKILL.md (1)</summary><blockquote> `110-112`: **Consider safer error handling in the example.** The error object may not have a `message` property depending on the error type. Consider using a safer pattern in the example code. <details> <summary>💡 Suggested improvement</summary> ```diff } catch (error) { - return { success: false, error: error.message } + return { success: false, error: error instanceof Error ? error.message : 'Login failed' } } finally { ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-data/SKILL.md` around lines 110 - 112, The catch block currently returns error.message which can be undefined for non-Error throws; update the catch to normalize the thrown value (e.g., const errMsg = error instanceof Error ? error.message : String(error)) and return { success: false, error: errMsg } (or use JSON.stringify for objects) so the example reliably produces a string error; locate the catch that references error.message and replace with this safer pattern. ``` </details> </blockquote></details> <details> <summary>plugins/nuxt-v5/skills/nuxt-production/references/deployment-cloudflare.md (1)</summary><blockquote> `762-764`: **Update the "Last Updated" date.** The date (2025-11-09) appears stale given this is part of the v3.2.1 release (2026-04-01). <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-production/references/deployment-cloudflare.md` around lines 762 - 764, Update the "Last Updated" date string under the document header (the line containing "**Last Updated**: 2025-11-09") to reflect the v3.2.1 release date by changing it to "**Last Updated**: 2026-04-01" so the document timestamp matches the release. ``` </details> </blockquote></details> <details> <summary>plugins/dependency-upgrade/skills/dependency-upgrade/references/supply-chain-security.md (1)</summary><blockquote> `331-333`: **Add language identifier to fenced code block.** The code block showing the Snyk URL pattern lacks a language identifier. Use `text` or `plaintext` for non-code content. ```diff -``` +```text https://security.snyk.io/package/npm/<package-name> ``` ``` <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@plugins/dependency-upgrade/skills/dependency-upgrade/references/supply-chain-security.md
around lines 331 - 333, The fenced code block that contains the Snyk URL pattern
(the block showing "https://security.snyk.io/package/npm/") is
missing a language identifier; update that fenced block in
supply-chain-security.md (the snippet with the Snyk URL) to use a non-code
language tag such astext orplaintext so the URL is rendered as plain
text.</details> </blockquote></details> <details> <summary>plugins/nuxt-v5/agents/nuxt-migration-assistant.md (1)</summary><blockquote> `222-246`: **Verification steps assume Bun package manager.** The verification commands use `bun` exclusively. Consider noting alternatives for teams using npm or pnpm, or detecting the package manager from lockfiles. ```diff 1. Install dependencies: ```bash rm -rf node_modules .nuxt .output bun install + # Or: npm install / pnpm install ``` ``` <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/agents/nuxt-migration-assistant.md` around lines 222 - 246, Update the "Install dependencies" step to include alternative package-manager commands and/or an auto-detection note: keep the existing bun commands but also list "npm install" and "pnpm install" as alternatives, and add a short guidance to detect the package manager from lockfiles (bun.lockb, package-lock.json, pnpm-lock.yaml) and choose the correct install command accordingly; reference the "Install dependencies" step and the specific commands (bun install, npm install, pnpm install) so readers or automated scripts can switch based on the detected lockfile. ``` </details> </blockquote></details> <details> <summary>plugins/nuxt-seo/skills/nuxt-seo/SKILL.md (1)</summary><blockquote> `1-867`: **SKILL.md exceeds recommended line count.** At 867 lines, this file significantly exceeds the 500-line guideline. Consider extracting additional content to reference files. Candidates for extraction: - Version History section (lines 764-867) → `references/version-history.md` - New v5 Features section (lines 395-442) could be consolidated into the migration guide As per coding guidelines: "Maintain SKILL.md files at less than 500 lines after refactoring". <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-seo/skills/nuxt-seo/SKILL.md` around lines 1 - 867, SKILL.md is too long (867 lines) and must be trimmed below 500 lines by extracting large sections; move the "Version History" block (the existing Version History section) into a new references/version-history.md and consolidate the "New v5 Features" block into the existing references/v5-migration-guide.md (or references/advanced-configuration.md if more appropriate), update SKILL.md to replace those blocks with short cross-reference links to the new files, and verify final SKILL.md length is <500 lines; edit the SKILL.md sections named "Version History" and "New v5 Features" accordingly (search for those headers to locate the content). ``` </details> </blockquote></details> </blockquote></details> --- <details> <summary>ℹ️ Review info</summary> <details> <summary>⚙️ Run configuration</summary> **Configuration used**: Organization UI **Review profile**: CHILL **Plan**: Pro **Run ID**: `03831b6e-acdd-475d-a9aa-6c51d7fc3b38` </details> <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between 90d6bd7de47ac8f79bdf2f2d06b26d513814f764 and 1dfc0767221db5f20ad9bc7cbf9649325d9c7de4. </details> <details> <summary>📒 Files selected for processing (74)</summary> * `.claude-plugin/marketplace.json` * `.factory/settings.json` * `CHANGELOG.md` * `README.md` * `plugins/dependency-upgrade/.claude-plugin/plugin.json` * `plugins/dependency-upgrade/README.md` * `plugins/dependency-upgrade/skills/dependency-upgrade/SKILL.md` * `plugins/dependency-upgrade/skills/dependency-upgrade/references/compatibility-matrix.md` * `plugins/dependency-upgrade/skills/dependency-upgrade/references/cooldown-config-guide.md` * `plugins/dependency-upgrade/skills/dependency-upgrade/references/package-manager-security.md` * `plugins/dependency-upgrade/skills/dependency-upgrade/references/secrets-and-containers.md` * `plugins/dependency-upgrade/skills/dependency-upgrade/references/staged-upgrades.md` * `plugins/dependency-upgrade/skills/dependency-upgrade/references/supply-chain-security.md` * `plugins/dependency-upgrade/skills/dependency-upgrade/references/testing-strategy.md` * `plugins/dependency-upgrade/skills/dependency-upgrade/templates/bunfig-security.tmpl` * `plugins/dependency-upgrade/skills/dependency-upgrade/templates/dependabot-security.tmpl` * `plugins/dependency-upgrade/skills/dependency-upgrade/templates/devcontainer-security.tmpl` * `plugins/dependency-upgrade/skills/dependency-upgrade/templates/npmrc-security.tmpl` * `plugins/dependency-upgrade/skills/dependency-upgrade/templates/pnpm-workspace-security.tmpl` * `plugins/dependency-upgrade/skills/dependency-upgrade/templates/renovate-security.tmpl` * `plugins/dependency-upgrade/skills/dependency-upgrade/templates/yarnrc-security.tmpl` * `plugins/nuxt-seo/.claude-plugin/plugin.json` * `plugins/nuxt-seo/README.md` * `plugins/nuxt-seo/skills/nuxt-seo/SKILL.md` * `plugins/nuxt-seo/skills/nuxt-seo/assets/package-versions.json` * `plugins/nuxt-seo/skills/nuxt-seo/references/advanced-seo-guides.md` * `plugins/nuxt-seo/skills/nuxt-seo/references/common-patterns.md` * `plugins/nuxt-seo/skills/nuxt-seo/references/installation-guide.md` * `plugins/nuxt-seo/skills/nuxt-seo/references/module-details.md` * `plugins/nuxt-seo/skills/nuxt-seo/references/modules-overview.md` * `plugins/nuxt-seo/skills/nuxt-seo/references/nuxt-content-integration.md` * `plugins/nuxt-seo/skills/nuxt-seo/references/pro-modules.md` * `plugins/nuxt-seo/skills/nuxt-seo/references/v5-migration-guide.md` * `plugins/nuxt-ui-v4/.claude-plugin/plugin.json` * `plugins/nuxt-ui-v4/README.md` * `plugins/nuxt-ui-v4/agents/nuxt-ui-migration-assistant.md` * `plugins/nuxt-ui-v4/agents/nuxt-ui-troubleshooter.md` * `plugins/nuxt-ui-v4/commands/setup.md` * `plugins/nuxt-ui-v4/skills/nuxt-ui-v4/SKILL.md` * `plugins/nuxt-ui-v4/skills/nuxt-ui-v4/references/COMMON_ERRORS_DETAILED.md` * `plugins/nuxt-ui-v4/skills/nuxt-ui-v4/references/ai-sdk-v5-integration.md` * `plugins/nuxt-ui-v4/skills/nuxt-ui-v4/references/auth-form.md` * `plugins/nuxt-ui-v4/skills/nuxt-ui-v4/references/chat-components.md` * `plugins/nuxt-ui-v4/skills/nuxt-ui-v4/references/chat-reasoning.md` * `plugins/nuxt-ui-v4/skills/nuxt-ui-v4/references/chat-shimmer.md` * `plugins/nuxt-ui-v4/skills/nuxt-ui-v4/references/chat-tool.md` * `plugins/nuxt-ui-v4/skills/nuxt-ui-v4/references/form-components-reference.md` * `plugins/nuxt-ui-v4/skills/nuxt-ui-v4/references/nuxt-v4-features.md` * `plugins/nuxt-ui-v4/skills/nuxt-ui-v4/templates/components/ui-chat-full.vue` * `plugins/nuxt-ui-v4/skills/nuxt-ui-v4/templates/nuxt.config.ts` * `plugins/nuxt-v5/.claude-plugin/plugin.json` * `plugins/nuxt-v5/.mcp.json` * `plugins/nuxt-v5/README.md` * `plugins/nuxt-v5/agents/nuxt-debugger.md` * `plugins/nuxt-v5/agents/nuxt-migration-assistant.md` * `plugins/nuxt-v5/agents/nuxt-performance-analyzer.md` * `plugins/nuxt-v5/commands/nuxt-setup.md` * `plugins/nuxt-v5/skills/nuxt-core/SKILL.md` * `plugins/nuxt-v5/skills/nuxt-core/templates/app.vue` * `plugins/nuxt-v5/skills/nuxt-core/templates/nuxt.config.ts` * `plugins/nuxt-v5/skills/nuxt-data/SKILL.md` * `plugins/nuxt-v5/skills/nuxt-data/references/composables.md` * `plugins/nuxt-v5/skills/nuxt-data/references/data-fetching.md` * `plugins/nuxt-v5/skills/nuxt-data/templates/composables/useAuth.ts` * `plugins/nuxt-v5/skills/nuxt-production/SKILL.md` * `plugins/nuxt-v5/skills/nuxt-production/references/deployment-cloudflare.md` * `plugins/nuxt-v5/skills/nuxt-production/references/hydration.md` * `plugins/nuxt-v5/skills/nuxt-production/references/performance.md` * `plugins/nuxt-v5/skills/nuxt-production/references/testing-vitest.md` * `plugins/nuxt-v5/skills/nuxt-production/templates/tests/components/BlogPost.test.ts` * `plugins/nuxt-v5/skills/nuxt-production/templates/wrangler.toml` * `plugins/nuxt-v5/skills/nuxt-server/SKILL.md` * `plugins/nuxt-v5/skills/nuxt-server/references/server.md` * `plugins/nuxt-v5/skills/nuxt-server/templates/server/api/blog/index.get.ts` </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
plugins/dependency-upgrade/skills/dependency-upgrade/references/compatibility-matrix.md
Outdated
Show resolved
Hide resolved
plugins/dependency-upgrade/skills/dependency-upgrade/references/compatibility-matrix.md
Show resolved
Hide resolved
plugins/dependency-upgrade/skills/dependency-upgrade/templates/yarnrc-security.tmpl
Outdated
Show resolved
Hide resolved
- Fix defineLazyHydrationComponent signature to (strategy, source) per Nuxt 5 docs in nuxt-production SKILL.md - Fix broken TOC anchors in modules-overview.md and server.md - Fix manualChunks -> advancedChunks for Rolldown in nuxt-setup.md and nuxt.config.ts; remove no-op optimizeDeps.include - Fix scoped package names (@nuxtjs/robots, @nuxtjs/sitemap) in nuxt-seo install commands and modules array - Fix Bun install/uninstall commands in installation-guide.md - Fix regex test-before-replace bug in staged-upgrades.md - Fix useAuth.ts to clear auth state when session user is missing - Fix chat-components model string (period -> hyphen) - Fix typo "pnnpm" -> "pnpm" in dependency-upgrade SKILL.md - Fix relative path in advanced-seo-guides.md - Shorten nuxt-seo SKILL.md description to <100 chars - Update nuxt-ui-v4 version 3.1.0 -> 3.2.1 - Update Next.js 15 Node.js requirement to >=20.9 - Fix Tailwind v4 migration bullets and npmrc CLI version - Remove static LTS dates from Node.js compatibility table - Update "Nuxt 4" -> "Nuxt 5" across nuxt-v5 plugin references - Remove stray placeholder in nuxt-v4-features.md - Add missing ref() import in testing-vitest mock example - Update sync-plugins.sh to support multi-skill plugins (bun, cloudflare-workers, nuxt-v4, nuxt-v5) by detecting skills/*/SKILL.md instead of requiring root SKILL.md; preserve extra plugin.json fields (mcpServers, homepage) via jq merge for multi-skill plugins - Sync all 170 plugins including 4 previously-skipped multi-skill plugins
- scan_agents/scan_commands return empty string instead of "null", so agents/commands fields are omitted (not null) in plugin.json, fixing JSON schema validation failures for 153 plugins - Multi-skill jq merge uses del(.agents)/del(.commands) to remove stale null values from existing plugin.json files - validate-frontmatter.sh --dir scans skills/*/SKILL.md instead of hardcoded skills/<plugin-name>/SKILL.md, supporting multi-skill plugins (bun, cloudflare-workers, nuxt-v4, nuxt-v5) - validate-frontmatter.sh --dir validates ALL sub-skills, not just the first one - Restore missing categorize_skill call for multi-skill plugins
There was a problem hiding this comment.
Actionable comments posted: 18
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
plugins/cloudflare-kv/.claude-plugin/plugin.json (1)
1-20:⚠️ Potential issue | 🔴 CriticalRemove the removal of
agentsandcommandsarrays from plugin.json — these directories exist.The
agentsandcommandsarrays were removed from this plugin.json, but the corresponding directories exist atplugins/cloudflare-kv/skills/cloudflare-kv/:
agents/: Containskv-debugger.md,kv-optimizer.mdcommands/: Containssetup-kv.md,test-kv.md,optimize-kv.mdPer coding guidelines, these arrays must be included when the directories exist and are detected by
sync-plugins.sh. Run./scripts/sync-plugins.shto regenerate this file with the correctagentsandcommandsarrays.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/cloudflare-kv/.claude-plugin/plugin.json` around lines 1 - 20, plugin.json is missing the agents and commands arrays even though the plugin's directories contain those files; restore the "agents" and "commands" arrays in plugins/cloudflare-kv/.claude-plugin/plugin.json to list the existing entries (e.g., kv-debugger.md, kv-optimizer.md in agents and setup-kv.md, test-kv.md, optimize-kv.md in commands) by re-running the provided sync script: execute ./scripts/sync-plugins.sh to regenerate plugin.json so it includes the agents and commands arrays that match the files under skills/cloudflare-kv/agents and skills/cloudflare-kv/commands.plugins/nuxt-seo/skills/nuxt-seo/SKILL.md (1)
39-867: 🛠️ Refactor suggestion | 🟠 MajorRefactor oversized SKILL.md to restore progressive disclosure.
This file is still far above the 500-line cap. Move detailed sections (long feature docs/version history/deep examples) into
references/*.mdand keep Quick Start + top errors in SKILL.md with brief pointers.As per coding guidelines, "Maintain SKILL.md files at less than 500 lines after refactoring to ensure progressive disclosure of content. Quick Start and top 3-5 errors must remain in SKILL.md while detailed sections are extracted to references."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-seo/skills/nuxt-seo/SKILL.md` around lines 39 - 867, SKILL.md is too large and must be reduced below 500 lines by extracting long, detailed sections into reference files; move the large blocks such as "Module Overview" deep dives, "Integration Patterns" long examples, full "Module Overview", full "Using Bundled Resources", extensive "References" listings, complete "Version History", and long "Package Versions" JSON into new or existing references/*.md files (e.g., references/module-details.md, references/installation-guide.md, references/version-history.md) while keeping only the Quick Start, the top 3–5 Known Issues (e.g., Issue `#1`–#5), Critical Rules summary, and a short pointer section that lists and links to the extracted reference files; update SKILL.md to include brief headers (Quick Start, Critical Rules, Top Errors, References pointer) and ensure content under symbols like "Quick Start", "Critical Rules", "Known Issues Prevention", and "Version History" is reduced to summaries with links to the corresponding references so the final SKILL.md is under 500 lines.plugins/maz-ui/.claude-plugin/plugin.json (1)
3-17:⚠️ Potential issue | 🟠 MajorResync the manifest with the Maz UI plugin surface.
This file still advertises autonomous agents, but the manifest no longer exposes any
agentsorcommands. If those directories still exist, installs will silently lose that functionality; if they were removed, the description is now stale. Please regenerate this manifest via./scripts/sync-plugins.shor update the description to match what actually ships.As per coding guidelines, "Use the official './scripts/sync-plugins.sh' command as the single entry point for all plugin management to sync versions, add categories, detect agents/commands, and regenerate marketplace.json." and "Include 'agents' and 'commands' arrays in plugin.json only if agents/ or commands/ directories exist in the skill, detected and added automatically by sync-plugins.sh."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/maz-ui/.claude-plugin/plugin.json` around lines 3 - 17, The plugin manifest's "description" advertises autonomous agents but the manifest no longer exposes any agents/commands; run the official sync script or update the manifest: regenerate plugin.json using ./scripts/sync-plugins.sh so it auto-detects and populates agents/commands arrays if the agents/ or commands/ directories exist, or edit the "description" field in plugin.json to remove references to autonomous agents and ensure no agents/commands arrays are present unless those directories actually exist.
♻️ Duplicate comments (2)
plugins/nuxt-seo/skills/nuxt-seo/SKILL.md (1)
3-3:⚠️ Potential issue | 🟠 MajorShorten
descriptionto under 200 characters.The frontmatter
descriptionis still above the documented maximum; this hurts discoverability and violates skill metadata constraints.As per coding guidelines, "Keep skill descriptions concise (ideal <100 characters, maximum <200 characters) and include 'Use when' scenarios to improve discoverability in Claude Code."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-seo/skills/nuxt-seo/SKILL.md` at line 3, The SKILL.md frontmatter description is too long; update the frontmatter "description" value in the file (the description field at top of SKILL.md for Nuxt SEO) to be under 200 characters (preferably <100) while preserving the "Use when" scenarios — condense to a short summary like "Nuxt SEO v5 modules: robots, sitemap, og-image, schema-org, link-checker, seo-utils, site-config. Use when implementing SEO, sitemaps, OG images, Schema.org, meta tags, or link checks in Nuxt apps." and replace the existing description line.plugins/nuxt-v5/commands/nuxt-setup.md (1)
195-203:⚠️ Potential issue | 🟠 MajorSwitch this example back to
build.rollupOptions.The earlier chunking fix addressed
manualChunks, but the parent key is still wrong: Vite’s Rolldown docs keep this undervite.build.rollupOptions, withadvancedChunksnested insideoutput.rolldownOptionsis not the documented config shape, and Line 499 repeats the same wrong key in the summary. (vite.dev)Also applies to: 499-499
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/commands/nuxt-setup.md` around lines 195 - 203, The example uses the wrong key name "rolldownOptions"; update the Vite config to use vite.build.rollupOptions (so keep the existing output.advancedChunks grouping but move it under rollupOptions) and also fix the repeated typo at the summary occurrence (line with the duplicate "rolldownOptions") so both references read rollupOptions; confirm the nested symbol names remain output -> advancedChunks (and any manualChunks mention remains under rollupOptions.output).
🟡 Minor comments (9)
plugins/nuxt-v5/skills/nuxt-production/references/performance.md-103-109 (1)
103-109:⚠️ Potential issue | 🟡 MinorAdd explicit languages to fenced code blocks.
These fenced blocks are missing a language tag, which triggers MD040 and reduces editor/linter consistency.
Suggested fix
-``` +```text components/ ├── HeavyChart.vue # Auto-imported ├── LazyHeavyChart.vue # Lazy-loaded ├── InteractiveMap.vue # Auto-imported └── LazyInteractiveMap.vue # Lazy-loaded-
+text
pages/
├── index.vue → index-[hash].js
├── about.vue → about-[hash].js
└── blog/
├── index.vue → blog-index-[hash].js
└── [slug].vue → blog-slug-[hash].jsAlso applies to: 243-250
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-production/references/performance.md` around lines 103 - 109, The fenced code blocks showing the directory trees (starting with "components/" and "pages/") lack a language tag and trigger MD040; add an explicit language (e.g., ```text) to each of those fenced blocks so they become ```text ... ``` to satisfy the linter and maintain editor consistency, updating both the block that starts with "components/" and the other that starts with "pages/" (also applies to the similar block at the other occurrence).plugins/nuxt-v5/skills/nuxt-production/references/testing-vitest.md-532-552 (1)
532-552:⚠️ Potential issue | 🟡 MinorSpecify a language for the test-structure code fence.
This block is currently untyped and triggers MD040.
Suggested fix
-``` +```text tests/ ├── components/ │ ├── Button.test.ts │ ├── Card.test.ts │ └── Modal.test.ts ├── composables/ │ ├── useAuth.test.ts │ ├── useCart.test.ts │ └── useCounter.test.ts ├── server/ │ ├── api/ │ │ ├── users.get.test.ts │ │ └── users.post.test.ts │ └── utils/ │ └── validation.test.ts └── e2e/ ├── login.test.ts ├── checkout.test.ts └── navigation.test.ts</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@plugins/nuxt-v5/skills/nuxt-production/references/testing-vitest.mdaround
lines 532 - 552, The fenced code block showing the tests/ directory tree is
missing a language tag and triggers MD040; add a language identifier (e.g.,
"text") to the opening fence so the block becomes ```text and the linter stops
complaining; update the block in testing-vitest.md that contains the tests/ tree
(the ASCII tree of Button.test.ts, useAuth.test.ts, users.get.test.ts, etc.) to
include the language tag.</details> </blockquote></details> <details> <summary>plugins/nuxt-ui-v4/README.md-39-43 (1)</summary><blockquote> `39-43`: _⚠️ Potential issue_ | _🟡 Minor_ **Fix Dashboard count mismatch (and verify aggregate count).** Line 39 says 11 dashboard components, but the listed items are 10. Please align the heading and re-check the top-level “125+ components” claim for internal consistency. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-ui-v4/README.md` around lines 39 - 43, The Dashboard section header is inconsistent with the listed components: the heading claims 11 dashboard components but the list contains 10 (DashboardGroup, DashboardSidebar, DashboardPanel, DashboardNavbar, DashboardToolbar, DashboardSidebarToggle, DashboardSidebarCollapse, DashboardSearch, DashboardSearchButton, DashboardResizeHandle); either add the missing Dashboard component to the list or change the heading to "10 components". After fixing the Dashboard count, recalculate and update the top-level "125+ components" aggregate so it reflects the actual total of all listed components across the README. ``` </details> </blockquote></details> <details> <summary>plugins/nuxt-ui-v4/README.md-224-224 (1)</summary><blockquote> `224-224`: _⚠️ Potential issue_ | _🟡 Minor_ **Update stale release metadata date.** Line 224 still shows `2026-03-30` even though this v3.2.1 release PR is dated April 2026. Please update the timestamp to the actual release/update date. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-ui-v4/README.md` at line 224, Update the stale release metadata date in the README: replace the current "**Last Updated**: 2026-03-30" entry with the actual release/update date for this v3.2.1 PR (the April 2026 date used for the release) so the README's Last Updated value matches the PR/release date. ``` </details> </blockquote></details> <details> <summary>plugins/nuxt-seo/skills/nuxt-seo/references/installation-guide.md-29-33 (1)</summary><blockquote> `29-33`: _⚠️ Potential issue_ | _🟡 Minor_ **Standardize install command and package naming to official canonical forms.** The guide inconsistently uses `npx nuxt module add seo` alongside `npx nuxt module add `@nuxtjs/seo``, and mixes unscoped vs. scoped package names (`nuxt-robots`/`nuxt-sitemap` vs. `@nuxtjs/robots`/`@nuxtjs/sitemap`). Per [official Nuxt SEO docs](https://nuxtseo.com/docs/nuxt-seo/getting-started/installation), the canonical forms are: - `npx nuxt module add `@nuxtjs/seo`` (not `npx nuxt module add seo`) - `@nuxtjs/robots` and `@nuxtjs/sitemap` (scoped packages) Update all install snippets across lines 29–33, 85–93, 128–129, 201–203, and 418–419 to use only these canonical forms. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-seo/skills/nuxt-seo/references/installation-guide.md` around lines 29 - 33, Replace all unscoped package names and the shorthand install command with the official scoped canonical forms: change any occurrence of "npx nuxt module add seo" to "npx nuxt module add `@nuxtjs/seo`", and replace "nuxt-robots"/"nuxt-sitemap" (and any other unscoped variants) with "@nuxtjs/robots" and "@nuxtjs/sitemap" respectively; apply these edits in the affected snippets referenced (the blocks around lines 29–33, 85–93, 128–129, 201–203, and 418–419) so all install commands and package names consistently use the scoped "@nuxtjs/..." forms. ``` </details> </blockquote></details> <details> <summary>plugins/dependency-upgrade/skills/dependency-upgrade/SKILL.md-100-107 (1)</summary><blockquote> `100-107`: _⚠️ Potential issue_ | _🟡 Minor_ **Inconsistent hyphenation: "pre-install" vs "preinstall".** The document uses both "pre-install" (Line 104, 237) and "preinstall" (referenced in context of lifecycle scripts) inconsistently. For clarity and consistency, standardize to one form. The npm/Node.js ecosystem typically uses "preinstall" (no hyphen) when referring to the lifecycle script name, but "pre-install" (hyphenated) as an adjective is also acceptable. Recommendation: Use "preinstall" when referring to the npm lifecycle script specifically, and "pre-install" as an adjective elsewhere. <details> <summary>🤖 Prompt for AI Agents</summary> ``` Verify each finding against the current code and only fix it if needed. In `@plugins/dependency-upgrade/skills/dependency-upgrade/SKILL.md` around lines 100 - 107, The text uses both "pre-install" and "preinstall" inconsistently; update the glossary in the "7. Install-Time Auditing" section and all other occurrences so that npm lifecycle script references use "preinstall" (no hyphen) and adjective uses remain "pre-install" (hyphenated). Search for the tokens "pre-install" and "preinstall" and replace them according to this rule, ensuring instances that refer to the npm lifecycle script (e.g., mentions of lifecycle scripts or hooks) are changed to "preinstall" and descriptive/adjective uses keep "pre-install". ``` </details> </blockquote></details> <details> <summary>plugins/dependency-upgrade/skills/dependency-upgrade/references/staged-upgrades.md-26-34 (1)</summary><blockquote> `26-34`: _⚠️ Potential issue_ | _🟡 Minor_ **Add language identifier to fenced code block.** The dependency ordering list should specify a language identifier (e.g., `text` or `markdown`) for the fenced code block to improve rendering and comply with Markdown best practices. <details> <summary>📝 Proposed fix</summary> ```diff -``` +```text 1. TypeScript / build tools 2. Core framework (React, Next.js, etc.) 3. Routing ``` </details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@plugins/dependency-upgrade/skills/dependency-upgrade/references/staged-upgrades.md
around lines 26 - 34, The fenced code block in staged-upgrades.md lacks a
language identifier; update the triple-backtick fence that surrounds the
dependency ordering list to include a language (e.g., changetotext orpractices—modify the fenced block around the list starting with "1. TypeScript / build tools" accordingly.FRONTMATTER_VALIDATION_REPORT.md-3-11 (1)
3-11:⚠️ Potential issue | 🟡 MinorThe committed counts no longer match the validator output.
scripts/validate-frontmatter.shcounts one critical failure per failing file, and CI is currently reporting 57 of them. This report still says 39 failed skills, so the checked-in remediation summary is already stale/misleading.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@FRONTMATTER_VALIDATION_REPORT.md` around lines 3 - 11, The checked-in FRONTMATTER_VALIDATION_REPORT.md is stale: the counts (Total Skills / Passed / Failed / Warnings and the "Critical Issues (39)" header) no longer match the current output of scripts/validate-frontmatter.sh (CI shows 57 failures). Re-run scripts/validate-frontmatter.sh to regenerate the validator output, update the numeric summary and the "Critical Issues" count and description to match the fresh output, and commit the updated FRONTMATTER_VALIDATION_REPORT.md so the file reflects the authoritative validator results used by CI.plugins/nuxt-v5/commands/nuxt-setup.md-26-38 (1)
26-38:⚠️ Potential issue | 🟡 MinorAdd fence languages to the remaining snippets.
These unlabeled fenced blocks are already triggering MD040 warnings. Adding
yamlto the question blocks andtext/plaintextto the summary/error blocks will keep markdownlint clean.Also applies to: 42-54, 58-71, 75-87, 91-105, 109-119, 127-130, 431-463, 470-475, 478-482, 485-490
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/commands/nuxt-setup.md` around lines 26 - 38, Update the unlabeled fenced code blocks so markdownlint MD040 is satisfied: add "yaml" to the fenced blocks that show frontmatter-like question/config snippets (e.g., the block containing header/question/options) and add "text" or "plaintext" to plain summary or error example blocks elsewhere; apply the same change to the other listed blocks (the ones around lines with question/summary/error content) so every triple-backtick fence has an explicit language tag.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.githooks/pre-push:
- Around line 44-47: The --dir argument is pointed at the parent directory of
the skill folder (using dirname dirname "$full_path") but
validate-frontmatter.sh expects the actual skill directory (or plugin root);
change the call that invokes "$REPO_ROOT/scripts/validate-frontmatter.sh" to
pass the skill directory by using --dir "$(dirname "$full_path")" (reference
variables: skill_file, full_path and the script validate-frontmatter.sh).
- Line 24: The current CHANGED_SKILLS assignment uses a grep pattern that only
matches nested SKILL.md (plugins/<plugin>/skills/<skill>/SKILL.md) and therefore
misses root plugin SKILL.md files; update the grep -E expression used when
populating CHANGED_SKILLS to also match top-level plugin SKILL.md (i.e., allow
either plugins/<plugin>/skills/.../SKILL.md OR plugins/<plugin>/SKILL.md).
Modify the pattern in the CHANGED_SKILLS line (the grep -E argument) so it
accepts both paths and preserves the existing fallback (|| true).
In @.github/workflows/validate-frontmatter.yml:
- Around line 21-22: The workflow currently runs the "Validate all SKILL.md
frontmatter" job which executes ./scripts/validate-frontmatter.sh across the
whole repo and blocks CI because there are 57 historical failures; instead scope
the job to only validate changed SKILL.md files in the PR (or make the job
non-blocking) by updating the job logic that calls
./scripts/validate-frontmatter.sh to accept a list of changed files (e.g.,
generate git diff --name-only ${{ github.sha }} against base and filter for
**/SKILL.md) and pass only those paths to the script, or change the job to run
conditionally only on pull_request and skip when no SKILL.md files changed so
unrelated PRs are not blocked.
In `@plugins/cloudflare-durable-objects/.claude-plugin/plugin.json`:
- Line 4: The manifest version was downgraded to "3.0.0" which can break upgrade
flows; update the "version" field in plugin.json (currently "3.0.0") to at least
the prior published version (e.g., "3.2.0" or your current release version) and
ensure this version bump is propagated consistently in any related
marketplace/release metadata so semver remains monotonic.
In `@plugins/dependency-upgrade/skills/dependency-upgrade/SKILL.md`:
- Line 3: The SKILL.md description is too long (≈310 chars); shorten the YAML
description value in SKILL.md to under 200 characters (ideally <100) while
keeping the core intent: secure dependency upgrades with supply chain
protection, cooldowns, post-install hardening, lockfile validation, and staged
rollout across npm, Bun, pnpm, and Yarn; update the description string
accordingly.
In `@plugins/nuxt-seo/skills/nuxt-seo/SKILL.md`:
- Around line 343-366: Add verified source links for each new v5 known-issue
entry (Issue `#11` through Issue `#14`) by appending or inline-referencing the
authoritative docs/PR/issue URLs that demonstrate the breaking change or
recommended workaround; specifically update the entries mentioning
site.name/NUXT_SITE_NAME (Issue `#11`) with the Nuxt v5 docs or migration guide,
replace the server-side useSiteConfig note (Issue `#12`) with the GitHub issue or
release notes showing getSiteConfig(event) deprecation, attach Content
composables renaming references (Issue `#13`) to the Content v3 migration docs or
PRs, and add the OG image signing docs/issue (Issue `#14`) that explain URL
signing and the defineOgImage() usage—ensure each issue line includes the link
text and URL so readers can follow up.
- Around line 161-173: Replace all occurrences of the unscoped package names
"nuxt-robots" and "nuxt-sitemap" in SKILL.md with the scoped package names
"@nuxtjs/robots" and "@nuxtjs/sitemap" so the doc consistently matches the
installer/config examples, and update the keys in assets/package-versions.json
changing "nuxt-robots" -> "@nuxtjs/robots" and "nuxt-sitemap" ->
"@nuxtjs/sitemap" so the version source file matches the actual npm package
names.
In `@plugins/nuxt-v4/.claude-plugin/plugin.json`:
- Line 4: The "version" field for the nuxt-v4 plugin was lowered to "3.0.0"
which causes a semver regression; update the "version" property in plugin.json
(the "version" key) to match or exceed the previous release (restore the prior
version or increment appropriately) so consumers will see this as a newer
release rather than a downgrade.
In `@plugins/nuxt-v5/commands/nuxt-setup.md`:
- Around line 74-106: The scaffold currently selects adapters from `deployment`
only, causing invalid combos (e.g., D1+Vercel) and missing installs/imports;
change to a single source of truth by deriving the DB adapter from the
`database` answer (the `database` field) and use that to generate the helper
code and imports in the deployment-driven templates referenced (the helper that
imports `postgres` and `~/server/database/schema`), ensure that when
`PostgreSQL` is chosen you add the `postgres` dependency to the install step and
create `server/database/` and `server/database/schema` files, and when
`Cloudflare D1` or `NuxtHub` are chosen generate the correct adapter files and
avoid importing `~/server/database/schema` if that directory isn’t created;
update all affected blocks (the helper generation and the Question/Step outputs
around the shown diffs) to read from `database` instead of `deployment` so
scaffolds match selected options.
- Around line 348-386: The auth composable (useAuth) calls /api/auth/login and
/api/auth/logout but no server routes or session logic are generated; add server
API handlers for the POST routes used by useAuth (e.g., authLogin handler for
POST /api/auth/login and authLogout handler for POST /api/auth/logout) that
validate credentials, set/clear a session or cookie, and return a user object
(used by useAuth.login) and a success response (used by useAuth.logout); update
or create corresponding session helpers used by these handlers so
navigateTo('/login') and isAuthenticated computed state work as intended and
ensure the middleware (defineNuxtRouteMiddleware in auth.ts) relies on the same
session/state mechanism.
- Around line 166-173: The Nitro preset strings and their explanatory comments
use hyphenated IDs which are incorrect; update the preset values and comment
examples to use underscores instead (change 'cloudflare-pages' →
'cloudflare_pages' and 'cloudflare-module' → 'cloudflare_module') so the preset
property (preset: 'cloudflare-pages') and the two comment lines refer to the
documented IDs used by Nitro.
- Around line 108-120: The setup flow currently hardcodes the Bun launcher
("bunx") which forces Bun even if the user selected another package manager;
update the launcher usage to use the collected packageManager variable instead
so the chosen tool runs commands. Replace the hardcoded bunx invocation that
runs nuxi init so it uses the selected packageManager to execute nuxi (i.e., use
the packageManager to exec nuxi@latest init with the --package-manager set to
packageManager and then change into projectName), and replace the bunx run
typecheck call to use the packageManager so it runs the "typecheck" script via
packageManager run typecheck; ensure you reference the existing packageManager
and projectName variables when building these command strings.
In `@plugins/nuxt-v5/skills/nuxt-core/templates/nuxt.config.ts`:
- Around line 56-58: The Nitro config in the nuxt.config.ts template uses the
wrong preset string; update the nitro.preset value used in the template from
'cloudflare-pages' to the documented 'cloudflare_pages' (underscore) in the
nuxt-core template so deployments use the correct Nitro preset, then verify the
template by building/deploying to Cloudflare Pages to confirm it works.
- Around line 82-90: Update the Vite build config: replace the deprecated
vite.build.rolldownOptions with vite.build.rollupOptions and rename
output.advancedChunks to output.codeSplitting while preserving the groups array
and the vendor test regex (the existing groups [{ name: 'vendor', test:
/\/(vue|vue-router)/ }]). Edit the block that currently references
rolldownOptions and advancedChunks to use rollupOptions and codeSplitting
respectively so the grouping behavior remains unchanged.
- Around line 1-6: The validateSecret function and runtimeConfig must not read
process.env for non-NUXT_ vars or throw during config evaluation—remove direct
process.env reads/throws from validateSecret and from runtimeConfig so keys are
defined as nullable/default placeholders (let runtime injection via NUXT_*
happen at runtime) and move any strict presence checks into app startup logic;
change nitro.preset value from 'cloudflare-pages' to the correct
'cloudflare_pages'; and update the Rollup/Rolldown config by replacing the
deprecated advancedChunks option (referenced in rollupOptions/advancedChunks)
with the new output.codeSplitting flag to enable advanced chunking.
In `@scripts/sync-plugins.sh`:
- Around line 563-575: The merge currently preserves all fields except .agents
and .commands, so any stale .category remains; update the jq transformation
built in jq_filter (used with jq_args and applied to "$plugin_json" producing
"$plugin_json.tmp") to also remove the category by adding | del(.category)
(e.g., include " | del(.category)" in the base jq_filter string), ensuring
.category is stripped regardless of agents_json/commands_json branches so old
plugin.json files cannot retain a forbidden category field.
In `@scripts/validate-frontmatter.sh`:
- Around line 279-285: The current find command assigns skill_files using a path
filter that only matches nested skills (find ... -name 'SKILL.md' -path
'*/skills/*/SKILL.md'), skipping root-level plugins; update the skill_files
assignment to discover all SKILL.md files under plugins (for example, use find
"$REPO_ROOT/plugins" -name 'SKILL.md' | sort or change the -path to
'*/skills/*/SKILL.md' -o '*/SKILL.md') so variable skill_files contains both
root-level plugins and nested skills for validation.
- Around line 90-146: The script detects a description key but doesn't fail when
its value is empty; update the validation around the extracted desc_text (the
variable computed by the awk block) to treat an absent or empty description as
an error: after computing desc_text, add a check that if desc_text is empty or
only whitespace then append an error like "missing required field 'description'
or description is empty", otherwise proceed with the existing length check
against MAX_DESCRIPTION_LENGTH; ensure you reference desc_text and
MAX_DESCRIPTION_LENGTH so the check runs in the same block that now computes
description.
---
Outside diff comments:
In `@plugins/cloudflare-kv/.claude-plugin/plugin.json`:
- Around line 1-20: plugin.json is missing the agents and commands arrays even
though the plugin's directories contain those files; restore the "agents" and
"commands" arrays in plugins/cloudflare-kv/.claude-plugin/plugin.json to list
the existing entries (e.g., kv-debugger.md, kv-optimizer.md in agents and
setup-kv.md, test-kv.md, optimize-kv.md in commands) by re-running the provided
sync script: execute ./scripts/sync-plugins.sh to regenerate plugin.json so it
includes the agents and commands arrays that match the files under
skills/cloudflare-kv/agents and skills/cloudflare-kv/commands.
In `@plugins/maz-ui/.claude-plugin/plugin.json`:
- Around line 3-17: The plugin manifest's "description" advertises autonomous
agents but the manifest no longer exposes any agents/commands; run the official
sync script or update the manifest: regenerate plugin.json using
./scripts/sync-plugins.sh so it auto-detects and populates agents/commands
arrays if the agents/ or commands/ directories exist, or edit the "description"
field in plugin.json to remove references to autonomous agents and ensure no
agents/commands arrays are present unless those directories actually exist.
In `@plugins/nuxt-seo/skills/nuxt-seo/SKILL.md`:
- Around line 39-867: SKILL.md is too large and must be reduced below 500 lines
by extracting long, detailed sections into reference files; move the large
blocks such as "Module Overview" deep dives, "Integration Patterns" long
examples, full "Module Overview", full "Using Bundled Resources", extensive
"References" listings, complete "Version History", and long "Package Versions"
JSON into new or existing references/*.md files (e.g.,
references/module-details.md, references/installation-guide.md,
references/version-history.md) while keeping only the Quick Start, the top 3–5
Known Issues (e.g., Issue `#1`–#5), Critical Rules summary, and a short pointer
section that lists and links to the extracted reference files; update SKILL.md
to include brief headers (Quick Start, Critical Rules, Top Errors, References
pointer) and ensure content under symbols like "Quick Start", "Critical Rules",
"Known Issues Prevention", and "Version History" is reduced to summaries with
links to the corresponding references so the final SKILL.md is under 500 lines.
---
Minor comments:
In `@FRONTMATTER_VALIDATION_REPORT.md`:
- Around line 3-11: The checked-in FRONTMATTER_VALIDATION_REPORT.md is stale:
the counts (Total Skills / Passed / Failed / Warnings and the "Critical Issues
(39)" header) no longer match the current output of
scripts/validate-frontmatter.sh (CI shows 57 failures). Re-run
scripts/validate-frontmatter.sh to regenerate the validator output, update the
numeric summary and the "Critical Issues" count and description to match the
fresh output, and commit the updated FRONTMATTER_VALIDATION_REPORT.md so the
file reflects the authoritative validator results used by CI.
In
`@plugins/dependency-upgrade/skills/dependency-upgrade/references/staged-upgrades.md`:
- Around line 26-34: The fenced code block in staged-upgrades.md lacks a
language identifier; update the triple-backtick fence that surrounds the
dependency ordering list to include a language (e.g., change ``` to ```text or
```markdown) so the block is rendered correctly and follows Markdown best
practices—modify the fenced block around the list starting with "1. TypeScript /
build tools" accordingly.
In `@plugins/dependency-upgrade/skills/dependency-upgrade/SKILL.md`:
- Around line 100-107: The text uses both "pre-install" and "preinstall"
inconsistently; update the glossary in the "7. Install-Time Auditing" section
and all other occurrences so that npm lifecycle script references use
"preinstall" (no hyphen) and adjective uses remain "pre-install" (hyphenated).
Search for the tokens "pre-install" and "preinstall" and replace them according
to this rule, ensuring instances that refer to the npm lifecycle script (e.g.,
mentions of lifecycle scripts or hooks) are changed to "preinstall" and
descriptive/adjective uses keep "pre-install".
In `@plugins/nuxt-seo/skills/nuxt-seo/references/installation-guide.md`:
- Around line 29-33: Replace all unscoped package names and the shorthand
install command with the official scoped canonical forms: change any occurrence
of "npx nuxt module add seo" to "npx nuxt module add `@nuxtjs/seo`", and replace
"nuxt-robots"/"nuxt-sitemap" (and any other unscoped variants) with
"@nuxtjs/robots" and "@nuxtjs/sitemap" respectively; apply these edits in the
affected snippets referenced (the blocks around lines 29–33, 85–93, 128–129,
201–203, and 418–419) so all install commands and package names consistently use
the scoped "@nuxtjs/..." forms.
In `@plugins/nuxt-ui-v4/README.md`:
- Around line 39-43: The Dashboard section header is inconsistent with the
listed components: the heading claims 11 dashboard components but the list
contains 10 (DashboardGroup, DashboardSidebar, DashboardPanel, DashboardNavbar,
DashboardToolbar, DashboardSidebarToggle, DashboardSidebarCollapse,
DashboardSearch, DashboardSearchButton, DashboardResizeHandle); either add the
missing Dashboard component to the list or change the heading to "10
components". After fixing the Dashboard count, recalculate and update the
top-level "125+ components" aggregate so it reflects the actual total of all
listed components across the README.
- Line 224: Update the stale release metadata date in the README: replace the
current "**Last Updated**: 2026-03-30" entry with the actual release/update date
for this v3.2.1 PR (the April 2026 date used for the release) so the README's
Last Updated value matches the PR/release date.
In `@plugins/nuxt-v5/commands/nuxt-setup.md`:
- Around line 26-38: Update the unlabeled fenced code blocks so markdownlint
MD040 is satisfied: add "yaml" to the fenced blocks that show frontmatter-like
question/config snippets (e.g., the block containing header/question/options)
and add "text" or "plaintext" to plain summary or error example blocks
elsewhere; apply the same change to the other listed blocks (the ones around
lines with question/summary/error content) so every triple-backtick fence has an
explicit language tag.
In `@plugins/nuxt-v5/skills/nuxt-production/references/performance.md`:
- Around line 103-109: The fenced code blocks showing the directory trees
(starting with "components/" and "pages/") lack a language tag and trigger
MD040; add an explicit language (e.g., ```text) to each of those fenced blocks
so they become ```text ... ``` to satisfy the linter and maintain editor
consistency, updating both the block that starts with "components/" and the
other that starts with "pages/" (also applies to the similar block at the other
occurrence).
In `@plugins/nuxt-v5/skills/nuxt-production/references/testing-vitest.md`:
- Around line 532-552: The fenced code block showing the tests/ directory tree
is missing a language tag and triggers MD040; add a language identifier (e.g.,
"text") to the opening fence so the block becomes ```text and the linter stops
complaining; update the block in testing-vitest.md that contains the tests/ tree
(the ASCII tree of Button.test.ts, useAuth.test.ts, users.get.test.ts, etc.) to
include the language tag.
---
Duplicate comments:
In `@plugins/nuxt-seo/skills/nuxt-seo/SKILL.md`:
- Line 3: The SKILL.md frontmatter description is too long; update the
frontmatter "description" value in the file (the description field at top of
SKILL.md for Nuxt SEO) to be under 200 characters (preferably <100) while
preserving the "Use when" scenarios — condense to a short summary like "Nuxt SEO
v5 modules: robots, sitemap, og-image, schema-org, link-checker, seo-utils,
site-config. Use when implementing SEO, sitemaps, OG images, Schema.org, meta
tags, or link checks in Nuxt apps." and replace the existing description line.
In `@plugins/nuxt-v5/commands/nuxt-setup.md`:
- Around line 195-203: The example uses the wrong key name "rolldownOptions";
update the Vite config to use vite.build.rollupOptions (so keep the existing
output.advancedChunks grouping but move it under rollupOptions) and also fix the
repeated typo at the summary occurrence (line with the duplicate
"rolldownOptions") so both references read rollupOptions; confirm the nested
symbol names remain output -> advancedChunks (and any manualChunks mention
remains under rollupOptions.output).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: df674e93-7ef8-47a4-a4b9-1467363cc44a
📒 Files selected for processing (81)
.claude-plugin/marketplace.json.githooks/pre-push.github/workflows/validate-frontmatter.ymlFRONTMATTER_VALIDATION_REPORT.mdplugins/aceternity-ui/.claude-plugin/plugin.jsonplugins/api-authentication/.claude-plugin/plugin.jsonplugins/better-auth/.claude-plugin/plugin.jsonplugins/bun/.claude-plugin/plugin.jsonplugins/cloudflare-d1/.claude-plugin/plugin.jsonplugins/cloudflare-durable-objects/.claude-plugin/plugin.jsonplugins/cloudflare-images/.claude-plugin/plugin.jsonplugins/cloudflare-kv/.claude-plugin/plugin.jsonplugins/cloudflare-queues/.claude-plugin/plugin.jsonplugins/cloudflare-r2/.claude-plugin/plugin.jsonplugins/cloudflare-turnstile/.claude-plugin/plugin.jsonplugins/cloudflare-workers/.claude-plugin/plugin.jsonplugins/cloudflare-workflows/.claude-plugin/plugin.jsonplugins/content-collections/.claude-plugin/plugin.jsonplugins/dependency-upgrade/.claude-plugin/plugin.jsonplugins/dependency-upgrade/skills/dependency-upgrade/SKILL.mdplugins/dependency-upgrade/skills/dependency-upgrade/references/compatibility-matrix.mdplugins/dependency-upgrade/skills/dependency-upgrade/references/staged-upgrades.mdplugins/dependency-upgrade/skills/dependency-upgrade/templates/npmrc-security.tmplplugins/design-system-creation/.claude-plugin/plugin.jsonplugins/drizzle-orm-d1/.claude-plugin/plugin.jsonplugins/inspira-ui/.claude-plugin/plugin.jsonplugins/maz-ui/.claude-plugin/plugin.jsonplugins/multi-ai-consultant/.claude-plugin/plugin.jsonplugins/mutation-testing/.claude-plugin/plugin.jsonplugins/neon-vercel-postgres/.claude-plugin/plugin.jsonplugins/nuxt-content/.claude-plugin/plugin.jsonplugins/nuxt-seo/.claude-plugin/plugin.jsonplugins/nuxt-seo/skills/nuxt-seo/SKILL.mdplugins/nuxt-seo/skills/nuxt-seo/references/advanced-seo-guides.mdplugins/nuxt-seo/skills/nuxt-seo/references/installation-guide.mdplugins/nuxt-seo/skills/nuxt-seo/references/modules-overview.mdplugins/nuxt-studio/.claude-plugin/plugin.jsonplugins/nuxt-ui-v4/.claude-plugin/plugin.jsonplugins/nuxt-ui-v4/README.mdplugins/nuxt-ui-v4/skills/nuxt-ui-v4/references/chat-components.mdplugins/nuxt-ui-v4/skills/nuxt-ui-v4/references/nuxt-v4-features.mdplugins/nuxt-v4/.claude-plugin/plugin.jsonplugins/nuxt-v5/.claude-plugin/plugin.jsonplugins/nuxt-v5/commands/nuxt-setup.mdplugins/nuxt-v5/skills/nuxt-core/templates/nuxt.config.tsplugins/nuxt-v5/skills/nuxt-data/references/composables.mdplugins/nuxt-v5/skills/nuxt-data/references/data-fetching.mdplugins/nuxt-v5/skills/nuxt-data/templates/composables/useAuth.tsplugins/nuxt-v5/skills/nuxt-production/SKILL.mdplugins/nuxt-v5/skills/nuxt-production/references/deployment-cloudflare.mdplugins/nuxt-v5/skills/nuxt-production/references/hydration.mdplugins/nuxt-v5/skills/nuxt-production/references/performance.mdplugins/nuxt-v5/skills/nuxt-production/references/testing-vitest.mdplugins/nuxt-v5/skills/nuxt-production/templates/wrangler.tomlplugins/nuxt-v5/skills/nuxt-server/references/server.mdplugins/plan-interview/.claude-plugin/plugin.jsonplugins/playwright/.claude-plugin/plugin.jsonplugins/react-best-practices/.claude-plugin/plugin.jsonplugins/react-composition-patterns/.claude-plugin/plugin.jsonplugins/react-native-skills/.claude-plugin/plugin.jsonplugins/session-management/.claude-plugin/plugin.jsonplugins/supabase-postgres-best-practices/.claude-plugin/plugin.jsonplugins/sveltia-cms/.claude-plugin/plugin.jsonplugins/swift-best-practices/.claude-plugin/plugin.jsonplugins/swift-settingskit/.claude-plugin/plugin.jsonplugins/tailwind-v4-shadcn/.claude-plugin/plugin.jsonplugins/tanstack-ai/.claude-plugin/plugin.jsonplugins/tanstack-router/.claude-plugin/plugin.jsonplugins/tanstack-start/.claude-plugin/plugin.jsonplugins/tanstack-table/.claude-plugin/plugin.jsonplugins/threejs/.claude-plugin/plugin.jsonplugins/turborepo/.claude-plugin/plugin.jsonplugins/ultracite/.claude-plugin/plugin.jsonplugins/vercel-blob/.claude-plugin/plugin.jsonplugins/vercel-kv/.claude-plugin/plugin.jsonplugins/vulnerability-scanning/.claude-plugin/plugin.jsonplugins/xss-prevention/.claude-plugin/plugin.jsonplugins/zod/.claude-plugin/plugin.jsonplugins/zustand-state-management/.claude-plugin/plugin.jsonscripts/sync-plugins.shscripts/validate-frontmatter.sh
✅ Files skipped from review due to trivial changes (50)
- plugins/api-authentication/.claude-plugin/plugin.json
- plugins/swift-settingskit/.claude-plugin/plugin.json
- plugins/aceternity-ui/.claude-plugin/plugin.json
- plugins/inspira-ui/.claude-plugin/plugin.json
- plugins/threejs/.claude-plugin/plugin.json
- plugins/sveltia-cms/.claude-plugin/plugin.json
- plugins/cloudflare-d1/.claude-plugin/plugin.json
- plugins/tanstack-table/.claude-plugin/plugin.json
- plugins/zod/.claude-plugin/plugin.json
- plugins/drizzle-orm-d1/.claude-plugin/plugin.json
- plugins/mutation-testing/.claude-plugin/plugin.json
- plugins/zustand-state-management/.claude-plugin/plugin.json
- plugins/tanstack-start/.claude-plugin/plugin.json
- plugins/vulnerability-scanning/.claude-plugin/plugin.json
- plugins/playwright/.claude-plugin/plugin.json
- plugins/design-system-creation/.claude-plugin/plugin.json
- plugins/tailwind-v4-shadcn/.claude-plugin/plugin.json
- plugins/tanstack-router/.claude-plugin/plugin.json
- plugins/nuxt-seo/skills/nuxt-seo/references/advanced-seo-guides.md
- plugins/cloudflare-workflows/.claude-plugin/plugin.json
- plugins/vercel-blob/.claude-plugin/plugin.json
- plugins/session-management/.claude-plugin/plugin.json
- plugins/multi-ai-consultant/.claude-plugin/plugin.json
- plugins/dependency-upgrade/skills/dependency-upgrade/references/compatibility-matrix.md
- plugins/react-best-practices/.claude-plugin/plugin.json
- plugins/cloudflare-turnstile/.claude-plugin/plugin.json
- plugins/nuxt-content/.claude-plugin/plugin.json
- plugins/cloudflare-queues/.claude-plugin/plugin.json
- plugins/react-composition-patterns/.claude-plugin/plugin.json
- plugins/tanstack-ai/.claude-plugin/plugin.json
- plugins/plan-interview/.claude-plugin/plugin.json
- plugins/neon-vercel-postgres/.claude-plugin/plugin.json
- plugins/swift-best-practices/.claude-plugin/plugin.json
- plugins/dependency-upgrade/skills/dependency-upgrade/templates/npmrc-security.tmpl
- plugins/react-native-skills/.claude-plugin/plugin.json
- plugins/supabase-postgres-best-practices/.claude-plugin/plugin.json
- plugins/nuxt-v5/skills/nuxt-data/references/composables.md
- plugins/vercel-kv/.claude-plugin/plugin.json
- plugins/nuxt-v5/skills/nuxt-production/templates/wrangler.toml
- plugins/nuxt-v5/.claude-plugin/plugin.json
- plugins/nuxt-v5/skills/nuxt-production/SKILL.md
- plugins/cloudflare-images/.claude-plugin/plugin.json
- plugins/nuxt-v5/skills/nuxt-production/references/hydration.md
- plugins/nuxt-v5/skills/nuxt-data/references/data-fetching.md
- plugins/xss-prevention/.claude-plugin/plugin.json
- plugins/nuxt-studio/.claude-plugin/plugin.json
- plugins/nuxt-v5/skills/nuxt-server/references/server.md
- plugins/nuxt-v5/skills/nuxt-production/references/deployment-cloudflare.md
- plugins/dependency-upgrade/.claude-plugin/plugin.json
- plugins/cloudflare-r2/.claude-plugin/plugin.json
🚧 Files skipped from review as they are similar to previous changes (5)
- plugins/nuxt-seo/.claude-plugin/plugin.json
- plugins/nuxt-v5/skills/nuxt-data/templates/composables/useAuth.ts
- plugins/nuxt-seo/skills/nuxt-seo/references/modules-overview.md
- plugins/nuxt-ui-v4/skills/nuxt-ui-v4/references/nuxt-v4-features.md
- plugins/nuxt-ui-v4/skills/nuxt-ui-v4/references/chat-components.md
…ush, and content - Fix CRITICAL pre-push hook: use 3 dirname calls to resolve plugin root (was 2, causing skills/skills/ double path) - Fix pre-push dedup: skip duplicate validations when multiple sub-skills in same plugin change - Fix sync-plugins total counter: count plugin directories instead of nonexistent root SKILL.md files - Fix sync-plugins dead error handling: use `if jq` pattern instead of separate $? check (set -e made else unreachable) - Fix sync-plugins multi-skill first-run: add elif block for multi-skill plugins without existing plugin.json - Fix sync-plugins word-splitting: use while IFS= read -r instead of for..in $(find) for directory names with spaces - Fix sync-plugins inconsistent empty checks: standardize on -n instead of != "" - Add jq preflight check in sync-plugins.sh - Fix validate-frontmatter --dir: detect when --dir is already a skills/ subdirectory and don't append /skills again - Fix validate-frontmatter --quiet: suppress "No SKILL.md found" error in quiet mode - Add 2>/dev/null to validate-frontmatter full-repo find - Fix nuxt-seo SKILL.md description to ~190 chars (<200 limit) - Fix yarnrc-security.tmpl npmMinimalAgeGate to numeric 10080
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (2)
scripts/validate-frontmatter.sh (2)
90-92:⚠️ Potential issue | 🟠 MajorBlank
description:values pass validation.The script checks that a
description:key exists (line 90) but never fails when the value is empty. A frontmatter withdescription:followed by nothing or whitespace-only will pass validation since:
- Line 90 only checks for key presence
- Lines 140-146 only run the length check when
desc_textis non-emptySuggested fix
- if [ -n "$desc_text" ]; then + if [ -z "$(printf '%s' "$desc_text" | tr -d '[:space:]')" ]; then + errors="${errors} description must be non-empty\n" + else local desc_len - desc_len=$(echo "$desc_text" | tr -d '\n' | wc -c | tr -d ' ') + desc_len=$(printf '%s' "$desc_text" | tr -d '\n' | wc -c | tr -d ' ') if [ "$desc_len" -gt "$MAX_DESCRIPTION_LENGTH" ]; then errors="${errors} description exceeds ${MAX_DESCRIPTION_LENGTH} chars (${desc_len})\n" fi fiAlso applies to: 140-146
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@scripts/validate-frontmatter.sh` around lines 90 - 92, The current frontmatter validation only ensures the "description:" key exists but allows empty or whitespace-only values; update scripts/validate-frontmatter.sh to require a non-empty, non-whitespace description by extracting the value into desc_text (the existing desc_text logic) then trimming whitespace and failing if the trimmed desc_text is empty; ensure the initial presence check (where frontmatter is grepped for "^description:") is replaced or supplemented so that an empty description triggers the same error path (add an error like "missing required field 'description' or empty description") and keep the existing length checks (lines referencing desc_text) to run only when desc_text is non-empty after trimming.
287-293:⚠️ Potential issue | 🟠 MajorDefault mode skips root-level single-skill plugins.
The
findcommand at line 288 uses-path '*/skills/*/SKILL.md', which only matches nested skill files likeplugins/foo/skills/bar/SKILL.md. Root-level plugins atplugins/foo/SKILL.mdare never validated in default mode.This is inconsistent with the
--dirmode which has a fallback (lines 271-275). The pipeline failure with 57 critical issues may partially stem from this—verify if single-skill plugins are being missed.Suggested fix
- skill_files=$(find "$REPO_ROOT/plugins" -name 'SKILL.md' -path '*/skills/*/SKILL.md' 2>/dev/null | sort) + skill_files=$(find "$REPO_ROOT/plugins" -type f -name 'SKILL.md' 2>/dev/null | sort)🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@scripts/validate-frontmatter.sh` around lines 287 - 293, The current default-mode find that populates the skill_files variable uses -path '*/skills/*/SKILL.md' and therefore excludes root-level SKILL.md files (e.g. plugins/foo/SKILL.md); update the find invocation in validate-frontmatter.sh that sets skill_files to include both nested and root-level SKILL.md files (for example, combine predicates with -o like \( -path '*/skills/*/SKILL.md' -o -path '*/SKILL.md' \) or simply use -name 'SKILL.md' and filter duplicates) so default mode validates single-skill plugins the same way the --dir fallback does, keeping the variable name skill_files and the rest of the validation flow unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@scripts/validate-frontmatter.sh`:
- Line 194: The printf invocation uses the variable as the format string which
is unsafe; update the two printf calls that currently use the variable errors
(the occurrences around the printf "$errors" and the similar one later) to use
an explicit format specifier that interprets backslash escapes (e.g., use %b)
and pass errors as an argument so the variable is not treated as the format
string; locate the printf calls in the script that reference the errors variable
and replace them accordingly.
---
Duplicate comments:
In `@scripts/validate-frontmatter.sh`:
- Around line 90-92: The current frontmatter validation only ensures the
"description:" key exists but allows empty or whitespace-only values; update
scripts/validate-frontmatter.sh to require a non-empty, non-whitespace
description by extracting the value into desc_text (the existing desc_text
logic) then trimming whitespace and failing if the trimmed desc_text is empty;
ensure the initial presence check (where frontmatter is grepped for
"^description:") is replaced or supplemented so that an empty description
triggers the same error path (add an error like "missing required field
'description' or empty description") and keep the existing length checks (lines
referencing desc_text) to run only when desc_text is non-empty after trimming.
- Around line 287-293: The current default-mode find that populates the
skill_files variable uses -path '*/skills/*/SKILL.md' and therefore excludes
root-level SKILL.md files (e.g. plugins/foo/SKILL.md); update the find
invocation in validate-frontmatter.sh that sets skill_files to include both
nested and root-level SKILL.md files (for example, combine predicates with -o
like \( -path '*/skills/*/SKILL.md' -o -path '*/SKILL.md' \) or simply use -name
'SKILL.md' and filter duplicates) so default mode validates single-skill plugins
the same way the --dir fallback does, keeping the variable name skill_files and
the rest of the validation flow unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: ff69ec81-385c-4a6c-be67-e7514a87400b
📒 Files selected for processing (5)
.githooks/pre-pushplugins/dependency-upgrade/skills/dependency-upgrade/templates/yarnrc-security.tmplplugins/nuxt-seo/skills/nuxt-seo/SKILL.mdscripts/sync-plugins.shscripts/validate-frontmatter.sh
✅ Files skipped from review due to trivial changes (2)
- plugins/dependency-upgrade/skills/dependency-upgrade/templates/yarnrc-security.tmpl
- plugins/nuxt-seo/skills/nuxt-seo/SKILL.md
🚧 Files skipped from review as they are similar to previous changes (1)
- .githooks/pre-push
- Add missing fields: homepage, skills, outputStyles, lspServers, userConfig, channels - Fix agents/commands to accept string | array per official spec - Fix hooks/mcpServers to accept string | array | object - Fix author to object-only with url support - Relax license to accept any SPDX identifier - Fix repository to string-only - Update sync-plugins.sh to merge (not overwrite) existing plugin.json fields - Update CLAUDE.md with complete schema documentation
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@schemas/plugin.schema.json`:
- Around line 249-264: The nested "userConfig" inside "channels" currently
allows arbitrary extra fields because its additionalProperties schema omits an
"additionalProperties": false constraint; update the nested additionalProperties
object for the channels' "userConfig" to include "additionalProperties": false
(mirroring the top-level "userConfig" entries) so each channel config entry only
permits the defined "description" and optional "sensitive" boolean properties.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 594e4a63-7679-4d40-bb2c-2746c1147e32
📒 Files selected for processing (3)
CLAUDE.mdschemas/plugin.schema.jsonscripts/sync-plugins.sh
✅ Files skipped from review due to trivial changes (1)
- CLAUDE.md
…fix nuxt-v5 scaffold - Fix .githooks/pre-push grep to match root-level and nested SKILL.md - Fix validate-frontmatter.sh find to discover all SKILL.md (not just nested) - Add empty description validation error in validate-frontmatter.sh - Add del(.category) to sync-plugins.sh jq filters - Shorten dependency-upgrade description to <200 chars - Remove false agent claims from maz-ui description - Fix nuxt-setup.md: DB adapter from database var, add auth handlers, use packageManager - Remove process.env/validateSecret from nuxt.config.ts template (edge compat) - Condense nuxt-seo SKILL.md from 867→314 lines, add source links for issues #11-#14 - Fix unscoped package names: nuxt-robots→@nuxtjs/robots, nuxt-sitemap→@nuxtjs/sitemap - Add fence language tags to nuxt-setup, performance.md, testing-vitest, staged-upgrades - Fix nuxt-ui-v4 Dashboard component count (10, not 11) - Scope CI workflow to changed files for PRs, full validation on push to main
- Add missing license: MIT to YAML frontmatter for 92 skills (0 warnings now) - Fix Nitro presets: cloudflare-pages -> cloudflare_pages, cloudflare-module -> cloudflare_module - Updated across nuxt-v5 templates, commands, production skill, and deployment refs
There was a problem hiding this comment.
Actionable comments posted: 11
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
plugins/bun/skills/bun-nextjs/SKILL.md (1)
46-48:⚠️ Potential issue | 🟠 MajorUpdate package versions to current stable releases.
The following packages in the SKILL.md are outdated and should be updated:
next: ^16.1.1 → ^16.2.2react: ^19.2.3 → ^19.2.4react-dom: ^19.2.3 → ^19.2.4🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/bun/skills/bun-nextjs/SKILL.md` around lines 46 - 48, Update the package version strings in SKILL.md for the Next/React dependencies: change "next" from ^16.1.1 to ^16.2.2 and update both "react" and "react-dom" from ^19.2.3 to ^19.2.4 so the dependency block reflects the current stable releases.
🧹 Nitpick comments (3)
plugins/maz-ui/.claude-plugin/plugin.json (1)
13-16: Consider adding a couple of more specific keywords for search relevance.This set is valid, but
tooling/workfloware broad. Adding targeted terms (for examplevue,nuxt,components) would likely improve marketplace discoverability.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/maz-ui/.claude-plugin/plugin.json` around lines 13 - 16, The keywords array in plugin.json is too broad; update the "keywords" entry (the list containing "maz", "tooling", "workflow", "ssr") to include more targeted search terms such as "vue", "nuxt", "components" (and optionally "vite" or "ui-library") so the plugin is more discoverable in the marketplace.plugins/bun/skills/bun-test-lifecycle/SKILL.md (1)
3-3: Rewrite description to use third-person perspective.The description currently uses imperative form ("Use for..."), but should follow third-person perspective. As per coding guidelines, skill descriptions should use forms like "This skill should be used when..." rather than imperative commands.
📝 Suggested rewording options
-description: Use for test lifecycle hooks: beforeAll, afterAll, beforeEach, afterEach, fixtures, preload. +description: Provides guidance on Bun test lifecycle hooks including beforeAll, afterAll, beforeEach, afterEach, fixtures, and preload.Alternative:
-description: Use for test lifecycle hooks: beforeAll, afterAll, beforeEach, afterEach, fixtures, preload. +description: Covers Bun test lifecycle hooks for setup and teardown including beforeAll, afterAll, beforeEach, afterEach, fixtures, and preload.As per coding guidelines: "Use third-person perspective in skill descriptions (e.g., 'This skill should be used when...' instead of 'You should...')".
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/bun/skills/bun-test-lifecycle/SKILL.md` at line 3, Update the skill description line in SKILL.md to use third-person perspective instead of imperative voice; replace "Use for test lifecycle hooks: beforeAll, afterAll, beforeEach, afterEach, fixtures, preload." with a phrasing like "This skill should be used for test lifecycle hooks such as beforeAll, afterAll, beforeEach, afterEach, fixtures, and preload." to match style guidelines and maintain the same enumerated hooks.plugins/nuxt-v5/skills/nuxt-core/SKILL.md (1)
14-499: Add an explicit keywords section to improve discoverability.The skill currently lacks comprehensive keyword coverage in a dedicated section; adding one improves matching for technologies/use-cases/errors.
As per coding guidelines, "Include comprehensive keywords in skill.md that cover technologies, frameworks, use cases, and errors the skill prevents."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@plugins/nuxt-v5/skills/nuxt-core/SKILL.md` around lines 14 - 499, Add a new "## Keywords" section to SKILL.md (e.g., after the "Quick Reference" or top-level header "Nuxt 5 Core Fundamentals") that lists comprehensive keywords covering technologies, frameworks, use-cases and common errors (include terms like: nuxt, nuxt 5, vue, nitro, vite, rolldown, typescript, routing, file-based routing, middleware, runtime-config, app.config, nuxt.config, vite-environment, vite-plugin, jsx, seo, meta-tags, error-handling, clearNuxtState, createError, useRuntimeConfig, useSeoMeta, useFetch, server routes, nitro v3, cloudflare_pages, build, deployment, typecheck, and common errors like "route not found", "vite plugin warnings", "non-reactive route params"). Ensure the section is clearly titled "Keywords" and formatted as a comma- or newline-separated list to improve discoverability and match the guideline.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@plugins/bun/skills/bun-sveltekit/SKILL.md`:
- Line 3: The description field uses second-person phrasing; change it to
third-person to match repo standards by replacing the current value of the
description key with a third-person sentence such as "This skill should be used
when building or running SvelteKit apps on Bun, including SSR, adapters, and
Bun-specific APIs." Update the description entry in SKILL.md (the description
key) accordingly.
In `@plugins/dependency-upgrade/skills/dependency-upgrade/SKILL.md`:
- Line 3: Update the frontmatter description in SKILL.md to third-person
wording: replace the phrase starting "Use when upgrading deps, configuring
security policies, or preventing supply chain attacks." with a third-person form
such as "This skill should be used when upgrading dependencies, configuring
security policies, or preventing supply chain attacks." Ensure the frontmatter
key 'description' is edited (and expand "deps" to "dependencies") to match repo
style.
- Around line 206-213: Update the Deno row in the package manager table: replace
the command `deno install --frozen` with the idiomatic project-level option such
as `deno cache --frozen` (or note configuring `"frozen": true` in deno.json) and
change the description to match others, e.g. "Fails if lockfile is out of sync"
to indicate lockfile enforcement during installation.
In `@plugins/nuxt-seo/skills/nuxt-seo/references/installation-guide.md`:
- Around line 53-60: Documentation uses unscoped module names in many places;
update every occurrence of the unscoped names used in installation commands and
module configuration blocks to their scoped equivalents (e.g., replace nuxt
module add
robots/sitemap/nuxt-og-image/nuxt-schema-org/nuxt-link-checker/nuxt-seo-utils/nuxt-site-config
with npx nuxt module add `@nuxtjs/robots`, `@nuxtjs/sitemap`, `@nuxtjs/og-image`,
`@nuxtjs/schema-org`, `@nuxtjs/link-checker`, `@nuxtjs/seo-utils`, `@nuxtjs/site-config`
respectively) in the listed docs (nuxt-content-integration.md,
module-details.md, modules-overview.md, seo-guides.md, troubleshooting.md,
common-patterns.md, api-reference.md, advanced-seo-guides.md); update both code
blocks and headings/inline mentions to keep terminology consistent and run a
repo-wide search for the old unscoped names to catch any remaining occurrences.
In `@plugins/nuxt-seo/skills/nuxt-seo/SKILL.md`:
- Around line 115-129: The doc line incorrectly recommends defineSitemapSchema()
for Content v3 in v5; update the phrasing to instruct using
asSitemapCollection() from `@nuxtjs/sitemap/content` instead, and remove the note
that asSitemapCollection() is deprecated; keep the server-side API note intact
(getSiteConfig(event) replaces useSiteConfig(event)). Ensure the line references
the correct symbols: replace mentions of defineSitemapSchema() with
asSitemapCollection(), and keep getSiteConfig(event) / useSiteConfig(event)
as-is.
In `@plugins/nuxt-v5/skills/nuxt-core/SKILL.md`:
- Line 46: The fenced code blocks showing directory examples (the blocks
containing "my-nuxt-app/" and "app/pages/") are missing language identifiers and
trigger markdownlint MD040; update each triple-backtick fence to include a
language tag such as ```text (or ```bash if you prefer) so the blocks become
"```text" at the start and close with "```", and apply the same change to the
other occurrence noted (the second directory example) to satisfy the lint rule
and the ONE_PAGE_CHECKLIST.md validation.
- Line 3: Update the frontmatter "description" in SKILL.md to a concise,
third-person sentence under 200 characters (preferably <100), e.g., start with
"This skill should be used when…" and summarize the intent (Nuxt 5 core setup,
routing, SEO, error handling, Vite/Nitro config); replace the current long,
first-person-style sentence with that shorter third-person phrasing.
In `@plugins/nuxt-v5/skills/nuxt-core/templates/nuxt.config.ts`:
- Around line 1-98: This Nuxt template (export default defineNuxtConfig) must be
executed and the results documented before merging: run type checking (tsc or
npm run build/typecheck) to verify typescript.strict and shim settings, start
the app locally (npm run dev) and do a production build+preview (npm run build
&& npm run preview) to validate nitro.preset, nitro.routeRules
(prerender/ssr/isr behaviors), vite/rollup output, image.cloudflare.baseURL and
fonts families; confirm devtools/modules load and that runtimeConfig/public
values are applied. After testing, add a concise “template testing” note to the
PR description (or the template frontmatter) listing the exact commands run and
observed results (success, any warnings, pages checked) so CI reviewers can
accept the template without code changes.
In `@plugins/nuxt-v5/skills/nuxt-production/SKILL.md`:
- Around line 1-517: SKILL.md is 517 lines—extract lower-priority, verbose
examples and long code blocks into references/*.md to reduce the main file under
500 lines: move extended Deployment examples (Cloudflare Workers, Vercel/Netlify
snippets), detailed Migration Steps 3–10 code blocks (server error handling,
event API, Vite rolldownOptions, routeRules, import path examples, JSX plugin),
long Troubleshooting sections and Rolldown/Vite warnings into new reference
files (e.g., references/deployment.md, references/migration.md,
references/troubleshooting.md), and keep only quick-start bullets, the short
"What's New in Nuxt 5" table, top-level headings like "Hydration Best
Practices", "Performance Optimization", and the minimal examples used for
immediate debugging (client-only placeholder, lazy hydration, and the Vitest
quick setup). Update SKILL.md links to point to the new references and remove
the moved code blocks and long tables to bring file length below 500 lines.
- Around line 3-14: Rewrite the SKILL.md frontmatter "description" field into a
concise third-person sentence (prefer <100 characters, maximum <200) that
summarizes the skill (e.g., "Optimizes Nuxt 5 production for hydration,
performance, testing, and deployment."). Replace the current multiline
"description" block with that single-line third-person sentence, remove usage
examples from the description (keep them in other fields if needed), and
eliminate the "comment placeholder" from Keywords; leave the existing Keywords
field intact otherwise.
In `@plugins/recommendation-engine/skills/recommendation-engine/SKILL.md`:
- Line 3: Update the description field in SKILL.md to a concise, third-person
sentence under 200 characters (ideally <100); replace the current
imperative/long line with a third-person summary such as: "Provides
collaborative filtering, matrix factorization, and hybrid approaches for product
recommendations and personalization, addressing cold-start and sparsity." Ensure
the updated value is assigned to the existing description key.
---
Outside diff comments:
In `@plugins/bun/skills/bun-nextjs/SKILL.md`:
- Around line 46-48: Update the package version strings in SKILL.md for the
Next/React dependencies: change "next" from ^16.1.1 to ^16.2.2 and update both
"react" and "react-dom" from ^19.2.3 to ^19.2.4 so the dependency block reflects
the current stable releases.
---
Nitpick comments:
In `@plugins/bun/skills/bun-test-lifecycle/SKILL.md`:
- Line 3: Update the skill description line in SKILL.md to use third-person
perspective instead of imperative voice; replace "Use for test lifecycle hooks:
beforeAll, afterAll, beforeEach, afterEach, fixtures, preload." with a phrasing
like "This skill should be used for test lifecycle hooks such as beforeAll,
afterAll, beforeEach, afterEach, fixtures, and preload." to match style
guidelines and maintain the same enumerated hooks.
In `@plugins/maz-ui/.claude-plugin/plugin.json`:
- Around line 13-16: The keywords array in plugin.json is too broad; update the
"keywords" entry (the list containing "maz", "tooling", "workflow", "ssr") to
include more targeted search terms such as "vue", "nuxt", "components" (and
optionally "vite" or "ui-library") so the plugin is more discoverable in the
marketplace.
In `@plugins/nuxt-v5/skills/nuxt-core/SKILL.md`:
- Around line 14-499: Add a new "## Keywords" section to SKILL.md (e.g., after
the "Quick Reference" or top-level header "Nuxt 5 Core Fundamentals") that lists
comprehensive keywords covering technologies, frameworks, use-cases and common
errors (include terms like: nuxt, nuxt 5, vue, nitro, vite, rolldown,
typescript, routing, file-based routing, middleware, runtime-config, app.config,
nuxt.config, vite-environment, vite-plugin, jsx, seo, meta-tags, error-handling,
clearNuxtState, createError, useRuntimeConfig, useSeoMeta, useFetch, server
routes, nitro v3, cloudflare_pages, build, deployment, typecheck, and common
errors like "route not found", "vite plugin warnings", "non-reactive route
params"). Ensure the section is clearly titled "Keywords" and formatted as a
comma- or newline-separated list to improve discoverability and match the
guideline.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 6e2bdcf3-28fe-4159-9ccf-49a9e3787512
📒 Files selected for processing (129)
.claude-plugin/marketplace.json.githooks/pre-push.github/workflows/validate-frontmatter.ymlFRONTMATTER_VALIDATION_REPORT.mdplugins/access-control-rbac/skills/access-control-rbac/SKILL.mdplugins/api-authentication/skills/api-authentication/SKILL.mdplugins/api-changelog-versioning/skills/api-changelog-versioning/SKILL.mdplugins/api-contract-testing/skills/api-contract-testing/SKILL.mdplugins/api-design-principles/skills/api-design-principles/SKILL.mdplugins/api-error-handling/skills/api-error-handling/SKILL.mdplugins/api-filtering-sorting/skills/api-filtering-sorting/SKILL.mdplugins/api-gateway-configuration/skills/api-gateway-configuration/SKILL.mdplugins/api-pagination/skills/api-pagination/SKILL.mdplugins/api-rate-limiting/skills/api-rate-limiting/SKILL.mdplugins/api-reference-documentation/skills/api-reference-documentation/SKILL.mdplugins/api-response-optimization/skills/api-response-optimization/SKILL.mdplugins/api-security-hardening/skills/api-security-hardening/SKILL.mdplugins/api-testing/skills/api-testing/SKILL.mdplugins/api-versioning-strategy/skills/api-versioning-strategy/SKILL.mdplugins/app-store-deployment/skills/app-store-deployment/SKILL.mdplugins/architecture-patterns/skills/architecture-patterns/SKILL.mdplugins/better-auth/skills/better-auth/SKILL.mdplugins/bun/skills/bun-bundler/SKILL.mdplugins/bun/skills/bun-cloudflare-workers/SKILL.mdplugins/bun/skills/bun-docker/SKILL.mdplugins/bun/skills/bun-drizzle-integration/SKILL.mdplugins/bun/skills/bun-ffi/SKILL.mdplugins/bun/skills/bun-file-io/SKILL.mdplugins/bun/skills/bun-hono-integration/SKILL.mdplugins/bun/skills/bun-hot-reloading/SKILL.mdplugins/bun/skills/bun-http-server/SKILL.mdplugins/bun/skills/bun-jest-migration/SKILL.mdplugins/bun/skills/bun-macros/SKILL.mdplugins/bun/skills/bun-nextjs/SKILL.mdplugins/bun/skills/bun-nuxt/SKILL.mdplugins/bun/skills/bun-package-manager/SKILL.mdplugins/bun/skills/bun-react-ssr/SKILL.mdplugins/bun/skills/bun-redis/SKILL.mdplugins/bun/skills/bun-runtime/SKILL.mdplugins/bun/skills/bun-shell/SKILL.mdplugins/bun/skills/bun-sqlite/SKILL.mdplugins/bun/skills/bun-sveltekit/SKILL.mdplugins/bun/skills/bun-tanstack-start/SKILL.mdplugins/bun/skills/bun-test-basics/SKILL.mdplugins/bun/skills/bun-test-coverage/SKILL.mdplugins/bun/skills/bun-test-lifecycle/SKILL.mdplugins/bun/skills/bun-test-mocking/SKILL.mdplugins/bun/skills/bun-websocket-server/SKILL.mdplugins/bun/skills/bun-workers/SKILL.mdplugins/claude-hook-writer/skills/claude-hook-writer/SKILL.mdplugins/cloudflare-workers/skills/cloudflare-workers-ci-cd/SKILL.mdplugins/cloudflare-workers/skills/cloudflare-workers-dev-experience/SKILL.mdplugins/cloudflare-workers/skills/cloudflare-workers-frameworks/SKILL.mdplugins/cloudflare-workers/skills/cloudflare-workers-migration/SKILL.mdplugins/cloudflare-workers/skills/cloudflare-workers-multi-lang/SKILL.mdplugins/cloudflare-workers/skills/cloudflare-workers-observability/SKILL.mdplugins/cloudflare-workers/skills/cloudflare-workers-performance/SKILL.mdplugins/cloudflare-workers/skills/cloudflare-workers-runtime-apis/SKILL.mdplugins/cloudflare-workers/skills/cloudflare-workers-security/SKILL.mdplugins/cloudflare-workers/skills/cloudflare-workers-testing/SKILL.mdplugins/code-review/skills/code-review/SKILL.mdplugins/csrf-protection/skills/csrf-protection/SKILL.mdplugins/database-schema-design/skills/database-schema-design/SKILL.mdplugins/database-sharding/skills/database-sharding/SKILL.mdplugins/defense-in-depth-validation/skills/defense-in-depth-validation/SKILL.mdplugins/dependency-upgrade/skills/dependency-upgrade/SKILL.mdplugins/dependency-upgrade/skills/dependency-upgrade/references/staged-upgrades.mdplugins/graphql-implementation/skills/graphql-implementation/SKILL.mdplugins/health-check-endpoints/skills/health-check-endpoints/SKILL.mdplugins/idempotency-handling/skills/idempotency-handling/SKILL.mdplugins/internationalization-i18n/skills/internationalization-i18n/SKILL.mdplugins/jest-generator/skills/jest-generator/SKILL.mdplugins/logging-best-practices/skills/logging-best-practices/SKILL.mdplugins/maz-ui/.claude-plugin/plugin.jsonplugins/maz-ui/skills/maz-ui/SKILL.mdplugins/mcp-management/skills/mcp-management/SKILL.mdplugins/microservices-patterns/skills/microservices-patterns/SKILL.mdplugins/ml-model-training/skills/ml-model-training/SKILL.mdplugins/ml-pipeline-automation/skills/ml-pipeline-automation/SKILL.mdplugins/mobile-app-debugging/skills/mobile-app-debugging/SKILL.mdplugins/mobile-app-testing/skills/mobile-app-testing/SKILL.mdplugins/mobile-first-design/skills/mobile-first-design/SKILL.mdplugins/mobile-offline-support/skills/mobile-offline-support/SKILL.mdplugins/model-deployment/skills/model-deployment/SKILL.mdplugins/neon-vercel-postgres/skills/neon-vercel-postgres/SKILL.mdplugins/nuxt-seo/skills/nuxt-seo/SKILL.mdplugins/nuxt-seo/skills/nuxt-seo/assets/package-versions.jsonplugins/nuxt-seo/skills/nuxt-seo/references/installation-guide.mdplugins/nuxt-studio/skills/nuxt-studio/SKILL.mdplugins/nuxt-ui-v4/README.mdplugins/nuxt-ui-v4/skills/nuxt-ui-v4/SKILL.mdplugins/nuxt-v5/commands/nuxt-setup.mdplugins/nuxt-v5/skills/nuxt-core/SKILL.mdplugins/nuxt-v5/skills/nuxt-core/templates/nuxt.config.tsplugins/nuxt-v5/skills/nuxt-production/SKILL.mdplugins/nuxt-v5/skills/nuxt-production/references/deployment-cloudflare.mdplugins/nuxt-v5/skills/nuxt-production/references/performance.mdplugins/nuxt-v5/skills/nuxt-production/references/testing-vitest.mdplugins/oauth-implementation/skills/oauth-implementation/SKILL.mdplugins/payment-gateway-integration/skills/payment-gateway-integration/SKILL.mdplugins/plan-interview/skills/plan-interview/SKILL.mdplugins/playwright/skills/playwright/SKILL.mdplugins/push-notification-setup/skills/push-notification-setup/SKILL.mdplugins/react-best-practices/skills/react-best-practices/SKILL.mdplugins/recommendation-engine/skills/recommendation-engine/SKILL.mdplugins/recommendation-system/skills/recommendation-system/SKILL.mdplugins/responsive-web-design/skills/responsive-web-design/SKILL.mdplugins/rest-api-design/skills/rest-api-design/SKILL.mdplugins/root-cause-tracing/skills/root-cause-tracing/SKILL.mdplugins/security-headers-configuration/skills/security-headers-configuration/SKILL.mdplugins/seo-keyword-cluster-builder/skills/seo-keyword-cluster-builder/SKILL.mdplugins/seo-optimizer/skills/seo-optimizer/SKILL.mdplugins/session-management/skills/session-management/SKILL.mdplugins/systematic-debugging/skills/systematic-debugging/SKILL.mdplugins/technical-specification/skills/technical-specification/SKILL.mdplugins/test-quality-analysis/skills/test-quality-analysis/SKILL.mdplugins/threejs/skills/threejs/SKILL.mdplugins/turborepo/skills/turborepo/SKILL.mdplugins/verification-before-completion/skills/verification-before-completion/SKILL.mdplugins/vitest-testing/skills/vitest-testing/SKILL.mdplugins/vulnerability-scanning/skills/vulnerability-scanning/SKILL.mdplugins/websocket-implementation/skills/websocket-implementation/SKILL.mdplugins/woocommerce-backend-dev/skills/woocommerce-backend-dev/SKILL.mdplugins/woocommerce-code-review/skills/woocommerce-code-review/SKILL.mdplugins/woocommerce-copy-guidelines/skills/woocommerce-copy-guidelines/SKILL.mdplugins/woocommerce-dev-cycle/skills/woocommerce-dev-cycle/SKILL.mdschemas/plugin.schema.jsonscripts/sync-plugins.shscripts/validate-frontmatter.sh
✅ Files skipped from review due to trivial changes (88)
- plugins/claude-hook-writer/skills/claude-hook-writer/SKILL.md
- plugins/bun/skills/bun-redis/SKILL.md
- plugins/csrf-protection/skills/csrf-protection/SKILL.md
- plugins/logging-best-practices/skills/logging-best-practices/SKILL.md
- plugins/api-authentication/skills/api-authentication/SKILL.md
- plugins/graphql-implementation/skills/graphql-implementation/SKILL.md
- plugins/mobile-first-design/skills/mobile-first-design/SKILL.md
- plugins/api-pagination/skills/api-pagination/SKILL.md
- plugins/mobile-offline-support/skills/mobile-offline-support/SKILL.md
- plugins/bun/skills/bun-sqlite/SKILL.md
- plugins/jest-generator/skills/jest-generator/SKILL.md
- plugins/api-error-handling/skills/api-error-handling/SKILL.md
- plugins/access-control-rbac/skills/access-control-rbac/SKILL.md
- plugins/microservices-patterns/skills/microservices-patterns/SKILL.md
- plugins/api-reference-documentation/skills/api-reference-documentation/SKILL.md
- plugins/defense-in-depth-validation/skills/defense-in-depth-validation/SKILL.md
- plugins/better-auth/skills/better-auth/SKILL.md
- plugins/api-response-optimization/skills/api-response-optimization/SKILL.md
- plugins/health-check-endpoints/skills/health-check-endpoints/SKILL.md
- plugins/api-contract-testing/skills/api-contract-testing/SKILL.md
- plugins/cloudflare-workers/skills/cloudflare-workers-runtime-apis/SKILL.md
- plugins/api-rate-limiting/skills/api-rate-limiting/SKILL.md
- plugins/cloudflare-workers/skills/cloudflare-workers-dev-experience/SKILL.md
- plugins/maz-ui/skills/maz-ui/SKILL.md
- plugins/api-testing/skills/api-testing/SKILL.md
- plugins/session-management/skills/session-management/SKILL.md
- plugins/cloudflare-workers/skills/cloudflare-workers-observability/SKILL.md
- plugins/mobile-app-debugging/skills/mobile-app-debugging/SKILL.md
- plugins/bun/skills/bun-websocket-server/SKILL.md
- plugins/api-security-hardening/skills/api-security-hardening/SKILL.md
- plugins/oauth-implementation/skills/oauth-implementation/SKILL.md
- plugins/neon-vercel-postgres/skills/neon-vercel-postgres/SKILL.md
- plugins/code-review/skills/code-review/SKILL.md
- plugins/cloudflare-workers/skills/cloudflare-workers-performance/SKILL.md
- plugins/api-filtering-sorting/skills/api-filtering-sorting/SKILL.md
- plugins/payment-gateway-integration/skills/payment-gateway-integration/SKILL.md
- plugins/bun/skills/bun-package-manager/SKILL.md
- plugins/architecture-patterns/skills/architecture-patterns/SKILL.md
- plugins/turborepo/skills/turborepo/SKILL.md
- plugins/bun/skills/bun-hot-reloading/SKILL.md
- plugins/bun/skills/bun-shell/SKILL.md
- plugins/test-quality-analysis/skills/test-quality-analysis/SKILL.md
- plugins/playwright/skills/playwright/SKILL.md
- plugins/api-design-principles/skills/api-design-principles/SKILL.md
- plugins/api-versioning-strategy/skills/api-versioning-strategy/SKILL.md
- plugins/push-notification-setup/skills/push-notification-setup/SKILL.md
- plugins/api-changelog-versioning/skills/api-changelog-versioning/SKILL.md
- plugins/react-best-practices/skills/react-best-practices/SKILL.md
- plugins/cloudflare-workers/skills/cloudflare-workers-ci-cd/SKILL.md
- plugins/rest-api-design/skills/rest-api-design/SKILL.md
- plugins/bun/skills/bun-drizzle-integration/SKILL.md
- plugins/app-store-deployment/skills/app-store-deployment/SKILL.md
- plugins/security-headers-configuration/skills/security-headers-configuration/SKILL.md
- plugins/seo-optimizer/skills/seo-optimizer/SKILL.md
- plugins/bun/skills/bun-cloudflare-workers/SKILL.md
- plugins/cloudflare-workers/skills/cloudflare-workers-migration/SKILL.md
- plugins/database-sharding/skills/database-sharding/SKILL.md
- plugins/bun/skills/bun-test-mocking/SKILL.md
- plugins/bun/skills/bun-nuxt/SKILL.md
- plugins/api-gateway-configuration/skills/api-gateway-configuration/SKILL.md
- plugins/model-deployment/skills/model-deployment/SKILL.md
- plugins/bun/skills/bun-runtime/SKILL.md
- plugins/responsive-web-design/skills/responsive-web-design/SKILL.md
- plugins/bun/skills/bun-tanstack-start/SKILL.md
- plugins/recommendation-system/skills/recommendation-system/SKILL.md
- plugins/plan-interview/skills/plan-interview/SKILL.md
- plugins/bun/skills/bun-test-coverage/SKILL.md
- plugins/bun/skills/bun-jest-migration/SKILL.md
- plugins/seo-keyword-cluster-builder/skills/seo-keyword-cluster-builder/SKILL.md
- plugins/bun/skills/bun-file-io/SKILL.md
- plugins/bun/skills/bun-macros/SKILL.md
- plugins/bun/skills/bun-workers/SKILL.md
- plugins/bun/skills/bun-react-ssr/SKILL.md
- plugins/cloudflare-workers/skills/cloudflare-workers-multi-lang/SKILL.md
- plugins/bun/skills/bun-http-server/SKILL.md
- plugins/bun/skills/bun-bundler/SKILL.md
- plugins/bun/skills/bun-docker/SKILL.md
- plugins/root-cause-tracing/skills/root-cause-tracing/SKILL.md
- plugins/technical-specification/skills/technical-specification/SKILL.md
- plugins/internationalization-i18n/skills/internationalization-i18n/SKILL.md
- plugins/idempotency-handling/skills/idempotency-handling/SKILL.md
- plugins/dependency-upgrade/skills/dependency-upgrade/references/staged-upgrades.md
- plugins/bun/skills/bun-test-basics/SKILL.md
- plugins/nuxt-v5/skills/nuxt-production/references/deployment-cloudflare.md
- plugins/nuxt-v5/skills/nuxt-production/references/performance.md
- plugins/nuxt-v5/skills/nuxt-production/references/testing-vitest.md
- plugins/nuxt-v5/commands/nuxt-setup.md
- plugins/nuxt-ui-v4/skills/nuxt-ui-v4/SKILL.md
🚧 Files skipped from review as they are similar to previous changes (5)
- FRONTMATTER_VALIDATION_REPORT.md
- .githooks/pre-push
- .github/workflows/validate-frontmatter.yml
- plugins/nuxt-seo/skills/nuxt-seo/assets/package-versions.json
- plugins/nuxt-ui-v4/README.md
| --- | ||
| name: Bun SvelteKit | ||
| name: bun-sveltekit | ||
| description: Use when building or running SvelteKit apps on Bun, including SSR, adapters, and Bun-specific APIs |
There was a problem hiding this comment.
Use third-person phrasing in description.
Please rewrite the description to third-person style to match repo standards (e.g., “This skill should be used when…”).
✏️ Suggested update
-description: Use when building or running SvelteKit apps on Bun, including SSR, adapters, and Bun-specific APIs
+description: This skill should be used when building or running SvelteKit apps on Bun, including SSR, adapters, and Bun-specific APIsAs per coding guidelines, "Use third-person perspective in skill descriptions (e.g., 'This skill should be used when...' instead of 'You should...') and imperative/infinitive form in instructions."
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| description: Use when building or running SvelteKit apps on Bun, including SSR, adapters, and Bun-specific APIs | |
| description: This skill should be used when building or running SvelteKit apps on Bun, including SSR, adapters, and Bun-specific APIs |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/bun/skills/bun-sveltekit/SKILL.md` at line 3, The description field
uses second-person phrasing; change it to third-person to match repo standards
by replacing the current value of the description key with a third-person
sentence such as "This skill should be used when building or running SvelteKit
apps on Bun, including SSR, adapters, and Bun-specific APIs." Update the
description entry in SKILL.md (the description key) accordingly.
| --- | ||
| name: dependency-upgrade | ||
| description: Manage major dependency version upgrades with compatibility analysis, staged rollout, and comprehensive testing. Use when upgrading framework versions, updating major dependencies, or managing breaking changes in libraries. | ||
| description: "Secure dependency upgrades with supply chain protection, cooldowns, and staged rollout. Use when upgrading deps, configuring security policies, or preventing supply chain attacks." |
There was a problem hiding this comment.
Use third-person wording in the frontmatter description.
The description currently uses “Use when …”; switch to third-person style per repo standard.
Suggested edit
-description: "Secure dependency upgrades with supply chain protection, cooldowns, and staged rollout. Use when upgrading deps, configuring security policies, or preventing supply chain attacks."
+description: "This skill should be used to secure dependency upgrades with supply chain protection, cooldowns, and staged rollout."As per coding guidelines, "Use third-person perspective in skill descriptions (e.g., 'This skill should be used when...' instead of 'You should...') and imperative/infinitive form in instructions."
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| description: "Secure dependency upgrades with supply chain protection, cooldowns, and staged rollout. Use when upgrading deps, configuring security policies, or preventing supply chain attacks." | |
| description: "This skill should be used to secure dependency upgrades with supply chain protection, cooldowns, and staged rollout." |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/dependency-upgrade/skills/dependency-upgrade/SKILL.md` at line 3,
Update the frontmatter description in SKILL.md to third-person wording: replace
the phrase starting "Use when upgrading deps, configuring security policies, or
preventing supply chain attacks." with a third-person form such as "This skill
should be used when upgrading dependencies, configuring security policies, or
preventing supply chain attacks." Ensure the frontmatter key 'description' is
edited (and expand "deps" to "dependencies") to match repo style.
| | Package Manager | Command | What It Does | | ||
| |----------------|---------|-------------| | ||
| | npm | `npm ci` | Deletes node_modules, installs exact lockfile versions | | ||
| | Bun | `bun install --frozen-lockfile` | Fails if lockfile is out of sync | | ||
| | pnpm | `pnpm install --frozen-lockfile` | Fails if lockfile is out of sync | | ||
| | Yarn | `yarn install --immutable --immutable-cache` | Validates lockfile and cache | | ||
| | Deno | `deno install --frozen` | Frozen installation | | ||
|
|
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
What is the correct Deno command/workflow to enforce lockfile-frozen dependency installs in current Deno (v2+)?
💡 Result:
The correct Deno command/workflow to enforce lockfile-frozen dependency installs in Deno v2+ uses the --frozen flag (alias --frozen-lockfile) on commands that resolve dependencies like deno run, deno install, deno test, deno cache, deno doc, and deno compile. This flag errors if the lockfile (deno.lock) is out of date or missing entries, preventing unintended dependency changes. ### Workflow: 1. Development (update lockfile): Run without --frozen or with --frozen=false to allow updates: deno install # or deno cache --entrypoint main.ts deno run main.ts Commit deno.lock. 2. CI/Production (enforce frozen): Use --frozen to verify exact match: deno run --frozen main.ts deno test --frozen deno install --frozen ### Configuration Alternative: Set "lock": { "frozen": true } in deno.json for project-wide enforcement (override with --frozen=false). To update: Temporarily set "frozen": false or use --frozen=false, update, review deno.lock diff, re-freeze, and commit. This ensures reproducible builds; new/unseen dependencies fail fast. Examples from errors: "Run deno install --frozen=false" to update.
Citations:
- 1: feat(cli): Add
--frozenflag to error out if lockfile is out of date denoland/deno#24355 - 2: https://docs.deno.com/runtime/fundamentals/modules/
- 3: https://denoland.deno.dev/manual/tools
- 4: https://docs.deno.com/runtime/manual/tools/
Clarify Deno command for frozen dependency installs.
deno install --frozen is valid but not idiomatic for freezing project dependencies. For the context of this table (dependency lock enforcement during installation), use deno cache --frozen or configure "frozen": true in deno.json instead. The description should also specify the behavior (e.g., "Fails if lockfile is out of sync") to match other entries.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/dependency-upgrade/skills/dependency-upgrade/SKILL.md` around lines
206 - 213, Update the Deno row in the package manager table: replace the command
`deno install --frozen` with the idiomatic project-level option such as `deno
cache --frozen` (or note configuring `"frozen": true` in deno.json) and change
the description to match others, e.g. "Fails if lockfile is out of sync" to
indicate lockfile enforcement during installation.
| npx nuxt module add @nuxtjs/robots | ||
| npx nuxt module add @nuxtjs/sitemap | ||
| npx nuxt module add nuxt-og-image | ||
| npx nuxt module add nuxt-schema-org | ||
| npx nuxt module add nuxt-link-checker | ||
| npx nuxt module add nuxt-seo-utils | ||
| npx nuxt module add nuxt-site-config | ||
| ``` |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Find unscoped nuxt-robots and nuxt-sitemap references in nuxt-seo docs
rg -n '\bnuxt-(robots|sitemap)\b' plugins/nuxt-seo/ -g '*.md' -C2Repository: secondsky/claude-skills
Length of output: 13700
Expand scope: multiple reference files still use unscoped package names.
While installation-guide.md consistently uses scoped package names (@nuxtjs/robots, @nuxtjs/sitemap), many other documentation files still reference the unscoped module names. This creates inconsistency across the documentation:
nuxt-content-integration.md(lines 60-61)module-details.md(lines 11-12, 54, 67, 165, 178)modules-overview.md(lines 344-345, 396-397, 404-405)seo-guides.md(lines 689, 694)troubleshooting.md(multiple occurrences)common-patterns.md(lines 388-389)api-reference.md(section headers)advanced-seo-guides.md(lines 30, 673)
Update these files to consistently use scoped package names in installation commands and module configurations.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/nuxt-seo/skills/nuxt-seo/references/installation-guide.md` around
lines 53 - 60, Documentation uses unscoped module names in many places; update
every occurrence of the unscoped names used in installation commands and module
configuration blocks to their scoped equivalents (e.g., replace nuxt module add
robots/sitemap/nuxt-og-image/nuxt-schema-org/nuxt-link-checker/nuxt-seo-utils/nuxt-site-config
with npx nuxt module add `@nuxtjs/robots`, `@nuxtjs/sitemap`, `@nuxtjs/og-image`,
`@nuxtjs/schema-org`, `@nuxtjs/link-checker`, `@nuxtjs/seo-utils`, `@nuxtjs/site-config`
respectively) in the listed docs (nuxt-content-integration.md,
module-details.md, modules-overview.md, seo-guides.md, troubleshooting.md,
common-patterns.md, api-reference.md, advanced-seo-guides.md); update both code
blocks and headings/inline mentions to keep terminology consistent and run a
repo-wide search for the old unscoped names to catch any remaining occurrences.
| - Set `site.url` AND `site.name` explicitly in nuxt.config.ts (v5: name no longer auto-inferred) | ||
| - Use environment variables for multi-environment setups | ||
| - Configure robots.txt to block admin/private pages | ||
| - Add Schema.org structured data to all important pages | ||
| - Generate OG images for social sharing | ||
| - Use `getSiteConfig(event)` on server side (v5: `useSiteConfig(event)` removed) | ||
| - Use `defineSitemapSchema()` for Content v3 (v5: `asSitemapCollection()` deprecated) | ||
|
|
||
| ### Never Do | ||
|
|
||
| ❌ Forget to set `site.url` (breaks sitemaps and canonical URLs) | ||
| ❌ Allow crawling of staging environments | ||
| ❌ Skip Schema.org for key pages (products, articles, events) | ||
| ❌ Deploy without testing OG images | ||
| ❌ Use outdated module versions | ||
| ❌ Ignore broken links found by link checker | ||
| ❌ Forget to exclude admin/private routes from sitemap | ||
| ❌ Use wrong rendering engine for OG images (Chromium vs Satori) | ||
| - Forget to set `site.url` and `site.name` (breaks sitemaps, canonical URLs, titles) | ||
| - Allow crawling of staging environments | ||
| - Use `useSiteConfig(event)` on server side (v5: use `getSiteConfig(event)`) | ||
| - Use `asSitemapCollection()` (v5: use `defineSitemapSchema()`) | ||
| - Use `getSiteIndexable()` (v5: use `{ indexable } = getSiteConfig(event)`) |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
What are the correct composables for accessing site configuration in Nuxt SEO v5 and nuxt-site-config v4? Is it useSiteConfig() or getSiteConfig(event) for server-side usage?
💡 Result:
In Nuxt SEO v5 (which depends on nuxt-site-config v4), the correct composables for accessing site configuration are: - useSiteConfig for client-side and general Nuxt contexts (components, composables, plugins). - getSiteConfig(event) for server-side Nitro contexts (server routes, middleware, plugins requiring H3Event). The previous server-side useSiteConfig(event) was removed in nuxt-site-config v4 to avoid auto-import conflicts; use getSiteConfig(event) instead.
Citations:
- 1: https://nuxtseo.com/docs/site-config/nitro-api/use-site-config
- 2: https://nuxtseo.com/docs/site-config/releases/v4
- 3: https://nuxtseo.com/docs/site-config/api/use-site-config
- 4: https://nuxtseo.com/docs/site-config/api/config
🌐 Web query:
What are the correct Nuxt Content v3 composables for sitemap integration in Nuxt SEO v5? Is it defineSitemapSchema() or asSitemapCollection()?
💡 Result:
For Nuxt Content v3 sitemap integration with Nuxt SEO v5 (which includes @nuxtjs/sitemap v8), the correct composable is asSitemapCollection from '@nuxtjs/sitemap/content'. It wraps defineCollection in content.config.ts to enable sitemap frontmatter. Example from official docs: content.config.ts import { defineCollection, defineContentConfig } from '@nuxt/content' import { asSitemapCollection } from '@nuxtjs/sitemap/content' export default defineContentConfig({ collections: { content: defineCollection( asSitemapCollection({ type: 'page', source: '/*.md', }), ), }, }) Some docs mention defineSitemapSchema added to the Zod schema: import { defineSitemapSchema } from '@nuxtjs/sitemap/content' import { z } from 'zod' schema: z.object({ sitemap: defineSitemapSchema, }), However, the primary and most consistently documented method across recent official Nuxt SEO / Sitemap docs (updated Jan 2026) is asSitemapCollection. Load '@nuxtjs/sitemap' before '@nuxt/content' in modules array. defineSitemapSchema appears as a schema helper for typed frontmatter, but asSitemapCollection is the integration wrapper. Use asSitemapCollection for full integration.
Citations:
- 1: https://nuxtseo.com/docs/sitemap/integrations/content
- 2: https://nuxtseo.com/docs/sitemap/guides/content
- 3: https://nuxtseo.com/docs/sitemap/getting-started/data-sources
🏁 Script executed:
#!/bin/bash
# Search for getSiteConfig and useSiteConfig usage patterns in reference docs
echo "=== Searching for getSiteConfig usage ==="
rg -n "getSiteConfig" plugins/nuxt-seo/skills/nuxt-seo/references/ -A2 -B2
echo -e "\n=== Searching for useSiteConfig usage ==="
rg -n "useSiteConfig" plugins/nuxt-seo/skills/nuxt-seo/references/ -A2 -B2
echo -e "\n=== Searching for defineSitemapSchema and asSitemapCollection ==="
rg -n "(defineSitemapSchema|asSitemapCollection)" plugins/nuxt-seo/skills/nuxt-seo/references/ -A2 -B2Repository: secondsky/claude-skills
Length of output: 18348
Fix incorrect sitemap API reference: use asSitemapCollection() not defineSitemapSchema() for Nuxt Content v3 in v5.
Line 121 states "Use defineSitemapSchema() for Content v3 (v5: asSitemapCollection() deprecated)", but official Nuxt SEO v5 documentation (updated January 2026) indicates the opposite: asSitemapCollection() from @nuxtjs/sitemap/content is the correct integration wrapper for Content v3 sitemaps in v5, while defineSitemapSchema() is only a schema helper for Zod frontmatter typing—not the primary integration method.
Replace the defineSitemapSchema() reference with asSitemapCollection() to align with current v5 API.
Note: The server-side API statement on the same line—"Use getSiteConfig(event) on server side (v5: useSiteConfig(event) removed)"—is correct and verified.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/nuxt-seo/skills/nuxt-seo/SKILL.md` around lines 115 - 129, The doc
line incorrectly recommends defineSitemapSchema() for Content v3 in v5; update
the phrasing to instruct using asSitemapCollection() from
`@nuxtjs/sitemap/content` instead, and remove the note that asSitemapCollection()
is deprecated; keep the server-side API note intact (getSiteConfig(event)
replaces useSiteConfig(event)). Ensure the line references the correct symbols:
replace mentions of defineSitemapSchema() with asSitemapCollection(), and keep
getSiteConfig(event) / useSiteConfig(event) as-is.
|
|
||
| ## Directory Structure (Nuxt v5) | ||
|
|
||
| ``` |
There was a problem hiding this comment.
Add language identifiers to fenced code blocks.
These fences are missing a language tag, which triggers markdownlint (MD040).
📝 Suggested update
-```
+```text
my-nuxt-app/
...
-```
+```
-```
+```text
app/pages/
...
-```
+```As per coding guidelines, "Validate skill YAML frontmatter format and ensure all required fields are present before committing using the ONE_PAGE_CHECKLIST.md verification process."
Also applies to: 241-241
🧰 Tools
🪛 markdownlint-cli2 (0.22.0)
[warning] 46-46: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/nuxt-v5/skills/nuxt-core/SKILL.md` at line 46, The fenced code blocks
showing directory examples (the blocks containing "my-nuxt-app/" and
"app/pages/") are missing language identifiers and trigger markdownlint MD040;
update each triple-backtick fence to include a language tag such as ```text (or
```bash if you prefer) so the blocks become "```text" at the start and close
with "```", and apply the same change to the other occurrence noted (the second
directory example) to satisfy the lint rule and the ONE_PAGE_CHECKLIST.md
validation.
| export default defineNuxtConfig({ | ||
| future: { | ||
| compatibilityVersion: 5 | ||
| }, | ||
|
|
||
| devtools: { enabled: true }, | ||
|
|
||
| modules: [ | ||
| '@nuxt/ui', | ||
| '@nuxt/image', | ||
| '@nuxt/fonts', | ||
| '@nuxthub/core' | ||
| ], | ||
|
|
||
| hub: { | ||
| database: true, | ||
| kv: true, | ||
| blob: true, | ||
| cache: true | ||
| }, | ||
|
|
||
| runtimeConfig: { | ||
| apiSecret: '', | ||
| databaseUrl: '', | ||
| jwtSecret: '', | ||
|
|
||
| public: { | ||
| apiBase: '/api', | ||
| appName: 'My Nuxt App', | ||
| appUrl: 'http://localhost:3000' | ||
| } | ||
| }, | ||
|
|
||
| app: { | ||
| head: { | ||
| title: 'My Nuxt App', | ||
| titleTemplate: '%s | My Nuxt App', | ||
| meta: [ | ||
| { charset: 'utf-8' }, | ||
| { name: 'viewport', content: 'width=device-width, initial-scale=1' }, | ||
| { name: 'description', content: 'My awesome Nuxt application' } | ||
| ], | ||
| link: [ | ||
| { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' } | ||
| ] | ||
| } | ||
| }, | ||
|
|
||
| nitro: { | ||
| preset: 'cloudflare_pages', | ||
|
|
||
| experimental: { | ||
| websocket: true | ||
| }, | ||
|
|
||
| routeRules: { | ||
| '/': { prerender: true }, | ||
| '/about': { prerender: true }, | ||
| '/blog/**': { swr: 3600, isr: true }, | ||
| '/api/posts': { swr: 600 }, | ||
| '/dashboard/**': { ssr: false }, | ||
| '/_nuxt/**': { headers: { 'Cache-Control': 'public, max-age=31536000, immutable' } } | ||
| }, | ||
|
|
||
| compressPublicAssets: true, | ||
| minify: true | ||
| }, | ||
|
|
||
| typescript: { | ||
| strict: true, | ||
| typeCheck: true, | ||
| shim: false | ||
| }, | ||
|
|
||
| vite: { | ||
| build: { | ||
| rolldownOptions: { | ||
| output: { | ||
| advancedChunks: { | ||
| groups: [{ name: 'vendor', test: /\/(vue|vue-router)/ }] | ||
| } | ||
| } | ||
| } | ||
| } | ||
| }, | ||
|
|
||
| image: { | ||
| cloudflare: { | ||
| baseURL: '' | ||
| } | ||
| }, | ||
|
|
||
| fonts: { | ||
| families: [ | ||
| { name: 'Inter', provider: 'google' } | ||
| ] | ||
| } | ||
| }) |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Confirm file presence
fd -a "nuxt.config.ts" | rg -n "plugins/nuxt-v5/skills/nuxt-core/templates/nuxt.config.ts"
# Look for tests or validators referencing nuxt-v5 templates
rg -n -C2 --iglob '*{test,spec}*' 'nuxt-v5|nuxt-core/templates|template.*validate|validate.*template'
# Look for CI workflow steps that validate templates/plugins
rg -n -C2 --iglob '*.yml' --iglob '*.yaml' 'template|validate|plugin|marketplace|nuxt-v5' .github/workflowsRepository: secondsky/claude-skills
Length of output: 145
🏁 Script executed:
# Check if there's a test directory or test configuration
fd -type f -name "*.json" | head -20 | xargs grep -l "test\|jest\|vitest" 2>/dev/null | head -10Repository: secondsky/claude-skills
Length of output: 237
🏁 Script executed:
# Look for any existing templates in the repository to understand testing patterns
fd -path "*/templates/*" -type f | head -20Repository: secondsky/claude-skills
Length of output: 235
🏁 Script executed:
# Search for template-related test/validation infrastructure
rg -l "template" --type js --type ts --type json | grep -E "(test|spec|validate|check)" | head -20Repository: secondsky/claude-skills
Length of output: 243
🏁 Script executed:
# Check for any test or build scripts in package.json files
find . -name "package.json" -type f | head -10 | xargs cat | grep -A 5 -B 5 "test\|script"Repository: secondsky/claude-skills
Length of output: 5641
🏁 Script executed:
# Check the validate script
cat ./scripts/validate-json-schemas.shRepository: secondsky/claude-skills
Length of output: 3429
🏁 Script executed:
# Look for GitHub Actions workflows that might test templates
find .github/workflows -name "*.yml" -o -name "*.yaml" 2>/dev/null | head -10Repository: secondsky/claude-skills
Length of output: 153
🏁 Script executed:
# Check if there's any test infrastructure at the root or in nuxt-v5 plugin
find . -path "./plugins/nuxt-v5*" -name "*.json" | head -20Repository: secondsky/claude-skills
Length of output: 139
🏁 Script executed:
# Search for any documentation on template testing
find . -name "README.md" -o -name "TESTING.md" -o -name "CONTRIBUTING.md" | xargs ls -la 2>/dev/nullRepository: secondsky/claude-skills
Length of output: 14152
🏁 Script executed:
cat .github/workflows/validate-json-schemas.ymlRepository: secondsky/claude-skills
Length of output: 1117
🏁 Script executed:
cat .github/workflows/validate-frontmatter.ymlRepository: secondsky/claude-skills
Length of output: 1651
🏁 Script executed:
cat ./plugins/nuxt-v5/README.mdRepository: secondsky/claude-skills
Length of output: 5761
Template execution evidence required per coding guidelines.
The coding guidelines mandate that all code templates in skill template directories must be tested before committing. The current CI workflows (validate-json-schemas.yml and validate-frontmatter.yml) only validate JSON schemas and frontmatter metadata—they do not execute or verify the functionality of template code itself.
Please confirm this template has been executed and tested locally, and document the testing approach (e.g., npm run dev with the generated config, type checking, or specific validation steps) before merging.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/nuxt-v5/skills/nuxt-core/templates/nuxt.config.ts` around lines 1 -
98, This Nuxt template (export default defineNuxtConfig) must be executed and
the results documented before merging: run type checking (tsc or npm run
build/typecheck) to verify typescript.strict and shim settings, start the app
locally (npm run dev) and do a production build+preview (npm run build && npm
run preview) to validate nitro.preset, nitro.routeRules (prerender/ssr/isr
behaviors), vite/rollup output, image.cloudflare.baseURL and fonts families;
confirm devtools/modules load and that runtimeConfig/public values are applied.
After testing, add a concise “template testing” note to the PR description (or
the template frontmatter) listing the exact commands run and observed results
(success, any warnings, pages checked) so CI reviewers can accept the template
without code changes.
| --- | ||
| name: nuxt-production | ||
| description: | | ||
| Nuxt 5 production optimization: hydration, performance, testing with Vitest, | ||
| deployment to Cloudflare/Vercel/Netlify, and migration from Nuxt 4. | ||
|
|
||
| Use when: debugging hydration mismatches, optimizing performance and Core Web Vitals, | ||
| writing tests with Vitest, deploying to Cloudflare Pages/Workers/Vercel/Netlify, | ||
| or migrating from Nuxt 4 to Nuxt 5. | ||
|
|
||
| Keywords: hydration, hydration mismatch, ClientOnly, SSR, performance, | ||
| lazy loading, lazy hydration, Vitest, testing, deployment, Cloudflare Pages, | ||
| Cloudflare Workers, Vercel, Netlify, NuxtHub, migration, Nuxt 4 to Nuxt 5, | ||
| Rolldown, Vite 8, Nitro v3, comment placeholder | ||
| license: MIT | ||
| metadata: | ||
| version: 5.0.0 | ||
| author: Claude Skills Maintainers | ||
| category: Framework | ||
| framework: Nuxt | ||
| framework-version: 5.x | ||
| last-verified: 2026-03-30 | ||
| --- | ||
|
|
||
| # Nuxt 5 Production Guide | ||
|
|
||
| Hydration, performance, testing, deployment, and migration patterns. | ||
|
|
||
| ## What's New in Nuxt 5 | ||
|
|
||
| ### v5 Key Changes | ||
|
|
||
| | Change | Nuxt 4 | Nuxt 5 | | ||
| |--------|--------|--------| | ||
| | Bundler | Vite 6 (esbuild + Rollup) | Vite 8 (Rolldown) | | ||
| | Server engine | Nitro v2 | Nitro v3 (h3 v2) | | ||
| | Server errors | `createError({statusCode})` | `HTTPError({status})` | | ||
| | Client-only placeholder | Empty `<div>` | HTML comment node | | ||
| | callHook | Always returns Promise | May return void | | ||
| | clearNuxtState | Sets to `undefined` | Resets to initial default | | ||
| | Page names | Auto-generated | Normalized to route names | | ||
| | JSX support | Included by default | Optional (on-demand) | | ||
| | externalVue | Configurable | Removed (always mocked) | | ||
|
|
||
| ### Client-Only Comment Placeholders (v5) | ||
|
|
||
| Client-only components (`.client.vue` files and `createClientOnly()` wrappers) now render an HTML comment on the server instead of an empty `<div>`. This fixes scoped styles hydration issues. | ||
|
|
||
| ```vue | ||
| <!-- If you relied on the placeholder <div> for layout --> | ||
| <ClientOnly> | ||
| <MyComponent /> | ||
| <template #fallback> | ||
| <div class="placeholder" style="min-height: 200px"></div> | ||
| </template> | ||
| </ClientOnly> | ||
| ``` | ||
|
|
||
| To revert to the old `<div>` behavior: | ||
|
|
||
| ```typescript | ||
| // nuxt.config.ts | ||
| export default defineNuxtConfig({ | ||
| experimental: { | ||
| clientNodePlaceholder: false | ||
| } | ||
| }) | ||
| ``` | ||
|
|
||
| ### Non-Async callHook (v5) | ||
|
|
||
| `callHook` may now return `void` instead of always returning `Promise`. Always use `await`: | ||
|
|
||
| ```typescript | ||
| // WRONG | ||
| nuxtApp.callHook('my:hook', data).then(() => { ... }) | ||
|
|
||
| // CORRECT | ||
| await nuxtApp.callHook('my:hook', data) | ||
| ``` | ||
|
|
||
| ## When to Load References | ||
|
|
||
| **Load `references/hydration.md` when:** | ||
| - Debugging "Hydration node mismatch" errors | ||
| - Implementing ClientOnly components | ||
| - Fixing non-deterministic rendering issues | ||
|
|
||
| **Load `references/performance.md` when:** | ||
| - Optimizing Core Web Vitals scores | ||
| - Implementing lazy loading and code splitting | ||
| - Reducing bundle size | ||
|
|
||
| **Load `references/testing-vitest.md` when:** | ||
| - Writing component tests with @nuxt/test-utils | ||
| - Testing composables with Nuxt context | ||
| - Mocking Nuxt APIs | ||
|
|
||
| **Load `references/deployment-cloudflare.md` when:** | ||
| - Deploying to Cloudflare Pages or Workers | ||
| - Configuring wrangler.toml | ||
| - Setting up NuxtHub integration | ||
|
|
||
| ## Hydration Best Practices | ||
|
|
||
| ### What Causes Hydration Mismatches | ||
|
|
||
| | Cause | Example | Fix | | ||
| |-------|---------|-----| | ||
| | Non-deterministic values | `Math.random()` | Use `useState` | | ||
| | Browser APIs on server | `window.innerWidth` | Use `onMounted` | | ||
| | Date/time on server | `new Date()` | Use `useState` or `ClientOnly` | | ||
| | Third-party scripts | Analytics | Use `ClientOnly` | | ||
|
|
||
| ### Fix Patterns | ||
|
|
||
| ```vue | ||
| <!-- Non-deterministic values --> | ||
| <script setup> | ||
| const id = useState('random-id', () => Math.random()) | ||
| </script> | ||
|
|
||
| <!-- Browser APIs --> | ||
| <script setup> | ||
| const width = ref(0) | ||
| onMounted(() => { | ||
| width.value = window.innerWidth | ||
| }) | ||
| </script> | ||
|
|
||
| <!-- ClientOnly component --> | ||
| <template> | ||
| <ClientOnly> | ||
| <MyMapComponent /> | ||
| <template #fallback> | ||
| <div class="skeleton">Loading map...</div> | ||
| </template> | ||
| </ClientOnly> | ||
| </template> | ||
| ``` | ||
|
|
||
| ## Performance Optimization | ||
|
|
||
| ### Lazy Loading Components | ||
|
|
||
| ```vue | ||
| <script setup> | ||
| const HeavyChart = defineAsyncComponent(() => | ||
| import('~/components/HeavyChart.vue') | ||
| ) | ||
| </script> | ||
| ``` | ||
|
|
||
| ### Lazy Hydration | ||
|
|
||
| ```vue | ||
| <script setup> | ||
| const LazyComponent = defineLazyHydrationComponent( | ||
| 'visible', | ||
| () => import('./HeavyComponent.vue') | ||
| ) | ||
|
|
||
| const InteractiveComponent = defineLazyHydrationComponent( | ||
| 'interaction', | ||
| () => import('./InteractiveComponent.vue') | ||
| ) | ||
|
|
||
| const IdleComponent = defineLazyHydrationComponent( | ||
| 'idle', | ||
| () => import('./IdleComponent.vue') | ||
| ) | ||
| </script> | ||
| ``` | ||
|
|
||
| ### Route Caching | ||
|
|
||
| ```typescript | ||
| export default defineNuxtConfig({ | ||
| routeRules: { | ||
| '/': { prerender: true }, | ||
| '/about': { prerender: true }, | ||
| '/blog/**': { swr: 3600 }, | ||
| '/products/**': { isr: 3600 }, | ||
| '/dashboard/**': { ssr: false }, | ||
| '/static/**': { | ||
| headers: { 'Cache-Control': 'public, max-age=31536000' } | ||
| } | ||
| } | ||
| }) | ||
| ``` | ||
|
|
||
| ### Image Optimization | ||
|
|
||
| ```vue | ||
| <template> | ||
| <NuxtImg | ||
| src="/images/hero.jpg" | ||
| alt="Hero image" | ||
| width="800" | ||
| height="400" | ||
| loading="lazy" | ||
| placeholder | ||
| format="webp" | ||
| /> | ||
|
|
||
| <NuxtPicture | ||
| src="/images/product.jpg" | ||
| alt="Product" | ||
| sizes="sm:100vw md:50vw lg:400px" | ||
| :modifiers="{ quality: 80 }" | ||
| /> | ||
| </template> | ||
| ``` | ||
|
|
||
| ## Testing with Vitest | ||
|
|
||
| ### Setup | ||
|
|
||
| ```bash | ||
| bun add -d @nuxt/test-utils vitest @vue/test-utils happy-dom | ||
| ``` | ||
|
|
||
| ```typescript | ||
| // vitest.config.ts | ||
| import { defineVitestConfig } from '@nuxt/test-utils/config' | ||
|
|
||
| export default defineVitestConfig({ | ||
| test: { | ||
| environment: 'nuxt', | ||
| environmentOptions: { | ||
| nuxt: { | ||
| domEnvironment: 'happy-dom' | ||
| } | ||
| } | ||
| } | ||
| }) | ||
| ``` | ||
|
|
||
| ### Component Testing | ||
|
|
||
| ```typescript | ||
| import { describe, it, expect } from 'vitest' | ||
| import { mountSuspended } from '@nuxt/test-utils/runtime' | ||
| import UserCard from '~/components/UserCard.vue' | ||
|
|
||
| describe('UserCard', () => { | ||
| it('renders user name', async () => { | ||
| const wrapper = await mountSuspended(UserCard, { | ||
| props: { | ||
| user: { id: 1, name: 'John Doe', email: 'john@example.com' } | ||
| } | ||
| }) | ||
|
|
||
| expect(wrapper.text()).toContain('John Doe') | ||
| }) | ||
| }) | ||
| ``` | ||
|
|
||
| ### Mocking Composables | ||
|
|
||
| ```typescript | ||
| import { mockNuxtImport } from '@nuxt/test-utils/runtime' | ||
|
|
||
| mockNuxtImport('useFetch', () => { | ||
| return () => ({ | ||
| data: ref({ users: [{ id: 1, name: 'John' }] }), | ||
| pending: ref(false), | ||
| error: ref(null) | ||
| }) | ||
| }) | ||
| ``` | ||
|
|
||
| ## Deployment | ||
|
|
||
| ### Cloudflare Pages (Recommended) | ||
|
|
||
| ```bash | ||
| bun run build | ||
| bunx wrangler pages deploy .output/public | ||
| ``` | ||
|
|
||
| ```typescript | ||
| export default defineNuxtConfig({ | ||
| nitro: { preset: 'cloudflare_pages' } | ||
| }) | ||
| ``` | ||
|
|
||
| ### Cloudflare Workers | ||
|
|
||
| ```typescript | ||
| export default defineNuxtConfig({ | ||
| nitro: { preset: 'cloudflare_module' } | ||
| }) | ||
| ``` | ||
|
|
||
| ### Vercel / Netlify | ||
|
|
||
| ```typescript | ||
| // Vercel | ||
| export default defineNuxtConfig({ | ||
| nitro: { preset: 'vercel' } | ||
| }) | ||
|
|
||
| // Netlify | ||
| export default defineNuxtConfig({ | ||
| nitro: { preset: 'netlify' } | ||
| }) | ||
| ``` | ||
|
|
||
| ### NuxtHub (Cloudflare All-in-One) | ||
|
|
||
| ```bash | ||
| bun add @nuxthub/core | ||
| ``` | ||
|
|
||
| ```typescript | ||
| export default defineNuxtConfig({ | ||
| modules: ['@nuxthub/core'], | ||
| hub: { | ||
| database: true, | ||
| kv: true, | ||
| blob: true, | ||
| cache: true | ||
| } | ||
| }) | ||
| ``` | ||
|
|
||
| ## Migration from Nuxt 4 | ||
|
|
||
| ### Step 1: Update package.json | ||
|
|
||
| ```json | ||
| { | ||
| "devDependencies": { | ||
| "nuxt": "^5.0.0" | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| ### Step 2: Enable Compatibility Mode | ||
|
|
||
| ```typescript | ||
| // nuxt.config.ts | ||
| export default defineNuxtConfig({ | ||
| future: { | ||
| compatibilityVersion: 5 | ||
| } | ||
| }) | ||
| ``` | ||
|
|
||
| ### Step 3: Update Server Error Handling | ||
|
|
||
| ```typescript | ||
| // Before (Nuxt 4) | ||
| import { createError } from 'h3' | ||
| throw createError({ statusCode: 404, statusMessage: 'Not Found' }) | ||
|
|
||
| // After (Nuxt 5) | ||
| import { HTTPError } from 'nitro/h3' | ||
| throw new HTTPError({ status: 404, statusText: 'Not Found' }) | ||
| ``` | ||
|
|
||
| ### Step 4: Update Server Event API | ||
|
|
||
| ```typescript | ||
| // Before (Nuxt 4) | ||
| const path = event.path | ||
| event.node.res.statusCode = 200 | ||
| setResponseHeader(event, 'x-custom', 'value') | ||
| const config = useRuntimeConfig(event) | ||
|
|
||
| // After (Nuxt 5) | ||
| const path = event.url.pathname | ||
| event.res.status = 200 | ||
| event.res.headers.set('x-custom', 'value') | ||
| const config = useRuntimeConfig() | ||
| ``` | ||
|
|
||
| ### Step 5: Update Vite Config | ||
|
|
||
| ```typescript | ||
| // Before (Nuxt 4) | ||
| export default defineNuxtConfig({ | ||
| vite: { | ||
| build: { | ||
| rollupOptions: { ... } | ||
| } | ||
| } | ||
| }) | ||
|
|
||
| // After (Nuxt 5) - use rolldownOptions | ||
| export default defineNuxtConfig({ | ||
| vite: { | ||
| build: { | ||
| rolldownOptions: { ... } | ||
| } | ||
| } | ||
| }) | ||
| ``` | ||
|
|
||
| ### Step 6: Update Route Rules | ||
|
|
||
| ```typescript | ||
| // Before | ||
| routeRules: { | ||
| '/old': { redirect: { to: '/new', statusCode: 302 } } | ||
| } | ||
|
|
||
| // After | ||
| routeRules: { | ||
| '/old': { redirect: { to: '/new', status: 302 } } | ||
| } | ||
| ``` | ||
|
|
||
| ### Step 7: Update Import Paths | ||
|
|
||
| ```typescript | ||
| // Before | ||
| import { defineEventHandler, getQuery } from 'h3' | ||
|
|
||
| // After | ||
| import { defineEventHandler, getQuery } from 'nitro/h3' | ||
| // Or rely on auto-imports (no import needed) | ||
| ``` | ||
|
|
||
| ### Step 8: Remove Deprecated Options | ||
|
|
||
| ```typescript | ||
| // Remove these from nuxt.config.ts | ||
| export default defineNuxtConfig({ | ||
| experimental: { | ||
| externalVue: false, // REMOVED - delete this | ||
| viteEnvironmentApi: true, // REMOVED - always enabled | ||
| } | ||
| }) | ||
| ``` | ||
|
|
||
| ### Step 9: Install JSX Plugin (If Needed) | ||
|
|
||
| ```bash | ||
| # Only if your project uses .jsx/.tsx files | ||
| bun add -D @vitejs/plugin-vue-jsx | ||
| ``` | ||
|
|
||
| ### Step 10: Update callHook Usage | ||
|
|
||
| ```typescript | ||
| // Before | ||
| nuxtApp.callHook('my:hook', data).then(() => { ... }) | ||
|
|
||
| // After | ||
| await nuxtApp.callHook('my:hook', data) | ||
| ``` | ||
|
|
||
| ## Common Anti-Patterns | ||
|
|
||
| ### Client-Only Code on Server | ||
|
|
||
| ```typescript | ||
| // WRONG | ||
| const width = window.innerWidth | ||
|
|
||
| // CORRECT | ||
| if (import.meta.client) { | ||
| const width = window.innerWidth | ||
| } | ||
|
|
||
| // Or use onMounted | ||
| onMounted(() => { | ||
| const width = window.innerWidth | ||
| }) | ||
| ``` | ||
|
|
||
| ### Non-Deterministic SSR | ||
|
|
||
| ```typescript | ||
| // WRONG | ||
| const id = Math.random() | ||
| const time = Date.now() | ||
|
|
||
| // CORRECT | ||
| const id = useState('id', () => Math.random()) | ||
| const time = useState('time', () => Date.now()) | ||
| ``` | ||
|
|
||
| ## Troubleshooting | ||
|
|
||
| **Hydration Mismatch:** | ||
| - Check for `window`, `document`, `localStorage` usage | ||
| - Wrap in `ClientOnly` or use `onMounted` | ||
| - Look for `Math.random()`, `Date.now()` | ||
| - Check if relying on `<div>` placeholder for client-only components | ||
|
|
||
| **Build Errors:** | ||
| ```bash | ||
| rm -rf .nuxt .output node_modules/.vite && bun install | ||
| ``` | ||
|
|
||
| **Vite Plugin Warnings:** | ||
| - Migrate from `extendViteConfig({ server })` to `configEnvironment` | ||
| - Use `applyToEnvironment` instead of `server: false` / `client: false` | ||
|
|
||
| **Rolldown Build Issues:** | ||
| - Replace `rollupOptions` with `rolldownOptions` | ||
| - Replace `vite.esbuild` with `vite.oxc` | ||
| - Check CJS interop changes in Vite 8 | ||
|
|
||
| ## Related Skills | ||
|
|
||
| - **nuxt-core**: Project setup, routing, configuration | ||
| - **nuxt-data**: Composables, data fetching, state | ||
| - **nuxt-server**: Server routes, API patterns (Nitro v3) | ||
| - **cloudflare-d1**: D1 database patterns | ||
|
|
||
| --- | ||
|
|
||
| **Version**: 5.0.0 | **Last Updated**: 2026-03-30 | **License**: MIT |
There was a problem hiding this comment.
Reduce this SKILL.md below 500 lines by extracting more detail into references.
This file is 517 lines, exceeding the repository limit. Move lower-priority detail (e.g., part of migration/troubleshooting/deployment examples) into references/*.md and keep quick-start + top errors in the main file.
As per coding guidelines, "Maintain SKILL.md files at less than 500 lines after refactoring to ensure progressive disclosure of content."
🧰 Tools
🪛 markdownlint-cli2 (0.22.0)
[warning] 46-46: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
[warning] 241-241: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/nuxt-v5/skills/nuxt-production/SKILL.md` around lines 1 - 517,
SKILL.md is 517 lines—extract lower-priority, verbose examples and long code
blocks into references/*.md to reduce the main file under 500 lines: move
extended Deployment examples (Cloudflare Workers, Vercel/Netlify snippets),
detailed Migration Steps 3–10 code blocks (server error handling, event API,
Vite rolldownOptions, routeRules, import path examples, JSX plugin), long
Troubleshooting sections and Rolldown/Vite warnings into new reference files
(e.g., references/deployment.md, references/migration.md,
references/troubleshooting.md), and keep only quick-start bullets, the short
"What's New in Nuxt 5" table, top-level headings like "Hydration Best
Practices", "Performance Optimization", and the minimal examples used for
immediate debugging (client-only placeholder, lazy hydration, and the Vitest
quick setup). Update SKILL.md links to point to the new references and remove
the moved code blocks and long tables to bring file length below 500 lines.
| description: | | ||
| Nuxt 5 production optimization: hydration, performance, testing with Vitest, | ||
| deployment to Cloudflare/Vercel/Netlify, and migration from Nuxt 4. | ||
|
|
||
| Use when: debugging hydration mismatches, optimizing performance and Core Web Vitals, | ||
| writing tests with Vitest, deploying to Cloudflare Pages/Workers/Vercel/Netlify, | ||
| or migrating from Nuxt 4 to Nuxt 5. | ||
|
|
||
| Keywords: hydration, hydration mismatch, ClientOnly, SSR, performance, | ||
| lazy loading, lazy hydration, Vitest, testing, deployment, Cloudflare Pages, | ||
| Cloudflare Workers, Vercel, Netlify, NuxtHub, migration, Nuxt 4 to Nuxt 5, | ||
| Rolldown, Vite 8, Nitro v3, comment placeholder |
There was a problem hiding this comment.
Frontmatter description is too long and should be rewritten in concise third-person.
The current multiline description exceeds the configured length guidance.
✂️ Suggested update
-description: |
- Nuxt 5 production optimization: hydration, performance, testing with Vitest,
- deployment to Cloudflare/Vercel/Netlify, and migration from Nuxt 4.
-
- Use when: debugging hydration mismatches, optimizing performance and Core Web Vitals,
- writing tests with Vitest, deploying to Cloudflare Pages/Workers/Vercel/Netlify,
- or migrating from Nuxt 4 to Nuxt 5.
-
- Keywords: hydration, hydration mismatch, ClientOnly, SSR, performance,
- lazy loading, lazy hydration, Vitest, testing, deployment, Cloudflare Pages,
- Cloudflare Workers, Vercel, Netlify, NuxtHub, migration, Nuxt 4 to Nuxt 5,
- Rolldown, Vite 8, Nitro v3, comment placeholder
+description: This skill should be used when optimizing Nuxt 5 production hydration, performance, testing, and deployment.As per coding guidelines, "Keep skill descriptions concise (ideal <100 characters, maximum <200 characters) ... [and] Use third-person perspective in skill descriptions."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/nuxt-v5/skills/nuxt-production/SKILL.md` around lines 3 - 14, Rewrite
the SKILL.md frontmatter "description" field into a concise third-person
sentence (prefer <100 characters, maximum <200) that summarizes the skill (e.g.,
"Optimizes Nuxt 5 production for hydration, performance, testing, and
deployment."). Replace the current multiline "description" block with that
single-line third-person sentence, remove usage examples from the description
(keep them in other fields if needed), and eliminate the "comment placeholder"
from Keywords; leave the existing Keywords field intact otherwise.
| @@ -1,8 +1,9 @@ | |||
| --- | |||
| name: recommendation-engine | |||
| description: Build recommendation systems with collaborative filtering, matrix factorization, hybrid approaches. Use for product recommendations, personalization, or encountering cold start, sparsity, quality evaluation issues. | |||
There was a problem hiding this comment.
Condense description to meet length and perspective guidelines.
The description is approximately 235 characters, exceeding the 200-character maximum, and uses imperative form instead of third-person perspective. As per coding guidelines, descriptions should be concise (<200 characters) and use third-person perspective for better discoverability in Claude Code.
✏️ Proposed condensed third-person description
-description: Build recommendation systems with collaborative filtering, matrix factorization, hybrid approaches. Use for product recommendations, personalization, or encountering cold start, sparsity, quality evaluation issues.
+description: Provides recommendation systems using collaborative filtering, matrix factorization, and hybrid approaches. Use for personalization, cold start, sparsity, and quality evaluation.This revision is approximately 180 characters and uses third-person perspective ("Provides" instead of "Build").
As per coding guidelines: "Keep skill descriptions concise (ideal <100 characters, maximum <200 characters)" and "Use third-person perspective in skill descriptions (e.g., 'This skill should be used when...' instead of 'You should...')".
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| description: Build recommendation systems with collaborative filtering, matrix factorization, hybrid approaches. Use for product recommendations, personalization, or encountering cold start, sparsity, quality evaluation issues. | |
| description: Provides recommendation systems using collaborative filtering, matrix factorization, and hybrid approaches. Use for personalization, cold start, sparsity, and quality evaluation. |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@plugins/recommendation-engine/skills/recommendation-engine/SKILL.md` at line
3, Update the description field in SKILL.md to a concise, third-person sentence
under 200 characters (ideally <100); replace the current imperative/long line
with a third-person summary such as: "Provides collaborative filtering, matrix
factorization, and hybrid approaches for product recommendations and
personalization, addressing cold-start and sparsity." Ensure the updated value
is assigned to the existing description key.
- Fix --dir path detection: check for SKILL.md directly before appending /skills, correctly handling full skill paths passed by the workflow (e.g. plugins/x/skills/x) - Fix silent pipeline death: add || true to find|sort pipelines so set -euo pipefail doesn't kill the script before reaching fallback checks - Fix --quiet mode: FAIL errors and final failure count are always printed; --quiet now only suppresses PASS and WARN output - Fix workflow loop: accumulate all failures instead of dying on first, with ::error:: annotation reporting total count
- nuxt-robots → @nuxtjs/robots in modules arrays and bun commands - nuxt-sitemap → @nuxtjs/sitemap in modules arrays and bun commands - npx nuxt module add nuxt-robots → npx nuxt module add robots (short key) - Other modules (og-image, schema-org, link-checker, seo-utils, site-config) left unchanged — no @nuxtjs/ scoped variant exists
Summary
Changes
2465134f30061a3b60bbf7e67f1a1dfc076Marketplace Impact
Plugins: 169 → 170 (+1 net, +3 new)
Summary by CodeRabbit
New Features
Updates
Documentation
Chores