sillyspec 3.0.0 → 3.2.1

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.
@@ -18,7 +18,7 @@ $ARGUMENTS
18
18
 
19
19
  读取 `.sillyspec/changes/<change-name>/` 下所有必要文件,逐项检查:
20
20
 
21
- - [ ] **文件完整性:** 检查 `proposal.md` 和 `design.md` 是否存在,缺失则警告
21
+ - [ ] **文件完整性:** 检查 `design.md` 是否存在,缺失则警告
22
22
  - [ ] **任务完成度:** 读取 `tasks.md`,统计已完成/未完成任务数。**有未完成的 → 用 AskUserQuestion 询问:**
23
23
  - ① 继续归档(未完成任务将被标记完成)
24
24
  - ② 取消,回去完成任务
@@ -35,7 +35,7 @@ $ARGUMENTS
35
35
 
36
36
  ### 3. Spec 沉淀
37
37
 
38
- 将 `.sillyspec/changes/<change-name>/specs/` 下的设计文档**复制到 `.sillyspec/specs/` 主目录**,确保已完成的设计规范可被后续变更参考。如目标已存在同名文件则跳过并提示。
38
+ 将 `.sillyspec/changes/<change-name>/` 下的设计文档**复制到 `.sillyspec/knowledge/` 主目录**,确保已完成的设计规范可被后续变更参考。如目标已存在同名文件则跳过并提示。
39
39
 
40
40
  ### 4. 用户确认
41
41
 
@@ -56,6 +56,8 @@ $ARGUMENTS
56
56
  - **STATE.md:** 清除当前变更信息,历史记录追加归档完成
57
57
  - **Git 提交:** `git add .sillyspec/ && git commit -m "docs: archive sillyspec change <change-name>"`
58
58
 
59
+ **工作区模式下:** 如果变更属于某个子项目,cd 到子项目目录执行 git commit。工作区根目录无 git 则跳过。
60
+
59
61
  ### 最后说:
60
62
 
61
63
  > ✅ 变更 `<change-name>` 已归档到 `archive/YYYY-MM-DD-<change-name>/`。继续:`/sillyspec:brainstorm "新想法"`
@@ -53,14 +53,14 @@ $ARGUMENTS
53
53
  cat .sillyspec/config.yaml 2>/dev/null
54
54
  ```
55
55
 
56
- **工作区模式:** AskUserQuestion 选子项目,加载子项目上下文 + 共享规范 + 工作区概览,设计文档保存到子项目 `.sillyspec/specs/`。
56
+ **工作区模式:** AskUserQuestion 选子项目,**cd 到子项目目录执行**,加载子项目上下文 + 共享规范 + 工作区概览,设计文档保存到子项目 `.sillyspec/changes/`。git commit 在子项目目录执行。
57
57
 
58
58
  **单项目模式:**
59
59
  ```bash
60
60
  cat .sillyspec/{PROJECT,REQUIREMENTS,ROADMAP}.md 2>/dev/null
61
61
  cat .sillyspec/codebase/{STRUCTURE,CONVENTIONS}.md 2>/dev/null
62
62
  ls .sillyspec/changes/ 2>/dev/null | grep -v archive
63
- ls .sillyspec/specs/ 2>/dev/null
63
+ ls .sillyspec/knowledge/ 2>/dev/null
64
64
  ```
65
65
 
66
66
  ### Step 1.5: 协作与复用检查
@@ -126,18 +126,24 @@ git commit -m "docs: master change plan for <变更名>"
126
126
 
127
127
  ### Step 6: 写设计文档
128
128
 
129
- 保存到 `.sillyspec/specs/YYYY-MM-DD-<topic>-design.md`:
129
+ 保存到 `.sillyspec/changes/<变更名>/design.md`:
130
130
 
131
131
  ```markdown
132
132
  # [Feature Name] 设计
133
133
 
134
- ## 概述
135
- ## 功能描述
134
+ ## 动机与范围
135
+ (为什么做、范围边界、成功标准)
136
+
137
+ ## 功能需求
138
+ (需求场景、验收标准)
139
+ - [ ] 标准 1
140
+
136
141
  ## 技术方案
