sillyspec 3.20.3 → 3.20.5

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.
Files changed (225) hide show
  1. package/.claude/skills/sillyspec-archive/SKILL.md +21 -17
  2. package/.claude/skills/sillyspec-auto/SKILL.md +83 -77
  3. package/.claude/skills/sillyspec-brainstorm/SKILL.md +44 -17
  4. package/.claude/skills/sillyspec-commit/SKILL.md +106 -105
  5. package/.claude/skills/sillyspec-continue/SKILL.md +45 -44
  6. package/.claude/skills/sillyspec-doctor/SKILL.md +31 -22
  7. package/.claude/skills/sillyspec-execute/SKILL.md +30 -17
  8. package/.claude/skills/sillyspec-explore/SKILL.md +109 -96
  9. package/.claude/skills/sillyspec-knowledge/SKILL.md +270 -0
  10. package/.claude/skills/sillyspec-plan/SKILL.md +21 -52
  11. package/.claude/skills/sillyspec-propose/SKILL.md +21 -17
  12. package/.claude/skills/sillyspec-quick/SKILL.md +21 -17
  13. package/.claude/skills/sillyspec-resume/SKILL.md +68 -111
  14. package/.claude/skills/sillyspec-scan/SKILL.md +21 -17
  15. package/.claude/skills/sillyspec-state/SKILL.md +54 -54
  16. package/.claude/skills/sillyspec-status/SKILL.md +21 -17
  17. package/.claude/skills/sillyspec-verify/SKILL.md +21 -17
  18. package/.claude/skills/sillyspec-workspace/SKILL.md +157 -149
  19. package/.husky/pre-push +13 -0
  20. package/CLAUDE.md +18 -0
  21. package/README.md +198 -186
  22. package/SKILL.md +90 -87
  23. package/bin/sillyspec.js +2 -2
  24. package/docs/brainstorm-plan-contract.md +64 -0
  25. package/docs/plan-execute-contract.md +123 -0
  26. package/docs/platform-scan-protocol.md +298 -0
  27. package/docs/revision-mode.md +115 -0
  28. package/docs/sillyspec/file-lifecycle/known-implementation-gaps.md +99 -0
  29. package/docs/sillyspec/file-lifecycle/platform-workflows-sync.md +218 -0
  30. package/docs/sillyspec/file-lifecycle/stage-artifacts.md +167 -0
  31. package/docs/sillyspec/file-lifecycle/storage-and-state.md +148 -0
  32. package/docs/sillyspec/file-lifecycle/worktree-and-guard.md +211 -0
  33. package/docs/sillyspec/file-lifecycle.md +131 -0
  34. package/docs/workflow-contract-regression.md +106 -0
  35. package/docs/worktree-isolation.md +252 -0
  36. package/package.json +40 -34
  37. package/packages/dashboard/dist/assets/{index-D1EVTLmc.js → index-Bq_Z2hne.js} +7446 -7446
  38. package/packages/dashboard/dist/assets/index-O2W5RV4z.css +1 -0
  39. package/packages/dashboard/dist/index.html +16 -16
  40. package/packages/dashboard/dist/prototype-dashboard.html +836 -0
  41. package/packages/dashboard/dist/prototype-overview.html +256 -0
  42. package/packages/dashboard/index.html +15 -15
  43. package/packages/dashboard/package-lock.json +2384 -2384
  44. package/packages/dashboard/package.json +25 -25
  45. package/packages/dashboard/public/prototype-dashboard.html +836 -0
  46. package/packages/dashboard/public/prototype-overview.html +256 -0
  47. package/packages/dashboard/server/executor.js +86 -86
  48. package/packages/dashboard/server/index.js +588 -508
  49. package/packages/dashboard/server/parser.js +526 -458
  50. package/packages/dashboard/server/watcher.js +350 -342
  51. package/packages/dashboard/src/App.vue +558 -325
  52. package/packages/dashboard/src/components/ActionBar.vue +93 -84
  53. package/packages/dashboard/src/components/CommandPalette.vue +96 -92
  54. package/packages/dashboard/src/components/DetailPanel.vue +137 -137
  55. package/packages/dashboard/src/components/DocPreview.vue +105 -8
  56. package/packages/dashboard/src/components/DocTree.vue +75 -19
  57. package/packages/dashboard/src/components/HResizeHandle.vue +48 -0
  58. package/packages/dashboard/src/components/LogStream.vue +65 -65
  59. package/packages/dashboard/src/components/PipelineStage.vue +95 -75
  60. package/packages/dashboard/src/components/PipelineView.vue +156 -129
  61. package/packages/dashboard/src/components/ProjectCard.vue +187 -0
  62. package/packages/dashboard/src/components/ProjectList.vue +210 -210
  63. package/packages/dashboard/src/components/ProjectOverview.vue +113 -139
  64. package/packages/dashboard/src/components/StageBadge.vue +67 -53
  65. package/packages/dashboard/src/components/StepCard.vue +94 -89
  66. package/packages/dashboard/src/components/VResizeHandle.vue +61 -0
  67. package/packages/dashboard/src/components/detail/DocsDetail.vue +48 -48
  68. package/packages/dashboard/src/components/detail/GitDetail.vue +61 -61
  69. package/packages/dashboard/src/components/detail/TechDetail.vue +43 -43
  70. package/packages/dashboard/src/composables/useDashboard.js +192 -164
  71. package/packages/dashboard/src/composables/useKeyboard.js +119 -119
  72. package/packages/dashboard/src/composables/useLayout.js +131 -0
  73. package/packages/dashboard/src/composables/useWebSocket.js +129 -129
  74. package/packages/dashboard/src/main.js +8 -8
  75. package/packages/dashboard/src/style.css +132 -132
  76. package/packages/dashboard/vite.config.js +18 -18
  77. package/src/brainstorm-postcheck.js +158 -0
  78. package/src/change-list.js +52 -0
  79. package/src/change-risk-profile.js +352 -0
  80. package/src/classify-change.js +73 -0
  81. package/src/constants.js +70 -0
  82. package/src/contract-matrix.js +278 -0
  83. package/src/db.js +201 -0
  84. package/src/endpoint-extractor.js +315 -0
  85. package/src/hooks/claude-pre-tool-use.cjs +125 -0
  86. package/src/hooks/worktree-guard.js +761 -0
  87. package/src/index.js +922 -252
  88. package/src/init.js +470 -375
  89. package/src/knowledge-match.js +130 -0
  90. package/src/migrate.js +117 -117
  91. package/src/modules.js +482 -0
  92. package/src/progress.js +1734 -508
  93. package/src/run.js +3465 -652
  94. package/src/scan-postcheck.js +387 -0
  95. package/src/setup.js +398 -460
  96. package/src/stage-contract.js +700 -0
  97. package/src/stages/archive.js +160 -54
  98. package/src/stages/brainstorm-auto.js +229 -0
  99. package/src/stages/brainstorm.js +645 -239
  100. package/src/stages/doctor.js +365 -312
  101. package/src/stages/execute.js +634 -264
  102. package/src/stages/explore.js +34 -0
  103. package/src/stages/index.js +29 -35
  104. package/src/stages/knowledge.js +498 -0
  105. package/src/stages/plan-postcheck.js +518 -0
  106. package/src/stages/plan.js +582 -279
  107. package/src/stages/propose.js +174 -115
  108. package/src/stages/quick.js +102 -63
  109. package/src/stages/scan.js +558 -141
  110. package/src/stages/status.js +65 -65
  111. package/src/stages/verify.js +322 -135
  112. package/src/sync.js +497 -0
  113. package/src/task-review.js +346 -0
  114. package/src/workflow.js +785 -0
  115. package/src/worktree-apply.js +549 -0
  116. package/src/worktree-deps.js +185 -0
  117. package/src/worktree.js +982 -0
  118. package/templates/workflows/archive-impact.yaml +79 -0
  119. package/templates/workflows/scan-docs.yaml +132 -0
  120. package/test/brainstorm-plan-contract.test.mjs +273 -0
  121. package/test/check-syntax.mjs +26 -0
  122. package/test/cli-top-level-aliases.test.mjs +174 -0
  123. package/test/contract-artifacts.test.mjs +323 -0
  124. package/test/decision-supersede.test.mjs +277 -0
  125. package/test/knowledge-match.test.mjs +231 -0
  126. package/test/plan-execute-contract.test.mjs +357 -0
  127. package/test/plan-optimization.test.mjs +572 -0
  128. package/test/platform-artifacts.test.mjs +190 -0
  129. package/test/platform-failure-samples.test.mjs +199 -0
  130. package/test/platform-recovery-chain.test.mjs +179 -0
  131. package/test/platform-recovery.test.mjs +167 -0
  132. package/test/platform-scan-p0.test.mjs +175 -0
  133. package/test/revision-v1.test.mjs +1145 -0
  134. package/test/run-sanitize-project-name.test.mjs +51 -0
  135. package/test/run-scan-postcheck-fail.test.mjs +64 -0
  136. package/test/run-scan-project-parse.test.mjs +200 -0
  137. package/test/run-tests.mjs +48 -0
  138. package/test/runtime-cleanup-keeps-worktree.test.mjs +107 -0
  139. package/test/scan-docs-yaml-placeholders.test.mjs +84 -0
  140. package/test/scan-knowledge.test.mjs +175 -0
  141. package/test/scan-paths.test.mjs +68 -0
  142. package/test/scan-postcheck-project-priority.test.mjs +85 -0
  143. package/test/scan-postcheck.test.mjs +197 -0
  144. package/test/scan-workflow-anyfailed-block.test.mjs +52 -0
  145. package/test/spec-dir.test.mjs +206 -0
  146. package/test/stage-contract-failed-post-check.test.mjs +102 -0
  147. package/test/stage-contract.test.mjs +299 -0
  148. package/test/stage-definitions.test.mjs +39 -0
  149. package/test/wait-gates.test.mjs +501 -0
  150. package/test/workflow-spec-base.test.mjs +142 -0
  151. package/test/worktree-deps-provision.test.mjs +148 -0
  152. package/test/worktree-guard.test.mjs +136 -0
  153. package/test/worktree-native-overlay.test.mjs +188 -0
  154. package/.sillyspec/changes/archive/2026-04-08-derive-state/design.md +0 -97
  155. package/.sillyspec/changes/archive/2026-04-08-derive-state/plan.md +0 -51
  156. package/.sillyspec/changes/archive/2026-04-08-derive-state/proposal.md +0 -29
  157. package/.sillyspec/changes/archive/2026-04-08-derive-state/requirements.md +0 -34
  158. package/.sillyspec/changes/archive/2026-04-08-derive-state/tasks.md +0 -13
  159. package/.sillyspec/changes/archive/2026-04-08-derive-state/verify-result.md +0 -43
  160. package/.sillyspec/changes/auto-mode/design.md +0 -50
  161. package/.sillyspec/changes/auto-mode/proposal.md +0 -19
  162. package/.sillyspec/changes/auto-mode/requirements.md +0 -21
  163. package/.sillyspec/changes/auto-mode/tasks.md +0 -7
  164. package/.sillyspec/changes/brainstorm-archive/2026-04-05-dashboard-design.md +0 -206
  165. package/.sillyspec/changes/brainstorm-archive/2026-04-05-unified-docs-design.md +0 -199
  166. package/.sillyspec/changes/dashboard/design.md +0 -219
  167. package/.sillyspec/changes/dashboard/design.md.braindraft +0 -206
  168. package/.sillyspec/changes/run-command-design/design.md +0 -1230
  169. package/.sillyspec/changes/unified-docs-design/design.md +0 -199
  170. package/.sillyspec/docs/sillyspec/scan/.gitkeep +0 -0
  171. package/.sillyspec/knowledge/INDEX.md +0 -8
  172. package/.sillyspec/knowledge/uncategorized.md +0 -3
  173. package/.sillyspec/plans/2026-04-05-dashboard.md +0 -737
  174. package/.sillyspec/projects/sillyspec.yaml +0 -3
  175. package/dist/steps/brainstorm/01-load-context.md +0 -30
  176. package/dist/steps/brainstorm/02-reuse-check.md +0 -6
  177. package/dist/steps/brainstorm/03-prototype-analysis.md +0 -11
  178. package/dist/steps/brainstorm/04-module-split.md +0 -23
  179. package/dist/steps/brainstorm/05-dialog-explore.md +0 -8
  180. package/dist/steps/brainstorm/06-propose-approaches.md +0 -3
  181. package/dist/steps/brainstorm/07-present-design.md +0 -3
  182. package/dist/steps/brainstorm/08-write-design.md +0 -21
  183. package/dist/steps/brainstorm/09-self-review.md +0 -15
  184. package/dist/steps/brainstorm/10-user-confirm.md +0 -3
  185. package/dist/steps/brainstorm/11-output-spec.md +0 -7
  186. package/dist/steps/brainstorm/manifest.yaml +0 -26
  187. package/dist/steps/execute/01-load-context.md +0 -41
  188. package/dist/steps/execute/02-scan-conventions.md +0 -47
  189. package/dist/steps/execute/03-skill-mcp.md +0 -19
  190. package/dist/steps/execute/04-assign-task.md +0 -22
  191. package/dist/steps/execute/04b-prompt-template.md +0 -54
  192. package/dist/steps/execute/05-write-test.md +0 -7
  193. package/dist/steps/execute/06-write-code.md +0 -8
  194. package/dist/steps/execute/07-run-test.md +0 -26
  195. package/dist/steps/execute/08-fix-issues.md +0 -28
  196. package/dist/steps/execute/09-next-task.md +0 -33
  197. package/dist/steps/execute/manifest.yaml +0 -28
  198. package/dist/steps/plan/01-load-context.md +0 -22
  199. package/dist/steps/plan/02-anchor-confirm.md +0 -1
  200. package/dist/steps/plan/03-expand-tasks.md +0 -33
  201. package/dist/steps/plan/04-mark-order.md +0 -15
  202. package/dist/steps/plan/05-e2e-planning.md +0 -17
  203. package/dist/steps/plan/06-self-check.md +0 -16
  204. package/dist/steps/plan/07-save.md +0 -1
  205. package/dist/steps/plan/manifest.yaml +0 -18
  206. package/dist/steps/scan/01-env-detect.md +0 -51
  207. package/dist/steps/scan/02-tech-stack.md +0 -16
  208. package/dist/steps/scan/03-conventions.md +0 -16
  209. package/dist/steps/scan/04-structure.md +0 -19
  210. package/dist/steps/scan/05-quality.md +0 -18
  211. package/dist/steps/scan/06-complete.md +0 -49
  212. package/dist/steps/scan/manifest.yaml +0 -16
  213. package/dist/steps/verify/01-load-specs.md +0 -28
  214. package/dist/steps/verify/02-check-tasks.md +0 -1
  215. package/dist/steps/verify/03-check-design.md +0 -6
  216. package/dist/steps/verify/04-run-tests.md +0 -7
  217. package/dist/steps/verify/05-e2e-tests.md +0 -27
  218. package/dist/steps/verify/05b-e2e-fix.md +0 -33
  219. package/dist/steps/verify/06-code-quality.md +0 -25
  220. package/dist/steps/verify/07-lint-check.md +0 -27
  221. package/dist/steps/verify/08-output-report.md +0 -14
  222. package/dist/steps/verify/manifest.yaml +0 -22
  223. package/packages/dashboard/dist/assets/index-DGe8CqeP.css +0 -1
  224. package/src/derive.js +0 -147
  225. package/src/step.js +0 -543
