sillyspec 3.26.10 → 3.26.13
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/.claude/skills/sillyspec-archive/SKILL.md +85 -85
- package/.claude/skills/sillyspec-brainstorm/SKILL.md +114 -114
- package/.claude/skills/sillyspec-commit/SKILL.md +109 -109
- package/.claude/skills/sillyspec-continue/SKILL.md +45 -45
- package/.claude/skills/sillyspec-doctor/SKILL.md +76 -76
- package/.claude/skills/sillyspec-execute/SKILL.md +200 -200
- package/.claude/skills/sillyspec-explore/SKILL.md +95 -95
- package/.claude/skills/sillyspec-knowledge/SKILL.md +269 -269
- package/.claude/skills/sillyspec-plan/SKILL.md +148 -148
- package/.claude/skills/sillyspec-quick/SKILL.md +115 -111
- package/.claude/skills/sillyspec-resume/SKILL.md +68 -68
- package/.claude/skills/sillyspec-scan/SKILL.md +79 -79
- package/.claude/skills/sillyspec-state/SKILL.md +64 -64
- package/.claude/skills/sillyspec-status/SKILL.md +54 -54
- package/.claude/skills/sillyspec-verify/SKILL.md +83 -83
- package/.claude/skills/sillyspec-workspace/SKILL.md +169 -169
- package/.gitattributes +2 -0
- package/.husky/pre-push +20 -20
- package/README.md +203 -201
- package/SKILL.md +91 -90
- package/package.json +39 -39
- package/packages/dashboard/dist/assets/index-Bq_Z2hne.js +7446 -7446
- package/packages/dashboard/dist/assets/index-O2W5RV4z.css +1 -1
- package/packages/dashboard/dist/index.html +16 -16
- package/packages/dashboard/package.json +25 -25
- package/packages/dashboard/server/executor.js +95 -86
- package/packages/dashboard/server/index.js +663 -601
- package/packages/dashboard/server/parser.js +526 -526
- package/src/change-risk-profile.js +254 -254
- package/src/classify-change.js +109 -109
- package/src/config-schema.js +313 -310
- package/src/contract-matrix.js +388 -379
- package/src/db.js +370 -350
- package/src/dispatch/backends/local-agent.js +155 -155
- package/src/dispatch/backends/sillyhub-mcp.js +245 -245
- package/src/dispatch/probe.js +246 -210
- package/src/dispatch/strategy.js +121 -121
- package/src/docs-check.js +188 -16
- package/src/docs-debt.js +6 -2
- package/src/docs-gate.js +1 -0
- package/src/doctor-diagnostics.js +898 -711
- package/src/endpoint-extractor.js +401 -401
- package/src/fs-atomic.js +71 -69
- package/src/git-helper.js +82 -79
- package/src/hooks/claude-pre-tool-use.cjs +125 -125
- package/src/hooks/worktree-guard.js +854 -848
- package/src/index.js +251 -20
- package/src/init.js +624 -623
- package/src/knowledge-match.js +130 -130
- package/src/local-detect.js +128 -120
- package/src/machine-interface.js +543 -543
- package/src/migrate.js +127 -127
- package/src/modules.js +7 -5
- package/src/progress/change-registry.js +297 -260
- package/src/progress/consistency-doctor.js +355 -355
- package/src/progress/shared.js +36 -36
- package/src/progress/stage-machine.js +589 -550
- package/src/progress/step-store.js +261 -261
- package/src/progress.js +1285 -1127
- package/src/quicklog.js +724 -693
- package/src/review-tier.js +77 -77
- package/src/run/command.js +1408 -1364
- package/src/run/complete-handlers.js +1450 -1399
- package/src/run/complete.js +1181 -920
- package/src/run/gates.js +878 -755
- package/src/run/prompt.js +765 -761
- package/src/run/quick-audit.js +155 -146
- package/src/run/shared.js +1348 -1215
- package/src/run/stage.js +527 -479
- package/src/scan-postcheck.js +371 -371
- package/src/setup.js +414 -416
- package/src/sillyhub-mcp/client.js +597 -529
- package/src/spec-dir-typo.js +3 -24
- package/src/spec-sync.js +358 -319
- package/src/stage-contract.js +871 -897
- package/src/stage-review.js +549 -549
- package/src/stages/archive.js +156 -155
- package/src/stages/brainstorm-auto.js +236 -236
- package/src/stages/brainstorm.js +597 -597
- package/src/stages/cmd-existence.js +145 -145
- package/src/stages/doctor.js +386 -371
- package/src/stages/execute.js +1014 -1003
- package/src/stages/explore.js +34 -34
- package/src/stages/index.js +29 -29
- package/src/stages/knowledge.js +498 -498
- package/src/stages/plan-postcheck.js +1323 -1302
- package/src/stages/plan.js +642 -623
- package/src/stages/quick.js +153 -151
- package/src/stages/scan.js +607 -607
- package/src/stages/status.js +64 -64
- package/src/stages/verify.js +264 -264
- package/src/sync.js +1325 -1135
- package/src/task-review.js +1204 -1019
- package/src/taskcard.js +178 -0
- package/src/verify-postcheck.js +1199 -1186
- package/src/workflow.js +600 -600
- package/src/worktree-apply.js +1237 -1136
- package/src/worktree-deps.js +453 -353
- package/src/worktree.js +1527 -1481
- package/templates/workflows/archive-impact.yaml +79 -79
- package/templates/workflows/scan-docs.yaml +132 -132
|
@@ -1,85 +1,85 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sillyspec:archive
|
|
3
|
-
description: 用于归档已验证完成的变更。适合用户说"归档、archive、收尾这个变更"。执行模块影响分析 + 同步模块文档 + 移动到 archive 目录 + 更新 ROADMAP。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## 何时使用
|
|
7
|
-
|
|
8
|
-
- 用户说"归档、archive、收尾这个变更"
|
|
9
|
-
- verify 已通过,把变更包归档沉淀
|
|
10
|
-
- 5 步:任务完成度检查 → 模块影响分析 → 同步模块文档 → 确认归档 → 更新路线图
|
|
11
|
-
|
|
12
|
-
## 多变更说明
|
|
13
|
-
|
|
14
|
-
项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录)时,所有 `sillyspec run` 命令需加 `--change <变更名>` 指定操作目标;只有一个变更时可省略(CLI 自动检测)。
|
|
15
|
-
|
|
16
|
-
## 步骤生命周期(所有阶段通用)
|
|
17
|
-
|
|
18
|
-
> `sillyspec archive` 是 `sillyspec run archive` 的顶层别名,两者等价。
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
sillyspec run archive # 输出当前步骤 prompt
|
|
22
|
-
sillyspec run archive --done --output "摘要" # 完成当前步骤
|
|
23
|
-
sillyspec run archive --status # 查看阶段进度
|
|
24
|
-
sillyspec run archive --skip # 跳过可选步骤
|
|
25
|
-
sillyspec run archive --reset # 重置阶段(从头开始)
|
|
26
|
-
sillyspec run archive --reopen --from-step N # 重新打开已完成阶段修订(N=序号或名称)
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## 通用参数(所有阶段适用)
|
|
30
|
-
|
|
31
|
-
| 参数 | 说明 |
|
|
32
|
-
|---|---|
|
|
33
|
-
| `--change <名>` | 指定变更名(多活跃变更必填,单变更可省略自动检测) |
|
|
34
|
-
| `--spec-dir <path>` | 指定规范目录(默认 `<项目>/.sillyspec`) |
|
|
35
|
-
| `--non-interactive` | CI/脚本下禁用交互式 prompt |
|
|
36
|
-
| `--skip-approval` | 跳过阶段转换/审批检查(不能跳产物校验 gate——review.json/文档产物硬校验仍在) |
|
|
37
|
-
|
|
38
|
-
## archive 特有
|
|
39
|
-
|
|
40
|
-
### `--confirm`(确认归档步骤必填)
|
|
41
|
-
|
|
42
|
-
第 4 步「确认归档」由 CLI 执行目录移动,**必须带 `--confirm`**:
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
sillyspec run archive --done --confirm --output "确认归档"
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
不带 `--confirm` 时 CLI 回退步骤为 pending 并提示,不会误归档。
|
|
49
|
-
|
|
50
|
-
### 归档前硬校验
|
|
51
|
-
|
|
52
|
-
CLI 移动目录前会校验 `plan.md` 存在——缺失则 `exit(1)` 阻断(目录尚未移动,可补全后重试)。移动后校验 `design.md` / `module-impact.md`(缺失只告警,因目录已移动)。
|
|
53
|
-
|
|
54
|
-
### 模块文档同步(第 3 步)
|
|
55
|
-
|
|
56
|
-
第 3 步「sync-module-docs」会更新 `_module-map.yaml` + 模块卡片,**必须暂停等用户确认**:
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
sillyspec run archive --wait --reason "等待用户确认模块文档同步" --options "确认写入,跳过同步" --output "diff 摘要"
|
|
60
|
-
sillyspec run archive --continue --answer "确认写入"
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
只有用户 `--continue --answer "确认写入"` 后才写入文件。
|
|
64
|
-
|
|
65
|
-
### 归档结果
|
|
66
|
-
|
|
67
|
-
归档后变更目录从 `changes/<名>/` 移到 `changes/archive
|
|
68
|
-
|
|
69
|
-
## 阶段流转
|
|
70
|
-
|
|
71
|
-
```
|
|
72
|
-
verify → archive → git commit
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
archive 完成后,运行 `/sillyspec:commit` 提交归档结果(`git add .sillyspec/changes/`)。
|
|
76
|
-
|
|
77
|
-
## 铁律
|
|
78
|
-
|
|
79
|
-
- **必须用 exec 工具(shell)执行 CLI,不要自己编造流程**
|
|
80
|
-
- 不要用 `mv`/`rename` 重命名变更目录,必须由 CLI 的「确认归档」步骤移动
|
|
81
|
-
- 归档不可逆——确认前核对变更名、文件列表、module-impact.md
|
|
82
|
-
- 完成后立即 `--done`,不跳过
|
|
83
|
-
|
|
84
|
-
## 用户指令
|
|
85
|
-
$ARGUMENTS
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:archive
|
|
3
|
+
description: 用于归档已验证完成的变更。适合用户说"归档、archive、收尾这个变更"。执行模块影响分析 + 同步模块文档 + 移动到 archive 目录 + 更新 ROADMAP。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 何时使用
|
|
7
|
+
|
|
8
|
+
- 用户说"归档、archive、收尾这个变更"
|
|
9
|
+
- verify 已通过,把变更包归档沉淀
|
|
10
|
+
- 5 步:任务完成度检查 → 模块影响分析 → 同步模块文档 → 确认归档 → 更新路线图
|
|
11
|
+
|
|
12
|
+
## 多变更说明
|
|
13
|
+
|
|
14
|
+
项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录)时,所有 `sillyspec run` 命令需加 `--change <变更名>` 指定操作目标;只有一个变更时可省略(CLI 自动检测)。
|
|
15
|
+
|
|
16
|
+
## 步骤生命周期(所有阶段通用)
|
|
17
|
+
|
|
18
|
+
> `sillyspec archive` 是 `sillyspec run archive` 的顶层别名,两者等价。
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
sillyspec run archive # 输出当前步骤 prompt
|
|
22
|
+
sillyspec run archive --done --output "摘要" # 完成当前步骤
|
|
23
|
+
sillyspec run archive --status # 查看阶段进度
|
|
24
|
+
sillyspec run archive --skip # 跳过可选步骤
|
|
25
|
+
sillyspec run archive --reset # 重置阶段(从头开始)
|
|
26
|
+
sillyspec run archive --reopen --from-step N # 重新打开已完成阶段修订(N=序号或名称)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 通用参数(所有阶段适用)
|
|
30
|
+
|
|
31
|
+
| 参数 | 说明 |
|
|
32
|
+
|---|---|
|
|
33
|
+
| `--change <名>` | 指定变更名(多活跃变更必填,单变更可省略自动检测) |
|
|
34
|
+
| `--spec-dir <path>` | 指定规范目录(默认 `<项目>/.sillyspec`) |
|
|
35
|
+
| `--non-interactive` | CI/脚本下禁用交互式 prompt |
|
|
36
|
+
| `--skip-approval` | 跳过阶段转换/审批检查(不能跳产物校验 gate——review.json/文档产物硬校验仍在) |
|
|
37
|
+
|
|
38
|
+
## archive 特有
|
|
39
|
+
|
|
40
|
+
### `--confirm`(确认归档步骤必填)
|
|
41
|
+
|
|
42
|
+
第 4 步「确认归档」由 CLI 执行目录移动,**必须带 `--confirm`**:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
sillyspec run archive --done --confirm --output "确认归档"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
不带 `--confirm` 时 CLI 回退步骤为 pending 并提示,不会误归档。
|
|
49
|
+
|
|
50
|
+
### 归档前硬校验
|
|
51
|
+
|
|
52
|
+
CLI 移动目录前会校验 `plan.md` 存在——缺失则 `exit(1)` 阻断(目录尚未移动,可补全后重试)。移动后校验 `design.md` / `module-impact.md`(缺失只告警,因目录已移动)。
|
|
53
|
+
|
|
54
|
+
### 模块文档同步(第 3 步)
|
|
55
|
+
|
|
56
|
+
第 3 步「sync-module-docs」会更新 `_module-map.yaml` + 模块卡片,**必须暂停等用户确认**:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
sillyspec run archive --wait --reason "等待用户确认模块文档同步" --options "确认写入,跳过同步" --output "diff 摘要"
|
|
60
|
+
sillyspec run archive --continue --answer "确认写入"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
只有用户 `--continue --answer "确认写入"` 后才写入文件。
|
|
64
|
+
|
|
65
|
+
### 归档结果
|
|
66
|
+
|
|
67
|
+
归档后变更目录从 `changes/<名>/` 移到 `changes/archive/<名>/`,并从活跃列表注销。后续用 `/sillyspec:commit` 提交。
|
|
68
|
+
|
|
69
|
+
## 阶段流转
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
verify → archive → git commit
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
archive 完成后,运行 `/sillyspec:commit` 提交归档结果(`git add .sillyspec/changes/`)。
|
|
76
|
+
|
|
77
|
+
## 铁律
|
|
78
|
+
|
|
79
|
+
- **必须用 exec 工具(shell)执行 CLI,不要自己编造流程**
|
|
80
|
+
- 不要用 `mv`/`rename` 重命名变更目录,必须由 CLI 的「确认归档」步骤移动
|
|
81
|
+
- 归档不可逆——确认前核对变更名、文件列表、module-impact.md
|
|
82
|
+
- 完成后立即 `--done`,不跳过
|
|
83
|
+
|
|
84
|
+
## 用户指令
|
|
85
|
+
$ARGUMENTS
|
|
@@ -1,114 +1,114 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sillyspec:brainstorm
|
|
3
|
-
description: 用于正式开始开发前的需求澄清和技术方案设计。适合用户提出新功能、新模块、架构调整、复杂改造,或说"先做需求分析、输出技术方案、创建变更前先梳理、帮我设计下"。产出结构化方案(design/proposal/requirements/tasks 四件套),但不直接写代码。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## 交互规范
|
|
7
|
-
|
|
8
|
-
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。** 不要用编号列表让用户手动输入数字。
|
|
9
|
-
|
|
10
|
-
## 何时使用
|
|
11
|
-
|
|
12
|
-
- 用户提出新功能、新模块、架构调整、复杂改造
|
|
13
|
-
- 用户说"先做需求分析、输出技术方案、创建变更前先梳理、帮我设计下"
|
|
14
|
-
- 产出:`design.md` + `proposal.md` + `requirements.md` + `tasks.md`(四件套),不写代码
|
|
15
|
-
|
|
16
|
-
## 多变更说明
|
|
17
|
-
|
|
18
|
-
项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录)时,所有 `sillyspec run` 命令需加 `--change <变更名>` 指定操作目标;只有一个变更时可省略(CLI 自动检测)。建议变更名格式:`YYYY-MM-DD-<简短描述>`。
|
|
19
|
-
|
|
20
|
-
## 步骤生命周期(所有阶段通用)
|
|
21
|
-
|
|
22
|
-
> `sillyspec brainstorm` 是 `sillyspec run brainstorm` 的顶层别名,两者等价。
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
sillyspec run brainstorm # 输出当前步骤 prompt
|
|
26
|
-
sillyspec run brainstorm --done --output "摘要" # 完成当前步骤(--input "用户原话" 记录输入)
|
|
27
|
-
sillyspec run brainstorm --status # 查看阶段进度
|
|
28
|
-
sillyspec run brainstorm --skip # 跳过可选步骤
|
|
29
|
-
sillyspec run brainstorm --reset # 重置阶段(从头开始)
|
|
30
|
-
sillyspec run brainstorm --reopen --from-step N # 重新打开已完成阶段修订(N=序号或名称)
|
|
31
|
-
sillyspec run brainstorm --wait --reason "..." --options "A,B" # 暂停等用户决策
|
|
32
|
-
sillyspec run brainstorm --continue --answer "..." # 恢复等待中的步骤
|
|
33
|
-
sillyspec run brainstorm --done --answer "..." --output "..." # 一步完成 wait+done
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
## 通用参数(所有阶段适用)
|
|
37
|
-
|
|
38
|
-
| 参数 | 说明 |
|
|
39
|
-
|---|---|
|
|
40
|
-
| `--change <名>` | 指定变更名(多活跃变更必填,单变更可省略自动检测) |
|
|
41
|
-
| `--spec-dir <path>` | 指定规范目录(默认 `<项目>/.sillyspec`) |
|
|
42
|
-
| `--non-interactive` | CI/脚本下禁用交互式 prompt |
|
|
43
|
-
| `--interactive` | 强制交互(即便 stdin 非 TTY) |
|
|
44
|
-
| `--skip-approval` | 跳过阶段转换/审批检查(不能跳产物校验 gate——review.json/文档产物硬校验仍在) |
|
|
45
|
-
|
|
46
|
-
## brainstorm 特有:requiresWait 步骤
|
|
47
|
-
|
|
48
|
-
某些步骤(如"对话式探索与需求澄清")需要用户输入。两种方式:
|
|
49
|
-
|
|
50
|
-
> 自动去重:若前置 step 已对同一问题(waitReason 归一化后相同)确认过,后续重复 wait 会自动跳过,无需再 `--wait`。
|
|
51
|
-
|
|
52
|
-
- **方式一(推荐)**:分步——先 `--wait` 记录等待,让用户亲眼看到 CLI 打出的选项再作答,再 `--continue --answer`,最后 `--done`:
|
|
53
|
-
```bash
|
|
54
|
-
sillyspec run brainstorm --wait --change <名> --reason "等待用户回答" --output "探索问题"
|
|
55
|
-
sillyspec run brainstorm --continue --answer "用户回答" --change <名>
|
|
56
|
-
sillyspec run brainstorm --done --change <名> --output "需求已澄清"
|
|
57
|
-
```
|
|
58
|
-
- **方式二**:AI 自行与用户交互后,一步完成(仅在用户已在对话中明确给出答案、无需再走 CLI 等待展示时用):
|
|
59
|
-
```bash
|
|
60
|
-
sillyspec run brainstorm --done --change <名> --answer "用户回答" --output "需求已澄清"
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
> ⚠️ 两种方式都要求 `--answer` 是**用户真实的回答**,不是你替用户编的回答。`requiresWait` 门只校验 `--answer` 非空,挡不住「AI 伪造用户回答」——所以对方案选择/设计确认这类关键决策,优先用方式一让用户亲手作答,而不是 AI 中继一句话带过。
|
|
64
|
-
|
|
65
|
-
## 阶段流转
|
|
66
|
-
|
|
67
|
-
```
|
|
68
|
-
┌─ scale=large → plan(四件套齐)
|
|
69
|
-
scan → brainstorm ┤
|
|
70
|
-
└─ scale=small → quick --linked-changes(仅 design.md)
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
brainstorm 完成时按 design.md frontmatter 的 `scale` 分叉:
|
|
74
|
-
- **large**(多文件/跨模块/有状态机或 schema 变更):四件套齐 + Design Grill 审查通过(tier=independent 时由独立审查子代理产出 stage review.json)→ `sillyspec run plan --change <变更名>`
|
|
75
|
-
- **small**(≤2 文件、单模块、无跨模块依赖):仅生成 design.md → `sillyspec run quick --linked-changes <变更名>`
|
|
76
|
-
|
|
77
|
-
> 规模由 AI 在 brainstorm 最后一步评估并写入 design.md frontmatter。判错可手动改 `scale` 后再跑相应阶段。
|
|
78
|
-
|
|
79
|
-
### Stage Review Gate(brainstorm 末尾的 design review.json)
|
|
80
|
-
|
|
81
|
-
brainstorm 在 `tier=independent` 规模下除 design.md 等四件套外,还需产出一个 stage 级 `review.json`,CLI `Stage Review Gate` 硬校验其 schema 与 `docHash` 真实性。
|
|
82
|
-
|
|
83
|
-
- 路径:`.sillyspec/.runtime/stage-reviews/brainstorm-review-<stage-review-run-id>/review.json`(目录可能不存在需手建;run-id 由该步 `--done` prompt 输出指定)。marker 文件 `.runtime/current-stage-review-run-id-brainstorm-<变更名>`。
|
|
84
|
-
- **run-id / marker 由 CLI 自动生成注入**(review step prompt 渲染时 echo 完整目录路径 + 写 marker;撞 gate 报缺 review.json 时 gate 也 echo 完整路径 + 写 marker)。直接用 CLI 给的路径写 review.json,**勿手算 run-id(必须 `review-` 前缀)、勿手写 marker**。卡住时用 `sillyspec register-stage-review --change <名> --stage brainstorm` 一步生成。
|
|
85
|
-
- 字段(`schemaVersion:1`,`reviewType=design` —— 区别于 execute 的 `acceptance`):
|
|
86
|
-
|
|
87
|
-
```json
|
|
88
|
-
{
|
|
89
|
-
"schemaVersion": 1,
|
|
90
|
-
"reviewType": "design",
|
|
91
|
-
"reviewedFiles": ["changes/<变更名>/design.md"], // [0] 为主文档
|
|
92
|
-
"docHash": "<sha256(reviewedFiles[0] 文件内容,hex)>",
|
|
93
|
-
"specVerdict": "pass", // pass | fail | cannot_verify
|
|
94
|
-
"qualityVerdict": "pass", // pass | fail | cannot_verify
|
|
95
|
-
"checklist": [ // 扁平数组,逐条对照 design 章节核验
|
|
96
|
-
{ "item": "背景与目标", "result": "pass", "note": "..." } // result: pass | gap | fail
|
|
97
|
-
],
|
|
98
|
-
"requiredEvidence": [], // cannot_verify 时必填非空
|
|
99
|
-
"reviewerNotes": "..."
|
|
100
|
-
}
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
- `docHash` = `sha256(主审查文档内容)`(hex)—— brainstorm 主文档是 `design.md`(即 `reviewedFiles[0]`)。CLI 重算 sha256 比对,不符判伪造(fail-closed)。改 design.md 后须重算 docHash。`tier=self`(≤3 文件)降级为当前 agent 自审,不强制独立子代理。
|
|
104
|
-
- 运行时 CLI 会把精确 schema 表 + 完整 JSON 示例 + docHash 算法注入到该步 prompt,以你实际收到的注入版契约为权威逐字模板。
|
|
105
|
-
|
|
106
|
-
## 铁律
|
|
107
|
-
|
|
108
|
-
- **必须用 exec 工具(shell)执行 CLI,不要自己编造流程**
|
|
109
|
-
- 只做当前步骤 prompt 描述的操作,不跳过、不自行扩展
|
|
110
|
-
- 产物写入 CLI 输出的 `changeDir` 目录(如 `<changeDir>/design.md`),不要自己拼路径
|
|
111
|
-
- 完成后立即 `--done`,不跳过
|
|
112
|
-
|
|
113
|
-
## 用户指令
|
|
114
|
-
$ARGUMENTS
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:brainstorm
|
|
3
|
+
description: 用于正式开始开发前的需求澄清和技术方案设计。适合用户提出新功能、新模块、架构调整、复杂改造,或说"先做需求分析、输出技术方案、创建变更前先梳理、帮我设计下"。产出结构化方案(design/proposal/requirements/tasks 四件套),但不直接写代码。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 交互规范
|
|
7
|
+
|
|
8
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。** 不要用编号列表让用户手动输入数字。
|
|
9
|
+
|
|
10
|
+
## 何时使用
|
|
11
|
+
|
|
12
|
+
- 用户提出新功能、新模块、架构调整、复杂改造
|
|
13
|
+
- 用户说"先做需求分析、输出技术方案、创建变更前先梳理、帮我设计下"
|
|
14
|
+
- 产出:`design.md` + `proposal.md` + `requirements.md` + `tasks.md`(四件套),不写代码
|
|
15
|
+
|
|
16
|
+
## 多变更说明
|
|
17
|
+
|
|
18
|
+
项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录)时,所有 `sillyspec run` 命令需加 `--change <变更名>` 指定操作目标;只有一个变更时可省略(CLI 自动检测)。建议变更名格式:`YYYY-MM-DD-<简短描述>`。
|
|
19
|
+
|
|
20
|
+
## 步骤生命周期(所有阶段通用)
|
|
21
|
+
|
|
22
|
+
> `sillyspec brainstorm` 是 `sillyspec run brainstorm` 的顶层别名,两者等价。
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
sillyspec run brainstorm # 输出当前步骤 prompt
|
|
26
|
+
sillyspec run brainstorm --done --output "摘要" # 完成当前步骤(--input "用户原话" 记录输入)
|
|
27
|
+
sillyspec run brainstorm --status # 查看阶段进度
|
|
28
|
+
sillyspec run brainstorm --skip # 跳过可选步骤
|
|
29
|
+
sillyspec run brainstorm --reset # 重置阶段(从头开始)
|
|
30
|
+
sillyspec run brainstorm --reopen --from-step N # 重新打开已完成阶段修订(N=序号或名称)
|
|
31
|
+
sillyspec run brainstorm --wait --reason "..." --options "A,B" # 暂停等用户决策
|
|
32
|
+
sillyspec run brainstorm --continue --answer "..." # 恢复等待中的步骤
|
|
33
|
+
sillyspec run brainstorm --done --answer "..." --output "..." # 一步完成 wait+done
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 通用参数(所有阶段适用)
|
|
37
|
+
|
|
38
|
+
| 参数 | 说明 |
|
|
39
|
+
|---|---|
|
|
40
|
+
| `--change <名>` | 指定变更名(多活跃变更必填,单变更可省略自动检测) |
|
|
41
|
+
| `--spec-dir <path>` | 指定规范目录(默认 `<项目>/.sillyspec`) |
|
|
42
|
+
| `--non-interactive` | CI/脚本下禁用交互式 prompt |
|
|
43
|
+
| `--interactive` | 强制交互(即便 stdin 非 TTY) |
|
|
44
|
+
| `--skip-approval` | 跳过阶段转换/审批检查(不能跳产物校验 gate——review.json/文档产物硬校验仍在) |
|
|
45
|
+
|
|
46
|
+
## brainstorm 特有:requiresWait 步骤
|
|
47
|
+
|
|
48
|
+
某些步骤(如"对话式探索与需求澄清")需要用户输入。两种方式:
|
|
49
|
+
|
|
50
|
+
> 自动去重:若前置 step 已对同一问题(waitReason 归一化后相同)确认过,后续重复 wait 会自动跳过,无需再 `--wait`。
|
|
51
|
+
|
|
52
|
+
- **方式一(推荐)**:分步——先 `--wait` 记录等待,让用户亲眼看到 CLI 打出的选项再作答,再 `--continue --answer`,最后 `--done`:
|
|
53
|
+
```bash
|
|
54
|
+
sillyspec run brainstorm --wait --change <名> --reason "等待用户回答" --output "探索问题"
|
|
55
|
+
sillyspec run brainstorm --continue --answer "用户回答" --change <名>
|
|
56
|
+
sillyspec run brainstorm --done --change <名> --output "需求已澄清"
|
|
57
|
+
```
|
|
58
|
+
- **方式二**:AI 自行与用户交互后,一步完成(仅在用户已在对话中明确给出答案、无需再走 CLI 等待展示时用):
|
|
59
|
+
```bash
|
|
60
|
+
sillyspec run brainstorm --done --change <名> --answer "用户回答" --output "需求已澄清"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
> ⚠️ 两种方式都要求 `--answer` 是**用户真实的回答**,不是你替用户编的回答。`requiresWait` 门只校验 `--answer` 非空,挡不住「AI 伪造用户回答」——所以对方案选择/设计确认这类关键决策,优先用方式一让用户亲手作答,而不是 AI 中继一句话带过。
|
|
64
|
+
|
|
65
|
+
## 阶段流转
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
┌─ scale=large → plan(四件套齐)
|
|
69
|
+
scan → brainstorm ┤
|
|
70
|
+
└─ scale=small → quick --linked-changes(仅 design.md)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
brainstorm 完成时按 design.md frontmatter 的 `scale` 分叉:
|
|
74
|
+
- **large**(多文件/跨模块/有状态机或 schema 变更):四件套齐 + Design Grill 审查通过(tier=independent 时由独立审查子代理产出 stage review.json)→ `sillyspec run plan --change <变更名>`
|
|
75
|
+
- **small**(≤2 文件、单模块、无跨模块依赖):仅生成 design.md → `sillyspec run quick --linked-changes <变更名>`
|
|
76
|
+
|
|
77
|
+
> 规模由 AI 在 brainstorm 最后一步评估并写入 design.md frontmatter。判错可手动改 `scale` 后再跑相应阶段。
|
|
78
|
+
|
|
79
|
+
### Stage Review Gate(brainstorm 末尾的 design review.json)
|
|
80
|
+
|
|
81
|
+
brainstorm 在 `tier=independent` 规模下除 design.md 等四件套外,还需产出一个 stage 级 `review.json`,CLI `Stage Review Gate` 硬校验其 schema 与 `docHash` 真实性。
|
|
82
|
+
|
|
83
|
+
- 路径:`.sillyspec/.runtime/stage-reviews/brainstorm-review-<stage-review-run-id>/review.json`(目录可能不存在需手建;run-id 由该步 `--done` prompt 输出指定)。marker 文件 `.runtime/current-stage-review-run-id-brainstorm-<变更名>`。
|
|
84
|
+
- **run-id / marker 由 CLI 自动生成注入**(review step prompt 渲染时 echo 完整目录路径 + 写 marker;撞 gate 报缺 review.json 时 gate 也 echo 完整路径 + 写 marker)。直接用 CLI 给的路径写 review.json,**勿手算 run-id(必须 `review-` 前缀)、勿手写 marker**。卡住时用 `sillyspec register-stage-review --change <名> --stage brainstorm` 一步生成。
|
|
85
|
+
- 字段(`schemaVersion:1`,`reviewType=design` —— 区别于 execute 的 `acceptance`):
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"schemaVersion": 1,
|
|
90
|
+
"reviewType": "design",
|
|
91
|
+
"reviewedFiles": ["changes/<变更名>/design.md"], // [0] 为主文档
|
|
92
|
+
"docHash": "<sha256(reviewedFiles[0] 文件内容,hex)>",
|
|
93
|
+
"specVerdict": "pass", // pass | fail | cannot_verify
|
|
94
|
+
"qualityVerdict": "pass", // pass | fail | cannot_verify
|
|
95
|
+
"checklist": [ // 扁平数组,逐条对照 design 章节核验
|
|
96
|
+
{ "item": "背景与目标", "result": "pass", "note": "..." } // result: pass | gap | fail
|
|
97
|
+
],
|
|
98
|
+
"requiredEvidence": [], // cannot_verify 时必填非空
|
|
99
|
+
"reviewerNotes": "..."
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
- `docHash` = `sha256(主审查文档内容)`(hex)—— brainstorm 主文档是 `design.md`(即 `reviewedFiles[0]`)。CLI 重算 sha256 比对,不符判伪造(fail-closed)。改 design.md 后须重算 docHash。`tier=self`(≤3 文件)降级为当前 agent 自审,不强制独立子代理。
|
|
104
|
+
- 运行时 CLI 会把精确 schema 表 + 完整 JSON 示例 + docHash 算法注入到该步 prompt,以你实际收到的注入版契约为权威逐字模板。
|
|
105
|
+
|
|
106
|
+
## 铁律
|
|
107
|
+
|
|
108
|
+
- **必须用 exec 工具(shell)执行 CLI,不要自己编造流程**
|
|
109
|
+
- 只做当前步骤 prompt 描述的操作,不跳过、不自行扩展
|
|
110
|
+
- 产物写入 CLI 输出的 `changeDir` 目录(如 `<changeDir>/design.md`),不要自己拼路径
|
|
111
|
+
- 完成后立即 `--done`,不跳过
|
|
112
|
+
|
|
113
|
+
## 用户指令
|
|
114
|
+
$ARGUMENTS
|
|
@@ -1,109 +1,109 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sillyspec:commit
|
|
3
|
-
description: 智能提交 — 自动收集变更信息,生成 commit message
|
|
4
|
-
argument-hint: "[可选:自定义 commit message]"
|
|
5
|
-
version: "3.7.32"
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## 交互规范
|
|
9
|
-
当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。
|
|
10
|
-
|
|
11
|
-
## 用法
|
|
12
|
-
- /sillyspec:commit — 智能提交:自动收集变更信息,生成 commit message
|
|
13
|
-
- /sillyspec:commit "自定义 message" — 使用指定 message 直接提交
|
|
14
|
-
|
|
15
|
-
## 任务
|
|
16
|
-
$ARGUMENTS
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
## 流程
|
|
21
|
-
|
|
22
|
-
### 1. 检查是否有未提交的修改
|
|
23
|
-
git diff --quiet 2>/dev/null; UNSTAGED=$?
|
|
24
|
-
git diff --cached --quiet 2>/dev/null; STAGED=$?
|
|
25
|
-
|
|
26
|
-
两者都为 0(无修改)→ 提示"没有需要提交的修改",结束。
|
|
27
|
-
|
|
28
|
-
### 2. 暂存所有修改
|
|
29
|
-
git add -A
|
|
30
|
-
|
|
31
|
-
### 3. 收集变更语义信息
|
|
32
|
-
# 上次 commit 时间
|
|
33
|
-
LAST_COMMIT_TIME=$(git log -1 --format=%ci 2>/dev/null)
|
|
34
|
-
|
|
35
|
-
# 修改的文件列表
|
|
36
|
-
git diff --cached --stat
|
|
37
|
-
|
|
38
|
-
从以下来源收集语义信息(筛选时间戳 > LAST_COMMIT_TIME 的条目):
|
|
39
|
-
|
|
40
|
-
来源 A — QUICKLOG(quick 产生的修改):
|
|
41
|
-
USER=$(git config user.name 2>/dev/null || echo "default")
|
|
42
|
-
cat .sillyspec/quicklog/QUICKLOG-${USER}.md 2>/dev/null
|
|
43
|
-
# 同时扫描活跃变更目录下的归属 quicklog
|
|
44
|
-
for dir in .sillyspec/changes/*/quicklog/*.md; do [ -f "$dir" ] && cat "$dir"; done 2>/dev/null
|
|
45
|
-
# 注:QUICKLOG 现由 CLI 接管写入(src/quicklog.js),描述取 quick 启动的任务参数、
|
|
46
|
-
# 结果取 step3 --output 一句话,粒度可能较粗;条目仍含 标题|时间|描述 + 状态 + 结果 结构,
|
|
47
|
-
# 可直接读取。描述过泛时结合 diff stat 与 tasks.md 补充语义。
|
|
48
|
-
|
|
49
|
-
来源 B — tasks.md(execute 产生的修改):
|
|
50
|
-
LATEST=$(ls -d .sillyspec/changes/*/ 2>/dev/null | grep -v archive | tail -1)
|
|
51
|
-
cat "$LATEST/tasks.md" 2>/dev/null
|
|
52
|
-
筛选时间戳 > LAST_COMMIT_TIME 的已勾选 task。
|
|
53
|
-
|
|
54
|
-
来源 C — 阶段产出(scan/brainstorm/plan/archive 等):
|
|
55
|
-
检查 .sillyspec/ 下新增或修改的文件,根据路径识别来源阶段:
|
|
56
|
-
- .sillyspec/docs/<project>/scan/*.md → scan 产出
|
|
57
|
-
- changes/<name>/design.md → brainstorm 产出
|
|
58
|
-
- changes/<name>/proposal.md → brainstorm 产出
|
|
59
|
-
- changes/<name>/tasks.md → plan 产出
|
|
60
|
-
- changes/<name>/plan.md → plan 产出
|
|
61
|
-
- changes/archive/ → archive 产出
|
|
62
|
-
- knowledge/*.md → 知识库更新
|
|
63
|
-
|
|
64
|
-
### 4. 自动生成 commit message
|
|
65
|
-
|
|
66
|
-
按 conventional commits 格式,根据来源生成 message:
|
|
67
|
-
|
|
68
|
-
| 来源 | type | 示例 |
|
|
69
|
-
|---|---|---|
|
|
70
|
-
| 只有 quick 条目 | fix/refactor | fix: 手机号校验修复(含正则修正) |
|
|
71
|
-
| 只有 execute 条目 | feat | feat(user): 用户模块 task 1~3 |
|
|
72
|
-
| 只有阶段产出 | docs | docs: sillyspec scan 完成 |
|
|
73
|
-
| 混合来源 | 取最主要的 type | body 里列出所有条目 |
|
|
74
|
-
| 无匹配来源 | — | 展示 diff stat,让用户自己写 |
|
|
75
|
-
|
|
76
|
-
**如果 $ARGUMENTS 非空**,直接使用用户指定的 message,跳过自动生成,但仍展示 diff stat。
|
|
77
|
-
|
|
78
|
-
多条 quick 合并规则:
|
|
79
|
-
- 2 条以内 → 逐条列出
|
|
80
|
-
- 3 条以上 → 摘要 + body 详情
|
|
81
|
-
|
|
82
|
-
### 5. 展示确认
|
|
83
|
-
|
|
84
|
-
用 AskUserQuestion 展示:
|
|
85
|
-
📝 建议的 commit message:
|
|
86
|
-
fix: 手机号校验修复(含正则修正)
|
|
87
|
-
|
|
88
|
-
📁 修改文件(N 个):
|
|
89
|
-
src/UserService.java (+15 -3)
|
|
90
|
-
src/PhoneValidator.java (+28 -0)
|
|
91
|
-
|
|
92
|
-
选择:确认提交 / 编辑 message / 取消
|
|
93
|
-
|
|
94
|
-
用户选择编辑 → 让用户输入新 message → 再次确认。
|
|
95
|
-
|
|
96
|
-
### 6. 执行提交
|
|
97
|
-
git commit -m "{确认后的 message}"
|
|
98
|
-
|
|
99
|
-
提交成功后展示 commit hash + 文件数 + 行数统计。
|
|
100
|
-
|
|
101
|
-
## 多项目
|
|
102
|
-
检查修改的文件分别属于哪个子项目:
|
|
103
|
-
- 修改集中在一个子项目 → 在该子项目目录中 commit
|
|
104
|
-
- 修改跨多个子项目 → 用 AskUserQuestion 让用户选择:分开提交(每个子项目一个 commit)/ 合并提交
|
|
105
|
-
|
|
106
|
-
## 绝对规则
|
|
107
|
-
- ❌ 不要自动提交,必须展示 message 让用户确认
|
|
108
|
-
- ❌ 不要丢弃用户的修改
|
|
109
|
-
- ✅ $ARGUMENTS 非空时展示 diff stat 后直接提交(不需手动确认)
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:commit
|
|
3
|
+
description: 智能提交 — 自动收集变更信息,生成 commit message
|
|
4
|
+
argument-hint: "[可选:自定义 commit message]"
|
|
5
|
+
version: "3.7.32"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 交互规范
|
|
9
|
+
当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。
|
|
10
|
+
|
|
11
|
+
## 用法
|
|
12
|
+
- /sillyspec:commit — 智能提交:自动收集变更信息,生成 commit message
|
|
13
|
+
- /sillyspec:commit "自定义 message" — 使用指定 message 直接提交
|
|
14
|
+
|
|
15
|
+
## 任务
|
|
16
|
+
$ARGUMENTS
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 流程
|
|
21
|
+
|
|
22
|
+
### 1. 检查是否有未提交的修改
|
|
23
|
+
git diff --quiet 2>/dev/null; UNSTAGED=$?
|
|
24
|
+
git diff --cached --quiet 2>/dev/null; STAGED=$?
|
|
25
|
+
|
|
26
|
+
两者都为 0(无修改)→ 提示"没有需要提交的修改",结束。
|
|
27
|
+
|
|
28
|
+
### 2. 暂存所有修改
|
|
29
|
+
git add -A
|
|
30
|
+
|
|
31
|
+
### 3. 收集变更语义信息
|
|
32
|
+
# 上次 commit 时间
|
|
33
|
+
LAST_COMMIT_TIME=$(git log -1 --format=%ci 2>/dev/null)
|
|
34
|
+
|
|
35
|
+
# 修改的文件列表
|
|
36
|
+
git diff --cached --stat
|
|
37
|
+
|
|
38
|
+
从以下来源收集语义信息(筛选时间戳 > LAST_COMMIT_TIME 的条目):
|
|
39
|
+
|
|
40
|
+
来源 A — QUICKLOG(quick 产生的修改):
|
|
41
|
+
USER=$(git config user.name 2>/dev/null || echo "default")
|
|
42
|
+
cat .sillyspec/quicklog/QUICKLOG-${USER}.md 2>/dev/null
|
|
43
|
+
# 同时扫描活跃变更目录下的归属 quicklog
|
|
44
|
+
for dir in .sillyspec/changes/*/quicklog/*.md; do [ -f "$dir" ] && cat "$dir"; done 2>/dev/null
|
|
45
|
+
# 注:QUICKLOG 现由 CLI 接管写入(src/quicklog.js),描述取 quick 启动的任务参数、
|
|
46
|
+
# 结果取 step3 --output 一句话,粒度可能较粗;条目仍含 标题|时间|描述 + 状态 + 结果 结构,
|
|
47
|
+
# 可直接读取。描述过泛时结合 diff stat 与 tasks.md 补充语义。
|
|
48
|
+
|
|
49
|
+
来源 B — tasks.md(execute 产生的修改):
|
|
50
|
+
LATEST=$(ls -d .sillyspec/changes/*/ 2>/dev/null | grep -v archive | tail -1)
|
|
51
|
+
cat "$LATEST/tasks.md" 2>/dev/null
|
|
52
|
+
筛选时间戳 > LAST_COMMIT_TIME 的已勾选 task。
|
|
53
|
+
|
|
54
|
+
来源 C — 阶段产出(scan/brainstorm/plan/archive 等):
|
|
55
|
+
检查 .sillyspec/ 下新增或修改的文件,根据路径识别来源阶段:
|
|
56
|
+
- .sillyspec/docs/<project>/scan/*.md → scan 产出
|
|
57
|
+
- changes/<name>/design.md → brainstorm 产出
|
|
58
|
+
- changes/<name>/proposal.md → brainstorm 产出
|
|
59
|
+
- changes/<name>/tasks.md → plan 产出
|
|
60
|
+
- changes/<name>/plan.md → plan 产出
|
|
61
|
+
- changes/archive/ → archive 产出
|
|
62
|
+
- knowledge/*.md → 知识库更新
|
|
63
|
+
|
|
64
|
+
### 4. 自动生成 commit message
|
|
65
|
+
|
|
66
|
+
按 conventional commits 格式,根据来源生成 message:
|
|
67
|
+
|
|
68
|
+
| 来源 | type | 示例 |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| 只有 quick 条目 | fix/refactor | fix: 手机号校验修复(含正则修正) |
|
|
71
|
+
| 只有 execute 条目 | feat | feat(user): 用户模块 task 1~3 |
|
|
72
|
+
| 只有阶段产出 | docs | docs: sillyspec scan 完成 |
|
|
73
|
+
| 混合来源 | 取最主要的 type | body 里列出所有条目 |
|
|
74
|
+
| 无匹配来源 | — | 展示 diff stat,让用户自己写 |
|
|
75
|
+
|
|
76
|
+
**如果 $ARGUMENTS 非空**,直接使用用户指定的 message,跳过自动生成,但仍展示 diff stat。
|
|
77
|
+
|
|
78
|
+
多条 quick 合并规则:
|
|
79
|
+
- 2 条以内 → 逐条列出
|
|
80
|
+
- 3 条以上 → 摘要 + body 详情
|
|
81
|
+
|
|
82
|
+
### 5. 展示确认
|
|
83
|
+
|
|
84
|
+
用 AskUserQuestion 展示:
|
|
85
|
+
📝 建议的 commit message:
|
|
86
|
+
fix: 手机号校验修复(含正则修正)
|
|
87
|
+
|
|
88
|
+
📁 修改文件(N 个):
|
|
89
|
+
src/UserService.java (+15 -3)
|
|
90
|
+
src/PhoneValidator.java (+28 -0)
|
|
91
|
+
|
|
92
|
+
选择:确认提交 / 编辑 message / 取消
|
|
93
|
+
|
|
94
|
+
用户选择编辑 → 让用户输入新 message → 再次确认。
|
|
95
|
+
|
|
96
|
+
### 6. 执行提交
|
|
97
|
+
git commit -m "{确认后的 message}"
|
|
98
|
+
|
|
99
|
+
提交成功后展示 commit hash + 文件数 + 行数统计。
|
|
100
|
+
|
|
101
|
+
## 多项目
|
|
102
|
+
检查修改的文件分别属于哪个子项目:
|
|
103
|
+
- 修改集中在一个子项目 → 在该子项目目录中 commit
|
|
104
|
+
- 修改跨多个子项目 → 用 AskUserQuestion 让用户选择:分开提交(每个子项目一个 commit)/ 合并提交
|
|
105
|
+
|
|
106
|
+
## 绝对规则
|
|
107
|
+
- ❌ 不要自动提交,必须展示 message 让用户确认
|
|
108
|
+
- ❌ 不要丢弃用户的修改
|
|
109
|
+
- ✅ $ARGUMENTS 非空时展示 diff stat 后直接提交(不需手动确认)
|