fischer-agentkit/.opencodereview/rule.code.json

41 lines
6.9 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"rules": [
{
"path": "**/*.py",
"rule": "代码评审 10 维度(项目 AGENTS.md + ponytail 规则1) 正确性 — 边界条件、异常路径、空值处理2) 安全性 — API Key 比较必须 hmac.compare_digest恒定时间JWT HS256 access 15min/refresh 7dRBAC 三级权限位,专家名必须 _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 Config4) 并发异步 — HandoffTransport 队列有界 maxsize=1024关闭用 sentinel 模式async def 含 yield 禁止在首个 yield 前用 return必须 return; yield 模式或重构),禁止阻塞调用在 async 函数中5) 性能 — N+1 查询、未加索引、未用缓存、内存泄漏、未关闭资源6) 可维护性 — 命名、重复代码、圈复杂度、函数过长7) 错误处理 — 信任边界必须校验输入,防止数据丢失,禁止裸 except8) 依赖配置 — 不得擅自改 pyproject.toml 版本,配置优先级 CLI>yaml>env>.env>默认9) 测试 — 非平凡逻辑必须留下一个可运行检查assert demo 或小测试文件,无框架无 fixtures10) 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 — 每个领域一个 storestate/getters/actions 规范禁止全局可变状态4) 禁止 require() 调用,必须 ES import5) Ant Design Vue 4 组件规范 — 按需引入a-* 组件名6) 异步处理 — async/await禁止 .then 链过深错误边界处理7) 响应式 — ref/reactive 正确使用,禁止解构 reactive 丢失响应性computed 优先于 methods8) 安全 — XSS 防护v-html 慎用用户输入转义JWT 存储位置安全9) 性能 — 懒加载路由defineAsyncComponent避免大列表未虚拟化watch 深度慎用10) 可维护性 — 命名规范camelCase 变量、PascalCase 组件),文件组织按领域,无重复代码。"
},
{
"path": "**/*.vue",
"rule": "Vue3 SFC 评审维度1) <script setup lang=\"ts\"> 必须使用,禁止 Options API2) 模板 — 单根节点Vue3 允许多根但建议单根v-for 必须 :key 唯一且非 indexv-if 与 v-for 不同级3) Props — defineProps 必带类型与 required 标注defineEmits 必带类型4) 响应式 — ref/reactive/computed 正确区分watch 与 watchEffect 按需使用避免深监听大对象5) 生命周期 — onMounted 异步需 try/catchonUnmounted 必须清理定时器、事件监听、WebSocket6) Ant Design Vue — 组件按需引入message/notification/modal API 调用规范7) 样式 — scoped 必加避免全局污染CSS 变量优先于硬编码颜色8) 安全 — v-html 必须确认来源可信,用户输入绝不直接 v-html9) 可访问性 — 表单 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 中直接操作 DOM6) 跨 store 调用必须通过 useXxxStore()禁止循环依赖7) 持久化需明确策略localStorage/sessionStorage/无8) WebSocket 连接必须在 store 中管理生命周期onUnmounted 时关闭)。"
},
{
"path": "**/auth/**/*.py",
"rule": "认证安全专项最高优先级1) API Key 比较必须 hmac.compare_digest禁止 == 比较密钥/token2) JWT — HS256access 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 模型校验请求体/查询参数,禁止裸 dict4) 响应模型 response_model 显式声明5) 异步 — async def 优先IO 密集用 awaitCPU 密集用 run_in_threadpool6) 错误处理 — HTTPException 明确 status_code 与 detail禁止裸 raise Exception7) WebSocket — 连接管理(心跳/超时/断线重连广播需并发控制8) 输入校验 — 路径参数/查询参数边界值,防止注入。"
},
{
"path": "**/calendar/**/*.py",
"rule": "日历服务专项1) 时区处理必须显式Asia/Shanghai 或 UTC禁止 naive datetime2) 重复事件 RRULE 解析正确性3) 跨时区会议时间一致性4) 飞书/Outlook 同步 — 冲突检测、增量同步、失败重试5) 数据持久化 — 事务边界回滚策略6) 并发 — 同一日历并发写入需锁7) 错误恢复 — 同步中断可续传。"
},
{
"path": "**/sqlite_conversation_store.py",
"rule": "SQLite 会话存储专项1) SQL 参数化查询(禁止 f-string/format 拼接 SQL2) 事务管理 — 显式 begin/commit/rollbackasync with3) 连接池 — Singleton 或 per-request禁止每次新建4) 并发写入 — WAL 模式或串行化5) 数据完整性 — 外键约束、NOT NULL、唯一索引6) 迁移 — schema 版本管理向后兼容7) 性能 — 索引覆盖查询,分页 LIMIT/OFFSET 或 cursor8) 错误处理 — IntegrityError 捕获并返回明确错误。"
},
{
"path": "**/middleware.py",
"rule": "中间件专项1) 执行顺序 — 认证→授权→限流→日志→业务2) 异步 — async def禁止阻塞3) 上下文传递 — request.state.user 等规范字段4) 错误 — 中间件异常必须转为 HTTP 响应禁止吞异常5) 性能 — 中间件链不宜过长热路径避免重计算6) CORS — 白名单显式,禁止 *7) 日志 — 敏感信息脱敏token/密码)。"
}
]
}