sillyspec 3.18.1 → 3.18.3
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 +24 -23
- package/.claude/skills/sillyspec-execute/SKILL.md +8 -1
- package/docs/brainstorm-plan-contract.md +64 -0
- package/docs/plan-execute-contract.md +123 -0
- package/docs/revision-mode.md +115 -0
- package/docs/sillyspec/file-lifecycle.md +13 -4
- package/docs/workflow-contract-regression.md +106 -0
- package/package.json +1 -1
- package/packages/dashboard/dist/assets/{index-DpLHK4jv.js → index-Bq_Z2hne.js} +568 -568
- package/packages/dashboard/dist/assets/{index-BcM2J-hv.css → index-O2W5RV4z.css} +1 -1
- package/packages/dashboard/dist/index.html +16 -16
- package/packages/dashboard/src/components/PipelineStage.vue +22 -2
- package/packages/dashboard/src/components/PipelineView.vue +10 -2
- package/packages/dashboard/src/components/StageBadge.vue +17 -3
- package/packages/dashboard/src/components/StepCard.vue +7 -2
- package/src/change-risk-profile.js +167 -0
- package/src/db.js +6 -0
- package/src/index.js +17 -1
- package/src/knowledge-match.js +130 -0
- package/src/progress.js +464 -11
- package/src/run.js +269 -29
- package/src/scan-postcheck.js +34 -2
- package/src/stage-contract.js +90 -5
- package/src/stages/brainstorm.js +23 -0
- package/src/stages/execute.js +122 -16
- package/src/stages/plan.js +82 -0
- package/src/stages/scan.js +40 -0
- package/src/stages/verify.js +38 -2
- package/test/brainstorm-plan-contract.test.mjs +273 -0
- package/test/knowledge-match.test.mjs +231 -0
- package/test/plan-execute-contract.test.mjs +330 -0
- package/test/platform-failure-samples.test.mjs +4 -0
- package/test/revision-v1.test.mjs +1145 -0
- package/test/scan-knowledge.test.mjs +175 -0
- package/test/scan-postcheck.test.mjs +3 -0
- package/test/spec-dir.test.mjs +8 -3
- package/test/stage-definitions.test.mjs +1 -1
|
@@ -3,41 +3,42 @@ name: sillyspec:brainstorm
|
|
|
3
3
|
description: 用于正式开始开发前的需求澄清和技术方案设计。适合用户提出新功能、新模块、架构调整、复杂改造,或说"先做需求分析、输出技术方案、创建变更前先梳理、帮我设计下"。产出结构化方案,但不直接写代码。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
## 多变更说明
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
用户触发此 skill 时,使用 `sillyspec run brainstorm` 逐步执行需求探索。
|
|
8
|
+
如果项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录),所有 `sillyspec run` 命令需要加 `--change <变更名>`。只有一个变更时可省略(CLI 自动检测)。
|
|
10
9
|
|
|
11
|
-
##
|
|
10
|
+
## 执行
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
2. 运行 `sillyspec run brainstorm --change <变更名>` 获取当前步骤指令
|
|
15
|
-
3. 按步骤指令执行(对话、分析需求、设计方案等)
|
|
16
|
-
4. 完成步骤后运行 `sillyspec run brainstorm --done --change <变更名> --output "步骤摘要"`
|
|
17
|
-
5. CLI 会自动输出下一步的指令,重复 3-4 直到阶段完成
|
|
12
|
+
**你必须使用 exec 工具(shell)执行以下命令,不要自己编造流程:**
|
|
18
13
|
|
|
19
|
-
|
|
14
|
+
1. 运行 `sillyspec run brainstorm` — 读取输出的步骤 prompt
|
|
15
|
+
2. 按照输出的 prompt **严格执行**,不要跳过或自行添加步骤
|
|
16
|
+
3. 步骤完成后,运行 `sillyspec run brainstorm --done --output "你的摘要"`
|
|
17
|
+
4. 重复 2-3 直到阶段完成
|
|
18
|
+
5. **禁止**在没有运行 CLI 的情况下自行决定流程
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
# 首次启动(推荐指定变更名)
|
|
23
|
-
sillyspec run brainstorm --change 2026-05-28-agent-log-streaming
|
|
20
|
+
## 特殊步骤:requiresWait
|
|
24
21
|
|
|
25
|
-
|
|
26
|
-
sillyspec run brainstorm
|
|
22
|
+
某些步骤(如"对话式探索")需要等待用户输入。AI agent 可以:
|
|
27
23
|
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
- **方式一(推荐)**:通过自己的对话工具与用户交互,完成后直接 `--done --answer "用户回答"` 一步完成
|
|
25
|
+
- **方式二**:先 `--wait` 记录等待状态,再 `--continue --answer "用户回答"`,最后 `--done`
|
|
30
26
|
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
```bash
|
|
28
|
+
# 一步完成 wait + done(AI agent 已自行与用户交互)
|
|
29
|
+
sillyspec run brainstorm --done --change <变更名> --answer "信息够了,进入方案讨论" --output "需求已澄清"
|
|
33
30
|
|
|
34
|
-
#
|
|
35
|
-
sillyspec run brainstorm --
|
|
31
|
+
# 分步完成
|
|
32
|
+
sillyspec run brainstorm --wait --change <变更名> --reason "等待用户回答" --output "探索问题"
|
|
33
|
+
sillyspec run brainstorm --continue --answer "用户回答" --change <变更名>
|
|
34
|
+
sillyspec run brainstorm --done --change <变更名> --output "需求已澄清"
|
|
36
35
|
```
|
|
37
36
|
|
|
38
37
|
## 注意
|
|
39
|
-
- 推荐指定 `--change <变更名>`(格式:`YYYY-MM-DD-<简短描述>`),不指定时自动生成
|
|
38
|
+
- 推荐指定 `--change <变更名>`(格式:`YYYY-MM-DD-<简短描述>`),不指定时自动生成
|
|
40
39
|
- 步骤 prompt 由 CLI 管理,不需要手动读取
|
|
41
40
|
- 依赖 scan 阶段完成,CLI 会自动提醒
|
|
42
|
-
- brainstorm 阶段末步会自动生成四件套(proposal.md + design.md + requirements.md + tasks.md)
|
|
43
41
|
- brainstorm 完成后,运行 `sillyspec run plan --change <变更名>` 进入实现计划
|
|
42
|
+
|
|
43
|
+
## 用户指令
|
|
44
|
+
$ARGUMENTS
|
|
@@ -11,11 +11,18 @@ description: 用于按 plan 执行代码实现。适合用户说"开始写代码
|
|
|
11
11
|
|
|
12
12
|
**你必须使用 exec 工具(shell)执行以下命令,不要自己编造流程:**
|
|
13
13
|
|
|
14
|
-
1. 运行 `sillyspec run execute` —
|
|
14
|
+
1. 运行 `sillyspec run execute` — CLI 会自动创建 worktree 隔离环境,然后输出步骤 prompt
|
|
15
15
|
2. 按照输出的 prompt **严格执行**,不要跳过或自行添加步骤
|
|
16
16
|
3. 步骤完成后,运行 `sillyspec run execute --done --output "你的摘要"`
|
|
17
17
|
4. 重复 2-3 直到阶段完成
|
|
18
18
|
5. **禁止**在没有运行 CLI 的情况下自行决定流程
|
|
19
19
|
|
|
20
|
+
## Worktree 隔离
|
|
21
|
+
|
|
22
|
+
- CLI 启动 execute 阶段时**自动创建 git worktree**,AI agent 不需要手动创建
|
|
23
|
+
- Worktree 路径在 Step 3(确认 worktree 路径)中输出,后续子代理的 cwd 必须设为该路径
|
|
24
|
+
- **禁止跳过 worktree 或在主仓库直接写代码**
|
|
25
|
+
- 如果 worktree 创建失败,CLI 会报错并退出,需要排查后再重试
|
|
26
|
+
|
|
20
27
|
## 用户指令
|
|
21
28
|
$ARGUMENTS
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
author: qinyi
|
|
3
|
+
created_at: 2026-06-19 00:45:00
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Brainstorm → Plan Contract
|
|
7
|
+
|
|
8
|
+
## 核心契约
|
|
9
|
+
|
|
10
|
+
`design.md` 是 plan 阶段的**主要设计输入**。plan 不应该在空的或缺少关键决策的 design.md 上生成任务。
|
|
11
|
+
|
|
12
|
+
## design.md 结构要求
|
|
13
|
+
|
|
14
|
+
### 必须包含(error — 阻断 plan)
|
|
15
|
+
|
|
16
|
+
| # | 章节 | 匹配关键词 |
|
|
17
|
+
|---|------|-----------|
|
|
18
|
+
| 1 | 目标/背景/问题描述 | 目标、goal、objective、背景、background、问题、problem、purpose、目的 |
|
|
19
|
+
| 2 | 范围/总体方案/设计 | 范围、scope、总体方案、方案、approach、solution、设计、design |
|
|
20
|
+
| 3 | 决策/方案选择 | 决策、decision、选择、choice、方案选择、D-xxx@vN(decisions.md 引用) |
|
|
21
|
+
|
|
22
|
+
### 建议包含(warning — 不阻断 plan)
|
|
23
|
+
|
|
24
|
+
| # | 章节 | 匹配关键词 |
|
|
25
|
+
|---|------|-----------|
|
|
26
|
+
| 4 | 非目标/Non-goals | 非目标、non-goals、不做、out of scope |
|
|
27
|
+
| 5 | 约束/风险/Trade-off | 约束、constraint、风险、risk、trade-off |
|
|
28
|
+
| 6 | 文件变更清单 | 文件变更、变更清单、changed files |
|
|
29
|
+
|
|
30
|
+
## 校验规则
|
|
31
|
+
|
|
32
|
+
plan 启动时(第一个步骤执行前)调用 `validateDesignForPlan(designContent)`:
|
|
33
|
+
|
|
34
|
+
| 结果 | 行为 |
|
|
35
|
+
|------|------|
|
|
36
|
+
| 全部通过 | 正常进入 plan |
|
|
37
|
+
| 有 warning | 继续执行,展示警告 |
|
|
38
|
+
| 有 error | fail-fast,提示修复 design.md |
|
|
39
|
+
|
|
40
|
+
## 第一版设计原则
|
|
41
|
+
|
|
42
|
+
- **轻量 markdown 契约**:检查标题和关键词,不强 schema
|
|
43
|
+
- **关键词宽泛**:中英文都支持
|
|
44
|
+
- **decisions.md 引用也算决策**:`D-xxx@vN` 或 `decisions.md` 引用即满足决策检查
|
|
45
|
+
- **不做 brainstorm postcheck 阻断**:brainstorm 完成时不校验此契约(brainstorm 可以产出不完整的 design.md),只在 plan 启动时校验
|
|
46
|
+
|
|
47
|
+
## 错误处理
|
|
48
|
+
|
|
49
|
+
| 场景 | 行为 |
|
|
50
|
+
|------|------|
|
|
51
|
+
| design.md 不存在 | 不校验(向后兼容,plan 可以独立运行) |
|
|
52
|
+
| design.md 空 | fail-fast |
|
|
53
|
+
| 缺目标/背景 | fail-fast |
|
|
54
|
+
| 缺范围/方案 | fail-fast |
|
|
55
|
+
| 缺决策 | fail-fast |
|
|
56
|
+
| 缺非目标/约束/文件清单 | warning,继续执行 |
|
|
57
|
+
|
|
58
|
+
## 完整契约链
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
brainstorm → design.md → [Plan Contract 校验] → plan → plan.md → [Execute Contract 校验] → execute
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
每个阶段启动前都校验上游产物,形成双重保险。
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
author: qinyi
|
|
3
|
+
created_at: 2026-06-19 00:25:00
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Plan → Execute Contract
|
|
7
|
+
|
|
8
|
+
## 核心契约
|
|
9
|
+
|
|
10
|
+
`plan.md` 是 execute 阶段的**唯一任务蓝图输入**。execute 不从其他来源(brainstorm、tasks.md、agent 记忆)获取任务列表。
|
|
11
|
+
|
|
12
|
+
## plan.md 格式要求
|
|
13
|
+
|
|
14
|
+
### Checkbox Task(必须)
|
|
15
|
+
|
|
16
|
+
execute 通过 checkbox 解析任务,格式:
|
|
17
|
+
|
|
18
|
+
```markdown
|
|
19
|
+
- [ ] task-01: 实现用户认证模块
|
|
20
|
+
- [ ] task-02: 添加权限校验中间件
|
|
21
|
+
- [ ] task-03: 编写集成测试
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Task ID 规则
|
|
25
|
+
|
|
26
|
+
- 格式:`task-XX`(XX 为数字,建议两位补零)
|
|
27
|
+
- 必须唯一:同一 plan.md 内不能有两个相同 task id
|
|
28
|
+
- 建议连续:从 task-01 开始递增
|
|
29
|
+
- 不能为空:每个 checkbox task 必须有 id
|
|
30
|
+
|
|
31
|
+
### Task Name 规则
|
|
32
|
+
|
|
33
|
+
- 必须非空
|
|
34
|
+
- 清晰描述任务内容
|
|
35
|
+
|
|
36
|
+
### Wave 分组
|
|
37
|
+
|
|
38
|
+
```markdown
|
|
39
|
+
## Wave 1
|
|
40
|
+
- [ ] task-01: 搭建项目骨架
|
|
41
|
+
- [ ] task-02: 配置 CI/CD
|
|
42
|
+
|
|
43
|
+
## Wave 2
|
|
44
|
+
- [ ] task-03: 实现业务逻辑
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
- Wave 内任务无依赖(可并行)
|
|
48
|
+
- Wave 间有依赖(按序执行)
|
|
49
|
+
- Wave 只能引用已存在的 task
|
|
50
|
+
|
|
51
|
+
## 校验规则
|
|
52
|
+
|
|
53
|
+
execute 进入前调用 `validatePlanForExecute(planContent)`:
|
|
54
|
+
|
|
55
|
+
| # | 规则 | 级别 |
|
|
56
|
+
|---|------|------|
|
|
57
|
+
| 1 | plan.md 非空 | error |
|
|
58
|
+
| 2 | 至少有一个 checkbox task | error |
|
|
59
|
+
| 3 | task id 唯一 | error |
|
|
60
|
+
| 4 | task id 连续(task-01 起) | error |
|
|
61
|
+
| 5 | task name 非空 | error |
|
|
62
|
+
| 6 | task 有 id(无 id 只 warning) | warning |
|
|
63
|
+
|
|
64
|
+
校验失败 → fail-fast,不进入 execute。
|
|
65
|
+
校验通过但有 warning → 继续执行,提示警告。
|
|
66
|
+
|
|
67
|
+
## 复杂度场景
|
|
68
|
+
|
|
69
|
+
### none(最小变更)
|
|
70
|
+
```markdown
|
|
71
|
+
## Wave 1
|
|
72
|
+
- [ ] task-01: 修复 bug
|
|
73
|
+
```
|
|
74
|
+
至少 1 个 checkbox task。
|
|
75
|
+
|
|
76
|
+
### light(轻量变更)
|
|
77
|
+
```markdown
|
|
78
|
+
## Wave 1
|
|
79
|
+
- [ ] task-01: 添加 API 端点
|
|
80
|
+
- [ ] task-02: 添加前端调用
|
|
81
|
+
```
|
|
82
|
+
1 个 Wave,2-3 个 task。
|
|
83
|
+
|
|
84
|
+
### full(完整变更)
|
|
85
|
+
```markdown
|
|
86
|
+
## Wave 1: 基础设施
|
|
87
|
+
- [ ] task-01: 数据库 schema
|
|
88
|
+
- [ ] task-02: 模型定义
|
|
89
|
+
|
|
90
|
+
## Wave 2: 业务逻辑
|
|
91
|
+
- [ ] task-03: API 实现
|
|
92
|
+
- [ ] task-04: 业务规则
|
|
93
|
+
|
|
94
|
+
## Wave 3: 测试
|
|
95
|
+
- [ ] task-05: 集成测试
|
|
96
|
+
```
|
|
97
|
+
多个 Wave,每个 Wave 1-N 个 task。
|
|
98
|
+
|
|
99
|
+
## execute reopen 契约
|
|
100
|
+
|
|
101
|
+
当 execute 被 `--reopen` 时:
|
|
102
|
+
1. **必须从最新 plan.md 重新解析 steps**(不复用旧 task/wave)
|
|
103
|
+
2. 如果 plan.md 已变更(wave 数量变了),execute steps 会反映最新状态
|
|
104
|
+
3. 旧 completed steps 不保留(全部回到 pending/stale)
|
|
105
|
+
|
|
106
|
+
## 错误处理
|
|
107
|
+
|
|
108
|
+
| 场景 | 行为 |
|
|
109
|
+
|------|------|
|
|
110
|
+
| plan.md 不存在 | 生成默认 3 Wave(向后兼容) |
|
|
111
|
+
| plan.md 存在但无 checkbox | fail-fast |
|
|
112
|
+
| task id 重复 | fail-fast |
|
|
113
|
+
| task id 不连续 | fail-fast |
|
|
114
|
+
| plan.md 被修改后 execute reopen | 重新解析,使用最新 wave/task |
|
|
115
|
+
|
|
116
|
+
## 双重校验
|
|
117
|
+
|
|
118
|
+
契约在两个时点执行:
|
|
119
|
+
|
|
120
|
+
1. **plan 完成时**(plan postcheck):plan.md 不合法 → 阻断 completed,plan 阶段无法完成
|
|
121
|
+
2. **execute 启动时**(execute entry):plan.md 不合法 → fail-fast,不进入 execute
|
|
122
|
+
|
|
123
|
+
这确保 plan.md 在进入 execute 之前就是合法的,execute 启动时的校验是二次保险。
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
---
|
|
2
|
+
author: qinyi
|
|
3
|
+
created_at: 2026-06-18 22:48:00
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Revision Mode — 阶段修订
|
|
7
|
+
|
|
8
|
+
## 核心语义
|
|
9
|
+
|
|
10
|
+
已完成(completed)的阶段不能直接重跑。必须通过 `--reopen` 进入受控修订模式。
|
|
11
|
+
|
|
12
|
+
修订模式确保:
|
|
13
|
+
- 阶段状态机闭环:completed → revising → completed
|
|
14
|
+
- 因果链不断:上游修订时,下游阶段自动标记 stale
|
|
15
|
+
- 产物安全:reopen 不删除、不备份、不回滚文件,只改 progress 状态
|
|
16
|
+
|
|
17
|
+
## 命令
|
|
18
|
+
|
|
19
|
+
### `--reopen` — 重新打开已完成阶段
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
sillyspec run brainstorm --reopen
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
把阶段从 completed 变为 revising。不删除步骤历史,不清空产物文件。
|
|
26
|
+
|
|
27
|
+
**不带 `--from-step` 时:** 只在阶段存在 pending/stale/waiting/failed 步骤时允许继续。如果所有步骤都是 completed,会拒绝并要求指定 `--from-step`。
|
|
28
|
+
|
|
29
|
+
### `--reopen --from-step <index|name>` — 从指定步骤开始修订
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
# 按序号(1-based)
|
|
33
|
+
sillyspec run brainstorm --reopen --from-step 3
|
|
34
|
+
|
|
35
|
+
# 按名称
|
|
36
|
+
sillyspec run brainstorm --reopen --from-step "方案选择"
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
效果:
|
|
40
|
+
- from-step 之前的步骤:保持 completed
|
|
41
|
+
- from-step 本身:变为 pending
|
|
42
|
+
- from-step 之后的步骤:标记为 stale(曾经完成,但因上游修订失效)
|
|
43
|
+
- 当前阶段状态:变为 revising
|
|
44
|
+
- 所有下游阶段:自动 cascade stale
|
|
45
|
+
|
|
46
|
+
### `--reset` — 彻底重置(核弹)
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
sillyspec run brainstorm --reset
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
清空所有步骤状态,从头开始。不保留任何历史。只在确实需要完全重来时使用。
|
|
53
|
+
|
|
54
|
+
## 下游 cascade 规则
|
|
55
|
+
|
|
56
|
+
阶段顺序:`scan → brainstorm → plan → execute → verify → archive`
|
|
57
|
+
|
|
58
|
+
reopen 任意阶段,其下游所有已 completed 的阶段自动变为 stale,并记录 staleReason。
|
|
59
|
+
|
|
60
|
+
示例:
|
|
61
|
+
```
|
|
62
|
+
reopen brainstorm --from-step 2
|
|
63
|
+
→ brainstorm: revising
|
|
64
|
+
→ plan: stale (上游 brainstorm 已修订)
|
|
65
|
+
→ execute: stale
|
|
66
|
+
→ verify: stale
|
|
67
|
+
→ archive: stale (已有归档文件保留但不再可信)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
stale 阶段不能直接 `run`,必须 `--reopen --from-step` 或 `--reset`。
|
|
71
|
+
|
|
72
|
+
## --reopen / --from-step / --reset 对比
|
|
73
|
+
|
|
74
|
+
| 维度 | --reopen --from-step | --reopen | --reset |
|
|
75
|
+
|------|---------------------|----------|---------|
|
|
76
|
+
| 步骤历史 | 保留之前的,后面失效 | 保留 | 全部清空 |
|
|
77
|
+
| 产物文件 | 不动 | 不动 | 不动 |
|
|
78
|
+
| 阶段状态 | revising | revising | pending |
|
|
79
|
+
| revision 计数 | +1 | +1 | 不变 |
|
|
80
|
+
| 下游 cascade | stale | stale | 不 cascade |
|
|
81
|
+
| 适用场景 | 局部返工 | 继续中断 | 彻底重来 |
|
|
82
|
+
|
|
83
|
+
## 文件策略
|
|
84
|
+
|
|
85
|
+
- reopen **不触碰**任何产物文件(design.md、plan.md、task docs 等)
|
|
86
|
+
- agent 在 revision context 下审视并更新已有产物
|
|
87
|
+
- 如需备份/快照功能,后续版本再加
|
|
88
|
+
|
|
89
|
+
## Revision Context 注入
|
|
90
|
+
|
|
91
|
+
修订模式下执行步骤时,prompt 前会注入:
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
🔄 Revision Context
|
|
95
|
+
本阶段处于修订模式(revision N),不是首次执行。
|
|
96
|
+
- 修订起始步骤:index: name
|
|
97
|
+
- 当前步骤之前已完成的步骤仍然有效,不需要重做。
|
|
98
|
+
- 当前步骤及之后的步骤需要重新生成或调整已有产物。
|
|
99
|
+
- 已有产物文件被保留,审视并更新它们,而不是从零创建。
|
|
100
|
+
- 不要绕过 CLI 进度追踪。
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## progress 展示示例
|
|
104
|
+
|
|
105
|
+
```
|
|
106
|
+
🔧 🧠 需求探索
|
|
107
|
+
📋 revision: 2, from step: 2: 加载项目上下文
|
|
108
|
+
✅ 状态检查 (保持 completed)
|
|
109
|
+
⬜ 加载项目上下文 (pending — 从这里重做)
|
|
110
|
+
⚠️ 协作与复用检查 (stale)
|
|
111
|
+
⚠️ 原型/设计图分析 (stale)
|
|
112
|
+
...
|
|
113
|
+
⚠️ 📐 实现计划
|
|
114
|
+
⚠️ stale: 上游阶段 brainstorm 已修订 (revision 2)
|
|
115
|
+
```
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
author: qinyi
|
|
3
3
|
created_at: 2026-05-31 11:00:00
|
|
4
|
-
updated_at: 2026-06-
|
|
4
|
+
updated_at: 2026-06-19 15:00:00
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# SillySpec 文件生命周期
|
|
@@ -24,6 +24,8 @@ updated_at: 2026-06-04 16:55:00
|
|
|
24
24
|
|
|
25
25
|
- `src/init.js`
|
|
26
26
|
- `src/db.js`
|
|
27
|
+
- `src/scan-postcheck.js`
|
|
28
|
+
- `src/knowledge-match.js`
|
|
27
29
|
- `src/progress.js`
|
|
28
30
|
- `src/run.js`
|
|
29
31
|
- `src/stages/*.js`
|
|
@@ -39,7 +41,7 @@ updated_at: 2026-06-04 16:55:00
|
|
|
39
41
|
|
|
40
42
|
| 阶段 | 当前步骤数 | 备注 |
|
|
41
43
|
|---|---:|---|
|
|
42
|
-
| scan |
|
|
44
|
+
| scan | 11 | 辅助阶段;step 2 后会按项目动态展开 `perProject` 步骤;第 10 步「Extract Project Knowledge」写入 `knowledge/` |
|
|
43
45
|
| brainstorm | 11 | 独立包含“写设计文档并自审”和“用户确认并生成规范文件” |
|
|
44
46
|
| propose | 7 | 包含“生成规范文件”与“自检门控”,四件套是该阶段预期产物 |
|
|
45
47
|
| plan | 动态 | 默认 8 步;`plan.md` 解析到任务后插入任务蓝图协调器 |
|
|
@@ -62,12 +64,12 @@ updated_at: 2026-06-04 16:55:00
|
|
|
62
64
|
| `.sillyspec/docs/<project>/modules/` | 是 | scan 可选步骤、archive sync、`modules` 子命令 | 模块索引和模块卡片 |
|
|
63
65
|
| `.sillyspec/changes/<change>/` | 是 | `ProgressManager.initChange()` 确保目录;阶段 prompt 写入 | 单个变更包文档和验收产物 |
|
|
64
66
|
| `.sillyspec/changes/archive/` | 是 | archive `确认归档 --confirm` 分支 | 已归档变更目录 |
|
|
65
|
-
| `.sillyspec/knowledge/` | 是 | `init.js` | `INDEX.md
|
|
67
|
+
| `.sillyspec/knowledge/` | 是 | `init.js` 建目录;scan「Extract Project Knowledge」步骤产出 | `INDEX.md`、`uncategorized.md`,以及 scan 提取的 `conventions.md`/`patterns.md`/`known-issues.md` |
|
|
66
68
|
| `.sillyspec/workflows/` | 是 | `init.js` 从模板复制 | workflow check 定义 |
|
|
67
69
|
| `.sillyspec/quicklog/` | 是 | quick prompt | 无 `--change` quick 任务记录 |
|
|
68
70
|
| `.sillyspec/shared/` | 是 | `init.js` | 共享目录,当前无核心生命周期逻辑 |
|
|
69
71
|
| `.sillyspec/workspace/` | 是 | `init.js` | 工作区目录,当前无核心生命周期逻辑 |
|
|
70
|
-
| `.sillyspec/.runtime/` | 否 | `init.js`、`ProgressManager`、运行时命令 | DB、gate、artifacts、history、workflow-runs、worktrees |
|
|
72
|
+
| `.sillyspec/.runtime/` | 否 | `init.js`、`ProgressManager`、运行时命令 | DB、gate、artifacts、history、workflow-runs、worktrees、knowledge-hit-report.json、postcheck-result.json |
|
|
71
73
|
|
|
72
74
|
`init.js` 会把 `.sillyspec/.runtime/`、`.sillyspec/local.yaml`、`.sillyspec/codebase/SCAN-RAW.md` 追加到 `.gitignore`。
|
|
73
75
|
|
|
@@ -85,7 +87,10 @@ sillyspec run scan
|
|
|
85
87
|
-> .sillyspec/docs/<project>/scan/*.md
|
|
86
88
|
-> .sillyspec/docs/<project>/modules/_module-map.yaml (optional prompt)
|
|
87
89
|
-> .sillyspec/docs/<project>/modules/<module>.md (optional prompt)
|
|
90
|
+
-> .sillyspec/knowledge/{conventions,patterns,known-issues}.md (Extract Project Knowledge)
|
|
91
|
+
-> .sillyspec/knowledge/INDEX.md (索引更新)
|
|
88
92
|
-> .sillyspec/.runtime/scan-projects.json (step expansion state)
|
|
93
|
+
-> .sillyspec/.runtime/postcheck-result.json (scan-postcheck 结构化结果)
|
|
89
94
|
|
|
90
95
|
brainstorm / propose / plan / execute / verify / archive
|
|
91
96
|
-> .sillyspec/changes/<change>/...
|
|
@@ -95,6 +100,7 @@ brainstorm / propose / plan / execute / verify / archive
|
|
|
95
100
|
|
|
96
101
|
execute
|
|
97
102
|
-> .sillyspec/.runtime/worktrees/<change>/meta.json
|
|
103
|
+
-> .sillyspec/.runtime/knowledge-hit-report.json (启动时按 taskContext 匹配 knowledge)
|
|
98
104
|
-> worktree branch sillyspec/<change>
|
|
99
105
|
-> apply patch back to main workspace, then cleanup
|
|
100
106
|
|
|
@@ -114,3 +120,6 @@ quick
|
|
|
114
120
|
- `.sillyspec/local.yaml` 是当前主配置口径;scan prompt 写这里,sync 读写这里,hook 优先读这里并兼容根目录 fallback。
|
|
115
121
|
- 平台模式的 `manifest.json` 已接入 scan 完成回调;`workflow-runs` 的 runtimeRoot 路径支持在 `workflow.js` 中存在,但 `run.js` 当前调用没有传入 `runtimeRoot`。
|
|
116
122
|
- `archive` 的目录移动已经由 `run.js` 在第 4 步 `--confirm` 时执行;未带 `--confirm` 会回退该步骤并提示补参。
|
|
123
|
+
- scan 第 10 步「Extract Project Knowledge」把长期有效的项目知识写入 `.sillyspec/knowledge/`(`conventions.md`/`patterns.md`/`known-issues.md` + 更新 `INDEX.md`);`scan-postcheck.js` 校验产物(INDEX.md 存在、引用文件真实存在)。
|
|
124
|
+
- execute 启动时由 `knowledge-match.js` 按 plan.md 的 task 关键词匹配知识库,命中报告注入 prompt 并写 `.runtime/knowledge-hit-report.json`。
|
|
125
|
+
- Revision v1:`stages` 表新增 `revision`/`reopened_from_step`/`reopened_at`/`stale_reason` 列;阶段新增 `revising`/`stale` 状态;`sillyspec run <stage> --reopen --from-step <n>` 重开已完成阶段、级联标记下游 stale;`.runtime/postcheck-result.json` 由 `scan-postcheck.js` 的 `writeStructuredResult` 落盘(本地写 `specDir/.runtime`,平台写 `runtimeRoot/scan-runs/<id>`)。
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
# Workflow Contract Regression Audit
|
|
2
|
+
|
|
3
|
+
> 日期:2026-06-19
|
|
4
|
+
> 范围:16 commits (f52e670..977ad0a)
|
|
5
|
+
> 结论:**全绿,0 bug,274 个断言全部通过**
|
|
6
|
+
|
|
7
|
+
## 审计目标
|
|
8
|
+
|
|
9
|
+
确认今晚 16 个 commit 引入的 contract/revision/stale safety 改动没有误伤现有主链路。
|
|
10
|
+
|
|
11
|
+
## 审计范围
|
|
12
|
+
|
|
13
|
+
### 新增功能
|
|
14
|
+
1. **Revision v1** — 阶段重开 + 步骤级修订控制
|
|
15
|
+
2. **Revision v1.1** — 可观测性与状态自检
|
|
16
|
+
3. **Revision v1.2** — progress repair 安全修复状态元数据
|
|
17
|
+
4. **Execute stale safety v1** — 防止基于旧 plan 继续执行
|
|
18
|
+
5. **Verify/Archive stale safety** — 8 个测试固化安全链
|
|
19
|
+
6. **Plan→Execute contract v1** — 校验 + 文档 + 测试
|
|
20
|
+
7. **Plan postcheck contract v1** — plan 完成时校验 execute 契约
|
|
21
|
+
8. **Brainstorm→Plan contract v1** — design.md 输入校验
|
|
22
|
+
|
|
23
|
+
### 新增契约链
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
brainstorm → design.md → [Design Contract 校验] → plan → plan.md → [Plan Contract 校验] → execute
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- **brainstorm → plan**: `validateDesignForPlan` — 3 error + 3 warning
|
|
30
|
+
- **plan → execute**: `validatePlanForExecute` — 5 error + 1 warning
|
|
31
|
+
- 双重校验:plan 完成时 + execute 启动时
|
|
32
|
+
|
|
33
|
+
### 新增 Stale Cascade 链
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
scan → brainstorm → plan → execute → verify → archive
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
- `checkConsistency` 基于 STAGE_ORDER 遍历上游,自动发现下游假完成
|
|
40
|
+
- `repair` cascade:execute stale → verify/archive stale → verify stale → archive stale
|
|
41
|
+
|
|
42
|
+
## 测试执行
|
|
43
|
+
|
|
44
|
+
### 命令
|
|
45
|
+
```bash
|
|
46
|
+
cd ~/Desktop/sillyspec && npm test
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 测试套件 (15 个,274 断言)
|
|
50
|
+
|
|
51
|
+
| 测试套件 | 断言数 | 状态 |
|
|
52
|
+
|---------|-------|------|
|
|
53
|
+
| brainstorm-plan-contract.test.mjs | 11 | ✅ |
|
|
54
|
+
| plan-execute-contract.test.mjs | 12 | ✅ |
|
|
55
|
+
| platform-artifacts.test.mjs | 31 | ✅ |
|
|
56
|
+
| platform-failure-samples.test.mjs | 20 | ✅ |
|
|
57
|
+
| platform-recovery-chain.test.mjs | 15 | ✅ |
|
|
58
|
+
| platform-recovery.test.mjs | 19 | ✅ |
|
|
59
|
+
| platform-scan-p0.test.mjs | 19 | ✅ |
|
|
60
|
+
| revision-v1.test.mjs | 12 | ✅ |
|
|
61
|
+
| scan-paths.test.mjs | 38 | ✅ |
|
|
62
|
+
| scan-postcheck.test.mjs | 38 | ✅ |
|
|
63
|
+
| spec-dir.test.mjs | 15 | ✅ |
|
|
64
|
+
| stage-contract.test.mjs | 19 | ✅ |
|
|
65
|
+
| stage-definitions.test.mjs | 29 | ✅ |
|
|
66
|
+
| wait-gates.test.mjs | 15 | ✅ |
|
|
67
|
+
| worktree-guard.test.mjs | (included) | ✅ |
|
|
68
|
+
|
|
69
|
+
**总计:15 套件,274 断言,0 失败。**
|
|
70
|
+
|
|
71
|
+
## 主链路验收
|
|
72
|
+
|
|
73
|
+
### 1. 完整主链路 (scan → brainstorm → plan → execute → verify)
|
|
74
|
+
- ✅ stage-contract.test.mjs 覆盖了各阶段的校验与转换
|
|
75
|
+
- ✅ stage-definitions.test.mjs 覆盖了所有阶段定义的步骤初始化
|
|
76
|
+
- ✅ 无 contract 误伤
|
|
77
|
+
|
|
78
|
+
### 2. Plan 级别验收 (none/light/full)
|
|
79
|
+
- ✅ plan-execute-contract.test.mjs 覆盖 none/light/full
|
|
80
|
+
- ✅ plan postcheck 在 plan completion path 执行
|
|
81
|
+
- ✅ execute startup 二次校验保留
|
|
82
|
+
|
|
83
|
+
### 3. Revision 链路
|
|
84
|
+
- ✅ revision-v1.test.mjs 覆盖 reopen/repair/checkConsistency
|
|
85
|
+
- ✅ verify/archive --reopen 清除旧 completed steps
|
|
86
|
+
- ✅ execute --reopen 重新解析最新 plan.md
|
|
87
|
+
- ✅ repair cascade execute → verify → archive
|
|
88
|
+
|
|
89
|
+
### 4. Progress check/repair
|
|
90
|
+
- ✅ 正常状态无误报
|
|
91
|
+
- ✅ 异常状态报告清晰(checkConsistency 输出 upstream/downstream 关系)
|
|
92
|
+
- ✅ repair 只修 progress 元数据,不改产物文件
|
|
93
|
+
|
|
94
|
+
## 发现
|
|
95
|
+
|
|
96
|
+
**0 bug。** 274 个断言全部通过,无回归。
|
|
97
|
+
|
|
98
|
+
### 设计确认
|
|
99
|
+
- checkConsistency 和 repair 基于 STAGE_ORDER 通用遍历,不针对特定 stage
|
|
100
|
+
- verify/archive 用静态 steps,不需要从文件重解析
|
|
101
|
+
- contract validator 只在阶段边界执行,不影响阶段内步骤流转
|
|
102
|
+
- repair cascade 是自然结果,不需要硬编码 stage 间关系
|
|
103
|
+
|
|
104
|
+
## 文件变更统计
|
|
105
|
+
|
|
106
|
+
16 commits, 28 files changed, +3675/-689 lines。
|