@@ -1,149 +1,157 @@
1
- ---
2
- name: sillyspec:workspace
3
- description: 工作区管理 — 初始化、管理多项目工作区,查看子项目状态
4
- ---
5
-
6
- ## 交互规范
7
-
8
- **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
9
-
10
- 不要用编号列表让用户手动输入数字。
11
- 如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
12
-
13
- ---
14
-
15
- 你现在是 SillySpec 的工作区管理器。
16
-
17
- ## 用户指令
18
- $ARGUMENTS
19
-
20
- ## 核心流程
21
-
22
- ### Step 1: 检查工作区配置
23
-
24
- ```bash
25
- ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
26
- ```
27
-
28
- 如果不存在 → 这是一个尚未配置工作区的项目。询问用户:
29
- 1. 初始化工作区
30
- 2. 跳过
31
-
32
- ### Step 2: 解析指令
33
-
34
- 根据 `$ARGUMENTS` 或默认行为:
35
-
36
- - **无参数 / `status`** → 显示工作区状态
37
- - **`add`** → 添加子项目
38
- - **`remove`** → 移除子项目
39
- - **`info`** → 显示某个子项目详情
40
- - 无参数且 projects/*.yaml 不存在 → 初始化工作区
41
-
42
- ### Step 3: 执行对应操作
43
-
44
- #### 3a. 初始化工作区(projects/ 不存在时)
45
-
46
- 1. 询问工作区名称(默认用当前目录名)
47
- 2. 逐个添加子项目:
48
- - 询问子项目名称(如 `frontend`、`backend`)
49
- - 询问子项目路径(相对于工作区根目录,如 `./frontend`)
50
- - 询问子项目角色描述(如 `前端 - Vue3 + TypeScript`)
51
- - 询问仓库地址(可选)
52
- - 验证路径存在
53
- 添加完后询问:
54
- > 1. 继续添加子项目
55
- > 2. 完成,配置共享规范
56
- 3. 询问共享规范文件
57
- 4. 为每个子项目创建 `.sillyspec/projects/<name>.yaml`:
58
- ```yaml
59
- name: <name>
60
- path: <relative-path>
61
- status: active
62
- role: <description>
63
- repo: <repo-url> # 可选
64
- ```
65
- 5. 创建 `.sillyspec/shared/` 目录
66
-
67
- #### 3b. 添加子项目(`add`)
68
-
69
- 1. 询问名称、路径、角色
70
- 2. 验证路径存在
71
- 3. 创建/更新 `.sillyspec/projects/<name>.yaml`
72
- 4. Git 提交
73
-
74
- #### 3c. 移除子项目(`remove`)
75
-
76
- 1. 显示当前所有子项目列表
77
- 2. 询问要移除哪个:
78
- > 1. (列出子项目名称)
79
- > 2. 取消
80
- 3. 删除 `.sillyspec/projects/<name>.yaml`
81
- 4. Git 提交
82
-
83
- #### 3d. 工作区状态(`status`,默认)
84
-
85
- 读取所有 `projects/*.yaml`,对每个子项目检查:
86
-
87
- ```bash
88
- # 读取子项目列表
89
- for f in .sillyspec/projects/*.yaml; do
90
- [ -f "$f" ] || continue
91
- proj_name=$(basename "$f" .yaml)
92
- proj_path=$(grep '^path:' "$f" | head -1 | sed 's/^path:[[:space:]]*//')
93
- proj_role=$(grep '^role:' "$f" | head -1 | sed 's/^role:[[:space:]]*//')
94
- # 检查子项目状态
95
- cd "$proj_path"
96
- ls .sillyspec/ 2>/dev/null
97
- cat .sillyspec/PROJECT.md 2>/dev/null
98
- ls docs/${proj_name}/scan/ 2>/dev/null | wc -l
99
- cd -
100
- done
101
- ```
102
-
103
- 输出格式:
104
-
105
- ```
106
- 🏢 工作区:<workspace-name>
107
-
108
- 📦 子项目(N 个):
109
- ✅ frontend ./frontend 前端 - Vue3 + TypeScript 已扫描(7 份文档)
110
- ⚠️ backend ./backend 后端 - Node.js 已初始化(未扫描)
111
- ❌ miniprogram ./miniprogram 小程序 - Taro 未初始化
112
-
113
- 📄 共享规范:2 份
114
- - api-contract.md
115
- - data-models.md
116
-
117
- 💡 操作:
118
- /sillyspec:workspace add — 添加子项目
119
- /sillyspec:workspace remove — 移除子项目
120
- /sillyspec:init — 初始化子项目
121
- /sillyspec:scan — 扫描子项目
122
- ```
123
-
124
- #### 3e. 子项目详情(`info <name>`)
125
-
126
- 显示指定子项目的详细信息,包括 PROJECT.md、REQUIREMENTS.md 内容摘要、扫描文档列表。
127
-
128
- ### Step 4: projects/*.yaml 格式
129
-
130
- 每个子项目对应 `.sillyspec/projects/<name>.yaml`:
131
-
132
- ```yaml
133
- name: frontend
134
- path: ./frontend
135
- status: active
136
- role: 前端 - Vue3 + TypeScript
137
- repo: https://github.com/xxx/frontend.git # 可选
138
- ```
139
-
140
- ### 最后说:
141
-
142
- > 工作区已更新。
143
- > 下一步:对子项目运行 `/sillyspec:init` 或 `/sillyspec:scan`。
144
-
145
- ## 绝对规则
146
- - 不修改子项目目录下的任何文件
147
- - projects/*.yaml 必须是合法 YAML
148
- - 子项目路径必须是相对于工作区根目录的相对路径
149
- - 路径必须验证存在性
1
+ ---
2
+ name: sillyspec:workspace
3
+ description: 工作区管理 — 初始化、管理多项目工作区,查看子项目状态
4
+ ---
5
+
6
+ ## 交互规范
7
+
8
+ **当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
9
+
10
+ 不要用编号列表让用户手动输入数字。
11
+ 如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
12
+
13
+ ---
14
+
15
+ 你现在是 SillySpec 的工作区管理器。
16
+
17
+ ## 用户指令
18
+ $ARGUMENTS
19
+
20
+ ## 核心流程
21
+
22
+ ### Step 1: 检查工作区配置
23
+
24
+ ```bash
25
+ ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
26
+ ```
27
+
28
+ 如果不存在 → 这是一个尚未配置工作区的项目。询问用户:
29
+ 1. 初始化工作区
30
+ 2. 跳过
31
+
32
+ ### Step 2: 解析指令
33
+
34
+ 根据 `$ARGUMENTS` 或默认行为:
35
+
36
+ - **无参数 / `status`** → 显示工作区状态
37
+ - **`add`** → 添加子项目
38
+ - **`remove`** → 移除子项目
39
+ - **`info`** → 显示某个子项目详情
40
+ - 无参数且 projects/*.yaml 不存在 → 初始化工作区
41
+
42
+ ### Step 3: 执行对应操作
43
+
44
+ #### 3a. 初始化工作区(projects/ 不存在时)
45
+
46
+ 1. 询问工作区名称(默认用当前目录名)
47
+ 2. 逐个添加子项目:
48
+ - 询问子项目名称(如 `frontend`、`backend`)
49
+ - 询问子项目路径(相对于工作区根目录,如 `./frontend`)
50
+ - 询问子项目角色描述(如 `前端 - Vue3 + TypeScript`)
51
+ - 询问仓库地址(可选)
52
+ - 验证路径存在
53
+ 添加完后询问:
54
+ > 1. 继续添加子项目
55
+ > 2. 完成,配置共享规范
56
+ 3. 询问共享规范文件
57
+ 4. 为每个子项目创建 `.sillyspec/projects/<name>.yaml`:
58
+ ```yaml
59
+ name: <name>
60
+ path: <relative-path>
61
+ status: active
62
+ ```
63
+ > ⚠️ `sillyspec init` 只会写入 `name`、`path`、`status` 三个字段。
64
+ > `role` 和 `repo` 由 `/sillyspec:workspace add` 追加。
65
+ 5. 创建 `.sillyspec/shared/` 目录
66
+
67
+ #### 3b. 添加子项目(`add`)
68
+
69
+ 1. 询问名称、路径、角色
70
+ 2. 验证路径存在
71
+ 3. 创建/更新 `.sillyspec/projects/<name>.yaml`
72
+ 4. Git 提交
73
+
74
+ #### 3c. 移除子项目(`remove`)
75
+
76
+ 1. 显示当前所有子项目列表
77
+ 2. 询问要移除哪个:
78
+ > 1. (列出子项目名称)
79
+ > 2. 取消
80
+ 3. 删除 `.sillyspec/projects/<name>.yaml`
81
+ 4. Git 提交
82
+
83
+ #### 3d. 工作区状态(`status`,默认)
84
+
85
+ 读取所有 `projects/*.yaml`,对每个子项目检查:
86
+
87
+ ```bash
88
+ # 读取子项目列表
89
+ for f in .sillyspec/projects/*.yaml; do
90
+ [ -f "$f" ] || continue
91
+ proj_name=$(basename "$f" .yaml)
92
+ proj_path=$(grep '^path:' "$f" | head -1 | sed 's/^path:[[:space:]]*//')
93
+ proj_role=$(grep '^role:' "$f" | head -1 | sed 's/^role:[[:space:]]*//')
94
+ # 检查子项目状态
95
+ cd "$proj_path"
96
+ ls .sillyspec/ 2>/dev/null
97
+ cat .sillyspec/PROJECT.md 2>/dev/null
98
+ ls .sillyspec/docs/${proj_name}/scan/ 2>/dev/null | wc -l
99
+ cd -
100
+ done
101
+ ```
102
+
103
+ 输出格式:
104
+
105
+ ```
106
+ 🏢 工作区:<workspace-name>
107
+
108
+ 📦 子项目(N 个):
109
+ ✅ frontend ./frontend 前端 - Vue3 + TypeScript 已扫描(7 份文档)
110
+ ⚠️ backend ./backend 后端 - Node.js 已初始化(未扫描)
111
+ ❌ miniprogram ./miniprogram 小程序 - Taro 未初始化
112
+
113
+ 📄 共享规范:2 份
114
+ - api-contract.md
115
+ - data-models.md
116
+
117
+ 💡 操作:
118
+ /sillyspec:workspace add — 添加子项目
119
+ /sillyspec:workspace remove — 移除子项目
120
+ /sillyspec:init — 初始化子项目
121
+ /sillyspec:scan — 扫描子项目
122
+ ```
123
+
124
+ #### 3e. 子项目详情(`info <name>`)
125
+
126
+ 显示指定子项目的详细信息,包括 PROJECT.md、REQUIREMENTS.md 内容摘要、扫描文档列表。
127
+
128
+ ### Step 4: projects/*.yaml 格式
129
+
130
+ 每个子项目对应 `.sillyspec/projects/<name>.yaml`:
131
+
132
+ **sillyspec init 创建的格式(3 字段):**
133
+ ```yaml
134
+ name: frontend
135
+ path: ./frontend
136
+ status: active
137
+ ```
138
+
139
+ **workspace add 扩展的格式(最多 5 字段):**
140
+ ```yaml
141
+ name: frontend
142
+ path: ./frontend
143
+ status: active
144
+ role: 前端 - Vue3 + TypeScript
145
+ repo: https://github.com/xxx/frontend.git # 可选
146
+ ```
147
+
148
+ ### 最后说:
149
+
150
+ > 工作区已更新。
151
+ > 下一步:对子项目运行 `/sillyspec:init` 或 `/sillyspec:scan`。
152
+
153
+ ## 绝对规则
154
+ - 不修改子项目目录下的任何文件
155
+ - projects/*.yaml 必须是合法 YAML
156
+ - 子项目路径必须是相对于工作区根目录的相对路径
157
+ - 路径必须验证存在性
@@ -0,0 +1,13 @@
1
+ #!/bin/sh
2
+ echo "🔧 pre-push: running lint + test..."
3
+ npm run lint --silent 2>&1
4
+ if [ $? -ne 0 ]; then
5
+ echo "❌ pre-push: lint failed, aborting push"
6
+ exit 1
7
+ fi
8
+ npm test --silent 2>&1
9
+ if [ $? -ne 0 ]; then
10
+ echo "❌ pre-push: test failed, aborting push"
11
+ exit 1
12
+ fi
13
+ echo "✅ pre-push: lint + test passed"
package/CLAUDE.md ADDED
@@ -0,0 +1,18 @@
1
+ # Claude Code 指引
2
+
3
+ ## 文件生命周期文档同步
4
+ 每次修改 `src/stages/` 下的阶段定义(prompt、步骤、输出文件名等)或 `src/run.js`、`src/progress.js` 等影响文件生命周期的代码后,**必须同步更新** `docs/sillyspec/file-lifecycle.md`,确保文档与代码一致。
5
+
6
+ ### 触发更新的典型改动
7
+ - 新增/删除/重命名阶段步骤
8
+ - 修改步骤 prompt 中的输出文件名(如 verify-result.md)
9
+ - 修改阶段间的流转逻辑(如 archive 归档方式)
10
+ - 新增/删除运行时文件类型(如 gate-status.json)
11
+ - 修改 ProgressManager 的数据存储方式(如 SQLite 表结构变更)
12
+
13
+ ### 更新检查清单
14
+ - [ ] 文件名引用一致(prompt 输出的文件名 == validateFileLocations 期望的文件名)
15
+ - [ ] 阶段步骤描述与 `src/stages/*.js` 一致
16
+ - [ ] 归档/清理流程描述与实际代码逻辑一致
17
+ - [ ] 数据库 Schema 描述与 `src/db.js` 一致
18
+ - [ ] 更新文档头部 `updated_at` 时间戳