docs: 迁移 spring-ai 通用文档到 rui-docs
- 添加 backend/项目实施规范.md - 添加 backend/业务应用模块创建规则.md - 添加 backend/guides/deployment-guide.md - 添加 frontend/admin-ui-icon-guide.md - 添加 frontend/admin-ui-status.md - 更新 README.md 文档索引
This commit is contained in:
@@ -0,0 +1,433 @@
|
||||
# 跨团队协作工作流规范
|
||||
|
||||
> **版本**: v1.0
|
||||
> **创建日期**: 2026-06-04
|
||||
> **适用范围**: rui 项目所有开发角色(框架、应用、前端)
|
||||
|
||||
---
|
||||
|
||||
## 一、背景与目的
|
||||
|
||||
### 1.1 问题背景
|
||||
|
||||
rui 项目采用多仓结构:
|
||||
- **后端仓库**:`spring-ai`(backend + app/*)
|
||||
- **前端仓库**:`rui-frontend`(admin-ui + cashier-mobile + customer-mobile)
|
||||
|
||||
在使用 OpenCode AI 辅助开发时存在以下痛点:
|
||||
|
||||
- **上下文污染**:一个 OpenCode 会话同时处理框架、应用、前端,导致理解混乱
|
||||
- **边界模糊**:开发应用模块时直接修改框架代码,破坏框架稳定性
|
||||
- **协作困难**:前端需要接口时无法有效通知后端,应用发现框架 Bug 时修复流程不规范
|
||||
|
||||
### 1.2 目标
|
||||
|
||||
- **仓库隔离**:前后端独立仓库,各自独立发版
|
||||
- **会话隔离**:每个 OpenCode 会话只处理一个职责领域
|
||||
- **边界清晰**:通过文件访问限制防止跨域修改
|
||||
- **规范协作**:通过 Gitee Issue 模板实现标准化跨团队沟通
|
||||
- **可追溯性**:所有跨团队协作都有记录,便于后续审计
|
||||
|
||||
---
|
||||
|
||||
## 二、角色与职责边界
|
||||
|
||||
### 2.1 仓库结构
|
||||
|
||||
```
|
||||
# 后端仓库:spring-ai
|
||||
spring-ai/
|
||||
├── backend/ # 基础框架
|
||||
├── app/ # 应用模块(支付、收银等)
|
||||
├── docs/ # 后端文档
|
||||
└── ...
|
||||
|
||||
# 前端仓库:rui-frontend
|
||||
rui-frontend/
|
||||
├── admin-ui/ # 管理后台(Vue 3)
|
||||
├── cashier-mobile/ # 收银系统移动端
|
||||
├── customer-mobile/ # 收银系统顾客端
|
||||
└── ...
|
||||
```
|
||||
|
||||
### 2.2 三种开发角色
|
||||
|
||||
| 角色 | 所属仓库 | 负责目录 | 可修改范围 | 只读范围 | 会话配置 |
|
||||
|------|---------|---------|-----------|---------|---------|
|
||||
| **框架开发** | spring-ai | `backend/` | `backend/**` | `app/**` | `framework.json` |
|
||||
| **应用开发** | spring-ai | `app/{模块}/` | `app/{模块}/**` | `backend/**` | `app-module.json` |
|
||||
| **前端开发** | rui-frontend | `admin-ui/` | `admin-ui/**` | `cashier-mobile/`, `customer-mobile/` | `admin-ui.json` |
|
||||
|
||||
### 2.2 职责矩阵
|
||||
|
||||
| 操作 | 框架会话 | 应用会话 | 前端会话 |
|
||||
|------|---------|---------|---------|
|
||||
| 修改框架代码 | ✅ | ❌ 禁止 | ❌ 禁止 |
|
||||
| 修改应用代码 | ❌ 禁止 | ✅ | ❌ 禁止 |
|
||||
| 修改前端代码 | ❌ 禁止 | ❌ 禁止 | ✅ |
|
||||
| 报告框架 Bug | ✅ 接收并处理 | ✅ 创建 Issue | ✅ 创建 Issue |
|
||||
| 请求新接口 | ✅ 实现 | ✅ 实现 | ✅ 创建 Issue |
|
||||
| 修改接口文档 | ✅ | ✅ | ❌ 禁止 |
|
||||
|
||||
---
|
||||
|
||||
## 三、协作场景与流程
|
||||
|
||||
### 场景一:前端/应用需要后端接口
|
||||
|
||||
**触发条件**:前端(rui-frontend 仓库)或应用模块在开发过程中需要新的后端接口支持
|
||||
|
||||
**协作流程**(跨仓库协作):
|
||||
|
||||
```
|
||||
rui-frontend/ spring-ai/
|
||||
┌─────────────┐ ┌─────────────┐
|
||||
│ 前端会话 │ │ 后端 │
|
||||
│ (admin-ui) │ │ 会话 │
|
||||
└──────┬──────┘ └──────┬──────┘
|
||||
│ │
|
||||
│ 在 spring-ai 仓库创建 │
|
||||
│ Issue [API-REQ] │
|
||||
└────────────────────────→│
|
||||
│ │
|
||||
│ 回复:接口已实现 │
|
||||
│ Swagger 地址:xxx │
|
||||
│←────────────────────────┘
|
||||
│ │
|
||||
│ 根据 Swagger 开发/联调 │
|
||||
│ │
|
||||
```
|
||||
|
||||
**详细步骤**:
|
||||
|
||||
1. **需求方**(前端或应用)在 Gitee 创建 Issue
|
||||
- 使用模板:`api_request.md`
|
||||
- 标题格式:`[API-REQ] 一句话描述`
|
||||
- 标签:`api-request`, `cross-team`
|
||||
- 必填信息:接口路径、请求/响应格式、业务规则
|
||||
|
||||
2. **实现方**(后端)处理 Issue
|
||||
- 在 backend/ 下实现接口
|
||||
- 更新 Swagger 文档
|
||||
- 提交 PR 并关联 Issue
|
||||
- 在 Issue 中回复接口信息
|
||||
|
||||
3. **需求方**验证并关闭 Issue
|
||||
- 根据 Swagger 开发/联调
|
||||
- 确认无误后关闭 Issue
|
||||
|
||||
**示例**:
|
||||
- 前端 Issue:`[API-REQ] 用户管理需要批量导入接口`
|
||||
- 后端回复:`接口已实现,Swagger: /doc.html#/用户管理/importUsers`
|
||||
|
||||
---
|
||||
|
||||
### 场景二:应用发现框架 Bug
|
||||
|
||||
**触发条件**:应用模块在开发过程中发现基础框架存在问题
|
||||
|
||||
**协作流程**:
|
||||
|
||||
```
|
||||
┌─────────────┐ 创建 Issue ┌─────────────┐
|
||||
│ 应用模块 │ ──────────────────→ │ 框架 │
|
||||
│ 会话 │ [FRAMEWORK] 模板 │ 会话 │
|
||||
└─────────────┘ └─────────────┘
|
||||
↑ │
|
||||
│ 回复:已修复 + 版本号 │
|
||||
└──────────────────────────────────┘
|
||||
↑ │
|
||||
│ 升级依赖并验证 │
|
||||
└──────────────────────────────────┘
|
||||
```
|
||||
|
||||
**详细步骤**:
|
||||
|
||||
1. **发现方**(应用模块)在 Gitee 创建 Issue
|
||||
- 使用模板:`framework_bug.md`
|
||||
- 标题格式:`[FRAMEWORK] 一句话描述`
|
||||
- 标签:`framework`, `cross-team`, `bug`
|
||||
- 必填信息:复现路径、期望/实际行为、影响评估
|
||||
|
||||
2. **框架方**处理 Issue
|
||||
- 复现问题
|
||||
- 在 backend/ 下修复
|
||||
- 发布新版本(更新 pom.xml 版本号)
|
||||
- 在 Issue 中回复修复版本
|
||||
|
||||
3. **应用方**升级依赖
|
||||
- 更新 pom.xml 中的框架依赖版本
|
||||
- 验证问题是否修复
|
||||
- 关闭 Issue
|
||||
|
||||
**重要原则**:
|
||||
- ❌ **严禁**应用会话直接修改 backend/ 下的代码
|
||||
- ✅ 即使是很小的改动,也要走 Issue 流程
|
||||
- ✅ 紧急情况下可先临时 workaround,但必须同步创建 Issue
|
||||
|
||||
**示例**:
|
||||
- 应用 Issue:`[FRAMEWORK] BaseController 分页查询在 search 为空时 NPE`
|
||||
- 框架回复:`已修复,版本 v2.1.3,请升级依赖`
|
||||
|
||||
---
|
||||
|
||||
### 场景三:通用跨团队任务
|
||||
|
||||
**触发条件**:不属于接口需求或框架 Bug 的其他协作任务
|
||||
|
||||
**协作流程**:
|
||||
|
||||
1. **提出方**在 Gitee 创建 Issue
|
||||
- 使用模板:`cross_team_task.md`
|
||||
- 标题格式:`[CROSS] 一句话描述`
|
||||
- 明确说明:谁来做、做什么、何时完成
|
||||
|
||||
2. **接收方**处理并关闭
|
||||
|
||||
**适用场景**:
|
||||
- 需要其他模块提供配置数据
|
||||
- 需要协调数据库变更
|
||||
- 需要共享文档或工具
|
||||
|
||||
---
|
||||
|
||||
## 四、OpenCode 会话启动规范
|
||||
|
||||
### 4.1 启动前准备
|
||||
|
||||
每次启动 OpenCode 前,明确当前角色:
|
||||
|
||||
| 我要做什么 | 应该启动的会话 | 工作区配置 |
|
||||
|-----------|--------------|-----------|
|
||||
| 开发框架通用能力 | 框架会话 | `framework.json` |
|
||||
| 开发支付模块 | 应用会话(支付) | `app-module.json` |
|
||||
| 开发用户模块 | 应用会话(用户) | `app-module.json` |
|
||||
| 开发前端页面 | 前端会话 | `admin-ui.json` |
|
||||
|
||||
### 4.2 启动方式
|
||||
|
||||
#### 方式一:手动指定(推荐)
|
||||
|
||||
启动 OpenCode 时,明确指定仓库和角色:
|
||||
|
||||
**后端仓库(spring-ai)**:
|
||||
```
|
||||
工作目录:/Users/zhangsheng/rhkj/spring-ai
|
||||
角色:框架开发
|
||||
限制:只能修改 backend/ 下的代码
|
||||
```
|
||||
|
||||
**前端仓库(rui-frontend)**:
|
||||
```
|
||||
工作目录:/Users/zhangsheng/rhkj/rui-frontend
|
||||
角色:前端开发
|
||||
限制:只能修改 admin-ui/ 下的代码
|
||||
```
|
||||
|
||||
#### 方式二:使用工作区配置(如果 OpenCode 支持)
|
||||
|
||||
**后端仓库**参考 `.opencode/workspace/` 目录下的 JSON 配置文件:
|
||||
- `framework.json` - 框架开发
|
||||
- `app-module.json` - 应用模块开发
|
||||
|
||||
**前端仓库**参考 `rui-frontend/.opencode/workspace/` 目录下的配置文件(需自行创建)。
|
||||
|
||||
### 4.3 会话切换规则
|
||||
|
||||
- **同一功能内**:保持同一会话,不要频繁切换
|
||||
- **跨模块切换**:使用 `/new` 创建新会话
|
||||
- **对话轮次过多**(超过 20-30 轮):建议新建会话
|
||||
|
||||
---
|
||||
|
||||
## 五、Gitee Issue 使用规范
|
||||
|
||||
### 5.1 Issue 模板位置
|
||||
|
||||
```
|
||||
.gitee/issue_templates/
|
||||
├── api_request.md # 接口需求
|
||||
├── framework_bug.md # 框架问题
|
||||
└── cross_team_task.md # 通用任务
|
||||
```
|
||||
|
||||
### 5.2 标签规范
|
||||
|
||||
| 标签 | 用途 | 颜色 |
|
||||
|------|------|------|
|
||||
| `api-request` | 接口需求 | 蓝色 |
|
||||
| `framework` | 框架相关问题 | 红色 |
|
||||
| `cross-team` | 跨团队协作 | 紫色 |
|
||||
| `bug` | 缺陷 | 红色 |
|
||||
| `frontend→backend` | 前端调后端 | 绿色 |
|
||||
| `app→framework` | 应用调框架 | 橙色 |
|
||||
|
||||
### 5.3 标题规范
|
||||
|
||||
| 类型 | 格式 | 示例 |
|
||||
|------|------|------|
|
||||
| 接口需求 | `[API-REQ] {模块}需要{功能}` | `[API-REQ] 用户模块需要批量导入接口` |
|
||||
| 框架问题 | `[FRAMEWORK] {问题简述}` | `[FRAMEWORK] BaseController 分页查询 NPE` |
|
||||
| 通用任务 | `[CROSS] {任务简述}` | `[CROSS] 协调订单表索引变更` |
|
||||
|
||||
### 5.4 处理时效
|
||||
|
||||
| 优先级 | 响应时间 | 解决时间 |
|
||||
|--------|---------|---------|
|
||||
| P0-阻塞 | 2 小时内 | 24 小时内 |
|
||||
| P1-高 | 4 小时内 | 3 天内 |
|
||||
| P2-中 | 1 天内 | 1 周内 |
|
||||
| P3-低 | 2 天内 | 排期处理 |
|
||||
|
||||
---
|
||||
|
||||
## 六、目录访问控制
|
||||
|
||||
### 6.1 框架会话(backend/)
|
||||
|
||||
```
|
||||
可修改:
|
||||
backend/
|
||||
docs/framework/
|
||||
|
||||
只读(禁止修改):
|
||||
app/
|
||||
admin-ui/
|
||||
docs/superpowers/ # 除非涉及框架规范更新
|
||||
```
|
||||
|
||||
### 6.2 应用会话(app/{模块}/)
|
||||
|
||||
```
|
||||
可修改:
|
||||
app/{当前模块}/
|
||||
docs/{当前模块}/
|
||||
|
||||
只读(禁止修改):
|
||||
backend/
|
||||
admin-ui/
|
||||
app/其他模块/ # 需要调用时通过 Feign/HTTP
|
||||
```
|
||||
|
||||
### 6.3 前端会话(admin-ui/)
|
||||
|
||||
```
|
||||
可修改:
|
||||
admin-ui/
|
||||
|
||||
只读(禁止修改):
|
||||
backend/
|
||||
app/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 七、最佳实践
|
||||
|
||||
### 7.1 沟通优先于修改
|
||||
|
||||
- 发现其他域的问题 → 先创建 Issue → 不要直接修改
|
||||
- 需要其他域支持 → 先创建 Issue → 等待响应
|
||||
|
||||
### 7.2 信息完整减少往返
|
||||
|
||||
创建 Issue 时尽量提供完整信息:
|
||||
- ✅ 包含复现路径
|
||||
- ✅ 包含期望结果
|
||||
- ✅ 包含截图/日志
|
||||
- ❌ 避免只有"这个功能有问题"这样模糊的描述
|
||||
|
||||
### 7.3 及时关闭已完成的 Issue
|
||||
|
||||
- 接口验证通过后立即关闭
|
||||
- Bug 修复验证后立即关闭
|
||||
- 长期未关闭的 Issue 需要定期 review
|
||||
|
||||
### 7.4 版本管理
|
||||
|
||||
- 框架修复后及时更新版本号
|
||||
- 应用模块及时升级框架依赖
|
||||
- 在 Issue 中明确记录版本信息
|
||||
|
||||
### 7.5 紧急问题处理
|
||||
|
||||
遇到阻塞性紧急问题:
|
||||
1. 先在应用侧做临时 workaround(记录 commit)
|
||||
2. 同步创建 Issue 通知框架团队
|
||||
3. 框架修复后,移除 workaround 并升级依赖
|
||||
|
||||
---
|
||||
|
||||
## 八、常见问题
|
||||
|
||||
### Q1: 我发现框架有个很明显的小 bug,也必须走 Issue 流程吗?
|
||||
|
||||
**答**:是的。即使是一行代码的修改,也要走 Issue 流程。因为:
|
||||
- 框架代码影响所有应用模块
|
||||
- 需要评估影响范围
|
||||
- 需要同步版本更新
|
||||
|
||||
### Q2: 前端仓库(rui-frontend)和后端仓库(spring-ai)是什么关系?
|
||||
|
||||
**答**:
|
||||
- **独立仓库**:前端和后端是完全独立的 Git 仓库
|
||||
- **通过 API 关联**:前端通过 HTTP 接口调用后端服务
|
||||
- **通过 Issue 协作**:跨仓库的需求通过 Gitee Issue 进行沟通
|
||||
- **独立部署**:前端和后端可以独立构建、独立部署
|
||||
|
||||
### Q3: 为什么前端要独立仓库?
|
||||
|
||||
**答**:
|
||||
- **技术栈不同**:前端使用 Vue/Node.js,后端使用 Java/Spring
|
||||
- **构建工具不同**:前端用 Vite/pnpm,后端用 Maven
|
||||
- **发布节奏不同**:前端可以独立发版,不需要等后端
|
||||
- **团队分工**:前端和后端可能由不同团队维护
|
||||
- **避免污染**:node_modules(几百 MB)不进入后端仓库
|
||||
|
||||
### Q4: 前端如何获取后端接口信息?
|
||||
|
||||
**答**:
|
||||
1. 查看后端 Swagger 文档:`http://{backend-host}/doc.html`
|
||||
2. 通过 Gitee Issue 询问后端团队
|
||||
3. 参考已有的 service/ 目录下的 API 定义
|
||||
|
||||
### Q5: 前端可以直接看 backend 的代码来了解接口吗?
|
||||
|
||||
**答**:可以查看(只读),但不应该依赖阅读源码来了解接口。应该:
|
||||
- 查看 Swagger 文档
|
||||
- 通过 Issue 询问后端
|
||||
- 参考已有的 service/ 目录下的 API 定义
|
||||
|
||||
### Q6: 应用模块之间如何协作?
|
||||
|
||||
**答**:应用模块之间通过以下方式协作:
|
||||
- **接口调用**:使用 FeignClient 调用 `/inner/` 路径
|
||||
- **MQ 消息**:通过消息队列解耦
|
||||
- **共享 DTO**:定义在 `rui-xxx-common` 模块中
|
||||
|
||||
跨应用模块的接口需求同样使用 `api_request.md` 模板。
|
||||
|
||||
### Q7: 如果框架会话和应用会话同时修改了代码怎么办?
|
||||
|
||||
**答**:由于有目录访问限制,不会出现同时修改同一文件的情况。框架只改 backend/,应用只改 app/,天然隔离。
|
||||
|
||||
---
|
||||
|
||||
## 九、相关文档
|
||||
|
||||
- [项目规范](../AGENTS.md)
|
||||
- [前端仓库](../../rui-frontend/README.md)
|
||||
- [设计文档模板](superpowers/templates/design-template.md)
|
||||
- [实施计划模板](superpowers/templates/plan-template.md)
|
||||
|
||||
---
|
||||
|
||||
## 十、更新记录
|
||||
|
||||
| 版本 | 日期 | 更新内容 | 作者 |
|
||||
|------|------|---------|------|
|
||||
| v1.0 | 2026-06-04 | 初稿 | OpenCode |
|
||||
|
||||
---
|
||||
|
||||
> **提示**:本文档是活文档,随着团队协作实践的发展会持续更新。如有建议,请提交 PR 或创建 Issue 讨论。
|
||||
Reference in New Issue
Block a user