用途:这是一个审计型(Agent/Validator)技能,用于在采用 shadcn/ui 的 Next.js App Router 代码库中检查 "use client" 指令是否放错或缺失,也可用于审查相关 PR。它不讲解如何设计 RSC 与客户端组件树(那属于配套技能 shadcn-impl-rsc-vs-client-boundaries,B10),而是对现有项目树做自动化审计:分类每个 shadcn 导入,验证指令出现在正确的文件中、以正确形式、位于正确位置,且跨界方式符合 RSC 规则。
主要能力:按固定顺序执行六点检查清单,不会在首个失败处停止,一次暴露多层缺陷。六点为:[1] components.json 的 rsc 标志是否与框架匹配(App Router→true;Pages/Vite/Astro/Remix 等→false);[2] 导入客户端必需原语的文件是否以指令开头;[3] app/layout.tsx、page.tsx、template.tsx 是否误加指令;[4] 每条 "use client" 是否为文件首行、用引号(非反引号/模板字符串/if 内)、文件级;[5] 上下文 Provider 是否放在专用客户端包装文件中而非直接引入服务端 layout;[6] 服务端文件是否向客户端子组件传递函数或不可序列化实例。
使用方式:提供含 components.json、components/ui/* 与 app/(或 pages/)的仓库路径,按 PHASE 1–6 执行并输出 PASS/WARN/FAIL 逐项报告。可先跑轻量 grep 审计,例如:grep -L '^"use client"' components/ui/{...}.tsx 期望输出为空;grep -l '^"use client"' app/layout.tsx app/page.tsx app/template.tsx 期望为空;jq '.rsc' components.json 对 App Router 期望 true。规则 4、5、6 可用 ripgrep 扩展模式。
适用场景与限制:适用于 App Router 项目审计;Pages Router(rsc:false)跳过规则 3;Vite+React SPA 跳过规则 3,规则 5、6 仅作建议;单文件 demo 或 Storybook 故事不适用。它只报告不自动修复,修复需转交配套技能(如 shadcn add <name> --overwrite)。原语矩阵与示例见其引用文件 references/methods.md、examples.md、anti-patterns.md。