Skip to content

Repository files navigation

生产级项目工程标准化规范

SDD(OpenSpec规格驱动开发)+ AI Agent 原生协作的开发工程标准框架。 适用于 React/Vue + Spring Boot/FastAPI 的技术栈组合。


目录


前置依赖

无论哪种平台,运行 dev / build / ci 前需安装对应工具链(本仓库是规范模板,frontend/backend/ 仅含骨架配置,需先初始化真实项目并装好依赖才能跑通):

工具 用途 安装方式
pnpm 前端依赖 / 构建 / 测试 npm i -g pnpmcorepack enable
java + Gradle 后端 (Java) 构建 JDK 17,./gradlew 自带无需单独装
poetry 后端 (Python) 依赖 pip install poetry
trivy 安全扫描(可选) Trivy 官方文档
docker 容器化(可选) Docker Desktop

如何使用这套规范

场景 1:新项目从零开始

# 1. 克隆或复制本仓库作为模板
git clone <this-repo-url> my-new-project
cd my-new-project

# 2. 移除模板的 .git 历史,重新初始化
rm -rf .git
git init
git add -A
git commit -m "chore: init from WorkBuddy standard"

# 3. 用 openspec 提出需求(/opsx:propose),或编辑 openspec/specs/ 主规范

# 4. 选择技术栈,进入对应子目录开始开发
cd frontend/react   # 或 frontend/vue
pnpm install
pnpm dev

# 4b. 后端(Java 首次需生成 Gradle Wrapper,生成后 gradlew/gradle-wrapper.jar 需提交)
cd backend/java && gradle wrapper --gradle-version 8.7 && ./gradlew build
#
cd backend/python && poetry install

# 4c. 本地基础设施(PostgreSQL + Redis)
docker compose up -d   # 或 make docker-up

# 5. 将真实项目文件添加到 Git
#    ⚠ 锁文件必须提交:pnpm-lock.yaml、poetry.lock、gradle wrapper
git add -A
git commit -m "chore: project init with WorkBuddy standard"

场景 2:已有项目接入规范

# 1. 将本仓库的核心文件复制到你的项目中
#    必选文件(这些是 AI 上下文的基石):
#
#    your-project/
#    ├── AGENTS.md              # 单文件权威入口
#    ├── openspec/              # OpenSpec 规格驱动工作区(按需 init)
#    ├── skills/                # Skill 定义
#    ├── .codebuddy/            # CodeBuddy IDE 配置
#    ├── .workbuddy/            # WorkBuddy 记忆系统
#    ├── Makefile               # 自动化命令(按需修改 target)
#    ├── .gitlab-ci.yml         # CI/CD 流水线(可选)
#    ├── .env.example           # 环境变量模板
#    ├── .eslintrc.json         # ESLint 共享配置
#    └── .prettierrc            # Prettier 共享配置

# 2. 修改 AGENTS.md 中的技术栈描述,
#    使其匹配你项目的实际技术栈

# 3. 用 openspec init 初始化,并通过 /opsx:propose 沉淀需求,
#    使其反映你项目的现状

# 4. 根据技术栈选择后端 rules,删除不需要的
#    例如纯 Java 后端 → 删除 .codebuddy/rules/react-spec.mdc 和 vue-spec.mdc

# 5. 提交变更,AI 助手启动后会自动读取 AGENTS.md

一键裁剪命令(支持多选组合)

