sillyspec 2.5.0 → 2.6.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.
@@ -3,7 +3,9 @@
3
3
 
4
4
  ## 核心约束(必须遵守)
5
5
  - ❌ 未经验证就归档(必须先确认验证通过)
6
+ - ❌ 未勾选的 checkbox 未告知用户就归档
6
7
  - ❌ 归档后留下活跃变更的残留状态
8
+ - ❌ 覆盖已存在的归档目录
7
9
 
8
10
  ## 变更名称
9
11
  $ARGUMENTS
@@ -12,16 +14,49 @@ $ARGUMENTS
12
14
 
13
15
  ## 流程
14
16
 
15
- 1. **确认验证通过:** 检查是否执行过 verify,没有则提示 `/sillyspec:verify`
16
- 2. **展示归档内容:** 变更目录名、文件列表、生成总结
17
- 3. **用户确认:** AskUserQuestion 确认归档或取消
18
- 4. **执行归档:** 移动到 `.sillyspec/changes/archive/YYYY-MM-DD-<change-name>/`
19
- 5. **更新 tasks.md:** 确保所有 checkbox 勾选
20
- 6. **更新 ROADMAP.md**(如存在):标记对应 Phase 已完成
21
- 7. **Git 提交:** `git add .sillyspec/ && git commit -m "docs: archive sillyspec change <change-name>"`
17
+ ### 1. 前置检查(门禁)
22
18
 
23
- ### 最后说:
19
+ 读取 `.sillyspec/changes/<change-name>/` 下所有必要文件,逐项检查:
20
+
21
+ - [ ] **verify 状态:** 检查是否有验证记录,无则提示先执行 `/sillyspec:verify`
22
+ - [ ] **文件完整性:** 检查 `proposal.md` 和 `design.md` 是否存在,缺失则警告
23
+ - [ ] **任务完成度:** 读取 `tasks.md`,统计已完成/未完成任务数。**有未完成的 → 用 AskUserQuestion 询问:**
24
+ - ① 继续归档(未完成任务将被标记完成)
25
+ - ② 取消,回去完成任务
26
+
27
+ > 任一门禁不通过且用户选择取消 → 终止流程。
28
+
29
+ ### 2. 展示归档清单
30
+
31
+ 展示即将归档的内容摘要:
32
+ - 变更目录名
33
+ - 包含的文件列表
34
+ - 任务完成统计(✅ 已完成 / ⬜ 未完成)
35
+ - 一句话总结本次变更
36
+
37
+ ### 3. Spec 沉淀
38
+
39
+ 将 `.sillyspec/changes/<change-name>/specs/` 下的设计文档**复制到 `.sillyspec/specs/` 主目录**,确保已完成的设计规范可被后续变更参考。如目标已存在同名文件则跳过并提示。
24
40
 
25
- > 变更 `<change-name>` 已归档。继续:`/sillyspec:brainstorm "新想法"`
41
+ ### 4. 用户确认
42
+
43
+ 用 AskUserQuestion 让用户确认:
44
+ - ① 确认归档
45
+ - ② 取消
46
+
47
+ ### 5. 执行归档
48
+
49
+ - 目标路径:`.sillyspec/changes/archive/YYYY-MM-DD-<change-name>/`
50
+ - **检查目标路径是否已存在**,存在则中止并报错,防止覆盖
51
+ - 移动变更目录到归档路径
52
+
53
+ ### 6. 归档后更新
54
+
55
+ - **tasks.md:** 确保所有 checkbox 都已勾选 `[x]`
56
+ - **ROADMAP.md**(如存在):标记对应 Phase 已完成
57
+ - **STATE.md:** 清除当前变更信息,历史记录追加归档完成
58
+ - **Git 提交:** `git add .sillyspec/ && git commit -m "docs: archive sillyspec change <change-name>"`
59
+
60
+ ### 最后说:
26
61
 
27
- 更新 `.sillyspec/STATE.md`:清除当前变更信息,历史记录追加归档完成。
62
+ > ✅ 变更 `<change-name>` 已归档到 `archive/YYYY-MM-DD-<change-name>/`。继续:`/sillyspec:brainstorm "新想法"`
@@ -1,3 +1,8 @@
1
+ ---
2
+ description: 需求探索 — 结构化头脑风暴,生成设计文档(创建性工作前必用)
3
+ argument-hint: "[需求或想法描述]"
4
+ ---
5
+
1
6
  ## 交互规范