137
142
  ## 约束和假设
138
143
  ## 不在范围内
139
- ## 验收标准
140
- - [ ] 标准 1
144
+ ## 文件变更
145
+ ## 代码风格参照
146
+ (参考已有源文件,标注返回值类型、异常类型、注解风格)
141
147
  ```
142
148
 
143
149
  **注意:** 引用的表名必须来自 ARCHITECTURE.md 数据模型或明确标注"新增"。必须先读取 `.sillyspec/codebase/ARCHITECTURE.md`。
@@ -163,12 +169,7 @@ sillyspec status --json
163
169
 
164
170
  ### Step 9: 输出技术方案
165
171
 
166
- 用户确认后,直接产出 `design.md` 写入 `.sillyspec/changes/<变更名>/design.md`。内容包含:
167
- - 架构决策及理由
168
- - 文件变更清单表格
169
- - 数据模型
170
- - API 设计
171
- - 代码风格参照(参考已有 Controller/Service/Entity 源文件,标注返回值类型、异常类型、注解风格)
172
+ 用户确认后,确认 design.md 已包含完整内容(动机、需求、方案、文件变更、代码风格参照)。如 Step 6 已保存则无需重复。
172
173
 
173
174
  ### Step 10: 更新 STATE.md
174
175
 
@@ -14,20 +14,16 @@ argument-hint: ""
14
14
 
15
15
  ```
16
16
  1. 有进行中的变更?
17
- 1a. 无文件提示完善 proposal
18
- 1b. 无 design.md → 提示补充 design
19
- 1c. tasks.md → 执行 /sillyspec:propose
20
- 1d. tasks.md 有未完成项 + 有计划 → 执行 /sillyspec:execute
21
- 1e. tasks.md 全完成 + 未验证 → 执行 /sillyspec:verify
22
- 1f. 已验证通过 → 执行 /sillyspec:archive
17
+ 1a. design.md 提示补充设计(/sillyspec:brainstorm)
18
+ 1b. 无 tasks.md → 执行 /sillyspec:plan
19
+ 1c. tasks.md 有未完成项 + 有计划 → 执行 /sillyspec:execute
20
+ 1d. tasks.md 全完成 + 未验证 → 执行 /sillyspec:verify(可选)
21
+ 1e. 已验证通过 → 执行 /sillyspec:archive
23
22
 
24
- 2. 有设计文档但无对应变更?
25
- → /sillyspec:propose <name>
26
-
27
- 3. 有 .sillyspec/codebase/ 但无进行中工作?
23
+ 2. 有 .sillyspec/codebase/ 但无进行中工作?
28
24
  → /sillyspec:brainstorm "你的想法"
29
25
 
30
- 4. 什么都没有?
26
+ 3. 什么都没有?
31
27
  → /sillyspec:init(新项目)或 /sillyspec:scan(棕地项目)
32
28
  ```
33
29
 
@@ -5,9 +5,6 @@
5
5
  - ❌ 跳过状态检查,自行推断阶段
6
6
  - ❌ 跳步执行(不允许跳过 plan 直接 execute)
7
7
  - ❌ 先写代码后补测试
8
- - ❌ "先写草稿回头再测"
9
- - ❌ 跳过测试因为"太简单"
10
- - ❌ 测试意外通过时不重写
11
8
  - ❌ 编造不存在的方法/注解/路径/类/字段
12
9
  - ❌ 自行补全缺失的接口/方法(应报告给用户)
13
10
  - ❌ 意外修改了计划外的文件却不报告
@@ -32,7 +29,7 @@ $ARGUMENTS
32
29
  cat .sillyspec/config.yaml 2>/dev/null
33
30
  ```
34
31
 
