502 编码规范制定
用 codex.yaml 制定团队标准,让 AI 生成代码始终符合团队规范
学习目标
完成本课程后,你将能够:
一、codex.yaml 配置文件
什么是 codex.yaml
`codex.yaml` 是 Codex CLI 的项目级规则文件,Codex 在生成代码时会自动遵循其中的约定。
完整配置示例
# codex.yaml — Team Coding Standards
# 放置于项目根目录,Codex 自动读取
project:
name: "TaskFlow"
language: "typescript"
framework: "next.js"
rules:
naming:
components: "PascalCase"
functions: "camelCase"
constants: "UPPER_SNAKE_CASE"
files: "kebab-case"
typeFiles: "*.types.ts"
testFiles: "*.test.ts"
typescript:
strictMode: true
noAny: true
preferInterface: false # 使用 type
explicitReturnType: true # 函数显式返回类型
noTypeAssertion: false # 允许 as 断言
react:
componentStyle: "functional"
propsType: "interface"
preferNamedExport: true
noDefaultExport: true
stateManagement: "hooks"
cssApproach: "tailwind-css"
api:
pattern: "RESTful"
versionPrefix: "/api/v1"
responseFormat: "{ success: boolean, data: T, error?: string }"
pagination: "cursor-based"
database:
orm: "prisma"
idType: "cuid"
timestamps: true
softDelete: true
testing:
framework: "vitest"
coverage:
lines: 80
branches: 70
functions: 80
testPattern: "describe → it → expect"
mockStrategy: "prefer-spy"
git:
commitStyle: "conventional-commits"
branchPrefix:
feature: "feat/"
bugfix: "fix/"
hotfix: "hotfix/"
prTitleFormat: "[TYPE] description"
errorHandling:
apiErrors: "AppError class"
frontendErrors: "ErrorBoundary + Toast"
logging: "pino"二、代码审查标准
AI 生成代码的质量门禁
代码审查检查清单(AI 生成代码专用):
□ 类型安全
- 没有 any 类型(除非有充分理由)
- 没有 @ts-ignore 或 @ts-expect-error
- 所有 async 函数有 try/catch
□ 安全性
- 没有硬编码凭据
- 用户输入经过验证和转义
- API 请求通过了认证中间件
□ 性能
- 没有循环内 await(改为 Promise.all)
- 数据库查询使用了 select 而非 include
- 前端没有不必要的 re-render
□ 可维护性
- 函数不超过 50 行
- 文件不超过 300 行
- 复杂逻辑有注释说明Review 模板
## AI Code Review 模板
### PR 信息
- **分支:** feat/task-kanban-dnd
- **AI 生成比例:** 约 80%
- **修改文件数:** 12
### AI 生成部分审查重点
1. [ ] 错误处理是否完整?(AI 常忽略边界条件)
2. [ ] 是否有 N+1 查询风险?
3. [ ] 状态管理逻辑是否一致?
4. [ ] 类型定义是否正确对应 API 响应?
### 人工修改部分
无额外修改
### 审查结论
- [ ] 批准
- [ ] 需要修改(见评论)
- [ ] 拒绝(理由):三、自动化规范检查
规范检查工具链
代码提交时自动检查:
├── ESLint → 代码风格和潜在错误
├── Prettier → 代码格式化
├── TypeScript → 类型检查 (tsc --noEmit)
├── commitlint → Commit 信息格式
└── Codex → /review 自动审查Husky + lint-staged 配置
// package.json
{
"lint-staged": {
"*.{ts,tsx}": [
"eslint --fix",
"prettier --write"
],
"*.prisma": [
"prettier --write"
]
}
}# .husky/pre-commit
npx lint-staged
npx tsc --noEmit
# .husky/commit-msg
npx --no -- commitlint --edit $1CI 规范门禁
# .github/workflows/lint.yml
name: Code Standards
on: [pull_request]
jobs:
standards:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with: { node-version: 20 }
- run: npm ci
- run: npx eslint . --max-warnings 0
- run: npx prettier --check .
- run: npx tsc --noEmit
- run: npx vitest run --coverage四、规范演进机制
规范生命周期
提议(RFC)
→ 团队讨论(1 周)
→ 试行(2 周,可选参与)
→ 投票(多数通过)
→ 正式发布(更新 codex.yaml)
→ 回顾(季度)RFC 模板
# RFC: {提案标题}
## 背景
{为什么需要这个规范变更}
## 提案
{具体的规范变更描述}
## 影响范围
- 影响文件数:约 XX 个
- 影响开发流程:{描述}
## 迁移方案
{如何从旧规范迁移到新规范}
## 试行结果
{试行期的反馈和数据}
## 投票
- [ ] 同意
- [ ] 反对(理由)
- [ ] 弃权规范评审日历
| 频率 | 活动 | 内容 |
|---|---|---|
| 每周 | 规范违规复盘 | Top 5 高频违规及原因 |
| 每月 | 规范痛点收集 | 哪些规范影响效率 |
| 每季度 | 规范大版本更新 | 新增/修改/废弃规范 |
| 每年 | 规范体系重审 | 整体有效性评估 |
五、实战练习
练习 1:编写团队 codex.yaml
请为你的团队项目编写完整的 codex.yaml,至少包含:
- naming 规范
- TypeScript 规则
- API 设计约定
- 测试要求
- Git 提交规范练习 2:设置自动化检查
为团队项目配置:
- Husky pre-commit hooks
- commitlint
- CI 规范门禁 workflow练习 3:发起规范 RFC
针对你团队当前最大的规范痛点,撰写一份 RFC 提案六、本课总结
**核心要点:**
- codex.yaml 是 Codex 行为的「宪法」,写得越细,生成代码越一致
- AI 生成代码审查关注点不同于人工代码:错误处理、N+1、边界条件
- 自动化检查(ESLint + TypeScript + CI)形成质量门禁,不以人意志为转移
- 规范要演进:RFC 流程 + 试行期 + 投票 + 季度回顾
- 好规范降低认知负担,坏规范成为开发阻碍——收集反馈是核心
**下一步:** 模块 503 — 权限与安全管理