sillyspec 3.23.6 → 3.23.8
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-brainstorm/SKILL.md +86 -86
- package/.claude/skills/sillyspec-execute/SKILL.md +1 -0
- package/.claude/skills/sillyspec-plan/SKILL.md +74 -74
- package/.claude/skills/sillyspec-propose/SKILL.md +61 -61
- package/package.json +1 -1
- package/src/db.js +1 -1
- package/src/progress.js +1 -3
- package/src/review-tier.js +65 -0
- package/src/run.js +84 -1
- package/src/stage-review.js +300 -0
- package/src/stages/brainstorm.js +5 -0
- package/src/stages/execute.js +4 -3
- package/src/stages/plan.js +53 -47
- package/src/stages/propose.js +6 -1
- package/src/worktree.js +81 -34
- package/.npm-publish-userconfig.tmp +0 -1
|
@@ -1,86 +1,86 @@
|
|
|
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` | 跳过审批/校验门控(需明确意图) |
|
|
45
|
-
| `--json` | 输出 JSON(程序化读取) |
|
|
46
|
-
|
|
47
|
-
## brainstorm 特有:requiresWait 步骤
|
|
48
|
-
|
|
49
|
-
某些步骤(如"对话式探索")需要用户输入。两种方式:
|
|
50
|
-
|
|
51
|
-
> 自动去重:若前置 step 已对同一问题(waitReason 归一化后相同,如"确认设计方案" vs "最终确认设计方案")确认过,后续重复 wait 会自动跳过,无需再 `--wait`。
|
|
52
|
-
|
|
53
|
-
- **方式一(推荐)**:AI 自行与用户交互后,一步完成:
|
|
54
|
-
```bash
|
|
55
|
-
sillyspec run brainstorm --done --change <名> --answer "用户回答" --output "需求已澄清"
|
|
56
|
-
```
|
|
57
|
-
- **方式二**:分步——先 `--wait` 记录等待,再 `--continue --answer`,最后 `--done`:
|
|
58
|
-
```bash
|
|
59
|
-
sillyspec run brainstorm --wait --change <名> --reason "等待用户回答" --output "探索问题"
|
|
60
|
-
sillyspec run brainstorm --continue --answer "用户回答" --change <名>
|
|
61
|
-
sillyspec run brainstorm --done --change <名> --output "需求已澄清"
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## 阶段流转
|
|
65
|
-
|
|
66
|
-
```
|
|
67
|
-
┌─ scale=large → plan(四件套齐)
|
|
68
|
-
scan → brainstorm ┤
|
|
69
|
-
└─ scale=small → quick --linked-changes(仅 design.md)
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
brainstorm 完成时按 design.md frontmatter 的 `scale` 分叉:
|
|
73
|
-
- **large**(多文件/跨模块/有状态机或 schema 变更):四件套齐 +
|
|
74
|
-
- **small**(≤2 文件、单模块、无跨模块依赖):仅生成 design.md → `sillyspec run quick --linked-changes <变更名>`
|
|
75
|
-
|
|
76
|
-
> 规模由 AI 在 brainstorm 最后一步评估并写入 design.md frontmatter。判错可手动改 `scale` 后再跑相应阶段。
|
|
77
|
-
|
|
78
|
-
## 铁律
|
|
79
|
-
|
|
80
|
-
- **必须用 exec 工具(shell)执行 CLI,不要自己编造流程**
|
|
81
|
-
- 只做当前步骤 prompt 描述的操作,不跳过、不自行扩展
|
|
82
|
-
- 产物写入 CLI 输出的 `changeDir` 目录(如 `<changeDir>/design.md`),不要自己拼路径
|
|
83
|
-
- 完成后立即 `--done`,不跳过
|
|
84
|
-
|
|
85
|
-
## 用户指令
|
|
86
|
-
$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` | 跳过审批/校验门控(需明确意图) |
|
|
45
|
+
| `--json` | 输出 JSON(程序化读取) |
|
|
46
|
+
|
|
47
|
+
## brainstorm 特有:requiresWait 步骤
|
|
48
|
+
|
|
49
|
+
某些步骤(如"对话式探索")需要用户输入。两种方式:
|
|
50
|
+
|
|
51
|
+
> 自动去重:若前置 step 已对同一问题(waitReason 归一化后相同,如"确认设计方案" vs "最终确认设计方案")确认过,后续重复 wait 会自动跳过,无需再 `--wait`。
|
|
52
|
+
|
|
53
|
+
- **方式一(推荐)**:AI 自行与用户交互后,一步完成:
|
|
54
|
+
```bash
|
|
55
|
+
sillyspec run brainstorm --done --change <名> --answer "用户回答" --output "需求已澄清"
|
|
56
|
+
```
|
|
57
|
+
- **方式二**:分步——先 `--wait` 记录等待,再 `--continue --answer`,最后 `--done`:
|
|
58
|
+
```bash
|
|
59
|
+
sillyspec run brainstorm --wait --change <名> --reason "等待用户回答" --output "探索问题"
|
|
60
|
+
sillyspec run brainstorm --continue --answer "用户回答" --change <名>
|
|
61
|
+
sillyspec run brainstorm --done --change <名> --output "需求已澄清"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## 阶段流转
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
┌─ scale=large → plan(四件套齐)
|
|
68
|
+
scan → brainstorm ┤
|
|
69
|
+
└─ scale=small → quick --linked-changes(仅 design.md)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
brainstorm 完成时按 design.md frontmatter 的 `scale` 分叉:
|
|
73
|
+
- **large**(多文件/跨模块/有状态机或 schema 变更):四件套齐 + Design Grill 审查通过(tier=independent 时由独立审查子代理产出 stage review.json)→ `sillyspec run plan --change <变更名>`
|
|
74
|
+
- **small**(≤2 文件、单模块、无跨模块依赖):仅生成 design.md → `sillyspec run quick --linked-changes <变更名>`
|
|
75
|
+
|
|
76
|
+
> 规模由 AI 在 brainstorm 最后一步评估并写入 design.md frontmatter。判错可手动改 `scale` 后再跑相应阶段。
|
|
77
|
+
|
|
78
|
+
## 铁律
|
|
79
|
+
|
|
80
|
+
- **必须用 exec 工具(shell)执行 CLI,不要自己编造流程**
|
|
81
|
+
- 只做当前步骤 prompt 描述的操作,不跳过、不自行扩展
|
|
82
|
+
- 产物写入 CLI 输出的 `changeDir` 目录(如 `<changeDir>/design.md`),不要自己拼路径
|
|
83
|
+
- 完成后立即 `--done`,不跳过
|
|
84
|
+
|
|
85
|
+
## 用户指令
|
|
86
|
+
$ARGUMENTS
|
|
@@ -43,6 +43,7 @@ sillyspec run execute --reopen --from-step N # 重新打开已完成阶段修
|
|
|
43
43
|
- **禁止跳过 worktree 或在主仓库直接写代码**
|
|
44
44
|
- worktree 创建失败时 CLI 报错退出,排查后重试
|
|
45
45
|
- dirty 状态/未提交文件**不影响** worktree 创建和进入,直接按 CLI 输出的路径操作,不要自行检查 git 状态
|
|
46
|
+
- create 时若检测到 base 落后/分叉 `origin/<默认分支>`,CLI 会醒目报告(⚠️「落后 N 个 commit」+ 对齐命令),**不阻断** execute。看到此报告时评估是否提示用户先对齐 main,但**不要自行 fetch/ff**——对齐是用户/主仓库的显式动作
|
|
46
47
|
|
|
47
48
|
### 依赖门控(depsStatus)
|
|
48
49
|
|
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sillyspec:plan
|
|
3
|
-
description: 用于把 design 拆解为可执行的实现计划。适合用户说"拆任务、做计划、排 wave、规划实现步骤"。产出 plan.md(Wave 分组 + Task 列表 + 依赖关系)。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## 何时使用
|
|
7
|
-
|
|
8
|
-
- 用户说"拆任务、做计划、排 wave、规划实现步骤"
|
|
9
|
-
- 把 brainstorm 的 design.md 拆成可执行的 Wave + Task
|
|
10
|
-
- 产出:`plan.md`(Wave 分组 + Task 列表 + 依赖关系),可能含 `tasks/task-NN.md` 任务蓝图
|
|
11
|
-
|
|
12
|
-
## 多变更说明
|
|
13
|
-
|
|
14
|
-
项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录)时,所有 `sillyspec run` 命令需加 `--change <变更名>` 指定操作目标;只有一个变更时可省略(CLI 自动检测)。
|
|
15
|
-
|
|
16
|
-
## 步骤生命周期(所有阶段通用)
|
|
17
|
-
|
|
18
|
-
> `sillyspec plan` 是 `sillyspec run plan` 的顶层别名,两者等价。
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
sillyspec run plan # 输出当前步骤 prompt
|
|
22
|
-
sillyspec run plan --done --output "摘要" # 完成当前步骤(--input "用户原话" 记录输入)
|
|
23
|
-
sillyspec run plan --status # 查看阶段进度
|
|
24
|
-
sillyspec run plan --skip # 跳过可选步骤
|
|
25
|
-
sillyspec run plan --reset # 重置阶段(从头开始)
|
|
26
|
-
sillyspec run plan --reopen --from-step N # 重新打开已完成阶段修订(N=序号或名称)
|
|
27
|
-
sillyspec run plan --wait --reason "..." --options "A,B" # 暂停等用户决策
|
|
28
|
-
sillyspec run plan --continue --answer "..." # 恢复等待中的步骤
|
|
29
|
-
sillyspec run plan --done --answer "..." --output "..." # 一步完成 wait+done
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## 通用参数(所有阶段适用)
|
|
33
|
-
|
|
34
|
-
| 参数 | 说明 |
|
|
35
|
-
|---|---|
|
|
36
|
-
| `--change <名>` | 指定变更名(多活跃变更必填,单变更可省略自动检测) |
|
|
37
|
-
| `--spec-dir <path>` | 指定规范目录(默认 `<项目>/.sillyspec`) |
|
|
38
|
-
| `--non-interactive` | CI/脚本下禁用交互式 prompt |
|
|
39
|
-
| `--interactive` | 强制交互(即便 stdin 非 TTY) |
|
|
40
|
-
| `--skip-approval` | 跳过审批/校验门控(需明确意图) |
|
|
41
|
-
| `--json` | 输出 JSON(程序化读取) |
|
|
42
|
-
|
|
43
|
-
## plan 特有
|
|
44
|
-
|
|
45
|
-
### 动态步骤
|
|
46
|
-
|
|
47
|
-
plan 的步骤是动态的:`generate_plan`
|
|
48
|
-
|
|
49
|
-
### 契约门控(阻断完成)
|
|
50
|
-
|
|
51
|
-
- **plan 启动前**:CLI 校验 `design.md` 是否满足 plan 契约(缺文件变更清单/风险登记/自审章节会阻断)。若失败需先 `sillyspec run brainstorm --reopen --from-step N` 修订设计。
|
|
52
|
-
- **plan 完成时**:CLI 校验 `plan.md` 是否满足 execute 契约(Wave 结构、task 引用等)。失败会阻断完成,提示修复后重新 `--done`。
|
|
53
|
-
|
|
54
|
-
### 生产接线路径检查
|
|
55
|
-
|
|
56
|
-
plan 完成校验会检查:design 提到入口文件(cli.ts/main.ts/server.ts 等)但 task 的 allowed_paths 不含该文件 → 报 error。若确实不需要改入口,在 design.md 明示理由。
|
|
57
|
-
|
|
58
|
-
## 阶段流转
|
|
59
|
-
|
|
60
|
-
```
|
|
61
|
-
brainstorm → plan → execute
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
plan 完成后(plan.md 通过 execute 契约校验),运行 `sillyspec run execute --change <变更名>` 开始实现。
|
|
65
|
-
|
|
66
|
-
## 铁律
|
|
67
|
-
|
|
68
|
-
- **必须用 exec 工具(shell)执行 CLI,不要自己编造流程**
|
|
69
|
-
- 只做当前步骤 prompt 描述的操作,不跳过、不自行扩展
|
|
70
|
-
- plan.md 是任务完成的唯一真相源,task 拆解粒度要均匀、依赖要明确
|
|
71
|
-
- 完成后立即 `--done`,不跳过
|
|
72
|
-
|
|
73
|
-
## 用户指令
|
|
74
|
-
$ARGUMENTS
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:plan
|
|
3
|
+
description: 用于把 design 拆解为可执行的实现计划。适合用户说"拆任务、做计划、排 wave、规划实现步骤"。产出 plan.md(Wave 分组 + Task 列表 + 依赖关系)。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 何时使用
|
|
7
|
+
|
|
8
|
+
- 用户说"拆任务、做计划、排 wave、规划实现步骤"
|
|
9
|
+
- 把 brainstorm 的 design.md 拆成可执行的 Wave + Task
|
|
10
|
+
- 产出:`plan.md`(Wave 分组 + Task 列表 + 依赖关系),可能含 `tasks/task-NN.md` 任务蓝图
|
|
11
|
+
|
|
12
|
+
## 多变更说明
|
|
13
|
+
|
|
14
|
+
项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录)时,所有 `sillyspec run` 命令需加 `--change <变更名>` 指定操作目标;只有一个变更时可省略(CLI 自动检测)。
|
|
15
|
+
|
|
16
|
+
## 步骤生命周期(所有阶段通用)
|
|
17
|
+
|
|
18
|
+
> `sillyspec plan` 是 `sillyspec run plan` 的顶层别名,两者等价。
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
sillyspec run plan # 输出当前步骤 prompt
|
|
22
|
+
sillyspec run plan --done --output "摘要" # 完成当前步骤(--input "用户原话" 记录输入)
|
|
23
|
+
sillyspec run plan --status # 查看阶段进度
|
|
24
|
+
sillyspec run plan --skip # 跳过可选步骤
|
|
25
|
+
sillyspec run plan --reset # 重置阶段(从头开始)
|
|
26
|
+
sillyspec run plan --reopen --from-step N # 重新打开已完成阶段修订(N=序号或名称)
|
|
27
|
+
sillyspec run plan --wait --reason "..." --options "A,B" # 暂停等用户决策
|
|
28
|
+
sillyspec run plan --continue --answer "..." # 恢复等待中的步骤
|
|
29
|
+
sillyspec run plan --done --answer "..." --output "..." # 一步完成 wait+done
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 通用参数(所有阶段适用)
|
|
33
|
+
|
|
34
|
+
| 参数 | 说明 |
|
|
35
|
+
|---|---|
|
|
36
|
+
| `--change <名>` | 指定变更名(多活跃变更必填,单变更可省略自动检测) |
|
|
37
|
+
| `--spec-dir <path>` | 指定规范目录(默认 `<项目>/.sillyspec`) |
|
|
38
|
+
| `--non-interactive` | CI/脚本下禁用交互式 prompt |
|
|
39
|
+
| `--interactive` | 强制交互(即便 stdin 非 TTY) |
|
|
40
|
+
| `--skip-approval` | 跳过审批/校验门控(需明确意图) |
|
|
41
|
+
| `--json` | 输出 JSON(程序化读取) |
|
|
42
|
+
|
|
43
|
+
## plan 特有
|
|
44
|
+
|
|
45
|
+
### 动态步骤
|
|
46
|
+
|
|
47
|
+
plan 的步骤是动态的:`generate_plan`(生成分级计划)→ `review_plan`(审查计划,按规模分级:tier=self 当前 agent 自审 / tier=independent 启动独立审查子代理产出 stage review.json,避免生成+自审同一次输出的偏差)→ CLI 从 `plan.md` 解析出 task 自动插入"任务蓝图协调器"步骤(per-task)。这是正常行为,不要手动添加。
|
|
48
|
+
|
|
49
|
+
### 契约门控(阻断完成)
|
|
50
|
+
|
|
51
|
+
- **plan 启动前**:CLI 校验 `design.md` 是否满足 plan 契约(缺文件变更清单/风险登记/自审章节会阻断)。若失败需先 `sillyspec run brainstorm --reopen --from-step N` 修订设计。
|
|
52
|
+
- **plan 完成时**:CLI 校验 `plan.md` 是否满足 execute 契约(Wave 结构、task 引用等)。失败会阻断完成,提示修复后重新 `--done`。
|
|
53
|
+
|
|
54
|
+
### 生产接线路径检查
|
|
55
|
+
|
|
56
|
+
plan 完成校验会检查:design 提到入口文件(cli.ts/main.ts/server.ts 等)但 task 的 allowed_paths 不含该文件 → 报 error。若确实不需要改入口,在 design.md 明示理由。
|
|
57
|
+
|
|
58
|
+
## 阶段流转
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
brainstorm → plan → execute
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
plan 完成后(plan.md 通过 execute 契约校验),运行 `sillyspec run execute --change <变更名>` 开始实现。
|
|
65
|
+
|
|
66
|
+
## 铁律
|
|
67
|
+
|
|
68
|
+
- **必须用 exec 工具(shell)执行 CLI,不要自己编造流程**
|
|
69
|
+
- 只做当前步骤 prompt 描述的操作,不跳过、不自行扩展
|
|
70
|
+
- plan.md 是任务完成的唯一真相源,task 拆解粒度要均匀、依赖要明确
|
|
71
|
+
- 完成后立即 `--done`,不跳过
|
|
72
|
+
|
|
73
|
+
## 用户指令
|
|
74
|
+
$ARGUMENTS
|
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sillyspec:propose
|
|
3
|
-
description: 生成结构化规范 — proposal + design + tasks。适合用户说"生成规范、补全四件套、propose"。产出 proposal.md + design.md + tasks.md(+ 可能的 requirements.md)。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## 何时使用
|
|
7
|
-
|
|
8
|
-
- 用户说"生成规范、补全四件套、propose"
|
|
9
|
-
- 已有零散设计/需求,需补全结构化规范四件套
|
|
10
|
-
- 产出:`proposal.md` + `design.md` + `tasks.md`(+ 可选 `requirements.md`)
|
|
11
|
-
|
|
12
|
-
> 注:propose 与 brainstorm 都产出四件套。brainstorm 是从需求开始的完整设计流程;propose 更偏"补全/生成规范"。新需求一般走 brainstorm。
|
|
13
|
-
|
|
14
|
-
## 多变更说明
|
|
15
|
-
|
|
16
|
-
项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录)时,所有 `sillyspec run` 命令需加 `--change <变更名>` 指定操作目标;只有一个变更时可省略(CLI 自动检测)。
|
|
17
|
-
|
|
18
|
-
## 步骤生命周期(所有阶段通用)
|
|
19
|
-
|
|
20
|
-
> `sillyspec run propose` 需用 `run` 形式(propose 无顶层别名,与 brainstorm/plan 等不同)。
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
sillyspec run propose # 输出当前步骤 prompt
|
|
24
|
-
sillyspec run propose --done --output "摘要" # 完成当前步骤
|
|
25
|
-
sillyspec run propose --status # 查看阶段进度
|
|
26
|
-
sillyspec run propose --skip # 跳过可选步骤
|
|
27
|
-
sillyspec run propose --reset # 重置阶段(从头开始)
|
|
28
|
-
sillyspec run propose --reopen --from-step N # 重新打开已完成阶段修订
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
## 通用参数(所有阶段适用)
|
|
32
|
-
|
|
33
|
-
| 参数 | 说明 |
|
|
34
|
-
|---|---|
|
|
35
|
-
| `--change <名>` | 指定变更名(多活跃变更必填,单变更可省略自动检测) |
|
|
36
|
-
| `--spec-dir <path>` | 指定规范目录(默认 `<项目>/.sillyspec`) |
|
|
37
|
-
| `--non-interactive` | CI/脚本下禁用交互式 prompt |
|
|
38
|
-
| `--skip-approval` | 跳过审批/校验门控 |
|
|
39
|
-
| `--json` | 输出 JSON(程序化读取) |
|
|
40
|
-
|
|
41
|
-
## propose 特有:自检门控
|
|
42
|
-
|
|
43
|
-
propose
|
|
44
|
-
|
|
45
|
-
## 阶段流转
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
(零散设计/需求) → propose → plan
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
propose 完成后(四件套齐 + 自检通过),运行 `sillyspec run plan --change <变更名>` 进入实现计划。
|
|
52
|
-
|
|
53
|
-
## 铁律
|
|
54
|
-
|
|
55
|
-
- **必须用 exec 工具(shell)执行 CLI,不要自己编造流程**
|
|
56
|
-
- 只做当前步骤 prompt 描述的操作,不跳过
|
|
57
|
-
- 产物写入 CLI 输出的 `changeDir` 目录
|
|
58
|
-
- 完成后立即 `--done`,不跳过
|
|
59
|
-
|
|
60
|
-
## 用户指令
|
|
61
|
-
$ARGUMENTS
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:propose
|
|
3
|
+
description: 生成结构化规范 — proposal + design + tasks。适合用户说"生成规范、补全四件套、propose"。产出 proposal.md + design.md + tasks.md(+ 可能的 requirements.md)。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 何时使用
|
|
7
|
+
|
|
8
|
+
- 用户说"生成规范、补全四件套、propose"
|
|
9
|
+
- 已有零散设计/需求,需补全结构化规范四件套
|
|
10
|
+
- 产出:`proposal.md` + `design.md` + `tasks.md`(+ 可选 `requirements.md`)
|
|
11
|
+
|
|
12
|
+
> 注:propose 与 brainstorm 都产出四件套。brainstorm 是从需求开始的完整设计流程;propose 更偏"补全/生成规范"。新需求一般走 brainstorm。
|
|
13
|
+
|
|
14
|
+
## 多变更说明
|
|
15
|
+
|
|
16
|
+
项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录)时,所有 `sillyspec run` 命令需加 `--change <变更名>` 指定操作目标;只有一个变更时可省略(CLI 自动检测)。
|
|
17
|
+
|
|
18
|
+
## 步骤生命周期(所有阶段通用)
|
|
19
|
+
|
|
20
|
+
> `sillyspec run propose` 需用 `run` 形式(propose 无顶层别名,与 brainstorm/plan 等不同)。
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
sillyspec run propose # 输出当前步骤 prompt
|
|
24
|
+
sillyspec run propose --done --output "摘要" # 完成当前步骤
|
|
25
|
+
sillyspec run propose --status # 查看阶段进度
|
|
26
|
+
sillyspec run propose --skip # 跳过可选步骤
|
|
27
|
+
sillyspec run propose --reset # 重置阶段(从头开始)
|
|
28
|
+
sillyspec run propose --reopen --from-step N # 重新打开已完成阶段修订
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 通用参数(所有阶段适用)
|
|
32
|
+
|
|
33
|
+
| 参数 | 说明 |
|
|
34
|
+
|---|---|
|
|
35
|
+
| `--change <名>` | 指定变更名(多活跃变更必填,单变更可省略自动检测) |
|
|
36
|
+
| `--spec-dir <path>` | 指定规范目录(默认 `<项目>/.sillyspec`) |
|
|
37
|
+
| `--non-interactive` | CI/脚本下禁用交互式 prompt |
|
|
38
|
+
| `--skip-approval` | 跳过审批/校验门控 |
|
|
39
|
+
| `--json` | 输出 JSON(程序化读取) |
|
|
40
|
+
|
|
41
|
+
## propose 特有:自检门控
|
|
42
|
+
|
|
43
|
+
propose 含自检步骤(按规模分级:tier=self 当前 agent 自审 / tier=independent 启动独立审查子代理产出 stage review.json),完成时校验四件套文档齐全 + 内容章节(如 proposal 的 Non-Goals、design 的文件变更清单/风险登记/自审)。缺失会阻断完成。
|
|
44
|
+
|
|
45
|
+
## 阶段流转
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
(零散设计/需求) → propose → plan
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
propose 完成后(四件套齐 + 自检通过),运行 `sillyspec run plan --change <变更名>` 进入实现计划。
|
|
52
|
+
|
|
53
|
+
## 铁律
|
|
54
|
+
|
|
55
|
+
- **必须用 exec 工具(shell)执行 CLI,不要自己编造流程**
|
|
56
|
+
- 只做当前步骤 prompt 描述的操作,不跳过
|
|
57
|
+
- 产物写入 CLI 输出的 `changeDir` 目录
|
|
58
|
+
- 完成后立即 `--done`,不跳过
|
|
59
|
+
|
|
60
|
+
## 用户指令
|
|
61
|
+
$ARGUMENTS
|
package/package.json
CHANGED
package/src/db.js
CHANGED
package/src/progress.js
CHANGED
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
* 纯 Node.js,无外部依赖。支持多变更并行。
|
|
5
5
|
*
|
|
6
6
|
* 存储结构:
|
|
7
|
-
* .sillyspec/.runtime/sillyspec.db — SQLite
|
|
8
|
-
* .sillyspec/.runtime/global.json — 全局状态缓存(项目名、活跃变更列表)
|
|
7
|
+
* .sillyspec/.runtime/sillyspec.db — SQLite 数据库(权威状态源,含全局状态/项目名/活跃变更)
|
|
9
8
|
* .sillyspec/.runtime/gate-status.json — worktree-guard 门禁状态缓存
|
|
10
9
|
*
|
|
11
10
|
* 历史迁移:v1/v2 使用 progress.json 文件,v3 已全部迁移至 SQLite。
|
|
@@ -103,7 +102,6 @@ export function resolvePlatformSpecDir(cwd, explicitSpecDir = null) {
|
|
|
103
102
|
}
|
|
104
103
|
|
|
105
104
|
const CHANGES_SUBDIR = 'changes';
|
|
106
|
-
const GLOBAL_FILE = 'global.json';
|
|
107
105
|
const CURRENT_VERSION = 3;
|
|
108
106
|
const VALID_STAGES = ['scan', 'brainstorm', 'plan', 'execute', 'verify', 'archive', 'quick', 'explore'];
|
|
109
107
|
const VALID_STATUSES = ['pending', 'in-progress', 'completed', 'failed', 'blocked', 'waiting', 'stale'];
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SillySpec Review Tier — 审查分级
|
|
3
|
+
*
|
|
4
|
+
* 决定某阶段的"审查/自检"由「当前 agent 自审」还是「独立审查子代理」执行。
|
|
5
|
+
*
|
|
6
|
+
* 为什么需要分级:
|
|
7
|
+
* scanProfile(决定 maxAgentCalls / 是否禁子代理)只在 scan 阶段生效(run.js:810
|
|
8
|
+
* 门控 stageName==='scan');change-risk-profile 的 P0/P1/P2 只管 apply 阻塞与
|
|
9
|
+
* verify 证据。两者都不约束 brainstorm/plan/execute/propose 的审查方式。
|
|
10
|
+
* 故新选「plan_level / 变更文件数」作为审查分级维度。
|
|
11
|
+
*
|
|
12
|
+
* 分级结果:
|
|
13
|
+
* - tier=self → 当前 agent 自审,CLI 放行(不要求 review.json)
|
|
14
|
+
* - tier=independent → 强制独立审查子代理 + review.json,CLI 硬校验
|
|
15
|
+
*
|
|
16
|
+
* CLI 侧(run.js done gate)与 prompt 注入侧用同一个函数,保证两边判定一致——
|
|
17
|
+
* 不信 agent 自报 tier。
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import { parseFileChangeList } from './change-list.js'
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 审查分级阈值:变更文件数 ≤ 此值 → tier=self。
|
|
24
|
+
* 依据:≤3 文件的变更通常是单点修复/文案调整,独立审查子代理的仪式成本 > 收益。
|
|
25
|
+
*/
|
|
26
|
+
export const SELF_REVIEW_FILE_THRESHOLD = 3
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* 审查分级
|
|
30
|
+
*
|
|
31
|
+
* 判定顺序(短路):
|
|
32
|
+
* 1. plan_level === 'none' → self(极小变更)
|
|
33
|
+
* 2. design.md 变更文件数 ≤ SELF_REVIEW_FILE_THRESHOLD → self
|
|
34
|
+
* 3. 否则 → independent
|
|
35
|
+
*
|
|
36
|
+
* fail-safe:designPath 传了但解析不到文件清单(fileCount=0)按字面 0 处理(真无文件
|
|
37
|
+
* 变更 = 极小);designPath 完全没传(fileCount=null,无法证明规模)→ independent
|
|
38
|
+
* (宁严勿松)。
|
|
39
|
+
*
|
|
40
|
+
* @param {object} [opts]
|
|
41
|
+
* @param {string} [opts.planLevel] - plan_level 分类结果(none/light/full)。brainstorm/propose 在 plan 之前,可能拿不到。
|
|
42
|
+
* @param {string} [opts.designPath] - design.md 绝对路径,用于算变更文件数
|
|
43
|
+
* @returns {{ tier: 'self'|'independent', reason: string, fileCount: number|null }}
|
|
44
|
+
*/
|
|
45
|
+
export function classifyReviewTier({ planLevel, designPath } = {}) {
|
|
46
|
+
if (planLevel === 'none') {
|
|
47
|
+
return { tier: 'self', reason: `plan_level=none(极小变更,≤${SELF_REVIEW_FILE_THRESHOLD} 文件等价)`, fileCount: null }
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
let fileCount = null
|
|
51
|
+
if (designPath) {
|
|
52
|
+
fileCount = parseFileChangeList(designPath).size
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
if (fileCount !== null && fileCount <= SELF_REVIEW_FILE_THRESHOLD) {
|
|
56
|
+
return { tier: 'self', reason: `变更文件 ${fileCount} ≤ ${SELF_REVIEW_FILE_THRESHOLD}`, fileCount }
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const reason = fileCount === null
|
|
60
|
+
? (planLevel
|
|
61
|
+
? `plan_level=${planLevel},无法解析变更文件数,按正常规模处理`
|
|
62
|
+
: '无法解析 design.md 变更文件清单,按正常规模处理')
|
|
63
|
+
: `变更文件 ${fileCount} > ${SELF_REVIEW_FILE_THRESHOLD}`
|
|
64
|
+
return { tier: 'independent', reason, fileCount }
|
|
65
|
+
}
|