35
- **工作区模式:** 根据计划 Task 标注确定子项目,额外加载共享规范 + CODEBASE-OVERVIEW.md,执行前 cd 到对应子项目目录。
32
+ **工作区模式:** 根据计划 Task 标注确定子项目,额外加载共享规范 + CODEBASE-OVERVIEW.md,**执行前必须 cd 到对应子项目目录**。所有代码修改、测试运行、git commit 都在子项目目录中执行。一个 Task 属于哪个子项目,就 cd 到哪个子项目。
36
33
 
37
34
  **单项目模式:**
38
35
  ```bash
@@ -42,121 +39,132 @@ cat "$LATEST"/{tasks,design}.md 2>/dev/null
42
39
  cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
43
40
  ```
44
41
 
45
- ### 锚定确认(必须完成)
46
-
47
- 确认实际存在的文件:
48
- ```
49
- 已读取并理解:
50
- - [x] plan — 实现计划和执行顺序
51
- - [x] tasks.md — 实现清单
52
- - [x] design.md — 技术方案和文件变更
53
- 所有可用上下文已加载,开始执行。
54
- ```
55
-
56
- 如果 `$ARGUMENTS` 指定范围(如 `wave-1`、`task-3`),只执行对应部分。
42
+ 确认实际存在的文件,不存在的标注跳过。如果 `$ARGUMENTS` 指定范围(如 `wave-1`、`task-3`),只执行对应部分。
57
43
 
58
44
  ---
59
45
 
60
46
  ## 执行策略
61
47
 
62
- 用 AskUserQuestion 询问用户选择执行模式:
63
- 1. 串行执行 — 当前会话逐任务执行,适合简单变更
64
- 2. 子代理并行 — 每个 Task 启动独立子代理,适合多任务独立变更(需要 subagent 能力)
48
+ 用 AskUserQuestion 询问用户选择:
49
+
50
+ **1. 执行模式:**
51
+ - 串行执行 — 当前会话逐任务执行,适合简单变更
52
+ - 子代理并行 — 每个 Task 启动独立子代理,适合多任务独立变更
53
+
54
+ **2. 确认频率:**
55
+ - 每个任务确认 — 每完成一个 task 展示结果,等用户确认后继续
56
+ - 每 N 个任务确认 — 每完成 N 个 task 汇总展示,用户一次性确认
57
+ - AI 自主判断 — AI 在遇到歧义、风险、计划外变更时才询问,其余自动推进
58
+ - 全自动 — 全部自动执行,不在中途打断用户
65
59
 
66
60
  选择子代理模式时:
67
61
  1. 按计划的 Wave 分组
68
62
  2. 每个 Task 启动独立子代理(不继承主 session 历史)
69
- 3. 子代理上下文:任务描述 + TDD 纪律 + 精确文件路径 + 相关约定 + **要修改文件的当前源码** + **被调用类的源码**
63
+ 3. 子代理上下文:任务描述 + 相关约定 + 要修改文件和被调用类的源码
64
+
65
+ ---
70
66
 
71
- 选择串行模式时:
72
- 当前会话逐任务串行执行,每完成一个任务展示结果并等待用户确认。
67
+ ## 每个任务的执行流程
73
68
 
74
- ## 每个任务的 TDD 铁律
69
+ ### 1. 先读后写
75
70
 
71
+ 写代码前,读取相关源文件确认风格和方法签名:
72
+
73
+ ```bash
74
+ # 读取 CONVENTIONS
75
+ cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
76
+ # 读取要修改的文件和同模块参考文件
77
+ cat <要修改的文件路径>
78
+ cat <参考文件路径>
76
79
  ```
77
- 🔴 RED → 先写测试,运行确认失败
78
- 🟢 GREEN → 写最少代码让测试通过
79
- 🔵 REFACTOR → 清理,保持测试通过
80
- COMMIT → git 提交(测试文件必须包含在提交中)
81
- ☑️ CHECK → 勾选 tasks.md 中对应的 checkbox
80
+
81
+ **调用已有方法前,grep 确认存在:**
82
+ ```bash
83
+ grep -rn "public.*getById" --include="*.java" src/main/java/**/service/
82
84
  ```
85
+ grep 不到 → 不许调用,先查清楚或报告给用户。
83
86
 