2
7
  **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
3
8
 
@@ -1,3 +1,8 @@
1
+ ---
2
+ description: 自动判断并执行下一步
3
+ argument-hint: ""
4
+ ---
5
+
1
6
  ## 核心约束(必须遵守)
2
7
  - ❌ 跳过自动判断,直接执行某个阶段
3
8
 
@@ -36,7 +36,7 @@ cat .sillyspec/config.yaml 2>/dev/null
36
36
 
37
37
  **单项目模式:**
38
38
  ```bash
39
- PLAN=$(ls -t .sillyspec/plans/*.md | head -1); cat "$PLAN"
39
+ PLAN=$(ls -t .sillyspec/changes/*/plan.md 2>/dev/null | head -1); cat "$PLAN"
40
40
  LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
41
41
  cat "$LATEST"/{tasks,design}.md 2>/dev/null
42
42
  cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
@@ -59,13 +59,17 @@ cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
59
59
 
60
60
  ## 执行策略
61
61
 
62
- ### subagent 能力时(推荐)
62
+ AskUserQuestion 询问用户选择执行模式:
63
+ 1. 串行执行 — 当前会话逐任务执行,适合简单变更
64
+ 2. 子代理并行 — 每个 Task 启动独立子代理,适合多任务独立变更(需要 subagent 能力)
65
+
66
+ 选择子代理模式时:
63
67
  1. 按计划的 Wave 分组
64
68
  2. 每个 Task 启动独立子代理(不继承主 session 历史)
65
- 3. 子代理上下文:任务描述 + TDD 纪律 + 精确文件路径 + 相关约定
69
+ 3. 子代理上下文:任务描述 + TDD 纪律 + 精确文件路径 + 相关约定 + **要修改文件的当前源码** + **被调用类的源码**
66
70
 
67
- ### 无 subagent 时
68
- 当前会话逐任务串行执行。
71
+ 选择串行模式时:
72
+ 当前会话逐任务串行执行,每完成一个任务展示结果并等待用户确认。
69
73
 
70
74
  ## 每个任务的 TDD 铁律
71
75
 
@@ -80,7 +84,12 @@ cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
80
84
 
81
85
  **违反 TDD → 删掉代码从测试重新开始。例外(需人工确认):** 抛弃型原型、生成代码、配置文件。
82
86
 
83
- ## 写代码前必须读取现有源码(防幻觉)
87
+ ## 写代码前必须读取现有源码(先读后写)
88
+
89
+ **⛔ 铁律:**
90
+ - 没有读过相关源文件,不允许写任何代码
91
+ - 方法签名必须来自已有代码或 plan 中的明确定义,禁止凭空编造
92
+ - 调用已有方法时,必须先 `cat` 源文件确认方法签名(参数、返回值、异常)
84
93
 
85
94
  ```bash
86
95
  cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
@@ -1,3 +1,8 @@
1
+ ---
2
+ description: 自由思考模式 — 讨论、画图、调研,不写代码
3
+ argument-hint: "[探索主题]"
4
+ ---
5
+
1
6
  ## 交互规范
2
7
  **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
3
8
 
@@ -1,3 +1,8 @@
1
+ ---
2
+ description: 导出成功方案为可复用模板
3
+ argument-hint: "<change-name> [--to <path>]"
4
+ ---
5
+
1
6
  ## 核心约束(必须遵守)
2
7
  - ❌ 修改任何文件(只读)
3
8
 
@@ -1,3 +1,8 @@
1
+ ---
2
+ description: 绿地项目初始化 — 深度提问、调研、需求文档、路线图
3
+ argument-hint: "[项目名]"
4
+ ---
5
+
1
6
  ## 交互规范
2
7
  **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
3
8
 
@@ -46,7 +46,10 @@ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
46
46
 
47
47
  **每个 Task 必须包含:**
48
48
  - 精确文件路径
49
+ - **精确方法签名**(参数类型、返回值类型、注解)— ❌ "实现用户创建接口" → ✅ `public Result<UserVO> createUser(@RequestBody @Valid UserDTO dto)`,参考 `RoleController.createRole`
49
50
  - 完整可运行的代码示例(不写"添加验证逻辑"这种模糊描述)
