PRD → 技术设计文档

SKILL开发
开发 未标注权限 许可证不明确
安装这个技能

从 PRD 文档自动生成完整技术设计文档。解析功能需求,输出模块架构、API 设计、数据库设计、业务流程图、OpenAPI YAML 和独立 DDL SQL。严格遵守 rest-api-design、database-design、high-quality-engineering-coding 三大规范。

一句话选型结论

按资料字段整理

PRD → 技术设计文档是开发类的 Agent Skill,安装方式未标注,权限级别未标注,许可证不明确,有可直接复制的安装命令。技能本质是给模型读的说明书,效果取决于模型与客户端;装完先用一个小任务验证,再放进正式流程。

分类开发 安装方式未标注 权限级别未标注权限 许可证许可证不明确
累计安装 未标注 本周 未标注
GitHub 星标 未标注 仓库 未标注
下载量 未标注 技能市场下载数
权限级别 未标注权限 安装前请确认风险范围
许可证 许可证不明确 未说明

安装

未标注
在支持 Skills 的客户端里执行,装完问一句「你有哪些技能」验证
skillhub install user_a4c2f3d2/prd2plan
  1. 1
    确认客户端支持

    确认你的客户端支持 Skills(Claude、Codex、Cursor 等),并升级到较新的版本。

  2. 2
    拿到技能文件

    执行上面的命令安装;也可以把仓库里的 SKILL.md 手动放进客户端的 skills 目录。

  3. 3
    刷新技能列表

    重新打开客户端,或刷新技能列表,让新放进来的技能被加载。

  4. 4
    验证是否生效

    问一句「你有哪些技能」,确认列表里出现它,再拿一个小任务试跑。

技能档案

开发
字段来自技能仓库与公开索引,中文说明由本站标注
作者 / 维护方user_a4c2f3d2仓库 未标注 · 版本 未标注
宿主客户端未标注技能可被这些客户端加载
安装方式未标注安装包 community
权限级别未标注权限安装前请确认风险范围
许可证未说明许可证不明确,商用前请自行确认条款
仓库可用性available技能仓库当前是否可访问
最近核验未标注上游最后核验时间 · 数据更新 1791618546
正文体量36.9 KBSKILL.md 原文大小,越大说明说明书写得越细

典型使用场景

3 类
按分类整理的常见用法,具体以 SKILL.md 为准
写代码与改 bug

按需求补代码、定位并修掉报错。

读仓库与生成改动

让模型读懂项目结构,再给出可落地的改动。

跑测试与排查故障

按现象排查问题,补测试用例并复跑。

选择建议

装之前先看这几条
按条目字段给出的判断,不替你决定用不用

值得选的地方

  • 有可直接复制的安装命令,不用自己翻文档找入口。

先想清楚的地方

  • 没有标注权限级别,实际能做什么要装好后确认。
  • 许可证不明确,商用或二次分发前先到仓库确认条款。
  • 没有做站内核验,内容以作者仓库为准。
  • 技能只是说明书,实际效果取决于模型与客户端,装完先用小任务试一遍。

更适合

  • 需要在开发场景里给模型补一套做法的人。
  • 愿意先读一遍 SKILL.md、确认它会让模型做什么的人。

不太适合

  • 对许可证要求很严、必须明确可商用的人。
  • 只想装完就自动变强、不打算看说明书的人。

同类对比

6 个同类
同分类里挑最接近的几条,字段以各自详情页为准
技能权限级别安装方式累计安装宿主客户端安装命令
PRD → 技术设计文档当前 未标注权限 未标注 未标注 未标注 有
技能审查员 浏览器控制 ClawHub 市场 877.9 万 OpenClaw 有
Vercel React 最佳实践 浏览器控制 GitHub 仓库 849.1 万 Codex、Claude、Cursor 有
GitHub 代码协作 联网访问 ClawHub 市场 763.3 万 OpenClaw 有
网页设计指南 联网访问 GitHub 仓库 668.6 万 Codex、Claude、Cursor 有
本体论 只读 ClawHub 市场 663.7 万 OpenClaw 有

SKILL.md 全文

36.9 KB
模型实际读到的说明书原文,来自技能仓库

PRD → 技术设计文档(→ 代码骨架)

规范加载指引 【重要 · 适用时加载】

本技能依赖两类规范,均按需加载、禁止一次性全部加载:

① 通用设计规范(独立技能)——design-api、design-db、design-code 是与本技能并列注册的独立技能,可单独用于 API 评审、数据库评审、代码审查等场景。在 PRD2PLAN 流程中,进入对应阶段时调用 skill 工具加载(使用准确技能名):

技能名 内容 何时加载
design-api REST API 设计规范 进入 Phase 7(API 设计)前
design-db 数据库表结构设计规范 进入 Phase 8(数据库设计)前
design-code 高质量工程编码规范 进入 Phase 9(架构设计)前,以及生成代码时