84
- **Git 提交:** 检查 Git 仓库 → `git add -A` → 生成 commit message → **用 AskUserQuestion 展示 commit message 给用户确认**:
85
- 1. 确认提交 — 执行 `git commit`
86
- 2. 修改提交信息 — 用户调整后重新确认
87
- 3. 跳过提交 — 本任务不 commit(记录原因)
87
+ ### 2. TDD(强制执行,不可跳过)
88
88
 
89
- 用户确认后才执行 `git commit`。工作区模式下在子项目目录提交。
89
+ #### 🔴 RED — 写失败测试
90
90
 
91
- **勾选 tasks:** 每个 Task 完成后,**必须立即**在 `.sillyspec/changes/<变更名>/tasks.md` 中将对应 checkbox 标记为 `[x]`,并附上完成时间:`- [x] [YYYY-MM-DD HH:MM:SS] 任务描述`。这是 Task 完成的最后一步,不允许跳过。
91
+ 先写测试文件,再写实现代码。写代码前测试必须先存在。
92
92
 
93
- **测试文件必须保留:** 测试是产出物,不是草稿。写完的测试文件必须保留在项目中,随代码一起 commit,不能删除。
93
+ **写完测试后,立即运行确认失败:**
94
94
 
95
- **哪些任务可以跳过 TDD(不需要人工确认):**
96
- - 纯配置文件(YAML、properties、.env、JSON 配置)
97
- - 纯数据文件(SQL seed、fixture)
98
- - 纯文档(README、注释)
95
+ 先检查 local.yaml 是否有构建命令配置:
96
+ ```bash
97
+ cat .sillyspec/local.yaml 2>/dev/null 2>/dev/null
98
+ ```
99
+
100
+ 如果有,使用 local.yaml 中的命令(含 `-s` 等参数);否则使用默认命令:
99
101
 
100
- **其他情况一律走 TDD:** Service、Controller、Mapper、组件、工具类、DTO(需要验证序列化/校验逻辑时)、API 接口 — 全部先写测试。
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
+ ```
101
105
 
102
- **违反 TDD → 删掉代码从测试重新开始。没有例外。**
106
+ 确认:
107
+ - 测试失败(不是编译错误)
108
+ - 失败原因是功能未实现(不是语法错误)
103
109
 
104
- ## 写代码前必须读取现有源码(先读后写)
110
+ **测试直接通过?** 你在测试已有行为,重写测试。**测试编译报错?** 先修测试语法。
105
111
 
106
- **⛔ 铁律:**
107
- - 没有读过相关源文件,不允许写任何代码
108
- - 方法签名必须来自已有代码或 plan 中的明确定义,禁止凭空编造
109
- - 调用已有方法时,必须先 `cat` 源文件确认方法签名(参数、返回值、异常)
110
- - **调用任何已有方法前,必须 grep 确认方法存在**:
112
+ #### 🟢 GREEN — 写最少代码
111
113
 
114
+ 写刚好让测试通过的最少代码。不加额外功能。
115
+
116
+ **写完后立即运行确认通过:**
117
+
118
+ 先检查 local.yaml 是否有构建命令配置:
112
119
  ```bash
113
- # 调用 userService.getById() 之前
114
- grep -rn "public.*getById" --include="*.java" src/main/java/**/service/
115
- # 调用 result.success() 之前
116
- grep -rn "public.*success" --include="*.java" src/main/java/**/common/
120
+ cat .sillyspec/local.yaml 2>/dev/null 2>/dev/null
117
121
  ```
118
122
 
119
- grep 不到 → 方法不存在或名字不同 → 不许调用,先查清楚。
123
+ 如果有,使用 local.yaml 中的命令;否则使用默认命令:
120
124
 
121
125
  ```bash