51
+ - 涉及已有类调用时,标注"参考 `XxxService.java` 的 `xxx` 方法"
52
+ - 新增方法必须列出方法签名,方法签名必须来自已有代码风格或 design.md
50
53
  - 运行命令和预期输出
51
54
  - TDD 步骤:🔴 写失败测试 → 🟢 写最少代码 → 🔵 重构 → ✅ commit
52
55
 
@@ -60,7 +63,7 @@ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
60
63
 
61
64
  ### 4. 保存
62
65
 
63
- 保存到 `.sillyspec/plans/YYYY-MM-DD-<change-name>.md`
66
+ 保存到 `.sillyspec/changes/<变更名>/plan.md`
64
67
 
65
68
  ### 5. 自检门控
66
69
 
@@ -51,7 +51,7 @@ ls .sillyspec/changes/ | grep -v archive
51
51
 
52
52
  **`specs/requirements.md`:** 功能需求(REQ-001 格式)、Given/When/Then 用户场景、非功能需求
53
53
 
54
- **`design.md`:** 架构决策及理由、文件变更清单表格、数据模型、API 设计
54
+ **`design.md`:** 架构决策及理由、文件变更清单表格、数据模型、API 设计、**代码风格参照**(参考已有的 Controller/Service/Entity 源文件,标注返回值类型、异常类型、注解风格)
55
55
 
56
56
  **`tasks.md`:** 准备 → 实现 → 收尾的任务列表(每个 task 标注文件路径)
57
57
 
@@ -1,3 +1,8 @@
1
+ ---
2
+ description: 快速任务 — 跳过完整流程,直接做
3
+ argument-hint: "[任务描述]"
4
+ ---
5
+
1
6
  ## 交互规范
2
7
  **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
3
8
 
@@ -23,7 +23,7 @@ cat .sillyspec/STATE.md 2>/dev/null
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
25
  ls .sillyspec/changes/*/stages/*/proposal.md 2>/dev/null