② 流程规则(本技能私有 rules/ 目录)——详细流程模板以普通 Markdown 存放在 <base>/rules/*.md(不是独立技能,不会出现在技能目录里),用 read 工具按需读取:

规则文件 内容 何时读取
rules/scenario-new.md 🟢 全新功能:文档模板+审计+YAML+DDL Phase 4 判定 🟢 后
rules/scenario-modify.md 🟡 增量改造:精简模板+增量 YAML+create/alter SQL Phase 4 判定 🟡 后
rules/scenario-crosscut.md 🔵 横切机制:机制模板+审计+ALTER SQL Phase 4 判定 🔵 后
rules/scenario-refactor.md ⚪ 重构优化:重构模板+审计 Phase 4 判定 ⚪ 后

> 加载/读取某个规范后,其内容即成为当前阶段的硬约束;完成对应阶段后不必反复重读。rules/ 路径以本技能加载时渲染的 Base directory 为基准(rules/scenario-new.md 等相对路径)。

核心铁律

> 禁止猜测。 整个过程中,只要遇到 PRD 中未明确的信息——业务规则、数据约束、用户交互细节、边界条件、非功能需求——立刻停止,用结构化方式向用户提问。没有例外。
>
> 先识别,后扫描。 收到用户输入后,必须先分析问题类型、输入格式和场景关键词,然后才能启动项目扫描。禁止收到输入后不加分析直接扫描代码库。

总体流程

用户输入
       │
       ▼
Phase 1: 问题识别 ─────── 【新增】分析输入类型、场景预判、格式识别
       │                  (不扫描代码,纯文字分析)
       ▼
Phase 2: 解析需求 ─────── 提取需求全貌(含实体列表)
       │
       ▼
Phase 3: 代码库感知 ───── 基于 Phase 2 实体列表,定向扫描项目
       │                  (先知道要找什么,再扫描)
       ▼
Phase 4: 场景分类 ─────── 比对 Phase 2 实体列表 vs Phase 3 现有实体 → 判定场景
       │
       ▼
Phase 5: 澄清歧义 ─────── 【STOP】逐一确认 + 场景特定追问
       │
       ▼
Phase 6: 模块设计 ─────── 领域划分 + 模块职责 + 状态机
       │
       ▼
Phase 7: API 设计 ─────── 遵循 design-api(场景自适应)
       │
       ▼
Phase 8: 数据库设计 ───── 遵循 design-db(场景自适应)
       │
       ▼
Phase 9: 架构设计 ─────── 遵循 design-code
       │
       ▼
  ┌─────────────────────────────────────┐
  │ Phase 10: 打包设计资产              │
  │ 将 {感知卡片, 实体列表, API清单,     │
  │  DDL, 状态机, 时序图, 澄清记录}      │
  │ 作为上下文传递给场景规则文件       │
  └─────────────────────────────────────┘
       │
       ▼
  ┌─────────────────────────────────────┐
  │ 根据 Phase 4 场景,读取规则文件     │
  │ 🟢 → rules/scenario-new.md    │
  │ 🟡 → rules/scenario-modify.md │
  │ 🔵 → rules/scenario-crosscut.md│
  │ ⚪ → rules/scenario-refactor.md│
  └─────────────────────────────────────┘
       │
       ▼
规则文件接管后续阶段:
  输出设计文档(按场景模板,引用 Phase 10 传递的资产)
  交叉验证与审计
  生成 OpenAPI YAML(🟢🟡)
  拆分 DDL SQL 文件(🟢🟡🔵)
       │
       ▼
  ┌─────────────────────────────────────┐
  │ Phase 11: 设计→代码生成(可选)     │
  │ 子交付后,若用户需要代码骨架,      │
  │ 调用 skill 工具加载 design-code:   │
  │   CG-1~CG-8:以设计资产+设计文档为  │
  │   唯一依据,生成 Handler/Service/   │
  │   Repository/Entity/DTO/枚举骨架,  │
  │   并执行四方对齐审计签章            │
  └─────────────────────────────────────┘

Phase 1:问题识别 【强制 · 第一道工序】

目的:收到用户输入后,先分析、后行动。不要立刻扫描代码库,先理解用户给的是什么、想做什么。

执行约束:此阶段禁止调用任何文件搜索/读取工具,只对用户输入的文本做纯逻辑分析。

1.1 判断输入形态

输入形态 识别特征 后续动作
PRD 文件(PDF/Word/MD) 附件有 .pdf / .docx / .md / .txt 文件 进入 Phase 2 解析,告知用户"正在解析文档"
口头/文字描述 无附件,纯文字描述需求 先确认:"这是一个文字描述的需求,我将按 PRD 同等流程处理。如有正式 PRD 文档,请一并附上。" 确认后进入 Phase 2
一句需求/随口问 仅 1~2 句话,如"给任务加个审批" 追问上下文:"了解您的意图。请问有更详细的需求文档吗?以及需要在哪个已有模块上修改?" 等回复后进入 Phase 2

1.2 场景关键词预判

在不扫描代码的前提下,从用户描述中提取关键词,给出初步场景判断(Phase 4 会结合代码库扫描结果最终确认):

关键词 预判场景 说明
"新增/新建/搭建 xx 模块/系统" 🟢 全新功能 可能所有实体都是新的
"xx 流程增加/加一个 xx"、"给 xx 加上 xx" 🟡 增量改造 暗示在已有模块上修改
"全部/所有模块统一加 xx"、"统一/批量 xx" 🔵 横切机制 跨模块变更
"拆分/重构/优化/整理 xx" ⚪ 重构优化 架构调整

输出:一句简短摘要,例如:

【问题识别】
- 输入形态:PRD 文件(PDF)
- 预判场景:🟡 增量改造(关键词:"给任务流程增加审批")
- 下一步:Phase 2 解析 PRD

然后直接进入 Phase 2。不要在此阶段扫描项目。


Phase 2:解析需求

2.1 识别文件格式

  • *.pdf → 用 pdf skill 提取文本
  • *.docx → 用 docx skill 提取文本
  • *.md / *.txt → 直接读取
  • 口头描述 → 直接使用用户的文字描述作为输入
  • 其他格式 → 提问用户能否提供以上格式之一

2.2 提取结构化信息

从输入中逐项提取,填入以下清单。提取不到就标 [未提及],不编造:

【需求提取清单】

■ 项目背景:[一句话]
■ 核心目标:[解决什么问题,KPI 是什么]
■ 目标用户/角色:[谁在用,权限有什么不同]
■ 功能列表:
  1. [功能名] — [一句话描述] — 优先级 P0/P1/P2
  2. ...
■ 核心业务流程:[用文字描述主流程,标注分支]
■ 数据实体:[出现过的名词:用户、订单、项目...]  ← Phase 4 用此列表判定场景
■ 实体关系:[谁包含谁、谁引用谁]
■ 业务规则:[约束、校验条件、状态机]
■ 非功能需求:[并发量、数据量、响应时间、安全要求]
■ 外部依赖:[需要对接的系统/服务]

2.3 输出确认

将提取的清单展示给用户,等待确认后再进入 Phase 3。

> 注意:Phase 2 确认后,才开始 Phase 3 代码扫描。因为此时你已经知道"要找什么实体",扫描可以更有针对性。


Phase 3:代码库感知 【强制】

目的:基于 Phase 2 提取的实体列表,定向扫描项目结构和现有实体,避免盲目全量扫描。

3.1 自动扫描项目结构

使用代码搜索工具扫描以下信息,填写《项目感知卡片》:

【项目感知卡片】

■ 技术栈
  - 语言/框架:[如 Spring Boot 2.x / Django / Express / Gin]
  - ORM:[如 MyBatis-Plus / JPA / GORM / Prisma / SQLAlchemy]
  - 数据库:[MySQL / PostgreSQL / SQL Server / SQLite]
  - 缓存:[Redis / Memcached / 无]
  - 其他中间件:[对象存储 / 消息队列 / ...]

■ 代码组织
  - 根包/根模块路径:[如 com.example.xxx / app / src/]
  - Controller/Handler 所在目录:[实际路径]
  - Service 所在目录:[实际路径]
  - Repository/Mapper 所在目录:[实际路径]
  - Entity/DTO/VO 所在目录:[实际路径]
  - 自动生成代码与手写代码的隔离方式:[如有]

■ 现有业务模块清单
  | 模块名 | 所在位置 | 功能简述 | 是否新模块的依赖 |
  |--------|----------|----------|-----------------|
  | ... | ... | ... | ... |

■ 现有 API 惯用模式
  - URL 前缀:[如 /api/v1/]
  - 分页参数名:[page/pageSize 或 offset/limit]
  - 统一响应格式:[提取实际响应结构:顶层字段命名、list 包裹方式等]
  - 认证方式:[Header Token / Cookie Session / OAuth2]

■ 数据库惯用模式
  - 表命名风格:[小写下划线 / 驼峰]
  - 主键策略:[AUTO_INCREMENT / UUID / 雪花ID]
  - 审计字段约定:[如 created_at+updated_at / create_time+modify_time]
  - 软删除标记:[is_deleted TINYINT / deleted_at DATETIME / 不使用]
  - 金额类型:[DECIMAL(18,2) / BIGINT 分]

■ 现有实体全景(优先扫描 Phase 2 中提到的实体名)
  | 实体/表名 | 所在位置 | 备注 |
  |-----------|---------|------|

■ 设计约束(从现有代码中提取)
  - 禁止使用的类型/模式:[如 ENUM / FLOAT]
  - 强制使用的父类/接口:[如有,列出类名和路径]
  - 代码风格要求:[方法行数限制 / 命名约定等]

3.2 扫描方法(两步走)

第一步:定向扫描(优先)。根据 Phase 2 提取的实体名称,在项目中搜索同名或相似的表/Service/Controller:
- 搜索实体/表名 → 确认是否已有
- 搜索对应的 Service → 确认是否已有业务逻辑
- 搜索对应的 Controller → 确认是否已有 API

第二步:全貌扫描(补全)。完成定向扫描后,再补全技术栈和惯用模式信息:

信息 扫描方法
项目结构 列出源代码目录的完整树
技术栈 读取构建文件:pom.xml / build.gradle / go.mod / package.json / requirements.txt
配置 读取配置文件:application.yml / application.properties / settings.py
现有 Entity 在实体/模型目录下搜索源码文件(按文件名模式过滤)
现有 Service 在服务目录下搜索源码文件(排除自动生成的)
现有 Handler 在控制器目录下搜索源码文件
现有 API 模式 随机抽取 2-3 个 Handler/Controller 源码,确认 URL 前缀、响应包装格式
数据库惯用模式 搜索 CREATE TABLE 样例或实体注解/装饰器模式
现有表名清单 从数据库迁移脚本目录或 Entity 注解中提取完整表名列表

3.3 设计约束输出

扫描完成后,明确以下约束并在后续设计中遵守:

  1. 包/模块路径约束:新模块放在哪里?命名如何约定?
  2. 继承约束:Service 是否有基类需要继承?有哪些公共方法可用?
  3. URL 约束:所有 API URL 必须以项目的统一前缀开头
  4. 响应格式约束:统一用项目现有的响应包装结构
  5. 审计字段约束:每张表必须包含项目的标准审计字段
  6. 命名约束:表名、列名、索引名遵守项目现有约定

输出:将《项目感知卡片》作为设计文档第 0 章写入。


Phase 4:场景分类与自适应执行计划 【强制】

目的:不是所有 PRD 都是"从零建"。必须在设计前判断这是哪种类型的需求,并自动调整后续执行强度。

4.1 四类场景定义

场景 判定标准 典型 PRD 关键词
🟢 全新功能 PRD 中所有实体在代码库中均无对应表/Service "新增 xx 模块"、"建立 xx 系统"
🟡 增量改造 PRD 主要修改 1-2 个已有表/Service,新增少量字段或状态 "xx 流程增加审批"、"给 xx 加一个 xx 字段"
🔵 横切机制 PRD 给多个已有模块统一加某个能力(审计、软删、多租户…) "全部模块加操作日志"、"统一加权限校验"
⚪ 重构优化 PRD 不改外部行为,只改内部架构 "拆分大 Service"、"统一异常处理"

4.2 自动判定流程

Phase 2 提取的实体列表 ─┐
                         ├─ 比对 Phase 3 扫描的现有实体全景
Phase 3 现有实体全景  ───┘
       │
       ▼
  ┌─ 全部不一致 ──────────────→ 🟢 全新功能
  ├─ 1~2 张表有变化 ─────────→ 🟡 增量改造
  ├─ 涉及 ≥3 张表且无新增表 ──→ 🔵 横切机制
  └─ 无表/API 变更需求 ──────→ ⚪ 重构优化

判定后必须输出结论给用户确认(同时对比 Phase 1 的预判):

## 场景判定

| 项目 | 内容 |
|------|------|
| Phase 1 预判 | 🟡 增量改造 |
| 实际判定结果 | 🟡 增量改造 ✅ 一致 |
| 涉及已有实体 | `tasks`(增加 status, approver_id 字段) |
| 涉及新实体 | `approval_records`(1 张新表) |
| 受影响 API | POST /tasks/{id}/submit(新增)、GET /tasks/{id}/approvals(新增) |
| 不受影响 API | GET/PUT/DELETE /tasks 系列保持不变 |

→ 将采用【精简模式】执行后续 Phase。
→ 确认?(Y/N)

4.3 各场景执行清单

Phase 🟢 全新功能 🟡 增量改造 🔵 横切机制 ⚪ 重构优化
Phase 5 澄清 全量 11 项 侧重状态机 + 并发 + 历史数据 侧重数据量 + 软删 + 审计 侧重技术决策
Phase 6 模块 全量 只设计变更模块 设计切面/拦截器 画出新架构 vs 旧架构对比
Phase 7 API 全量接口清单 只列新增/变更接口 无(机制不暴露 API) 无
Phase 8 DB 全量表 DDL CREATE TABLE(新表)+ ALTER TABLE(旧表) ALTER TABLE(加列)为主 无
Phase 9 架构 全量分层 只设计变更调用链 AOP/拦截器/事件设计 重画架构对比图
→ 规则文件 rules/scenario-new.md rules/scenario-modify.md rules/scenario-crosscut.md rules/scenario-refactor.md

4.4 文件命名规则(场景规则文件执行)

场景 文件名
🟢 全新功能 {feature-name}需求设计.md
🟡 增量改造 {feature-name}改造设计.md
🔵 横切机制 {feature-name}机制设计.md
⚪ 重构优化 {feature-name}重构设计.md

Phase 5:澄清歧义 【强制 STOP】

5.1 何时必须提问

下表每项检查 PRD 是否明确,不明确则提问:

检查项 具体问题
角色权限 每种角色的可见/可操作范围?权限模型(RBAC / ABAC)?
状态机 每种状态的合法变迁路径?触发条件?
唯一约束 什么字段组合唯一?重复时如何处理?
级联操作 删除父实体时子实体怎么办(级联/阻止/置空)?
并发冲突 多人同时编辑同一数据怎么处理(乐观锁/先胜/合并)?
数据量级 单表预估行数?增长速率?是否需分表?
历史数据 删除数据是物理删还是软删?修改需要留历史吗?
文件处理 上传文件类型/大小上限?存储方式(本地/OSS)?
通知机制 哪些操作需要通知?通知形式(站内信/邮件/推送)?
幂等要求 哪些接口需要幂等?幂等键是什么?
排序分页 列表默认排序是什么?分页大小?

5.1.1 按场景追加额外问题

根据 Phase 4 的场景分类,在通用 11 项之上追加:

🟡 增量改造追加:

检查项 具体问题
旧数据处理 新增字段/状态对存量数据怎么处理?默认值是什么?需要刷数据脚本吗?
兼容性 旧 API/旧前端调用方要不要兼容?过渡期多久?
迁移策略 一次性上线还是灰度?新旧逻辑并存时以哪个为准?
状态降级 新流程失败时能不能回退到旧流程?

🔵 横切机制追加:

检查项 具体问题
生效范围 所有模块全量生效,还是可以按模块开关/跳过?
机制侵入性 是通过 AOP/拦截器无侵入实现,还是需要各模块改代码?
性能影响 新增 AOP/事件后,核心接口性能是否会受影响?需不需要异步?
已有数据 存量数据的默认行为(如:旧日志要不要补录)?

⚪ 重构优化追加:

检查项 具体问题
等价性 重构后行为是否完全不变?允许哪些差异?
验证方式 怎么确认重构没有引入 bug?有没有自动化测试覆盖?
回滚方案 出问题怎么回滚?灰度策略?
风险评估 最大风险点在哪?有没有高风险改动需要单独评审?

5.2 提问格式

## 🔴 需要确认

### Q1: [类别] 问题描述

**上下文**:PRD 提到 xxx,我们已知 yyy。

**不明确点**:具体哪个环节不确定。

**可能的选项**(如有):
- A. xxx
- B. yyy
- C. 其他(请说明)

一次提完所有问题,不要一个一个问。若问题超过 10 个,分 2 批提问(每批 ≤10 个)。用户回答完再进入 Phase 6。


Phase 6:模块设计

6.1 领域划分

按业务领域拆分模块,每个模块:
- 一句话定义职责
- 列出核心聚合
- 标注模块间依赖关系

【模块划分】

┌─────────────┐     ┌─────────────┐
│  用户与权限   │────>│   项目管理   │
└─────────────┘     └──────┬──────┘
                           │
              ┌────────────┼────────────┐
              ▼            ▼            ▼
        ┌──────────┐ ┌──────────┐ ┌──────────┐
        │ 报告管理  │ │ 流程审批  │ │ 数据看板  │
        └──────────┘ └──────────┘ └──────────┘

6.2 模块明细

为每个模块输出。包/模块路径基于 Phase 3 感知卡片中确定的项目根路径拼接:

维度 内容
模块名 英文名(相对于项目根路径的子模块名)
职责 一句话
聚合根 核心实体
实体 值对象、子实体
领域服务 跨聚合的操作
依赖模块 调用了谁

场景自适应:
- 🟢 全量输出所有新模块
- 🟡 只输出本次变更涉及的模块,标注不变部分
- 🔵 输出切面/拦截器模块,而非业务模块
- ⚪ 画新旧架构对比图,标注变更点

6.3 状态机设计 【强制】

每发现一个含状态流转的实体,必须画状态机。 格式:

【订单状态机】
                    ┌──────────────┐
                    │   已取消(3)   │
                    └──────▲───────┘
                           │ 任意非终结态可取消
  ┌─────────┐    ┌────────┴───────┐    ┌─────────┐
  │ 草稿(0) │───>│  待付款(1)     │───>│ 已付款(2)│
  └─────────┘    └────────────────┘    └─────────┘
    提交订单          支付成功

变迁约束:
- 草稿→待付款: 订单项非空 && 库存充足
- 待付款→已付款: 支付回调成功
- 待付款→已取消: 超时 30min 自动取消 / 用户手动取消
- 已付款→已取消: ❌ 不允许(需走退款流程)
- 已付款→待付款: ❌ 不可逆

铁律:状态机中每个变迁必须有触发条件。不允许 "任意状态可到任意状态"。


Phase 7:API 设计

先调用 skill 工具加载 design-api 技能并严格遵守,然后遵循其规范执行:

7.1 资源建模

为每个聚合根定义 REST 资源。URL 中必须使用 Phase 3 感知卡片中提取的项目 URL 前缀:

资源 URL 路径 说明
项目列表 POST /{prefix}/projects、GET /{prefix}/projects —
单个项目 GET /{prefix}/projects/{id}、PUT /{prefix}/projects/{id}、DELETE /{prefix}/projects/{id} —
项目下任务 GET /{prefix}/projects/{pid}/tasks、POST /{prefix}/projects/{pid}/tasks 子资源嵌套
任务提交 POST /{prefix}/tasks/{id}/submit 动词后缀动作

场景自适应:
- 🟢 全量接口清单
- 🟡 只列新增/变更接口,明确标注不变接口
- 🔵⚪ 跳过(不暴露新 API)

7.2 接口清单

每个接口含:

#### POST /{prefix}/tasks/{id}/submit

| 项 | 内容 |
|----|------|
| 说明 | 提交任务进入审批流程 |
| 认证 | 需要 |
| 权限 | 任务负责人 或 项目管理员 |
| 前置校验 | 任务状态 = 草稿(0),不能为空 |
| 幂等 | 是,同一任务重复提交返回 409 |
| 成功 | 200,任务变为 待审批(1) |
| 失败 | 400(参数)/ 403(无权限)/ 409(已提交)/ 404(不存在) |

7.3 请求/响应结构明细 【强制】

每个接口必须给出字段级定义,不写 "略" / "按需"。格式骨架:

POST /{prefix}/tasks/{id}/submit

Request: (Path 参数)
  - id: Long, 任务ID

Response 200:
{
  "code": 0,              // Int, 项目约定的成功状态码
  "data": {
    "id": 1,              // Long, 实体ID
    "status": 1,          // Int, 新状态值
    "updatedAt": "..."    // String, 操作时间
  }
}

Response 409:  // 冲突场景
{
  "code": 409,            // Int, 项目约定的冲突状态码
  "message": "用户可读的错误描述",
  "data": {
    "currentStatus": 1,     // 当前状态
    "allowedStatuses": [0]  // 允许操作的状态列表
  }
}

规则:
- 所有字段标注类型和含义,不能省略
- 错误响应的 data 层提供上下文信息,帮助前端展示或重试(如适用)
- 列表接口给出排序字段、分页参数的默认值和硬上限(≤100)
- 响应格式必须与 Phase 3 感知卡片中提取的项目统一响应格式一致

7.4 错误码清单 【强制】

按模块汇总所有接口的错误码,建立全局唯一编码体系:

| 错误码 | HTTP | 模块 | 接口 | 触发条件 | message 模板 |
|--------|------|------|------|----------|-------------|
| TASK-001 | 404 | 任务 | GET /tasks/{id} | ID 不存在 | 任务(id={})不存在 |
| TASK-002 | 409 | 任务 | POST /tasks/{id}/submit | 状态不允许 | 任务状态不允许提交,当前: {} |
| TASK-003 | 403 | 任务 | PUT /tasks/{id} | 非负责人 | 无权限编辑该任务 |
| AUTH-001 | 401 | 认证 | ALL | Token 过期 | 登录已过期,请重新登录 |

编码规则:{模块缩写}-{3位序号},如 TASK-001、ORDER-001。每个错误码全局唯一。


Phase 8:数据库设计

先调用 skill 工具加载 design-db 技能并严格遵守,然后遵循其规范执行:

8.1 ER 实体关系

文字版 ER:
  users 1──N orders (user_id → users.id)
  orders 1──N order_items (order_id → orders.id)
  products 1──N order_items (product_id → products.id)
  orders 1──1 payments (order_id → orders.id)

8.2 表结构设计

每张表输出完整的 CREATE TABLE 语句(主键、字段、审计字段、索引、注释)。增量场景的 ALTER TABLE 语法在对应场景规则文件(scenario-modify.md)中规范,此处只做逻辑设计。

审计字段必须与 Phase 3 感知卡片中提取的项目约定一致。

-- ============================================
-- 表名: orders (订单表)
-- ============================================
CREATE TABLE orders (
    id          BIGINT          NOT NULL AUTO_INCREMENT  COMMENT '主键',
    -- 业务字段
    order_no    VARCHAR(32)     NOT NULL                 COMMENT '订单号,唯一',
    user_id     BIGINT          NOT NULL                 COMMENT '用户ID',
    total_amount DECIMAL(18,2)  NOT NULL DEFAULT 0.00    COMMENT '订单总额',
    status      TINYINT         NOT NULL DEFAULT 0       COMMENT '状态: 0草稿 1待付款 2已付款 3已取消',

    -- 审计字段(按项目约定)
    created_at  DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP       COMMENT '创建时间',
    updated_at  DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    created_by  BIGINT          DEFAULT NULL                            COMMENT '创建人ID',
    updated_by  BIGINT          DEFAULT NULL                            COMMENT '修改人ID',

    PRIMARY KEY (id),
    UNIQUE KEY uk_orders_order_no (order_no),
    KEY idx_orders_user_id (user_id),
    KEY idx_orders_status_created (status, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';

8.3 索引设计说明

索引名 列 场景
uk_orders_order_no order_no 订单号唯一查找
idx_orders_user_id user_id 查询某用户的订单列表
idx_orders_status_created status, created_at 按状态+时间排序查询

8.4 数据量预估 【强制】

每张表预估 3 个指标,影响索引策略和是否分表:

| 表名 | 初始行数 | 年增长率 | 单行估算 | 3 年总量 | 是否需要分表 |
|------|----------|----------|----------|----------|-------------|
| orders | 0 | ~50万/年 | ~200B | ~150万 | 否 |
| order_items | 0 | ~200万/年 | ~150B | ~600万 | 否 (<1000万) |
| operation_logs | 0 | ~500万/年 | ~100B | ~1500万 | 是 (按年分区) |

判断标准(基于 MySQL InnoDB + 常规 SSD 硬件 + 多列索引的正常查询场景):

单表数据量 策略
< 500 万行 常规索引即可
500 万 ~ 2000 万 考虑分区或按月/年归档
> 2000 万 必须分表或时序归档

> 注意:以上阈值为 MySQL InnoDB 的通用经验值。具体阈值受硬件(内存/IOPS)、查询模式(索引覆盖率、JOIN 复杂度)等影响,实际应以性能测试结果为准。PostgreSQL、SQL Server 等其他数据库的阈值不同,需单独评估。

8.5 API ↔ DB 交叉校验

设计完 API 和 DB 后,必须做交叉校验:

检查项 方法
每个 API 资源有对应表 遍历 7.1 资源建模,逐一核对 8.1 ER 图
每个业务表有对应 API 遍历 8.2 表结构,逐一核对 7.2 接口清单
状态字段一致性 API 状态码枚举值 = DB COMMENT 注释值
字段名一致性 DTO 字段 ↔ 表列名(驼峰↔下划线)

不匹配的标注 ⚠️ 待对齐。


Phase 9:架构设计

先调用 skill 工具加载 design-code 技能并严格遵守,然后遵循其规范执行:

9.1 分层结构

handler/        ← 只做:参数校验 + 调 Service + 组装响应
service/        ← 只做:业务逻辑 + 事务
repository/     ← 只做:数据访问
entity/         ← DTO / VO / 领域实体
common/         ← 横切:异常、工具、切面
enums/          ← 业务枚举

9.2 核心 Service 职责

Service 职责 关键方法
XxxService ... create / approve / cancel / listByProject
... ... ...

9.3 关键业务流程

用文字描述核心流程 + Service 调用链:

【提交任务审批流程】
1. TaskController.submit(taskId) → 参数校验
2. TaskServiceImpl.submit(taskId)
    ├─ validateStatus(task)                   // 卫语句:非草稿抛 409
    ├─ validateUserPermission(task, user)     // 无权限抛 403
    ├─ buildApprovalRecord(task)              // 构造审批对象
    ├─ approvalRecordMapper.insert(record)    // 创建审批记录
    ├─ taskMapper.updateStatus(taskId, 1)     // 更新任务状态
    └─ notificationService.notify(approver)   // 通知审批人
3. 组装统一响应并返回

9.4 时序图(关键交互) 【强制】

至少为核心业务流程中的 3 条决策路径 画时序图。格式使用文字时序图(Mermaid 风格,纯文本兼容):

【提交任务审批 - 正常流程】
客户端          Controller       Service           Repository       外部服务
  │                │                │                 │               │
  │ POST /tasks/1/submit           │                 │               │
  │───────────────&gt;│                │                 │               │
  │                │ submit(1)      │                 │               │
  │                │──────────────&gt;│                 │               │
  │                │                │ findById(1)     │               │
  │                │                │────────────────&gt;│               │
  │                │                │ &lt;── Task(status=0)              │
  │                │                │                 │               │
  │                │                │ updateStatus(1, 1)              │
  │                │                │────────────────&gt;│               │
  │                │                │                 │               │
  │                │                │── notify(approver)              │
  │                │                │                 │  ──推送──&gt;    │
  │                │ &lt;── OK ────────│                 │               │
  │ &lt;── 200 ───────│                │                 │               │

【提交任务审批 - 状态非法】
客户端          Controller       Service
  │                │                │
  │ POST /tasks/1/submit           │
  │───────────────&gt;│                │
  │                │ submit(1)      │
  │                │──────────────&gt;│
  │                │                │ findById(1) → status=1(已提交)
  │                │                │ throw BusinessException(&quot;已提交, 不可重复&quot;)
  │                │ &lt;── 异常 ──────│
  │ &lt;── 409 ───────│                │

规则:时序图必须在正常流程外覆盖至少 1 条异常分支和 1 条边界条件。

9.5 技术决策

技术决策基于 Phase 3 感知卡片中提取的项目现有技术栈,保持一致。仅对新增技术选型做决策:

决策点 选择 理由
文件存储 与项目现有方案一致(从 Phase 3 感知卡片获取) 不引入新依赖
缓存 与项目现有方案一致 —
异步任务 使用项目现有的线程池或消息队列方案 —
分页 使用项目 ORM 的分页机制 —
状态机 业务代码枚举校验(状态 < 5 个,无需引入状态机框架) —

新增技术选型必须给出充分理由,优先复用项目现有技术栈。


Phase 10:打包设计资产,传递给场景规则 【强制】

Phase 9 完成后,在读取场景规则文件前,将以下设计资产以结构化摘要形式汇总,作为场景规则的上下文:

【设计资产传递清单】(在读取场景规则文件时一并附上)

□ 项目感知卡片(Phase 3 输出)
  - URL 前缀、响应格式、审计字段约定
  - 项目根路径、现有实体全景

□ 场景判定结论(Phase 4 输出)
  - 场景类型、涉及实体、受影响/不受影响 API

□ 功能模块设计(Phase 6 输出)
  - 模块划分图、模块明细表、状态机图

□ API 设计清单(Phase 7 输出)
  - 资源建模表、接口清单、DTO 字段定义、错误码清单

□ 数据库设计(Phase 8 输出)
  - ER 关系图、表结构 DDL、索引设计、数据量预估

□ 架构设计(Phase 9 输出)
  - 分层结构、Service 职责表、时序图、技术决策

□ 澄清记录(Phase 5 输出)
  - 问题及用户回复原文

场景规则在接收设计资产后,必须引用以上资产——而非重新推导或猜测。


Phase 10 完成后:读取场景规则文件

根据 Phase 4 判定的场景,读取对应的场景规则文件接管后续阶段:

场景 读取的规则文件 负责内容
🟢 全新功能 rules/scenario-new.md 全量设计文档模板 + 审计 + 全量 OpenAPI YAML + 全量 DDL SQL
🟡 增量改造 rules/scenario-modify.md 精简改造模板 + 审计 + 增量 YAML + create/alter 分离 SQL
🔵 横切机制 rules/scenario-crosscut.md 机制设计模板 + 审计 + alter/ SQL
⚪ 重构优化 rules/scenario-refactor.md 重构设计模板 + 审计(无 YAML/SQL)

执行:用 read 工具读取对应的场景规则文件,同时将《设计资产传递清单》作为上下文附上。按规则文件执行文档输出、审计、YAML 生成、SQL 产出直至交付。


Phase 11:代码实现(可选,需用户确认)

场景规则交付设计文档后,询问用户是否需要编写代码:

> 设计文档已交付。是否需要我基于该设计编写完整的后端代码(Handler / Service / Repository / Entity / DTO / 枚举等)?

  • 用户确认 → 调用 skill 工具加载 design-code 技能,将《设计资产传递清单》+ 已交付的设计文档作为上下文。严格遵循 design-code 中的编码规范,编写高质量、可维护的生产级代码。
  • 用户拒绝 → 交付结束。

代码实现要点:
- 遵循 design-code 中的分层职责、SOLID 原则
- 实现状态机校验、幂等性、事务管理
- 添加完善的异常处理和日志
- 编写清晰的注释和文档
- 执行 API↔DB↔Code 交叉校验


禁止事项(通用)

  • ❌ 收到用户输入后不加分析直接扫描代码
  • ❌ PRD 没提就当不存在
  • ❌ 遇到不明确的自行脑补
  • ❌ 跳过 Phase 1 问题识别(必须先分析,后扫描)
  • ❌ 跳过 Phase 3 代码库感知直接设计
  • ❌ 跳过 Phase 4 场景分类,直接按全新功能走全流程
  • ❌ 跳过 Phase 5 直接开始设计
  • ❌ API 全部用 POST / 不分页给默认上限
  • ❌ 表设计无主键 / 漏索引 / 用 ENUM
  • ❌ 技术选型不给理由
  • ❌ Phase 10 不打包设计资产,场景规则基于不完整信息生成文档
  • ❌ 不按场景读取对应的规则文件(如 🟡 场景去读 scenario-new.md)
  • ❌ 设计与 Phase 3 感知卡片中提取的项目现有约定不一致(如 URL 前缀、审计字段、响应格式)
  • ❌ 用户确认需要代码后跳过 Phase 11(不调用 design-code 技能直接结束交付)
  • ❌ 一次性加载全部规范(通用规范按阶段用 skill 工具加载、流程规则按需用 read 读取,禁止全量)

常见问题

5 问
答案由本站依据条目字段整理
PRD → 技术设计文档怎么安装?

在支持 Skills 的客户端里执行:skillhub install user_a4c2f3d2/prd2plan。安装方式为未标注。装完刷新技能列表或重开客户端。

PRD → 技术设计文档支持哪些客户端?

资料没有标注宿主客户端,但只要客户端支持 Skills(Claude、Codex、Cursor 等),一般都能加载。

PRD → 技术设计文档权限高吗,安全吗?

权限级别为未标注权限。安装前先看它会读取或写入哪些内容。

PRD → 技术设计文档收费吗?

本站不代收费用,也没有标注具体价格。是否收费取决于技能本身和所用的模型或客户端,正式使用前按作者说明确认。

PRD → 技术设计文档用什么许可证?

许可证标注为 未说明(许可证不明确)。商用或二次分发前请到仓库确认条款原文。

热门专题

按场景挑技能
全部专题 →

技能内容以作者仓库为准;分类、权限级别与许可证状态的中文说明为中文整理,最近核验 未标注。