create-specfuse 0.6.1 → 0.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import type { TemplateContext } from '../types.js';
1
+ import type { TemplateContext } from "../types.js";
2
2
  export declare function renderGrillReview(): string;
3
3
  export declare function composeCLAUDEmd(ctx: TemplateContext): string;
4
4
  //# 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,EAAgB,eAAe,EAAE,MAAM,aAAa,CAAC;AAmKjE,wBAAgB,iBAAiB,IAAI,MAAM,CAgE1C;AAaD,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAkC5D"}
1
+ {"version":3,"file":"claude-md.d.ts","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAgB,eAAe,EAAE,MAAM,aAAa,CAAC;AA8KjE,wBAAgB,iBAAiB,IAAI,MAAM,CAmE1C;AAaD,wBAAgB,eAAe,CAAC,GAAG,EAAE,eAAe,GAAG,MAAM,CAkC5D"}
@@ -1,6 +1,6 @@
1
1
  function renderTechStack(stack) {
2
2
  const lines = [
3
- '## Tech Stack',
3
+ "## Tech Stack",
4
4
  ...stack.languages.map((l) => `- Language: ${l}`),
5
5
  ];
6
6
  if (stack.framework)
@@ -10,7 +10,7 @@ function renderTechStack(stack) {
10
10
  lines.push(`- Format: \`${stack.commands.format}\``);
11
11
  if (stack.commands.typecheck)
12
12
  lines.push(`- Typecheck: \`${stack.commands.typecheck}\``);
13
- return lines.join('\n');
13
+ return lines.join("\n");
14
14
  }
15
15
  function renderCommitConvention() {
16
16
  return `## Commit Convention
@@ -20,7 +20,16 @@ function renderCommitConvention() {
20
20
  function renderDesignTokensRules() {
21
21
  return `## DESIGN-TOKENS.md Generation Rules
22
22
 
23
- - **Brainstorming auto-trigger:** When brainstorming involves frontend/UI design intent, brainstorming 阶段结束后 MUST invoke \`/design-md\` skill FIRST. \`/design-md\` completes questionnaire and generates DESIGN-TOKENS.md, THEN resume the OpenSpec artifact flow (proposal → design → specs → tasks).
23
+ DESIGN-TOKENS.md 触发判定在 brainstorming 结束时执行,采用三道门依次评估(命中即停):
24
+
25
+ - **Brainstorming auto-trigger (three-gate test, evaluated at brainstorming end):**
26
+ - **Gate 1 — Primary trigger:** Does this change or project ship a UI consumed by an end user? Trigger if ANY: new WebUI / desktop GUI / mobile interface; modifying the visual presentation layer of an existing UI; deliverable embeds a frontend (SPA / templates / \`go:embed\` web assets). Examples — hit: a ping tool with a browser UI; miss: a pure API / CLI / backend service / library / script.
27
+ - **Gate 2 — Exemption:** Skip if visual decisions are already settled elsewhere: a DESIGN-TOKENS.md already exists at project root AND this change does not touch the visual presentation layer; OR the change only moves API/logic/data with the UI visual layer fully unchanged; OR the project has a design system / component library this change merely consumes.
28
+ - **Gate 3 — Intensity calibration (not a switch):**
29
+ - **Strong intent** (user actively discussed palette / dark mode / brand archetype / component visual language / design references / mood during brainstorming) → invoke \`/design-md\` NOW. Questionnaire answers already have grounding in the brainstorming record.
30
+ - **Weak intent** (only "has UI" was settled, no visual discussion) → STILL invoke \`/design-md\` NOW (Gate 1 hit), but BEFORE running the questionnaire, explicitly tell the user: "This change includes a user-facing UI, so DESIGN-TOKENS.md will be generated. However, visual design was NOT discussed during brainstorming — the following questionnaire will capture those decisions now." Then run the questionnaire. Do NOT silently extract answers the user never expressed.
31
+ - **Default:** Gate 1 misses → do not invoke \`/design-md\`; resume the artifact flow directly.
32
+ - **Why trigger on "has UI" not "user expressed visual intent":** A WebUI project's visual tokens are an inevitable consequence of building the UI, not a function of whether the user raised visual topics in brainstorming. design.md and tasks.md reference DESIGN-TOKENS.md (archetype, fonts, status colors, primary scale), so the token file must exist before those artifacts are drafted — deferring generation to after artifacts creates forward references and breaks the Grill consistency scan.
24
33
  - **Brownfield (manual):** Invoke \`/design-md\` to generate DESIGN-TOKENS.md for an existing project. The skill is installed at \`.claude/skills/design-md/SKILL.md\`.
25
34
  - **Never overwrite silently:** If DESIGN-TOKENS.md already exists, always prompt for confirmation and create a \`.bak\` backup before overwriting.`;
26
35
  }
@@ -33,7 +42,7 @@ When \`/opsx:propose\` is invoked:
33
42
  - Ask ONE question at a time (Socratic method). Never fire multiple questions in a single turn.
34
43
  - Proactively present 2-3 architectural alternatives with explicit trade-offs.
35
44
  - **STOP brainstorming BEFORE its "Write design doc" step (step 6).** Do NOT write to \`docs/superpowers/specs/\`. All spec files are managed exclusively by OpenSpec.
36
- - **If brainstorming involved frontend/UI design intent:** MUST invoke \`/design-md\` skill NOW (before generating artifacts). Complete the questionnaire → generate DESIGN-TOKENS.md → THEN proceed.
45
+ - **If the three-gate test (see DESIGN-TOKENS.md Generation Rules above) triggers:** MUST invoke \`/design-md\` skill NOW (before generating artifacts). For weak intent, state that visual design was not discussed in brainstorming before running the questionnaire. Complete the questionnaire → generate DESIGN-TOKENS.md → THEN proceed.
37
46
  - Only after human confirms the approach, generate ALL artifacts (proposal -> design -> specs -> tasks) in one pass.
38
47
 
39
48
  2. Every proposal artifact MUST contain:
@@ -51,7 +60,7 @@ When \`/opsx:new\` is invoked:
51
60
  2. **BEFORE drafting the first artifact (proposal), MUST activate Superpowers \`brainstorming\`.**
52
61
  - Use Socratic questioning to clarify scope, non-goals, and trade-offs.
53
62
  - **STOP brainstorming BEFORE its "Write design doc" step (step 6).** Do NOT write to \`docs/superpowers/specs/\`. All spec files are managed exclusively by OpenSpec.
54
- - **If brainstorming involved frontend/UI design intent:** MUST invoke \`/design-md\` skill NOW (before drafting proposal). Complete the questionnaire → generate DESIGN-TOKENS.md → THEN proceed.
63
+ - **If the three-gate test (see DESIGN-TOKENS.md Generation Rules above) triggers:** MUST invoke \`/design-md\` skill NOW (before drafting proposal). For weak intent, state that visual design was not discussed in brainstorming before running the questionnaire. Complete the questionnaire → generate DESIGN-TOKENS.md → THEN proceed.
55
64
  - Only after the user confirms the approach, draft the proposal artifact.
56
65
 
57
66
  3. When \`/opsx:continue\` is invoked to advance to the next artifact:
@@ -152,6 +161,8 @@ Before \`/opsx:archive\`:
152
161
  export function renderGrillReview() {
153
162
  return `### Pre-Apply Review (Grill)
154
163
 
164
+ Per-artifact review surfaces and check tools (signature substitution, assertion strength, etc.) live in \`.claude/skills/grill-me/SKILL.md\`. This section governs discipline and process.
165
+
155
166
  When all artifacts (proposal, design, specs, tasks) are complete, the AI MUST prompt:
156
167
  > "All artifacts are ready. Recommend running \`/grill-me\` for a pre-apply review before implementation. Or run \`/opsx:apply\` directly to skip review."
157
168
 
@@ -176,6 +187,7 @@ If the user runs \`/opsx:apply\` without prior grill, this is treated as an impl
176
187
  - Security — input validation, permissions, data exposure risks?
177
188
  - Performance impact — O(n²), blocking IO, memory pressure?
178
189
  - Backward compatibility — any breaking changes to existing APIs/behaviors?
190
+ - **Data-flow integrity** — every spec input value has a parameter slot in a declared signature; walk the call chain by substitution; spec scenarios must be strong enough to prove the input took effect (assertion strength), not just assert the output shell.
179
191
 
180
192
  **Problem Classification:**
181
193
  - **Blocking** (must resolve before apply): artifact contradictions, uncovered edge cases, missing error handling, security risks, untestable specs. User may override with explicit acknowledgment.
@@ -186,11 +198,11 @@ If the user runs \`/opsx:apply\` without prior grill, this is treated as an impl
186
198
  - \`grill-abort\`: Exit grill, rollback all modifications from \`.grill-backup/\`.
187
199
  - Ambiguous expressions ("stop", "算了"): AI MUST ask for clarification — "exit grill review, or abandon the entire change?"
188
200
 
189
- **Soft Limit:** After 15 questions, self-assess whether remaining issues are blocking-level. If none remain, proceed to summary.
201
+ **Soft Limit:** After 9 questions, self-assess whether remaining issues are blocking-level. If none remain, proceed to summary.
190
202
 
191
203
  **Consistency Scan** (before summary):
192
204
  Run a final check across all artifacts for:
193
- - Reference integrity — every goal in proposal maps to design/specs/tasks
205
+ - Reference integrity — every goal in proposal maps to design/specs/tasks, and every spec WHEN input maps to a parameter slot in a declared signature (reverse direction — data-flow integrity)
194
206
  - Terminology consistency — same concepts use same names throughout
195
207
  - Logical conflict detection — no artifact contradicts another
196
208
 
@@ -227,36 +239,36 @@ function renderGeneralRules() {
227
239
  export function composeCLAUDEmd(ctx) {
228
240
  const sections = [
229
241
  `# Project CLAUDE.md`,
230
- '',
242
+ "",
231
243
  renderTechStack(ctx.stack),
232
- '',
244
+ "",
233
245
  renderCommitConvention(),
234
- '',
246
+ "",
235
247
  renderDesignTokensRules(),
236
- '',
237
- '---',
238
- '',
239
- '<!-- FUSION:START -->',
240
- '## OpenSpec & Superpowers Composite Workflow Constraints',
241
- '',
242
- 'This project enforces a fused OpenSpec + Superpowers engineering pipeline.',
243
- 'AI agents MUST follow these rules without exception.',
244
- '',
248
+ "",
249
+ "---",
250
+ "",
251
+ "<!-- FUSION:START -->",
252
+ "## OpenSpec & Superpowers Composite Workflow Constraints",
253
+ "",
254
+ "This project enforces a fused OpenSpec + Superpowers engineering pipeline.",
255
+ "AI agents MUST follow these rules without exception.",
256
+ "",
245
257
  renderPathA(),
246
- '',
258
+ "",
247
259
  renderPathB(),
248
- '',
260
+ "",
249
261
  renderExploration(),
250
- '',
262
+ "",
251
263
  renderGrillReview(),
252
- '',
264
+ "",
253
265
  renderApplyPhase(ctx.stack),
254
- '',
266
+ "",
255
267
  renderVerifyPhase(ctx.stack),
256
- '',
268
+ "",
257
269
  renderGeneralRules(),
258
- '<!-- FUSION:END -->',
270
+ "<!-- FUSION:END -->",
259
271
  ];