26
- ls .sillyspec/codebase/*.md .sillyspec/plans/*.md .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
26
+ ls .sillyspec/codebase/*.md .sillyspec/changes/*/plan.md .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
27
27
  ```
28
28
 
29
29
  **探测结果推断:**
@@ -163,6 +163,19 @@ find . -name "*.java" -not -path "*/{node_modules,.git}/*" | xargs grep -l "@Map
163
163
 
164
164
  无基类 → 写"本项目没有实体基类"。
165
165
 
166
+ ### D. 代码风格深度提取
167
+
168
+ 读取 2-3 个典型的 Controller、Service、ServiceImpl、Entity 源文件,提取具体风格(从源码提取,禁止编造):
169
+
170
+ 1. **注解风格**:Controller 用 `@RestController` 还是 `@Controller`?方法用什么映射注解?参数校验方式?
171
+ 2. **返回值约定**:统一返回 `Result<T>` / `ResponseEntity<T>` / 其他?
172
+ 3. **异常处理**:用什么异常类?有没有全局异常处理器?
173
+ 4. **Service 层约定**:实现类命名、是否继承基类、基类通用方法、事务注解用法
174
+ 5. **实体/POJO 风格**:是否继承基类、Lombok 用法、ID 生成策略、`@TableId`
175
+ 6. **Mapper/DAO 风格**:XML Mapper 还是注解?有没有通用 Mapper 基类?
176
+
177
+ 将以上信息写入 CONVENTIONS.md「代码风格」章节。非 Java 项目参考同等概念提取。前端-only 项目写"不适用"。
178
+
166
179
  ---
167
180
 
168
181
  ## 深度扫描
@@ -1,3 +1,8 @@
1
+ ---
2
+ description: 查看项目进度和状态
3
+ argument-hint: ""
4
+ ---
5
+
1
6
  ## 交互规范
2
7
  **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
3
8
 
@@ -1,3 +1,8 @@
1
+ ---
2
+ description: 验证实现 — 对照规范检查 + 测试套件
3
+ argument-hint: "[可选:指定验证范围]"
4
+ ---
5
+
1
6
  ## 交互规范
2
7
  **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
3
8
 
@@ -1,3 +1,8 @@
1
+ ---
2
+ description: 工作区管理 — 初始化、管理多项目工作区,查看子项目状态
3
+ argument-hint: "[可选:add/remove/status/info]"
4
+ ---
5
+
1
6
  ## 交互规范
2
7
  **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
3
8
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sillyspec",
3
- "version": "2.5.0",
3
+ "version": "2.6.0",
4
4
  "description": "SillySpec CLI — 流程状态机,让 AI 严格按步骤来",
5
5
  "type": "module",
6
6
  "bin": {
package/src/init.js CHANGED
@@ -175,20 +175,16 @@ function isTTY() {
175
175
 
176
176
  async function doInstall(projectDir, tools, isWorkspace, subprojects = []) {
177
177
  // 创建基础目录
178
- const dirs = [
179
- '.sillyspec/codebase',
180
- '.sillyspec/changes/archive',
181
- '.sillyspec/plans',
182
- '.sillyspec/specs',
183
- '.sillyspec/phases',
184
- ];
178
+ // 不预创建子目录,由各命令按需创建
179
+ // .sillyspec/codebase/ → scan
180
+ // .sillyspec/changes/ → brainstorm/propose
181
+ // .sillyspec/changes/archive/ → archive
182
+ // .sillyspec/plans/ → plan
183
+ // .sillyspec/specs/ → propose
185
184
  if (isWorkspace) {
186
- dirs.push('.sillyspec/shared', '.sillyspec/workspace');
185
+ mkdirSync(join(projectDir, '.sillyspec', 'shared'), { recursive: true });
186
+ mkdirSync(join(projectDir, '.sillyspec', 'workspace'), { recursive: true });
187
187
  }
188
- for (const d of dirs) {
189
- mkdirSync(join(projectDir, d), { recursive: true });
190
- }
191
- mkdirSync(join(homedir(), '.sillyspec', 'templates'), { recursive: true });
192
188
 
193
189
  // .gitignore
194
190
  const gitignorePath = join(projectDir, '.gitignore');
@@ -3,7 +3,9 @@
3
3
 
4
4
  ## 核心约束(必须遵守)
5
5
  - ❌ 未经验证就归档(必须先确认验证通过)
6
+ - ❌ 未勾选的 checkbox 未告知用户就归档
6
7
  - ❌ 归档后留下活跃变更的残留状态
8
+ - ❌ 覆盖已存在的归档目录
7
9
 
8
10
  ## 变更名称
9
11
  $ARGUMENTS
@@ -12,16 +14,49 @@ $ARGUMENTS
12
14
 
13
15
  ## 流程
14
16
 
15
- 1. **确认验证通过:** 检查是否执行过 verify,没有则提示 `/sillyspec:verify`
16
- 2. **展示归档内容:** 变更目录名、文件列表、生成总结
17
- 3. **用户确认:** AskUserQuestion 确认归档或取消
18
- 4. **执行归档:** 移动到 `.sillyspec/changes/archive/YYYY-MM-DD-<change-name>/`
19
- 5. **更新 tasks.md:** 确保所有 checkbox 勾选
20
- 6. **更新 ROADMAP.md**(如存在):标记对应 Phase 已完成
21
- 7. **Git 提交:** `git add .sillyspec/ && git commit -m "docs: archive sillyspec change <change-name>"`
17
+ ### 1. 前置检查(门禁)
22
18
 
23
- ### 最后说:
19
+ 读取 `.sillyspec/changes/<change-name>/` 下所有必要文件,逐项检查:
20
+
21
+ - [ ] **verify 状态:** 检查是否有验证记录,无则提示先执行 `/sillyspec:verify`
22
+ - [ ] **文件完整性:** 检查 `proposal.md` 和 `design.md` 是否存在,缺失则警告
23
+ - [ ] **任务完成度:** 读取 `tasks.md`,统计已完成/未完成任务数。**有未完成的 → 用 AskUserQuestion 询问:**
24
+ - ① 继续归档(未完成任务将被标记完成)
25
+ - ② 取消,回去完成任务
26
+
27
+ > 任一门禁不通过且用户选择取消 → 终止流程。
28
+
29
+ ### 2. 展示归档清单
30
+
31
+ 展示即将归档的内容摘要:
32
+ - 变更目录名
33
+ - 包含的文件列表
34
+ - 任务完成统计(✅ 已完成 / ⬜ 未完成)
35
+ - 一句话总结本次变更
36
+
37
+ ### 3. Spec 沉淀
38
+
39
+ 将 `.sillyspec/changes/<change-name>/specs/` 下的设计文档**复制到 `.sillyspec/specs/` 主目录**,确保已完成的设计规范可被后续变更参考。如目标已存在同名文件则跳过并提示。
24
40
 
25
- > 变更 `<change-name>` 已归档。继续:`/sillyspec:brainstorm "新想法"`
41
+ ### 4. 用户确认
42
+
43
+ 用 AskUserQuestion 让用户确认:
44
+ - ① 确认归档
45
+ - ② 取消
46
+
47
+ ### 5. 执行归档
48
+
49
+ - 目标路径:`.sillyspec/changes/archive/YYYY-MM-DD-<change-name>/`
50
+ - **检查目标路径是否已存在**,存在则中止并报错,防止覆盖
51
+ - 移动变更目录到归档路径
52
+
53
+ ### 6. 归档后更新
54
+
55
+ - **tasks.md:** 确保所有 checkbox 都已勾选 `[x]`
56
+ - **ROADMAP.md**(如存在):标记对应 Phase 已完成
57
+ - **STATE.md:** 清除当前变更信息,历史记录追加归档完成
58
+ - **Git 提交:** `git add .sillyspec/ && git commit -m "docs: archive sillyspec change <change-name>"`
59
+
60
+ ### 最后说:
26
61
 
27
- 更新 `.sillyspec/STATE.md`:清除当前变更信息,历史记录追加归档完成。
62
+ > ✅ 变更 `<change-name>` 已归档到 `archive/YYYY-MM-DD-<change-name>/`。继续:`/sillyspec:brainstorm "新想法"`
@@ -36,7 +36,7 @@ cat .sillyspec/config.yaml 2>/dev/null
36
36
 
37
37
  **单项目模式:**
38
38
  ```bash
