139 lines
6.8 KiB
Markdown
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.

---
name: sdlc-repo-standard
description: SDLC project repo layout and deliverable specs.
---
# SDLC 项目仓库标准
项目工作空间 `workspace/repos/` 下建三类仓库,其他临时文件/其他用途文件**不进仓库**:
1. **项目过程仓库**(`repos/project/`):阶段文档、QC 审计文档、项目管理文档都放这里
2. **应用仓库**(至少一个):应用代码
3. **模块仓库**(每个模块一个):模块代码
## 目录结构
```
workspace/
├── repos/
│ ├── project/ # 项目过程仓库(git,本地仓库,无远程)
│ │ ├── README.md
│ │ ├── docs/ # 阶段文档
│ │ │ ├── 00-requirement/
│ │ │ │ └── requirement-spec.md
│ │ │ ├── 01-design/
│ │ │ │ ├── architecture.md # 系统架构、模块划分、模块间依赖、开发顺序
│ │ │ │ └── ui-design.md # 视觉风格/主页面/用户交互模式/弹窗规范
│ │ │ ├── 02-develop/
│ │ │ │ └── dev-notes.md
│ │ │ ├── 03-test/
│ │ │ │ ├── test-plan.md
│ │ │ │ ├── test-cases.md
│ │ │ │ └── test-report.md
│ │ │ ├── 04-deploy/
│ │ │ │ ├── deploy-guide.md
│ │ │ │ └── release-notes.md
│ │ │ └── 05-pm/ # 项目管理文档 + QC 审计文档
│ │ │ └── reviews/
│ │ ├── modules/ # 模块说明 + 模块级设计(自包含单元)
│ │ │ ├── <模块名>.md # 模块清单:功能/仓库/依赖/开发顺序
│ │ │ └── <模块名>/
│ │ │ ├── design.md # 数据设计(表DDL) + CRUD + 处理逻辑(接口)
│ │ │ └── skill/SKILL.md
│ │ ├── apps/ # 应用说明(每个应用一个文件)
│ │ │ └── <应用名>.md
│ │ ├── config/ # 部署配置
│ │ └── .gitignore
│ ├── <应用仓库>/ # 应用代码仓库(至少一个)
│ └── <模块仓库>/ # 每个模块一个代码仓库
└── (其他临时文件不进仓库)
```
**说明**:
- 项目过程仓库是**本地 git 仓库**(无远程),只 commit 不 push;QC 审核检查 commit 记录。
- 应用仓库、模块仓库是**代码仓库**(有远程),develop 阶段 clone 到 `repos/` 下并提交。
## 模块说明文件 `modules/<模块名>.md`
```markdown
# <模块名>
- **功能**: <一句话描述>
- **仓库**: git@git.opencomputing.cn:org/<repo>.git
- **技术栈**: <语言/框架>
- **状态**: <规划中/开发中/已完成>
- **负责人**: <role>
- **依赖模块**: <列出依赖的其他模块>
- **开发顺序**: <拓扑序中的位置,被依赖的先开发>
- **关联应用**: <属于哪个应用>
```
## 模块级设计 `modules/<模块名>/`
每个模块是自包含、可复用的单元,数据设计放模块内而非应用级:
```
modules/<模块名>/
├── design.md # 数据设计(表结构DDL) + CRUD 定义 + 处理逻辑(接口)
└── skill/SKILL.md # 模块技能文档(develop agent 参考)
```
**原则**: 数据、CRUD、处理逻辑、skills 都属于模块本身,不放在应用级 design 里,这样模块可整体复用(换个应用直接带着自己的数据/逻辑/skills 一起加载)。
**模板**: 设计产出用统一模板,保证 develop 读到的每个模块设计结构一致——
- `design.md` 模板 → `templates/module-design.md`(模块元信息 / 数据设计→models / CRUD→json / 处理逻辑→dspy / 入口菜单)
- `skill/SKILL.md` 模板 → `templates/module-skill.md`(frontmatter / 概述 / 数据模型 / 关键接口 / 陷阱 / 依赖)
## 应用说明文件 `apps/<应用名>.md`
```markdown
# <应用名>
- **描述**: <应用的整体功能和定位>
- **包含模块**:
- <模块1> (git@...)
- <模块2> (git@...)
- **部署环境**: <地址/端口>
- **负责人**: <role>
- **状态**: <规划中/开发中/已上线>
```
## 各角色产出规范
> 所有阶段文档都产出到项目过程仓库 `repos/project/` 下,完成后 `git_commit_push` 提交到项目过程仓库。
### requirement(需求分析师)
- **产出**: `repos/project/docs/00-requirement/requirement-spec.md`
- **同时创建**: `repos/project/apps/` 下至少一个应用说明文件(应用 = 部署单元,含端口/环境)
- **不划分模块**: 模块划分是架构决策,由 design 阶段设计师完成
- **内容**: 项目概述、用户角色及权限、功能列表(含验收标准)、非功能需求、业务流程
### design(系统设计师)
- **应用级产出**: `repos/project/docs/01-design/architecture.md`(系统架构、模块划分、模块间依赖、开发顺序), `ui-design.md`(视觉风格/主页面/用户交互模式/弹窗规范)
- **模块级设计**: 每个模块在 `repos/project/modules/<模块名>/` 下产出自己的设计——数据设计(表结构DDL)、CRUD 定义、处理逻辑(接口)、skills(技能文档)。数据/CRUD/逻辑/skills 属于模块本身,不放在应用级,保证模块可整体复用
- **更新**: `repos/project/modules/` 下各模块的技术栈、依赖关系、开发顺序
- **内容**: 架构图及技术选型、模块清单与依赖图、视觉风格与交互规范
### develop(开发工程师)
- **产出**: `repos/project/docs/02-develop/dev-notes.md`(开发说明,记录了哪些模块仓库、开发了什么功能)
- **源码**: 写入对应模块的独立仓库 `repos/<模块名>/`(通过 `modules/` 中的 repo URL 确定),**不在项目过程仓库中**
- **更新**: `repos/project/modules/` 下对应模块的状态为开发中/已完成
- **行为准则**:
1. 先读 `repos/project/modules/` 确认模块仓库 URL
2. `git_clone` 模块仓库到 `repos/` 下
3. `write_file` 写代码到模块仓库
4. `run_shell` 编译验证
5. `git_commit_push` 提交模块仓库
6. `write_file` 更新 `repos/project/modules/<模块名>.md` 状态,`git_commit_push` 提交项目过程仓库
7. `deliver` 交付
### test(测试工程师)
- **产出**: `repos/project/docs/03-test/test-plan.md`, `test-cases.md`, `test-report.md`
### deploy(部署工程师)
- **产出**: `repos/project/docs/04-deploy/deploy-guide.md`, `release-notes.md`, `repos/project/config/` 下部署配置
### PM(项目经理)
- **审核要点**:
- 每个阶段检查项目过程仓库有 git commit、交付件已受控提交
- develop: 必须检查对应模块仓库有 git commit,`modules/` 状态已更新
- 每个阶段检查 `modules/` 和 `apps/` 文件是否随进度更新