@gong-ym/ai-spec-auto 0.2.15 → 0.2.17
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/task-orchestrator-run-plan-template.md +2 -2
- 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 +7 -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 +1 -1
- package/bin/refresh-command.js +212 -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`
|
|
@@ -236,8 +236,8 @@ description: 定义 task-orchestrator 在首次识别任务时必须输出的最
|
|
|
236
236
|
对于 `prd-to-delivery(需求到交付)`:
|
|
237
237
|
|
|
238
238
|
- 首轮 `run-plan(运行计划)` 必须确定稳定 `change_id(变更 ID)`
|
|
239
|
-
- 首轮 `run-plan(运行计划)` 必须显式带出 `proposal/specs/
|
|
240
|
-
- 未存在 `proposal.md`、`specs
|
|
239
|
+
- 首轮 `run-plan(运行计划)` 必须显式带出 `proposal/specs/tasks/checklist/iterations` 的目标路径
|
|
240
|
+
- 未存在 `proposal.md`、`specs/` 与 `tasks.md` 时,不得交给 `frontend-implementer(前端实现专家)`
|
|
241
241
|
- 未存在 `checklist.md` 与 `iterations.md` 时,不得进入 `complete(完成)`
|
|
242
242
|
|
|
243
243
|
## 6. 示例
|
|
@@ -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
|
|
|
@@ -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
|
|
|
@@ -52,8 +51,7 @@ handoff_to:
|
|
|
52
51
|
4. 若输入包含设计稿、视觉还原或复杂交互,先调用 `design-analysis`
|
|
53
52
|
5. 使用 `create-proposal` 生成或补全 `proposal.md`
|
|
54
53
|
6. 生成增量规范 `specs/<domain>/spec.md`,必要时拆成多个 domain
|
|
55
|
-
7. 生成 `
|
|
56
|
-
8. 生成 `tasks.md`,把关键规则约束转成可执行任务,而不是抽象建议
|
|
54
|
+
7. 生成 `tasks.md`,把关键规则约束转成可执行任务,而不是抽象建议
|
|
57
55
|
9. 列出关键假设、依赖项和待确认问题,并区分是否阻断实现
|
|
58
56
|
10. 在 `openspec/changes/<change-id>/` 下落盘完成前,不得把本轮标记为 done
|
|
59
57
|
|
|
@@ -62,11 +60,11 @@ handoff_to:
|
|
|
62
60
|
- 优先读取协议下发的 `project_context(项目事实)` 与 `repo_conventions(仓库约定)`
|
|
63
61
|
- 按 `role_rule_contract` 理解当前项目允许的页面、路由、API、mock、样式落点
|
|
64
62
|
- 按 `role_skill_contract.primary_skills` 决定先读哪个技能:
|
|
65
|
-
- `create-proposal` 负责 proposal/specs/
|
|
63
|
+
- `create-proposal` 负责 proposal/specs/tasks 的结构化产出
|
|
66
64
|
- `design-analysis` 仅在存在 UI/页面结构需求时辅助梳理
|
|
67
|
-
- 对于项目规则中已经明确的事实,应直接写入 proposal/specs/
|
|
65
|
+
- 对于项目规则中已经明确的事实,应直接写入 proposal/specs/tasks 或 assumptions,而不是重复标为 missing_inputs
|
|
68
66
|
- 若 `rules` 与某个 skill 示例写法冲突,以当前项目规则与目录约定为准
|
|
69
|
-
- 复杂交互场景下,应优先把搜索、表单、弹窗、批量操作等交互口径写成摘要,再写入 proposal /
|
|
67
|
+
- 复杂交互场景下,应优先把搜索、表单、弹窗、批量操作等交互口径写成摘要,再写入 proposal / tasks
|
|
70
68
|
|
|
71
69
|
## 输出标准
|
|
72
70
|
|
|
@@ -85,14 +83,6 @@ handoff_to:
|
|
|
85
83
|
- 至少一个 domain;必要时可同时存在 `ui/`、`api/`、`runtime/` 等多个 domain
|
|
86
84
|
- 每份 spec 至少包含一个可验证场景
|
|
87
85
|
|
|
88
|
-
`design.md` 至少应包含:
|
|
89
|
-
|
|
90
|
-
- 中文标题:实现落点、目录与模块组织、接口或状态承载方式、风险与取舍
|
|
91
|
-
- 当前仓库中的目录/路由/API/状态/样式真实落点
|
|
92
|
-
- 需要复用的现有结构与避免引入的无关重构
|
|
93
|
-
- 与 specs 对应的实现边界和关键技术约束
|
|
94
|
-
- 真实接口与 mock-first 的边界说明
|
|
95
|
-
|
|
96
86
|
`tasks.md` 至少应包含:
|
|
97
87
|
|
|
98
88
|
- 中文标题:任务清单
|
|
@@ -108,7 +98,6 @@ handoff_to:
|
|
|
108
98
|
|
|
109
99
|
- `proposal.md` 使用短版:目标、范围、默认假设、风险
|
|
110
100
|
- `specs/<domain>/spec.md` 使用短版:只写当前变更需要的增量规范与场景
|
|
111
|
-
- `design.md` 使用短版:只保留真实实现落点与关键约束
|
|
112
101
|
- `tasks.md` 使用短版:3-5 条可执行任务
|
|
113
102
|
- 标题统一使用中文,不混入英文章节名
|
|
114
103
|
- 仍需真实落盘,不允许省略
|
|
@@ -130,7 +119,7 @@ handoff_to:
|
|
|
130
119
|
- 不直接跳过需求澄清进入编码
|
|
131
120
|
- 不把显著风险写成“后续再看”
|
|
132
121
|
- 不输出只有标题、没有约束和边界的空模板
|
|
133
|
-
- 不在未生成 `proposal.md`、`specs
|
|
122
|
+
- 不在未生成 `proposal.md`、`specs/` 和 `tasks.md` 时宣称需求阶段完成
|
|
134
123
|
|
|
135
124
|
## 交接
|
|
136
125
|
|
|
@@ -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` 中的任务完成状态:
|