@gong-ym/ai-spec-auto 0.2.15 → 0.2.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/commands/common/spec-continue.md +1 -1
- package/.agents/commands/common/spec-start-review.md +1 -1
- package/.agents/commands/common/spec-start.md +1 -1
- package/.agents/commands/common/spec-update.md +2 -2
- package/.agents/commands/cursor/opsx-apply.md +0 -1
- package/.agents/commands/cursor/opsx-propose.md +0 -1
- package/.agents/flows/RUN_OUTPUT.md +0 -2
- package/.agents/flows/common/prd-to-delivery.md +0 -3
- package/.agents/flows/common/requirement-to-observability.md +0 -2
- package/.agents/orchestration/runtime-state-handoff-spec.md +93 -1
- package/.agents/orchestration/task-orchestrator-run-plan-template.md +85 -4
- package/.agents/registry/flows.json +5 -5
- package/.agents/registry/roles.json +13 -27
- package/.agents/roles/common/backend-implementer.md +3 -4
- package/.agents/roles/common/code-guardian.md +2 -3
- package/.agents/roles/common/frontend-implementer.md +3 -4
- package/.agents/roles/common/requirement-analyst.md +32 -18
- package/.agents/roles/common/tooling-implementer.md +3 -4
- package/.agents/rules/common/12-Superpowers/346/211/247/350/241/214/350/247/204/350/214/203.md +1 -1
- package/.agents/rules/common/14-/345/256/241/350/256/241/346/261/207/346/212/245/350/247/204/350/214/203.md +1 -2
- package/.agents/rules/profiles/react/01-/351/241/271/347/233/256/346/246/202/350/277/260.md +1 -1
- package/.agents/rules/profiles/react/05-API/350/247/204/350/214/203.md +2 -2
- package/.agents/rules/profiles/vue/05-API/350/247/204/350/214/203.md +2 -2
- package/.agents/skills/common/archive-change/SKILL.md +0 -1
- package/.agents/skills/common/create-proposal/SKILL.md +7 -8
- package/.agents/skills/common/execute-task/SKILL.md +3 -3
- package/.agents/skills/profiles/react/create-api/SKILL.md +2 -2
- package/.agents/skills/profiles/vue/create-api/SKILL.md +2 -2
- package/bin/archive-change.js +37 -259
- package/bin/cli.js +5 -0
- package/bin/demo-runtime-smoke.js +11 -74
- package/bin/execution-semantics.js +4 -17
- package/bin/expert-executor.js +4 -7
- package/bin/protocol-workflow.js +7 -2
- package/bin/refresh-command.js +185 -0
- package/bin/runtime-state.js +18 -14
- package/bin/task-orchestrator-runner.js +2 -2
- package/internal/ai-protocol-workflow.js +80 -119
- package/openspec/config.yaml.template +6 -15
- package/openspec/schemas/expert-delivery/schema.yaml +0 -11
- package/openspec/schemas/expert-delivery/templates/checklist.md +12 -30
- package/openspec/schemas/expert-delivery/templates/iterations.md +6 -22
- package/openspec/schemas/expert-delivery/templates/proposal.md +7 -35
- package/openspec/schemas/expert-delivery/templates/tasks.md +7 -20
- package/package.json +1 -1
- package/scripts/post-publish-auto-fix-check.js +5 -61
- package/openspec/schemas/expert-delivery/templates/design.md +0 -61
|
@@ -4,7 +4,7 @@ name: 需求解析专家
|
|
|
4
4
|
status: active
|
|
5
5
|
domains:
|
|
6
6
|
- demand-design
|
|
7
|
-
description: 负责把 PRD、设计稿或自然语言需求收敛为本次变更的 proposal、specs、
|
|
7
|
+
description: 负责把 PRD、设计稿或自然语言需求收敛为本次变更的 proposal、specs、tasks 和关键假设,作为实现前置输入。
|
|
8
8
|
triggers:
|
|
9
9
|
- prd-input
|
|
10
10
|
- design-input
|
|
@@ -19,7 +19,6 @@ reads:
|
|
|
19
19
|
writes:
|
|
20
20
|
- openspec/changes/<change-id>/proposal.md
|
|
21
21
|
- openspec/changes/<change-id>/specs/
|
|
22
|
-
- openspec/changes/<change-id>/design.md
|
|
23
22
|
- openspec/changes/<change-id>/tasks.md
|
|
24
23
|
handoff_to:
|
|
25
24
|
- frontend-implementer
|
|
@@ -29,7 +28,7 @@ handoff_to:
|
|
|
29
28
|
|
|
30
29
|
## 角色定位
|
|
31
30
|
|
|
32
|
-
负责把 PRD、设计稿或自然语言需求收敛成当前 change 的 `proposal.md / specs/ /
|
|
31
|
+
负责把 PRD、设计稿或自然语言需求收敛成当前 change 的 `proposal.md / specs/ / tasks.md`。
|
|
33
32
|
|
|
34
33
|
它不写实现代码,也不替实现专家补需求边界;它的职责是把“想做什么”翻译成“按当前项目规则可以怎么做”。
|
|
35
34
|
|
|
@@ -44,6 +43,31 @@ handoff_to:
|
|
|
44
43
|
- 输出必须服务后续实现与验收,不写空泛汇报材料
|
|
45
44
|
- 专家不是发明新方案,而是通过 `rules + skills + OpenSpec` 收敛到当前项目可实施方案
|
|
46
45
|
|
|
46
|
+
## 复杂度快速判断
|
|
47
|
+
|
|
48
|
+
**简单需求(快速通道)** - 满足以下全部条件:
|
|
49
|
+
- 单文件或 2-3 个文件的修改
|
|
50
|
+
- 任务明确(如"加个按钮"、"改个样式"、"加个校验")
|
|
51
|
+
- 不涉及新模块、新路由、新接口
|
|
52
|
+
- 无需设计稿或复杂交互
|
|
53
|
+
- 项目规则中已有明确实现模式
|
|
54
|
+
|
|
55
|
+
**快速通道行为**:
|
|
56
|
+
1. 跳过 `design-analysis` 调用
|
|
57
|
+
2. `proposal.md` 使用短版(目标、范围、假设,各 1-2 行)
|
|
58
|
+
3. `specs/` 使用短版(只写变更点,不写完整场景)
|
|
59
|
+
4. `tasks.md` 使用短版(3-5 条直接可执行任务)
|
|
60
|
+
5. 直接进入实现,不做详细澄清
|
|
61
|
+
|
|
62
|
+
**复杂需求(完整分析)** - 命中以下任一条件:
|
|
63
|
+
- 涉及多个模块或系统级变更
|
|
64
|
+
- 需要新接口、新状态管理、新路由设计
|
|
65
|
+
- 有设计稿或复杂交互需求
|
|
66
|
+
- 存在技术选型或架构决策
|
|
67
|
+
- 规则不明确,需要大量澄清
|
|
68
|
+
|
|
69
|
+
**完整分析行为**:按下方"必做步骤"执行完整流程。
|
|
70
|
+
|
|
47
71
|
## 必做步骤
|
|
48
72
|
|
|
49
73
|
1. 读取任务输入、项目背景、`role_rule_contract`、`repo_conventions`
|
|
@@ -52,8 +76,7 @@ handoff_to:
|
|
|
52
76
|
4. 若输入包含设计稿、视觉还原或复杂交互,先调用 `design-analysis`
|
|
53
77
|
5. 使用 `create-proposal` 生成或补全 `proposal.md`
|
|
54
78
|
6. 生成增量规范 `specs/<domain>/spec.md`,必要时拆成多个 domain
|
|
55
|
-
7. 生成 `
|
|
56
|
-
8. 生成 `tasks.md`,把关键规则约束转成可执行任务,而不是抽象建议
|
|
79
|
+
7. 生成 `tasks.md`,把关键规则约束转成可执行任务,而不是抽象建议
|
|
57
80
|
9. 列出关键假设、依赖项和待确认问题,并区分是否阻断实现
|
|
58
81
|
10. 在 `openspec/changes/<change-id>/` 下落盘完成前,不得把本轮标记为 done
|
|
59
82
|
|
|
@@ -62,11 +85,11 @@ handoff_to:
|
|
|
62
85
|
- 优先读取协议下发的 `project_context(项目事实)` 与 `repo_conventions(仓库约定)`
|
|
63
86
|
- 按 `role_rule_contract` 理解当前项目允许的页面、路由、API、mock、样式落点
|
|
64
87
|
- 按 `role_skill_contract.primary_skills` 决定先读哪个技能:
|
|
65
|
-
- `create-proposal` 负责 proposal/specs/
|
|
88
|
+
- `create-proposal` 负责 proposal/specs/tasks 的结构化产出
|
|
66
89
|
- `design-analysis` 仅在存在 UI/页面结构需求时辅助梳理
|
|
67
|
-
- 对于项目规则中已经明确的事实,应直接写入 proposal/specs/
|
|
90
|
+
- 对于项目规则中已经明确的事实,应直接写入 proposal/specs/tasks 或 assumptions,而不是重复标为 missing_inputs
|
|
68
91
|
- 若 `rules` 与某个 skill 示例写法冲突,以当前项目规则与目录约定为准
|
|
69
|
-
- 复杂交互场景下,应优先把搜索、表单、弹窗、批量操作等交互口径写成摘要,再写入 proposal /
|
|
92
|
+
- 复杂交互场景下,应优先把搜索、表单、弹窗、批量操作等交互口径写成摘要,再写入 proposal / tasks
|
|
70
93
|
|
|
71
94
|
## 输出标准
|
|
72
95
|
|
|
@@ -85,14 +108,6 @@ handoff_to:
|
|
|
85
108
|
- 至少一个 domain;必要时可同时存在 `ui/`、`api/`、`runtime/` 等多个 domain
|
|
86
109
|
- 每份 spec 至少包含一个可验证场景
|
|
87
110
|
|
|
88
|
-
`design.md` 至少应包含:
|
|
89
|
-
|
|
90
|
-
- 中文标题:实现落点、目录与模块组织、接口或状态承载方式、风险与取舍
|
|
91
|
-
- 当前仓库中的目录/路由/API/状态/样式真实落点
|
|
92
|
-
- 需要复用的现有结构与避免引入的无关重构
|
|
93
|
-
- 与 specs 对应的实现边界和关键技术约束
|
|
94
|
-
- 真实接口与 mock-first 的边界说明
|
|
95
|
-
|
|
96
111
|
`tasks.md` 至少应包含:
|
|
97
112
|
|
|
98
113
|
- 中文标题:任务清单
|
|
@@ -108,7 +123,6 @@ handoff_to:
|
|
|
108
123
|
|
|
109
124
|
- `proposal.md` 使用短版:目标、范围、默认假设、风险
|
|
110
125
|
- `specs/<domain>/spec.md` 使用短版:只写当前变更需要的增量规范与场景
|
|
111
|
-
- `design.md` 使用短版:只保留真实实现落点与关键约束
|
|
112
126
|
- `tasks.md` 使用短版:3-5 条可执行任务
|
|
113
127
|
- 标题统一使用中文,不混入英文章节名
|
|
114
128
|
- 仍需真实落盘,不允许省略
|
|
@@ -130,7 +144,7 @@ handoff_to:
|
|
|
130
144
|
- 不直接跳过需求澄清进入编码
|
|
131
145
|
- 不把显著风险写成“后续再看”
|
|
132
146
|
- 不输出只有标题、没有约束和边界的空模板
|
|
133
|
-
- 不在未生成 `proposal.md`、`specs
|
|
147
|
+
- 不在未生成 `proposal.md`、`specs/` 和 `tasks.md` 时宣称需求阶段完成
|
|
134
148
|
|
|
135
149
|
## 交接
|
|
136
150
|
|
|
@@ -16,7 +16,6 @@ reads:
|
|
|
16
16
|
- .agents/rules/
|
|
17
17
|
- openspec/changes/<change-id>/proposal.md
|
|
18
18
|
- openspec/changes/<change-id>/specs/
|
|
19
|
-
- openspec/changes/<change-id>/design.md
|
|
20
19
|
- openspec/changes/<change-id>/tasks.md
|
|
21
20
|
writes:
|
|
22
21
|
- code
|
|
@@ -35,13 +34,13 @@ handoff_to:
|
|
|
35
34
|
|
|
36
35
|
## 工作原则
|
|
37
36
|
|
|
38
|
-
- 先读 `proposal.md`、`specs
|
|
37
|
+
- 先读 `proposal.md`、`specs/` 和 `tasks.md`,再动代码
|
|
39
38
|
- 若当前 flow 是 `bugfix-to-verification`,优先读 `bugfix.md`、用户原始输入和仓库规则,再做最小修复
|
|
40
39
|
- 先按模块规范(CLI / Contract / Worker / Utils)判断实现落点,再选技能
|
|
41
40
|
- 项目规则高于 skill 示例;如果 skill 样例与当前项目约定冲突,以规则为准
|
|
42
41
|
- 优先复用现有工具函数、Contract 定义和模块导出,不重复建设
|
|
43
42
|
- 修改范围尽量贴近本次变更,不顺手大改无关代码
|
|
44
|
-
- 若 `proposal.md`、`specs
|
|
43
|
+
- 若 `proposal.md`、`specs/` 或 `tasks.md` 缺失,必须退回要求补齐
|
|
45
44
|
|
|
46
45
|
## 必做步骤
|
|
47
46
|
|
|
@@ -64,7 +63,7 @@ handoff_to:
|
|
|
64
63
|
|
|
65
64
|
### OpenSpec 模式
|
|
66
65
|
|
|
67
|
-
- 输入以 `proposal.md / specs/ /
|
|
66
|
+
- 输入以 `proposal.md / specs/ / tasks.md` 为准
|
|
68
67
|
- 输出以 `code + implementation-notes` 为准
|
|
69
68
|
- 不得跳过需求收敛产物直接写实现
|
|
70
69
|
|
package/.agents/rules/common/12-Superpowers/346/211/247/350/241/214/350/247/204/350/214/203.md
CHANGED
|
@@ -23,7 +23,7 @@ description: 实现变更时的强制执行规范,要求启用 Superpowers 微
|
|
|
23
23
|
|------|------|----------|
|
|
24
24
|
| 1 | 头脑风暴 | 先思考边界情况、错误处理和对现有代码的影响;有歧义必须提问 |
|
|
25
25
|
| 2 | TDD 驱动 | RED → GREEN → REFACTOR;REFACTOR 阶段须按需引用 `.agents/rules/` 中的对应规范 |
|
|
26
|
-
| 3 | 双重审查 | 设计对齐(`
|
|
26
|
+
| 3 | 双重审查 | 设计对齐(`specs/`)+ 质量门禁(异常捕获、类型严谨);**必须输出审查结论表格** |
|
|
27
27
|
| 4 | 审计汇报 | 按 `14-审计汇报规范.md` 输出读取记录、操作记录、规范对齐、技能状态、偏差说明 |
|
|
28
28
|
|
|
29
29
|
## 何时可以跳过
|
|
@@ -33,13 +33,12 @@ description: 执行审计汇报规范,要求 AI 在产出代码变更后附带
|
|
|
33
33
|
|------|---------|------|
|
|
34
34
|
| 技能 | `.agents/skills/xxx/SKILL.md` | 已 Read / 未 Read |
|
|
35
35
|
| 规则 | `.agents/rules/xxx.md` | 已 Read / 未 Read,依据 xxx 推断 |
|
|
36
|
-
| 设计 | `openspec/changes/xxx/design.md` | 已 Read / 未 Read |
|
|
37
36
|
| 任务 | `openspec/changes/xxx/tasks.md` | 已 Read |
|
|
38
37
|
|
|
39
38
|
状态取值说明:
|
|
40
39
|
|
|
41
40
|
- **已 Read**:本次对话中使用 Read 工具读取过该文件
|
|
42
|
-
- **未 Read,依据 X 推断**:未直接读取,但依据其它已读文件(如 tasks.md、
|
|
41
|
+
- **未 Read,依据 X 推断**:未直接读取,但依据其它已读文件(如 tasks.md、specs/)中的描述推断行为
|
|
43
42
|
- **未 Read,凭既有知识**:未读取,依据训练知识或上下文惯例行事
|
|
44
43
|
|
|
45
44
|
### 区块 2:操作记录
|
|
@@ -22,7 +22,7 @@ description: 项目定位与技术栈概览。当需要了解项目背景、使
|
|
|
22
22
|
| 状态管理 | Zustand ^5.0.8 | Zustand(推荐)或 Redux,详见 07-状态管理 |
|
|
23
23
|
| 组件库 | Ant Design 6.1.0+ | 所有交互 UI 必须基于 Antd 二次封装 |
|
|
24
24
|
| 样式方案 | SCSS Modules, classnames | 强制使用,禁止全局样式 |
|
|
25
|
-
| HTTP 请求 |
|
|
25
|
+
| HTTP 请求 | 项目统一 request 工具(如 `@/utils/request`) | 统一请求封装,详见 05-API规范 |
|
|
26
26
|
| 基础库 | @shentu/cli, @shentu/core | 脚手架与核心工具库 |
|
|
27
27
|
| Hooks 工具 | ahooks 3.9.6 | 编写或封装 hooks 时,优先考虑是否有可使用的 ahooks |
|
|
28
28
|
| 工具函数 | lodash-es 4.17.21 | 编写或封装 函数 时,优先考虑是否有可使用的 lodash 函数 |
|
|
@@ -25,12 +25,12 @@ src/
|
|
|
25
25
|
|
|
26
26
|
## 接口请求规范
|
|
27
27
|
|
|
28
|
-
-
|
|
28
|
+
- 使用项目统一的 `request` 工具函数发起请求(如 `@/utils/request`)
|
|
29
29
|
- 请求全局配置(超时、成功码、鉴权失败处理等)集中在 `src/config/requestConfig.ts`
|
|
30
30
|
- 应用入口通过 `request.init(requestConfig)` 完成初始化
|
|
31
31
|
|
|
32
32
|
```ts
|
|
33
|
-
import { request } from '
|
|
33
|
+
import { request } from '@/utils/request';
|
|
34
34
|
|
|
35
35
|
export function getOrderListApi(data: GetOrderListParams): Promise<GetOrderListResult> {
|
|
36
36
|
return request({
|
|
@@ -25,12 +25,12 @@ src/
|
|
|
25
25
|
|
|
26
26
|
## 接口请求规范
|
|
27
27
|
|
|
28
|
-
-
|
|
28
|
+
- 使用项目统一的 `request` 工具函数发起请求(如 `@/utils/request`)
|
|
29
29
|
- 请求全局配置(超时、成功码、鉴权失败处理等)集中在 `src/config/requestConfig.ts`
|
|
30
30
|
- 应用入口通过 `request.init(requestConfig)` 完成初始化
|
|
31
31
|
|
|
32
32
|
```ts
|
|
33
|
-
import { request } from '
|
|
33
|
+
import { request } from '@/utils/request';
|
|
34
34
|
|
|
35
35
|
export function getOrderListApi(data: GetOrderListParams): Promise<GetOrderListResult> {
|
|
36
36
|
return request({
|
|
@@ -59,7 +59,6 @@ compatibility: Requires an OpenSpec workspace with openspec/changes/, the local
|
|
|
59
59
|
| 变更元数据 | `openspec/changes/<name>/.openspec.yaml` | 是 |
|
|
60
60
|
| 提案文档 | `openspec/changes/<name>/proposal.md` | 是 |
|
|
61
61
|
| 增量规范 | `openspec/changes/<name>/specs/` | 是 |
|
|
62
|
-
| 技术设计 | `openspec/changes/<name>/design.md` | 是 |
|
|
63
62
|
| 任务清单 | `openspec/changes/<name>/tasks.md` | 是 |
|
|
64
63
|
|
|
65
64
|
检查 `tasks.md` 中的任务完成状态:
|
|
@@ -15,7 +15,7 @@ compatibility: Requires an OpenSpec workspace, local .agents/rules constraints,
|
|
|
15
15
|
| 层 | 职责 | 产物位置 |
|
|
16
16
|
|----|------|----------|
|
|
17
17
|
| **本技能** | 需求前置分析 + 上下文注入 + 后置检查 | 无独立产物(分析结论注入 OpenSpec 上下文) |
|
|
18
|
-
| **OpenSpec** | 生成 proposal.md / specs/ /
|
|
18
|
+
| **OpenSpec** | 生成 proposal.md / specs/ / tasks.md | `openspec/changes/<name>/` |
|
|
19
19
|
| **config.yaml** | 桥接 ai-spec-auto 规范到 OpenSpec rules | `openspec/config.yaml` |
|
|
20
20
|
|
|
21
21
|
## 使用时机
|
|
@@ -49,9 +49,9 @@ compatibility: Requires an OpenSpec workspace, local .agents/rules constraints,
|
|
|
49
49
|
|------|------|------|
|
|
50
50
|
| **是否有设计稿或 UI 要求描述** | 有 / 无 | 有 → 步骤 2 触发 design-analysis;OpenSpec 的 tasks 中应包含 UI 验收任务 |
|
|
51
51
|
| **是否有接口(已提供或约定)** | 有 / 无 / 未就绪 | 有 → 正常对接;无 → 可不做数据层;未就绪 → mock,见项目 Mock 数据策略 |
|
|
52
|
-
| **交付形态** | 新页面 / 功能组件 / 能力模块 / 其它 | 决定目录结构(routes vs components)与 OpenSpec
|
|
52
|
+
| **交付形态** | 新页面 / 功能组件 / 能力模块 / 其它 | 决定目录结构(routes vs components)与 OpenSpec tasks.md 中的技术方案 |
|
|
53
53
|
| **是否仅样式/还原类** | 是 / 否 | 是 → 重点在 design-analysis + 验收 |
|
|
54
|
-
| **是否存在复杂交互** | 有 / 无 | 有 → 先按 `references/interaction-spec-template.md` 收口搜索、表单、弹窗、批量操作等交互说明,再写 proposal/
|
|
54
|
+
| **是否存在复杂交互** | 有 / 无 | 有 → 先按 `references/interaction-spec-template.md` 收口搜索、表单、弹窗、批量操作等交互说明,再写 proposal/tasks |
|
|
55
55
|
|
|
56
56
|
---
|
|
57
57
|
|
|
@@ -62,9 +62,9 @@ compatibility: Requires an OpenSpec workspace, local .agents/rules constraints,
|
|
|
62
62
|
- **使用技能**:`.agents/skills/design-analysis/SKILL.md`
|
|
63
63
|
- **产出**:`docs/样式还原/<名称>-UI分析清单.md`
|
|
64
64
|
|
|
65
|
-
分析清单应在 OpenSpec 生成提案前或同步完成,以便 OpenSpec 的 specs/、
|
|
65
|
+
分析清单应在 OpenSpec 生成提案前或同步完成,以便 OpenSpec 的 specs/、tasks.md 能引用分析结果。
|
|
66
66
|
|
|
67
|
-
若页面包含搜索、表单、弹窗、批量操作、复杂状态切换等交互,先参考 `references/interaction-spec-template.md` 把交互说明整理成摘要,再写入 `proposal.md /
|
|
67
|
+
若页面包含搜索、表单、弹窗、批量操作、复杂状态切换等交互,先参考 `references/interaction-spec-template.md` 把交互说明整理成摘要,再写入 `proposal.md / tasks.md`,避免实现阶段自己补口径。
|
|
68
68
|
|
|
69
69
|
---
|
|
70
70
|
|
|
@@ -81,7 +81,6 @@ openspec/changes/<change-name>/
|
|
|
81
81
|
├── specs/ # Delta specs(新增/修改/删除的需求)
|
|
82
82
|
│ └── <domain>/
|
|
83
83
|
│ └── spec.md
|
|
84
|
-
├── design.md # 技术设计(方案选型、组件拆分、数据结构)
|
|
85
84
|
└── tasks.md # 实施任务清单
|
|
86
85
|
```
|
|
87
86
|
|
|
@@ -100,7 +99,7 @@ openspec/changes/<change-name>/
|
|
|
100
99
|
|
|
101
100
|
OpenSpec 生成提案后,检查以下项目并按需补充:
|
|
102
101
|
|
|
103
|
-
### 4.1
|
|
102
|
+
### 4.1 tasks.md 前置检查
|
|
104
103
|
- 技术方案是否遵循 `.agents/rules/` 中的架构约束
|
|
105
104
|
- 涉及页面时,是否参考了 `.agents/rules/06-路由规范.md`
|
|
106
105
|
- 涉及组件时,是否参考了 `.agents/rules/04-组件规范.md`
|
|
@@ -150,7 +149,7 @@ OpenSpec 生成提案且本步骤 4 检查完毕后,**必须**以独立小节
|
|
|
150
149
|
|
|
151
150
|
适合小改动或用户明确要求「快扫清单」、不强制每步输出四步标题时,提供**可复制**提示语:
|
|
152
151
|
|
|
153
|
-
> 请直接按 `openspec/changes/<change-name>/tasks.md` 顺序逐项实现,每完成一项将对应 `- [ ]` 改为 `- [x]`,并保证与 `
|
|
152
|
+
> 请直接按 `openspec/changes/<change-name>/tasks.md` 顺序逐项实现,每完成一项将对应 `- [ ]` 改为 `- [x]`,并保证与 `specs/` 一致。**凡产生代码变更**,仍须按 `.agents/rules/14-审计汇报规范.md` 输出审计报告,不得因未走 execute-task 四步而省略。
|
|
154
153
|
|
|
155
154
|
#### 4.5.4 可选说明
|
|
156
155
|
|
|
@@ -44,7 +44,7 @@ metadata:
|
|
|
44
44
|
## 前置要求
|
|
45
45
|
|
|
46
46
|
1. 当前工作区必须存在 `tasks.md` 文件,且包含未完成的任务 (`- [ ]`)。
|
|
47
|
-
2. 必须已完整读取对应变更目录下的 `proposal.md` 或 `
|
|
47
|
+
2. 必须已完整读取对应变更目录下的 `proposal.md` 或 `specs/` 获取上下文。
|
|
48
48
|
3. 必须已读取 `.agents/rules/12-Superpowers执行规范.md` 确认执行原则。
|
|
49
49
|
4. 必须已读取 `.agents/rules/14-审计汇报规范.md` 确认审计报告格式。
|
|
50
50
|
|
|
@@ -111,7 +111,7 @@ metadata:
|
|
|
111
111
|
|
|
112
112
|
| 维度 | 检查项 | 结论 |
|
|
113
113
|
|------|--------|------|
|
|
114
|
-
| 架构对齐 | 实现是否符合 `
|
|
114
|
+
| 架构对齐 | 实现是否符合 `specs/` | 通过 / 偏差说明 |
|
|
115
115
|
| 代码健壮性 | 异常捕获、类型严谨、边界处理 | 通过 / 待补充项 |
|
|
116
116
|
| 规范合规 | 是否符合步骤 1 加载的规范 | 通过 / 偏差说明 |
|
|
117
117
|
|
|
@@ -124,7 +124,7 @@ metadata:
|
|
|
124
124
|
|
|
125
125
|
| 维度 | 检查项 | 结论 |
|
|
126
126
|
|------|--------|------|
|
|
127
|
-
| 架构对齐 | 符合
|
|
127
|
+
| 架构对齐 | 符合 specs/ 组件拆分方案 | 通过 |
|
|
128
128
|
| 代码健壮性 | Props 均有默认值,loading 防重复点击 | 通过 |
|
|
129
129
|
| 规范合规 | 目录 PascalCase、barrel export(04-组件规范) | 通过 |
|
|
130
130
|
```
|
|
@@ -72,7 +72,7 @@ export type UpdateBannerParams = CreateBannerParams & { id: number };
|
|
|
72
72
|
|
|
73
73
|
```ts
|
|
74
74
|
// src/api/banner.ts
|
|
75
|
-
import { request } from '
|
|
75
|
+
import { request } from '@/utils/request';
|
|
76
76
|
import type {
|
|
77
77
|
GetBannerListParams,
|
|
78
78
|
GetBannerListResult,
|
|
@@ -140,6 +140,6 @@ const loadData = async () => {
|
|
|
140
140
|
|
|
141
141
|
- [ ] 类型在 `src/api/types/<module>.ts`,请求在 `src/api/<module>.ts`?
|
|
142
142
|
- [ ] 命名符合 `getXxxApi` / `createXxxApi` / `updateXxxApi` / `deleteXxxApi`?
|
|
143
|
-
- [ ]
|
|
143
|
+
- [ ] 使用项目统一的 `request` 工具函数(如 `@/utils/request`)?
|
|
144
144
|
- [ ] 未重复处理接口错误?
|
|
145
145
|
- [ ] 类型与接口文档一致?
|
|
@@ -51,7 +51,7 @@ export type UpdateBannerParams = CreateBannerParams & { id: number };
|
|
|
51
51
|
|
|
52
52
|
```ts
|
|
53
53
|
// src/api/banner.ts
|
|
54
|
-
import { request } from '
|
|
54
|
+
import { request } from '@/utils/request';
|
|
55
55
|
import type {
|
|
56
56
|
GetBannerListParams,
|
|
57
57
|
GetBannerListResult,
|
|
@@ -100,6 +100,6 @@ export function deleteBannerApi(id: number): Promise<void> {
|
|
|
100
100
|
|
|
101
101
|
- [ ] 类型在 `src/api/types/<name>.ts`,请求在 `src/api/<name>.ts`?
|
|
102
102
|
- [ ] 命名符合 `getXxxApi` / `createXxxApi` / `updateXxxApi` / `deleteXxxApi`?
|
|
103
|
-
- [ ]
|
|
103
|
+
- [ ] 使用项目统一的 `request` 工具函数(如 `@/utils/request`)?
|
|
104
104
|
- [ ] 未重复处理接口错误?
|
|
105
105
|
- [ ] 类型与接口文档一致?
|