41 lines
6.9 KiB
JSON
41 lines
6.9 KiB
JSON
{
|
||
"rules": [
|
||
{
|
||
"path": "**/*.py",
|
||
"rule": "代码评审 10 维度(项目 AGENTS.md + ponytail 规则):1) 正确性 — 边界条件、异常路径、空值处理;2) 安全性 — API Key 比较必须 hmac.compare_digest(恒定时间),JWT HS256 access 15min/refresh 7d,RBAC 三级权限位,专家名必须 _EXPERT_NAME_RE=re.compile(r\"^[a-zA-Z0-9_-]{1,64}$\") 校验,bcrypt rounds=12,禁止 SQL 注入/路径穿越;3) 类型安全 — 禁止 any,必须类型注解,所有数据模型用 pydantic>=2.0 且 model_config=ConfigDict(...) 而非 class Config;4) 并发异步 — HandoffTransport 队列有界 maxsize=1024,关闭用 sentinel 模式,async def 含 yield 禁止在首个 yield 前用 return(必须 return; yield 模式或重构),禁止阻塞调用在 async 函数中;5) 性能 — N+1 查询、未加索引、未用缓存、内存泄漏、未关闭资源;6) 可维护性 — 命名、重复代码、圈复杂度、函数过长;7) 错误处理 — 信任边界必须校验输入,防止数据丢失,禁止裸 except;8) 依赖配置 — 不得擅自改 pyproject.toml 版本,配置优先级 CLI>yaml>env>.env>默认;9) 测试 — 非平凡逻辑必须留下一个可运行检查(assert demo 或小测试文件,无框架无 fixtures);10) Ponytail 原则 — 无未请求的抽象、无未请求的新依赖、删除优先于新增、复杂处用 ponytail: 注释标记已知上限与升级路径。"
|
||
},
|
||
{
|
||
"path": "**/*.ts",
|
||
"rule": "前端 TS 评审维度(AGENTS.md 前端规范):1) 类型安全 — 禁止 any,必须显式类型注解,interface/type 优先;2) Vue3 Composition API — 禁止 Options API,必须 <script setup lang=\"ts\">;3) Pinia store — 每个领域一个 store,state/getters/actions 规范,禁止全局可变状态;4) 禁止 require() 调用,必须 ES import;5) Ant Design Vue 4 组件规范 — 按需引入,a-* 组件名;6) 异步处理 — async/await,禁止 .then 链过深,错误边界处理;7) 响应式 — ref/reactive 正确使用,禁止解构 reactive 丢失响应性,computed 优先于 methods;8) 安全 — XSS 防护(v-html 慎用),用户输入转义,JWT 存储位置安全;9) 性能 — 懒加载路由(defineAsyncComponent),避免大列表未虚拟化,watch 深度慎用;10) 可维护性 — 命名规范(camelCase 变量、PascalCase 组件),文件组织按领域,无重复代码。"
|
||
},
|
||
{
|
||
"path": "**/*.vue",
|
||
"rule": "Vue3 SFC 评审维度:1) <script setup lang=\"ts\"> 必须使用,禁止 Options API;2) 模板 — 单根节点(Vue3 允许多根但建议单根),v-for 必须 :key 唯一且非 index,v-if 与 v-for 不同级;3) Props — defineProps 必带类型与 required 标注,defineEmits 必带类型;4) 响应式 — ref/reactive/computed 正确区分,watch 与 watchEffect 按需使用,避免深监听大对象;5) 生命周期 — onMounted 异步需 try/catch,onUnmounted 必须清理(定时器、事件监听、WebSocket);6) Ant Design Vue — 组件按需引入,message/notification/modal API 调用规范;7) 样式 — scoped 必加,避免全局污染,CSS 变量优先于硬编码颜色;8) 安全 — v-html 必须确认来源可信,用户输入绝不直接 v-html;9) 可访问性 — 表单 label/for,按钮 aria-label,键盘导航;10) 性能 — 大列表虚拟滚动,图片懒加载,组件懒加载(defineAsyncComponent)。"
|
||
},
|
||
{
|
||
"path": "**/stores/*.ts",
|
||
"rule": "Pinia store 专项评审:1) defineStore id 唯一且语义化;2) state 必须是函数返回对象(setup store)或对象(option store),不可混用;3) getters 必须有返回类型注解;4) actions 异步必须 try/catch 并更新错误状态;5) 禁止在 store 中直接操作 DOM;6) 跨 store 调用必须通过 useXxxStore(),禁止循环依赖;7) 持久化需明确策略(localStorage/sessionStorage/无);8) WebSocket 连接必须在 store 中管理生命周期(onUnmounted 时关闭)。"
|
||
},
|
||
{
|
||
"path": "**/auth/**/*.py",
|
||
"rule": "认证安全专项(最高优先级):1) API Key 比较必须 hmac.compare_digest,禁止 == 比较密钥/token;2) JWT — HS256,access 15min/refresh 7d,过期校验,刷新令牌轮换;3) 密码 — bcrypt rounds=12,禁止明文存储;4) RBAC — 三级(member/operator/admin)+ 权限位,越权检查;5) 终端安全 — 6 层白名单(blocklist→shell-ops→builtin→global→user→session→danger),危险命令需管理员审批;6) 会话 — 登出必须失效 token,并发会话控制;7) CSRF — 状态变更接口必须校验;8) 速率限制 — 登录/敏感接口必须限流。"
|
||
},
|
||
{
|
||
"path": "**/routes/*.py",
|
||
"rule": "FastAPI 路由专项:1) 路径必须 /api/v1 前缀;2) 依赖注入 — 认证/权限用 Depends(),禁止在函数体内校验;3) Pydantic 模型校验请求体/查询参数,禁止裸 dict;4) 响应模型 response_model 显式声明;5) 异步 — async def 优先,IO 密集用 await,CPU 密集用 run_in_threadpool;6) 错误处理 — HTTPException 明确 status_code 与 detail,禁止裸 raise Exception;7) WebSocket — 连接管理(心跳/超时/断线重连),广播需并发控制;8) 输入校验 — 路径参数/查询参数边界值,防止注入。"
|
||
},
|
||
{
|
||
"path": "**/calendar/**/*.py",
|
||
"rule": "日历服务专项:1) 时区处理必须显式(Asia/Shanghai 或 UTC),禁止 naive datetime;2) 重复事件 RRULE 解析正确性;3) 跨时区会议时间一致性;4) 飞书/Outlook 同步 — 冲突检测、增量同步、失败重试;5) 数据持久化 — 事务边界,回滚策略;6) 并发 — 同一日历并发写入需锁;7) 错误恢复 — 同步中断可续传。"
|
||
},
|
||
{
|
||
"path": "**/sqlite_conversation_store.py",
|
||
"rule": "SQLite 会话存储专项:1) SQL 参数化查询(禁止 f-string/format 拼接 SQL);2) 事务管理 — 显式 begin/commit/rollback,async with;3) 连接池 — Singleton 或 per-request,禁止每次新建;4) 并发写入 — WAL 模式或串行化;5) 数据完整性 — 外键约束、NOT NULL、唯一索引;6) 迁移 — schema 版本管理,向后兼容;7) 性能 — 索引覆盖查询,分页 LIMIT/OFFSET 或 cursor;8) 错误处理 — IntegrityError 捕获并返回明确错误。"
|
||
},
|
||
{
|
||
"path": "**/middleware.py",
|
||
"rule": "中间件专项:1) 执行顺序 — 认证→授权→限流→日志→业务;2) 异步 — async def,禁止阻塞;3) 上下文传递 — request.state.user 等规范字段;4) 错误 — 中间件异常必须转为 HTTP 响应,禁止吞异常;5) 性能 — 中间件链不宜过长,热路径避免重计算;6) CORS — 白名单显式,禁止 *;7) 日志 — 敏感信息脱敏(token/密码)。"
|
||
}
|
||
]
|
||
}
|