122
- cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
126
+ mvn test -pl <模块> -Dtest=<测试类> 2>/dev/null || ./gradlew test --tests <测试类> 2>/dev/null || npm test -- --testPathPattern=<测试文件> 2>/dev/null || pytest <测试文件> 2>/dev/null
123
127
  ```
124
128
 
125
- 然后读取同模块已有代码(根据语言过滤):
129
+ 确认:
130
+ - 测试通过
131
+ - 其他已有测试没有因此失败
132
+ - 无编译错误、无 warnings
133
+
134
+ **编译不通过或测试失败?** 修代码,不是改测试。**其他测试被破坏?** 立即修复。
135
+
136
+ #### 🔵 REFACTOR — 清理
137
+
138
+ 在测试全绿的前提下清理:提取重复、改善命名、简化逻辑。重构后重新运行测试确认仍然通过。
139
+
140
+ **TDD 中间步骤(RED→GREEN→REFACTOR)连续执行,不需要每步等用户确认。但每一步都必须运行测试命令并确认结果,不可省略。**
141
+
142
+ **测试文件必须保留**,随代码一起 commit。违反 TDD(先写代码后补测试)→ 删代码重来。
143
+
144
+ **可跳过 TDD(不需要确认):** 纯配置(YAML/properties)、纯数据(SQL seed)、纯文档(README/注释)。
145
+
146
+ ### 3. 勾选 tasks
147
+
148
+ 完成后在 `.sillyspec/changes/<变更名>/tasks.md` 勾选对应 checkbox:`- [x] [YYYY-MM-DD HH:MM:SS] 任务描述`
149
+
150
+ ### 4. Git commit
151
+
152
+ **先确认当前在 git 仓库中:**
126
153
  ```bash
127
- # Controller/Handler/Router
128
- find . \( -path "*/controller*" -o -path "*/handler*" -o -path "*/router*" -o -path "*/api*" \) \
129
- -type f \( -name "*.java" -o -name "*.ts" -o -name "*.py" -o -name "*.go" \) \
130
- -not -path "*/{node_modules,dist,.git,vendor,build}/*" | head -15
131
- # Service/Manager/Repository
132
- find . \( -name "*Service*" -o -name "*Manager*" -o -name "*UseCase*" -o -name "*Repository*" \) \
133
- -type f \( -name "*.java" -o -name "*.ts" -o -name "*.py" -o -name "*.go" \) \
134
- -not -path "*/{node_modules,dist,.git,vendor,build}/*" | head -15
154
+ git rev-parse --is-inside-work-tree 2>/dev/null
135
155
  ```
136
156
 
137
- **找不到相关代码时:**
138
- - 棕地项目 → 报告缺失,请用户提供参考路径
139
- - 绿地项目 → 靠 CONVENTIONS.md + ARCHITECTURE.md + brainstorm 设计方案驱动
157
+ 如果不在 git 仓库中,提示用户当前目录没有 git 管理,跳过 commit 或让用户指定仓库路径。
140
158
 
141
- ## 两阶段审查
159
+ `git add -A` → 生成 commit message → **根据用户选择的确认频率决定是否立即确认或批量确认**。
142
160
 
143
- 每个任务完成后:
144
- - **A 规范合规:** tasks checkbox 完成?design 方案一致?测试有意义?
145
- - **B 代码质量:** DRY、YAGNI、死代码、错误处理、CONVENTIONS.md 合规?
161
+ **工作区模式下,每个子项目的 commit 独立执行,不要跨子项目 commit。**
146
162
 
147
- **3 轮审查不通过 → 提交人工处理。**
163
+ ---
148
164
 
149
165
  ## 偏差处理
150
166
 
151
- 遇到问题:**停 → 报告 → 等人工确认。** 代码缺失、方法不存在、权限注解未知先读已有代码确认风格,再问用户。
152
-
153
- ## 自检门控
154
-
155
- - [ ] 完成任务与 plan 一致?
156
- - [ ] tasks.md 所有 checkbox 都已勾选为 `[x]`?
157
- - [ ] 未意外修改计划外文件?
158
- - [ ] 每个任务有 git commit?
159
- - [ ] 测试全部通过?
167
+ 遇到问题:**停 → 报告 → 等人工确认。** 代码缺失、方法不存在、计划外变更先读已有代码,再问用户。
160
168
 
161
169
  ## 完成后
162
170
 
@@ -166,8 +174,7 @@ find . \( -name "*Service*" -o -name "*Manager*" -o -name "*UseCase*" -o -name "
166
174
  3. **继续开发** — 不结束当前阶段
167
175
 
168
176
  ```bash
