@aipper/aiws-spec 0.0.27 → 0.0.29

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.
Files changed (107) hide show
  1. package/docs/cli-interface.md +10 -12
  2. package/docs/opencode-autonomous-swarm.md +178 -0
  3. package/docs/opencode-omo-adapter.md +123 -4
  4. package/docs/opencode-omo-validation-checklist.md +47 -0
  5. package/docs/opencode-subagent-first.md +187 -0
  6. package/docs/workflow-delegation-context-injection.md +217 -0
  7. package/docs/workflow-delegation-contracts.json +68 -1
  8. package/docs/workflow-delegation-contracts.md +3 -0
  9. package/docs/workflow-delegation-contracts.schema.json +95 -0
  10. package/docs/workflow-governance-rules.json +47 -6
  11. package/docs/workflow-governance-rules.md +7 -6
  12. package/docs/workflow-governance-rules.schema.json +39 -1
  13. package/docs/workflow-router-rules.json +63 -8
  14. package/docs/workflow-router-rules.md +15 -6
  15. package/docs/workflow-stage-contracts.json +16 -8
  16. package/docs/workflow-stage-contracts.md +7 -7
  17. package/package.json +1 -1
  18. package/templates/workspace/.agents/skills/using-aiws/SKILL.md +22 -8
  19. package/templates/workspace/.agents/skills/ws-commit/SKILL.md +6 -118
  20. package/templates/workspace/.agents/skills/ws-deliver/SKILL.md +6 -218
  21. package/templates/workspace/.agents/skills/ws-dev/SKILL.md +52 -141
  22. package/templates/workspace/.agents/skills/ws-finish/SKILL.md +6 -205
  23. package/templates/workspace/.agents/skills/ws-handoff/SKILL.md +10 -44
  24. package/templates/workspace/.agents/skills/ws-intake/SKILL.md +87 -0
  25. package/templates/workspace/.agents/skills/ws-plan/SKILL.md +15 -9
  26. package/templates/workspace/.agents/skills/ws-plan-verify/SKILL.md +6 -49
  27. package/templates/workspace/.agents/skills/ws-review/SKILL.md +6 -1
  28. package/templates/workspace/.agents/skills/ws-verify-before-complete/SKILL.md +12 -53
  29. package/templates/workspace/.claude/commands/ws-intake.md +19 -0
  30. package/templates/workspace/.claude/commands/ws-review.md +5 -1
  31. package/templates/workspace/.claude/settings.json.example +26 -0
  32. package/templates/workspace/.claude/skills/ws-commit/SKILL.md +6 -118
  33. package/templates/workspace/.claude/skills/ws-deliver/SKILL.md +6 -218
  34. package/templates/workspace/.claude/skills/ws-dev/SKILL.md +52 -141
  35. package/templates/workspace/.claude/skills/ws-finish/SKILL.md +6 -205
  36. package/templates/workspace/.claude/skills/ws-handoff/SKILL.md +10 -44
  37. package/templates/workspace/.claude/skills/ws-intake/SKILL.md +31 -0
  38. package/templates/workspace/.claude/skills/ws-plan-verify/SKILL.md +6 -49
  39. package/templates/workspace/.claude/skills/ws-review/SKILL.md +6 -1
  40. package/templates/workspace/.claude/skills/ws-verify-before-complete/SKILL.md +12 -53
  41. package/templates/workspace/.opencode/command/ws-auto.md +33 -0
  42. package/templates/workspace/.opencode/command/ws-autonomy.md +25 -0
  43. package/templates/workspace/.opencode/command/ws-intake.md +22 -0
  44. package/templates/workspace/.opencode/command/ws-review.md +5 -1
  45. package/templates/workspace/.opencode/commands/ws-auto.md +33 -0
  46. package/templates/workspace/.opencode/commands/ws-autonomy.md +25 -0
  47. package/templates/workspace/.opencode/commands/ws-commit.md +4 -56
  48. package/templates/workspace/.opencode/commands/ws-deliver.md +10 -50
  49. package/templates/workspace/.opencode/commands/ws-finish.md +8 -65
  50. package/templates/workspace/.opencode/commands/ws-handoff.md +9 -17
  51. package/templates/workspace/.opencode/commands/ws-intake.md +22 -0
  52. package/templates/workspace/.opencode/commands/ws-migrate.md +10 -17
  53. package/templates/workspace/.opencode/commands/ws-plan-verify.md +5 -15
  54. package/templates/workspace/.opencode/commands/ws-pull.md +6 -75
  55. package/templates/workspace/.opencode/commands/ws-push.md +7 -82
  56. package/templates/workspace/.opencode/commands/ws-review.md +5 -1
  57. package/templates/workspace/.opencode/commands/ws-submodule-setup.md +8 -47
  58. package/templates/workspace/.opencode/commands/ws-verify-before-complete.md +10 -19
  59. package/templates/workspace/.opencode/helpers/approval-whitelist-check.sh +148 -0
  60. package/templates/workspace/.opencode/helpers/approval-whitelist-run.sh +82 -0
  61. package/templates/workspace/.opencode/helpers/approval-whitelist-watchdog.sh +144 -0
  62. package/templates/workspace/.opencode/helpers/tmux-swarm-rescue.sh +56 -0
  63. package/templates/workspace/.opencode/helpers/tmux-swarm-scan.sh +46 -0
  64. package/templates/workspace/.opencode/oh-my-opencode.json.example +64 -4
  65. package/templates/workspace/.opencode/skills/using-aiws/SKILL.md +93 -77
  66. package/templates/workspace/.opencode/skills/ws-analyze/SKILL.md +1 -1
  67. package/templates/workspace/.opencode/skills/ws-auto/SKILL.md +46 -0
  68. package/templates/workspace/.opencode/skills/ws-autonomy/SKILL.md +62 -0
  69. package/templates/workspace/.opencode/skills/ws-bugfix/SKILL.md +1 -1
  70. package/templates/workspace/.opencode/skills/ws-commit/SKILL.md +6 -118
  71. package/templates/workspace/.opencode/skills/ws-delegate/SKILL.md +93 -40
  72. package/templates/workspace/.opencode/skills/ws-deliver/SKILL.md +6 -218
  73. package/templates/workspace/.opencode/skills/ws-dev/SKILL.md +53 -142
  74. package/templates/workspace/.opencode/skills/ws-dev-lite/SKILL.md +19 -6
  75. package/templates/workspace/.opencode/skills/ws-finish/SKILL.md +6 -205
  76. package/templates/workspace/.opencode/skills/ws-frontend-design/SKILL.md +1 -1
  77. package/templates/workspace/.opencode/skills/ws-handoff/SKILL.md +10 -44
  78. package/templates/workspace/.opencode/skills/ws-intake/SKILL.md +40 -0
  79. package/templates/workspace/.opencode/skills/ws-migrate/SKILL.md +6 -42
  80. package/templates/workspace/.opencode/skills/ws-plan/SKILL.md +4 -2
  81. package/templates/workspace/.opencode/skills/ws-plan-verify/SKILL.md +6 -49
  82. package/templates/workspace/.opencode/skills/ws-preflight/SKILL.md +1 -1
  83. package/templates/workspace/.opencode/skills/ws-pull/SKILL.md +8 -109
  84. package/templates/workspace/.opencode/skills/ws-push/SKILL.md +8 -100
  85. package/templates/workspace/.opencode/skills/ws-quality-review/SKILL.md +1 -1
  86. package/templates/workspace/.opencode/skills/ws-req-change/SKILL.md +1 -1
  87. package/templates/workspace/.opencode/skills/ws-req-contract-sync/SKILL.md +1 -1
  88. package/templates/workspace/.opencode/skills/ws-req-contract-validate/SKILL.md +1 -1
  89. package/templates/workspace/.opencode/skills/ws-req-flow-sync/SKILL.md +1 -1
  90. package/templates/workspace/.opencode/skills/ws-req-review/SKILL.md +1 -1
  91. package/templates/workspace/.opencode/skills/ws-review/SKILL.md +14 -3
  92. package/templates/workspace/.opencode/skills/ws-rule/SKILL.md +1 -1
  93. package/templates/workspace/.opencode/skills/ws-spec-review/SKILL.md +1 -1
  94. package/templates/workspace/.opencode/skills/ws-submodule-setup/SKILL.md +10 -57
  95. package/templates/workspace/.opencode/skills/ws-verify-before-complete/SKILL.md +12 -53
  96. package/templates/workspace/AGENTS.md +12 -5
  97. package/templates/workspace/AI_PROJECT.md +1 -1
  98. package/templates/workspace/changes/README.md +9 -12
  99. package/templates/workspace/manifest.json +277 -203
  100. package/templates/workspace/.agents/skills/ws-migrate/SKILL.md +0 -54
  101. package/templates/workspace/.agents/skills/ws-pull/SKILL.md +0 -119
  102. package/templates/workspace/.agents/skills/ws-push/SKILL.md +0 -110
  103. package/templates/workspace/.agents/skills/ws-submodule-setup/SKILL.md +0 -65
  104. package/templates/workspace/.claude/skills/ws-migrate/SKILL.md +0 -54
  105. package/templates/workspace/.claude/skills/ws-pull/SKILL.md +0 -119
  106. package/templates/workspace/.claude/skills/ws-push/SKILL.md +0 -110
  107. package/templates/workspace/.claude/skills/ws-submodule-setup/SKILL.md +0 -65
