@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
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
若 `turn.status = blocked` 且存在 `turn.summary.pending_gate`:
|
|
62
62
|
- 明确告诉用户:当前停在该审批门禁,尚未批准,不能继续实现
|
|
63
63
|
- 若存在 `turn.guidance.approval_gate.user_report_contract`,严格按它输出极简摘要:
|
|
64
|
-
只保留“当前状态 / 关键原因 / 下一步”,不要写长篇阶段说明,不要罗列 proposal/specs/
|
|
64
|
+
只保留“当前状态 / 关键原因 / 下一步”,不要写长篇阶段说明,不要罗列 proposal/specs/tasks 或仓库文件路径,不要输出任何“对内说明”
|
|
65
65
|
- 不要继续执行 `advance`
|
|
66
66
|
- 若用户随后给出明确批准意见,或在归档确认门禁下给出“归档 / 不归档”决定,先执行 `turn.commands.update` 记录说明;若 `protocol-update` 返回 `fast_path.executed = true`,直接结束当前轮次,否则再让用户重新执行 `/spec-continue`
|
|
67
67
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
|
|
62
62
|
- 明确告诉用户:当前停在该审批门禁,尚未批准,不能继续实现
|
|
63
63
|
- 若存在 `turn.guidance.approval_gate.user_report_contract`,严格按它输出极简摘要:
|
|
64
|
-
只保留“当前状态 / 关键原因 / 下一步”,不要写长篇阶段说明,不要罗列 `proposal/specs/
|
|
64
|
+
只保留“当前状态 / 关键原因 / 下一步”,不要写长篇阶段说明,不要罗列 `proposal/specs/tasks` 或仓库文件路径,不要输出任何“对内说明”
|
|
65
65
|
- 不要继续执行 `advance`
|
|
66
66
|
- 若用户随后给出明确批准意见,或在归档确认门禁下给出“归档 / 不归档”决定,先执行 `turn.commands.update` 记录说明;若 `protocol-update(协议更新命令)` 返回 `fast_path.executed = true`,直接结束当前轮次,否则再让用户重新执行 `/spec-continue`
|
|
67
67
|
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
若 `turn.status = blocked` 且存在 `turn.summary.pending_gate`:
|
|
49
49
|
- 明确告诉用户:当前停在该审批门禁,尚未批准,不能继续实现
|
|
50
50
|
- 若存在 `turn.guidance.approval_gate.user_report_contract`,严格按它输出极简摘要:
|
|
51
|
-
只保留“当前状态 / 关键原因 / 下一步”,不要写长篇阶段说明,不要罗列 proposal/specs/
|
|
51
|
+
只保留“当前状态 / 关键原因 / 下一步”,不要写长篇阶段说明,不要罗列 proposal/specs/tasks 或仓库文件路径,不要输出任何“对内说明”
|
|
52
52
|
- 不要继续执行 `advance`
|
|
53
53
|
- 若用户随后给出明确批准意见,或在归档确认门禁下给出“归档 / 不归档”决定,先执行 `turn.commands.update` 记录说明;若 `protocol-update` 返回 `fast_path.executed = true`,直接结束当前轮次,否则再让用户重新执行 `/spec-continue`
|
|
54
54
|
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
- `resume-paused-run`:说明已恢复停点,再按返回的下一个 `turn` 继续
|
|
41
41
|
2. 若返回 `turn.mode = update-review`,必须先遵守 `turn.guidance.update_contract`
|
|
42
42
|
3. 只读取 `turn.reads`,只写 `turn.writes`
|
|
43
|
-
4. 若 `change_impact = patch | scope-delta | archive-fix`,默认在同一 `change_id` 内增量更新,不要推倒已有 proposal/specs/
|
|
43
|
+
4. 若 `change_impact = patch | scope-delta | archive-fix`,默认在同一 `change_id` 内增量更新,不要推倒已有 proposal/specs/tasks/checklist/iterations
|
|
44
44
|
5. 若 `change_impact = re-scope`,不要强行吞进当前 run;按 `reconcile_strategy` 给出“建议新建 change”的最小结论
|
|
45
45
|
6. 若 `change_impact = followup-patch`,这是对已归档变更的补丁修正;继续沿返回的 patch run 推进,不要改旧 archive 目录
|
|
46
46
|
7. 若存在 `turn.finalize_contract`,完成当前轮次后按契约推进,不要自行拼命令
|
|
@@ -57,4 +57,4 @@
|
|
|
57
57
|
- 大段协议日志
|
|
58
58
|
- scratch JSON
|
|
59
59
|
- 内部运行态文件名
|
|
60
|
-
- “整份重写 proposal/tasks/
|
|
60
|
+
- “整份重写 proposal/tasks/specs” 这类误导性说法
|
|
@@ -43,7 +43,6 @@ description: Cursor 兼容入口:创建 OpenSpec 提案并生成 proposal/spec
|
|
|
43
43
|
5. 产物位置必须稳定落在:
|
|
44
44
|
- `openspec/changes/<change-name>/proposal.md`
|
|
45
45
|
- `openspec/changes/<change-name>/specs/`
|
|
46
|
-
- `openspec/changes/<change-name>/design.md`
|
|
47
46
|
- `openspec/changes/<change-name>/tasks.md`
|
|
48
47
|
|
|
49
48
|
6. 完成后只做简洁收口:
|
|
@@ -57,7 +57,6 @@
|
|
|
57
57
|
"artifacts": [
|
|
58
58
|
"openspec/changes/<change-id>/proposal.md",
|
|
59
59
|
"openspec/changes/<change-id>/specs/",
|
|
60
|
-
"openspec/changes/<change-id>/design.md",
|
|
61
60
|
"openspec/changes/<change-id>/tasks.md",
|
|
62
61
|
"code",
|
|
63
62
|
"openspec/changes/<change-id>/checklist.md",
|
|
@@ -129,7 +128,6 @@
|
|
|
129
128
|
"artifacts": [
|
|
130
129
|
"openspec/changes/add-user-center/proposal.md",
|
|
131
130
|
"openspec/changes/add-user-center/specs/",
|
|
132
|
-
"openspec/changes/add-user-center/design.md",
|
|
133
131
|
"openspec/changes/add-user-center/tasks.md",
|
|
134
132
|
"openspec/changes/add-user-center/checklist.md",
|
|
135
133
|
"openspec/changes/add-user-center/iterations.md"
|
|
@@ -25,7 +25,6 @@ approval_gates: []
|
|
|
25
25
|
artifacts:
|
|
26
26
|
- openspec/changes/<change-id>/proposal.md
|
|
27
27
|
- openspec/changes/<change-id>/specs/
|
|
28
|
-
- openspec/changes/<change-id>/design.md
|
|
29
28
|
- openspec/changes/<change-id>/tasks.md
|
|
30
29
|
- code
|
|
31
30
|
- openspec/changes/<change-id>/checklist.md
|
|
@@ -119,7 +118,6 @@ domains:
|
|
|
119
118
|
|
|
120
119
|
- `openspec/changes/<change-id>/proposal.md`
|
|
121
120
|
- `openspec/changes/<change-id>/specs/`
|
|
122
|
-
- `openspec/changes/<change-id>/design.md`
|
|
123
121
|
- `openspec/changes/<change-id>/tasks.md`
|
|
124
122
|
- 与本次变更相关的代码实现
|
|
125
123
|
- `openspec/changes/<change-id>/checklist.md`
|
|
@@ -131,7 +129,6 @@ domains:
|
|
|
131
129
|
|
|
132
130
|
- 需求边界已被收敛为 `proposal.md`
|
|
133
131
|
- 增量规范已落在 `specs/`,且允许按 domain 拆分多份 spec
|
|
134
|
-
- 技术方案已沉淀为 `design.md`
|
|
135
132
|
- 实施任务已被拆解为 `tasks.md`
|
|
136
133
|
- 代码实现与任务范围一致
|
|
137
134
|
- 交付前检查已完成并形成 `checklist.md`
|
|
@@ -20,7 +20,6 @@ optional_roles:
|
|
|
20
20
|
approval_gates: []
|
|
21
21
|
artifacts:
|
|
22
22
|
- openspec/changes/<change-id>/proposal.md
|
|
23
|
-
- openspec/changes/<change-id>/design.md
|
|
24
23
|
- openspec/changes/<change-id>/tasks.md
|
|
25
24
|
- event-plan
|
|
26
25
|
- tracking-schema-notes
|
|
@@ -78,7 +77,6 @@ domains:
|
|
|
78
77
|
至少要沉淀以下内容:
|
|
79
78
|
|
|
80
79
|
- `proposal.md`
|
|
81
|
-
- `design.md`
|
|
82
80
|
- `tasks.md`
|
|
83
81
|
- `event-plan`
|
|
84
82
|
- `tracking-schema-notes`
|
|
@@ -237,7 +237,99 @@ frontend-implementer(前端实现专家)
|
|
|
237
237
|
- 追加一条 `run-cancelled` 事件
|
|
238
238
|
- 记录 `timestamps.finished_at`
|
|
239
239
|
|
|
240
|
-
## 7.
|
|
240
|
+
## 7. 上下文传递优化(Context Pass-through)
|
|
241
|
+
|
|
242
|
+
### 7.1 问题背景
|
|
243
|
+
|
|
244
|
+
当前每个专家都需要独立加载以下上下文:
|
|
245
|
+
|
|
246
|
+
- `context/PROJECT.md`
|
|
247
|
+
- `.agents/rules/` 下的项目规则
|
|
248
|
+
- `openspec/changes/<change-id>/` 下的变更文档
|
|
249
|
+
- 前序专家的分析产物
|
|
250
|
+
|
|
251
|
+
这导致:
|
|
252
|
+
|
|
253
|
+
- 重复读取相同文件
|
|
254
|
+
- 每个专家都要重新解析项目规则
|
|
255
|
+
- 上下文信息在多轮对话中逐渐稀释
|
|
256
|
+
|
|
257
|
+
### 7.2 上下文传递机制
|
|
258
|
+
|
|
259
|
+
当发生专家交接时,handoff payload 应携带 `context_payload`:
|
|
260
|
+
|
|
261
|
+
```json
|
|
262
|
+
{
|
|
263
|
+
"context_payload": {
|
|
264
|
+
"project_facts": {
|
|
265
|
+
"tech_stack": "Vue 3 + TypeScript + Vite",
|
|
266
|
+
"directory_structure": "src/views/, src/components/",
|
|
267
|
+
"api_pattern": "@/utils/request",
|
|
268
|
+
"style_pattern": "主题变量 + Tailwind"
|
|
269
|
+
},
|
|
270
|
+
"current_change": {
|
|
271
|
+
"change_id": "add-product-delete",
|
|
272
|
+
"proposal_path": "openspec/changes/add-product-delete/proposal.md",
|
|
273
|
+
"tasks_path": "openspec/changes/add-product-delete/tasks.md",
|
|
274
|
+
"specs_dir": "openspec/changes/add-product-delete/specs/"
|
|
275
|
+
},
|
|
276
|
+
"previous_analysis": {
|
|
277
|
+
"requirement_summary": "给商品卡片加删除按钮,点击后调用 DELETE API",
|
|
278
|
+
"key_decisions": ["沿用项目 Button 组件", "删除前弹确认框"],
|
|
279
|
+
"open_questions": []
|
|
280
|
+
},
|
|
281
|
+
"rules_snapshot": {
|
|
282
|
+
"loaded_rules": ["01-项目概述.md", "03-项目结构.md", "05-API规范.md", "09-样式规范.md"],
|
|
283
|
+
"key_constraints": ["API 必须使用 @/utils/request 封装", "样式必须使用主题变量"]
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
### 7.3 下游专家行为
|
|
290
|
+
|
|
291
|
+
当收到 `context_payload` 时,下游专家应:
|
|
292
|
+
|
|
293
|
+
1. **优先使用传递的上下文**:不再重复读取已包含的文件
|
|
294
|
+
2. **按需补充读取**:只读取 `context_payload` 中未覆盖的规则
|
|
295
|
+
3. **继承前序分析**:直接引用 `previous_analysis` 中的结论,不重新分析
|
|
296
|
+
|
|
297
|
+
### 7.4 简单需求直接交接
|
|
298
|
+
|
|
299
|
+
当 `delivery_profile = micro` 且 `complexity = low` 时,允许:
|
|
300
|
+
|
|
301
|
+
- `requirement-analyst` 完成后直接产出 `frontend-implementer` 的执行载荷
|
|
302
|
+
- `task-orchestrator` 只做状态记录,不做额外干预
|
|
303
|
+
- 实现专家直接读取 `context_payload` 进入编码
|
|
304
|
+
|
|
305
|
+
## 8. 并行分析阶段(可选)
|
|
306
|
+
|
|
307
|
+
### 8.1 适用场景
|
|
308
|
+
|
|
309
|
+
当复杂需求同时触发多个可选专家时:
|
|
310
|
+
|
|
311
|
+
- `requirement-analyst` 完成基础分析
|
|
312
|
+
- `design-collaborator` 分析设计约束
|
|
313
|
+
- `api-contract-specialist` 分析接口契约
|
|
314
|
+
|
|
315
|
+
### 8.2 并行执行模式
|
|
316
|
+
|
|
317
|
+
```
|
|
318
|
+
requirement-analyst(完成基础分析)
|
|
319
|
+
↓
|
|
320
|
+
├─ design-collaborator(并行分析)
|
|
321
|
+
└─ api-contract-specialist(并行分析)
|
|
322
|
+
↓
|
|
323
|
+
frontend-implementer(合并分析结果后进入实现)
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### 8.3 实现约束
|
|
327
|
+
|
|
328
|
+
- 并行专家必须基于同一份 `context_payload`
|
|
329
|
+
- 各专家产出独立文档,不互相依赖
|
|
330
|
+
- `task-orchestrator` 在所有并行专家完成后合并结果
|
|
331
|
+
|
|
332
|
+
## 9. 当前阶段边界
|
|
241
333
|
|
|
242
334
|
当前最小实现只解决:
|
|
243
335
|
|
|
@@ -211,7 +211,34 @@ description: 定义 task-orchestrator 在首次识别任务时必须输出的最
|
|
|
211
211
|
- 多状态联动、真实接口、复杂业务规则、核心模块改造
|
|
212
212
|
- 使用完整产物与完整门禁
|
|
213
213
|
|
|
214
|
-
### 5.6
|
|
214
|
+
### 5.6 简单需求快速通道
|
|
215
|
+
|
|
216
|
+
当 `delivery_profile = micro` 且 `complexity = low` 时,启用快速通道:
|
|
217
|
+
|
|
218
|
+
**简单需求判断标准**(满足全部):
|
|
219
|
+
- 单文件或 2-3 个文件的修改
|
|
220
|
+
- 任务明确(如"加个按钮"、"改个样式"、"加个校验")
|
|
221
|
+
- 不涉及新模块、新路由、新接口
|
|
222
|
+
- 无需设计稿或复杂交互
|
|
223
|
+
- 项目规则中已有明确实现模式
|
|
224
|
+
|
|
225
|
+
**快速通道行为**:
|
|
226
|
+
1. `requirement-analyst` 跳过 `design-analysis` 调用
|
|
227
|
+
2. `proposal.md` 使用极简版(目标、范围、假设,各 1-2 行)
|
|
228
|
+
3. `specs/` 使用极简版(只写变更点,不写完整场景)
|
|
229
|
+
4. `tasks.md` 使用极简版(3-5 条直接可执行任务)
|
|
230
|
+
5. 快速进入实现,不做详细澄清
|
|
231
|
+
|
|
232
|
+
**复杂需求**(命中任一):
|
|
233
|
+
- 涉及多个模块或系统级变更
|
|
234
|
+
- 需要新接口、新状态管理、新路由设计
|
|
235
|
+
- 有设计稿或复杂交互需求
|
|
236
|
+
- 存在技术选型或架构决策
|
|
237
|
+
- 规则不明确,需要大量澄清
|
|
238
|
+
|
|
239
|
+
复杂需求按完整流程执行,不做快速通道优化。
|
|
240
|
+
|
|
241
|
+
### 5.7 micro 的产物规格
|
|
215
242
|
|
|
216
243
|
当 `delivery_profile = micro` 时:
|
|
217
244
|
|
|
@@ -219,7 +246,8 @@ description: 定义 task-orchestrator 在首次识别任务时必须输出的最
|
|
|
219
246
|
- `tasks.md` 使用短版:3-5 条可执行任务
|
|
220
247
|
- `checklist.md` 使用短版:关键检查项、阻断项、是否建议通过
|
|
221
248
|
- `iterations.md` 使用短版:问题、修正动作、残留风险
|
|
222
|
-
-
|
|
249
|
+
- 对于简单需求(见 5.6),`requirement-analyst` 可采用快速通道行为
|
|
250
|
+
- 不允许因为 `micro` 而跳过 OpenSpec 落盘
|
|
223
251
|
|
|
224
252
|
### 5.7 page-development 任务的缺口分类
|
|
225
253
|
|
|
@@ -236,8 +264,8 @@ description: 定义 task-orchestrator 在首次识别任务时必须输出的最
|
|
|
236
264
|
对于 `prd-to-delivery(需求到交付)`:
|
|
237
265
|
|
|
238
266
|
- 首轮 `run-plan(运行计划)` 必须确定稳定 `change_id(变更 ID)`
|
|
239
|
-
- 首轮 `run-plan(运行计划)` 必须显式带出 `proposal/specs/
|
|
240
|
-
- 未存在 `proposal.md`、`specs
|
|
267
|
+
- 首轮 `run-plan(运行计划)` 必须显式带出 `proposal/specs/tasks/checklist/iterations` 的目标路径
|
|
268
|
+
- 未存在 `proposal.md`、`specs/` 与 `tasks.md` 时,不得交给 `frontend-implementer(前端实现专家)`
|
|
241
269
|
- 未存在 `checklist.md` 与 `iterations.md` 时,不得进入 `complete(完成)`
|
|
242
270
|
|
|
243
271
|
## 6. 示例
|
|
@@ -289,6 +317,59 @@ description: 定义 task-orchestrator 在首次识别任务时必须输出的最
|
|
|
289
317
|
- 先按默认假设进入 requirement-analyst(需求解析专家);若需求收敛阶段发现高风险冲突,再转 suggest 或 manual
|
|
290
318
|
```
|
|
291
319
|
|
|
320
|
+
### 简单需求示例(快速通道)
|
|
321
|
+
|
|
322
|
+
#### 输入
|
|
323
|
+
|
|
324
|
+
```text
|
|
325
|
+
@task-orchestrator(任务主代理) 给商品卡片加个删除按钮
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
#### 输出
|
|
329
|
+
|
|
330
|
+
```md
|
|
331
|
+
## 任务识别
|
|
332
|
+
- 类型:组件增强
|
|
333
|
+
- 当前输入:给商品卡片加个删除按钮
|
|
334
|
+
- 风险级别:low
|
|
335
|
+
- 复杂度:low(单文件修改,任务明确)
|
|
336
|
+
|
|
337
|
+
## 推荐流程模板
|
|
338
|
+
- `selected_flow(选中的流程模板)`:prd-to-delivery
|
|
339
|
+
- 原因:简单增强任务,适合快速通道
|
|
340
|
+
|
|
341
|
+
## 运行模式
|
|
342
|
+
- `mode(运行模式)`:auto
|
|
343
|
+
|
|
344
|
+
## 交付档位
|
|
345
|
+
- `delivery_profile(交付档位)`:micro
|
|
346
|
+
- `artifact_profile(产物规格)`:compact
|
|
347
|
+
- `complexity(复杂度)`:low
|
|
348
|
+
|
|
349
|
+
## 快速通道
|
|
350
|
+
- 已识别为简单需求,启用快速通道
|
|
351
|
+
- requirement-analyst 跳过 design-analysis
|
|
352
|
+
- 文档采用极简版
|
|
353
|
+
|
|
354
|
+
## 推荐专家
|
|
355
|
+
- 必选:frontend-implementer(前端实现专家)、code-guardian(规范守护者)
|
|
356
|
+
- 可选:requirement-analyst(需求解析专家)
|
|
357
|
+
- 第一跳:requirement-analyst(需求解析专家)
|
|
358
|
+
|
|
359
|
+
## 默认假设
|
|
360
|
+
- 沿用项目现有组件结构和样式规范
|
|
361
|
+
- 删除按钮样式沿用项目 Button 组件
|
|
362
|
+
|
|
363
|
+
## 缺失输入
|
|
364
|
+
- 无
|
|
365
|
+
|
|
366
|
+
## 审批点
|
|
367
|
+
- 暂无
|
|
368
|
+
|
|
369
|
+
## 下一步
|
|
370
|
+
- 直接进入快速通道,requirement-analyst 生成极简文档后快速进入实现
|
|
371
|
+
```
|
|
372
|
+
|
|
292
373
|
## 7. 一句话约束
|
|
293
374
|
|
|
294
375
|
> `task-orchestrator(任务主代理)` 的首轮输出必须先形成结构化 `run-plan(运行计划)`;在 `auto(自动)` 模式下,应先做仓库推断并记录 `assumptions(默认假设)`,不默认回问用户,只有高风险关键分歧才转 `suggest(建议)` 或 `manual(手动)`。
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
"frontend-implementer->code-guardian": "silent",
|
|
22
22
|
"code-guardian->archive-change": "silent"
|
|
23
23
|
},
|
|
24
|
-
"core_artifacts": ["proposal", "specs", "
|
|
25
|
-
"required_artifacts": ["proposal.md", "specs", "
|
|
24
|
+
"core_artifacts": ["proposal", "specs", "tasks", "checklist", "iterations"],
|
|
25
|
+
"required_artifacts": ["proposal.md", "specs", "tasks.md", "checklist.md", "iterations.md"],
|
|
26
26
|
"handoff_policy": "task-orchestrator -> requirement-analyst -> frontend-implementer -> code-guardian -> archive-change(可选) -> terminal",
|
|
27
|
-
"completion_policy": "proposal.md、specs/、
|
|
27
|
+
"completion_policy": "proposal.md、specs/、tasks.md、checklist.md、iterations.md 缺一不可;默认自动进入 archive-change,如需人工审核可切换到 main-flow-blocking"
|
|
28
28
|
},
|
|
29
29
|
"bugfix-to-verification": {
|
|
30
30
|
"name": "缺陷修复到验证",
|
|
@@ -101,8 +101,8 @@
|
|
|
101
101
|
"optional_roles": ["error-tracker", "rum-analyst", "code-guardian"],
|
|
102
102
|
"first_handoff": "requirement-analyst",
|
|
103
103
|
"approval_gates": [],
|
|
104
|
-
"core_artifacts": ["proposal", "
|
|
105
|
-
"required_artifacts": ["proposal.md", "
|
|
104
|
+
"core_artifacts": ["proposal", "tasks", "event-plan", "tracking-schema-notes"],
|
|
105
|
+
"required_artifacts": ["proposal.md", "tasks.md", "event-plan"],
|
|
106
106
|
"handoff_policy": "task-orchestrator -> requirement-analyst -> event-instrumentation-specialist -> error-tracker/rum-analyst(可选) -> code-guardian(可选) -> terminal",
|
|
107
107
|
"completion_policy": "观测目标、事件口径与追踪建议已收口;若启用附加专家,则需补齐错误或 RUM 观察结论"
|
|
108
108
|
},
|
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
"rule_contract_profiles": {
|
|
150
150
|
"default": {
|
|
151
151
|
"must_follow": [
|
|
152
|
-
"先把项目定位、目录落点、规范约定吸收到 proposal/specs/
|
|
152
|
+
"先把项目定位、目录落点、规范约定吸收到 proposal/specs/tasks,不要把规范已明确的信息重复写成 missing_inputs。",
|
|
153
153
|
"需求收敛必须落到当前仓库可实施的具体落点,而不是抽象方案。"
|
|
154
154
|
],
|
|
155
155
|
"blocked_when": [
|
|
@@ -184,13 +184,11 @@
|
|
|
184
184
|
"openspec_rule_sections": [
|
|
185
185
|
"proposal",
|
|
186
186
|
"specs",
|
|
187
|
-
"design",
|
|
188
187
|
"tasks"
|
|
189
188
|
],
|
|
190
189
|
"required_outputs": [
|
|
191
190
|
"proposal",
|
|
192
191
|
"specs",
|
|
193
|
-
"design",
|
|
194
192
|
"tasks"
|
|
195
193
|
],
|
|
196
194
|
"runtime_transition": {
|
|
@@ -248,11 +246,11 @@
|
|
|
248
246
|
"default": {
|
|
249
247
|
"must_follow": [
|
|
250
248
|
"优先复用现有目录、路由、请求封装、状态管理和样式变量约定。",
|
|
251
|
-
"实现前先对齐 proposal/specs/
|
|
249
|
+
"实现前先对齐 proposal/specs/tasks 的范围与落点,不要自行扩 scope。",
|
|
252
250
|
"若 verification 失败触发 auto-fix,只修失败步骤对应的问题,不新增功能、不顺手重构。"
|
|
253
251
|
],
|
|
254
252
|
"blocked_when": [
|
|
255
|
-
"proposal/specs/
|
|
253
|
+
"proposal/specs/tasks 未落盘或仍处于 before-implementation 审批门禁时,禁止改业务代码。"
|
|
256
254
|
]
|
|
257
255
|
},
|
|
258
256
|
"vue": {
|
|
@@ -270,13 +268,11 @@
|
|
|
270
268
|
],
|
|
271
269
|
"openspec_rule_sections": [
|
|
272
270
|
"specs",
|
|
273
|
-
"tasks"
|
|
274
|
-
"design"
|
|
271
|
+
"tasks"
|
|
275
272
|
],
|
|
276
273
|
"required_inputs": [
|
|
277
274
|
"proposal",
|
|
278
275
|
"specs",
|
|
279
|
-
"design",
|
|
280
276
|
"tasks"
|
|
281
277
|
],
|
|
282
278
|
"runtime_transition": {
|
|
@@ -312,11 +308,11 @@
|
|
|
312
308
|
"default": {
|
|
313
309
|
"must_follow": [
|
|
314
310
|
"优先复用现有 Service、Repository 和工具类,不重复建设。",
|
|
315
|
-
"实现前先对齐 proposal/specs/
|
|
311
|
+
"实现前先对齐 proposal/specs/tasks 的范围与落点,不要自行扩 scope。",
|
|
316
312
|
"若 verification 失败触发 auto-fix,只修失败步骤对应的问题,不新增功能、不顺手重构。"
|
|
317
313
|
],
|
|
318
314
|
"blocked_when": [
|
|
319
|
-
"proposal/specs/
|
|
315
|
+
"proposal/specs/tasks 未落盘或仍处于 before-implementation 审批门禁时,禁止改业务代码。"
|
|
320
316
|
]
|
|
321
317
|
},
|
|
322
318
|
"springboot": {
|
|
@@ -333,13 +329,11 @@
|
|
|
333
329
|
],
|
|
334
330
|
"openspec_rule_sections": [
|
|
335
331
|
"specs",
|
|
336
|
-
"tasks"
|
|
337
|
-
"design"
|
|
332
|
+
"tasks"
|
|
338
333
|
],
|
|
339
334
|
"required_inputs": [
|
|
340
335
|
"proposal",
|
|
341
336
|
"specs",
|
|
342
|
-
"design",
|
|
343
337
|
"tasks"
|
|
344
338
|
],
|
|
345
339
|
"runtime_transition": {
|
|
@@ -375,11 +369,11 @@
|
|
|
375
369
|
"default": {
|
|
376
370
|
"must_follow": [
|
|
377
371
|
"优先复用现有工具函数、Contract 定义和模块导出,不重复建设。",
|
|
378
|
-
"实现前先对齐 proposal/specs/
|
|
372
|
+
"实现前先对齐 proposal/specs/tasks 的范围与落点,不要自行扩 scope。",
|
|
379
373
|
"若 verification 失败触发 auto-fix,只修失败步骤对应的问题,不新增功能、不顺手重构。"
|
|
380
374
|
],
|
|
381
375
|
"blocked_when": [
|
|
382
|
-
"proposal/specs/
|
|
376
|
+
"proposal/specs/tasks 未落盘或仍处于 before-implementation 审批门禁时,禁止改业务代码。"
|
|
383
377
|
]
|
|
384
378
|
},
|
|
385
379
|
"node-tooling": {
|
|
@@ -396,13 +390,11 @@
|
|
|
396
390
|
],
|
|
397
391
|
"openspec_rule_sections": [
|
|
398
392
|
"specs",
|
|
399
|
-
"tasks"
|
|
400
|
-
"design"
|
|
393
|
+
"tasks"
|
|
401
394
|
],
|
|
402
395
|
"required_inputs": [
|
|
403
396
|
"proposal",
|
|
404
397
|
"specs",
|
|
405
|
-
"design",
|
|
406
398
|
"tasks"
|
|
407
399
|
],
|
|
408
400
|
"runtime_transition": {
|
|
@@ -500,7 +492,7 @@
|
|
|
500
492
|
"rule_contract_profiles": {
|
|
501
493
|
"default": {
|
|
502
494
|
"must_follow": [
|
|
503
|
-
"以 proposal/specs/
|
|
495
|
+
"以 proposal/specs/tasks 和项目规则为准检查实现,而不是只做泛化 lint。",
|
|
504
496
|
"必须给出阻断项、非阻断项和交付建议,不能写成模糊建议列表。",
|
|
505
497
|
"若实现阶段经历过 auto-fix 仍未通过 verification,必须按阻断项处理,不能以后续再看放行。"
|
|
506
498
|
],
|
|
@@ -513,7 +505,7 @@
|
|
|
513
505
|
"核查页面是否落在 src/views、路由是否落在 src/router/modules,并保持动态导入。",
|
|
514
506
|
"核查 API 是否通过 src/api 封装、类型是否放在 src/api/types,页面中未直接调 request。",
|
|
515
507
|
"核查样式是否使用主题变量、scoped 或 CSS Modules,而不是硬编码全局样式。",
|
|
516
|
-
"核查 Pinia/store、mock 与 proposal/specs/
|
|
508
|
+
"核查 Pinia/store、mock 与 proposal/specs/tasks 的边界是否一致,避免演示页写成生产页。"
|
|
517
509
|
]
|
|
518
510
|
},
|
|
519
511
|
"springboot": {
|
|
@@ -539,14 +531,12 @@
|
|
|
539
531
|
"openspec_rule_sections": [
|
|
540
532
|
"tasks",
|
|
541
533
|
"specs",
|
|
542
|
-
"design",
|
|
543
534
|
"checklist",
|
|
544
535
|
"iterations"
|
|
545
536
|
],
|
|
546
537
|
"required_inputs": [
|
|
547
538
|
"proposal",
|
|
548
539
|
"specs",
|
|
549
|
-
"design",
|
|
550
540
|
"tasks"
|
|
551
541
|
],
|
|
552
542
|
"required_outputs": [
|
|
@@ -586,7 +576,7 @@
|
|
|
586
576
|
"归档目录必须落在 openspec/changes/archive/YYYY-MM-DD-<change-id>/,不能改到其它位置。"
|
|
587
577
|
],
|
|
588
578
|
"blocked_when": [
|
|
589
|
-
"缺少 proposal/specs/
|
|
579
|
+
"缺少 proposal/specs/tasks/checklist/iterations 任一关键产物时,不得执行归档。"
|
|
590
580
|
]
|
|
591
581
|
}
|
|
592
582
|
},
|
|
@@ -601,7 +591,6 @@
|
|
|
601
591
|
"required_inputs": [
|
|
602
592
|
"proposal",
|
|
603
593
|
"specs",
|
|
604
|
-
"design",
|
|
605
594
|
"tasks",
|
|
606
595
|
"checklist",
|
|
607
596
|
"iterations"
|
|
@@ -831,7 +820,6 @@
|
|
|
831
820
|
"required_inputs": [
|
|
832
821
|
"proposal",
|
|
833
822
|
"specs",
|
|
834
|
-
"design",
|
|
835
823
|
"tasks"
|
|
836
824
|
],
|
|
837
825
|
"required_outputs": []
|
|
@@ -973,7 +961,6 @@
|
|
|
973
961
|
"required_inputs": [
|
|
974
962
|
"proposal",
|
|
975
963
|
"specs",
|
|
976
|
-
"design",
|
|
977
964
|
"tasks"
|
|
978
965
|
],
|
|
979
966
|
"required_outputs": []
|
|
@@ -1107,7 +1094,6 @@
|
|
|
1107
1094
|
"required_inputs": [
|
|
1108
1095
|
"proposal",
|
|
1109
1096
|
"specs",
|
|
1110
|
-
"design",
|
|
1111
1097
|
"tasks"
|
|
1112
1098
|
],
|
|
1113
1099
|
"required_outputs": []
|
|
@@ -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
|
- 先按分层规范(Controller → Service → Repository)判断实现落点,再选技能
|
|
41
40
|
- 项目规则高于 skill 示例;如果 skill 样例与当前项目约定冲突,以规则为准
|
|
42
41
|
- 优先复用现有服务、Repository 和工具类,不重复建设
|
|
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
|
|
|
@@ -18,7 +18,6 @@ reads:
|
|
|
18
18
|
- .agents/rules/
|
|
19
19
|
- openspec/changes/<change-id>/proposal.md
|
|
20
20
|
- openspec/changes/<change-id>/specs/
|
|
21
|
-
- openspec/changes/<change-id>/design.md
|
|
22
21
|
- openspec/changes/<change-id>/tasks.md
|
|
23
22
|
writes:
|
|
24
23
|
- openspec/changes/<change-id>/checklist.md
|
|
@@ -37,7 +36,7 @@ handoff_to: []
|
|
|
37
36
|
|
|
38
37
|
## 工作原则
|
|
39
38
|
|
|
40
|
-
- 以规则、specs
|
|
39
|
+
- 以规则、specs、任务目标和验收标准为准
|
|
41
40
|
- 若当前 flow 是 `bugfix-to-verification`,必须同时把 quick-fix 边界核查写进结论
|
|
42
41
|
- 先建立需求完成度清单,再做规则与质量审查
|
|
43
42
|
- 先发现问题,再判断严重程度和是否阻断交付
|
|
@@ -83,7 +82,7 @@ handoff_to: []
|
|
|
83
82
|
|
|
84
83
|
### OpenSpec 模式
|
|
85
84
|
|
|
86
|
-
- 以 `proposal/specs/
|
|
85
|
+
- 以 `proposal/specs/tasks` 和当前实现为主输入
|
|
87
86
|
- 输出 `openspec/changes/<change-id>/checklist.md` 与 `iterations.md`
|
|
88
87
|
- 继续承担归档前放行门禁
|
|
89
88
|
|
|
@@ -22,7 +22,6 @@ reads:
|
|
|
22
22
|
- .agents/rules/
|
|
23
23
|
- openspec/changes/<change-id>/proposal.md
|
|
24
24
|
- openspec/changes/<change-id>/specs/
|
|
25
|
-
- openspec/changes/<change-id>/design.md
|
|
26
25
|
- openspec/changes/<change-id>/tasks.md
|
|
27
26
|
writes:
|
|
28
27
|
- code
|
|
@@ -41,7 +40,7 @@ handoff_to:
|
|
|
41
40
|
|
|
42
41
|
## 工作原则
|
|
43
42
|
|
|
44
|
-
- 先读 `proposal.md`、`specs
|
|
43
|
+
- 先读 `proposal.md`、`specs/` 和 `tasks.md`,再动代码
|
|
45
44
|
- 若当前 flow 是 `bugfix-to-verification`,优先读 `bugfix.md`、用户原始输入和仓库规则,再做最小修复
|
|
46
45
|
- 先按 `rules` 和 `repo_conventions` 判断目录、路由、API、状态、样式落点,再选 skill
|
|
47
46
|
- 项目规则高于 skill 示例;如果 skill 样例与当前项目约定冲突,以规则为准
|
|
@@ -49,7 +48,7 @@ handoff_to:
|
|
|
49
48
|
- 按技术栈选择对应 profile skill,不混用无关框架做法
|
|
50
49
|
- 修改范围尽量贴近本次变更,不顺手大改无关代码
|
|
51
50
|
- 若 verification 失败触发 auto-fix,只修失败步骤对应的问题,不新增功能、不顺手重构
|
|
52
|
-
- 若 `proposal.md`、`specs
|
|
51
|
+
- 若 `proposal.md`、`specs/` 或 `tasks.md` 缺失,必须退回要求补齐,不能跳过需求阶段直接实现
|
|
53
52
|
- 优先执行协议下发的 `project_context / repo_conventions / implementation_contract`
|
|
54
53
|
- 实现方式必须由 `role_skill_contract` 和 `role_rule_contract` 共同约束,而不是自由发挥
|
|
55
54
|
|
|
@@ -77,7 +76,7 @@ handoff_to:
|
|
|
77
76
|
|
|
78
77
|
### OpenSpec 模式
|
|
79
78
|
|
|
80
|
-
- 输入以 `proposal.md / specs/ /
|
|
79
|
+
- 输入以 `proposal.md / specs/ / tasks.md` 为准
|
|
81
80
|
- 输出以 `code + implementation-notes` 为准
|
|
82
81
|
- 不得跳过需求收敛产物直接写实现
|
|
83
82
|
|