sillyspec 3.8.3 → 3.8.4
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/README.md +1 -1
- package/package.json +1 -1
- package/src/run.js +2 -2
- package/src/stages/brainstorm.js +5 -3
- package/src/stages/execute.js +15 -5
- package/src/stages/verify.js +21 -1
package/README.md
CHANGED
package/package.json
CHANGED
package/src/run.js
CHANGED
|
@@ -135,12 +135,12 @@ function outputStep(stageName, stepIndex, steps, cwd) {
|
|
|
135
135
|
console.log(`## Step ${stepIndex + 1}/${total}: ${step.name}\n`)
|
|
136
136
|
console.log(step.prompt)
|
|
137
137
|
console.log(`\n### ⚠️ 铁律`)
|
|
138
|
+
console.log('- **文档是核心资产,代码是文档的产物。** 没有文档就没有代码——文档是 AI 的记忆,是团队协作的基础,是后续维护的唯一依据。任何代码产出必须先有对应的设计/规范文档支撑。')
|
|
138
139
|
console.log('- 只做本步骤描述的操作,不得自行扩展或跳过')
|
|
139
140
|
console.log('- 不要回头修改已完成的步骤')
|
|
140
|
-
console.log('- 不要使用 npx 命令,直接使用 sillyspec(已全局安装)')
|
|
141
141
|
console.log('- 不要编造不存在的 CLI 子命令')
|
|
142
142
|
console.log('- 完成后立即执行 --done 命令,不得跳过')
|
|
143
|
-
console.log('-
|
|
143
|
+
console.log('- 文档类型文件(.md/.yaml/.json 等)头部必须包含 author(git 用户名)和 created_at(精确到秒)')
|
|
144
144
|
console.log('- 执行构建/测试前必须先读 local.yaml,优先使用其中配置的命令、路径和环境变量;未配置时才使用默认值')
|
|
145
145
|
console.log(`\n### 完成后执行`)
|
|
146
146
|
console.log(`sillyspec run ${stageName} --done --input "用户原始需求/反馈" --output "你的摘要"`)
|
package/src/stages/brainstorm.js
CHANGED
|
@@ -28,9 +28,11 @@ export const definition = {
|
|
|
28
28
|
|
|
29
29
|
### 操作
|
|
30
30
|
1. 读取 CODEBASE-OVERVIEW.md + 共享规范 + 子项目上下文
|
|
31
|
-
2.
|
|
32
|
-
3.
|
|
33
|
-
4.
|
|
31
|
+
2. 加载项目信息:\`cat .sillyspec/projects/*.yaml 2>/dev/null\`
|
|
32
|
+
3. 加载本地配置:\`cat .sillyspec/local.yaml 2>/dev/null\`
|
|
33
|
+
4. 询问本次需求属于哪个子项目
|
|
34
|
+
5. 棕地项目:读取 docs/<project>/scan/ 下的 STRUCTURE.md、CONVENTIONS.md、ARCHITECTURE.md
|
|
35
|
+
6. 查看进行中的变更:\`ls .sillyspec/changes/ | grep -v archive\`
|
|
34
36
|
|
|
35
37
|
### 输出
|
|
36
38
|
项目现状理解摘要(3-5 句话,关键约定和架构决策)
|
package/src/stages/execute.js
CHANGED
|
@@ -172,18 +172,27 @@ function buildWavePrompt(wave, waveIndex, changeDir) {
|
|
|
172
172
|
const taskList = wave.tasks.map((t, ti) => {
|
|
173
173
|
const taskNum = String(t.index || (ti + 1)).padStart(2, '0')
|
|
174
174
|
const taskFile = changeDir ? `${changeDir}/tasks/task-${taskNum}.md` : ''
|
|
175
|
+
const taskFileExists = taskFile && existsSync(taskFile)
|
|
175
176
|
let s = `- [ ] ${t.name}`
|
|
176
177
|
if (t.file) s += ` (${t.file})`
|
|
177
|
-
if (
|
|
178
|
-
|
|
178
|
+
if (taskFileExists) {
|
|
179
|
+
const taskContent = readFileSync(taskFile, 'utf8').trim()
|
|
180
|
+
s += `
|
|
181
|
+
\n### 📋 任务蓝图(task-${taskNum}.md)\n${taskContent}`
|
|
182
|
+
}
|
|
179
183
|
if (t.reference) s += `\n 参考: ${t.reference}`
|
|
180
184
|
if (t.steps) s += `\n 步骤: ${t.steps}`
|
|
181
185
|
return s
|
|
182
186
|
}).join('\n')
|
|
187
|
+
const hasTaskBlueprints = changeDir && existsSync(join(changeDir, 'tasks'))
|
|
188
|
+
const taskBlueprintRule = hasTaskBlueprints
|
|
189
|
+
? '每个任务有独立的 task-N.md 蓝图——只做蓝图里写的事,不要实现蓝图之外的功能。如果蓝图有问题,**停下来反馈**,不要自己改。问题归因:实现困难 → task 蓝图没写好 → plan 没做好 → design 有缺陷。'
|
|
190
|
+
: '如果发现 plan 不合理,**停下来反馈**,不要自己改方案。问题归因:实现困难 → plan 没做好 → design 有缺陷。'
|
|
183
191
|
return `## Wave ${waveIndex}: 执行以下任务
|
|
184
192
|
|
|
185
193
|
### Wave 开始前
|
|
186
194
|
1. 读取 design.md 的「编码铁律」章节(如果存在),严格遵守
|
|
195
|
+
2. 读取 plan.md 了解全局任务划分和依赖关系
|
|
187
196
|
2. 确认本 Wave 的输入/输出契约(前置 Wave 产出了什么,本 Wave 需要消费什么)
|
|
188
197
|
3. 检查前置 Wave 的产出是否完整(文件是否存在、测试是否通过)
|
|
189
198
|
4. **上下文分层加载**:
|
|
@@ -197,15 +206,16 @@ ${taskList}
|
|
|
197
206
|
### 执行要求
|
|
198
207
|
1. 按任务顺序执行,同一 Wave 内任务可并行
|
|
199
208
|
2. 铁律:先读后写、grep 确认方法存在、不编造、TDD
|
|
200
|
-
3.
|
|
201
|
-
4. **Reverse Sync**:发现 Bug 或实现与 design.md
|
|
209
|
+
3. **禁止发散思维**:你是代码搬运工,严格按任务描述执行,不增不减不改。${taskBlueprintRule}
|
|
210
|
+
4. **Reverse Sync**:发现 Bug 或实现与 design.md/task-N.md 不一致时,先检查是代码错了还是文档有遗漏,有遗漏则先修文档再修代码。
|
|
202
211
|
3. **不要频繁编译!** 编译很慢,只在以下情况运行:
|
|
203
212
|
- 写了大量代码后需要验证语法正确性
|
|
204
213
|
- 最后一个 Wave 完成后做一次全量编译验证
|
|
205
214
|
- 用户明确要求编译时
|
|
206
215
|
4. 单个任务完成后只跑**对应模块的单元测试**(TDD 绿灯确认),不要跑全量编译
|
|
207
216
|
5. 每个任务完成后:
|
|
208
|
-
- 勾选
|
|
217
|
+
- 勾选 task-N.md 中的验收标准 checkbox
|
|
218
|
+
- 勾选 plan.md / tasks.md 中对应任务的 checkbox
|
|
209
219
|
- 记录改动文件和测试结果
|
|
210
220
|
6. 遇到 BLOCKED → 记录原因,选择:重试/跳过/停止
|
|
211
221
|
|
package/src/stages/verify.js
CHANGED
|
@@ -22,7 +22,10 @@ export const definition = {
|
|
|
22
22
|
|
|
23
23
|
### 操作
|
|
24
24
|
1. 读取 proposal.md、design.md、tasks.md、requirements.md
|
|
25
|
-
2.
|
|
25
|
+
2. 加载项目信息:\`cat .sillyspec/projects/*.yaml 2>/dev/null\`
|
|
26
|
+
3. 加载本地配置:\`cat .sillyspec/local.yaml 2>/dev/null\`(构建命令、测试命令、lint 命令等)
|
|
27
|
+
4. 加载代码规范:\`cat .sillyspec/docs/<project>/scan/CONVENTIONS.md 2>/dev/null\`
|
|
28
|
+
5. 标注每个文件的存在/不存在状态
|
|
26
29
|
|
|
27
30
|
### 输出
|
|
28
31
|
文件加载确认清单`,
|
|
@@ -69,6 +72,23 @@ export const definition = {
|
|
|
69
72
|
outputHint: '设计一致性报告',
|
|
70
73
|
optional: false
|
|
71
74
|
},
|
|
75
|
+
{
|
|
76
|
+
name: '任务蓝图验收',
|
|
77
|
+
prompt: `检查每个 task-N.md 的验收标准是否全部满足。
|
|
78
|
+
|
|
79
|
+
### 操作
|
|
80
|
+
1. 检查变更目录下 tasks/ 是否存在
|
|
81
|
+
2. 如果存在:
|
|
82
|
+
- 逐个读取 tasks/task-NN.md
|
|
83
|
+
- 检查每个文件的「验收标准」checkbox 是否全部勾选
|
|
84
|
+
- 未勾选的项列为不通过
|
|
85
|
+
3. 如果不存在:跳过此步骤
|
|
86
|
+
|
|
87
|
+
### 输出
|
|
88
|
+
验收结果:通过/不通过 + 未通过的项`,
|
|
89
|
+
outputHint: '验收结果',
|
|
90
|
+
optional: false
|
|
91
|
+
},
|
|
72
92
|
{
|
|
73
93
|
name: '运行测试和质量扫描',
|
|
74
94
|
prompt: `运行测试和代码质量扫描。
|