260
- return sections.join('\n') + '\n';
272
+ return sections.join("\n") + "\n";
261
273
  }
262
274
  //# sourceMappingURL=claude-md.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-md.js","sourceRoot":"","sources":["../../src/templates/claude-md.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  export function composeDesignMdSkill() {
2
2
  return `---
3
3
  name: design-md
4
- description: Generate a DESIGN-TOKENS.md file for the current project via interactive questionnaire and archetype matching. Use for brownfield projects that need design tokens.
4
+ description: Generate a DESIGN-TOKENS.md file for the current project via interactive questionnaire and archetype matching. Auto-triggered at brainstorming end when the change ships a user-facing UI (three-gate test in CLAUDE.md), or invoked manually via /design-md for any project needing design tokens.
5
5
  ---
6
6
 
7
7
  # DESIGN-TOKENS.md Generation Skill
8
8
 
9
9
  Generate a comprehensive \`DESIGN-TOKENS.md\` design token document for the current project.
10
10
 
11
- **Trigger:** User invokes \`/design-md\` manually, or auto-triggered after \`specfuse init\` for frontend projects.
11
+ **Trigger:** (1) Auto-triggered at brainstorming end when the three-gate test in CLAUDE.md fires — i.e. the change or project ships a UI consumed by an end user (new WebUI / desktop GUI / mobile interface / embedded frontend), no existing DESIGN-TOKENS.md exempts it. For weak visual intent, state that visual design was not discussed in brainstorming before running the questionnaire. (2) User invokes \`/design-md\` manually in a brownfield project.
12
12
 
13
13
  ---
14
14
 
@@ -1 +1 @@
1
- {"version":3,"file":"grill-me-skill.d.ts","sourceRoot":"","sources":["../../src/templates/grill-me-skill.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,IAAI,MAAM,CAkB5C"}
1
+ {"version":3,"file":"grill-me-skill.d.ts","sourceRoot":"","sources":["../../src/templates/grill-me-skill.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,IAAI,MAAM,CAoE5C"}
@@ -4,17 +4,67 @@ name: grill-me
4
4
  description: Pre-apply review — stress-test all artifacts before implementation. Use when artifacts are complete and you want a structured review before /opsx:apply.
5
5
  ---
6
6
 
7
- Activate the **Pre-Apply Review (Grill)** protocol defined in CLAUDE.md.
7
+ # Pre-Apply Review (Grill)
8
8
 
9
- Follow the "Pre-Apply Review (Grill)" section rules exactly:
10
- 1. Backup change directory to \`.grill-backup/\` before grill begins
11
- 2. Review all artifacts (proposal, design, specs, tasks) one question at a time
12
- 3. Each question: [blocking/non-blocking] + issue + recommended answer + modification preview
13
- 4. Direct-modify artifacts on acceptance (user must see final diff before write)
14
- 5. Run consistency scan before summary
15
- 6. Output summary and prompt \`/opsx:apply\`
9
+ Activate the review. The full method is self-contained in this skill; the CLAUDE.md "Pre-Apply Review (Grill)" protocol governs project-level discipline (classification, backup, rollback).
16
10
 
17
- Exit commands: \`grill-stop\` (keep changes), \`grill-abort\` (rollback from backup).
11
+ ## Discipline (every question)
12
+
13
+ - Ask ONE question at a time.
14
+ - Every question carries artifact evidence (file:line + specific scenario) — no evidence, no question. This is what keeps the review dense instead of formalistic.
15
+ - Every question includes a recommended answer.
16
+ - Classify each issue as [blocking] or [non-blocking].
17
+ - Soft limit: After 9 questions, self-assess whether remaining issues are blocking-level. If none remain, proceed to summary.
18
+
19
+ ## Flow
20
+
21
+ 1. **Backup**: Copy the change directory to \`.grill-backup/\` before grill begins. Clean stale backups if present.
22
+ 2. **Review**: All artifacts (proposal, design, specs, tasks) one question at a time.
23
+ 3. **Write**: On acceptance, show the final diff before any write, then modify the artifact.
24
+ 4. **Consistency scan**: Run the bidirectional scan before summary.
25
+ 5. **Summary**: Output the review summary and prompt \`/opsx:apply\`.
26
+ 6. **Cleanup**: Delete \`.grill-backup/\` after successful completion.
27
+
28
+ ## Review Surfaces (by artifact group — discovery perspectives, not mandatory per-item questions)
29
+
30
+ [proposal.md]
31
+ - Scope clarity — non-goals present and unambiguous
32
+ - Trade-off reality — each trade-off names rejected alternatives and reasons
33
+ - Verification executable — the verification strategy can actually run
34
+ - Problem validity — diagnoses a real problem, not an invented one
35
+
36
+ [design.md]
37
+ - Signature contract — every declared input has a source and a consumer (signature substitution)
38
+ - Dependency direction — domain never imports adapters; arrows point inward
39
+ - State & concurrency — shared state, lifecycle, who holds the lock
40
+ - Config defaults — every flag has a default, a range, and fallback behavior
41
+ - Error ownership — every failure class has a handling layer
42
+
43
+ [specs/]
44
+ - Independently testable — success and failure behaviors both present
45
+ - Boundary conditions — empty, over-limit, boundary values
46
+ - Input slot — every spec WHEN input maps to a parameter slot in a declared signature
47
+ - Assertion strength — scenarios prove an input took effect, not merely an output shell
48
+ - Terminology consistent — same concept, same name across specs
49
+ - Preconditions explicit — implied state assumptions written out
50
+
51
+ [tasks/]
52
+ - Verifiable — "done" is checkable by a command
53
+ - TDD order — failing test first, then implementation
54
+ - Spec trace — every spec scenario has a corresponding task, and vice versa
55
+ - Granularity — chunks ≤ 2h with correct dependencies
56
+
57
+ ## Check Tools (trigger-based, not run every round)
58
+
59
+ - **Signature substitution** — for each public signature ask: where does each input come from, who constructs it, who consumes it?
60
+ - **Bidirectional parameter flow** — spec input → design parameter slot; design parameter → spec scenario
61
+ - **Implementation rehearsal** — for each signature ask: "can I write this now and satisfy the spec?"
62
+
63
+ ## Boundary Discipline
64
+
65
+ - **Assertion-strength triage**: presentation defect (behavior already defined in proposal/design) → strengthen the THEN; requirements defect (behavior never defined) → route to Think/user, never invent.
66
+ - **Consistency scan runs both directions**: proposal → specs/tasks (forward) and spec inputs → design signature slots (reverse).
67
+ - **Exit commands**: \`grill-stop\` (keep changes), \`grill-abort\` (rollback from \`.grill-backup/\`).
18
68
  `;
19
69
  }
20
70
  //# sourceMappingURL=grill-me-skill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"grill-me-skill.js","sourceRoot":"","sources":["../../src/templates/grill-me-skill.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;;;;;;;CAgBR,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"grill-me-skill.js","sourceRoot":"","sources":["../../src/templates/grill-me-skill.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkER,CAAC;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-specfuse",
3
- "version": "0.6.1",
3
+ "version": "0.6.3",
4
4
  "description": "Scaffold projects with OpenSpec + Superpowers fusion methodology",
5
5
  "type": "module",
6
6
  "bin": {