@@ -1,9 +1,47 @@
1
1
  {
2
2
  "type": "object",
3
- "required": ["version", "description", "governanceRules", "guidanceRules"],
3
+ "required": ["version", "description", "workflowStateSuffix", "stateEnum", "governanceRules", "guidanceRules"],
4
4
  "properties": {
5
5
  "version": { "type": "integer" },
6
6
  "description": { "type": "string", "minLength": 1 },
7
+ "workflowStateSuffix": {
8
+ "type": "object",
9
+ "required": ["description", "values", "stateSuffixMap"],
10
+ "properties": {
11
+ "description": { "type": "string", "minLength": 1 },
12
+ "values": {
13
+ "type": "array",
14
+ "minItems": 6,
15
+ "items": { "type": "string", "pattern": "^(intake|planning|dev|review|deliver|completed)$" }
16
+ },
17
+ "stateSuffixMap": {
18
+ "type": "object",
19
+ "minProperties": 6,
20
+ "additionalProperties": { "type": "string", "pattern": "^\\[workflow-state:session:[a-z]+\\]$" }
21
+ }
22
+ },
23
+ "additionalProperties": false
24
+ },
25
+ "stateEnum": {
26
+ "type": "object",
27
+ "required": ["values", "stageMapping"],
28
+ "properties": {
29
+ "values": {
30
+ "type": "array",
31
+ "minItems": 6,
32
+ "items": { "type": "string", "pattern": "^(intake|planning|dev|review|deliver|completed)$" }
33
+ },
34
+ "stageMapping": {
35
+ "type": "object",
36
+ "minProperties": 6,
37
+ "additionalProperties": {
38
+ "type": "array",
39
+ "items": { "type": "string" }
40
+ }
41
+ }
42
+ },
43
+ "additionalProperties": false
44
+ },
7
45
  "governanceRules": {
8
46
  "type": "array",
9
47
  "minItems": 1,
@@ -16,7 +16,7 @@
16
16
  "kind": "skill",
17
17
  "summary": "默认 workflow bootstrap/router:先读真值,再把任务路由到正确的 `ws-*` 入口。",
18
18
  "outputContract": [
19
- "Root / Found / Missing",
19
+ "Root / Found / Missing / Intent status",
20
20
  "Task intent / Binding status / Route",
21
21
  "Why / Next"
22
22
  ]
@@ -32,6 +32,11 @@
32
32
  "action": "判断当前任务是在做需求变更、实现、评审、收尾还是交接。",
33
33
  "why": "先判 workflow,再决定进入哪个 skill;不能一开始就跳进实现。"
34
34
  },
35
+ {
36
+ "step": "check_intent_freeze",
37
+ "action": "判断需求是否已经冻结;若存在多条待确认问题或需要多轮沟通,先进入 intake 阶段。",
38
+ "why": "中大型需求在计划前往往需要多轮澄清;router 应该先把问题冻结,而不是把沟通负担全部塞给 `ws-plan`。"
39
+ },
35
40
  {
36
41
  "step": "check_binding",
37
42
  "action": "检查任务是否具备 `Req_ID` / `Problem_ID` / change 上下文 / Verify 入口等最小绑定。",
@@ -60,6 +65,14 @@
60
65
  "gate": "必须先问 1-3 个关键澄清问题,然后停止。",
61
66
  "rationale": "router 的职责是阻断模糊任务,而不是用猜测替代路由。"
62
67
  },
68
+ {
69
+ "id": "needs_intake",
70
+ "intent": "需求存在多条待确认问题,尚未冻结",
71
+ "match": "任务是新需求或中大型变更;目标方向大致明确,但存在多条待确认问题、需要逐条沟通,或用户明确要求先多轮澄清再进入计划。",
72
+ "routeTo": "ws-intake",
73
+ "gate": "先逐条澄清并冻结结论;未形成 intake 草案前不进入 `ws-plan`。",
74
+ "rationale": "`ws-intake` 负责把多轮需求沟通收敛为轻量草案,避免 `ws-plan` 同时承担反复澄清与正式计划落盘。"
75
+ },
63
76
  {
64
77
  "id": "requirements_change",
65
78
  "intent": "需求/验收/合同变更",
@@ -79,7 +92,7 @@
79
92
  {
80
93
  "id": "finish_request",
81
94
  "intent": "收尾/合并/推送/cleanup",
82
- "match": "用户要求 finish、merge、push、收尾、交付完成、清理 worktree 或 branch。",
95
+ "match": "用户要求 finish、merge、push、收尾、交付完成、清理 change 分支。",
83
96
  "routeTo": "ws-finish",
84
97
  "gate": "必须满足 finish gate,不能跳过 validate / push / cleanup。",
85
98
  "rationale": "finish 是独立治理阶段,不能与普通实现混用。"
@@ -95,10 +108,10 @@
95
108
  {
96
109
  "id": "plan_first",
97
110
  "intent": "中大型实现或需要建立 change 上下文",
98
- "match": "任务是多步实现、跨文件、跨模块、需要方案、需要新建 change/worktree,或当前还没有计划工件。",
111
+ "match": "任务是多步实现、跨文件、跨模块、需要方案、需要新建 change 分支,且需求已经冻结或已有可消费的 intake 草案。",
99
112
  "routeTo": "ws-plan",
100
113
  "gate": "plan 过 gate 前不进入 `ws-dev`。",
101
- "rationale": "medium/complex 任务必须先生成可落盘计划,避免 router 直接跳进实现。"
114
+ "rationale": "medium/complex 任务在需求冻结后必须先生成可落盘计划,避免 router 直接跳进实现。"
102
115
  },
103
116
  {
104
117
  "id": "direct_implementation",
@@ -107,6 +120,22 @@
107
120
  "routeTo": "ws-dev",
108
121
  "gate": "若执行中发现复杂度升高,必须回退到 `ws-plan`。",
109
122
  "rationale": "router 允许明确的小步任务直接实现,但必须保留回退计划阶段的门;若用户明确要走轻量入口,可在实现阶段显式使用 `ws-dev-lite` 作为 `ws-dev` 的 facade。"
123
+ },
124
+ {
125
+ "id": "design_first",
126
+ "intent": "需要先出设计方案",
127
+ "match": "任务涉及新流程、新模块、新架构或对现有架构有显著影响的方向决策,需要先出设计方案再进入实现。",
128
+ "routeTo": "ws-design",
129
+ "gate": "design 未完成 review 前,不进入 `ws-plan`。",
130
+ "rationale": "复杂或高影响改动应先出设计方案,让设计过审后再投入实现,避免返工。"
131
+ },
132
+ {
133
+ "id": "spec_update",
134
+ "intent": "需要更新规范/文档/验收标准",
135
+ "match": "任务涉及更新 AI_PROJECT.md、REQUIREMENTS.md、AI_WORKSPACE.md 中的规范说明、验收标准或 contract 文档。",
136
+ "routeTo": "ws-spec-update",
137
+ "gate": "spec 更新必须先过 review,再同步到真值文件。",
138
+ "rationale": "规范更新与功能变更不同,router 应优先引导到 spec 维护链而非直接实现。"
110
139
  }
111
140
  ],
112
141
  "routeCases": [
@@ -126,6 +155,14 @@
126
155
  "expectedRoute": "clarify",
127
156
  "why": "这种场景必须先澄清意图和绑定,不能猜测实现。"
128
157
  },
158
+ {
159
+ "id": "case_needs_intake",
160
+ "scenario": "任务方向大致明确,但存在多条待确认问题,需要逐条沟通后再计划。",
161
+ "request": "做一个新的 change intake 流程,我想先一条一条把需求和边界聊清楚,再进入正式计划。",
162
+ "expectedRuleId": "needs_intake",
163
+ "expectedRoute": "ws-intake",
164
+ "why": "这类需求不是完全不清晰,但还没有冻结,适合先走 intake。"
165
+ },
129
166
  {
130
167
  "id": "case_requirements_change",
131
168
  "scenario": "任务要修改 REQUIREMENTS、requirements CSV 或 workflow 真值。",
@@ -145,7 +182,7 @@
145
182
  {
146
183
  "id": "case_finish_request",
147
184
  "scenario": "用户要求合并、push、cleanup 或 finish 当前 change。",
148
- "request": "把 demo-change finish 掉并 push,顺便 cleanup worktree。",
185
+ "request": "把 demo-change finish 掉并 push,顺便 cleanup。",
149
186
  "expectedRuleId": "finish_request",
150
187
  "expectedRoute": "ws-finish",
151
188
  "why": "finish 是独立治理阶段,必须先走 finish gate。"
@@ -160,7 +197,7 @@
160
197
  },
161
198
  {
162
199
  "id": "case_plan_first",
163
- "scenario": "任务是跨文件、多步实现,且需要先建立 change/worktree 或方案。",
200
+ "scenario": "任务是跨文件、多步实现,且需要先建立 change 分支或方案。",
164
201
  "request": "实现 dashboard 的阶段治理视图并补测试,需要新建 change 和计划。",
165
202
  "expectedRuleId": "plan_first",
166
203
  "expectedRoute": "ws-plan",
@@ -173,19 +210,37 @@
173
210
  "expectedRuleId": "direct_implementation",
174
211
  "expectedRoute": "ws-dev",
175
212
  "why": "小步明确实现允许直接进入 dev;若用户明确要轻量直修,可进一步显式使用 ws-dev-lite,但治理归属仍收敛到 ws-dev。"
213
+ },
214
+ {
215
+ "id": "case_design_first",
216
+ "scenario": "任务需要先出设计方案再进入实现。",
217
+ "request": "设计 dashboard 架构,出方案后再实现。",
218
+ "expectedRuleId": "design_first",
219
+ "expectedRoute": "ws-design",
220
+ "why": "高影响改动应先出设计方案,过审后再投入实现。"
221
+ },
222
+ {
223
+ "id": "case_spec_update",
224
+ "scenario": "任务涉及更新规范或验收标准文档。",
225
+ "request": "更新 AI_WORKSPACE.md 中的验证命令说明。",
226
+ "expectedRuleId": "spec_update",
227
+ "expectedRoute": "ws-spec-update",
228
+ "why": "规范更新应先走 spec 维护链,直接实现会绕过 review 门禁。"
176
229
  }
177
230
  ],
178
231
  "clarificationTriggers": [
179
232
  "用户只说“继续”“优化一下”“看一下”,但没有明确目标对象或当前阶段。",
180
233
  "无法把任务绑定到 `Req_ID` / `Problem_ID` / change 上下文。",
181
234
  "没有可复现验证入口,且无法从 `AI_WORKSPACE.md` 推断。",
182
- "当前描述同时包含需求变更、实现和收尾,但没有明确优先级。"
235
+ "当前描述同时包含需求变更、实现和收尾,但没有明确优先级。",
236
+ "同一个任务包含多条待确认问题,且用户希望逐条、多轮沟通。"
183
237
  ],
184
238
  "universalRules": [
185
239
  "router 自己不是实现阶段;先判定 workflow,再进入具体 `ws-*` skill。",
186
240
  "除缺失真值场景外,router 至少要给出一个明确的 `Route:` 结果或明确的澄清问题。",
187
241
  "当 `routeTo=clarify` 时,必须停止,不直接写代码。",
188
- "当 `routeTo=ws-plan` / `ws-dev` / `ws-review` / `ws-finish` / `ws-handoff` / `ws-req-review` 时,后续行为必须遵循对应 skill 契约。",
242
+ "当 `routeTo=ws-intake` 时,必须先逐条冻结问题并产出 intake 草案;不要跳过到 `ws-plan`。",
243
+ "当 `routeTo=ws-plan` / `ws-dev` / `ws-review` / `ws-finish` / `ws-handoff` / `ws-req-review` / `ws-intake` 时,后续行为必须遵循对应 skill 契约。",
189
244
  "任何 route 都不能绕过 `AI_PROJECT.md` / `REQUIREMENTS.md` / `AI_WORKSPACE.md`。"
190
245
  ],
191
246
  "notes": [
@@ -22,7 +22,7 @@ router 在做任何 workflow 判断前,必须先读取:
22
22
  - kind: `skill`
23
23
  - summary: 默认 workflow bootstrap/router:先读真值,再把任务路由到正确的 `ws-*` 入口。
24
24
  - output contract:
25
- - Root / Found / Missing
25
+ - Root / Found / Missing / Intent status
26
26
  - Task intent / Binding status / Route
27
27
  - Why / Next
28
28
 
@@ -32,6 +32,7 @@ router 在做任何 workflow 判断前,必须先读取:
32
32
  | --- | --- | --- |
33
33
  | `read_truths` | 先定位项目根,并读取 `AI_PROJECT.md` / `REQUIREMENTS.md` / `AI_WORKSPACE.md`。 | router 不能绕过真值文件,否则会把 workflow 判断建立在会话猜测上。 |
34
34
  | `classify_intent` | 判断当前任务是在做需求变更、实现、评审、收尾还是交接。 | 先判 workflow,再决定进入哪个 skill;不能一开始就跳进实现。 |
35
+ | `check_intent_freeze` | 判断需求是否已经冻结;若存在多条待确认问题或需要多轮沟通,先进入 intake 阶段。 | 中大型需求在计划前往往需要多轮澄清;router 应该先把问题冻结,而不是把沟通负担全部塞给 `ws-plan`。 |
35
36
  | `check_binding` | 检查任务是否具备 `Req_ID` / `Problem_ID` / change 上下文 / Verify 入口等最小绑定。 | 缺失绑定时必须阻断或回退到 `ws-plan`,避免无归因实现。 |
36
37
  | `route_or_clarify` | 给出单一路由结果;若意图不明确,则先问关键澄清问题并停止。 | default-routed workflow 的关键不是自动执行,而是避免模糊任务直接进入实现。 |
37
38
 
@@ -41,12 +42,15 @@ router 在做任何 workflow 判断前,必须先读取:
41
42
  | --- | --- | --- | --- | --- | --- |
42
43
  | `missing_truths` | 仓库未初始化或真值缺失 | 缺失任一真值文件,或无法确定项目根目录。 | `ws-preflight` | 先补齐真值或确认项目根,不进入实现。 | 所有后续 skill 都依赖真值文件;缺失时 router 只能回退到 preflight/init 路径。 |
43
44
  | `unclear_intent` | 用户目标、归因或验收不清晰 | 无法明确当前是需求变更、实现、评审、finish 还是 handoff;或无法明确 `Req_ID` / `Problem_ID` / Verify。 | `clarify` | 必须先问 1-3 个关键澄清问题,然后停止。 | router 的职责是阻断模糊任务,而不是用猜测替代路由。 |
45
+ | `needs_intake` | 需求存在多条待确认问题,尚未冻结 | 任务是新需求或中大型变更;目标方向大致明确,但存在多条待确认问题、需要逐条沟通,或用户明确要求先多轮澄清再进入计划。 | `ws-intake` | 先逐条澄清并冻结结论;未形成 intake 草案前不进入 `ws-plan`。 | `ws-intake` 负责把多轮需求沟通收敛为轻量草案,避免 `ws-plan` 同时承担反复澄清与正式计划落盘。 |
44
46
  | `requirements_change` | 需求/验收/合同变更 | 任务涉及 `REQUIREMENTS.md`、requirements CSV、spec contract、验收标准或 workflow 真值变更。 | `ws-req-review` | 先做需求评审,再决定是否进入 `ws-plan` / `ws-dev`。 | 需求真值变更必须先过 review,不能直接编码。 |
45
47
  | `review_request` | 审计/评审/找风险 | 用户明确要求 review、audit、评审、找 bug、识别风险或检查回归。 | `ws-review` | 先给 findings;除非用户另行要求,不先改代码。 | 评审任务与实现任务的输出契约不同,必须优先走 review。 |
46
- | `finish_request` | 收尾/合并/推送/cleanup | 用户要求 finish、merge、push、收尾、交付完成、清理 worktree branch。 | `ws-finish` | 必须满足 finish gate,不能跳过 validate / push / cleanup。 | finish 是独立治理阶段,不能与普通实现混用。 |
48
+ | `finish_request` | 收尾/合并/推送/cleanup | 用户要求 finish、merge、push、收尾、交付完成、清理 change 分支。 | `ws-finish` | 必须满足 finish gate,不能跳过 validate / push / cleanup。 | finish 是独立治理阶段,不能与普通实现混用。 |
47
49
  | `handoff_request` | 交接/归档总结 | 用户要求 handoff、交接说明、archive summary、会话总结或接力说明。 | `ws-handoff` | 先确认 change 已 finish 或 archive 上下文存在。 | handoff 依赖已有证据与归档上下文,不应在实现前触发。 |
48
- | `plan_first` | 中大型实现或需要建立 change 上下文 | 任务是多步实现、跨文件、跨模块、需要方案、需要新建 change/worktree,或当前还没有计划工件。 | `ws-plan` | plan 过 gate 前不进入 `ws-dev`。 | medium/complex 任务必须先生成可落盘计划,避免 router 直接跳进实现。 |
50
+ | `plan_first` | 中大型实现或需要建立 change 上下文 | 任务是多步实现、跨文件、跨模块、需要方案、需要新建 change 分支,且需求已经冻结或已有可消费的 intake 草案。 | `ws-plan` | plan 过 gate 前不进入 `ws-dev`。 | medium/complex 任务在需求冻结后必须先生成可落盘计划,避免 router 直接跳进实现。 |
49
51
  | `direct_implementation` | 小步实现/修复/配置调整 | 目标明确、归因清晰、验证入口明确,且无需先改 requirements 或单独评审。 | `ws-dev` | 若执行中发现复杂度升高,必须回退到 `ws-plan`。 | router 允许明确的小步任务直接实现,但必须保留回退计划阶段的门;若用户明确要走轻量入口,可在实现阶段显式使用 `ws-dev-lite` 作为 `ws-dev` 的 facade。 |
52
+ | `design_first` | 需要先出设计方案 | 任务涉及新流程、新模块、新架构或对现有架构有显著影响的方向决策,需要先出设计方案再进入实现。 | `ws-design` | design 未完成 review 前,不进入 `ws-plan`。 | 复杂或高影响改动应先出设计方案,让设计过审后再投入实现,避免返工。 |
53
+ | `spec_update` | 需要更新规范/文档/验收标准 | 任务涉及更新 AI_PROJECT.md、REQUIREMENTS.md、AI_WORKSPACE.md 中的规范说明、验收标准或 contract 文档。 | `ws-spec-update` | spec 更新必须先过 review,再同步到真值文件。 | 规范更新与功能变更不同,router 应优先引导到 spec 维护链而非直接实现。 |
50
54
 
51
55
  ## Route Cases
52
56
 
@@ -54,12 +58,15 @@ router 在做任何 workflow 判断前,必须先读取:
54
58
  | --- | --- | --- | --- | --- | --- |
55
59
  | `case_missing_truths` | 仓库未初始化或真值缺失时,不能直接开始实现。 | 在一个还没执行 aiws init 的仓库里继续开发这个功能。 | `missing_truths` | `ws-preflight` | 缺失真值文件时只能先补齐 preflight/init 路径。 |
56
60
  | `case_unclear_continue` | 用户只说继续,但没有明确当前 change、归因或验证入口。 | 继续。 | `unclear_intent` | `clarify` | 这种场景必须先澄清意图和绑定,不能猜测实现。 |
61
+ | `case_needs_intake` | 任务方向大致明确,但存在多条待确认问题,需要逐条沟通后再计划。 | 做一个新的 change intake 流程,我想先一条一条把需求和边界聊清楚,再进入正式计划。 | `needs_intake` | `ws-intake` | 这类需求不是完全不清晰,但还没有冻结,适合先走 intake。 |
57
62
  | `case_requirements_change` | 任务要修改 REQUIREMENTS、requirements CSV 或 workflow 真值。 | 更新 REQUIREMENTS.md 和 requirements/requirements-issues.csv,补充验收标准。 | `requirements_change` | `ws-req-review` | 需求真值变更必须先做需求评审。 |
58
63
  | `case_review_request` | 用户明确要求 review、审计、找风险或检查回归。 | review 这批改动,先给我风险和回归点,不要先改代码。 | `review_request` | `ws-review` | 评审任务的输出契约是 findings,不应直接进入实现。 |
59
- | `case_finish_request` | 用户要求合并、push、cleanup 或 finish 当前 change。 | 把 demo-change finish 掉并 push,顺便 cleanup worktree。 | `finish_request` | `ws-finish` | finish 是独立治理阶段,必须先走 finish gate。 |
64
+ | `case_finish_request` | 用户要求合并、push、cleanup 或 finish 当前 change。 | 把 demo-change finish 掉并 push,顺便 cleanup。 | `finish_request` | `ws-finish` | finish 是独立治理阶段,必须先走 finish gate。 |
60
65
  | `case_handoff_request` | 用户要求 handoff、交接说明、archive summary 或接力文档。 | 给这个 change 写 handoff,并补 archive summary。 | `handoff_request` | `ws-handoff` | handoff 依赖已有 finish/archive 上下文,不能当成普通实现。 |
61
- | `case_plan_first` | 任务是跨文件、多步实现,且需要先建立 change/worktree 或方案。 | 实现 dashboard 的阶段治理视图并补测试,需要新建 change 和计划。 | `plan_first` | `ws-plan` | 中大型实现应先落盘计划,再进入 dev。 |
66
+ | `case_plan_first` | 任务是跨文件、多步实现,且需要先建立 change 分支或方案。 | 实现 dashboard 的阶段治理视图并补测试,需要新建 change 和计划。 | `plan_first` | `ws-plan` | 中大型实现应先落盘计划,再进入 dev。 |
62
67
  | `case_direct_implementation` | 任务是小步明确修复,归因和验证入口都已清楚。 | 修复 codex install-skills 的默认路径,并补一条可复现回归。 | `direct_implementation` | `ws-dev` | 小步明确实现允许直接进入 dev;若用户明确要轻量直修,可进一步显式使用 ws-dev-lite,但治理归属仍收敛到 ws-dev。 |
68
+ | `case_design_first` | 任务需要先出设计方案再进入实现。 | 设计 dashboard 架构,出方案后再实现。 | `design_first` | `ws-design` | 高影响改动应先出设计方案,过审后再投入实现。 |
69
+ | `case_spec_update` | 任务涉及更新规范或验收标准文档。 | 更新 AI_WORKSPACE.md 中的验证命令说明。 | `spec_update` | `ws-spec-update` | 规范更新应先走 spec 维护链,直接实现会绕过 review 门禁。 |
63
70
 
64
71
  ## 必须先澄清的情形
65
72
 
@@ -67,13 +74,15 @@ router 在做任何 workflow 判断前,必须先读取:
67
74
  - 无法把任务绑定到 `Req_ID` / `Problem_ID` / change 上下文。
68
75
  - 没有可复现验证入口,且无法从 `AI_WORKSPACE.md` 推断。
69
76
  - 当前描述同时包含需求变更、实现和收尾,但没有明确优先级。
77
+ - 同一个任务包含多条待确认问题,且用户希望逐条、多轮沟通。
70
78
 
71
79
  ## 统一规则
72
80
 
73
81
  - router 自己不是实现阶段;先判定 workflow,再进入具体 `ws-*` skill。
74
82
  - 除缺失真值场景外,router 至少要给出一个明确的 `Route:` 结果或明确的澄清问题。
75
83
  - 当 `routeTo=clarify` 时,必须停止,不直接写代码。
76
- - 当 `routeTo=ws-plan` / `ws-dev` / `ws-review` / `ws-finish` / `ws-handoff` / `ws-req-review` 时,后续行为必须遵循对应 skill 契约。
84
+ - 当 `routeTo=ws-intake` 时,必须先逐条冻结问题并产出 intake 草案;不要跳过到 `ws-plan`。
85
+ - 当 `routeTo=ws-plan` / `ws-dev` / `ws-review` / `ws-finish` / `ws-handoff` / `ws-req-review` / `ws-intake` 时,后续行为必须遵循对应 skill 契约。
77
86
  - 任何 route 都不能绕过 `AI_PROJECT.md` / `REQUIREMENTS.md` / `AI_WORKSPACE.md`。
78
87
 
79
88
  ## 说明
@@ -8,6 +8,7 @@
8
8
  ],
9
9
  "standardChain": [
10
10
  "ws-preflight",
11
+ "ws-intake",
11
12
  "ws-plan",
12
13
  "ws-plan-verify",
13
14
  "ws-dev",
@@ -19,9 +20,8 @@
19
20
  ],
20
21
  "notes": [
21
22
  "ws-deliver 用于多 repo / submodule 场景的顺序提交与交付准备。",
22
- "ws-finish 用于 fast-forward 合并、push、worktree cleanup,并在完整 finish 后自动归档 change。",
23
+ "ws-finish 用于 fast-forward 合并、push、change 分支清理,并在完整 finish 后自动归档 change。",
23
24
  "ws-handoff 通常在 finish 自动归档后使用,用于查看/补充归档交接说明。",
24
- "若存在独立 change worktree,治理信号应优先读取该 worktree;若 worktree metadata 已 stale,则降级为 warning 并回退到当前 worktree。"
25
25
  ],
26
26
  "stages": [
27
27
  {
@@ -30,21 +30,29 @@
30
30
  "requiredInputs": "项目根;AI_PROJECT.md;REQUIREMENTS.md;AI_WORKSPACE.md",
31
31
  "requiredOutputs": "Root / Found / Missing / Key rules / Next",
32
32
  "blockers": "无法确定项目根;真值缺失",
33
- "next": "ws-plan 或 ws-dev"
33
+ "next": "ws-intake / ws-plan 或 ws-dev"
34
+ },
35
+ {
36
+ "stage": "ws-intake",
37
+ "goal": "逐条澄清问题并冻结需求结论,产出可被计划阶段消费的草案",
38
+ "requiredInputs": "任务描述;真值文件;当前已知绑定与约束;若已存在则读取最新 intake 草案",
39
+ "requiredOutputs": "plan/*.intake.md;Open Questions / Resolved Questions / Frozen Decisions / Draft Scope / Draft Verify / Ready for ws-plan",
40
+ "blockers": "任务目标完全无法识别;关键真值缺失;无法把当前问题收敛为 frozen 或 deferred",
41
+ "next": "继续 intake 或进入 ws-plan"
34
42
  },
35
43
  {
36
44
  "stage": "ws-plan",
37
45
  "goal": "建立 change 绑定并落盘计划",
38
- "requiredInputs": "任务描述;真值文件;proposal.md(若存在)",
46
+ "requiredInputs": "任务描述;真值文件;proposal.md(若存在);若已有则优先消费最新 intake 草案",
39
47
  "requiredOutputs": "plan/...;Bindings;Verify;Risks;Evidence;Next",
40
- "blockers": "绑定不清;dirty 工作区无法安全建 context;无法写盘",
48
+ "blockers": "绑定不清;需求尚未冻结;dirty 工作区无法安全建 context;无法写盘",
41
49
  "next": "ws-plan-verify"
42
50
  },
43
51
  {
44
52
  "stage": "ws-plan-verify",
45
- "goal": "检查计划是否满足严格契约",
53
+ "goal": "检查计划是否满足严格契约,并做多视角方案审查",
46
54
  "requiredInputs": "plan/...;proposal.md;当前 change",
47
- "requiredOutputs": "Quality gate;Fix list;可执行最小计划摘要",
55
+ "requiredOutputs": "Quality gate;Perspective findings;Fix list;可执行最小计划摘要",
48
56
  "blockers": "strict 校验失败;无法定位 change",
49
57
  "next": "修计划后重跑或进入 ws-dev"
50
58
  },
@@ -84,7 +92,7 @@
84
92
  "stage": "ws-finish",
85
93
  "goal": "安全合并、push、cleanup,并自动归档",
86
94
  "requiredInputs": "干净工作区;已提交的 change;push 目标;submodule 真值(若有)",
87
- "requiredOutputs": "Merge;Push;Worktree cleanup;Archive/Handoff;Evidence",
95
+ "requiredOutputs": "Merge;Push;Change 分支清理;Archive/Handoff;Evidence",
88
96
  "blockers": "dirty 工作区;ff 失败;submodule 无法安全 push",
89
97
  "next": "ws-handoff"
90
98
  },
@@ -12,26 +12,26 @@
12
12
 
13
13
  默认链路:
14
14
 
15
- `ws-preflight` -> `ws-plan` -> `ws-plan-verify` -> `ws-dev` -> `ws-review` -> `ws-commit` -> `ws-deliver` -> `ws-finish` -> `ws-handoff`
15
+ `ws-preflight` -> `ws-intake` -> `ws-plan` -> `ws-plan-verify` -> `ws-dev` -> `ws-review` -> `ws-commit` -> `ws-deliver` -> `ws-finish` -> `ws-handoff`
16
16
 
17
17
  说明:
18
18
  - ws-deliver 用于多 repo / submodule 场景的顺序提交与交付准备。
19
- - ws-finish 用于 fast-forward 合并、push、worktree cleanup,并在完整 finish 后自动归档 change。
19
+ - ws-finish 用于 fast-forward 合并、push、change 分支清理,并在完整 finish 后自动归档 change。
20
20
  - ws-handoff 通常在 finish 自动归档后使用,用于查看/补充归档交接说明。
21
- - 若存在独立 change worktree,治理信号应优先读取该 worktree;若 worktree metadata 已 stale,则降级为 warning 并回退到当前 worktree。
22
21
 
23
22
  ## 阶段表
24
23
 
25
24
  | Stage | 目标 | 必需输入 | 必需输出 | 阻断条件 | 下一步 |
26
25
  | --- | --- | --- | --- | --- | --- |
27
- | `ws-preflight` | 对齐真值文件与协作约束 | 项目根;AI_PROJECT.md;REQUIREMENTS.md;AI_WORKSPACE.md | Root / Found / Missing / Key rules / Next | 无法确定项目根;真值缺失 | ws-plan 或 ws-dev |
28
- | `ws-plan` | 建立 change 绑定并落盘计划 | 任务描述;真值文件;proposal.md(若存在) | plan/...;Bindings;Verify;Risks;Evidence;Next | 绑定不清;dirty 工作区无法安全建 context;无法写盘 | ws-plan-verify |
29
- | `ws-plan-verify` | 检查计划是否满足严格契约 | plan/...;proposal.md;当前 change | Quality gateFix list;可执行最小计划摘要 | strict 校验失败;无法定位 change | 修计划后重跑或进入 ws-dev |
26
+ | `ws-preflight` | 对齐真值文件与协作约束 | 项目根;AI_PROJECT.md;REQUIREMENTS.md;AI_WORKSPACE.md | Root / Found / Missing / Key rules / Next | 无法确定项目根;真值缺失 | ws-intake / ws-plan 或 ws-dev |
27
+ | `ws-intake` | 逐条澄清问题并冻结需求结论,产出可被计划阶段消费的草案 | 任务描述;真值文件;当前已知绑定与约束;若已存在则读取最新 intake 草案 | plan/*.intake.md;Open Questions / Resolved Questions / Frozen Decisions / Draft Scope / Draft Verify / Ready for ws-plan | 任务目标完全无法识别;关键真值缺失;无法把当前问题收敛为 frozen deferred | 继续 intake 或进入 ws-plan |
28
+ | `ws-plan` | 建立 change 绑定并落盘计划 | 任务描述;真值文件;proposal.md(若存在);若已有则优先消费最新 intake 草案 | plan/...;BindingsVerify;Risks;Evidence;Next | 绑定不清;需求尚未冻结;dirty 工作区无法安全建 context;无法写盘 | ws-plan-verify |
29
+ | `ws-plan-verify` | 检查计划是否满足严格契约,并做多视角方案审查 | plan/...;proposal.md;当前 change | Quality gate;Perspective findings;Fix list;可执行最小计划摘要 | strict 校验失败;无法定位 change | 修计划后重跑或进入 ws-dev |
30
30
  | `ws-dev` | 实施最小改动并验证 | 真值文件;归因目标;计划(medium/complex) | Changed;Verify;Evidence;Next | 无法归因;没有验证入口;change 上下文不安全 | ws-review / ws-commit |
31
31
  | `ws-review` | 审计规范、风险与验证完整性 | 当前 diff;验证结果;真值文件 | review 文件;Top risks;Next | 无改动可审;无法写审计证据 | ws-commit 或修复后重审 |
32
32
  | `ws-commit` | 串联 review、validate、commit 确认 | staged diff;review 证据;validate stamp;用户确认的 message | Evidence;Context;Commit | 无 staged changes;submodule dirty;validate 失败;message 未确认 | ws-deliver / ws-finish |
33
33
  | `ws-deliver` | 在 submodule 场景下完成顺序提交与证据收敛 | change 上下文;.gitmodules;submodules.targets;各 repo 状态 | submodule 提交摘要;superproject 提交摘要;Evidence | submodule 真值不完整;不在正确 change;commit 未确认 | ws-finish |
34
- | `ws-finish` | 安全合并、push、cleanup,并自动归档 | 干净工作区;已提交的 change;push 目标;submodule 真值(若有) | Merge;Push;Worktree cleanup;Archive/Handoff;Evidence | dirty 工作区;ff 失败;submodule 无法安全 push | ws-handoff |
34
+ | `ws-finish` | 安全合并、push、cleanup,并自动归档 | 干净工作区;已提交的 change;push 目标;submodule 真值(若有) | Merge;Push;Change 分支清理;Archive/Handoff;Evidence | dirty 工作区;ff 失败;submodule 无法安全 push | ws-handoff |
35
35
  | `ws-handoff` | 查看/补充可接力的归档交接说明 | 已归档的 change | changes/archive/.../handoff.md;Next | 无法定位已归档 change;handoff 无法生成或读取 | 新 change 通过 Depends_On 接力 |
36
36
 
37
37
  ## 统一规则
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aipper/aiws-spec",
3
- "version": "0.0.27",
3
+ "version": "0.0.29",
4
4
  "description": "AIWS spec and templates (single source of truth).",
5
5
  "type": "module",
6
6
  "files": [
@@ -9,6 +9,7 @@ description: 默认 workflow bootstrap/router:先读真值,再路由到正
9
9
  - 作为默认入口,先读取 `AI_PROJECT.md` / `REQUIREMENTS.md` / `AI_WORKSPACE.md`
10
10
  - 先判定当前任务属于哪个 workflow,再进入具体 `ws-*` skill
11
11
  - 若任务意图、归因或验证入口不明确:先澄清,不直接进入实现
12
+ - 若任务方向大致明确但仍有多条待确认问题:先进入 `$ws-intake` 冻结需求,再进入计划
12
13
 
13
14
  阶段定位:
14
15
  - bootstrap/router 阶段;负责 workflow 分流,而不是直接完成实现。
@@ -23,6 +24,7 @@ description: 默认 workflow bootstrap/router:先读真值,再路由到正
23
24
  必需输出:
24
25
  - `Root:` 当前项目根
25
26
  - `Found:` 实际读取到的真值文件
27
+ - `Intent status:` 当前需求是否已经冻结
26
28
  - `Task intent:` 当前任务意图分类
27
29
  - `Binding:` `Req_ID` / `Problem_ID` / change 上下文是否清晰
28
30
  - `Route:` 选中的下一步 skill
@@ -48,18 +50,28 @@ description: 默认 workflow bootstrap/router:先读真值,再路由到正
48
50
  - 输出下一步:先 `aiws init .`(或 `npx @aipper/aiws init .`),然后重新执行 `$using-aiws`
49
51
  - 此时 route 视为 `$ws-preflight`
50
52
  3) 根据 `packages/spec/docs/workflow-router-rules.json` 判定任务属于哪一类:
51
- - 需求/验收/合同变更:`$ws-req-review`
52
- - 评审/审计/找风险:`$ws-review`
53
- - finish / merge / push / cleanup:`$ws-finish`
54
- - handoff / archive summary:`$ws-handoff`
55
- - 中大型实现、需要方案、需要 change/worktree:`$ws-plan`
53
+ - 需求/验收/合同变更:`$ws-req-review`
54
+ - 评审/审计/找风险:`$ws-review`
55
+ - finish / merge / push / cleanup:`$ws-finish`
56
+ - handoff / archive summary:`$ws-handoff`
57
+ - 新需求或中大型变更,且存在多条待确认问题 / 用户要求逐条多轮沟通:`$ws-intake`
58
+ - 需要先出设计方案(design 未过审前不进入实现):`$ws-design`
59
+ - 需要更新规范/验收标准(必须先过 review):`$ws-spec-update`
60
+ - 中大型实现、需要方案、需要 change/worktree,且需求已经冻结:`$ws-plan`
56
61
  - 小步明确实现/修复/配置调整:`$ws-dev`(若是 simple/local 单点修复,且用户明确希望走轻量入口,可显式进入 `$ws-dev-lite`)
57
62
  4) 若任务意图或归因不明确:
58
63
  - 只问 1-3 个关键澄清问题
59
64
  - 明确写出缺的是什么:意图、`Req_ID` / `Problem_ID`、verify、change 上下文
60
65
  - 然后停止;不要直接写代码
61
- 5) 若已确定 route:
66
+ 5) 若任务方向大致明确,但同一个任务包含多条待确认问题、范围尚未冻结,或用户明确说“想一条一条聊清楚再计划”:
67
+ - 输出 `Intent status: not_frozen`
68
+ - `Route: $ws-intake`
69
+ - `Why:` 说明当前不适合直接进入 `$ws-plan`
70
+ - `Next:` 进入 `$ws-intake`
71
+ - 然后在同一轮中继续遵循 `$ws-intake` 的契约
72
+ 6) 若已确定 route:
62
73
  - 先输出:
74
+ - `Intent status:`
63
75
  - `Task intent:`
64
76
  - `Binding:`
65
77
  - `Route:`
@@ -69,17 +81,19 @@ description: 默认 workflow bootstrap/router:先读真值,再路由到正
69
81
  - 否则:
70
82
  - `Next:` 进入对应主 skill
71
83
  - 然后在同一轮中继续遵循对应 skill 的契约
72
- 6) 路由约束:
84
+ 7) 路由约束:
73
85
  - router 自己不是实现阶段;不要在给出 route 之前直接改代码
74
86
  - 除非用户只想听判断结果,否则给出 route 后应继续按对应 skill 的规则推进
75
87
  - 一次只选择一个主 route;不要把 `ws-plan` / `ws-dev` / `ws-review` / `ws-finish` 混成并行终态
76
- 7) 若执行过程中发现复杂度升高:
88
+ 8) 若执行过程中发现复杂度升高:
77
89
  - 从 `$ws-dev` 回退到 `$ws-plan`
90
+ - 从 `$ws-plan` 回退到 `$ws-intake`(当发现需求并未冻结)
78
91
  - 从 `$ws-finish` 回退到前置门禁而不是硬推完成
79
92
 
80
93
  输出模板:
81
94
  - `Root:` <path>
82
95
  - `Found:` <files>
96
+ - `Intent status:` <frozen / not_frozen>
83
97
  - `Task intent:` <分类>
84
98
  - `Binding:` <清晰 / 缺失项>
85
99
  - `Route:` <$ws-... 或 clarify>
@@ -1,130 +1,18 @@
1
1
  ---
2
2
  name: ws-commit
3
- description: 提交(当前分支可直提;submodule 感知;先审计/门禁再 commit)
3
+ description: `aiws ws-commit` 的薄包装入口
4
4
  ---
5
5
 
6
- 用中文输出(命令/路径/代码标识符保持原样不翻译)。
6
+ # ws-commit
7
7
 
8
- 目标:
9
- - 支持在**当前分支直接提交**(不要求必须先切 `change/<change-id>`)
10
- - 提交前审计与证据落盘(`$ws-review`)
11
- - 提交前门禁校验与证据落盘(`aiws validate . --stamp`)
12
- - 最后执行 `git commit`(commit 前必须让用户确认 message;不使用 `--no-verify` 绕过 hooks)
13
- - 若仓库含 submodule:提交前识别并提示正确顺序(先 submodule,再 superproject)
14
- - 若你经常遇到 submodule detached:建议日常拉取使用 `$ws-pull`(尽量把 submodule “挂回分支”且不改变 gitlink commit)
8
+ `aiws ws-commit` 的薄包装入口。
15
9
 
16
- 安全约束(强制):
17
- - 不自动 `git add -A`(避免误提交);只在用户明确指示时才执行 staging 命令
18
- - 不自动 push
19
- - 不写入任何 secrets
20
- - 检测到 submodule 有未提交改动时,不允许直接提交 superproject(先处理 submodule)
21
- - commit message 优先使用中文(命令/路径/代码标识符保持原样不翻译);格式建议:`<类型>: <简述>`(例如 `修复: 登录页空指针`、`功能: 新增 submodule targets 校验`、`重构: 提取共享脚本`)
22
- - 若启用了 `.githooks/commit-msg`:默认按仓库角色区分
23
- - superproject / root 仓库(存在 `.gitmodules`)默认允许自由 commit message
24
- - submodule / 普通仓库默认提示优先中文
25
- - 只有在 `git config aiws.commitMessagePolicy strict` 时才会拒绝全英文首行(`Merge/Revert/fixup!/squash!` 例外)
26
-
27
- 阶段定位:
28
- - commit gate;负责在提交前收敛 review、validate 和 message 确认,不允许跳过 hooks。
29
-
30
- 必需输入:
31
- - 当前分支与 staged diff
32
- - `$ws-review` 生成的审计证据
33
- - `aiws validate . --stamp` 生成的校验证据
34
- - 用户确认后的 commit message
35
-
36
- 必需输出:
37
- - `证据(Evidence):` review 文件路径 + validate stamp 路径
38
- - `上下文(Context):` 当前分支、submodule 检测结果、阻断原因(若有)
39
- - `提交信息(Commit):` 最终提交信息
40
-
41
- 阻断条件:
42
- - 没有 staged changes
43
- - submodule 工作区不干净或 detached 处理不完整
44
- - 用户未确认 commit message
45
- - validate 失败
46
-
47
- 完成判定:
48
- - 提交已完成,证据路径明确,且没有通过 `--no-verify` 绕过门禁。
49
-
50
- 执行步骤(建议):
51
- 1) 运行 `$ws-preflight`(确保真值文件就绪)。
52
- 2) 运行 `$ws-review`(优先生成审计证据:`changes/<change-id>/review/codex-review.md`;无 `change-id` 时回退 `.agentdocs/tmp/review/codex-review.md`)。
53
- 3) 运行门禁校验并写 stamp:
54
10
  ```bash
55
11
  if [[ -x "./node_modules/.bin/aiws" ]]; then
56
- ./node_modules/.bin/aiws validate . --stamp
12
+ ./node_modules/.bin/aiws ws-commit
57
13
  elif command -v aiws >/dev/null 2>&1; then
58
- aiws validate . --stamp
14
+ aiws ws-commit
59
15
  else
60
- npx @aipper/aiws validate . --stamp
61
- fi
62
- ```
63
- 4) 输出当前提交上下文(必须输出给用户确认):
64
- ```bash
65
- git branch --show-current
66
- git status --porcelain
67
- ```
68
- 5) 检测是否存在 submodule(有则进入 submodule 感知模式):
69
- ```bash
70
- if [[ -f .gitmodules ]]; then
71
- git config --file .gitmodules --get-regexp '^submodule\..*\.path$' || true
72
- else
73
- echo "[info] no .gitmodules"
74
- fi
75
- ```
76
- 6) 若存在 submodule,逐个检查子仓库工作区是否干净:
77
- ```bash
78
- while read -r _ sub_path; do
79
- [[ -z "${sub_path:-}" ]] && continue
80
- echo "== submodule: ${sub_path} =="
81
- git -C "${sub_path}" rev-parse --abbrev-ref HEAD 2>/dev/null || true
82
- git -C "${sub_path}" status --porcelain || true
83
- done < <(git config --file .gitmodules --get-regexp '^submodule\..*\.path$' 2>/dev/null || true)
84
- ```
85
- 判定规则(强制):
86
- - 任一 submodule `git status --porcelain` 非空:停止 superproject commit,先在对应 submodule 完成 commit,再回到 superproject 更新并提交 gitlink。
87
- - 若该 submodule 当前为 detached HEAD:先按 `.gitmodules` 的目标分支挂到 `aiws/pin/<target_branch>`;不要直接切 `change/<change-id>` / `main` / `master` 来“解 detached”。
88
- 处理指引(detached submodule):
89
- ```bash
90
- cur_branch="$(git branch --show-current)"
91
- change_id="$(echo "${cur_branch}" | sed -n 's|^change/||p')"
92
- targets="changes/${change_id}/submodules.targets"
93
-
94
- source tools/ws_resolve_sub_target.sh
95
- ws_resolve_sub_target "${sub_path}" "${sub_name}" "${targets}" "${cur_branch}" || exit 2
96
- target_branch="${_resolved_branch}"
97
- remote="${_resolved_remote}"
98
-
99
- git -C "${sub_path}" fetch "${remote}" --prune
100
- if ! git -C "${sub_path}" show-ref --verify --quiet "refs/remotes/${remote}/${target_branch}"; then
101
- echo "error: missing ${remote}/${target_branch} for submodule path=${sub_path}"
102
- exit 2
16
+ npx @aipper/aiws ws-commit
103
17
  fi
104
- git -C "${sub_path}" checkout -B "aiws/pin/${target_branch}" HEAD
105
- git -C "${sub_path}" branch --set-upstream-to "${remote}/${target_branch}" "aiws/pin/${target_branch}" >/dev/null 2>&1 || true
106
18
  ```
107
- 7) 检查当前 staging 内容(必须输出给用户确认):
108
- ```bash
109
- git status --porcelain
110
- git diff --staged --submodule=short
111
- ```
112
- 8) 若没有 staged changes:停止并提示用户先明确要提交哪些文件(例如 `git add -p` 或 `git add <path>`)。
113
- 9) 生成中文 commit message 草案(格式:`<类型>: <简述>`),输出给用户确认后再执行。
114
- - 类型参考:`功能` / `修复` / `重构` / `文档` / `测试` / `构建` / `杂项`
115
- - 简述用一句话概括本次改动的"为什么"而非"改了什么"
116
- - 命令/路径/代码标识符保持原样不翻译
117
- - 若用户给出全英文 message:优先改写成中文;若用户明确要求保留英文,也可以提交(但 strict 模式下会被 hook 拒绝)
118
- 10) 执行提交(不带 `--no-verify`):
119
- ```bash
120
- git commit -m "<message>"
121
- ```
122
- 11) 输出提交结果(可选):
123
- ```bash
124
- git show --stat --oneline -1
125
- ```
126
-
127
- 输出要求:
128
- - `证据(Evidence):` `changes/<change-id>/review/codex-review.md`(无 `change-id` 时回退 `.agentdocs/tmp/review/codex-review.md`) + `.agentdocs/tmp/aiws-validate/*.json`
129
- - `上下文(Context):` 当前分支 + 是否检测到 submodule + 若阻断则给出阻断原因
130
- - `提交信息(Commit):` 最终使用的 commit message(仅当用户确认后)