39
- PLAN=$(ls -t .sillyspec/plans/*.md | head -1); cat "$PLAN"
39
+ PLAN=$(ls -t .sillyspec/changes/*/plan.md 2>/dev/null | head -1); cat "$PLAN"
40
40
  LATEST=$(ls -d .sillyspec/changes/*/ | grep -v archive | tail -1)
41
41
  cat "$LATEST"/{tasks,design}.md 2>/dev/null
42
42
  cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
@@ -59,13 +59,17 @@ cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
59
59
 
60
60
  ## 执行策略
61
61
 
62
- ### subagent 能力时(推荐)
62
+ AskUserQuestion 询问用户选择执行模式:
63
+ 1. 串行执行 — 当前会话逐任务执行,适合简单变更
64
+ 2. 子代理并行 — 每个 Task 启动独立子代理,适合多任务独立变更(需要 subagent 能力)
65
+
66
+ 选择子代理模式时:
63
67
  1. 按计划的 Wave 分组
64
68
  2. 每个 Task 启动独立子代理(不继承主 session 历史)
65
- 3. 子代理上下文:任务描述 + TDD 纪律 + 精确文件路径 + 相关约定
69
+ 3. 子代理上下文:任务描述 + TDD 纪律 + 精确文件路径 + 相关约定 + **要修改文件的当前源码** + **被调用类的源码**
66
70
 
67
- ### 无 subagent 时
68
- 当前会话逐任务串行执行。
71
+ 选择串行模式时:
72
+ 当前会话逐任务串行执行,每完成一个任务展示结果并等待用户确认。
69
73
 
70
74
  ## 每个任务的 TDD 铁律
71
75
 
@@ -80,7 +84,12 @@ cat .sillyspec/codebase/CONVENTIONS.md 2>/dev/null
80
84
 
81
85
  **违反 TDD → 删掉代码从测试重新开始。例外(需人工确认):** 抛弃型原型、生成代码、配置文件。
82
86
 
83
- ## 写代码前必须读取现有源码(防幻觉)
87
+ ## 写代码前必须读取现有源码(先读后写)
88
+
89
+ **⛔ 铁律:**
90
+ - 没有读过相关源文件,不允许写任何代码
91
+ - 方法签名必须来自已有代码或 plan 中的明确定义,禁止凭空编造
92
+ - 调用已有方法时,必须先 `cat` 源文件确认方法签名(参数、返回值、异常)
84
93
 
85
94
  ```bash
86
95
  cat .sillyspec/codebase/{CONVENTIONS,ARCHITECTURE}.md 2>/dev/null
package/templates/plan.md CHANGED
@@ -46,7 +46,10 @@ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
46
46
 
47
47
  **每个 Task 必须包含:**
48
48
  - 精确文件路径
49
+ - **精确方法签名**(参数类型、返回值类型、注解)— ❌ "实现用户创建接口" → ✅ `public Result<UserVO> createUser(@RequestBody @Valid UserDTO dto)`,参考 `RoleController.createRole`
49
50
  - 完整可运行的代码示例(不写"添加验证逻辑"这种模糊描述)
51
+ - 涉及已有类调用时,标注"参考 `XxxService.java` 的 `xxx` 方法"
52
+ - 新增方法必须列出方法签名,方法签名必须来自已有代码风格或 design.md
50
53
  - 运行命令和预期输出
51
54
  - TDD 步骤:🔴 写失败测试 → 🟢 写最少代码 → 🔵 重构 → ✅ commit
52
55
 
@@ -60,7 +63,7 @@ cat .sillyspec/REQUIREMENTS.md 2>/dev/null
60
63
 
61
64
  ### 4. 保存
62
65
 
63
- 保存到 `.sillyspec/plans/YYYY-MM-DD-<change-name>.md`
66
+ 保存到 `.sillyspec/changes/<变更名>/plan.md`
64
67
 
65
68
  ### 5. 自检门控
66
69
 
@@ -51,7 +51,7 @@ ls .sillyspec/changes/ | grep -v archive
51
51
 
52
52
  **`specs/requirements.md`:** 功能需求(REQ-001 格式)、Given/When/Then 用户场景、非功能需求
53
53
 
54
- **`design.md`:** 架构决策及理由、文件变更清单表格、数据模型、API 设计
54
+ **`design.md`:** 架构决策及理由、文件变更清单表格、数据模型、API 设计、**代码风格参照**(参考已有的 Controller/Service/Entity 源文件,标注返回值类型、异常类型、注解风格)
55
55
 
56
56
  **`tasks.md`:** 准备 → 实现 → 收尾的任务列表(每个 task 标注文件路径)
57
57
 
@@ -23,7 +23,7 @@ cat .sillyspec/STATE.md 2>/dev/null
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
25
  ls .sillyspec/changes/*/stages/*/proposal.md 2>/dev/null
26
- ls .sillyspec/codebase/*.md .sillyspec/plans/*.md .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
26
+ ls .sillyspec/codebase/*.md .sillyspec/changes/*/plan.md .sillyspec/{REQUIREMENTS,ROADMAP}.md 2>/dev/null
27
27
  ```
28
28
 
29
29
  **探测结果推断:**
package/templates/scan.md CHANGED
@@ -163,6 +163,19 @@ find . -name "*.java" -not -path "*/{node_modules,.git}/*" | xargs grep -l "@Map
163
163
 
164
164
  无基类 → 写"本项目没有实体基类"。
165
165
 
166
+ ### D. 代码风格深度提取
167
+
168
+ 读取 2-3 个典型的 Controller、Service、ServiceImpl、Entity 源文件,提取具体风格(从源码提取,禁止编造):
169
+
170
+ 1. **注解风格**:Controller 用 `@RestController` 还是 `@Controller`?方法用什么映射注解?参数校验方式?
171
+ 2. **返回值约定**:统一返回 `Result<T>` / `ResponseEntity<T>` / 其他?
172
+ 3. **异常处理**:用什么异常类?有没有全局异常处理器?
173
+ 4. **Service 层约定**:实现类命名、是否继承基类、基类通用方法、事务注解用法
174
+ 5. **实体/POJO 风格**:是否继承基类、Lombok 用法、ID 生成策略、`@TableId`
175
+ 6. **Mapper/DAO 风格**:XML Mapper 还是注解?有没有通用 Mapper 基类?
176
+
177
+ 将以上信息写入 CONVENTIONS.md「代码风格」章节。非 Java 项目参考同等概念提取。前端-only 项目写"不适用"。
178
+
166
179
  ---
167
180
 
168
181
  ## 深度扫描