create-specfuse 0.11.0 → 0.13.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.
- package/README.md +79 -49
- package/dist/scaffolder.d.ts.map +1 -1
- package/dist/scaffolder.js +11 -0
- package/dist/scaffolder.js.map +1 -1
- package/dist/templates/claude-md.d.ts +2 -1
- package/dist/templates/claude-md.d.ts.map +1 -1
- package/dist/templates/claude-md.js +43 -29
- package/dist/templates/claude-md.js.map +1 -1
- package/dist/templates/fuseqa-skill.d.ts.map +1 -1
- package/dist/templates/fuseqa-skill.js +9 -7
- package/dist/templates/fuseqa-skill.js.map +1 -1
- package/dist/templates/fusereview-skill.js +2 -2
- package/dist/templates/specfuse-command.d.ts +11 -0
- package/dist/templates/specfuse-command.d.ts.map +1 -0
- package/dist/templates/specfuse-command.js +79 -0
- package/dist/templates/specfuse-command.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 把 AI 编码从即兴发挥,改造成工程流水线。
|
|
4
4
|
|
|
5
|
-
SpecFuse 不发明新工具。它把 OpenSpec(流程引擎)和 Superpowers(行为约束)编排成一条 **Think → Do → FuseReview →
|
|
5
|
+
SpecFuse 不发明新工具。它把 OpenSpec(流程引擎)和 Superpowers(行为约束)编排成一条 **Think → Do → FuseReview → Verify** 四拍流水线,一条命令注入任何项目——它不产生新能力,它约束产出可靠性。端到端 QA 是独立的按需技能,不属于流水线。
|
|
6
6
|
|
|
7
7
|
## 快速开始
|
|
8
8
|
|
|
@@ -19,42 +19,34 @@ npm install -g @fission-ai/openspec # 流程引擎;装好后自动注册 /o
|
|
|
19
19
|
/plugins add obra/superpowers # 行为约束插件(在 Claude Code 内执行)
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
装完即可在项目里启动 `claude`,用 `/opsx:propose` 开始第一个变更。
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
## 生成物
|
|
25
25
|
|
|
26
26
|
```
|
|
27
27
|
my-app/
|
|
28
|
-
├── CLAUDE.md
|
|
29
|
-
├── .gitignore
|
|
28
|
+
├── CLAUDE.md # 流水线调度协议(四拍规则全文)
|
|
29
|
+
├── .gitignore # 共享忽略规则
|
|
30
30
|
├── .claude/
|
|
31
|
-
│ ├── settings.local.json
|
|
31
|
+
│ ├── settings.local.json # 权限白名单
|
|
32
|
+
│ ├── commands/
|
|
33
|
+
│ │ ├── opsx/ # OpenSpec 提供:/opsx:* 命令面
|
|
34
|
+
│ │ └── specfuse.md # SpecFuse 提供:全自动入口
|
|
32
35
|
│ └── skills/
|
|
33
|
-
│ ├── design-md/
|
|
34
|
-
│ ├── fusedoc/
|
|
35
|
-
│ ├── fusereview/
|
|
36
|
-
│
|
|
36
|
+
│ ├── design-md/ # 设计令牌生成技能(含 16 个原型模板)
|
|
37
|
+
│ ├── fusedoc/ # 文档标准技能(含 3 份参考文件)
|
|
38
|
+
│ ├── fusereview/ # 实施后代码评审技能
|
|
39
|
+
│ ├── fuseqa/ # 按需端到端验收技能(含 4 份模板;不属于流水线)
|
|
40
|
+
│ └── openspec-*/ # OpenSpec 提供:随其 init 生成
|
|
37
41
|
└── openspec/
|
|
38
|
-
├── config.yaml
|
|
39
|
-
├── specs/
|
|
40
|
-
└── changes/archive/
|
|
42
|
+
├── config.yaml # spec 规则(流程约束)
|
|
43
|
+
├── specs/ # 主规格
|
|
44
|
+
└── changes/archive/ # 变更档案
|
|
41
45
|
```
|
|
42
46
|
|
|
43
|
-
项目目录会自动加入 Claude Code
|
|
44
|
-
|
|
45
|
-
### Design Tokens(前端项目)
|
|
46
|
-
|
|
47
|
-
涉 UI/前端的项目,Think 阶段会触发 `/design-md` 技能生成 `DESIGN-TOKENS.md`,定义色彩、字体、间距、圆角等设计变量。也可手动 `/design-md` 为已有项目生成。
|
|
48
|
-
|
|
49
|
-
### FuseDoc(文档标准,不是拍)
|
|
50
|
-
|
|
51
|
-
`/fusedoc` 是贯穿全链路的文档标准,**不属于五拍中的任何一拍**:无检查点、无强制提问、不进 apply 收尾序列,由产出散文的各阶段按需调用。它管三件事——一段话必须说什么、读起来是从仓库出发还是从写作会话出发、一个事实该放在哪一层。
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
/fusedoc <scope> # scope 必填;不填则报缺输入并停止,不推断全仓库范围
|
|
55
|
-
```
|
|
47
|
+
项目目录会自动加入 Claude Code 信任列表。`commands/opsx/` 与 `openspec-*` 由 OpenSpec 自己的 `init` 产生,随其版本更新;`commands/specfuse.md` 与四个技能由 SpecFuse 写入,已存在则不覆盖;`CLAUDE.md` 按 FUSION 标记合并(见下文)。
|
|
56
48
|
|
|
57
|
-
##
|
|
49
|
+
## 四个阶段
|
|
58
50
|
|
|
59
51
|
在项目中启动 Claude Code,按这套节奏开发:
|
|
60
52
|
|
|
@@ -62,10 +54,21 @@ my-app/
|
|
|
62
54
|
Think /opsx:new 或 /opsx:propose —— 方案设计与制品生成
|
|
63
55
|
Do /opsx:apply —— TDD 实施
|
|
64
56
|
FuseReview apply 收尾检查点 —— 冷读评审
|
|
65
|
-
FuseQA apply 收尾检查点 —— 真实入口端到端验收
|
|
66
57
|
Verify /opsx:verify → /opsx:archive —— 全量验收与归档
|
|
67
58
|
```
|
|
68
59
|
|
|
60
|
+
FuseQA 不在其中:它是按需技能,只有显式调用 `/fuseqa` 才执行。
|
|
61
|
+
|
|
62
|
+
### 无人值守:`/specfuse`
|
|
63
|
+
|
|
64
|
+
需求已经明确、不想逐拍确认时,用一条命令跑完整条流水线:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
/specfuse <需求描述>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
brainstorm、`/design-md` 问卷、模型切换与收尾检查点都由模型按推荐答案自答,并记录在最终报告中:模型切换默认不切换,FuseReview 自动进入,FuseQA 不进入,verify 全部通过后 archive,全程不 commit、不 push。verify 仍失败时不 archive,保留变更目录并把失败写进报告。默认的 `/opsx:*` 交互行为不受影响。
|
|
71
|
+
|
|
69
72
|
### Think
|
|
70
73
|
|
|
71
74
|
- `/opsx:propose`(Path A)一次生成全部制品;`/opsx:new` + `/opsx:continue`(Path B)一次一个制品、逐步确认。
|
|
@@ -80,25 +83,37 @@ Verify /opsx:verify → /opsx:archive —— 全量验收与归档
|
|
|
80
83
|
### FuseReview
|
|
81
84
|
|
|
82
85
|
- apply 完成后必须询问是否评审(禁止静默跳过);呈报任务数、涉及模块等事实,由你决定是否执行。
|
|
83
|
-
-
|
|
86
|
+
- 评审者不参与实现,以冷读方式审查 `基线..HEAD` 的累积 diff,按十一项检查逐条走(测试强度、缺失检测、范围契合、真实入口、接口两侧、生命周期与并发、强制路径、配置选择、能力与消费者契合、借用状态、边界值)。
|
|
84
87
|
- Blocking 发现走 TDD 修复;修复后只复审修复 diff,不进行第二轮全量评审。
|
|
85
88
|
- 跳过评审必须记录在收尾报告中留痕。
|
|
86
89
|
|
|
87
|
-
### FuseQA
|
|
90
|
+
### FuseQA(按需,不属于流水线)
|
|
88
91
|
|
|
89
|
-
- apply
|
|
90
|
-
-
|
|
91
|
-
-
|
|
92
|
-
-
|
|
93
|
-
-
|
|
94
|
-
- 用例是项目资产,新增/修正/剔除都要留理由——剔除尤其,否则「删掉红用例」和「掩盖缺陷」在台账上无从区分。
|
|
95
|
-
- **收尾报告必须同时记录 FuseReview 与 FuseQA 两条决定**,缺一条即 apply 未完成。
|
|
92
|
+
- 只有显式调用 `/fuseqa` 才执行;没有检查点,不进入 apply 收尾,也不影响 verify。
|
|
93
|
+
- 适合能在本地完整部署和验证的小项目:CLI、小型服务、库、本地 Web 应用。
|
|
94
|
+
- 分布式系统在本地复现不了真实拓扑、网络分区与共享状态竞争,应在 CI/CD 中运行等价检查,而不是在开发阶段做本地 QA。
|
|
95
|
+
- 方法仍完整保留:从 specs 的 Scenario 派生用例、真实入口、构建产物而非 `src/`、归因分级、用例台账。
|
|
96
|
+
- 用例落 `tests/e2e/<capability>/`,随全量测试在 verify 阶段回归。
|
|
96
97
|
|
|
97
98
|
### Verify
|
|
98
99
|
|
|
99
100
|
- `/opsx:verify` 逐条对照 specs 验证实现;`/opsx:archive` 前运行全量测试 + lint 零警告,粘贴原始输出。
|
|
100
101
|
- 全量测试**即 E2E 回归门禁**(包含 `tests/e2e/` 下所有用例),不得跳过。
|
|
101
102
|
|
|
103
|
+
## 文档标准:FuseDoc
|
|
104
|
+
|
|
105
|
+
`/fusedoc` 是贯穿全链路的文档标准,**不属于四拍中的任何一拍**:无检查点、无强制提问、不进 apply 收尾序列,由产出散文的各阶段按需调用。
|
|
106
|
+
|
|
107
|
+
它管三件事——一段话必须说什么、读起来是从仓库出发还是从写作会话出发、一个事实该放在哪一层。派上用场的典型场合:写 README 和注释、审计一份文档、判断某个事实该落在决策记录还是使用指南。
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
/fusedoc <scope> # scope 必填;不填则报缺输入并停止,不推断全仓库范围
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## 设计令牌(前端项目)
|
|
114
|
+
|
|
115
|
+
涉 UI/前端的项目,Think 阶段会触发 `/design-md` 生成 `DESIGN-TOKENS.md`,定义色彩、字体、间距、圆角等设计变量。内置 16 个原型模板(SaaS 面板、营销页、后台管理、移动端……),按项目形态匹配。也可手动 `/design-md` 为已有项目生成。
|
|
116
|
+
|
|
102
117
|
## 已有项目:能不动就不动
|
|
103
118
|
|
|
104
119
|
`npm create specfuse@latest .` 的合并策略逐文件保守:
|
|
@@ -106,15 +121,19 @@ Verify /opsx:verify → /opsx:archive —— 全量验收与归档
|
|
|
106
121
|
| 文件 | 行为 |
|
|
107
122
|
|------|------|
|
|
108
123
|
| `CLAUDE.md` | 有 `<!-- FUSION:START/END -->` 标记 → 只替换标记内段落;无标记 → 追加 |
|
|
109
|
-
| `.gitignore` |
|
|
110
|
-
| `.claude/settings.local.json` |
|
|
124
|
+
| `.gitignore` | 追加缺失模式(带 `# Added by specfuse` 分节),不重复 |
|
|
125
|
+
| `.claude/settings.local.json` | 合并 `permissions.allow`,其余键原样透传 |
|
|
111
126
|
| `openspec/config.yaml` | 已存在 → 跳过 |
|
|
127
|
+
| `.claude/skills/*` | 已存在 → 不覆盖 |
|
|
128
|
+
| `.claude/commands/specfuse.md` | 已存在 → 不覆盖 |
|
|
129
|
+
|
|
130
|
+
技能与命令已存在时不会被覆盖。已有项目升级到四拍时,先删除 `.claude/skills/fuseqa/SKILL.md`、`.claude/skills/fusereview/SKILL.md` 和 `.claude/commands/specfuse.md`,再运行 scaffolder:`CLAUDE.md` 的 FUSION 块会被替换,这三个文件会按新模板重写。其它用户自定义技能不受影响。
|
|
112
131
|
|
|
113
132
|
删除 `CLAUDE.md` 里的 FUSION 块,项目即回到无调度状态——整套编排零侵入、可逆。
|
|
114
133
|
|
|
115
|
-
##
|
|
134
|
+
## 与技术栈无关
|
|
116
135
|
|
|
117
|
-
SpecFuse
|
|
136
|
+
SpecFuse 是流程,不是栈选择器。四拍对 Rust、React 或一个裸脚本完全一致,所以初始化时不会问你用什么栈,也不生成栈特化内容:
|
|
118
137
|
|
|
119
138
|
- `CLAUDE.md` 不含 Tech Stack 段落,验证指令写作「项目的测试命令」「项目的 linter」——由项目自己的工具链定义。
|
|
120
139
|
- `.gitignore` 只给 IDE / OS / env / 日志这些共享模式,构建产物模式留给首次提交时判断。
|
|
@@ -128,27 +147,38 @@ SpecFuse 是流程,不是栈选择器。Think → Do → FuseReview → FuseQA
|
|
|
128
147
|
```
|
|
129
148
|
Usage: create-specfuse [options] [project-name]
|
|
130
149
|
|
|
131
|
-
|
|
132
|
-
-
|
|
133
|
-
|
|
134
|
-
|
|
150
|
+
Arguments:
|
|
151
|
+
project-name 目标目录(省略或 "." 表示当前目录就地初始化)
|
|
152
|
+
|
|
153
|
+
Options:
|
|
154
|
+
-y, --yes 非交互模式(全取默认值,CI 友好)
|
|
155
|
+
-V, --version 版本号
|
|
156
|
+
-h, --help 帮助
|
|
135
157
|
```
|
|
136
158
|
|
|
159
|
+
交互模式只问两个问题:是否初始化 git(仅新目录)、是否初始化 OpenSpec。项目名由参数给出,不提问。
|
|
160
|
+
|
|
161
|
+
**失败行为**:OpenSpec 装不上或初始化失败时,脚手架仍以退出码 0 结束,并打印一条指向手动命令的提示——报告失败不等于让脚手架失败。Superpowers 插件缺失时打印安装提示,不中断。
|
|
162
|
+
|
|
137
163
|
## 开发
|
|
138
164
|
|
|
139
165
|
```bash
|
|
140
166
|
npm install
|
|
141
|
-
npm run build
|
|
142
|
-
npm test
|
|
167
|
+
npm run build # tsc + 拷贝模板资产到 dist/
|
|
168
|
+
npm test # vitest run,含 tests/e2e/ 下的端到端用例
|
|
169
|
+
npm run lint # eslint,零告警
|
|
170
|
+
npx tsc --noEmit # 类型检查
|
|
143
171
|
```
|
|
144
172
|
|
|
145
|
-
|
|
173
|
+
生成设计模板预览页面(输出到 `docs/samples/`):
|
|
146
174
|
|
|
147
175
|
```bash
|
|
148
176
|
npm run samples
|
|
149
177
|
```
|
|
150
178
|
|
|
151
|
-
16
|
|
179
|
+
16 个内置模板各生成一个自包含 HTML 页面,展示色彩系统、字体阶梯、间距、圆角和组件预览。打开 `docs/samples/index.html` 查看全部模板。
|
|
180
|
+
|
|
181
|
+
方法论的权威定义在 `openspec/specs/`——每个 capability 一份 spec,描述可观察的行为契约。分发到目标项目的技能模板在 `src/templates/`,静态资产在 `src/<skill>/templates/`。
|
|
152
182
|
|
|
153
183
|
## License
|
|
154
184
|
|
package/dist/scaffolder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../src/scaffolder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../src/scaffolder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAqKhD,wBAAsB,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiOnE"}
|
package/dist/scaffolder.js
CHANGED
|
@@ -11,6 +11,7 @@ import { composeDesignMdSkill } from './templates/design-md-skill.js';
|
|
|
11
11
|
import { composeFuseReviewSkill } from './templates/fusereview-skill.js';
|
|
12
12
|
import { composeFuseQASkill } from './templates/fuseqa-skill.js';
|
|
13
13
|
import { composeFuseDocSkill } from './templates/fusedoc-skill.js';
|
|
14
|
+
import { composeSpecfuseCommand } from './templates/specfuse-command.js';
|
|
14
15
|
import { composeCLAUDEmd } from './templates/claude-md.js';
|
|
15
16
|
import { createDir, writeText, writeJSON, writeYAML } from './utils/fs.js';
|
|
16
17
|
import { gitInit, gitInitialCommit } from './utils/git.js';
|
|
@@ -213,6 +214,15 @@ export async function scaffold(config) {
|
|
|
213
214
|
await createDir(path.join(targetDir, '.claude', 'skills', 'fusedoc'));
|
|
214
215
|
await writeText(fusedocSkillPath, composeFuseDocSkill());
|
|
215
216
|
}
|
|
217
|
+
// /specfuse command
|
|
218
|
+
spinner.text = 'Writing .claude/commands/specfuse.md...';
|
|
219
|
+
const specfuseCommandPath = path.join(targetDir, '.claude', 'commands', 'specfuse.md');
|
|
220
|
+
// Existence, not content: a zero-byte file is still a user-owned file and
|
|
221
|
+
// must survive, exactly like a non-empty one.
|
|
222
|
+
if (!(await fileExists(specfuseCommandPath))) {
|
|
223
|
+
await createDir(path.join(targetDir, '.claude', 'commands'));
|
|
224
|
+
await writeText(specfuseCommandPath, composeSpecfuseCommand());
|
|
225
|
+
}
|
|
216
226
|
// Skill templates
|
|
217
227
|
spinner.text = 'Copying skill templates...';
|
|
218
228
|
await copyTemplateDir(path.join(import.meta.dirname, 'design-md', 'templates'), path.join(targetDir, '.claude', 'skills', 'design-md', 'templates'));
|
|
@@ -283,6 +293,7 @@ export async function scaffold(config) {
|
|
|
283
293
|
console.log(` .gitignore ${chalk.dim(tag('Shared ignore patterns'))}`);
|
|
284
294
|
console.log(` .claude/settings.local.json ${chalk.dim(tag('Permissions'))}`);
|
|
285
295
|
console.log(` .claude/skills/fusedoc/ ${chalk.dim('Documentation standard')}`);
|
|
296
|
+
console.log(` .claude/commands/specfuse.md ${chalk.dim('Unattended pipeline')}`);
|
|
286
297
|
if (config.initOpenspec) {
|
|
287
298
|
console.log(` openspec/config.yaml ${chalk.dim('Spec-driven config')}`);
|
|
288
299
|
}
|
package/dist/scaffolder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../src/scaffolder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../src/scaffolder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import type { TemplateContext } from "../types.js";
|
|
2
2
|
export declare function renderApplyPhase(): string;
|
|
3
3
|
export declare function renderApplyFuseReview(): string;
|
|
4
|
-
export declare function
|
|
4
|
+
export declare function renderFuseQAOnDemand(): string;
|
|
5
5
|
export declare function renderFuseDocStandard(): string;
|
|
6
|
+
export declare function renderAutoMode(): string;
|
|
6
7
|
export declare function renderVerifyPhase(): string;
|
|
7
8
|
export declare function composeCLAUDEmd(_ctx: TemplateContext): string;
|
|
8
9
|
//# sourceMappingURL=claude-md.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAyFnD,wBAAgB,gBAAgB,IAAI,MAAM,CA0DzC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CA2B9C;AAED,wBAAgB,
|
|
1
|
+
{"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAyFnD,wBAAgB,gBAAgB,IAAI,MAAM,CA0DzC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CA2B9C;AAED,wBAAgB,oBAAoB,IAAI,MAAM,CAkB7C;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAY9C;AAED,wBAAgB,cAAc,IAAI,MAAM,CAwBvC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAU1C;AAiBD,wBAAgB,eAAe,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAsC7D"}
|
|
@@ -142,7 +142,7 @@ When \`/opsx:apply\` is invoked:
|
|
|
142
142
|
export function renderApplyFuseReview() {
|
|
143
143
|
return `### Phase 2.5: FuseReview Checkpoint (Post-Apply)
|
|
144
144
|
|
|
145
|
-
FuseReview is the
|
|
145
|
+
FuseReview is the post-apply review: Think reviews direction, Do produces code, **FuseReview reviews the implementation**, Verify validates the whole. The full review method lives in \`.claude/skills/fusereview/SKILL.md\`.
|
|
146
146
|
|
|
147
147
|
**Baseline:** At apply start, record the current HEAD commit in the change's state as the review baseline. The review object is \`baseline..HEAD\`. If no baseline was recorded, fall back to the merge-base of the current branch and the trunk, and annotate the fallback in the report.
|
|
148
148
|
|
|
@@ -163,41 +163,28 @@ FuseReview is the fourth beat: Think reviews direction, Do produces code, **Fuse
|
|
|
163
163
|
|
|
164
164
|
**Merge gate (subagent mode):** in subagent mode the second stage of the two-stage review executes the FuseReview skill on each subagent's diff before merge, automatically, without a user checkpoint.
|
|
165
165
|
|
|
166
|
-
**Declining does not end the apply exit sequence:**
|
|
166
|
+
**Declining does not end the apply exit sequence:** recording the skip is the required trace; Verify follows. The apply exit sequence has one checkpoint, so there is no second decision to answer.
|
|
167
167
|
|
|
168
168
|
**Manual invocation:** the user may invoke the FuseReview skill explicitly at any time, independent of the checkpoint.`;
|
|
169
169
|
}
|
|
170
|
-
export function
|
|
171
|
-
return `###
|
|
170
|
+
export function renderFuseQAOnDemand() {
|
|
171
|
+
return `### On-Demand: FuseQA (E2E Verification)
|
|
172
172
|
|
|
173
|
-
FuseQA is the
|
|
173
|
+
FuseQA verifies the built artifact through real user entry points. It is **not part of the pipeline — not a pipeline beat — and has no checkpoint**: no phase, checkpoint, or auto-mode decision invokes it, and neither apply completion nor entry to Verify depends on a FuseQA decision. Run it explicitly with \`/fuseqa\` when local end-to-end verification is meaningful.
|
|
174
174
|
|
|
175
|
-
**
|
|
175
|
+
**Applicability.** Use it when the artifact can be deployed and exercised locally — a CLI, a small service, a library, a local web app. A distributed system cannot be meaningfully exercised on one machine; run equivalent checks in CI/CD rather than in the development phase.
|
|
176
176
|
|
|
177
|
-
**
|
|
177
|
+
**Scope.** Author E2E cases for the current change's entry-point behavior and handle what those new cases expose. Executing the existing E2E suite belongs to the Verify phase full test run; there is no separate red-diagnosis stage — a new case failing on first run is the TDD RED step, and an existing case turning red is a regression caught by Verify.
|
|
178
178
|
|
|
179
|
-
**
|
|
179
|
+
**Findings are graded by attribution.** Attribute a red case first, then grade it:
|
|
180
|
+
- **Implementation defect → Blocking.** The red case IS the failing test that catches the defect; fix the implementation directly.
|
|
181
|
+
- **Spec gap → Suggestion** by default; escalate to Blocking when the undefined behavior causes user-visible breakage.
|
|
182
|
+
- **False red → case debt**, outside the grading. Fix or remove the case and record why the implementation is correct, with evidence.
|
|
183
|
+
- **Attribution exceeding its time box → Suggestion.** It MUST NOT hold up completion.
|
|
180
184
|
|
|
181
|
-
**
|
|
185
|
+
**Cases are project assets with a recorded lifecycle.** Cases live in \`tests/e2e/<capability>/\`, the capability name matching \`openspec/specs/<capability>/\`. Addition records its source (the spec Scenario or the escaped defect); correction records why the prior judgment was wrong; removal records why the case is no longer valid. Without a reason, "deleting a red case" and "hiding a defect" are indistinguishable in the ledger.
|
|
182
186
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
**Scope — two things only:** author E2E cases for this change's entry-point changes, and handle what those new cases expose.
|
|
186
|
-
- **Regression execution is NOT part of this beat.** Running the existing E2E suite belongs to the Verify phase full test run.
|
|
187
|
-
- **There is no separate red-diagnosis stage.** A new case failing on first run is the TDD RED step; an existing case turning red is a regression the Verify gate catches.
|
|
188
|
-
|
|
189
|
-
**Findings are graded by attribution, not by redness.** A red case carries evidence (it went red) but its cause is undetermined, so attribute first, then grade:
|
|
190
|
-
- **Implementation defect → Blocking.** The red case IS the failing test that catches the defect, so fix the implementation directly. This grade does not bend — it is the entire reason this beat exists.
|
|
191
|
-
- **Spec gap → Suggestion** by default: behavior the spec never defined means the product is not wrong. Escalate to Blocking when the undefined behavior causes user-visible breakage.
|
|
192
|
-
- **False red → case debt, outside the Blocking/Suggestion grading.** Fix or remove the case, and record in the ledger why the implementation is correct, with evidence. Never just "the test was wrong".
|
|
193
|
-
- **Attribution exceeding its time box → downgrade to Suggestion.** It MUST NOT hold up apply completion.
|
|
194
|
-
|
|
195
|
-
**Cases are project assets with a recorded lifecycle.** Cases live in \`tests/e2e/<capability>/\`, the capability name matching \`openspec/specs/<capability>/\`.
|
|
196
|
-
- **Addition** records its source: the spec Scenario it derives from, or the escaped defect it was written for.
|
|
197
|
-
- **Correction** records why the original judgment was wrong.
|
|
198
|
-
- **Removal** records why the case is no longer valid. Without a reason, "deleting a red case" and "hiding a defect" are indistinguishable in the ledger.
|
|
199
|
-
|
|
200
|
-
**Manual invocation:** the user may invoke the FuseQA skill explicitly at any time, independent of the checkpoint.`;
|
|
187
|
+
The full method lives at \`.claude/skills/fuseqa/SKILL.md\`.`;
|
|
201
188
|
}
|
|
202
189
|
export function renderFuseDocStandard() {
|
|
203
190
|
return `### Documentation Standard: FuseDoc
|
|
@@ -212,6 +199,31 @@ The standard lives at \`.claude/skills/fusedoc/SKILL.md\`. It governs three thin
|
|
|
212
199
|
|
|
213
200
|
Scope is required. An invocation naming no scope reports the missing input rather than inferring a repository-wide one.`;
|
|
214
201
|
}
|
|
202
|
+
export function renderAutoMode() {
|
|
203
|
+
return `### Auto Mode: /specfuse
|
|
204
|
+
|
|
205
|
+
\`/specfuse <requirement>\` runs the whole pipeline unattended. It is an entry point alongside Path A and Path B, and the rules below override the checkpoint questions for that invocation only. Interactive \`/opsx:*\` behavior is unchanged.
|
|
206
|
+
|
|
207
|
+
**Automatic decisions.** Do not call \`AskUserQuestion\` for any decision point. The model answers with the recommended option and records the decision with its rationale in the final report:
|
|
208
|
+
- **Brainstorming:** derive 2–3 alternatives with trade-offs, select the recommended one, and write the selection and rationale into \`design.md\`.
|
|
209
|
+
- **Design tokens:** when the three-gate test triggers \`/design-md\`, answer the questionnaire with recommended values; never overwrite an existing \`DESIGN-TOKENS.md\`.
|
|
210
|
+
- **Model switch:** record \`continue with current model\`; do not switch and do not ask.
|
|
211
|
+
- **FuseReview:** record \`auto: entered\` and run the review.
|
|
212
|
+
- **FuseQA:** not part of the pipeline; do not invoke it. It remains available only through an explicit \`/fuseqa\` request.
|
|
213
|
+
- **Path B pace control:** generate all artifacts in one pass; do not stop between artifacts for review.
|
|
214
|
+
|
|
215
|
+
**Execution order.** Brainstorming decisions → proposal → specs → design → tasks → apply under \`test-driven-development\` and \`verification-before-completion\` → FuseReview → verify → archive. The command definition at \`.claude/commands/specfuse.md\` carries the full procedure.
|
|
216
|
+
|
|
217
|
+
**Exit sequence.** Auto mode enters FuseReview. The apply completion report records the FuseReview decision only. FuseQA is not part of the pipeline: it is not invoked and no FuseQA decision is recorded; it remains an explicit \`/fuseqa\` invocation outside the pipeline.
|
|
218
|
+
|
|
219
|
+
**Verify gates archive.** Archive only after \`/opsx:verify\`, the project's full test suite, and the project's linter pass. If any check still fails after best-effort repair, do not archive; keep the change directory and write each failure with its raw output into the final report.
|
|
220
|
+
|
|
221
|
+
**Worktree isolation.** When a worktree trigger condition is met, create and enter the worktree before writing any artifact, so the whole pipeline stays inside it. Never merge it back to the trunk; leave it in place for the user to inspect. If worktree creation fails, continue in the current working tree and record the fallback. Because auto mode does not commit, FuseReview reads the working-tree diff from the baseline, including untracked files. Subagent-driven development is not used under auto mode: its integration step requires a merge.
|
|
222
|
+
|
|
223
|
+
**Prohibitions.** Never run \`git commit\`, \`git push\`, or \`git merge\`. Auto mode does not waive TDD, verification evidence, or the documentation standard.
|
|
224
|
+
|
|
225
|
+
**Interactive rules unchanged.** The model-switch and FuseReview checkpoints in Phase 2 and Phase 2.5 still require their questions for \`/opsx:apply\`. Auto mode removes the question, not the decision record.`;
|
|
226
|
+
}
|
|
215
227
|
export function renderVerifyPhase() {
|
|
216
228
|
return `### Phase 3: Verify / Archive
|
|
217
229
|
|
|
@@ -255,6 +267,8 @@ export function composeCLAUDEmd(_ctx) {
|
|
|
255
267
|
"",
|
|
256
268
|
renderFuseDocStandard(),
|
|
257
269
|
"",
|
|
270
|
+
renderAutoMode(),
|
|
271
|
+
"",
|
|
258
272
|
renderPathA(),
|
|
259
273
|
"",
|
|
260
274
|
renderPathB(),
|
|
@@ -265,10 +279,10 @@ export function composeCLAUDEmd(_ctx) {
|
|
|
265
279
|
"",
|
|
266
280
|
renderApplyFuseReview(),
|
|
267
281
|
"",
|
|
268
|
-
renderFuseQA(),
|
|
269
|
-
"",
|
|
270
282
|
renderVerifyPhase(),
|
|
271
283
|
"",
|
|
284
|
+
renderFuseQAOnDemand(),
|
|
285
|
+
"",
|
|
272
286
|
renderGeneralRules(),
|
|
273
287
|
"<!-- FUSION:END -->",
|
|
274
288
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAEA,SAAS,sBAAsB;IAC7B,OAAO;;iCAEwB,CAAC;AAClC,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO;;;;;;;;;;;;;oJAa2I,CAAC;AACrJ,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;;;;;;;+DAgBsD,CAAC;AAChE,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;4EAwBmE,CAAC;AAC7E,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO;;;;;;;;;;;;qGAY4F,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAwDuC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;uHAyB8G,CAAC;AACxH,CAAC;AAED,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAEA,SAAS,sBAAsB;IAC7B,OAAO;;iCAEwB,CAAC;AAClC,CAAC;AAED,SAAS,uBAAuB;IAC9B,OAAO;;;;;;;;;;;;;oJAa2I,CAAC;AACrJ,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;;;;;;;+DAgBsD,CAAC;AAChE,CAAC;AAED,SAAS,WAAW;IAClB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;4EAwBmE,CAAC;AAC7E,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO;;;;;;;;;;;;qGAY4F,CAAC;AACtG,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gDAwDuC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;uHAyB8G,CAAC;AACxH,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO;;;;;;;;;;;;;;;;6DAgBoD,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;;;;;;;;;;wHAU+G,CAAC;AACzH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO;;;;;;;;;;;;;;;;;;;;;;kNAsByM,CAAC;AACnN,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO;;;;;;;;0MAQiM,CAAC;AAC3M,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO;;;;;;;2EAOkE,CAAC;AAC5E,CAAC;AAED,2EAA2E;AAC3E,8EAA8E;AAC9E,0EAA0E;AAC1E,8EAA8E;AAC9E,MAAM,UAAU,eAAe,CAAC,IAAqB;IACnD,MAAM,QAAQ,GAAG;QACf,qBAAqB;QACrB,EAAE;QACF,sBAAsB,EAAE;QACxB,EAAE;QACF,uBAAuB,EAAE;QACzB,EAAE;QACF,KAAK;QACL,EAAE;QACF,uBAAuB;QACvB,0DAA0D;QAC1D,EAAE;QACF,4EAA4E;QAC5E,sDAAsD;QACtD,EAAE;QACF,qBAAqB,EAAE;QACvB,EAAE;QACF,cAAc,EAAE;QAChB,EAAE;QACF,WAAW,EAAE;QACb,EAAE;QACF,WAAW,EAAE;QACb,EAAE;QACF,iBAAiB,EAAE;QACnB,EAAE;QACF,gBAAgB,EAAE;QAClB,EAAE;QACF,qBAAqB,EAAE;QACvB,EAAE;QACF,iBAAiB,EAAE;QACnB,EAAE;QACF,oBAAoB,EAAE;QACtB,EAAE;QACF,kBAAkB,EAAE;QACpB,qBAAqB;KACtB,CAAC;IACF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACpC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fuseqa-skill.d.ts","sourceRoot":"","sources":["../../src/templates/fuseqa-skill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"fuseqa-skill.d.ts","sourceRoot":"","sources":["../../src/templates/fuseqa-skill.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAgHhE"}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
export function composeFuseQASkill(_ctx) {
|
|
2
2
|
return `---
|
|
3
3
|
name: fuseqa
|
|
4
|
-
description: Use when
|
|
4
|
+
description: Use only when the user explicitly asks for local end-to-end verification (FuseQA) — derives end-to-end cases for the current change from its specs and drives them through real user entry points against the built artifact. Not part of the default pipeline; never invoked automatically. Also handles "write e2e tests", "end-to-end tests", "QA acceptance", or adding test cases for a change.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# FuseQA —
|
|
7
|
+
# FuseQA — On-Demand E2E Verification
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
FuseQA verifies the artifact through real entry points. It is **not part of the default pipeline and has no checkpoint**: no phase, checkpoint, or automatic decision invokes it, and neither apply completion nor entry to Verify depends on it. Run it explicitly with \`/fuseqa\` when local end-to-end verification is meaningful.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
It authors E2E cases for the current change and handles what those cases expose. It **does not execute the existing regression suite** — that belongs to the Verify phase full test run. A new case failing on first run is the TDD RED step, not a diagnosis stage. An existing case turning red is a regression caught by the Verify gate.
|
|
12
12
|
|
|
13
|
-
**
|
|
13
|
+
**When local E2E fits:** FuseQA is useful when the artifact can be deployed and exercised on one machine — a CLI, a small service, a library, a local web app. It cannot reproduce a distributed topology: service discovery, network partitions, shared-state races across nodes, or production data. For distributed systems, run equivalent checks in CI/CD rather than in the development phase; a local green suite there proves very little.
|
|
14
|
+
|
|
15
|
+
**What local E2E catches that the other gates cannot:** unit tests cover source, cold-read review runs nothing, and the Verify phase runs the same unit suite. A defect can pass all of them and still reach users. The canonical shape: an entry-guard that compares a resolved module path against an unresolved \`argv[1]\` works when the built file is invoked by its real path and silently does nothing when invoked through a symlinked bin shim — typecheck, unit tests and diff review all pass.
|
|
14
16
|
|
|
15
17
|
---
|
|
16
18
|
|
|
@@ -43,7 +45,7 @@ Every case declares five fields (schema: \`templates/_case-schema.yaml\`):
|
|
|
43
45
|
Two hard rules, both mechanically checkable:
|
|
44
46
|
|
|
45
47
|
- **No importing project source.** A case that imports from \`../src/\` is not a FuseQA case — it is a unit test wearing a costume. This is grep-checkable, so it is checked.
|
|
46
|
-
- **The artifact under test is the build output, not the source.** TDD covers \`src/\`; FuseQA covers what ships. The bin-shim entry-guard defect above passes at source level and fails as a built artifact — that gap is this
|
|
48
|
+
- **The artifact under test is the build output, not the source.** TDD covers \`src/\`; FuseQA covers what ships. The bin-shim entry-guard defect above passes at source level and fails as a built artifact — that gap is this skill's whole subject.
|
|
47
49
|
|
|
48
50
|
---
|
|
49
51
|
|
|
@@ -94,7 +96,7 @@ A red case carries evidence but its cause is undetermined. Attribution is usuall
|
|
|
94
96
|
- **Implementation defect → Blocking.** The red case IS the failing test; fix the implementation.
|
|
95
97
|
- **Spec gap → Suggestion** by default; escalate to Blocking if the undefined behavior breaks something users see.
|
|
96
98
|
- **False red → case debt**, outside the grading. Fix or remove the case and record **why the implementation is correct**, with evidence. "The test was wrong" alone is not an attribution.
|
|
97
|
-
- **Attribution over its time box → Suggestion.** Never hold up
|
|
99
|
+
- **Attribution over its time box → Suggestion.** Never hold up the change's completion on an unresolved attribution.
|
|
98
100
|
|
|
99
101
|
---
|
|
100
102
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fuseqa-skill.js","sourceRoot":"","sources":["../../src/templates/fuseqa-skill.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,IAAqB;IACtD,OAAO
|
|
1
|
+
{"version":3,"file":"fuseqa-skill.js","sourceRoot":"","sources":["../../src/templates/fuseqa-skill.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,IAAqB;IACtD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8GR,CAAC;AACF,CAAC"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
export function composeFuseReviewSkill(_ctx) {
|
|
2
2
|
return `---
|
|
3
3
|
name: fusereview
|
|
4
|
-
description: Use when performing the post-apply code review (FuseReview
|
|
4
|
+
description: Use when performing the post-apply code review (FuseReview) — reviews the accumulated diff of the current change with a fresh context; also runs when the user asks to "code review", "review the change", or audit the implementation quality of recent work.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# FuseReview — Post-Apply Code Review
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
Think reviews direction, Do produces code, **FuseReview reviews the implementation**, Verify validates the whole. This skill is guidance, not a checklist: follow the code, keep judgment active, and prefer one substantiated blocker over a list of nits.
|
|
10
10
|
|
|
11
11
|
This skill is **self-contained**. The review method below is complete within this file; it does not route to documents that may not exist in this project.
|
|
12
12
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders the `/specfuse` slash command shipped into scaffolded projects.
|
|
3
|
+
*
|
|
4
|
+
* The command is prose, not a runtime: every ordering rule below is enforced
|
|
5
|
+
* only by the model reading it. Keep clauses exact — the tests assert the
|
|
6
|
+
* sentences that carry each requirement, because a looser paraphrase can drop
|
|
7
|
+
* a prohibition (for example, "archive after verify" without "only when every
|
|
8
|
+
* check passes") while every keyword still appears.
|
|
9
|
+
*/
|
|
10
|
+
export declare function composeSpecfuseCommand(): string;
|
|
11
|
+
//# sourceMappingURL=specfuse-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specfuse-command.d.ts","sourceRoot":"","sources":["../../src/templates/specfuse-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAoE/C"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renders the `/specfuse` slash command shipped into scaffolded projects.
|
|
3
|
+
*
|
|
4
|
+
* The command is prose, not a runtime: every ordering rule below is enforced
|
|
5
|
+
* only by the model reading it. Keep clauses exact — the tests assert the
|
|
6
|
+
* sentences that carry each requirement, because a looser paraphrase can drop
|
|
7
|
+
* a prohibition (for example, "archive after verify" without "only when every
|
|
8
|
+
* check passes") while every keyword still appears.
|
|
9
|
+
*/
|
|
10
|
+
export function composeSpecfuseCommand() {
|
|
11
|
+
return `---
|
|
12
|
+
description: Run the SpecFuse pipeline unattended, from brainstorming through archive
|
|
13
|
+
argument-hint: <requirement description>
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
# /specfuse — unattended pipeline
|
|
17
|
+
|
|
18
|
+
Run the full SpecFuse pipeline for: $ARGUMENTS
|
|
19
|
+
|
|
20
|
+
If \`$ARGUMENTS\` is empty, print usage as \`/specfuse <requirement description>\` and stop. Do not create a change or generate an artifact. Do not ask a question.
|
|
21
|
+
|
|
22
|
+
## Automatic decisions
|
|
23
|
+
|
|
24
|
+
Do not call AskUserQuestion at any decision point. Answer each with the recommended option and record the decision in the final report.
|
|
25
|
+
|
|
26
|
+
- **Brainstorming:** derive 2–3 alternatives with trade-offs, select the recommended one, and write the selection and rationale into \`design.md\`.
|
|
27
|
+
- **Design tokens:** when the three-gate test triggers \`/design-md\`, answer the questionnaire with recommended values and generate \`DESIGN-TOKENS.md\`; never overwrite an existing \`DESIGN-TOKENS.md\`.
|
|
28
|
+
- **Model switch:** record \`continue with current model\`; do not switch and do not ask.
|
|
29
|
+
- **FuseReview:** record \`auto: entered\` and run the review.
|
|
30
|
+
- **FuseQA:** not part of the pipeline; do not invoke it. It remains available only through an explicit \`/fuseqa\` request.
|
|
31
|
+
- **Pace control:** do not stop between artifacts for review.
|
|
32
|
+
|
|
33
|
+
## Execution order
|
|
34
|
+
|
|
35
|
+
### 0. Select the workspace
|
|
36
|
+
|
|
37
|
+
When a Git Worktree trigger condition is met, create and enter a dedicated worktree before writing anything, so every artifact stays inside it. If worktree creation fails, continue in the current working tree and record the fallback.
|
|
38
|
+
|
|
39
|
+
### 1. Create the change
|
|
40
|
+
|
|
41
|
+
Run \`openspec new change <kebab-case-name>\`. Record the current HEAD as the review baseline.
|
|
42
|
+
|
|
43
|
+
### 2. Generate the artifacts
|
|
44
|
+
|
|
45
|
+
Read \`openspec instructions <artifact-id> --change <name>\` for each artifact and write them in one pass, in this order: \`proposal.md\`, \`specs/\`, \`design.md\`, \`tasks.md\`. Artifact prose follows the FuseDoc standard at \`.claude/skills/fusedoc/SKILL.md\`.
|
|
46
|
+
|
|
47
|
+
### 3. Apply
|
|
48
|
+
|
|
49
|
+
Activate \`test-driven-development\` and \`verification-before-completion\`. For every task, write the failing test first, make it pass, then refactor. Before checking a task off, run the project's test command and paste the raw output as evidence. Do not dispatch implementation subagents: their worktrees would require a merge, which auto mode forbids.
|
|
50
|
+
|
|
51
|
+
### 4. FuseReview
|
|
52
|
+
|
|
53
|
+
Run the \`fusereview\` skill over the working-tree diff from the recorded baseline, including untracked files. Do not use \`baseline..HEAD\`: no commits are made. Fix Blocking findings test-first and re-review only the fix diff.
|
|
54
|
+
|
|
55
|
+
### 5. Verify
|
|
56
|
+
|
|
57
|
+
Run the verify phase with \`/opsx:verify <change>\`, then the project's full test suite and the project's linter. Paste the raw output for each. Structural validation alone does not check implementation against specs.
|
|
58
|
+
|
|
59
|
+
### 6. Archive
|
|
60
|
+
|
|
61
|
+
Archive only when every verify check passes: run \`openspec archive <change> --yes\`. If any check still fails after best-effort repair, do not archive; leave the change directory in place and write each failure with its raw output into the final report.
|
|
62
|
+
|
|
63
|
+
## Worktree isolation
|
|
64
|
+
|
|
65
|
+
When a Git Worktree trigger condition is met, the worktree is selected in step 0 and the entire pipeline runs inside it: artifacts, apply, FuseReview, verify, and archive. Never merge the worktree back to the trunk; leave it in place for the user to inspect. If worktree creation fails, continue in the current working tree and record the fallback. Because auto mode does not commit, FuseReview reads the working-tree diff from the baseline, including untracked files.
|
|
66
|
+
|
|
67
|
+
## Prohibitions
|
|
68
|
+
|
|
69
|
+
- Never run \`git commit\`, \`git push\`, or \`git merge\`.
|
|
70
|
+
- Never skip TDD or verification evidence.
|
|
71
|
+
- Never archive after a failing verify.
|
|
72
|
+
- Never leave an automatic decision out of the final report.
|
|
73
|
+
|
|
74
|
+
## Final report
|
|
75
|
+
|
|
76
|
+
State the change name and location, the artifacts written, the task count, verification output, the FuseReview decision (\`auto: entered\`), the archive outcome, any worktree path, every automatic decision with its rationale, and that no commit and no push were performed. FuseQA is not part of the pipeline, so no FuseQA decision is recorded.
|
|
77
|
+
`;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=specfuse-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specfuse-command.js","sourceRoot":"","sources":["../../src/templates/specfuse-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkER,CAAC;AACF,CAAC"}
|