ワンクリックで
openspec-ff-mock-to-spec
从冻结的 Mock 数据反推 API Spec。在 Frontend-First 流程 Step 4 使用——读取 Mock 数据文件和前端组件,自动生成 spec.md。这是 Frontend-First 流程的核心步骤。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
从冻结的 Mock 数据反推 API Spec。在 Frontend-First 流程 Step 4 使用——读取 Mock 数据文件和前端组件,自动生成 spec.md。这是 Frontend-First 流程的核心步骤。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Generate a design system using ui-ux-pro-max. Use when creating frontend UI, generating design.md, or when user requests design system recommendations for their project.
完成 Frontend-First 集成与归档。在 Step 7 使用——检查契约测试是否通过,生成前端切换指南,创建归档文档。标志着一个功能从 Mock 驱动到真实 API 的完整过渡。
冻结 Frontend-First UI 和 Mock 数据。在 Step 3 使用——展示检查清单,要求用户逐项确认,保存 Mock 数据版本快照,生成 ui-freeze.md。冻结后 Mock 数据结构不再变动。
创建 Frontend-First 新功能。引导用户描述需求,生成 proposal.md,创建符合 api-convention 的 Mock 数据模板和前端组件模板。这是 Frontend-First 流程 Step 1 + Step 2 的启动步骤。
Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks.
Verify implementation matches change artifacts. Use when the user wants to validate that implementation is complete, correct, and coherent before archiving.
| name | openspec-ff-mock-to-spec |
| description | 从冻结的 Mock 数据反推 API Spec。在 Frontend-First 流程 Step 4 使用——读取 Mock 数据文件和前端组件,自动生成 spec.md。这是 Frontend-First 流程的核心步骤。 |
| license | MIT |
| compatibility | Works with any frontend project using the Frontend-First workflow. |
| metadata | {"author":"openspec","version":"1.0"} |
从冻结的 Mock 数据和前端组件代码反推 API Spec,生成 spec.md。
前提条件: Step 3 UI Freeze 已完成,Mock 数据已冻结。
Input: 功能名称(feature name)。如果未提供,尝试从对话上下文推断;如果不明确,提示用户选择。
Steps
定位 Mock 数据文件
搜索 devtools/mocks/data/ 目录,找到与功能相关的 Mock 文件:
devtools/mocks/data/<feature>/*.mock.tsdevtools/mocks/data/<feature>.mock.tsdevtools/mocks/data/<feature>/*.mock.json如果找到多个文件,列出并让用户确认范围。 如果找不到,提示用户:Mock 数据是否已创建并冻结?
读取 Mock 数据,提取响应结构
从 Mock 数据文件中提取:
a. 响应顶层结构
{
code: number,
message: string,
data: { ... } ← 这是核心
}
b. data 内部结构(逐字段) 对每个字段记录:
c. 边界数据
items: [])的 Mock 响应读取前端组件,提取请求参数
搜索与功能相关的前端组件文件(src/components/、src/pages/),查找:
a. 筛选器(Filter)
<Select>、<Dropdown>、filter、onChange 与数据查询关联的组件b. 搜索框(Search)
<Input> + search、keyword、querysearch 或 keyword 参数c. 排序(Sort)
sortBy、sort_by、orderBy、<Table> 的 sorter 属性sort_by + sort_order 参数d. 分页(Pagination)
<Pagination>、page、pageSize、page_sizepage + page_size 参数total / total_counte. 其他交互
如果无法从代码中确定某个参数的名称或类型,使用 AskUserQuestion 工具询问用户。
确定 API 设计
基于提取的信息,向用户确认:
使用 AskUserQuestion 工具 逐一确认:
GET /api/users)原则:
openspec/conventions/api-convention.md生成 spec.md
按以下结构生成:
# API Spec: <功能名称>
> 此 Spec 由 Mock 数据反推生成(Frontend-First Step 4)
> Mock 数据版本:<冻结日期>
> 生成日期:<当前日期>
## 接口列表
| 方法 | 路径 | 功能 |
|------|------|------|
| GET | /api/<resource> | <描述> |
---
## <接口1>: <方法> <路径>
### 功能
<一句话描述>
### 请求参数
| 参数名 | 类型 | 必填 | 说明 | 示例 | 来源 |
|--------|------|------|------|------|------|
| page | number | 否 | 页码,默认1 | 1 | 分页组件 |
| page_size | number | 否 | 每页条数,默认20,最大100 | 20 | 分页组件 |
| search | string | 否 | 搜索关键词 | "张" | 搜索框 |
| status | string | 否 | 状态筛选 | "active" | 筛选器 |
| sort_by | string | 否 | 排序字段 | "created_at" | 表头排序 |
| sort_order | string | 否 | 排序方向 | "desc" | 表头排序 |
> "来源"列标注该参数对应前端的哪个组件/交互,方便回溯。
### 成功响应 (code: 0)
```json
<直接从 Mock 数据复制>
{
"code": 100001,
"message": "缺少必填参数",
"data": null
}
错误码为 6 位数字,格式
CCMMSS,详见openspec/conventions/api-convention.md
| 字段路径 | 类型 | 必填 | 说明 | 特殊情况 |
|---|---|---|---|---|
| data.items[].id | number | 是 | 用户ID | - |
| data.items[].name | string | 是 | 用户名 | - |
| data.items[].last_login | string | null | 否 | 最后登录时间 |
| data.total | number | 是 | 总记录数 | - |
**对于每个 endpoint 重复上述结构。**
自动一致性检查
生成 Spec 后,立即执行 Mock↔Spec 对比:
✅ 一致性检查通过:Mock 和 Spec 字段 100% 对齐
或
⚠ 发现 N 处不一致:
- data.items[].email: Mock 中有,Spec 数据字典中缺失 → 已自动补充
- data.items[].role: Mock 值 "pending" 不在 Spec 枚举定义中 → 已自动补充
如果有不一致,自动修复 Spec(因为 Mock 是源头,Spec 要对齐 Mock)。
保存并提示用户 Review
将 spec.md 写入 openspec/specs/<feature>/spec.md(或 openspec/changes/<name>/specs/<feature>/spec.md,取决于是否在 change 上下文中)。
提示用户:
✅ Spec 已生成
文件:openspec/specs/<feature>/spec.md
包含:
- N 个 endpoint
- M 个请求参数(从前端组件提取)
- K 个响应字段(从 Mock 数据提取)
- Mock↔Spec 一致性:100%
请 Review:
1. 每个字段的"说明"是否准确?
2. 业务规则是否完整?
3. 错误情况是否需要补充?
确认后,运行 /opsx:ff-freeze-spec(或进入 Step 5 Spec Review)锁定 Spec。
Output
spec.md 文件(完整的 API 契约)与 Spec-First 流程的 Spec 创建的区别
| 维度 | Spec-First(openspec-continue-change) | Frontend-First(本 Skill) |
|---|---|---|
| 输入 | proposal.md(需求描述) | Mock 数据 + 前端组件代码 |
| 方法 | 从业务需求正向设计 | 从实际使用场景反向推导 |
| 响应结构 | 开发者设计 | 100% 复制 Mock 数据 |
| 请求参数 | 开发者设计 | 从前端组件交互提取 |
| 验证 | Review 业务完整性 | Mock↔Spec 自动对比 |
| 风险 | 可能遗漏前端需要的字段 | 字段保证与前端一致 |
Guardrails