Files
NextEdu/CONTRIBUTING.md

130 lines
3.7 KiB
Markdown
Raw Permalink 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.
# 贡献指南
感谢参与本项目!请遵循以下规范提交贡献。
## 开发环境准备
```bash
# 1. 安装依赖
npm install
# 2. 准备环境变量
cp .env.example .env
# 编辑 .env 填入实际配置
# 3. 初始化数据库
npm run db:push
# 4. 启动开发服务器
npm run dev
```
## 强制工作流程
**所有代码改动前必须先查阅架构文档:**
1. 阅读 `docs/architecture/004_architecture_impact_map.md` 了解架构设计意图
2. 运行 `npm run arch:scan` 更新 arch.db
3. 运行 `npm run arch:query -- module-deps` 查目标模块依赖
4. 阅读 `src/modules/[模块]/README.md` 了解模块工作流程
5.`docs/troubleshooting/known-issues.md` 读相关经验
**代码改动后必须:**
1. 运行 `npx tsc --noEmit` 确保零错误
2. 运行 `npm run lint` 确保零错误
3. 运行 `npm run arch:scan` 更新 arch.db
4. 若架构设计意图变化,同步更新 004 文档
5. 若发现新场景→技术映射,更新 known-issues.md
## 提交规范
### Conventional Commits 格式
```
<type>(<scope>): <description>
[optional body]
[optional footer]
```
**类型type**
- `feat`: 新功能
- `fix`: Bug 修复
- `docs`: 文档变更
- `style`: 代码格式(不影响功能)
- `refactor`: 重构(既不是新功能也不是修复)
- `test`: 测试相关
- `chore`: 构建/工具/依赖变更
- `perf`: 性能优化
- `ci`: CI/CD 变更
**示例:**
```
feat(arch-scan): add @public JSDoc tag exemption mechanism
fix(permissions): fix parent module 6 Action permission violations
refactor: split 5 oversized files into domain-specific subfiles
docs(architecture): rewrite 004 as architecture design document
```
### 提交前检查
husky + lint-staged 会在 `git commit` 时自动执行:
- ESLint 检查暂存文件
- Prettier 格式化暂存文件
- commitlint 校验 commit message 格式
如果检查失败,请修复后重新提交。
## 架构约束
### 严格三层架构
```
app → modules → shared
```
- `app/` 只能调用 `modules/` 的 Server Actions 和 data-access
- `modules/` 之间通过对方 data-access 通信,不直接查询对方 DB 表
- `shared/` 不得反向依赖 `modules/*``app/*`
### 代码质量规则
- 禁止 `any`,未知类型用 `unknown` + 类型守卫
- 禁止 `as` 断言(除非从 `unknown` 转换,需注释原因)
- 函数返回值必须显式标注,特别是 `Promise<T>`
- 仅用于类型的导入使用 `import type`
- Server Action 必须调用 `requirePermission()`(或加 `@public` 标记豁免)
- 前端权限检查使用 `usePermission().hasPermission()`,禁止 `role === "xxx"` 硬编码
- 单文件行数:组件 ≤500actions/data-access ≤800硬限 1000
### 设计令牌规范
- 禁止硬编码颜色(`#hex`),使用 `hsl(var(--*))` 或 Tailwind 类
- 禁止硬编码字体(`'Inter'`),使用 `var(--font-family-*)`
- 禁止 Tailwind 任意值(`w-[137px]`),映射到 `--space-*` 或默认阶梯
## 文档同步
### 需要同步架构图的场景
- 新增/删除/重命名导出函数、组件、Hook、类型
- 修改函数签名(参数、返回类型)
- 修改权限点或角色-权限映射
- 新增/删除数据库表、路由页面、API 路由
- 修改模块间依赖关系
- 新增模块
### 同步方式
- 修改源码后运行 `npm run arch:scan` 更新 arch.db强制
- 若架构设计意图变化,同步更新 `docs/architecture/004_architecture_impact_map.md`
- 若发现新"场景→技术"映射,更新 `docs/troubleshooting/known-issues.md`
## 问题报告
- 构建/lint/tsc 报错 → 记录到 `docs/troubleshooting/known-issues.md` "全局经验"分区
- 运行时异常 → 记录到"模块经验"分区
- 框架/库版本兼容问题 → 记录到"全局经验: Next.js 配置与运行时"