169
- sillyspec status --json
170
- sillyspec next
177
+ sillyspec status --json && sillyspec next
171
178
  ```
172
179
 
173
180
  更新 `.sillyspec/STATE.md`:阶段改为 `execute ✅` 或 `execute 🔄 (X/M)`,历史记录追加执行结果。
@@ -36,7 +36,7 @@ ls .sillyspec/changes/ 2>/dev/null | grep -v archive
36
36
  cat .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
37
37
  ```
38
38
 
39
- 有进行中变更时读取其 proposal/design/tasks,自然引用。发现重要决策时可提议保存(不自动保存)。
39
+ 有进行中变更时读取其 design/tasks,自然引用。发现重要决策时可提议保存(不自动保存)。
40
40
 
41
41
  ## 没有必需的结束
42
42
 
@@ -9,11 +9,17 @@ argument-hint: "<change-name> [--to <path>]"
9
9
  ## 参数解析
10
10
  `$ARGUMENTS`:变更名 + 可选 `--to` 输出路径(默认 `~/.sillyspec/templates/<change-name>/`)
11
11
 
12
+ ## 核心约束(必须遵守)
13
+ - ❌ 修改任何文件(只读)
14
+
15
+ ## 参数解析
16
+ `$ARGUMENTS`:变更名 + 可选 `--to` 输出路径(默认 `~/.sillyspec/templates/<change-name>/`)
17
+
12
18
  ---
13
19
 
14
20
  ## 流程
15
21
 
16
- 1. **读取变更文件:** `cat .sillyspec/changes/$ARGUMENTS/{proposal,design}.md specs/requirements.md 2>/dev/null`。不存在则报错。
22
+ 1. **读取变更文件:** `cat .sillyspec/changes/$ARGUMENTS/{design}.md 2>/dev/null`。不存在则报错。
17
23
  2. **清理为通用模板:** 移除项目特定信息,保留通用设计方案,添加 `notes.md` 使用建议。
18
24
  3. **导出:** `mkdir -p ~/.sillyspec/templates/<change-name>` 并复制文件。
19
25
  4. **确认:** 展示摘要和模板路径。
@@ -30,28 +30,26 @@ cat .sillyspec/config.yaml 2>/dev/null
30
30
  **单项目模式:**
31
31
  ```bash
32
32
  LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
33
- cat "$LATEST"/{proposal,design,tasks}.md 2>/dev/null
34
- cat "$LATEST/specs/requirements.md" 2>/dev/null
35
- cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE,STACK}.md 2>/dev/null
33
+ cat "$LATEST"/{design,tasks}.md 2>/dev/null
34
+ cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
36
35
  cat .sillyspec/REQUIREMENTS.md 2>/dev/null
37
36
  ```
38
37
 
39
38
  ### 1.5 锚定确认(必须完成)
40
39
 
41
- 确认实际存在的文件(proposal / design / tasks / requirements),不存在的标注跳过。
40
+ 确认实际存在的文件(design / tasks),不存在的标注跳过。
42
41
 
43
42
  ### 2. 逐任务展开
44
43
 
45
- 把 tasks.md 每个 checkbox 展开为详细步骤,按 Wave 分组组织。工作区模式下每个 Task 标注所属项目。
44
+ 把 tasks.md 每个 checkbox 展开为任务描述,按 Wave 分组组织。工作区模式下每个 Task 标注所属项目。
46
45
 
