sillyspec 3.4.1 → 3.5.0
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/commands/sillyspec/archive.md +1 -1
- package/.claude/commands/sillyspec/brainstorm.md +1 -1
- package/.claude/commands/sillyspec/continue.md +8 -6
- package/.claude/commands/sillyspec/execute.md +62 -109
- package/.claude/commands/sillyspec/export.md +3 -12
- package/.claude/commands/sillyspec/plan.md +27 -1
- package/.claude/commands/sillyspec/quick.md +29 -9
- package/.claude/commands/sillyspec/resume.md +8 -1
- package/.claude/commands/sillyspec/scan-quick.md +3 -2
- package/.claude/commands/sillyspec/verify.md +1 -1
- package/package.json +1 -1
- package/templates/archive.md +1 -1
- package/templates/brainstorm.md +1 -1
- package/templates/continue.md +8 -1
- package/templates/execute.md +62 -109
- package/templates/export.md +3 -1
- package/templates/plan.md +27 -1
- package/templates/quick.md +29 -9
- package/templates/resume.md +8 -1
- package/templates/scan-quick.md +3 -2
- package/templates/verify.md +1 -1
|
@@ -53,7 +53,7 @@ $ARGUMENTS
|
|
|
53
53
|
|
|
54
54
|
- **tasks.md:** 确保所有 checkbox 都已勾选 `[x]`
|
|
55
55
|
- **ROADMAP.md**(如存在):标记对应 Phase 已完成
|
|
56
|
-
- **STATE.md:**
|
|
56
|
+
- **STATE.md:** 清除当前变更信息,历史记录追加归档完成(含精确到秒的时间戳)
|
|
57
57
|
- **Git 提交:** `git add .sillyspec/ && git commit -m "docs: archive sillyspec change <change-name>"`
|
|
58
58
|
|
|
59
59
|
**工作区模式下:** 如果变更属于某个子项目,cd 到子项目目录执行 git commit。工作区根目录无 git 则跳过。
|
|
@@ -58,7 +58,7 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
58
58
|
**单项目模式:**
|
|
59
59
|
```bash
|
|
60
60
|
cat .sillyspec/{PROJECT,REQUIREMENTS,ROADMAP}.md 2>/dev/null
|
|
61
|
-
cat .sillyspec/codebase/{STRUCTURE,CONVENTIONS}.md 2>/dev/null
|
|
61
|
+
cat .sillyspec/codebase/{STRUCTURE,CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
|
|
62
62
|
ls .sillyspec/changes/ 2>/dev/null | grep -v archive
|
|
63
63
|
ls .sillyspec/knowledge/ 2>/dev/null
|
|
64
64
|
```
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: 自动判断并执行下一步
|
|
3
|
-
argument-hint: ""
|
|
4
|
-
---
|
|
5
|
-
|
|
6
1
|
## 核心约束(必须遵守)
|
|
7
2
|
- ❌ 跳过自动判断,直接执行某个阶段
|
|
8
3
|
|
|
@@ -10,7 +5,14 @@ argument-hint: ""
|
|
|
10
5
|
|
|
11
6
|
## 判断逻辑
|
|
12
7
|
|
|
13
|
-
|
|
8
|
+
**先检查是否工作区模式:**
|
|
9
|
+
```bash
|
|
10
|
+
cat .sillyspec/config.yaml 2>/dev/null | grep -q "projects"
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**工作区模式:** 同时检查根目录和每个子项目,列出所有未完成的工作,让用户选择继续哪个。
|
|
14
|
+
|
|
15
|
+
**单项目模式:** 按顺序检查,第一个未完成的就执行:
|
|
14
16
|
|
|
15
17
|
```
|
|
16
18
|
1. 有进行中的变更?
|
|
@@ -6,17 +6,22 @@
|
|
|
6
6
|
- ❌ 跳步执行(不允许跳过 plan 直接 execute)
|
|
7
7
|
- ❌ 先写代码后补测试
|
|
8
8
|
- ❌ 编造不存在的方法/注解/路径/类/字段
|
|
9
|
-
- ❌
|
|
9
|
+
- ❌ 自行补全缺失的接口/方法(应报告 BLOCKED)
|
|
10
10
|
- ❌ 意外修改了计划外的文件却不报告
|
|
11
11
|
|
|
12
12
|
## 状态检查(必须先执行)
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
sillyspec
|
|
15
|
+
cat .sillyspec/STATE.md 2>/dev/null
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
有 STATE.md 且 phase 为 execute → 继续。无 STATE.md 或 phase 不对 → 检查是否有未完成的 tasks.md:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
ls .sillyspec/changes/*/tasks.md 2>/dev/null | xargs grep -l '\- \[ \]' 2>/dev/null
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
有未完成的 tasks.md → 继续。没有 → 提示 `/sillyspec:continue`。
|
|
20
25
|
|
|
21
26
|
## 执行范围
|
|
22
27
|
$ARGUMENTS
|
|
@@ -29,143 +34,95 @@ $ARGUMENTS
|
|
|
29
34
|
cat .sillyspec/config.yaml 2>/dev/null
|
|
30
35
|
```
|
|
31
36
|
|
|
32
|
-
**工作区模式:** 根据计划 Task 标注确定子项目,额外加载共享规范 + CODEBASE-OVERVIEW.md
|
|
37
|
+
**工作区模式:** 根据计划 Task 标注确定子项目,额外加载共享规范 + CODEBASE-OVERVIEW.md。所有代码修改、测试运行、git commit 都在子项目目录中执行。
|
|
33
38
|
|
|
34
|
-
|
|
39
|
+
**加载以下文件(主代理读取,后续注入子代理):**
|
|
35
40
|
```bash
|
|
36
41
|
PLAN=$(ls -t .sillyspec/changes/*/tasks.md 2>/dev/null | head -1); cat "$PLAN"
|
|
37
42
|
LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
|
|
38
43
|
cat "$LATEST"/{tasks,design}.md 2>/dev/null
|
|
39
|
-
cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
|
|
44
|
+
cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
|
|
45
|
+
cat .sillyspec/local.yaml 2>/dev/null
|
|
40
46
|
```
|
|
41
47
|
|
|
42
|
-
|
|
48
|
+
如果 `$ARGUMENTS` 指定范围(如 `wave-1`、`task-3`),只执行对应部分。
|
|
43
49
|
|
|
44
50
|
---
|
|
45
51
|
|
|
46
|
-
##
|
|
52
|
+
## 确认频率
|
|
47
53
|
|
|
48
54
|
用 AskUserQuestion 询问用户选择:
|
|
49
|
-
|
|
50
|
-
**
|
|
51
|
-
-
|
|
52
|
-
- 子代理并行 — 每个 Task 启动独立子代理,适合多任务独立变更
|
|
53
|
-
|
|
54
|
-
**2. 确认频率:**
|
|
55
|
-
- 每个任务确认 — 每完成一个 task 展示结果,等用户确认后继续
|
|
56
|
-
- 每 N 个任务确认 — 每完成 N 个 task 汇总展示,用户一次性确认
|
|
57
|
-
- AI 自主判断 — AI 在遇到歧义、风险、计划外变更时才询问,其余自动推进
|
|
58
|
-
- 全自动 — 全部自动执行,不在中途打断用户
|
|
59
|
-
|
|
60
|
-
选择子代理模式时:
|
|
61
|
-
1. 按计划的 Wave 分组
|
|
62
|
-
2. 每个 Task 启动独立子代理(不继承主 session 历史)
|
|
63
|
-
3. 子代理上下文:任务描述 + 相关约定 + 要修改文件和被调用类的源码
|
|
55
|
+
- **每个 Wave 确认** — 每个 Wave 完成后展示结果,等用户确认后继续下一 Wave
|
|
56
|
+
- **AI 自主判断** — AI 在遇到 BLOCKED 或计划外变更时才询问,其余自动推进
|
|
57
|
+
- **全自动** — 全部自动执行,不在中途打断用户
|
|
64
58
|
|
|
65
59
|
---
|
|
66
60
|
|
|
67
|
-
##
|
|
68
|
-
|
|
69
|
-
### 1. 先读后写
|
|
70
|
-
|
|
71
|
-
写代码前,读取相关源文件确认风格和方法签名:
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
# 读取 CONVENTIONS
|
|
75
|
-
cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
|
|
76
|
-
# 读取要修改的文件和同模块参考文件
|
|
77
|
-
cat <要修改的文件路径>
|
|
78
|
-
cat <参考文件路径>
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**调用已有方法前,grep 确认存在:**
|
|
82
|
-
```bash
|
|
83
|
-
grep -rn "public.*getById" --include="*.java" src/main/java/**/service/
|
|
84
|
-
```
|
|
85
|
-
grep 不到 → 不许调用,先查清楚或报告给用户。
|
|
86
|
-
|
|
87
|
-
### 2. TDD(强制执行,不可跳过)
|
|
88
|
-
|
|
89
|
-
#### 🔴 RED — 写失败测试
|
|
90
|
-
|
|
91
|
-
先写测试文件,再写实现代码。写代码前测试必须先存在。
|
|
92
|
-
|
|
93
|
-
**写完测试后,立即运行确认失败:**
|
|
61
|
+
## 子代理执行(强制模式)
|
|
94
62
|
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
cat .sillyspec/local.yaml 2>/dev/null 2>/dev/null
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
如果有,使用 local.yaml 中的命令(含 `-s` 等参数);否则使用默认命令:
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
mvn test -pl <模块> -Dtest=<测试类> 2>/dev/null || ./gradlew test --tests <测试类> 2>/dev/null || npm test -- --testPathPattern=<测试文件> 2>/dev/null || pytest <测试文件> 2>/dev/null
|
|
104
|
-
```
|
|
63
|
+
**所有任务通过子代理执行,主代理负责调度和记录。**
|
|
105
64
|
|
|
106
|
-
|
|
107
|
-
- 测试失败(不是编译错误)
|
|
108
|
-
- 失败原因是功能未实现(不是语法错误)
|
|
65
|
+
### 执行流程
|
|
109
66
|
|
|
110
|
-
|
|
67
|
+
1. 解析 tasks.md,按 Wave 分组
|
|
68
|
+
2. 同一 Wave 内的任务**并行启动**子代理,不同 Wave **串行等待**
|
|
69
|
+
3. 每个 Wave 完成后,根据用户选择的确认频率决定是否暂停
|
|
70
|
+
4. 子代理返回结果后,主代理勾选 tasks.md、更新 STATE.md
|
|
111
71
|
|
|
112
|
-
|
|
72
|
+
### 子代理 Prompt 模板
|
|
113
73
|
|
|
114
|
-
|
|
74
|
+
主代理在 dispatch 子代理前,必须准备以下 prompt(所有内容**内联**,不让子代理自己读文件):
|
|
115
75
|
|
|
116
|
-
**写完后立即运行确认通过:**
|
|
117
|
-
|
|
118
|
-
先检查 local.yaml 是否有构建命令配置:
|
|
119
|
-
```bash
|
|
120
|
-
cat .sillyspec/local.yaml 2>/dev/null 2>/dev/null
|
|
121
76
|
```
|
|
77
|
+
你正在执行任务:
|
|
122
78
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
```bash
|
|
126
|
-
mvn test -pl <模块> -Dtest=<测试类> 2>/dev/null || ./gradlew test --tests <测试类> 2>/dev/null || npm test -- --testPathPattern=<测试文件> 2>/dev/null || pytest <测试文件> 2>/dev/null
|
|
127
|
-
```
|
|
79
|
+
## 任务描述
|
|
80
|
+
{tasks.md 中当前 task 的完整内容,包括步骤字段}
|
|
128
81
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
- 其他已有测试没有因此失败
|
|
132
|
-
- 无编译错误、无 warnings
|
|
82
|
+
## 项目约定
|
|
83
|
+
{CONVENTIONS.md 全文}
|
|
133
84
|
|
|
134
|
-
|
|
85
|
+
## 项目架构
|
|
86
|
+
{ARCHITECTURE.md 全文}
|
|
135
87
|
|
|
136
|
-
|
|
88
|
+
## 构建命令
|
|
89
|
+
{local.yaml 中的 build 命令,如无则给默认命令}
|
|
137
90
|
|
|
138
|
-
|
|
91
|
+
## 工作目录
|
|
92
|
+
{子项目目录路径,工作区模式需要 cd 到此目录}
|
|
139
93
|
|
|
140
|
-
|
|
94
|
+
## 铁律(必须遵守)
|
|
95
|
+
1. **先读后写:** 先 cat 要修改的文件和参考文件,确认风格和方法签名后再写
|
|
96
|
+
2. **grep 确认:** 调用已有方法前必须 grep 确认存在,grep 不到 → 报告 BLOCKED
|
|
97
|
+
3. **不编造:** 不编造不存在的方法/注解/类/字段
|
|
98
|
+
4. **不自行补全:** 发现缺失接口/方法,不自己写,报告 BLOCKED
|
|
99
|
+
5. **TDD 不跳步:** 按任务步骤逐步执行,每步必须运行测试命令并确认结果
|
|
100
|
+
6. **测试直接通过 = 测了已有行为,重写测试**
|
|
101
|
+
7. **commit:** 完成后在工作目录执行 git add -A && git commit
|
|
102
|
+
8. **不修改计划外的文件**,如必须修改则在报告中说明
|
|
141
103
|
|
|
142
|
-
|
|
104
|
+
## 完成后报告(严格按此格式)
|
|
143
105
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
### 4. Git commit
|
|
151
|
-
|
|
152
|
-
**先确认当前在 git 仓库中:**
|
|
153
|
-
```bash
|
|
154
|
-
git rev-parse --is-inside-work-tree 2>/dev/null
|
|
106
|
+
- **Status:** DONE / DONE_WITH_CONCERNS / BLOCKED
|
|
107
|
+
- **改动文件:** {列表}
|
|
108
|
+
- **测试结果:** {通过/失败/跳过及原因}
|
|
109
|
+
- **Commit:** {hash 或 "无"}
|
|
110
|
+
- **问题:** {BLOCKED 原因 / DONE_WITH_CONCERNS 描述 / 无}
|
|
155
111
|
```
|
|
156
112
|
|
|
157
|
-
|
|
113
|
+
### 子代理结果处理
|
|
158
114
|
|
|
159
|
-
|
|
115
|
+
子代理返回后,主代理:
|
|
160
116
|
|
|
161
|
-
|
|
117
|
+
1. **DONE** → 勾选 tasks.md,记录精确到秒的时间戳
|
|
118
|
+
2. **DONE_WITH_CONCERNS** → 勾选 tasks.md,记录问题到报告
|
|
119
|
+
3. **BLOCKED** → 不勾选,报告给用户,AskUserQuestion 三选一:
|
|
120
|
+
- 重试(重新 dispatch 同一任务)
|
|
121
|
+
- 跳过(勾选并标注 SKIPPED)
|
|
122
|
+
- 停止(暂停执行,用户处理后继续)
|
|
162
123
|
|
|
163
124
|
---
|
|
164
125
|
|
|
165
|
-
## 偏差处理
|
|
166
|
-
|
|
167
|
-
遇到问题:**停 → 报告 → 等人工确认。** 代码缺失、方法不存在、计划外变更 → 先读已有代码,再问用户。
|
|
168
|
-
|
|
169
126
|
## 完成后
|
|
170
127
|
|
|
171
128
|
所有任务完成后,用 AskUserQuestion 询问用户下一步:
|
|
@@ -173,8 +130,4 @@ git rev-parse --is-inside-work-tree 2>/dev/null
|
|
|
173
130
|
2. **归档** — 跳过 verify,执行 `/sillyspec:archive`
|
|
174
131
|
3. **继续开发** — 不结束当前阶段
|
|
175
132
|
|
|
176
|
-
|
|
177
|
-
sillyspec status --json && sillyspec next
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
更新 `.sillyspec/STATE.md`:阶段改为 `execute ✅` 或 `execute 🔄 (X/M)`,历史记录追加执行结果。
|
|
133
|
+
更新 `.sillyspec/STATE.md`:阶段改为 `execute ✅` 或 `execute 🔄 (X/M)`,历史记录追加执行结果(含精确到秒的时间戳)。
|
|
@@ -1,14 +1,3 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: 导出成功方案为可复用模板
|
|
3
|
-
argument-hint: "<change-name> [--to <path>]"
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
## 核心约束(必须遵守)
|
|
7
|
-
- ❌ 修改任何文件(只读)
|
|
8
|
-
|
|
9
|
-
## 参数解析
|
|
10
|
-
`$ARGUMENTS`:变更名 + 可选 `--to` 输出路径(默认 `~/.sillyspec/templates/<change-name>/`)
|
|
11
|
-
|
|
12
1
|
## 核心约束(必须遵守)
|
|
13
2
|
- ❌ 修改任何文件(只读)
|
|
14
3
|
|
|
@@ -19,7 +8,9 @@ argument-hint: "<change-name> [--to <path>]"
|
|
|
19
8
|
|
|
20
9
|
## 流程
|
|
21
10
|
|
|
22
|
-
1. **读取变更文件:**
|
|
11
|
+
1. **读取变更文件:**
|
|
12
|
+
- 先检查根目录:`cat .sillyspec/changes/$ARGUMENTS/{design}.md 2>/dev/null`
|
|
13
|
+
- 根目录没有 → 检查子项目:遍历 config.yaml 中的子项目路径,查找 `$ARGUMENTS`
|
|
23
14
|
2. **清理为通用模板:** 移除项目特定信息,保留通用设计方案,添加 `notes.md` 使用建议。
|
|
24
15
|
3. **导出:** `mkdir -p ~/.sillyspec/templates/<change-name>` 并复制文件。
|
|
25
16
|
4. **确认:** 展示摘要和模板路径。
|
|
@@ -41,7 +41,33 @@ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
|
|
|
41
41
|
|
|
42
42
|
### 2. 逐任务展开
|
|
43
43
|
|
|
44
|
-
把 tasks.md 每个 checkbox
|
|
44
|
+
把 tasks.md 每个 checkbox **保留 `- [ ]` 格式**并展开为任务描述,按 Wave 分组组织。工作区模式下每个 Task 标注所属项目。
|
|
45
|
+
|
|
46
|
+
**输出格式要求(必须严格遵守):**
|
|
47
|
+
|
|
48
|
+
```markdown
|
|
49
|
+
### Wave 1(并行,无依赖)
|
|
50
|
+
- [ ] 添加用户创建接口
|
|
51
|
+
- 修改: `UserController.java`、`UserService.java`
|
|
52
|
+
- 参考: `RoleController.createRole`
|
|
53
|
+
- 步骤:
|
|
54
|
+
1. 写测试 UserControllerTest.testCreateUser
|
|
55
|
+
2. 运行测试确认失败
|
|
56
|
+
3. 写 UserController.createUser
|
|
57
|
+
4. 运行测试确认通过
|
|
58
|
+
|
|
59
|
+
- [ ] 添加角色创建接口
|
|
60
|
+
- ...
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**每个 Task 必须保留 `- [ ]` checkbox,这是 execute 阶段勾选完成状态的依据。** 禁止写成纯文本列表。
|
|
64
|
+
|
|
65
|
+
**每个 Task 必须包含「步骤」字段,列出 TDD 执行顺序:**
|
|
66
|
+
- 1. 写测试 → 2. 运行确认失败 → 3. 写代码 → 4. 运行确认通过
|
|
67
|
+
|
|
68
|
+
**纯配置/数据/文档类任务可跳过 TDD,步骤简化为:1. 实现 → 2. 验证**
|
|
69
|
+
|
|
70
|
+
**注意:不需要写精确方法签名和代码示例。** 方法签名和代码风格由 execute 阶段先读后写确认。plan 专注"做什么"和"执行顺序"。
|
|
45
71
|
|
|
46
72
|
**每个 Task 包含:**
|
|
47
73
|
- 精确文件路径(修改哪个文件)
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
## 用法
|
|
10
10
|
|
|
11
|
-
- `/sillyspec:quick "修复用户创建接口漏了手机号校验"` —
|
|
11
|
+
- `/sillyspec:quick "修复用户创建接口漏了手机号校验"` — 独立记录到按用户名隔离的 QUICKLOG
|
|
12
12
|
- `/sillyspec:quick --change user-module "修复用户创建接口漏了手机号校验"` — 追加到 user-module 变更的 tasks.md
|
|
13
13
|
|
|
14
14
|
## 任务
|
|
@@ -32,18 +32,38 @@ $ARGUMENTS
|
|
|
32
32
|
测试文件必须保留在项目中,不能删除。违反 TDD → 删掉代码从测试重新开始。
|
|
33
33
|
- 纯配置/数据/文档可跳过 TDD
|
|
34
34
|
- 其他情况一律走 TDD
|
|
35
|
-
6.
|
|
35
|
+
6. **运行测试:** 先检查 local.yaml 构建命令配置:
|
|
36
|
+
```bash
|
|
37
|
+
cat .sillyspec/local.yaml 2>/dev/null
|
|
38
|
+
```
|
|
39
|
+
如果有则使用 local.yaml 中的命令;否则使用默认命令:
|
|
40
|
+
```bash
|
|
41
|
+
mvn test -pl <模块> -Dtest=<测试类> 2>/dev/null || ./gradlew test --tests <测试类> 2>/dev/null || pnpm test 2>/dev/null || npm test 2>/dev/null || pytest <测试文件> 2>/dev/null
|
|
42
|
+
```
|
|
36
43
|
7. **Git commit:** 展示 commit message 给用户确认后提交。**工作区模式下,确认当前在正确的子项目目录中执行 commit。**
|
|
37
44
|
8. **记录:**
|
|
38
|
-
- **有 `--change`:** 在 `.sillyspec/changes/<变更名>/tasks.md` 追加 task
|
|
39
|
-
|
|
45
|
+
- **有 `--change`:** 在 `.sillyspec/changes/<变更名>/tasks.md` 追加 task 并勾选,**记录精确到秒的时间戳**:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
- [x] [YYYY-MM-DD HH:MM:SS] 任务描述
|
|
49
|
+
```
|
|
50
|
+
- **无 `--change`:** 记录到 `.sillyspec/quicklog/QUICKLOG-<git用户名>.md`(见下方规则)
|
|
40
51
|
9. **检查复杂度:** 任务比预期复杂 → 建议用完整流程
|
|
41
52
|
|
|
42
|
-
|
|
53
|
+
10. **记录发现的坑:** 执行过程中如果发现项目特有的规律、陷阱或约定(如"某方法参数顺序容易搞反"、"某表有隐藏软删除字段"),追加到 CONVENTIONS.md 的「注意事项」章节。**工作区模式下:** 只影响当前子项目 → 写入当前子项目 `.sillyspec/codebase/CONVENTIONS.md`;影响多个子项目 → 写入 `.sillyspec/shared/CONVENTIONS.md`(共享规范,所有子项目可见)。
|
|
54
|
+
|
|
55
|
+
### QUICKLOG 规则
|
|
56
|
+
|
|
57
|
+
**按 git 用户名隔离,避免多人同时操作冲突:**
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
USER=$(git config user.name 2>/dev/null || echo "default")
|
|
61
|
+
LOG_FILE=".sillyspec/quicklog/QUICKLOG-${USER}.md"
|
|
62
|
+
```
|
|
43
63
|
|
|
44
|
-
|
|
64
|
+
文件路径:`$LOG_FILE`
|
|
45
65
|
|
|
46
|
-
|
|
66
|
+
**追加记录格式(时间精确到秒):**
|
|
47
67
|
```markdown
|
|
48
68
|
## YYYY-MM-DD HH:MM:SS | fix: 任务描述
|
|
49
69
|
- 文件:`修改的文件列表`
|
|
@@ -52,5 +72,5 @@ $ARGUMENTS
|
|
|
52
72
|
```
|
|
53
73
|
|
|
54
74
|
**文件轮转:** 追加前检查文件大小,超过 500 行则:
|
|
55
|
-
1.
|
|
56
|
-
2. 创建新的空 `QUICKLOG.md`
|
|
75
|
+
1. 将当前文件重命名为 `QUICKLOG-${USER}-YYYY-MM-DD.md`
|
|
76
|
+
2. 创建新的空 `QUICKLOG-${USER}.md`
|
|
@@ -17,12 +17,19 @@ cat .sillyspec/STATE.md 2>/dev/null
|
|
|
17
17
|
|
|
18
18
|
**有 STATE.md:** 提取并展示当前变更、阶段、进度、下一步命令、阶段进度表、关键决策。AskUserQuestion:直接继续 / 查看更多细节。
|
|
19
19
|
|
|
20
|
-
**无 STATE.md:**
|
|
20
|
+
**无 STATE.md:** 自动探测(工作区模式下同时检查子项目):
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
|
+
cat .sillyspec/config.yaml 2>/dev/null # 检查是否工作区模式
|
|
23
24
|
ls .sillyspec/changes/*/MASTER.md 2>/dev/null
|
|
24
25
|
ls -d .sillyspec/changes/*/ | grep -v archive | grep -v stages | tail -1 2>/dev/null
|
|
25
26
|
ls .sillyspec/codebase/*.md .sillyspec/codebase/details/*.md .sillyspec/changes/*/tasks.md .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
|
|
27
|
+
# 工作区模式:检查每个子项目的状态
|
|
28
|
+
for proj in $(cat .sillyspec/config.yaml | grep -oP 'path:\s*\K.*'); do
|
|
29
|
+
echo "=== $(basename $proj) ==="
|
|
30
|
+
cat "$proj/.sillyspec/STATE.md" 2>/dev/null
|
|
31
|
+
ls "$proj/.sillyspec/changes/" 2>/dev/null | grep -v archive
|
|
32
|
+
done
|
|
26
33
|
```
|
|
27
34
|
|
|
28
35
|
**探测结果推断:**
|
|
@@ -27,11 +27,12 @@ find . -maxdepth 2 -name "*.config.*" -not -path "*/node_modules/*" -not -path "
|
|
|
27
27
|
|
|
28
28
|
### Step 3: 生成文档
|
|
29
29
|
|
|
30
|
-
`mkdir -p .sillyspec/codebase`,生成
|
|
30
|
+
`mkdir -p .sillyspec/codebase`,生成 4 份文档:
|
|
31
31
|
|
|
32
32
|
1. **ARCHITECTURE.md** — 架构 + 技术栈(合并原 STACK.md)
|
|
33
33
|
2. **STRUCTURE.md** — 目录结构(`find . -type f | head -200`)
|
|
34
|
-
3. **
|
|
34
|
+
3. **CONVENTIONS.md** — 空骨架文件,含章节标题(注意事项、代码风格等),供后续 quick/execute 追加
|
|
35
|
+
4. **PROJECT.md** — 项目概览
|
|
35
36
|
|
|
36
37
|
### Step 4: Git 提交
|
|
37
38
|
|
package/package.json
CHANGED
package/templates/archive.md
CHANGED
|
@@ -53,7 +53,7 @@ $ARGUMENTS
|
|
|
53
53
|
|
|
54
54
|
- **tasks.md:** 确保所有 checkbox 都已勾选 `[x]`
|
|
55
55
|
- **ROADMAP.md**(如存在):标记对应 Phase 已完成
|
|
56
|
-
- **STATE.md:**
|
|
56
|
+
- **STATE.md:** 清除当前变更信息,历史记录追加归档完成(含精确到秒的时间戳)
|
|
57
57
|
- **Git 提交:** `git add .sillyspec/ && git commit -m "docs: archive sillyspec change <change-name>"`
|
|
58
58
|
|
|
59
59
|
**工作区模式下:** 如果变更属于某个子项目,cd 到子项目目录执行 git commit。工作区根目录无 git 则跳过。
|
package/templates/brainstorm.md
CHANGED
|
@@ -58,7 +58,7 @@ cat .sillyspec/config.yaml 2>/dev/null
|
|
|
58
58
|
**单项目模式:**
|
|
59
59
|
```bash
|
|
60
60
|
cat .sillyspec/{PROJECT,REQUIREMENTS,ROADMAP}.md 2>/dev/null
|
|
61
|
-
cat .sillyspec/codebase/{STRUCTURE,CONVENTIONS}.md 2>/dev/null
|
|
61
|
+
cat .sillyspec/codebase/{STRUCTURE,CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
|
|
62
62
|
ls .sillyspec/changes/ 2>/dev/null | grep -v archive
|
|
63
63
|
ls .sillyspec/knowledge/ 2>/dev/null
|
|
64
64
|
```
|
package/templates/continue.md
CHANGED
package/templates/execute.md
CHANGED
|
@@ -6,17 +6,22 @@
|
|
|
6
6
|
- ❌ 跳步执行(不允许跳过 plan 直接 execute)
|
|
7
7
|
- ❌ 先写代码后补测试
|
|
8
8
|
- ❌ 编造不存在的方法/注解/路径/类/字段
|
|
9
|
-
- ❌
|
|
9
|
+
- ❌ 自行补全缺失的接口/方法(应报告 BLOCKED)
|
|
10
10
|
- ❌ 意外修改了计划外的文件却不报告
|
|
11
11
|
|
|
12
12
|
## 状态检查(必须先执行)
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
sillyspec
|
|
15
|
+
cat .sillyspec/STATE.md 2>/dev/null
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
有 STATE.md 且 phase 为 execute → 继续。无 STATE.md 或 phase 不对 → 检查是否有未完成的 tasks.md:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
ls .sillyspec/changes/*/tasks.md 2>/dev/null | xargs grep -l '\- \[ \]' 2>/dev/null
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
有未完成的 tasks.md → 继续。没有 → 提示 `/sillyspec:continue`。
|
|
20
25
|
|
|
21
26
|
## 执行范围
|
|
22
27
|
$ARGUMENTS
|
|
@@ -29,143 +34,95 @@ $ARGUMENTS
|
|
|
29
34
|
cat .sillyspec/config.yaml 2>/dev/null
|
|
30
35
|
```
|
|
31
36
|
|
|
32
|
-
**工作区模式:** 根据计划 Task 标注确定子项目,额外加载共享规范 + CODEBASE-OVERVIEW.md
|
|
37
|
+
**工作区模式:** 根据计划 Task 标注确定子项目,额外加载共享规范 + CODEBASE-OVERVIEW.md。所有代码修改、测试运行、git commit 都在子项目目录中执行。
|
|
33
38
|
|
|
34
|
-
|
|
39
|
+
**加载以下文件(主代理读取,后续注入子代理):**
|
|
35
40
|
```bash
|
|
36
41
|
PLAN=$(ls -t .sillyspec/changes/*/tasks.md 2>/dev/null | head -1); cat "$PLAN"
|
|
37
42
|
LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
|
|
38
43
|
cat "$LATEST"/{tasks,design}.md 2>/dev/null
|
|
39
|
-
cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
|
|
44
|
+
cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
|
|
45
|
+
cat .sillyspec/local.yaml 2>/dev/null
|
|
40
46
|
```
|
|
41
47
|
|
|
42
|
-
|
|
48
|
+
如果 `$ARGUMENTS` 指定范围(如 `wave-1`、`task-3`),只执行对应部分。
|
|
43
49
|
|
|
44
50
|
---
|
|
45
51
|
|
|
46
|
-
##
|
|
52
|
+
## 确认频率
|
|
47
53
|
|
|
48
54
|
用 AskUserQuestion 询问用户选择:
|
|
49
|
-
|
|
50
|
-
**
|
|
51
|
-
-
|
|
52
|
-
- 子代理并行 — 每个 Task 启动独立子代理,适合多任务独立变更
|
|
53
|
-
|
|
54
|
-
**2. 确认频率:**
|
|
55
|
-
- 每个任务确认 — 每完成一个 task 展示结果,等用户确认后继续
|
|
56
|
-
- 每 N 个任务确认 — 每完成 N 个 task 汇总展示,用户一次性确认
|
|
57
|
-
- AI 自主判断 — AI 在遇到歧义、风险、计划外变更时才询问,其余自动推进
|
|
58
|
-
- 全自动 — 全部自动执行,不在中途打断用户
|
|
59
|
-
|
|
60
|
-
选择子代理模式时:
|
|
61
|
-
1. 按计划的 Wave 分组
|
|
62
|
-
2. 每个 Task 启动独立子代理(不继承主 session 历史)
|
|
63
|
-
3. 子代理上下文:任务描述 + 相关约定 + 要修改文件和被调用类的源码
|
|
55
|
+
- **每个 Wave 确认** — 每个 Wave 完成后展示结果,等用户确认后继续下一 Wave
|
|
56
|
+
- **AI 自主判断** — AI 在遇到 BLOCKED 或计划外变更时才询问,其余自动推进
|
|
57
|
+
- **全自动** — 全部自动执行,不在中途打断用户
|
|
64
58
|
|
|
65
59
|
---
|
|
66
60
|
|
|
67
|
-
##
|
|
68
|
-
|
|
69
|
-
### 1. 先读后写
|
|
70
|
-
|
|
71
|
-
写代码前,读取相关源文件确认风格和方法签名:
|
|
72
|
-
|
|
73
|
-
```bash
|
|
74
|
-
# 读取 CONVENTIONS
|
|
75
|
-
cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
|
|
76
|
-
# 读取要修改的文件和同模块参考文件
|
|
77
|
-
cat <要修改的文件路径>
|
|
78
|
-
cat <参考文件路径>
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**调用已有方法前,grep 确认存在:**
|
|
82
|
-
```bash
|
|
83
|
-
grep -rn "public.*getById" --include="*.java" src/main/java/**/service/
|
|
84
|
-
```
|
|
85
|
-
grep 不到 → 不许调用,先查清楚或报告给用户。
|
|
86
|
-
|
|
87
|
-
### 2. TDD(强制执行,不可跳过)
|
|
88
|
-
|
|
89
|
-
#### 🔴 RED — 写失败测试
|
|
90
|
-
|
|
91
|
-
先写测试文件,再写实现代码。写代码前测试必须先存在。
|
|
92
|
-
|
|
93
|
-
**写完测试后,立即运行确认失败:**
|
|
61
|
+
## 子代理执行(强制模式)
|
|
94
62
|
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
cat .sillyspec/local.yaml 2>/dev/null 2>/dev/null
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
如果有,使用 local.yaml 中的命令(含 `-s` 等参数);否则使用默认命令:
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
mvn test -pl <模块> -Dtest=<测试类> 2>/dev/null || ./gradlew test --tests <测试类> 2>/dev/null || npm test -- --testPathPattern=<测试文件> 2>/dev/null || pytest <测试文件> 2>/dev/null
|
|
104
|
-
```
|
|
63
|
+
**所有任务通过子代理执行,主代理负责调度和记录。**
|
|
105
64
|
|
|
106
|
-
|
|
107
|
-
- 测试失败(不是编译错误)
|
|
108
|
-
- 失败原因是功能未实现(不是语法错误)
|
|
65
|
+
### 执行流程
|
|
109
66
|
|
|
110
|
-
|
|
67
|
+
1. 解析 tasks.md,按 Wave 分组
|
|
68
|
+
2. 同一 Wave 内的任务**并行启动**子代理,不同 Wave **串行等待**
|
|
69
|
+
3. 每个 Wave 完成后,根据用户选择的确认频率决定是否暂停
|
|
70
|
+
4. 子代理返回结果后,主代理勾选 tasks.md、更新 STATE.md
|
|
111
71
|
|
|
112
|
-
|
|
72
|
+
### 子代理 Prompt 模板
|
|
113
73
|
|
|
114
|
-
|
|
74
|
+
主代理在 dispatch 子代理前,必须准备以下 prompt(所有内容**内联**,不让子代理自己读文件):
|
|
115
75
|
|
|
116
|
-
**写完后立即运行确认通过:**
|
|
117
|
-
|
|
118
|
-
先检查 local.yaml 是否有构建命令配置:
|
|
119
|
-
```bash
|
|
120
|
-
cat .sillyspec/local.yaml 2>/dev/null 2>/dev/null
|
|
121
76
|
```
|
|
77
|
+
你正在执行任务:
|
|
122
78
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
```bash
|
|
126
|
-
mvn test -pl <模块> -Dtest=<测试类> 2>/dev/null || ./gradlew test --tests <测试类> 2>/dev/null || npm test -- --testPathPattern=<测试文件> 2>/dev/null || pytest <测试文件> 2>/dev/null
|
|
127
|
-
```
|
|
79
|
+
## 任务描述
|
|
80
|
+
{tasks.md 中当前 task 的完整内容,包括步骤字段}
|
|
128
81
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
- 其他已有测试没有因此失败
|
|
132
|
-
- 无编译错误、无 warnings
|
|
82
|
+
## 项目约定
|
|
83
|
+
{CONVENTIONS.md 全文}
|
|
133
84
|
|
|
134
|
-
|
|
85
|
+
## 项目架构
|
|
86
|
+
{ARCHITECTURE.md 全文}
|
|
135
87
|
|
|
136
|
-
|
|
88
|
+
## 构建命令
|
|
89
|
+
{local.yaml 中的 build 命令,如无则给默认命令}
|
|
137
90
|
|
|
138
|
-
|
|
91
|
+
## 工作目录
|
|
92
|
+
{子项目目录路径,工作区模式需要 cd 到此目录}
|
|
139
93
|
|
|
140
|
-
|
|
94
|
+
## 铁律(必须遵守)
|
|
95
|
+
1. **先读后写:** 先 cat 要修改的文件和参考文件,确认风格和方法签名后再写
|
|
96
|
+
2. **grep 确认:** 调用已有方法前必须 grep 确认存在,grep 不到 → 报告 BLOCKED
|
|
97
|
+
3. **不编造:** 不编造不存在的方法/注解/类/字段
|
|
98
|
+
4. **不自行补全:** 发现缺失接口/方法,不自己写,报告 BLOCKED
|
|
99
|
+
5. **TDD 不跳步:** 按任务步骤逐步执行,每步必须运行测试命令并确认结果
|
|
100
|
+
6. **测试直接通过 = 测了已有行为,重写测试**
|
|
101
|
+
7. **commit:** 完成后在工作目录执行 git add -A && git commit
|
|
102
|
+
8. **不修改计划外的文件**,如必须修改则在报告中说明
|
|
141
103
|
|
|
142
|
-
|
|
104
|
+
## 完成后报告(严格按此格式)
|
|
143
105
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
### 4. Git commit
|
|
151
|
-
|
|
152
|
-
**先确认当前在 git 仓库中:**
|
|
153
|
-
```bash
|
|
154
|
-
git rev-parse --is-inside-work-tree 2>/dev/null
|
|
106
|
+
- **Status:** DONE / DONE_WITH_CONCERNS / BLOCKED
|
|
107
|
+
- **改动文件:** {列表}
|
|
108
|
+
- **测试结果:** {通过/失败/跳过及原因}
|
|
109
|
+
- **Commit:** {hash 或 "无"}
|
|
110
|
+
- **问题:** {BLOCKED 原因 / DONE_WITH_CONCERNS 描述 / 无}
|
|
155
111
|
```
|
|
156
112
|
|
|
157
|
-
|
|
113
|
+
### 子代理结果处理
|
|
158
114
|
|
|
159
|
-
|
|
115
|
+
子代理返回后,主代理:
|
|
160
116
|
|
|
161
|
-
|
|
117
|
+
1. **DONE** → 勾选 tasks.md,记录精确到秒的时间戳
|
|
118
|
+
2. **DONE_WITH_CONCERNS** → 勾选 tasks.md,记录问题到报告
|
|
119
|
+
3. **BLOCKED** → 不勾选,报告给用户,AskUserQuestion 三选一:
|
|
120
|
+
- 重试(重新 dispatch 同一任务)
|
|
121
|
+
- 跳过(勾选并标注 SKIPPED)
|
|
122
|
+
- 停止(暂停执行,用户处理后继续)
|
|
162
123
|
|
|
163
124
|
---
|
|
164
125
|
|
|
165
|
-
## 偏差处理
|
|
166
|
-
|
|
167
|
-
遇到问题:**停 → 报告 → 等人工确认。** 代码缺失、方法不存在、计划外变更 → 先读已有代码,再问用户。
|
|
168
|
-
|
|
169
126
|
## 完成后
|
|
170
127
|
|
|
171
128
|
所有任务完成后,用 AskUserQuestion 询问用户下一步:
|
|
@@ -173,8 +130,4 @@ git rev-parse --is-inside-work-tree 2>/dev/null
|
|
|
173
130
|
2. **归档** — 跳过 verify,执行 `/sillyspec:archive`
|
|
174
131
|
3. **继续开发** — 不结束当前阶段
|
|
175
132
|
|
|
176
|
-
|
|
177
|
-
sillyspec status --json && sillyspec next
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
更新 `.sillyspec/STATE.md`:阶段改为 `execute ✅` 或 `execute 🔄 (X/M)`,历史记录追加执行结果。
|
|
133
|
+
更新 `.sillyspec/STATE.md`:阶段改为 `execute ✅` 或 `execute 🔄 (X/M)`,历史记录追加执行结果(含精确到秒的时间戳)。
|
package/templates/export.md
CHANGED
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
|
|
9
9
|
## 流程
|
|
10
10
|
|
|
11
|
-
1. **读取变更文件:**
|
|
11
|
+
1. **读取变更文件:**
|
|
12
|
+
- 先检查根目录:`cat .sillyspec/changes/$ARGUMENTS/{design}.md 2>/dev/null`
|
|
13
|
+
- 根目录没有 → 检查子项目:遍历 config.yaml 中的子项目路径,查找 `$ARGUMENTS`
|
|
12
14
|
2. **清理为通用模板:** 移除项目特定信息,保留通用设计方案,添加 `notes.md` 使用建议。
|
|
13
15
|
3. **导出:** `mkdir -p ~/.sillyspec/templates/<change-name>` 并复制文件。
|
|
14
16
|
4. **确认:** 展示摘要和模板路径。
|
package/templates/plan.md
CHANGED
|
@@ -41,7 +41,33 @@ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
|
|
|
41
41
|
|
|
42
42
|
### 2. 逐任务展开
|
|
43
43
|
|
|
44
|
-
把 tasks.md 每个 checkbox
|
|
44
|
+
把 tasks.md 每个 checkbox **保留 `- [ ]` 格式**并展开为任务描述,按 Wave 分组组织。工作区模式下每个 Task 标注所属项目。
|
|
45
|
+
|
|
46
|
+
**输出格式要求(必须严格遵守):**
|
|
47
|
+
|
|
48
|
+
```markdown
|
|
49
|
+
### Wave 1(并行,无依赖)
|
|
50
|
+
- [ ] 添加用户创建接口
|
|
51
|
+
- 修改: `UserController.java`、`UserService.java`
|
|
52
|
+
- 参考: `RoleController.createRole`
|
|
53
|
+
- 步骤:
|
|
54
|
+
1. 写测试 UserControllerTest.testCreateUser
|
|
55
|
+
2. 运行测试确认失败
|
|
56
|
+
3. 写 UserController.createUser
|
|
57
|
+
4. 运行测试确认通过
|
|
58
|
+
|
|
59
|
+
- [ ] 添加角色创建接口
|
|
60
|
+
- ...
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**每个 Task 必须保留 `- [ ]` checkbox,这是 execute 阶段勾选完成状态的依据。** 禁止写成纯文本列表。
|
|
64
|
+
|
|
65
|
+
**每个 Task 必须包含「步骤」字段,列出 TDD 执行顺序:**
|
|
66
|
+
- 1. 写测试 → 2. 运行确认失败 → 3. 写代码 → 4. 运行确认通过
|
|
67
|
+
|
|
68
|
+
**纯配置/数据/文档类任务可跳过 TDD,步骤简化为:1. 实现 → 2. 验证**
|
|
69
|
+
|
|
70
|
+
**注意:不需要写精确方法签名和代码示例。** 方法签名和代码风格由 execute 阶段先读后写确认。plan 专注"做什么"和"执行顺序"。
|
|
45
71
|
|
|
46
72
|
**每个 Task 包含:**
|
|
47
73
|
- 精确文件路径(修改哪个文件)
|
package/templates/quick.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
## 用法
|
|
10
10
|
|
|
11
|
-
- `/sillyspec:quick "修复用户创建接口漏了手机号校验"` —
|
|
11
|
+
- `/sillyspec:quick "修复用户创建接口漏了手机号校验"` — 独立记录到按用户名隔离的 QUICKLOG
|
|
12
12
|
- `/sillyspec:quick --change user-module "修复用户创建接口漏了手机号校验"` — 追加到 user-module 变更的 tasks.md
|
|
13
13
|
|
|
14
14
|
## 任务
|
|
@@ -32,18 +32,38 @@ $ARGUMENTS
|
|
|
32
32
|
测试文件必须保留在项目中,不能删除。违反 TDD → 删掉代码从测试重新开始。
|
|
33
33
|
- 纯配置/数据/文档可跳过 TDD
|
|
34
34
|
- 其他情况一律走 TDD
|
|
35
|
-
6.
|
|
35
|
+
6. **运行测试:** 先检查 local.yaml 构建命令配置:
|
|
36
|
+
```bash
|
|
37
|
+
cat .sillyspec/local.yaml 2>/dev/null
|
|
38
|
+
```
|
|
39
|
+
如果有则使用 local.yaml 中的命令;否则使用默认命令:
|
|
40
|
+
```bash
|
|
41
|
+
mvn test -pl <模块> -Dtest=<测试类> 2>/dev/null || ./gradlew test --tests <测试类> 2>/dev/null || pnpm test 2>/dev/null || npm test 2>/dev/null || pytest <测试文件> 2>/dev/null
|
|
42
|
+
```
|
|
36
43
|
7. **Git commit:** 展示 commit message 给用户确认后提交。**工作区模式下,确认当前在正确的子项目目录中执行 commit。**
|
|
37
44
|
8. **记录:**
|
|
38
|
-
- **有 `--change`:** 在 `.sillyspec/changes/<变更名>/tasks.md` 追加 task
|
|
39
|
-
|
|
45
|
+
- **有 `--change`:** 在 `.sillyspec/changes/<变更名>/tasks.md` 追加 task 并勾选,**记录精确到秒的时间戳**:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
- [x] [YYYY-MM-DD HH:MM:SS] 任务描述
|
|
49
|
+
```
|
|
50
|
+
- **无 `--change`:** 记录到 `.sillyspec/quicklog/QUICKLOG-<git用户名>.md`(见下方规则)
|
|
40
51
|
9. **检查复杂度:** 任务比预期复杂 → 建议用完整流程
|
|
41
52
|
|
|
42
|
-
|
|
53
|
+
10. **记录发现的坑:** 执行过程中如果发现项目特有的规律、陷阱或约定(如"某方法参数顺序容易搞反"、"某表有隐藏软删除字段"),追加到 CONVENTIONS.md 的「注意事项」章节。**工作区模式下:** 只影响当前子项目 → 写入当前子项目 `.sillyspec/codebase/CONVENTIONS.md`;影响多个子项目 → 写入 `.sillyspec/shared/CONVENTIONS.md`(共享规范,所有子项目可见)。
|
|
54
|
+
|
|
55
|
+
### QUICKLOG 规则
|
|
56
|
+
|
|
57
|
+
**按 git 用户名隔离,避免多人同时操作冲突:**
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
USER=$(git config user.name 2>/dev/null || echo "default")
|
|
61
|
+
LOG_FILE=".sillyspec/quicklog/QUICKLOG-${USER}.md"
|
|
62
|
+
```
|
|
43
63
|
|
|
44
|
-
|
|
64
|
+
文件路径:`$LOG_FILE`
|
|
45
65
|
|
|
46
|
-
|
|
66
|
+
**追加记录格式(时间精确到秒):**
|
|
47
67
|
```markdown
|
|
48
68
|
## YYYY-MM-DD HH:MM:SS | fix: 任务描述
|
|
49
69
|
- 文件:`修改的文件列表`
|
|
@@ -52,5 +72,5 @@ $ARGUMENTS
|
|
|
52
72
|
```
|
|
53
73
|
|
|
54
74
|
**文件轮转:** 追加前检查文件大小,超过 500 行则:
|
|
55
|
-
1.
|
|
56
|
-
2. 创建新的空 `QUICKLOG.md`
|
|
75
|
+
1. 将当前文件重命名为 `QUICKLOG-${USER}-YYYY-MM-DD.md`
|
|
76
|
+
2. 创建新的空 `QUICKLOG-${USER}.md`
|
package/templates/resume.md
CHANGED
|
@@ -17,12 +17,19 @@ cat .sillyspec/STATE.md 2>/dev/null
|
|
|
17
17
|
|
|
18
18
|
**有 STATE.md:** 提取并展示当前变更、阶段、进度、下一步命令、阶段进度表、关键决策。AskUserQuestion:直接继续 / 查看更多细节。
|
|
19
19
|
|
|
20
|
-
**无 STATE.md:**
|
|
20
|
+
**无 STATE.md:** 自动探测(工作区模式下同时检查子项目):
|
|
21
21
|
|
|
22
22
|
```bash
|
|
23
|
+
cat .sillyspec/config.yaml 2>/dev/null # 检查是否工作区模式
|
|
23
24
|
ls .sillyspec/changes/*/MASTER.md 2>/dev/null
|
|
24
25
|
ls -d .sillyspec/changes/*/ | grep -v archive | grep -v stages | tail -1 2>/dev/null
|
|
25
26
|
ls .sillyspec/codebase/*.md .sillyspec/codebase/details/*.md .sillyspec/changes/*/tasks.md .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
|
|
27
|
+
# 工作区模式:检查每个子项目的状态
|
|
28
|
+
for proj in $(cat .sillyspec/config.yaml | grep -oP 'path:\s*\K.*'); do
|
|
29
|
+
echo "=== $(basename $proj) ==="
|
|
30
|
+
cat "$proj/.sillyspec/STATE.md" 2>/dev/null
|
|
31
|
+
ls "$proj/.sillyspec/changes/" 2>/dev/null | grep -v archive
|
|
32
|
+
done
|
|
26
33
|
```
|
|
27
34
|
|
|
28
35
|
**探测结果推断:**
|
package/templates/scan-quick.md
CHANGED
|
@@ -27,11 +27,12 @@ find . -maxdepth 2 -name "*.config.*" -not -path "*/node_modules/*" -not -path "
|
|
|
27
27
|
|
|
28
28
|
### Step 3: 生成文档
|
|
29
29
|
|
|
30
|
-
`mkdir -p .sillyspec/codebase`,生成
|
|
30
|
+
`mkdir -p .sillyspec/codebase`,生成 4 份文档:
|
|
31
31
|
|
|
32
32
|
1. **ARCHITECTURE.md** — 架构 + 技术栈(合并原 STACK.md)
|
|
33
33
|
2. **STRUCTURE.md** — 目录结构(`find . -type f | head -200`)
|
|
34
|
-
3. **
|
|
34
|
+
3. **CONVENTIONS.md** — 空骨架文件,含章节标题(注意事项、代码风格等),供后续 quick/execute 追加
|
|
35
|
+
4. **PROJECT.md** — 项目概览
|
|
35
36
|
|
|
36
37
|
### Step 4: Git 提交
|
|
37
38
|
|
package/templates/verify.md
CHANGED