dev-design · git:20260923.2013b81 · 2026-09-23 · sha256 5759564c44d620a2
dev-design git:20260923.2013b81A
Immutable. This exact content never changes and is served at /api/v1/blob/5759564c44d620a2.
---
name: dev-design
description: "毕业设计(软件开发)系统设计。基于需求规格产出架构/数据库/API设计。Use when user says 系统设计/毕设设计."
argument-hint: [project-idea]
allowed-tools: Bash(*), Read, Write, Edit, Grep, Glob
---
# 毕业设计 · 系统设计
基于需求规格进行系统设计:**$ARGUMENTS**
## 输入
1. **REQUIREMENTS.md**(必须存在)— 上一步的需求规格。**先完整读它。**
2. **AGENTS.md** — **project_type(项目类型)**+ 技术栈参数在"说明/参数"段。
## ⛔ 按项目类型 + 用户技术栈设计(不要写死)
先读 AGENTS.md 的 `project_type` 和技术栈参数,按用户实际选择设计:
- **fullstack**:前端(tech_frontend) + 后端(tech_backend) + 数据库(tech_db)。产 DESIGN.md + `schema.sql`。
- **frontend**:纯前端(tech_frontend),无后端/数据库。**不产 schema.sql**,DESIGN.md 的"数据库设计"小节写"本项目为纯前端,无数据库(如需本地存储用 localStorage)"。
- **cli / script**:命令行/脚本(tech_lang)。**不产 schema.sql**,"数据库设计"小节写"无数据库"或说明数据存储方式(文件/JSON 等)。"API 设计"小节改为"命令/参数设计"或"函数/模块接口"。
## ⛔ 恢复场景
若已有 `DESIGN.md`,在其基础上补全,不要推倒重写。
## 任务
产出 `DESIGN.md`(系统设计文档)+ `schema.sql`(SQLite 建表语句)。
- 数据库设计要覆盖需求里的所有实体,字段类型用 SQLite 支持的(INTEGER/TEXT/REAL/BLOB)。
- API 设计要覆盖需求"接口清单"里的每一条,用 RESTful 风格。
- 目录结构要明确前后端怎么组织(见下方约定)。
## 产出(固定小节,下游 dev-code 会读)
**DESIGN.md** 必须含以下 `##` 小节(标题一字不差):
```markdown
# 系统设计文档
## 技术架构
(技术栈选型:React + FastAPI + SQLite,及各自职责;前后端如何通信——REST JSON)
## 数据库设计
(每张表:表名、字段、类型、约束、表间关系。与 schema.sql 一致)
## API 设计
(每个接口:方法 + 路径 + 入参 + 返回示例。覆盖 REQUIREMENTS 的接口清单)
## 模块划分
(前端组件/页面划分;后端路由/模型/服务划分)
## 目录结构
(明确 code/ 下的目录树,遵循下方约定)
```
**目录结构约定**(dev-code 会照此实现,务必写清):
```
code/
frontend/ # React 前端
src/
package.json
backend/ # FastAPI 后端
main.py # 应用入口(必须)
models.py # 数据模型
database.py # SQLite 连接
requirements.txt
README.md # 目录说明
```
**schema.sql**:可直接被 SQLite 执行的完整建表 SQL(CREATE TABLE ...)。
## 完成铁律
- `DESIGN.md` ≥ 2000 字节。核心小节(技术架构/模块划分/目录结构)必备;数据库/API 设计小节全栈与前端必备,CLI/脚本可省。
- **仅 fullstack** 类型:`schema.sql` 必须存在且含至少一条 `CREATE TABLE`(前端/CLI/脚本不需要)。
- API/接口 设计要覆盖 REQUIREMENTS 的接口清单。
⛔ **结束前必跑产出验证**(按类型自适应):
```bash
echo "=== 系统设计产出验证 ==="
PASS=true
PTYPE=$(grep -oE "project_type[:=] *(fullstack|frontend|cli|script)" AGENTS.md 2>/dev/null | grep -oE "(fullstack|frontend|cli|script)" | head -1)
PTYPE=${PTYPE:-fullstack}
echo "项目类型: $PTYPE"
[ -f DESIGN.md ] && SZ=$(wc -c < DESIGN.md) || SZ=0
if [ "$SZ" -ge 2000 ]; then echo "OK DESIGN.md ($SZ bytes)"; else echo "FAIL DESIGN.md 过小 ($SZ)"; PASS=false; fi
# 所有类型都要的核心小节
for sec in "## 技术架构" "## 模块划分" "## 目录结构"; do
grep -qF "$sec" DESIGN.md 2>/dev/null && echo "OK 小节: $sec" || { echo "FAIL 缺小节: $sec"; PASS=false; }
done
# 数据库设计/API 设计: 全栈和前端(可能有API对接)要, CLI/脚本可省(或写"无")
if [ "$PTYPE" = "fullstack" ] || [ "$PTYPE" = "frontend" ]; then
for sec in "## 数据库设计" "## API 设计"; do
grep -qF "$sec" DESIGN.md 2>/dev/null && echo "OK 小节: $sec" || { echo "FAIL 缺小节: $sec"; PASS=false; }
done
else
echo "OK $PTYPE 类型, 数据库/API 设计小节可省"
fi
if [ "$PTYPE" = "fullstack" ]; then
if [ -f schema.sql ] && grep -qi "CREATE TABLE" schema.sql; then echo "OK schema.sql"; else echo "FAIL 全栈项目 schema.sql 缺失或无建表"; PASS=false; fi
else
echo "OK 非全栈, 跳过 schema.sql 检查"
fi
[ "$PASS" != true ] && echo "产出验证失败 — 必须补全后重跑, 不要结束本步骤"
```
验证失败就继续补全,不要 end_turn。
## STEP_MANIFEST 产出声明
本步骤完成后,必须调用 `engine.step_manifest.write_manifest`(或经 bridge/common 等价入口)在工作区根目录写入 `STEP_MANIFEST.json`,至少包含:stepName / backend(含版本)/ config / inputFiles / outputFiles(含 SHA-256)/ commands / dependencies。质量门禁 `step_manifest` 将校验其存在性与完整性;缺失或无效将导致本步骤无法通过(fail)。
建议额外记录:输入材料来源哈希、模板版本。