47
- **每个 Task 必须包含:**
48
- - 精确文件路径
49
- - **精确方法签名**(参数类型、返回值类型、注解)— ❌ "实现用户创建接口" → ✅ `public Result<UserVO> createUser(@RequestBody @Valid UserDTO dto)`,参考 `RoleController.createRole`
50
- - 完整可运行的代码示例(不写"添加验证逻辑"这种模糊描述)
51
- - 涉及已有类调用时,标注"参考 `XxxService.java` 的 `xxx` 方法"
52
- - 新增方法必须列出方法签名,方法签名必须来自已有代码风格或 design.md
53
- - 运行命令和预期输出
54
- - TDD 步骤:🔴 写失败测试 → 🟢 写最少代码 → 🔵 重构 → ✅ commit
46
+ **每个 Task 包含:**
47
+ - 精确文件路径(修改哪个文件)
48
+ - 任务描述(做什么,一两句话说清楚)
49
+ - 涉及已有类调用时,标注参考文件(如"参考 `RoleController.createRole`)
50
+ - 依赖关系
51
+
52
+ **注意:不需要写精确方法签名和代码示例。** 方法签名和代码风格由 execute 阶段先读后写确认。plan 专注"做什么",execute 负责"怎么做"。
55
53
 
56
54
  ### 3. 标注执行顺序
57
55
 
@@ -59,10 +57,8 @@ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
59
57
  ```markdown
60
58
  ### Wave 1(并行,无依赖)
61
59
  - [ ] 添加用户创建接口
62
- - 修改: `UserController.java`
63
- - 方法签名: `public Result<UserVO> createUser(@RequestBody @Valid UserDTO dto)`
60
+ - 修改: `UserController.java`、`UserService.java`
64
61
  - 参考: `RoleController.createRole`
65
- - TDD: 🔴 测试 → 🟢 实现 → 🔵 重构
66
62
 
67
63
  - [ ] 添加角色创建接口
68
64
  - ...
@@ -79,13 +75,7 @@ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
79
75
  ### 5. 自检门控
80
76
 
81
77
  - [ ] 每个 task 有具体文件路径?
82
- - [ ] 每个 task 有验证命令和预期输出?
83
- - [ ] 标注了 Wave 和执行顺序?
84
- - [ ] 与 design.md 文件变更清单一致?
85
-
86
- ```bash
87
- bash scripts/validate-plan.sh .sillyspec/changes/<当前变更目录> 2>/dev/null
88
- ```
78
+ - [ ] 标注了 Wave 和依赖关系?
89
79
 
90
80
  ### 6. 完成
91
81
 
@@ -28,7 +28,7 @@ $ARGUMENTS
28
28
 
29
29
  ```bash
30
30
  cat .sillyspec/changes/*/MASTER.md 2>/dev/null # 子阶段变更
31
- ls -t .sillyspec/specs/*.md | head -1
31
+ ls -t .sillyspec/knowledge/*.md | head -1
32
32
  cat .sillyspec/{REQUIREMENTS}.md .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
33
33
  ls .sillyspec/changes/ | grep -v archive
34
34
  ```
@@ -49,23 +49,19 @@ ls .sillyspec/changes/ | grep -v archive
49
49
 
50
50
  创建 `.sillyspec/changes/$ARGUMENTS/`:
51
51
 
52
- **`proposal.md`:** 动机、变更范围、不在范围内、可量化成功标准
53
-
54
- **`specs/requirements.md`:** 功能需求(REQ-001 格式)、Given/When/Then 用户场景、非功能需求
55
-
56
- **`design.md`:** 架构决策及理由、文件变更清单表格、数据模型、API 设计、**代码风格参照**(参考已有的 Controller/Service/Entity 源文件,标注返回值类型、异常类型、注解风格)
52
+ **`design.md`:** 动机与范围、功能需求(REQ-001 格式、Given/When/Then 用户场景、非功能需求)、架构决策及理由、文件变更清单表格、数据模型、API 设计、**代码风格参照**(参考已有的 Controller/Service/Entity 源文件,标注返回值类型、异常类型、注解风格)
57
53
 
58
54
  **`tasks.md`:** 准备 → 实现 → 收尾的任务列表(每个 task 标注文件路径)
59
55
 
60
56
  ### 4. 展示关键文件
61
57
 
62
- 展示 proposal.md 和 design.md 给用户审阅。tasks.md 只展示任务列表。
58
+ 展示 design.md 给用户审阅。tasks.md 只展示任务列表。
63
59
 
64
60
  ### 5. 自检门控
65
61
 
66
- - [ ] proposal.md 含"动机、变更范围、不在范围内、成功标准"?
62
+ - [ ] design.md 含"动机、变更范围、功能需求"?
67
63
  - [ ] design.md 含"文件变更清单"表格?
68
- - [ ] requirements.md 含 Given/When/Then 用户场景?
64
+ - [ ] design.md 含 Given/When/Then 用户场景?
69
65
  - [ ] tasks.md 每个 task 有文件路径?
70
66
 
71
67
  ```bash
@@ -33,15 +33,15 @@ $ARGUMENTS
33
33
  - 纯配置/数据/文档可跳过 TDD
34
34
  - 其他情况一律走 TDD
35
35
  6. **运行相关测试:** `pnpm test 2>/dev/null || npm test 2>/dev/null || pytest 2>/dev/null`
36
- 7. **Git commit:** 展示 commit message 给用户确认后提交
36
+ 7. **Git commit:** 展示 commit message 给用户确认后提交。**工作区模式下,确认当前在正确的子项目目录中执行 commit。**
37
37
  8. **记录:**
38
38
  - **有 `--change`:** 在 `.sillyspec/changes/<变更名>/tasks.md` 追加 task 并勾选 `[x]`
39
- - **无 `--change`:** 记录到 `.sillyspec/QUICKLOG.md`(见下方规则)
39
+ - **无 `--change`:** 记录到 `.sillyspec/quicklog/QUICKLOG.md`(见下方规则)
40
40
  9. **检查复杂度:** 任务比预期复杂 → 建议用完整流程
41
41
 
42
42
  ### QUICKLOG.md 规则
43
43
 
44
- 文件路径:`.sillyspec/QUICKLOG.md`
44
+ 文件路径:`.sillyspec/quicklog/QUICKLOG.md`
45
45
 
46
46
  **追加记录格式:**
47
47
  ```markdown
@@ -22,8 +22,7 @@ cat .sillyspec/STATE.md 2>/dev/null
22
22
  ```bash
23
23
  ls .sillyspec/changes/*/MASTER.md 2>/dev/null
24
24
  ls -d .sillyspec/changes/*/ | grep -v archive | grep -v stages | tail -1 2>/dev/null
25
- ls .sillyspec/changes/*/stages/*/proposal.md 2>/dev/null
26
- ls .sillyspec/codebase/*.md .sillyspec/changes/*/tasks.md .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
25
+ ls .sillyspec/codebase/*.md .sillyspec/codebase/details/*.md .sillyspec/changes/*/tasks.md .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
27
26
  ```
28
27
 
29
28
  **探测结果推断:**
@@ -32,9 +31,9 @@ ls .sillyspec/codebase/*.md .sillyspec/changes/*/tasks.md .sillyspec/{REQUIREMEN
32
31
  |---|---|---|
33
32
  | 无 .sillyspec/ 内容 | 未开始 | `/sillyspec:init` 或 `/sillyspec:scan` |
34
33
  | 有 SCAN-RAW.md 或 codebase 文档不全 | 扫描中断 | `/sillyspec:scan`(断点续扫) |
35
- | codebase 7 份齐全无 changes/ | 已扫描未开始需求 | `/sillyspec:brainstorm` |
34
+ | codebase 文档齐全无 changes/ | 已扫描未开始需求 | `/sillyspec:brainstorm` |
36
35
  | 有 REQUIREMENTS.md 无 changes/ | 绿地有需求 | `/sillyspec:brainstorm` |
37
- | changes/ 有 proposal 无 tasks | 待计划 | `/sillyspec:plan` |
36
+ | changes/ 有 design 无 tasks | 待计划 | `/sillyspec:plan` |
38
37
  | tasks.md 有未完成 checkbox | 执行中 | `/sillyspec:execute` |
39
38
  | tasks.md 全完成 | 待验证 | `/sillyspec:verify` |
40
39