sillyspec 3.27.1 → 3.27.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.
- package/.claude/skills/sillyspec-execute/SKILL.md +8 -0
- package/.claude/skills/sillyspec-quick/SKILL.md +2 -1
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-archive/SKILL.md +87 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-auto/SKILL.md +93 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-brainstorm/SKILL.md +114 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-commit/SKILL.md +67 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-continue/SKILL.md +47 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-doctor/SKILL.md +76 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-execute/SKILL.md +214 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-explore/SKILL.md +102 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-export/SKILL.md +57 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-init/SKILL.md +177 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-knowledge/SKILL.md +270 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-plan/SKILL.md +156 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-quick/SKILL.md +116 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-resume/SKILL.md +70 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-scan/SKILL.md +79 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-state/SKILL.md +64 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-status/SKILL.md +54 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-verify/SKILL.md +87 -0
- package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-workspace/SKILL.md +175 -0
- package/.claude/worktrees/sillyspec-data-model-research/.gitattributes +2 -0
- package/.claude/worktrees/sillyspec-data-model-research/.husky/pre-push +20 -0
- package/.claude/worktrees/sillyspec-data-model-research/README.md +203 -0
- package/.claude/worktrees/sillyspec-data-model-research/SKILL.md +91 -0
- package/.claude/worktrees/sillyspec-data-model-research/bin/sillyspec.js +2 -0
- package/.claude/worktrees/sillyspec-data-model-research/logo.jpg +0 -0
- package/.claude/worktrees/sillyspec-data-model-research/package-lock.json +977 -0
- package/.claude/worktrees/sillyspec-data-model-research/package.json +39 -0
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/dist/assets/index-Bq_Z2hne.js +7446 -0
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/dist/assets/index-O2W5RV4z.css +1 -0
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/dist/favicon.jpg +0 -0
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/dist/index.html +16 -0
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/dist/logo.jpg +0 -0
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/dist/prototype-dashboard.html +836 -0
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/dist/prototype-overview.html +256 -0
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/package.json +25 -0
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/server/executor.js +95 -0
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/server/index.js +679 -0
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/server/parser.js +526 -0
- package/.claude/worktrees/sillyspec-data-model-research/packages/dashboard/server/watcher.js +357 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/agent-session-log.js +803 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/change-list.js +290 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/change-risk-profile.js +270 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/check-primitives.js +65 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/classify-change.js +109 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/commit-suggest.js +202 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/config-cat.js +88 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/config-schema.js +328 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/constants.js +97 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/contract-matrix.js +480 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/datetime.js +20 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/db-engine.js +55 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/db.js +381 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/decision-distill.js +517 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/dispatch/backends/local-agent.js +155 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/dispatch/backends/sillyhub-mcp.js +245 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/dispatch/probe.js +246 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/dispatch/strategy.js +121 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/docs-check.js +825 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/docs-debt.js +393 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/docs-gate.js +107 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/doctor-diagnostics.js +1099 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/endpoint-extractor.js +420 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/foreign-declared.js +78 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/fs-atomic.js +73 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/git-helper.js +150 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/hooks/claude-pre-tool-use.cjs +130 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/hooks/worktree-guard.js +892 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/index.js +2798 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/init.js +626 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/knowledge-match.js +231 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/local-detect.js +128 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/local-register.js +104 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/machine-interface.js +543 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/migrate.js +127 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/module-impact.js +166 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/module-resolve.js +222 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/modules.js +580 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/progress/change-registry.js +336 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/progress/consistency-doctor.js +355 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/progress/shared.js +36 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/progress/stage-machine.js +594 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/progress/step-store.js +265 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/progress.js +1304 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/quick-recommend.js +115 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/quicklog.js +852 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/review-tier.js +77 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/run/command.js +1595 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/run/complete-handlers.js +1552 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/run/complete.js +1259 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/run/concurrent-detect.js +156 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/run/gates.js +1084 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/run/multi-repo-context.js +208 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/run/next.js +128 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/run/prompt.js +843 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/run/quick-audit.js +186 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/run/scan-profile.js +269 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/run/shared.js +1562 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/run/stage.js +584 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/run.js +23 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/scan-diff.js +388 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/scan-postcheck.js +512 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/scan-staleness.js +95 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/setup.js +414 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/sillyhub-mcp/client.js +597 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/sillyhub-mcp/config.js +62 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/spec-dir-typo.js +50 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/spec-sync.js +358 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stage-contract-engine.js +171 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stage-contract-spec.js +550 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stage-contract.js +889 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stage-review.js +597 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/archive.js +199 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/brainstorm-auto.js +236 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/brainstorm.js +617 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/cmd-existence.js +145 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/doctor.js +540 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/execute.js +1275 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/explore.js +43 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/index.js +29 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/knowledge.js +514 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/plan-postcheck.js +1344 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/plan.js +650 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/quick.js +167 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/scan.js +608 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/status.js +64 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/stages/verify.js +246 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/sync.js +1470 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/task-review.js +1498 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/taskcard.js +210 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/verify-postcheck.js +1718 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/verify-probes.js +277 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/version.js +19 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/workflow.js +600 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/workspace.js +125 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/worktree-apply.js +1446 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/worktree-deps.js +576 -0
- package/.claude/worktrees/sillyspec-data-model-research/src/worktree.js +1715 -0
- package/.claude/worktrees/sillyspec-data-model-research/templates/claude-instruction.md +23 -0
- package/.claude/worktrees/sillyspec-data-model-research/templates/prompts/taskcard-rules.md +28 -0
- package/.claude/worktrees/sillyspec-data-model-research/templates/prompts/testcase-design.md +12 -0
- package/.claude/worktrees/sillyspec-data-model-research/templates/prompts/verify-probes.md +32 -0
- package/.claude/worktrees/sillyspec-data-model-research/templates/workflows/archive-impact.yaml +79 -0
- package/.claude/worktrees/sillyspec-data-model-research/templates/workflows/scan-docs.yaml +132 -0
- package/README.md +1 -1
- package/eval/README.md +86 -0
- package/eval/eval.config.json +28 -0
- package/eval/lib/adapters/cli.mjs +63 -0
- package/eval/lib/adapters/dryrun.mjs +27 -0
- package/eval/lib/config.mjs +82 -0
- package/eval/lib/db.mjs +76 -0
- package/eval/lib/report.mjs +120 -0
- package/eval/lib/runner.mjs +157 -0
- package/eval/lib/tasks.mjs +73 -0
- package/eval/lib/util.mjs +107 -0
- package/eval/lib/workdir.mjs +30 -0
- package/eval/run.mjs +83 -0
- package/eval/tasks/001-slugify/files/package.json +6 -0
- package/eval/tasks/001-slugify/solution/src/slugify.mjs +26 -0
- package/eval/tasks/001-slugify/task.json +6 -0
- package/eval/tasks/001-slugify/verify.mjs +28 -0
- package/eval/tasks/002-each-day/files/package.json +6 -0
- package/eval/tasks/002-each-day/files/src/dates.mjs +4 -0
- package/eval/tasks/002-each-day/solution/src/dates.mjs +30 -0
- package/eval/tasks/002-each-day/task.json +6 -0
- package/eval/tasks/002-each-day/verify.mjs +31 -0
- package/eval/tasks/003-word-report/files/data/notes.txt +5 -0
- package/eval/tasks/003-word-report/files/package.json +6 -0
- package/eval/tasks/003-word-report/solution/bin/report.mjs +36 -0
- package/eval/tasks/003-word-report/task.json +6 -0
- package/eval/tasks/003-word-report/verify.mjs +38 -0
- package/package.json +4 -2
- package/src/agent-session-log.js +803 -0
- package/src/change-list.js +22 -2
- package/src/change-risk-profile.js +83 -14
- package/src/config-schema.js +18 -3
- package/src/contract-matrix.js +153 -8
- package/src/datetime.js +20 -0
- package/src/decision-distill.js +517 -0
- package/src/dispatch/backends/local-agent.js +4 -4
- package/src/docs-check.js +227 -0
- package/src/docs-debt.js +187 -24
- package/src/doctor-diagnostics.js +102 -2
- package/src/foreign-declared.js +78 -0
- package/src/index.js +99 -10
- package/src/init.js +9 -7
- package/src/knowledge-match.js +107 -6
- package/src/local-register.js +7 -1
- package/src/module-resolve.js +12 -1
- package/src/modules.js +2 -1
- package/src/plan-adopt-waves.js +126 -0
- package/src/quicklog.js +61 -7
- package/src/run/command.js +139 -20
- package/src/run/complete-handlers.js +48 -19
- package/src/run/complete.js +43 -3
- package/src/run/gates.js +87 -22
- package/src/run/prompt.js +84 -42
- package/src/run/quick-audit.js +28 -0
- package/src/run/shared.js +176 -11
- package/src/run/stage.js +23 -0
- package/src/run.js +2 -2
- package/src/scan-postcheck.js +30 -17
- package/src/stage-contract-spec.js +2 -1
- package/src/stage-contract.js +68 -4
- package/src/stages/archive.js +53 -12
- package/src/stages/brainstorm-auto.js +7 -0
- package/src/stages/brainstorm.js +11 -0
- package/src/stages/doctor.js +157 -1
- package/src/stages/execute.js +33 -6
- package/src/stages/plan-postcheck.js +79 -18
- package/src/stages/plan.js +4 -0
- package/src/stages/quick.js +6 -1
- package/src/stages/verify.js +31 -14
- package/src/sync.js +94 -2
- package/src/task-review.js +2 -2
- package/src/taskcard-placeholders.js +21 -0
- package/src/taskcard.js +10 -1
- package/src/verify-postcheck.js +315 -13
- package/src/verify-probes.js +46 -4
- package/src/worktree-apply.js +184 -7
- package/src/worktree-deps.js +69 -0
- package/src/worktree.js +201 -58
- package/templates/prompts/taskcard-rules.md +1 -0
package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-execute/SKILL.md
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:execute
|
|
3
|
+
description: 用于按 plan 执行代码实现。适合用户说"开始写代码、执行任务、跑 execute、开干"。按 plan.md 中的 Wave 和 Task 逐步实现,遵循 design.md 和模块文档。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 何时使用
|
|
7
|
+
|
|
8
|
+
- 用户说"开始写代码、执行任务、跑 execute、开干"
|
|
9
|
+
- 按 plan.md 的 Wave 分组和 Task 逐步实现代码
|
|
10
|
+
- 遵循 design.md + 模块文档 + CONVENTIONS.md
|
|
11
|
+
|
|
12
|
+
## 多变更说明
|
|
13
|
+
|
|
14
|
+
项目有多个活跃变更(`.sillyspec/changes/` 下有多个目录)时,所有 `sillyspec run` 命令需加 `--change <变更名>` 指定操作目标;只有一个变更时可省略(CLI 自动检测)。
|
|
15
|
+
|
|
16
|
+
## 步骤生命周期(所有阶段通用)
|
|
17
|
+
|
|
18
|
+
> `sillyspec execute` 是 `sillyspec run execute` 的顶层别名,两者等价。
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
sillyspec run execute # 输出当前步骤 prompt(首次自动创建 worktree)
|
|
22
|
+
sillyspec run execute --done --output "摘要" # 完成当前步骤(--input "用户原话" 记录输入)
|
|
23
|
+
sillyspec run execute --status # 查看阶段进度
|
|
24
|
+
sillyspec run execute --skip # 跳过可选步骤
|
|
25
|
+
sillyspec run execute --reset # 重置阶段(从头开始)
|
|
26
|
+
sillyspec run execute --reopen --from-step N # 重新打开已完成阶段修订(N=序号或名称)
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## 通用参数(所有阶段适用)
|
|
30
|
+
|
|
31
|
+
| 参数 | 说明 |
|
|
32
|
+
|---|---|
|
|
33
|
+
| `--change <名>` | 指定变更名(多活跃变更必填,单变更可省略自动检测) |
|
|
34
|
+
| `--spec-dir <path>` | 指定规范目录(默认 `<项目>/.sillyspec`) |
|
|
35
|
+
| `--non-interactive` | CI/脚本下禁用交互式 prompt |
|
|
36
|
+
| `--skip-approval` | 跳过阶段转换/审批检查(不能跳产物校验 gate——review.json/文档产物硬校验仍在) |
|
|
37
|
+
|
|
38
|
+
## execute 特有:Worktree 隔离
|
|
39
|
+
|
|
40
|
+
- CLI 启动 execute 阶段时**自动创建 git worktree**,AI 不需要手动创建
|
|
41
|
+
- worktree 路径在步骤 prompt 中输出(`worktreePath`),后续子代理的 cwd 必须设为该路径
|
|
42
|
+
- **禁止跳过 worktree 或在主仓库直接写代码**
|
|
43
|
+
- worktree 创建失败时 CLI 报错退出,排查后重试
|
|
44
|
+
- worktree 创建/进入不依赖工作区 git 状态(dirty/未提交文件均可):直接按 CLI 输出的路径操作,无需自行检查 git 状态;`sillyspec worktree apply` 步以命令实际输出为准(apply 会校验 dirty,按输出处理)
|
|
45
|
+
- create 时若检测到 base 落后/分叉 `origin/<默认分支>`,CLI 会醒目报告(⚠️「落后 N 个 commit」+ 对齐命令),**不阻断** execute。看到此报告时评估是否提示用户先对齐 main,但**不要自行 fetch/ff**——对齐是用户/主仓库的显式动作
|
|
46
|
+
|
|
47
|
+
### 依赖门控(depsStatus)
|
|
48
|
+
|
|
49
|
+
`--done` 时 CLI 校验 worktree 的依赖状态(`depsStatus`)。不达标会阻断完成并提示:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# 修复依赖供给
|
|
53
|
+
sillyspec worktree doctor --fix --change <变更名>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`linked / installed / n/a` 放行;`missing / stale / failed / unknown` 阻断。Wave 内所有 task 声明 `no_deps_verify: true` 时可 opt-out。
|
|
57
|
+
|
|
58
|
+
### 符号影响面报告(「加载上下文」步硬门)
|
|
59
|
+
|
|
60
|
+
execute 前缀步「加载上下文」的 `--done` 会硬校验符号影响面报告:
|
|
61
|
+
|
|
62
|
+
- 路径:`{SPEC_ROOT}/changes/<变更名>/symbol-impact.md`(步骤 prompt 中会输出具体路径)。
|
|
63
|
+
- 要求:plan.md 中**每个 task-XX 都要有一行结论**——涉及签名级变更(构造函数参数/接口/DTO/方法签名增删改)就列变更类型 + 受影响调用点 + 是否在任务范围内;无签名级变更也要显式写「无签名级变更」。
|
|
64
|
+
- 🔧 **骨架生成**:`sillyspec symbol-impact --change <变更名>` 从 tasks.md 生成逐 task `<!--TODO-->` 骨架(撞 gate 时 CLI 也会自动落一份),逐行替换为结论即可;**未替换的 TODO 占位会被 gate 拒绝**(骨架不能直接过门)。
|
|
65
|
+
- 文件缺失或未覆盖全部 task → `--done` 被阻断(进度不推进),补全后重跑即可。
|
|
66
|
+
|
|
67
|
+
### Task Review Gate
|
|
68
|
+
|
|
69
|
+
execute 完成时,每个 task 必须有 `review.json` 且 verdict 通过,否则阻断完成。**例外**:task 在 `tasks/task-XX.md` frontmatter 声明 `low_risk: true`(type-only / 机械迁移等低逻辑风险)时,缺 review.json 只发 warning 不阻断。`cannot_verify` 的 task 会写入 `verify-required-evidence.json`,由 verify 阶段消费。
|
|
70
|
+
|
|
71
|
+
#### task 级 review.json 契约(CLI 硬校验)
|
|
72
|
+
|
|
73
|
+
- 路径:`.sillyspec/.runtime/execute-runs/<execute-run-id>/tasks/task-XX/review.json`(目录不存在需先建)。
|
|
74
|
+
- `execute-run-id` 取自**第一次** `--done` prompt 输出(形如 `exec-2026-07-28-112833`),也写在 marker 文件 `.runtime/current-execute-run-id-<变更名>`。多个 run 时 gate 读最新 marker。
|
|
75
|
+
- 字段(`schemaVersion:1`):
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"schemaVersion": 1,
|
|
80
|
+
"task": "task-01",
|
|
81
|
+
"base": "<git-base-commit-hash>",
|
|
82
|
+
"head": "<git-head-commit-hash>",
|
|
83
|
+
"changedFiles": ["src/..."],
|
|
84
|
+
"specVerdict": "pass", // pass | fail | cannot_verify
|
|
85
|
+
"qualityVerdict": "pass", // pass | fail | cannot_verify
|
|
86
|
+
"reviewerNotes": "...",
|
|
87
|
+
"requiredEvidence": [] // cannot_verify 时必须非空
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
- `base` / `head` 必须是**真实 git commit**(`git rev-parse --verify`),否则判伪造并阻断。`changedFiles` 与实际 `git diff base..head` 完全不相交也判伪造。base..head 空 commit diff 但 working-tree 有未提交改动 → 视为有效改动(warning 不阻断)。
|
|
92
|
+
|
|
93
|
+
> 🔧 **mechanics 字段不要手算**:`schemaVersion`/`task`/`base`/`head`/`changedFiles`(/跨仓 `repo`) 全部可由 CLI 从 git + task 卡推导。子代理/你只需写**语义字段**(`specVerdict`/`qualityVerdict`/`reviewerNotes`/`requiredEvidence`),mechanics 字段可以瞎填占位(如 `"base": "TODO"`),写完跑 `sillyspec backfill-reviews --change <变更名> --adopt` 一键重算代填(verdict 原样保留)。gate 拦下 mechanics 错误时也跑同一条命令修复。
|
|
94
|
+
|
|
95
|
+
- 后端 router task 另需产出 API 端点清单:`sillyspec endpoints extract --change <变更名> --task <task-NN>`(CLI 静态扫描 FastAPI/Express/Spring 路由装饰器生成 endpoints.json,verify 探针 5 消费;扫描面默认取 task 卡 allowed_paths ∪ design 清单,也可 `--dir`/`--files` 显式指定)。勿手扫装饰器手写——易漏 endpoint。
|
|
96
|
+
|
|
97
|
+
### Stage Review Gate(execute 末尾的 acceptance review.json)
|
|
98
|
+
|
|
99
|
+
execute 还有**第二道**独立的 stage 级审查:除逐 task review.json 外,整个 execute 阶段完成还需一个 stage 级 `review.json`(在 "完成确认"/acceptance 步骤产出)。CLI `Stage Review Gate` 硬校验其 schema 与 `docHash` 真实性。
|
|
100
|
+
|
|
101
|
+
- 路径:`.sillyspec/.runtime/stage-reviews/execute-review-<stage-review-run-id>/review.json`(目录可能不存在需手建;run-id 由该步 `--done` prompt 输出指定)。marker 文件 `.runtime/current-stage-review-run-id-execute-<变更名>`。
|
|
102
|
+
- **run-id / marker 由 CLI 自动生成注入**(review step prompt 渲染时 echo 完整目录路径 + 写 marker;撞 gate 报缺 review.json 时 gate 也 echo 完整路径 + 写 marker)。直接用 CLI 给的路径写 review.json,**勿手算 run-id(必须 `review-` 前缀)、勿手写 marker**。卡住时用 `sillyspec register-stage-review --change <名> --stage execute` 一步生成。
|
|
103
|
+
- 字段(`schemaVersion:1`,`reviewType=acceptance` —— 区别于 brainstorm/plan 的 `"design"`):
|
|
104
|
+
|
|
105
|
+
```json
|
|
106
|
+
{
|
|
107
|
+
"schemaVersion": 1,
|
|
108
|
+
"reviewType": "acceptance",
|
|
109
|
+
"reviewedFiles": ["changes/<变更名>/design.md", "<可选追加 git diff 涉及的源码>"],
|
|
110
|
+
"docHash": "<sha256(reviewedFiles[0] 文件内容,hex)>",
|
|
111
|
+
"specVerdict": "pass", // pass | fail | cannot_verify
|
|
112
|
+
"qualityVerdict": "pass", // pass | fail | cannot_verify
|
|
113
|
+
"checklist": [ // 扁平数组(非按层嵌套!),逐条对照 design 章节 + FR/NFR/决策核验代码
|
|
114
|
+
{ "item": "FR-01 排序", "result": "pass", "note": "..." } // result: pass | gap | fail
|
|
115
|
+
],
|
|
116
|
+
"requiredEvidence": [], // cannot_verify 时必填非空
|
|
117
|
+
"reviewerNotes": "..."
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
- `docHash` = `sha256(主审查文档内容)`(hex)—— execute 主审查文档是 `design.md`,即 `reviewedFiles[0]`。CLI 会重算 sha256 比对,不符判伪造(fail-closed);找不到主文档也 fail。**docHash 可先占位(如 "TODO")勿手算**——改 design.md 后跑 `sillyspec register-stage-review --change <变更名> --stage execute --refresh-hash` 一键重算代填(verdict 保留;design 改版多阶段联动加 --all);gate 拦 docHash 失配时也用同一条命令修复。
|
|
122
|
+
- `tier=independent` 时必须由独立 QA 子代理产出该 review.json(独立上下文,不共享实现者分析);`tier=self`(变更 ≤3 文件)降级为当前 agent 自审。
|
|
123
|
+
- **审查范围分级**(tier=independent 时省重复消耗):Task Review Gate 已产出 review.json 且 specVerdict/qualityVerdict 双 pass 的 task,QA 子代理只抽查(读 1-2 个核心 diff 文件抽验 reviewerNotes 与实际改动相符);fail/cannot_verify/缺失的 task 全量重审。三项始终必查:跨 task 交界、design.md 整体对照、组装行为(全量测试/构建/启动)——task review 只看单 task diff,覆盖不到这三项。
|
|
124
|
+
- 该 acceptance review 同时覆盖"代码审查"视角,后续代码审查步骤仅需轻量复审。
|
|
125
|
+
|
|
126
|
+
> 运行时 CLI 会把精确 schema 表 + 完整 JSON 示例 + docHash 算法注入到该步 prompt。本段为常驻摘要;以你实际收到的注入版契约为权威逐字模板。
|
|
127
|
+
|
|
128
|
+
## 派发模式(SillyHub MCP,可选)
|
|
129
|
+
|
|
130
|
+
`execute` Wave 内的子代理默认用本机 Agent tool 执行。若消费方配置了 SillyHub MCP(`local.yaml` 的 `mcp` 段写 `mcp.url` / `mcp.token`——可由 `sillyspec platform connect` 同源写入或手填;或环境变量 `SILLYHUB_MCP_URL` / `SILLYHUB_MCP_TOKEN` 作回退),Wave 步骤 prompt 运行时可能注入一段 SillyHub 派发指令——**出现就照其中的指令执行**(创建 mission / dispatch_worker / 轮询结果 / 本机兜底),**没出现就用本机 Agent tool**。未配置 MCP 时完全不注入,行为与无此机制一致。
|
|
131
|
+
|
|
132
|
+
可选:`sillyspec dispatch probe` 查看 SillyHub 是否可用。
|
|
133
|
+
|
|
134
|
+
> 📍 `local.yaml` 恒在 `.sillyspec/local.yaml`——项目根目录**没有**这个文件,别去那里找或新建(hook 会拦)。worktree 内该文件不随 checkout 出现,读配置直接跑 `sillyspec config cat`(自动定位到主仓真实配置);可用键清单见 `sillyspec config schema`。
|
|
135
|
+
|
|
136
|
+
## 跨仓 task(一个 change 改多个仓库)
|
|
137
|
+
|
|
138
|
+
单个 change 的 task 可以分散到主仓 + 多个跨仓仓实现(典型场景:dogfood 自指、monorepo 多包仓、共享库 + 调用方联合改造)。**单仓 change 不需要任何跨仓配置**(所有 task 不写 `repo:` 即走原流程,零回归)。
|
|
139
|
+
|
|
140
|
+
### 跨仓 task 配置(plan 阶段产出,execute 阶段消费)
|
|
141
|
+
|
|
142
|
+
- **task 卡片 `repo:` 字段**:跨仓 task 在 `tasks/task-NN.md` frontmatter 写 `repo: <key>`(缺省='main'=主仓 task,不写即主仓)。
|
|
143
|
+
- **local.yaml `repos:` 段**:跨仓仓路径注册(`main` 不用注册,隐式=当前项目)。**用命令注册,勿手编 YAML**:`sillyspec local register-repo <key> <跨仓仓根路径>`(execute 启动报缺注册时报错文案里就带这条命令)。手写格式参考:
|
|
144
|
+
```yaml
|
|
145
|
+
repos:
|
|
146
|
+
shared-lib: ../shared-lib
|
|
147
|
+
tool-repo: C:/path/to/your/tool-repo
|
|
148
|
+
```
|
|
149
|
+
task 卡 `repo:` 引用的 key 必须在此注册,否则 execute 启动 fail-closed 阻断(跨仓 apply 走错仓=数据所有权事故,配置错误不降级)。
|
|
150
|
+
- **跨仓 task 的 `allowed_paths`**:指**相对跨仓仓根**的路径(非主仓根)。
|
|
151
|
+
|
|
152
|
+
### workdir 切换(execute 派发子代理时)
|
|
153
|
+
|
|
154
|
+
- **主仓 task**:子代理 workdir = 主仓 worktree 路径(CLI 自动创建的隔离 worktree)。
|
|
155
|
+
- **跨仓 task**:子代理 workdir = 跨仓仓根目录(**直接在跨仓仓主干工作区改+commit,不经主仓 worktree、不建分支**)。commit 到跨仓仓主干即落盘。
|
|
156
|
+
- 同一个 Wave 内允许混合主仓 + 跨仓 task。默认每 task 独立子代理(各传各的 workdir,Wave prompt 注入 per-task workdir 表,按表选);同 Wave 内满足**文件正交 / 无契约链 / 组 ≤3** 三个条件的 task 可合并为一个 batch 子代理串行实现——batch 只合并实现,task 审查、review.json 产出与 checkbox 勾选仍归主 agent(子代理返回后逐 task 进行)。
|
|
157
|
+
|
|
158
|
+
### 跨仓 task 的双锡点(CLI 写入,子代理不改)
|
|
159
|
+
|
|
160
|
+
- `base_commit`:CLI 派发跨仓 task 前实时 `git -C <跨仓仓根> rev-parse HEAD` 落盘到 task 卡 frontmatter(锁 base,防同 Wave 多 task 改同跨仓仓时 HEAD 推进致 diff 漂移)。
|
|
161
|
+
- `head_commit`:**同样由 CLI 自动落盘**——execute `--done` 时 CLI 实时 `git -C <跨仓仓根> rev-parse HEAD` 幂等写入 task 卡(已存在不覆盖,你手写的精确锚点优先)。你无需手跑 rev-parse。review.json 的 base/head 无需手算,跑 `sillyspec backfill-reviews --change <变更名> --adopt` 从 task 卡锡点一键代填。
|
|
162
|
+
- review.json 的 `base`/`head` 取这两个锡点(非瞬时 HEAD)。
|
|
163
|
+
|
|
164
|
+
### 跨仓 task 的 review.json
|
|
165
|
+
|
|
166
|
+
- 路径仍写主仓 `.sillyspec/.runtime/execute-runs/<run-id>/tasks/task-XX/review.json`(review 统一存主仓)。
|
|
167
|
+
- 加 `repo: <key>` 字段标该 task 所属仓(缺省='main')。
|
|
168
|
+
- `base`/`head` 是**跨仓仓的 commit**(取 task 卡锡点),CLI 据此在跨仓仓根跑 git 校验。
|
|
169
|
+
|
|
170
|
+
### 跨仓 task apply = no-op
|
|
171
|
+
|
|
172
|
+
跨仓 task 的代码由子代理直接 commit 到跨仓仓主干(commit 即落地),主仓 `worktree apply` 对跨仓 task **不打 patch、不 cleanup**——只校验 `review.head` 是跨仓仓真实 commit。主仓 task 走原 apply 路径不变。
|
|
173
|
+
|
|
174
|
+
## worktree 子命令(execute 相关)
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
sillyspec worktree apply <变更名> # 校验并应用 worktree 变更到主工作区
|
|
178
|
+
sillyspec worktree apply <变更名> --check-only # 只检查不应用
|
|
179
|
+
sillyspec worktree apply <变更名> --skip-overlap # 主仓有并行在途变更时:跳过重叠文件,只应用非重叠子集
|
|
180
|
+
sillyspec worktree assess <变更名> # 风险审计 + 自动 apply
|
|
181
|
+
sillyspec worktree list # 列出所有活跃 worktree
|
|
182
|
+
sillyspec worktree meta <变更名> # 读取 worktree meta.json
|
|
183
|
+
sillyspec worktree cleanup <变更名> # 清理 worktree
|
|
184
|
+
sillyspec worktree doctor [--fix] # 健康检查 + 修复
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**apply 并发要点(多 agent 仓库)**:
|
|
188
|
+
- **主仓互斥锁**:apply / worktree cleanup / 归档收尾共用主仓级互斥锁(`.sillyspec/.runtime/main-repo.lock`,10 分钟 stale)——两会话并发对主仓的写操作会报「主仓互斥锁被占用(持有者: pid=…, change=…, 操作=…)」并退出,等对方完成重试即可;确认持有进程已崩溃时按报错里的路径删锁。等待时长可用 env `SILLYSPEC_MAIN_REPO_LOCK_TIMEOUT_MS` 调短。
|
|
189
|
+
- **`--skip-overlap`**:主仓有与本次变更**同文件**的未提交改动(并行会话在途变更)时,默认整批拦截;带 `--skip-overlap` 则只应用非重叠子集,重叠文件安全留在 worktree(不覆盖主仓在途改动),输出后续指引——主仓提交/stash 后重新 apply 只补剩余文件,或确认放弃后 `cleanup --force`。优先用这条路,别再走 rescue 手动 cp。
|
|
190
|
+
- **`--merge` 冲突保留现场**:--merge 遇真冲突不再直接 abort——主仓保留 merge-in-progress(冲突标记 + MERGE_HEAD),按提示编辑冲突文件 → `git add` → `git commit` 完成合并即可(无需重跑 apply);`git merge --abort` 可放弃。若主仓有未提交改动会被合并覆盖,git 会拒绝启动合并(无现场),按提示先 commit/stash 或改用 `--skip-overlap`。
|
|
191
|
+
- **派生产物基线漂移提示**:apply 输出若警告「N 个变更文件在 worktree 基线后主仓已有新提交」——多 agent 并发仓中并行变更可能已把新内容合入主仓,你 worktree 里生成的产物(api-types/generated 等)是旧基线版本,apply 会覆盖已合入内容;**apply 后必须在新基线重跑一次生成命令**(如 gen:types)再验证。
|
|
192
|
+
- **worktree 目录残留清理**:apply/cleanup 输出若提示「部分清理残留」——Windows 下**勿直接 rm -rf**(会穿透 node_modules junction 删主仓依赖):先 `cmd /c rmdir "<worktree>\node_modules"` 解链(含子模块 junction)再删目录,或跑 `sillyspec worktree doctor --fix`。
|
|
193
|
+
|
|
194
|
+
## 阶段流转
|
|
195
|
+
|
|
196
|
+
```
|
|
197
|
+
plan → execute → verify
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
execute 完成后(所有 Wave/task 完成 + Task Review Gate 通过),运行 `sillyspec run verify --change <变更名>` 验证。
|
|
201
|
+
|
|
202
|
+
### 批量完成(一次 --done 收尾)
|
|
203
|
+
|
|
204
|
+
当 `tasks.md`(任务注册表唯一真相)所有 task checkbox 已勾(agent 按 review gate 手动勾或基于各 task `review.json` pass 由 CLI `autoCheckPlanFromReviews` 自动勾,双路都写 tasks.md、文件锁 `.tasks.md.lock` 串行化)且代码客观核验通过(`checkExecuteCodeEvidence` 非"零变更")时,任一 execute `--done` 会**一次性补完所有剩余 step** 直达阶段完成,不必逐次 +1 推进。日志会打印 `🚀 execute 批量完成` 提示。条件不满足(tasks.md 未全勾 / 代码零变更)时仍按单步推进,要求补 review 后重跑 `--done` 直至满足。
|
|
205
|
+
|
|
206
|
+
## 铁律
|
|
207
|
+
|
|
208
|
+
- **必须用 exec 工具(shell)执行 CLI,不要自己编造流程**
|
|
209
|
+
- 你是执行者不是设计师——按 plan 搬砖,发现 plan 不合理就停下来反馈,不自己改方案
|
|
210
|
+
- 子代理 cwd 必须用 CLI 输出的 worktreePath
|
|
211
|
+
- 完成后立即 `--done`,不跳过
|
|
212
|
+
|
|
213
|
+
## 用户指令
|
|
214
|
+
$ARGUMENTS
|
package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-explore/SKILL.md
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:explore
|
|
3
|
+
description: 用于自由讨论、代码库调研、方案比较、画 ASCII 图、澄清问题、生成 HTML 原型。适合用户说"分析下、讨论下、看看怎么设计、先别写代码、调研一下、画个结构图、帮我再分析下、画个原型、出个原型图、做个 demo 页"。默认只读不修改文件(仅用户明确要求时保存结论或生成原型),不实现功能。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 交互规范
|
|
7
|
+
|
|
8
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。** 不要用编号列表让用户手动输入数字。
|
|
9
|
+
|
|
10
|
+
## 话题
|
|
11
|
+
$ARGUMENTS
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
你现在是 SillySpec 的自由思考伙伴。
|
|
16
|
+
|
|
17
|
+
## 步骤生命周期(所有阶段通用)
|
|
18
|
+
|
|
19
|
+
> `sillyspec explore` 是 `sillyspec run explore` 的顶层别名,两者等价。explore 是 1 步只读阶段。
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
sillyspec run explore # 输出探索模式 prompt
|
|
23
|
+
sillyspec run explore --done --input "<用户话题>" --output "你的摘要" # 结束探索
|
|
24
|
+
sillyspec run explore --status # 查看阶段状态
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 通用参数(所有阶段适用)
|
|
28
|
+
|
|
29
|
+
| 参数 | 说明 |
|
|
30
|
+
|---|---|
|
|
31
|
+
| `--change <名>` | 指定变更名(多活跃变更时) |
|
|
32
|
+
| `--spec-dir <path>` | 指定规范目录(默认 `<项目>/.sillyspec`) |
|
|
33
|
+
|
|
34
|
+
## 这是什么模式
|
|
35
|
+
|
|
36
|
+
**探索模式用于思考,不用于实现。** 你可以读文件、搜代码、调查代码库,但默认不写任何文件(用户明确要求保存结论或生成原型时除外),也绝不写实现代码。如果用户要求实现,提醒他们先退出探索模式。
|
|
37
|
+
|
|
38
|
+
**这不是一个工作流,是一种姿态。** 没有固定步骤、没有必需的输出。你是一个帮助用户思考的伙伴。
|
|
39
|
+
|
|
40
|
+
## 姿态
|
|
41
|
+
|
|
42
|
+
- **好奇,不说教** — 问自然产生的问题,不按脚本走
|
|
43
|
+
- **开放式线程** — 展示多个有趣方向,让用户选择
|
|
44
|
+
- **可视化** — 大量使用 ASCII 图表
|
|
45
|
+
- **自适应** — 追随有趣的线索,随时转向
|
|
46
|
+
- **耐心** — 不急着下结论
|
|
47
|
+
- **务实** — 探索实际代码库,不只纸上谈兵
|
|
48
|
+
|
|
49
|
+
## 你可以做的事
|
|
50
|
+
|
|
51
|
+
**探索问题空间**:问澄清问题、挑战假设、重新定义问题
|
|
52
|
+
|
|
53
|
+
**调查代码库**:映射相关架构、找集成点、识别已有模式、暴露隐藏复杂性
|
|
54
|
+
|
|
55
|
+
**比较选项**:头脑风暴多种方案、建对比表、画权衡分析
|
|
56
|
+
|
|
57
|
+
**画图**:
|
|
58
|
+
```
|
|
59
|
+
┌─────────────────────────────────┐
|
|
60
|
+
│ 用 ASCII 图自由表达 │
|
|
61
|
+
├─────────────────────────────────┤
|
|
62
|
+
│ ┌────────┐ ┌────────┐ │
|
|
63
|
+
│ │ State │──────▶│ State │ │
|
|
64
|
+
│ │ A │ │ B │ │
|
|
65
|
+
│ └────────┘ └────────┘ │
|
|
66
|
+
└─────────────────────────────────┘
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**生成 HTML 原型**(仅用户明确要求时):讨论 UI/交互方案时,用户说"画个原型、出个原型图、做个 demo 页"才动手,平时最多提议。生成要求与 brainstorm 阶段原型对齐:
|
|
70
|
+
- 单文件 HTML(内联 CSS + JS),浏览器直接打开
|
|
71
|
+
- 高保真呈现讨论中的布局/组件/交互流程,风格对齐项目现有界面(先读 scan 文档与前端代码)
|
|
72
|
+
- 保存到 `.sillyspec/explore/prototype-<名称>.html`(用户指定其他位置则从其指定)
|
|
73
|
+
- 探索原型是讨论工具、不是交付物,也不是实现代码;后续进入 brainstorm 时可复制到变更目录复用
|
|
74
|
+
|
|
75
|
+
**暴露风险**:识别可能出错的地方、发现理解空白
|
|
76
|
+
|
|
77
|
+
## OpenSpec 上下文感知
|
|
78
|
+
|
|
79
|
+
### 检查已有上下文
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
ls .sillyspec/changes/ 2>/dev/null | grep -v archive # 进行中的变更
|
|
83
|
+
cat .sillyspec/REQUIREMENTS.md 2>/dev/null
|
|
84
|
+
cat .sillyspec/ROADMAP.md 2>/dev/null
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### 当有进行中的变更时
|
|
88
|
+
|
|
89
|
+
读取变更的 proposal、design、tasks,自然地引用它们。发现重要决策时**提议保存**(不自动保存)。
|
|
90
|
+
|
|
91
|
+
## 没有必需的结束
|
|
92
|
+
|
|
93
|
+
探索可以:创建变更提案 → 流入 proposal / 产出文档更新 / 继续探索 / 结束探索。
|
|
94
|
+
|
|
95
|
+
## 禁止事项
|
|
96
|
+
|
|
97
|
+
- ❌ 写实现代码
|
|
98
|
+
- ❌ 安装依赖
|
|
99
|
+
- ❌ 修改任何文件(除非用户明确要求保存发现或生成原型)
|
|
100
|
+
- ❌ 主动生成原型(必须用户明确要求;最多提议)
|
|
101
|
+
- ❌ 强行下结论
|
|
102
|
+
- ❌ 强行结构化(让模式自然涌现)
|
package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-export/SKILL.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:export
|
|
3
|
+
description: 导出成功方案为可复用模板
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## CLI 边界(重要)
|
|
9
|
+
|
|
10
|
+
sillyspec CLI **没有 `export` 顶层命令**。本 skill 通过直接复制变更文件到 `~/.sillyspec/templates/<change-name>/` 生成可复用模板,是纯文件操作。**不要编造 `sillyspec export ...` 子命令。**
|
|
11
|
+
|
|
12
|
+
你现在是 SillySpec 的模板导出器。
|
|
13
|
+
|
|
14
|
+
## 参数解析
|
|
15
|
+
|
|
16
|
+
解析 `$ARGUMENTS`:
|
|
17
|
+
- 第一个参数为变更名(如 `user-auth`)
|
|
18
|
+
- `--to` 指定输出路径(默认 `~/.sillyspec/templates/<change-name>/`)
|
|
19
|
+
|
|
20
|
+
## 流程
|
|
21
|
+
|
|
22
|
+
### 1. 读取变更文件
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
CHANGE_DIR=".sillyspec/changes/$ARGUMENTS"
|
|
26
|
+
cat "$CHANGE_DIR/proposal.md"
|
|
27
|
+
cat "$CHANGE_DIR/design.md"
|
|
28
|
+
cat "$CHANGE_DIR/specs/requirements.md" 2>/dev/null
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
如果变更不存在 → 告诉用户"变更不存在,请确认变更名"
|
|
32
|
+
|
|
33
|
+
### 2. 清理为通用模板
|
|
34
|
+
|
|
35
|
+
读取文件后,进行清理:
|
|
36
|
+
- 移除项目特定的信息(具体类名、路径、端口号)
|
|
37
|
+
- 保留通用的设计方案、架构决策、需求场景
|
|
38
|
+
- 添加一个 `notes.md`,记录使用建议和适配要点
|
|
39
|
+
|
|
40
|
+
### 3. 导出到模板目录
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
mkdir -p ~/.sillyspec/templates/<change-name>
|
|
44
|
+
cp 清理后的文件到该目录
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 4. 确认
|
|
48
|
+
|
|
49
|
+
展示导出内容摘要,告知模板路径。
|
|
50
|
+
|
|
51
|
+
### 最后说:
|
|
52
|
+
|
|
53
|
+
> ✅ 方案已导出到 `~/.sillyspec/templates/<change-name>/`
|
|
54
|
+
>
|
|
55
|
+
> 其他项目使用:`/sillyspec:brainstorm "你的想法"` → AI 会自动发现并建议复用此模板
|
|
56
|
+
>
|
|
57
|
+
> 手动查看:`ls ~/.sillyspec/templates/<change-name>/`
|
package/.claude/worktrees/sillyspec-data-model-research/.claude/skills/sillyspec-init/SKILL.md
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sillyspec:init
|
|
3
|
+
description: 绿地项目初始化 — 深度提问、调研、需求文档、路线图
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## 交互规范
|
|
7
|
+
|
|
8
|
+
**当需要用户从多个选项中做出选择时,必须使用 Claude Code 内置的 AskUserQuestion 工具,将选项以参数传入。**
|
|
9
|
+
|
|
10
|
+
不要用编号列表让用户手动输入数字。
|
|
11
|
+
如果需要自由输入,在 AskUserQuestion 的选项中加入"Other(自定义输入)"。
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 两个 init 的区别(重要)
|
|
16
|
+
|
|
17
|
+
- **`sillyspec init`(CLI 命令)** — 安装命令模板/MCP 工具到项目(零交互,自动检测工具)。用法:`sillyspec init [--tool <名>] [--interactive] [--dir <path>] [--spec-dir <path>]`
|
|
18
|
+
- **`/sillyspec:init`(本 skill)** — 绿地项目的需求文档生成流程(深度提问 → REQUIREMENTS.md → ROADMAP.md → PROJECT.md),不写代码、不装依赖
|
|
19
|
+
|
|
20
|
+
两者用途不同、不冲突:可先用本 skill 搞清需求,再用 CLI `sillyspec init` 装工具。
|
|
21
|
+
|
|
22
|
+
你现在是 SillySpec 的项目初始化器。
|
|
23
|
+
|
|
24
|
+
## 用户输入
|
|
25
|
+
$ARGUMENTS
|
|
26
|
+
|
|
27
|
+
## 核心流程
|
|
28
|
+
|
|
29
|
+
这是一个从零开始创建新项目的完整流程。你的目标是:**在开始写任何代码之前,把需求彻底搞清楚。**
|
|
30
|
+
|
|
31
|
+
### Step 1: 检查工作区模式
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
ls .sillyspec/projects/*.yaml 2>/dev/null | grep -q .
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
如果 projects/ 目录存在且包含 .yaml 文件 → 工作区模式:
|
|
38
|
+
1. 列出所有子项目(读取 projects/*.yaml):
|
|
39
|
+
检测到工作区模式,请选择要初始化的子项目:
|
|
40
|
+
> 1. frontend — 前端 - Vue3 + TypeScript
|
|
41
|
+
> 2. backend — 后端 - Node.js + PostgreSQL
|
|
42
|
+
> 3. 新建子项目(先运行 /sillyspec:workspace add)
|
|
43
|
+
2. 用户选择后,**切换到该子项目目录**执行后续所有步骤
|
|
44
|
+
3. 后续步骤中的所有文件路径相对于子项目目录
|
|
45
|
+
|
|
46
|
+
否则 → 单项目模式,继续。
|
|
47
|
+
|
|
48
|
+
### Step 2: 检查项目状态
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
ls -la
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
如果目录已经有代码/配置文件 → 提示用 `/sillyspec:scan` 代替。
|
|
55
|
+
如果是空目录 → 继续。
|
|
56
|
+
|
|
57
|
+
### Step 3: 深度提问
|
|
58
|
+
|
|
59
|
+
**一次只问一个问题**,按以下顺序探索:
|
|
60
|
+
|
|
61
|
+
1. **项目本质** — 这个项目要解决什么问题?给谁用?
|
|
62
|
+
2. **核心功能** — 用户能做的最重要的事情是什么?
|
|
63
|
+
3. **技术偏好** — 有偏好的语言/框架吗?还是让我建议?
|
|
64
|
+
4. **非功能需求** — 性能要求?安全要求?离线支持?多语言?
|
|
65
|
+
5. **设计偏好** — 有参考产品吗?喜欢什么风格?
|
|
66
|
+
6. **约束** — 预算?时间?团队规模?
|
|
67
|
+
7. **不在范围内** — 明确什么不做
|
|
68
|
+
|
|
69
|
+
### Step 4: 技术选型(如需要)
|
|
70
|
+
|
|
71
|
+
如果用户没有明确偏好,基于项目需求推荐 2-3 套技术栈,列出优劣:
|
|
72
|
+
- 语言 + 框架 + 数据库 + 部署方案
|
|
73
|
+
- 给出推荐和理由
|
|
74
|
+
|
|
75
|
+
### Step 5: 可选调研
|
|
76
|
+
|
|
77
|
+
如果用户同意,对关键技术选型做快速调研:
|
|
78
|
+
- 选定框架的当前版本和生态状态
|
|
79
|
+
- 已知的坑和替代方案
|
|
80
|
+
- 依赖的第三方服务的稳定性
|
|
81
|
+
|
|
82
|
+
### Step 6: 生成需求文档
|
|
83
|
+
|
|
84
|
+
保存到 `.sillyspec/REQUIREMENTS.md`:
|
|
85
|
+
|
|
86
|
+
```markdown
|
|
87
|
+
# 需求文档
|
|
88
|
+
|
|
89
|
+
## 项目概述
|
|
90
|
+
[一句话描述]
|
|
91
|
+
|
|
92
|
+
## 目标用户
|
|
93
|
+
[谁在用、在什么场景下用]
|
|
94
|
+
|
|
95
|
+
## 功能需求
|
|
96
|
+
### P0 — 必须有
|
|
97
|
+
- [ ] 需求 1
|
|
98
|
+
- [ ] 需求 2
|
|
99
|
+
|
|
100
|
+
### P1 — 应该有
|
|
101
|
+
- [ ] 需求 3
|
|
102
|
+
|
|
103
|
+
### P2 — 有了更好
|
|
104
|
+
- [ ] 需求 4
|
|
105
|
+
|
|
106
|
+
## 非功能需求
|
|
107
|
+
- 性能:xxx
|
|
108
|
+
- 安全:xxx
|
|
109
|
+
- 部署:xxx
|
|
110
|
+
|
|
111
|
+
## 不在范围内
|
|
112
|
+
- xxx
|
|
113
|
+
- xxx
|
|
114
|
+
|
|
115
|
+
## 技术选型
|
|
116
|
+
| 层 | 选择 | 理由 |
|
|
117
|
+
|---|---|---|
|
|
118
|
+
| 前端 | React + TypeScript | xxx |
|
|
119
|
+
| 后端 | xxx | xxx |
|
|
120
|
+
| 数据库 | xxx | xxx |
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Step 7: 生成路线图:
|
|
124
|
+
|
|
125
|
+
```markdown
|
|
126
|
+
# 项目路线图
|
|
127
|
+
|
|
128
|
+
## Phase 1: 基础骨架
|
|
129
|
+
- 目标:可运行的最小版本
|
|
130
|
+
- 交付物:项目结构 + 基础配置 + 首个可运行页面/接口
|
|
131
|
+
|
|
132
|
+
## Phase 2: 核心功能
|
|
133
|
+
- 目标:P0 功能全部可用
|
|
134
|
+
- 交付物:xxx
|
|
135
|
+
|
|
136
|
+
## Phase 3: 完善
|
|
137
|
+
- 目标:P1 + 测试 + 打磨
|
|
138
|
+
- 交付物:xxx
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Step 8: 生成 PROJECT.md
|
|
142
|
+
|
|
143
|
+
保存到 `.sillyspec/PROJECT.md`:
|
|
144
|
+
|
|
145
|
+
```markdown
|
|
146
|
+
# PROJECT.md
|
|
147
|
+
|
|
148
|
+
## 项目名:xxx
|
|
149
|
+
## 一句话:xxx
|
|
150
|
+
## 状态:已初始化,等待规划
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Step 9: Git 初始化
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
git init
|
|
157
|
+
git add .
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
### 最后说:
|
|
161
|
+
|
|
162
|
+
> ✅ 项目初始化完成!
|
|
163
|
+
>
|
|
164
|
+
> 生成文件:
|
|
165
|
+
> - `.sillyspec/PROJECT.md` — 项目概述
|
|
166
|
+
> - `.sillyspec/REQUIREMENTS.md` — 需求文档
|
|
167
|
+
> - `.sillyspec/ROADMAP.md` — 路线图
|
|
168
|
+
>
|
|
169
|
+
> 下一步:
|
|
170
|
+
> - 开始第一个功能:`/sillyspec:brainstorm "Phase 1: xxx"`
|
|
171
|
+
> - 或修改需求:直接告诉我改什么
|
|
172
|
+
|
|
173
|
+
## 绝对规则
|
|
174
|
+
- 不写任何实现代码
|
|
175
|
+
- 不安装任何依赖
|
|
176
|
+
- 提问阶段一次一个问题
|
|
177
|
+
- 需求必须具体,不能模糊(❌"好用" → ✅"首屏加载 < 2 秒")
|