手动删目录、删规则文件容易出错。脚本 scripts/scaffold.ps1 可按布局一键删除无关 frontend/ / backend/ 子树与 .codebuddy/rules/*.mdc,并把 AGENTS.md 的目录树与布局说明裁剪到对应形态(支持任意组合)。

# Windows (PowerShell) —— 布局可多选,空格分隔即可
powershell -File ./Make.ps1 init -Layout backend-python
powershell -File ./Make.ps1 init -Layout frontend-react
powershell -File ./Make.ps1 init -Layout backend-java frontend-vue   # Java 后端 + Vue 前端
powershell -File ./Make.ps1 init -Layout backend-java backend-python # 同时保留两种后端
powershell -File ./Make.ps1 init -Layout full                        # 前后端一体(默认)
# 预览(不实际删除/改写)
powershell -File ./Make.ps1 init -Layout backend-java frontend-vue -DryRun
# Linux / macOS / Git Bash
make init LAYOUT=backend-python
make init LAYOUT="backend-java frontend-vue"   # Java + Vue
make init LAYOUT=full

可选布局(可任意组合):backend-java / backend-python / frontend-react / frontend-vue / full。脚本会删除无关子树与规则文件,并把 AGENTS.md 的目录树、布局说明裁剪到对应形态。裁剪前建议先提交或备份当前仓库(脚本会真正删除文件)。

AI 工作流

┌─────────────────────────────────────────────────────────────┐
│  AI 启动流程                                                  │
│  1. 读取 AGENTS.md(单文件入口,含全部规范引用)                   │
│  2. 读取 openspec/specs/ 主规范与 openspec/changes/(了解进度)  │
│  3. 按需用 /opsx:* 提出、实施、归档变更                          │
│  4. 加载 .codebuddy/rules/*.mdc(编码规范)                      │
│  5. 按任务类型匹配 skills/ 中的 Skill,执行对应工作流               │
└─────────────────────────────────────────────────────────────┘

任务类型 Skill 调度

任务类型 对应 Skill 说明
数据库 / ORM / 建表 scaffold-database 生成数据模型和 Migration
Docker / K8s / 部署 scaffold-deploy 生成部署配置
测试 / 覆盖率 scaffold-test 生成测试代码

OpenSpec 使用指南

OpenSpec 是什么

OpenSpec(github.com/Fission-AI/OpenSpec)是一套面向 AI 编码助手的规范驱动开发(Spec-Driven Development, SDD)框架,MIT 开源。核心目标:在写任何代码之前,让人与 AI 就"要构建什么"达成书面一致,从而消除"需求只存在于聊天历史"的不确定性。

核心工作流(propose → apply → archive):

/opsx:propose "你的需求"   # 生成变更提案:proposal.md + specs + design.md + tasks.md
/opsx:apply               # AI 按 tasks.md 逐项实施
/opsx:archive             # 归档变更,合并进 openspec/specs/ 主规范

目录结构:

openspec/
├── specs/            # 主规范(已实现能力的"真相源",每个 capability 一个目录)
│   ├── project-overview/spec.md
│   ├── auth/spec.md
│   └── users/spec.md
├── changes/          # 变更提案(propose → apply → archive 流转)
│   └── archive/      # 已归档变更
└── config.yaml       # OpenSpec 配置

主规范用纯 Markdown + SHALL/WHEN/THEN 表达需求,无需学习新语法。

安装与初始化

# 前提:Node.js 20.19+,安装 CLI
npm install -g @fission-ai/openspec@latest

# 在项目根初始化(本仓库已初始化,并启用 CodeBuddy 支持)
openspec init --tools codebuddy

# 查看已存在的 specs
openspec list --specs

初始 specs:

capability spec.md 内容
project-overview openspec/specs/project-overview/spec.md 项目背景、目标、非功能需求
auth openspec/specs/auth/spec.md 注册/登录/刷新/登出 + API 契约
users openspec/specs/users/spec.md 用户 CRUD + API 契约

日常开发流程:

# 1. 提出需求,AI 生成变更提案
/opsx:propose "实现用户注册登录"

# 2. 确认提案后,AI 按 tasks.md 实施
/opsx:apply

# 3. 实现完成,归档并合并进 openspec/specs/ 主规范
/opsx:archive

铁律:变更 API 必须先走 OpenSpec 变更提案并同步 openspec/specs/ 主规范,再修改代码。

统一响应格式(必须遵守):

{
  "code": 0,
  "message": "success",
  "data": {},
  "requestId": "uuid"
}

错误码约定:

范围 含义
0 成功
1xxx 参数校验错误
2xxx 认证/授权错误
3xxx 业务逻辑错误
5xxx 服务端内部错误
9xxx 第三方服务错误

数据模型: 表结构与字段约定在 openspec/specs/ 相关 capability 中描述,代码侧以 ORM 模型(MyBatis-Plus Entity / SQLAlchemy Model)与迁移脚本为准。命名规范:表名 snake_case 复数、必备 id/created_at/updated_at、软删除用 deleted_at


Makefile 命令参考

跨平台说明:下表命令以 make 为例(适用于 Linux / macOS / Git Bash)。 Windows (PowerShell) 请用等价的 Make.ps1:把 make <target> 换成 powershell -File ./Make.ps1 <target>(例如 powershell -File ./Make.ps1 devpowershell -File ./Make.ps1 ci;若装了 PowerShell 7+ 也可写 pwsh ./Make.ps1 <target>)。

### 开发

| 命令 | 说明 |
|------|------|
| `make help` | 显示所有可用命令 |
| `make install` | 安装前后端全部依赖 |
| `make dev` | 启动开发环境(前端 dev server + 后端 bootRun/uvicorn) |

```powershell
# Windows (PowerShell)
powershell -File ./Make.ps1 help     # 查看所有可用命令
powershell -File ./Make.ps1 dev      # 启动开发环境
powershell -File ./Make.ps1 ci       # 本地模拟 CI 流水线
# 若已安装 PowerShell 7+,也可把 powershell -File 替换为 pwsh

### 构建与测试

| 命令 | 说明 |
|------|------|
| `make build` | 构建前端 + 后端(跳过测试) |
| `make test` | 运行全部测试(前端 + 后端) |
| `make test-coverage` | 运行测试 + 生成覆盖率报告 |
| `make performance-test` | 运行性能测试(Gatling) |

### 代码质量

| 命令 | 说明 |
|------|------|
| `make lint` | 代码检查(ESLint + Checkstyle + Ruff) |
| `make format` | 代码格式化(Prettier + Spotless + Ruff) |

### 安全与合规

| 命令 | 说明 |
|------|------|
| `make security-scan` | SAST 安全扫描(Trivy) |
| `make sast-scan` | 代码安全审计(Bandit + OWASP Dependency Check) |
| `make compliance-check` | 合规检查(硬编码密钥 + .env 提交 + 敏感日志) |
| `make dependency-scan` | 依赖漏洞扫描(pnpm audit + OWASP + Safety) |

### 容器化

| 命令 | 说明 |
|------|------|
| `make docker-build` | 构建 Docker 镜像(基于根目录 `Dockerfile`,默认 Python FastAPI;若为 Java 后端请替换) |
| `make docker-up` | 启动 Docker Compose 服务(PostgreSQL + Redis + app) |
| `make docker-down` | 停止 Docker Compose 服务 |

> 根目录 `docker-compose.yml` 提供本地基础设施(PostgreSQL + Redis)与应用服务;环境变量来自 `.env`。

### 工具

| 命令 | 说明 |
|------|------|
| `make clean` | 清理所有构建产物 |
| `make db-migrate` | 运行数据库迁移(Flyway / Prisma) |
| `make db-studio` | 打开 Prisma Studio(数据可视化) |
| `make sync-skills` | 同步 `skills/` 到 `.claude/` 和 `.codex/` |
| `make ci` | 本地模拟 CI 流水线(lint → test → security → compliance → build) |

---

## CI/CD 流水线

### 流水线阶段

Build → Test → Security → Compliance → Docker → Deploy


### 各阶段说明

| 阶段 | Job | 触发条件 | 失败策略 |
|------|-----|----------|----------|
| **Build** | 前端构建 + Java 构建 + Python 依赖安装 | MR / main / develop | 阻断 |
| **Test** | 前端测试 + Java 测试 + Python 测试(含覆盖率) | MR / main | 阻断 |
| **Security** | Trivy 高危扫描 + Bandit 审计 + 依赖扫描 | MR / main | Trivy 阻断,其余告警 |
| **Compliance** | 硬编码密钥检测 + .env 提交检测 | MR | 阻断 |
| **Docker** | 构建并推送镜像到 Registry | main / tags | 阻断 |
| **Deploy** | 部署到 staging(develop) / production(tags,手动触发) | develop / tags | 阻断 |

### 手动触发生产部署

```bash
# 打 tag 触发生产部署(部署步骤需手动点击确认)
git tag v1.0.0
git push origin v1.0.0

本地模拟 CI

# 在推送代码前,本地模拟完整 CI 流水线
make ci

# 单独运行某个阶段
make lint
make test
make security-scan
make compliance-check
make build

Git Worktree 使用指南

什么是 Git Worktree

Git Worktree 允许你在同一仓库的不同分支上同时工作,无需 clone 多份代码。每个 worktree 是一个独立的目录,可以独立进行开发、构建、测试。

项目 Worktree 约定

本项目的所有 worktree 统一放在 worktrees/ 目录下,该目录已加入 .gitignore,随用随建,用完即删。

project-root/
├── worktrees/             ← 全部 worktree 放这里(gitignored)
│   ├── feature-payment/   ← feature/payment 分支
│   ├── fix-login-bug/     ← fix/login-bug 分支
│   └── hotfix-v1.2.1/     ← hotfix/v1.2.1 分支

常用命令

# ── 创建 Worktree ─────────────────────────────────────────
# 基于当前分支创建新 worktree + 新分支
git worktree add worktrees/feature-xxx -b feature/xxx

# 基于指定分支创建
git worktree add worktrees/feature-xxx -b feature/xxx main

# 基于已有分支创建(不新建分支)
git worktree add worktrees/hotfix-v1.2.1 hotfix/v1.2.1

# ── 查看 Worktree ─────────────────────────────────────────
# 列出所有 worktree
git worktree list

# ── 切换工作 ──────────────────────────────────────────────
# 每个 worktree 独立,直接在对应目录下开发即可
cd worktrees/feature-xxx
pnpm install
pnpm dev

# ── 清理 Worktree ─────────────────────────────────────────
# 删除 worktree(先确保分支已合并/推送)
git worktree remove worktrees/feature-xxx

# 清理已删除但未 remove 的 worktree 记录
git worktree prune

# 手动删除(prune 后再清理目录不会报错)
# git worktree remove 会自动调用 prune

典型工作流

# 1. 从主分支创建 feature 分支的 worktree
git worktree add worktrees/feature-user-auth -b feature/user-auth main

# 2. 进入 worktree 目录开发
cd worktrees/feature-user-auth
# ... 写代码、测试、commit ...

# 3. 同时在主分支处理 hotfix(不切换目录)
git worktree add worktrees/hotfix-critical-fix -b hotfix/critical-fix main
cd worktrees/hotfix-critical-fix
# ... 修复、commit、push、合入 MR ...

# 4. 回到 feature 继续开发
cd worktrees/feature-user-auth
# 主分支的代码完全不受影响

# 5. 开发完成,合入主线后清理
git checkout main  # 先切回主 worktree
git pull
git worktree remove worktrees/feature-user-auth
git worktree remove worktrees/hotfix-critical-fix

Worktree + AI 协作场景

# AI 助手通常绑定到特定 worktree。并行开发时:
# - worktree-1 (feature-A): 让 AI 开发模块 A
# - worktree-2 (feature-B): 让另一个 AI 会话开发模块 B
# 两个 AI 互不干扰,各自遵循 AGENTS.md 中的同一套规范

# 注意事项:
# - 同一分支不能同时在两个 worktree 中检出
# - 构建产物(node_modules, build/)在每个 worktree 中独立
# - 如果 AI 生成了通用文件(如 skills/、openspec/),需要 cherry-pick 到其他 worktree

注意事项

注意事项 说明
同一分支只能在一个 worktree 中检出 不能同时在两个目录编辑同一分支
worktrees/ 已 gitignored worktree 目录本身不提交,由每个开发者本地维护
共享 .git 对象 多个 worktree 共享同一 .git 目录,空间占用小
构建产物独立 每个 worktree 的 node_modulesbuild/ 互不影响
变更互不可见 切换 worktree 依赖文件系统,AI 助手需手动告知当前 worktree

CodeBuddy IDE 配置

settings.json 结构

{
  "hooks": { ... },           // 会话钩子(自动触发)
  "rules": { ... },           // 编码规则(alwaysApply)
  "enableAllProjectRules": true,
  "permissions": { ... }      // 命令权限控制
}

Hooks 系统

Hook 触发时机 作用
SessionStart AI 会话启动时 自动注入团队规范上下文
PostToolUse 写入/修改文件后 检测硬编码密钥、console.log 等违规

Hook 脚本位置: .codebuddy/hooks/inject-team-standards.sh

Hook 检查项:

  • 硬编码密钥检测(password=, secret=, api_key=
  • console.log 遗留检测(前端文件)
  • 文件命名规范告警

编码规则(Rules)

项目内置 4 条 always-apply 规则(文件位于 .codebuddy/rules/):

规则文件 覆盖范围
java-coding-style.mdc Java 后端:分层架构、命名、Controller/Service 模板
react-spec.mdc React 前端:组件结构、Hooks、Zustand Store 模板
vue-spec.mdc Vue 前端:<script setup>、Composables、Pinia Store 模板
security-rules.mdc 通用安全:密钥管理、JWT、XSS、SQL 注入、数据脱敏

如何添加自定义规则

# 1. 在 .codebuddy/rules/ 目录创建 .mdc 文件
#    例如: .codebuddy/rules/go-coding-style.mdc

# 2. 在 .codebuddy/settings.json 中注册
#    "go-coding-style": {
#      "path": ".codebuddy/rules/go-coding-style.mdc",
#      "alwaysApply": true
#    }

权限控制

策略 说明
Allow pnpm install, pnpm run, gradle, poetry, make, git, docker
Deny rm -rf, git push --force, git reset --hard

WorkBuddy 记忆系统

三层记忆架构

┌─────────────────────────────────────────┐
│ Layer 1: 项目架构记忆                     │
│ 来源: AGENTS.md + .codebuddy/rules/      │
│ 生命周期: 持久化(随项目演进更新)           │
│ 作用: 让 AI 始终知道项目规范和技术栈         │
├─────────────────────────────────────────┤
│ Layer 2: 会话上下文记忆                   │
│ 来源: 当前会话任务进度                    │
│ 生命周期: 最多保留 5 个会话               │
│ 作用: AI 知道"上次做到哪了"               │
├─────────────────────────────────────────┤
│ Layer 3: 知识库记忆                      │
│ 来源: ADR / 踩坑记录 / 技术债务           │
│ 生命周期: 长期(跨会话持久化)              │
│ 作用: 关键决策不丢失                      │
└─────────────────────────────────────────┘

配置文件位置

.workbuddy/memory/
├── memory.toml       # 三层记忆系统开关和来源配置
├── context.md        # 最近变更上下文(AI 自动维护)
└── knowledge.md      # 架构决策记录 + 踩坑记录 + 技术债务

如何使用记忆系统

# 1. 在 knowledge.md 中记录架构决策(ADR)
## 架构决策记录
### ADR-001: 选用 PostgreSQL 而非 MySQL
- 日期: 2026-08-06
- 状态: 已采纳
- 理由: 更好的 JSON 支持 + 更丰富的索引类型

# 2. 记录踩坑经验(AI 后续会主动规避)
## 踩坑记录
### Node.js 20 与某些 npm 包不兼容
- 解决方案:package.json 中设置 engines.node >= 20.0.0

# 3. 记录技术债务(AI 会提醒你在合适时机清理)
## 技术债务
### 用户模块缺少单元测试(优先级: P1, 计划 v1.2 清理)

Skills 技能系统

什么是 Skill

Skill 是领域知识模板文件(SKILL.md),告诉 AI 在特定场景下该如何工作。每个 Skill 包含:

要素 说明
name Skill 唯一标识
description Skill 功能描述
triggers 触发关键词列表(用户输入匹配时自动激活)
工作流程 分步骤的 SOP(标准操作流程)
规范要求 该领域必须遵守的约束
检查清单 生成代码后的自检项

Skill 文件结构

skills/
├── scaffold-database/
│   └── SKILL.md          # Frontmatter + 工作流 + 规范 + 检查清单
├── scaffold-deploy/
│   └── SKILL.md
└── scaffold-test/
    └── SKILL.md

如何触发 Skill

当用户输入匹配 triggers 关键词时,AI 自动加载对应 Skill:

用户: "帮我创建一个用户表"         → 触发 scaffold-database
用户: "写 Docker 部署文件"         → 触发 scaffold-deploy
用户: "给 UserService 补单元测试"  → 触发 scaffold-test

如何添加新 Skill

# 1. 创建 Skill 目录和文件
mkdir -p skills/scaffold-notification

# 2. 编写 SKILL.md(必须包含 Frontmatter)
cat > skills/scaffold-notification/SKILL.md << 'EOF'
---
name: scaffold-notification
description: 消息通知模块开发规范,支持邮件/短信/站内信/推送。
triggers:
  - "消息通知"
  - "发送邮件"
  - "推送"
  - "站内信"
  - "短信"
---

# Skill: scaffold-notification

## 工作流程
1. 读取 openspec/specs/ 中通知相关需求
2. ...

## 规范要求
- ...

## 检查清单
- [ ] ...
EOF

# 3. 同步到其他 IDE
make sync-skills

# 4. 提交到 Git(跨队友共享)
git add skills/scaffold-notification/
git commit -m "feat(skills): add scaffold-notification skill"

跨 IDE 同步

Skill 主定义在 skills/,通过 make sync-skills 自动同步到:

skills/           # 主定义(手动编辑这里)
├─→ .claude/skills/    # Claude Code 副本
└─→ .codex/skills/     # Codex 副本

编码规范与代码质量

前端规范速查

场景 规范
文件命名 组件用 PascalCase,非组件用 kebab-case
缩进 2 空格
行宽 100 字符
引号 单引号
分号 必须
尾逗号 全部添加
换行符 LF

后端规范速查

场景 Java Python
类名 PascalCase PascalCase
方法/函数 camelCase snake_case
常量 UPPER_SNAKE_CASE UPPER_SNAKE_CASE
缩进 4 空格 4 空格
行宽 120 字符 100 字符

代码检查

# 前端 Lint
cd frontend/react && pnpm run lint

# Java Checkstyle
cd backend/java && ./gradlew checkstyleMain

# Python Ruff
cd backend/python && poetry run ruff check .

# 一键全部检查
make lint

代码格式化

# 前端格式化
cd frontend/react && pnpm run format

# Java 格式化
cd backend/java && ./gradlew spotlessApply

# Python 格式化
cd backend/python && poetry run ruff format .

# 一键全部格式化
make format

Git 提交规范

<type>(<scope>): <subject>
type 用途
feat 新功能
fix Bug 修复
refactor 重构
perf 性能优化
style 格式调整
docs 文档变更
test 测试变更
chore 构建/工具

分支命名: feature/<描述> / fix/<描述> / hotfix/<描述> / release/<版本>


安全规范与扫描

安全自查清单

在任何 MR 合入前,确认以下项:

  • 无硬编码密钥/密码/Token(使用 .env 环境变量)
  • 密码使用 BCrypt / Argon2 加密存储
  • JWT Access Token 有效期 ≤ 2h,Refresh Token 有效期 ≤ 7d
  • Token 使用 HttpOnly Cookie 或内存存储,禁止存 localStorage
  • 所有接口有权限校验(接口级 + 数据级)
  • 用户输入已做参数校验(Controller 层)
  • 响应不返回 password 字段(使用 VO / Schema 控制)
  • 未使用字符串拼接 SQL(使用参数化查询)
  • 未使用 dangerouslySetInnerHTML / v-html(否则必须 DOMPurify)
  • 日志中敏感信息已脱敏

安全扫描命令

make security-scan      # SAST 扫描(Trivy,查高危/严重漏洞)
make sast-scan          # 代码安全审计(Bandit + OWASP Dependency Check)
make dependency-scan    # 依赖漏洞扫描(pnpm audit + Safety)
make compliance-check   # 合规检查(硬编码密钥 + .env 提交 + 敏感日志)

合规检查规则

检查项 正则 阻断级别
硬编码密钥 password\s*=\s*"[^"]+" 阻断
.env 文件提交 git ls-files '*.env'(排除 .env.example) 阻断
敏感日志打印 console.log.*password 阻断

数据脱敏规则

手机号:138****1234
身份证:320***********1234
邮箱:u***@example.com
密码:******
Token:eyJhbG ****... (仅记录前 6 位 + 省略)

环境变量配置

.env.example 模板说明

分类 变量 说明
应用配置 APP_NAME, APP_ENV, APP_DEBUG, APP_PORT 基础配置
数据库 APP_DATABASE_URL, APP_DB_* 数据源
Redis APP_REDIS_URL, APP_REDIS_* 缓存
JWT APP_JWT_SECRET, APP_JWT_ACCESS_EXPIRES, APP_JWT_REFRESH_EXPIRES 认证
API APP_API_BASE_URL, APP_CORS_ORIGINS 接口
Email APP_SMTP_* 邮件
第三方 APP_WECHAT_*, APP_OSS_* 外部服务

命名约定

  • 全部 UPPER_SNAKE_CASE
  • 统一 APP_ 前缀
  • 敏感信息必须走环境变量,禁止硬编码

使用方式

# 1. 创建本地环境变量文件
cp .env.example .env

# 2. 编辑 .env,填入真实值
# ⚠ .env 已在 .gitignore 中,不会被提交

# 3. Java 读取
# application.yml: ${APP_DB_PASSWORD}

# 4. Python 读取
# pydantic-settings: Field(validation_alias="APP_DB_PASSWORD")

# 5. 前端读取(Vite)
# import.meta.env.VITE_API_BASE_URL

数据库操作流程

新增数据表

# 1. 在 openspec/specs/ 相关 capability 中补充数据模型需求
# 2. AI 生成 Migration(或手动创建)
#    命名: V{序号}__{描述}.sql

# 3. 运行迁移
make db-migrate

# 4. AI 自动生成对应的实体代码
#    Java:   Entity + Mapper (MyBatis-Plus)
#    Python: Model (SQLAlchemy)

修改现有表

# 1. 在 openspec/specs/ 相关 capability 中修改数据模型需求
# 2. 创建新的 Migration 文件
#    ⚠ 禁止修改已执行的 Migration 文件
# 3. 运行迁移
make db-migrate

# 4. 同步更新对应的 Entity / Model

数据可视化

# 打开 Prisma Studio(Python 项目)
make db-studio

规范要求

  • 表名:snake_case 复数(user_orders
  • 列名:snake_case(created_at
  • 必备字段:idcreated_atupdated_at
  • 软删除:按需添加 deleted_at
  • 所有字段必须有数据库 COMMENT
  • Migration 使用 Flyway 命名:V{序号}__{描述}.sql

完整开发流程

Step-by-step 端到端流程

1. 需求阶段
   ├── /opsx:propose "功能" → 生成 proposal.md + specs + design.md + tasks.md
   └── 确认提案内容(为什么做、做什么、验收标准)

2. 设计阶段
   ├── 在提案 specs/ 中补充需求场景与 API 契约
   └── 在 design.md 中确定技术方案与数据模型

3. 开发阶段
   ├── 创建 worktree:git worktree add worktrees/feature-xxx -b feature/xxx
   ├── /opsx:apply:AI 按 tasks.md 逐项实施(读取 openspec/ → 遵循 rules/ → 匹配 skills/)
   ├── 本地运行:make dev
   └── 本地测试:make test

4. 质量阶段
   ├── make lint             # 代码检查
   ├── make format           # 代码格式化
   ├── make security-scan    # 安全扫描
   ├── make compliance-check # 合规检查
   └── make test-coverage    # 覆盖率确认 ≥ 80%

5. 提交阶段
   ├── git add + git commit(遵循 <type>(<scope>): <subject> 格式)
   └── git push → 触发 CI 流水线

6. 合入阶段
   ├── MR Review → CI 自动运行 lint/test/security/compliance
   ├── 全部通过后合入 → 自动构建 Docker 镜像
   └── 打 tag 触发生产部署(手动确认)

7. 清理阶段
   ├── git worktree remove worktrees/feature-xxx
   └── /opsx:archive:归档变更,合并进 openspec/specs/ 主规范

AI 辅助开发的标准对话模式

用户: "帮我实现用户注册功能"
AI:
  1. /opsx:explore → 明确方案
  2. /opsx:propose "用户注册功能" → 生成变更提案
  3. 读取 openspec/specs/auth/spec.md → 确认需求与 API 契约
  4. 加载 .codebuddy/rules/ → 遵循对应技术栈规范
  5. 生成 Controller + Service + DTO + VO(Java)
     (或 Route + Service + Schema + Model(Python))
  6. 检查安全规范(密码加密、JWT、参数校验)
  7. 实现完成后 /opsx:archive 归档并同步主规范

多 IDE 协作

支持矩阵

IDE / 工具 配置文件 Skills 副本 说明
CodeBuddy .codebuddy/ 直接读 skills/ 完整支持 rules + hooks
Claude Code .claude/ .claude/skills/ 通过 make sync-skills 同步
Codex .codex/ .codex/skills/ 通过 make sync-skills 同步
WorkBuddy .workbuddy/ 直接读 skills/ 记忆系统 + MCP 连接器
Cursor / Copilot / Windsurf 根目录文件 通过 AGENTS.md 上下文由 AGENTS.md 提供

多人协作场景

# 场景:A 用 CodeBuddy,B 用 Claude Code,共享同一仓库

# 1. 两人共享同一套规范
#    - AGENTS.md:两人各自的 AI 启动时都读取
#    - openspec/:两人基于同一套规范(specs + changes)开发
#    - skills/:两人共用同一套 Skill 模板

# 2. A 新增了一个 Skill
#    A: 编辑 skills/scaffold-notification/SKILL.md
#    A: make sync-skills
#    A: git push
#    B: git pull(自动获得新 Skill)

# 3. B 更新了编码规则
#    B: 编辑 .codebuddy/rules/go-coding-style.mdc
#    B: git push
#    A: git pull(AI 下次启动自动生效)

项目结构

project-root/
├── AGENTS.md                       # 单文件权威上下文入口(AI 必读)
├── openspec/                       # OpenSpec 规格驱动工作区
│   ├── specs/                      # 主规范(每个 capability 一个目录/spec.md)
│   │   ├── project-overview/       # 项目总览
│   │   ├── auth/                   # 认证模块
│   │   └── users/                  # 用户管理
│   ├── changes/                    # 变更提案(propose → apply → archive)
│   └── config.yaml                 # OpenSpec 配置
├── skills/                         # 跨 IDE Skill 定义(手动编辑这里)
│   ├── scaffold-database/SKILL.md  # 数据库模块 Skill
│   ├── scaffold-deploy/SKILL.md    # 部署配置 Skill
│   └── scaffold-test/SKILL.md      # 测试代码 Skill
├── .codebuddy/                     # CodeBuddy IDE 专有配置
│   ├── settings.json               # Hooks + Rules 引用 + 权限控制
│   ├── rules/                      # 团队规则文件 (.mdc)
│   │   ├── java-coding-style.mdc
│   │   ├── react-spec.mdc
│   │   ├── vue-spec.mdc
│   │   └── security-rules.mdc
│   └── hooks/                      # Hook 触发脚本
│       └── inject-team-standards.sh
├── .workbuddy/                     # WorkBuddy 记忆系统
│   └── memory/                     # 三层记忆配置(需提交 Git)
│       ├── memory.toml             # 记忆系统配置
│       ├── context.md              # 会话上下文
│       └── knowledge.md            # 知识库(ADR / 踩坑 / 技术债务)
├── .claude/skills/                 # Claude Code Skill 副本(同步自 skills/)
├── .codex/skills/                  # Codex Skill 副本(同步自 skills/)
├── frontend/
│   ├── react/                      # React 18+ / TypeScript / Vite / Ant Design
│   │   ├── package.json
│   │   └── src/
│   │       ├── components/         # 通用组件
│   │       ├── pages/              # 页面组件
│   │       ├── hooks/              # 自定义 Hooks
│   │       ├── stores/             # Zustand Store
│   │       ├── services/           # API 请求层
│   │       ├── utils/              # 工具函数
│   │       ├── types/              # TypeScript 类型
│   │       └── styles/             # 全局样式
│   └── vue/                        # Vue 3.4+ / TypeScript / Vite / Element Plus
│       ├── package.json
│       └── src/
│           ├── components/
│           ├── pages/
│           ├── composables/        # Vue Composables
│           ├── stores/             # Pinia Store
│           ├── services/
│           ├── utils/
│           ├── types/
│           └── styles/
├── backend/
│   ├── java/                       # Spring Boot 3.x / Java 17 / Gradle / MyBatis-Plus
│   │   ├── build.gradle
│   │   └── src/main/
│   │       ├── controller/         # 控制器(参数校验 + 调用 Service)
│   │       ├── service/            # 业务逻辑 + 事务管理
│   │       ├── repository/         # MyBatis-Plus Mapper
│   │       ├── entity/             # 数据实体 (PO)
│   │       ├── dto/                # DTO / VO
│   │       └── config/             # Security / CORS / Swagger
│   └── python/                     # FastAPI / Python 3.12 / Poetry / SQLAlchemy
│       ├── pyproject.toml
│       └── app/
│           ├── api/                # 路由控制层
│           ├── services/           # 业务逻辑层
│           ├── models/             # SQLAlchemy Model
│           ├── schemas/            # Pydantic Schema
│           └── core/               # Security / CORS / OpenAPI
├── worktrees/                      # Git Worktree 目录 (gitignored)
├── .gitlab-ci.yml                  # CI/CD 6 阶段流水线
├── Makefile                        # 自动化命令入口(dev/test/security/deploy)
├── .env.example                    # 环境变量模板(不提交 .env)
├── .eslintrc.json                  # ESLint 共享配置(TypeScript 严格模式)
├── .prettierrc                     # Prettier 共享配置(多语言覆盖)
├── .mcp.json                       # MCP 连接器配置(context7 / playwright)
├── .gitignore                      # 覆盖 Node / Java / Python / Docker / IDE
└── WorkBuddy 生产级项目工程标准化规范.md   # 原始规范文档

技术栈

层级 技术 说明
前端框架 React 18+ / Vue 3.4+ SPA 应用
语言 TypeScript 5.x 类型安全
构建 Vite 5+ HMR 极速构建
UI 库 Ant Design 5.x / Element Plus 企业级组件
状态管理 Zustand / Pinia 轻量级
后端框架 Spring Boot 3.x (Java 17) / FastAPI (Python 3.12) REST API
ORM MyBatis-Plus / SQLAlchemy 2.0 数据访问
数据库 PostgreSQL 16 主存储
缓存 Redis 7 缓存 + 分布式锁
消息队列 Kafka / RabbitMQ 异步解耦
对象存储 MinIO / S3 文件存储
注册中心 Nacos 服务发现 + 配置
构建工具 pnpm / Gradle / Poetry 包管理

设计理念

SDD — 规格驱动开发

规格(Spec)是代码的权威定义,代码是实现。

openspec/specs/ 主规范 → 需求(SHALL/WHEN/THEN)→ 代码
openspec/changes/      → 变更提案 → propose → apply → archive

铁律:变更 API 必须先走 OpenSpec 变更提案并同步 openspec/specs/ 主规范,再修改代码。

AI Agent 原生协作

  • AGENTS.md 是单文件上下文入口,AI 启动时优先读取
  • skills/ 是领域知识模板,按任务类型自动调度
  • .codebuddy/.workbuddy/.claude/.codex/ 各 IDE 平等支持
  • AI 生成代码必须遵循 AGENTS.md 和 .codebuddy/rules/ 中定义的规范
  • Hook 机制在写入文件后自动进行合规检查

安全性内置

  • 规范层:.codebuddy/rules/security-rules.mdc 强制安全编码
  • 检查层:Hook 脚本实时检测硬编码密钥
  • 扫描层:make security-scan + CI 阶段自动 SAST
  • 合规层:make compliance-check + CI 阶段阻断违规

相关文档

文档 说明
AGENTS.md 权威上下文入口(AI 必读,含全部编码规范速查)
openspec/specs/ OpenSpec 主规范(项目总览 / 认证 / 用户管理)
openspec/changes/ OpenSpec 变更提案与归档
openspec/config.yaml OpenSpec 配置
.gitlab-ci.yml CI/CD 流水线定义(6 阶段自动门禁)
Makefile 自动化命令入口(24 个 target)

About

SDD(OpenSpec)+ AI Agent 原生协作的开发工程标准框架。 适用于 React/Vue + Spring Boot/FastAPI 的技术栈组合。

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages