要真正检验Devin AI能否准确理解你项目中已有的命名习惯、模块划分和状态管理逻辑,而不是自行另建一套体系,就必须将它投入真实的协作场景——例如,让它直接向一个积累了超过500次提交、基于Zustand与TanStack Query的React monorepo提交一个符合团队规范的PR。你需要手动注入上下文,校验命名、状态和样式的一致性,同时还需执行类型检查、运行单元测试、拦截import路径——这些环节一个都不能遗漏。
准备被测代码库与上下文注入
先将目标仓库克隆到本地,确保git remote origin指向原始的GitHub地址。这里有一个关键注意事项:Devin不会自动从fork分支推断主干约束,因此必须在Slack中发送完整的仓库URL以及当前main分支的SHA,否则它会默认当作空项目来初始化依赖图谱。 接着,执行npx devin-cli inject-context --mode=full --depth=3,这条命令会强制扫描node_modules之外的所有tsconfig.json和eslint.config.js,把顶层package.json中的peerDependencies写入Devin的初始知识缓存。如果跳过此步骤,后续生成的hook调用很可能会违反monorepo的shared-types版本锁定策略。
在Slack中输入指令:“基于当前main分支,在packages/dashboard中新增用户活跃度卡片组件,复用现有useUserMetricsQuery与CardShell样式,响应式断点沿用@shared/ui的breakpoints.ts。”
检查Devin生成代码是否遵循既有模式
如何判断Devin生成的代码是否严格遵循了既有模式?可以从以下三个方面着手。 首先是命名一致性。打开Devin创建的UserActivityCard.tsx,确认其导出函数名采用驼峰式,例如UserActivityCard,而非下划线或kebab-case。如果看到User_activity_card,说明Devin未能正确解读tsconfig.json中的命名约定配置。 然后是状态逻辑的嵌套层级。对比已有组件ProfileHeader.tsx中useUserMetricsQuery的调用方式——是否包裹在React.memo内?是否传入了select参数进行数据精简?是否将loading状态置于error边界之外?如果Devin生成的文件直接将useUserMetricsQuery放在组件顶层且未加select,那么API响应的全量数据将导致整个组件重渲染,从而破坏现有的性能优化链路。 最后是样式注入路径。检查className字符串是否全部引用了@shared/ui的预设类名,例如"text-sm font-medium text-gray-700",而不是自行拼写Tailwind原子类。如果出现"flex flex-col gap-2 p-4 bg-white rounded-lg"这类硬编码,说明Devin跳过了postcss-import对共享样式文件的解析。执行PR合并前的三项关键拦截
在合并PR之前,必须完成以下三项检查。 第一,运行pnpm run typecheck,确认Devin添加的类型定义没有引入any或unknown这类泛型,从而污染全局的StoreSchema类型。
第二,执行vitest --run --testNamePattern="UserActivityCard",验证测试是否能自动复用现有的mock工厂,例如mockUseUserMetricsQuery。如果报错提示找不到模块,说明Devin没有识别项目根目录下jest.setup.ts中定义的自动mock路径别名。
第三,在GitHub PR的“Files changed”标签页中,逐行比对所有import语句,确保没有新增相对路径导入,例如import { Button } from '../../../ui/Button',所有导入均应使用绝对路径如import { Button } from '@shared/ui'——这是monorepo跨包引用的强制规范。