@forgeailab/create-spark 0.1.2 → 0.2.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/.claude/skills/architecture-cutline/SKILL.md +96 -0
- package/.claude/skills/board-review/SKILL.md +77 -0
- package/.claude/skills/code-review/SKILL.md +76 -0
- package/.claude/skills/execute-task/SKILL.md +80 -0
- package/.claude/skills/idea-sharpen/SKILL.md +65 -0
- package/.claude/skills/implementation-brief/SKILL.md +87 -0
- package/.claude/skills/mvp-board/SKILL.md +95 -0
- package/.claude/skills/mvp-grill/SKILL.md +60 -0
- package/.claude/skills/mvp-spec/SKILL.md +78 -0
- package/.claude/skills/new-pack/SKILL.md +156 -0
- package/.claude/skills/next-task/SKILL.md +65 -0
- package/.claude/skills/pack-add/SKILL.md +64 -0
- package/.claude/skills/pack-resolve/SKILL.md +67 -0
- package/.claude/skills/parallel-execution/SKILL.md +68 -0
- package/.claude/skills/qa-verify/SKILL.md +77 -0
- package/.claude/skills/risk-check/SKILL.md +88 -0
- package/.claude/skills/sync-board/SKILL.md +76 -0
- package/.claude/skills/ux-theme/SKILL.md +93 -0
- package/.codex/skills/architecture-cutline/SKILL.md +94 -0
- package/.codex/skills/board-review/SKILL.md +75 -0
- package/.codex/skills/code-review/SKILL.md +73 -0
- package/.codex/skills/execute-task/SKILL.md +76 -0
- package/.codex/skills/idea-sharpen/SKILL.md +63 -0
- package/.codex/skills/implementation-brief/SKILL.md +85 -0
- package/.codex/skills/mvp-board/SKILL.md +93 -0
- package/.codex/skills/mvp-grill/SKILL.md +58 -0
- package/.codex/skills/mvp-spec/SKILL.md +76 -0
- package/.codex/skills/new-pack/SKILL.md +153 -0
- package/.codex/skills/next-task/SKILL.md +64 -0
- package/.codex/skills/pack-add/SKILL.md +62 -0
- package/.codex/skills/pack-resolve/SKILL.md +65 -0
- package/.codex/skills/parallel-execution/SKILL.md +66 -0
- package/.codex/skills/qa-verify/SKILL.md +74 -0
- package/.codex/skills/risk-check/SKILL.md +86 -0
- package/.codex/skills/sync-board/SKILL.md +72 -0
- package/.codex/skills/ux-theme/SKILL.md +91 -0
- package/package.json +8 -5
- package/packs/README.md +22 -24
- package/packs/ai-anthropic/files/lib/anthropic.ts +46 -3
- package/packs/ai-anthropic/pack.toml +2 -3
- package/packs/auth-better-auth/files/app/api/auth/[...all]/route.ts +2 -2
- package/packs/auth-better-auth/files/lib/auth.ts +40 -1
- package/packs/auth-better-auth/pack.toml +1 -5
- package/packs/auth-better-auth-pg/files/app/api/auth/[...all]/route.ts +2 -2
- package/packs/auth-better-auth-pg/files/lib/auth.ts +40 -1
- package/packs/auth-better-auth-pg/pack.toml +1 -5
- package/packs/payments-stripe/files/lib/stripe.ts +104 -6
- package/packs/payments-stripe/pack.toml +1 -5
- package/packs/sync-zero/files/components/ZeroProvider.tsx +11 -1
- package/packs/sync-zero/files/lib/zero/client.ts +3 -3
- package/packs/sync-zero/files/lib/zero/schema.ts +15 -2
- package/packs/sync-zero/pack.toml +0 -4
- package/scripts/sync-skills.ts +223 -0
- /package/templates/nextjs/{anvil.config.json → spark.config.json} +0 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mvp-spec
|
|
3
|
+
description: Convert a grilled idea into a single concise MVP specification that an executor can build from. Use when the user says "write the spec", "let's lock the MVP", or after `/mvp-grill` has settled the open questions. Do NOT use if `.ai/product-spec.md` already exists and is current — edit it directly or run `/risk-check` first.
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Write
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Skill: mvp-spec
|
|
10
|
+
|
|
11
|
+
## Goal
|
|
12
|
+
|
|
13
|
+
Produce `.ai/product-spec.md` — the single source of truth for what the MVP is. Technical enough that Sonnet/Claude Code can execute without guessing, short enough to fit in working memory.
|
|
14
|
+
|
|
15
|
+
## Recommended model
|
|
16
|
+
|
|
17
|
+
Opus 4.7 or GPT-5.5.
|
|
18
|
+
|
|
19
|
+
## Inputs
|
|
20
|
+
|
|
21
|
+
Read these if they exist:
|
|
22
|
+
|
|
23
|
+
- `.ai/decision-log.md` (this is the input — do not re-grill)
|
|
24
|
+
- existing `.ai/product-spec.md` (update in place rather than rewrite)
|
|
25
|
+
|
|
26
|
+
If the decision log is missing the answers needed, stop and tell the user to run `/mvp-grill` first. Do not invent answers.
|
|
27
|
+
|
|
28
|
+
## Rules
|
|
29
|
+
|
|
30
|
+
- One spec, one MVP slice. If the user wants v1 and v2, write v1 only.
|
|
31
|
+
- Every section must fit on one screen. If it does not, you are over-specifying.
|
|
32
|
+
- **Non-goals are mandatory.** A spec without a non-goals list always leaks scope.
|
|
33
|
+
- Acceptance criteria must be checkable, not aspirational.
|
|
34
|
+
- Do not pick a stack here — that is `/architecture-cutline`'s job.
|
|
35
|
+
- Do not write tasks here — that is `/mvp-board`'s job.
|
|
36
|
+
|
|
37
|
+
## Output format
|
|
38
|
+
|
|
39
|
+
Write `.ai/product-spec.md` with exactly these sections:
|
|
40
|
+
|
|
41
|
+
```md
|
|
42
|
+
# Product Spec — <name>
|
|
43
|
+
|
|
44
|
+
## 1. One-sentence product
|
|
45
|
+
<who it is for, what it does, what they get>
|
|
46
|
+
|
|
47
|
+
## 2. Target user
|
|
48
|
+
<specific persona, not a category>
|
|
49
|
+
|
|
50
|
+
## 3. Core user journey
|
|
51
|
+
<3–7 numbered steps from open-app to win>
|
|
52
|
+
|
|
53
|
+
## 4. MVP feature list
|
|
54
|
+
- <feature>: <one-line description>
|
|
55
|
+
(keep this list aggressively short)
|
|
56
|
+
|
|
57
|
+
## 5. Non-goals
|
|
58
|
+
- <thing we will NOT build for MVP>
|
|
59
|
+
(at least 5 entries; this section is mandatory)
|
|
60
|
+
|
|
61
|
+
## 6. Data model
|
|
62
|
+
<entities and their key fields, no SQL>
|
|
63
|
+
|
|
64
|
+
## 7. Screens / pages
|
|
65
|
+
- <route>: <purpose>
|
|
66
|
+
|
|
67
|
+
## 8. Integrations
|
|
68
|
+
<auth, payments, third-party APIs, or "none">
|
|
69
|
+
|
|
70
|
+
## 9. Risks
|
|
71
|
+
<technical, product, or scope risks — 3–5 bullets>
|
|
72
|
+
|
|
73
|
+
## 10. Acceptance criteria
|
|
74
|
+
- [ ] <observable, testable statement>
|
|
75
|
+
(these are what makes MVP "done")
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
After writing, return a short summary and recommend `/architecture-cutline` next.
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: new-pack
|
|
3
|
+
description: Scaffold a new local feature-pack directory under `packs/` with a minimal manifest, empty files and skills directories, and an empty task stub. Prompts for install mode (`copy` or `hybrid`); a `hybrid` pack additionally scaffolds a companion `libs/spark-<name>/` workspace package and writes a `[runtime_package]` block into the new manifest. Use when a needed capability has no v1 pack.
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Write
|
|
7
|
+
- Bash
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Skill: new-pack
|
|
11
|
+
|
|
12
|
+
## Goal
|
|
13
|
+
|
|
14
|
+
Create a minimal pack skeleton that a human or executor can fill in later. This skill only scaffolds the pack directory (and, in `hybrid` mode, a companion workspace package under `libs/`); it does not implement the integration.
|
|
15
|
+
|
|
16
|
+
## Recommended model
|
|
17
|
+
|
|
18
|
+
Sonnet 4.6 or GPT-5 family executor.
|
|
19
|
+
|
|
20
|
+
## Inputs
|
|
21
|
+
|
|
22
|
+
Required from the user:
|
|
23
|
+
|
|
24
|
+
- `<name>` — pack directory name, for example `realtime-supabase`
|
|
25
|
+
- `category=<category>` — one of the v1 category values
|
|
26
|
+
- `mode=<mode>` — install mode, either `copy` or `hybrid`
|
|
27
|
+
|
|
28
|
+
If any of these values is missing, ask for it before writing files. When asking for `mode`, explain the difference:
|
|
29
|
+
|
|
30
|
+
- `copy` — pack ships its full runtime logic as files copied into the consumer project. The user owns the code in place. This is the right default for stable framework glue (config files, route handlers, env wiring).
|
|
31
|
+
- `hybrid` — pack ships only thin wiring files and imports its runtime logic from a versioned npm helper package `@forgeailab/spark-<name>` published from `libs/spark-<name>/`. Choose this when the logic is the same across every consumer project and bug fixes should land in one place.
|
|
32
|
+
|
|
33
|
+
## Valid categories
|
|
34
|
+
|
|
35
|
+
- `db`
|
|
36
|
+
- `auth`
|
|
37
|
+
- `payments`
|
|
38
|
+
- `email`
|
|
39
|
+
- `ui`
|
|
40
|
+
- `ai`
|
|
41
|
+
- `infra`
|
|
42
|
+
- `testing`
|
|
43
|
+
- `deploy`
|
|
44
|
+
- `analytics`
|
|
45
|
+
- `storage`
|
|
46
|
+
|
|
47
|
+
## Rules
|
|
48
|
+
|
|
49
|
+
- Validate that `<name>` is a single directory segment. Reject names containing `/`, `..`, spaces, or shell metacharacters.
|
|
50
|
+
- Validate that `packs/<name>/` does not already exist. If it exists, stop and report the collision.
|
|
51
|
+
- Validate that `category` is exactly one of the allowed categories above.
|
|
52
|
+
- Validate that `mode` is exactly `copy` or `hybrid`.
|
|
53
|
+
- Pack scaffold (both modes) creates only these paths:
|
|
54
|
+
- `packs/<name>/pack.toml`
|
|
55
|
+
- `packs/<name>/files/`
|
|
56
|
+
- `packs/<name>/skills/`
|
|
57
|
+
- `packs/<name>/tasks.yaml`
|
|
58
|
+
- Additionally in `hybrid` mode, validate that `libs/spark-<name>/` does not already exist, then create the companion workspace package:
|
|
59
|
+
- `libs/spark-<name>/package.json`
|
|
60
|
+
- `libs/spark-<name>/tsconfig.json`
|
|
61
|
+
- `libs/spark-<name>/src/index.ts`
|
|
62
|
+
- `libs/spark-<name>/test/index.test.ts`
|
|
63
|
+
- `libs/spark-<name>/README.md`
|
|
64
|
+
- `tasks.yaml` must be an empty stub file.
|
|
65
|
+
- Leave `provides`, `requires`, and `conflicts` empty. Do not guess capability tags.
|
|
66
|
+
- The pack's `[dependencies].runtime` MUST NOT redeclare the helper package — the CLI adds it implicitly from `[runtime_package]`.
|
|
67
|
+
|
|
68
|
+
## `pack.toml` skeleton — `copy` mode
|
|
69
|
+
|
|
70
|
+
Write this manifest, replacing `<name>` and `<category>`:
|
|
71
|
+
|
|
72
|
+
```toml
|
|
73
|
+
name = "<name>"
|
|
74
|
+
version = "0.1.0"
|
|
75
|
+
category = "<category>"
|
|
76
|
+
description = "TODO: describe what this pack adds."
|
|
77
|
+
provides = []
|
|
78
|
+
requires = []
|
|
79
|
+
conflicts = []
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## `pack.toml` skeleton — `hybrid` mode
|
|
83
|
+
|
|
84
|
+
In `hybrid` mode, the manifest gains a `[runtime_package]` table pointing at the companion helper:
|
|
85
|
+
|
|
86
|
+
```toml
|
|
87
|
+
name = "<name>"
|
|
88
|
+
version = "0.1.0"
|
|
89
|
+
category = "<category>"
|
|
90
|
+
description = "TODO: describe what this pack adds."
|
|
91
|
+
provides = []
|
|
92
|
+
requires = []
|
|
93
|
+
conflicts = []
|
|
94
|
+
|
|
95
|
+
[runtime_package]
|
|
96
|
+
package = "@forgeailab/spark-<name>"
|
|
97
|
+
version = "^0.1"
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
## `libs/spark-<name>/` skeleton — `hybrid` mode only
|
|
101
|
+
|
|
102
|
+
`package.json`:
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"name": "@forgeailab/spark-<name>",
|
|
107
|
+
"version": "0.1.0",
|
|
108
|
+
"type": "module",
|
|
109
|
+
"main": "./src/index.ts",
|
|
110
|
+
"types": "./src/index.ts",
|
|
111
|
+
"sideEffects": false,
|
|
112
|
+
"devDependencies": {
|
|
113
|
+
"bun-types": "latest",
|
|
114
|
+
"typescript": "latest"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
`tsconfig.json`:
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"extends": "../../tsconfig.base.json",
|
|
124
|
+
"include": ["src/**/*", "test/**/*"]
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
`src/index.ts`: empty `export {};` placeholder.
|
|
129
|
+
`test/index.test.ts`: minimal `test('placeholder', () => expect(true).toBe(true));`.
|
|
130
|
+
`README.md`: one-line description plus a "Why is this in libs/ vs packages/?" note (it is a library consumers import from, not internal CLI plumbing).
|
|
131
|
+
|
|
132
|
+
## Output format
|
|
133
|
+
|
|
134
|
+
After creating the skeleton, return:
|
|
135
|
+
|
|
136
|
+
```md
|
|
137
|
+
## New pack scaffolded
|
|
138
|
+
|
|
139
|
+
- Pack: `<name>`
|
|
140
|
+
- Category: `<category>`
|
|
141
|
+
- Install mode: `<mode>`
|
|
142
|
+
- Created:
|
|
143
|
+
- `packs/<name>/pack.toml`
|
|
144
|
+
- `packs/<name>/files/`
|
|
145
|
+
- `packs/<name>/skills/`
|
|
146
|
+
- `packs/<name>/tasks.yaml`
|
|
147
|
+
<!-- hybrid mode only -->
|
|
148
|
+
- `libs/spark-<name>/package.json`
|
|
149
|
+
- `libs/spark-<name>/tsconfig.json`
|
|
150
|
+
- `libs/spark-<name>/src/index.ts`
|
|
151
|
+
- `libs/spark-<name>/test/index.test.ts`
|
|
152
|
+
- `libs/spark-<name>/README.md`
|
|
153
|
+
|
|
154
|
+
Next: fill in `provides`, `requires`, files, tasks, and any pack-shipped skills before installing it.
|
|
155
|
+
In hybrid mode, also implement the runtime helper under `libs/spark-<name>/src/` and re-run `bun install`.
|
|
156
|
+
```
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: next-task
|
|
3
|
+
description: Pick the next best board task to work on, with the reasoning. Use when the user says "what should I do next?", "what's next?", or after `/sync-board` finishes. Do NOT use to plan a whole batch — that is `/parallel-execution`.
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Skill: next-task
|
|
9
|
+
|
|
10
|
+
## Goal
|
|
11
|
+
|
|
12
|
+
Recommend the single next task (or smallest parallel batch) the user should execute now, based on the current state of the board.
|
|
13
|
+
|
|
14
|
+
## Recommended model
|
|
15
|
+
|
|
16
|
+
Opus 4.7 or GPT-5.5. Picking the next move is a planning call.
|
|
17
|
+
|
|
18
|
+
## Inputs
|
|
19
|
+
|
|
20
|
+
Read these (required):
|
|
21
|
+
|
|
22
|
+
- `.ai/board.md`
|
|
23
|
+
- `.ai/product-spec.md`
|
|
24
|
+
|
|
25
|
+
Read if available:
|
|
26
|
+
|
|
27
|
+
- `.ai/architecture.md`
|
|
28
|
+
- `.ai/execution-log.md`
|
|
29
|
+
|
|
30
|
+
## Rules
|
|
31
|
+
|
|
32
|
+
Decision order, in priority:
|
|
33
|
+
|
|
34
|
+
1. **Unblock the core user flow first.** The user's primary action in the spec must work end-to-end before anything else.
|
|
35
|
+
2. **Prefer tasks whose dependencies are satisfied.** A task with unmet `Depends on:` is not eligible.
|
|
36
|
+
3. **Prefer tasks with clear acceptance criteria** over vague ones.
|
|
37
|
+
4. **Batch parallel-safe tasks** only when the user explicitly asked for parallelism.
|
|
38
|
+
5. **Schedule QA after every feature batch**, not at the end of the project.
|
|
39
|
+
6. **Do not pick polish before core works.** Empty states and copy come after the loop is alive.
|
|
40
|
+
|
|
41
|
+
Only recommend tasks in status `Approved for execution`. If nothing is approved, recommend `/board-review` instead.
|
|
42
|
+
|
|
43
|
+
## Output format
|
|
44
|
+
|
|
45
|
+
```md
|
|
46
|
+
## Next recommended
|
|
47
|
+
|
|
48
|
+
### Task
|
|
49
|
+
- <TASK-ID>: <title>
|
|
50
|
+
|
|
51
|
+
### Why now
|
|
52
|
+
<one line — usually one of: "unblocks core flow", "prerequisites just landed", "highest-risk path">
|
|
53
|
+
|
|
54
|
+
### Dependencies satisfied
|
|
55
|
+
- <DEP-ID>: <status> ✓
|
|
56
|
+
|
|
57
|
+
### Risk
|
|
58
|
+
<low | medium | high — and the specific risk if not low>
|
|
59
|
+
|
|
60
|
+
### Suggested execution
|
|
61
|
+
Run `/implementation-brief <TASK-ID>`, then `/execute-task <TASK-ID>`.
|
|
62
|
+
|
|
63
|
+
### Alternative
|
|
64
|
+
<one other reasonable pick + one-line reason, or "none — this is the clear next step">
|
|
65
|
+
```
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pack-add
|
|
3
|
+
description: Safely install feature packs by dry-running `spark add`, showing the plan, waiting for explicit approval, running the real install, and syncing the board. Use when the user asks to add one or more packs.
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Bash
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Skill: pack-add
|
|
10
|
+
|
|
11
|
+
## Goal
|
|
12
|
+
|
|
13
|
+
Install packs through the board-aware workflow: dry-run first, show the plan, get explicit confirmation, install, then sync the board so seeded tasks appear.
|
|
14
|
+
|
|
15
|
+
## Recommended model
|
|
16
|
+
|
|
17
|
+
Sonnet 4.6 or GPT-5 family executor.
|
|
18
|
+
|
|
19
|
+
## Inputs
|
|
20
|
+
|
|
21
|
+
Read these if present:
|
|
22
|
+
|
|
23
|
+
- `spark.config.json`
|
|
24
|
+
- `.ai/architecture.md`
|
|
25
|
+
- `.ai/board.md`
|
|
26
|
+
- `.spark/state.json`
|
|
27
|
+
|
|
28
|
+
The user must provide one or more pack names. If no pack is named, stop and ask for the pack list or recommend `/pack-resolve`.
|
|
29
|
+
|
|
30
|
+
## Rules
|
|
31
|
+
|
|
32
|
+
- Always run `spark add <pack...> --dry-run` before any real install.
|
|
33
|
+
- Present the dry-run diff or plan to the user in compact form: packs, dependencies, files, env vars, skills, and board tasks.
|
|
34
|
+
- Wait for explicit confirmation before installing. Accept only clear approval such as "yes", "approved", or "install".
|
|
35
|
+
- If the dry-run fails, stop. Do not attempt the real install.
|
|
36
|
+
- If the user declines or gives an ambiguous answer, stop with no filesystem changes.
|
|
37
|
+
- On approval, run `spark add <pack...>` with the same pack arguments as the dry-run.
|
|
38
|
+
- After a successful install, invoke `/sync-board` so seeded tasks are reflected in `.ai/board.md`.
|
|
39
|
+
- Do not mark any seeded task `Approved for execution` or `Validated`; board-review and review skills own those transitions.
|
|
40
|
+
|
|
41
|
+
## Workflow
|
|
42
|
+
|
|
43
|
+
1. Confirm the pack arguments exactly as provided.
|
|
44
|
+
2. Run `spark add <pack...> --dry-run`.
|
|
45
|
+
3. Summarize the plan and ask the user for explicit approval.
|
|
46
|
+
4. If approved, run `spark add <pack...>`.
|
|
47
|
+
5. If install succeeds, run `/sync-board`.
|
|
48
|
+
6. Report the installed packs, changed files summary, and board sync result.
|
|
49
|
+
|
|
50
|
+
## Output format
|
|
51
|
+
|
|
52
|
+
Before approval:
|
|
53
|
+
|
|
54
|
+
- Dry-run command
|
|
55
|
+
- Planned pack order
|
|
56
|
+
- Files/env/skills/tasks summary
|
|
57
|
+
- Confirmation question
|
|
58
|
+
|
|
59
|
+
After install:
|
|
60
|
+
|
|
61
|
+
- Install command
|
|
62
|
+
- Result
|
|
63
|
+
- `/sync-board` result
|
|
64
|
+
- Any follow-up tasks or blockers
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pack-resolve
|
|
3
|
+
description: Recommend the right scaffold template and concrete feature packs from `.ai/product-spec.md` and `.ai/architecture.md`. Annotates each recommended pack as `copy` or `hybrid` based on whether its manifest declares `[runtime_package]`. Use when the user asks which packs to install, wants a scaffold/preset recommendation, or scope changed after architecture. This skill only plans; it never installs.
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Bash
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Skill: pack-resolve
|
|
10
|
+
|
|
11
|
+
## Goal
|
|
12
|
+
|
|
13
|
+
Recommend a scaffold template and a concrete pack set from the current product spec and architecture. The output should be directly actionable, but this skill must not execute any install.
|
|
14
|
+
|
|
15
|
+
## Recommended model
|
|
16
|
+
|
|
17
|
+
Opus 4.7 or GPT-5.5.
|
|
18
|
+
|
|
19
|
+
## Inputs
|
|
20
|
+
|
|
21
|
+
Read these (required):
|
|
22
|
+
|
|
23
|
+
- `.ai/product-spec.md`
|
|
24
|
+
- `.ai/architecture.md`
|
|
25
|
+
|
|
26
|
+
Read these if present:
|
|
27
|
+
|
|
28
|
+
- `templates/*/template.toml`
|
|
29
|
+
- `packs/*/pack.toml`
|
|
30
|
+
- `presets/*.toml`
|
|
31
|
+
- `spark.config.json`
|
|
32
|
+
|
|
33
|
+
If the spec or architecture is missing, stop and tell the user to run `/mvp-spec` and `/architecture-cutline` first.
|
|
34
|
+
|
|
35
|
+
## Rules
|
|
36
|
+
|
|
37
|
+
- Do not run `bunx create-spark`, `spark add`, or `spark preset`. This is a planning skill only.
|
|
38
|
+
- Resolve from the registry, not from memory. Pack names must come from `packs/*/pack.toml`; templates must come from `templates/*/template.toml`.
|
|
39
|
+
- Prefer the smallest pack set that satisfies the spec and architecture. Do not install "usual SaaS" packs unless the capability is actually required.
|
|
40
|
+
- Group packs by manifest `category`, and map each pack to the capability tags it provides or satisfies.
|
|
41
|
+
- Annotate each recommended pack as either `copy` or `hybrid`. The classification is derived from the pack's `pack.toml`: presence of a `[runtime_package]` table means `hybrid`; absence means `copy`. Readers must immediately see which packs ship a versioned runtime helper they will import from versus which copy source files into the project.
|
|
42
|
+
- Respect `requires`, `conflicts`, `compatible_scaffolds`, and `requires_runtime` when recommending a set.
|
|
43
|
+
- If a needed capability has no v1 pack, name the gap explicitly and suggest `/new-pack`. Do not invent a pack name or include the missing capability in the command.
|
|
44
|
+
- If the best-fit template has `status = "planned"`, still recommend it as the destination, write `planned, not yet implemented`, suggest `nextjs` as the interim alternative, and make the final command use the executable interim path.
|
|
45
|
+
- If a preset exactly matches the recommended fresh-project pack set, the final command may be `bunx create-spark <name> --template <t> --preset <p>`. Otherwise, or when resolving for an existing project, the final command must be `spark add <pack...>` using only real pack names from the registry.
|
|
46
|
+
- The final answer must end with exactly one fenced `sh` command block and no text after it.
|
|
47
|
+
|
|
48
|
+
## Capability hints
|
|
49
|
+
|
|
50
|
+
Use these only as hints; the registry still wins:
|
|
51
|
+
|
|
52
|
+
- Paid SaaS: `db`, `auth`, `payments`, `email`, `ui-kit`, `deploy-target`.
|
|
53
|
+
- Internal tool: `db`, `auth`, `ui-kit`, optionally `local-runtime`.
|
|
54
|
+
- AI workflow: `ai-sdk`, optional `db`, optional `ui-kit`.
|
|
55
|
+
- Documentation site: `mdx-content` template capability; `astro-starlight` may be the destination but is planned in v1.
|
|
56
|
+
- Realtime/client-first sync: `sync`; if the requested capability is broader than the v1 `sync-zero` pack covers, name the gap.
|
|
57
|
+
|
|
58
|
+
## Output format
|
|
59
|
+
|
|
60
|
+
Return these sections:
|
|
61
|
+
|
|
62
|
+
- `## Scaffold` — recommended template, status, why it fits, and interim alternative if the best fit is planned.
|
|
63
|
+
- `## Packs` — grouped by category. Each bullet must be `<pack-name> (<copy|hybrid>)` followed by `provides:` and the capability tags. Example: `auth-better-auth (hybrid) — provides: auth, session, oauth`.
|
|
64
|
+
- `## Gaps` — missing capabilities and a `/new-pack` suggestion, or `none`.
|
|
65
|
+
- `## Command` — the last section, containing exactly one executable fenced `sh` block.
|
|
66
|
+
|
|
67
|
+
Do not put any other fenced command block anywhere in the response.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: parallel-execution
|
|
3
|
+
description: Decide which board tasks can safely run at the same time and group them into execution batches. Use when the user says "what can run in parallel?", "batch the board", "can I spin up multiple agents?", or after `.ai/board.md` is built. Do NOT use as a license to fan out everything — the output may be one batch.
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Write
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Skill: parallel-execution
|
|
10
|
+
|
|
11
|
+
## Goal
|
|
12
|
+
|
|
13
|
+
Read the board and produce ordered execution batches where every task inside a batch is safe to run in parallel. Conflicts are detected up front, not at merge time.
|
|
14
|
+
|
|
15
|
+
## Recommended model
|
|
16
|
+
|
|
17
|
+
Opus 4.7 or GPT-5.5. This is dependency analysis — do not rush it.
|
|
18
|
+
|
|
19
|
+
## Inputs
|
|
20
|
+
|
|
21
|
+
Read these (required):
|
|
22
|
+
|
|
23
|
+
- `.ai/board.md`
|
|
24
|
+
- `.ai/architecture.md`
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
- A batch is parallel-safe only if **no two tasks share**:
|
|
29
|
+
- the same files (likely-edit lists)
|
|
30
|
+
- the same database schema migration
|
|
31
|
+
- the same route or layout
|
|
32
|
+
- the same shared component
|
|
33
|
+
- the same migration / config file
|
|
34
|
+
- If two tasks conflict, the later one moves to the next batch.
|
|
35
|
+
- Foundations (schema, routing skeleton, theme tokens) usually go alone in Batch 1.
|
|
36
|
+
- Integration / QA / deployment tasks usually go alone in the last batch.
|
|
37
|
+
- Prefer **fewer, safer batches** over many micro-batches.
|
|
38
|
+
- It is fine for the answer to be "no parallelism — run sequentially."
|
|
39
|
+
|
|
40
|
+
## Output format
|
|
41
|
+
|
|
42
|
+
```md
|
|
43
|
+
## Execution batches
|
|
44
|
+
|
|
45
|
+
### Batch 1 — foundations
|
|
46
|
+
- <TASK-ID>: <title>
|
|
47
|
+
- <TASK-ID>: <title>
|
|
48
|
+
Why parallel-safe: <one line>
|
|
49
|
+
|
|
50
|
+
### Batch 2 — feature work
|
|
51
|
+
- ...
|
|
52
|
+
|
|
53
|
+
### Batch 3 — integration / QA
|
|
54
|
+
- ...
|
|
55
|
+
|
|
56
|
+
## Conflicts detected
|
|
57
|
+
- <TASK-A> ⇄ <TASK-B>: <shared resource>
|
|
58
|
+
|
|
59
|
+
## Recommended execution mode
|
|
60
|
+
- Sequential: <which tasks>
|
|
61
|
+
- Parallel with worktrees / subagents: <which tasks>
|
|
62
|
+
- Background: <which tasks, if any>
|
|
63
|
+
|
|
64
|
+
## Notes for the executor
|
|
65
|
+
- <e.g. "DB migration must finish before Batch 2 starts">
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
After returning the plan, recommend `/execute-task <ID>` for the first batch.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qa-verify
|
|
3
|
+
description: Verify the app actually runs and the feature works end-to-end, not just that code compiles. Use after a feature batch lands, before a demo, when the user says "does this actually work?", "run it and check", or before flipping a task to `Validated`. Do NOT use as a substitute for `/code-review` — they cover different failure modes.
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Bash
|
|
7
|
+
- Edit
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Skill: qa-verify
|
|
11
|
+
|
|
12
|
+
## Goal
|
|
13
|
+
|
|
14
|
+
Boot the app, click through the real user flow, and confirm the acceptance criteria hold when humans actually use the product. Type-checks and unit tests pass != feature works.
|
|
15
|
+
|
|
16
|
+
## Recommended model
|
|
17
|
+
|
|
18
|
+
Sonnet 4.6. This is execution, not judgment.
|
|
19
|
+
|
|
20
|
+
## Inputs
|
|
21
|
+
|
|
22
|
+
Read these (required):
|
|
23
|
+
|
|
24
|
+
- `.ai/board.md` — task(s) being verified
|
|
25
|
+
- `.ai/product-spec.md` — the core user journey
|
|
26
|
+
|
|
27
|
+
Read if useful:
|
|
28
|
+
|
|
29
|
+
- `.ai/ux-theme.md` for empty / loading / error patterns
|
|
30
|
+
- `README.md` / `package.json` for the run command
|
|
31
|
+
|
|
32
|
+
## Rules
|
|
33
|
+
|
|
34
|
+
- Always run the app. If you cannot launch it, report that explicitly — do not claim verification from reading code.
|
|
35
|
+
- Walk the **core user journey from `product-spec.md`**, not just the changed feature. Regressions in adjacent flows count.
|
|
36
|
+
- Check empty / loading / error / mobile states for every screen touched. MVPs feel broken at the seams, not the happy path.
|
|
37
|
+
- Capture exact commands and outputs so the user can reproduce.
|
|
38
|
+
- Use a real browser or device when relevant (Playwright MCP if available). Curl-ing an API endpoint is not UI verification.
|
|
39
|
+
|
|
40
|
+
## Workflow
|
|
41
|
+
|
|
42
|
+
1. Find the run command (project README, `package.json` scripts, or ask).
|
|
43
|
+
2. Boot the app. Note the URL.
|
|
44
|
+
3. Walk the core journey step by step from the spec.
|
|
45
|
+
4. Re-walk the specific feature(s) from the task(s).
|
|
46
|
+
5. Probe empty / loading / error / mobile.
|
|
47
|
+
6. Write the report.
|
|
48
|
+
|
|
49
|
+
## Output format
|
|
50
|
+
|
|
51
|
+
```md
|
|
52
|
+
## QA verification — <TASK-ID(s)> / <feature name>
|
|
53
|
+
|
|
54
|
+
### Boot
|
|
55
|
+
- Command: `<cmd>`
|
|
56
|
+
- Result: app running at <url> | failed (<reason>)
|
|
57
|
+
|
|
58
|
+
### Core user journey (from spec)
|
|
59
|
+
- [x|✗] Step 1: <description> — <observation>
|
|
60
|
+
- [x|✗] Step 2: ...
|
|
61
|
+
|
|
62
|
+
### Feature-specific checks
|
|
63
|
+
- [x|✗] <acceptance criterion> — <observation>
|
|
64
|
+
|
|
65
|
+
### Edge states
|
|
66
|
+
- Empty state: <ok | broken | missing>
|
|
67
|
+
- Loading state: <ok | broken | missing>
|
|
68
|
+
- Error state: <ok | broken | missing>
|
|
69
|
+
- Mobile / narrow viewport: <ok | broken>
|
|
70
|
+
|
|
71
|
+
### Broken flows discovered
|
|
72
|
+
- <one-line description> — <repro steps>
|
|
73
|
+
|
|
74
|
+
### Recommended board update
|
|
75
|
+
- <TASK-ID>: review → Validated | review → In progress
|
|
76
|
+
- New tasks to add: <list or none>
|
|
77
|
+
```
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: risk-check
|
|
3
|
+
description: Detect whether the project is drifting — scope creep, architecture creep, hidden dependencies, missing tests, unclear tasks, plus stale hybrid-pack helper versions (more than two minor versions behind the latest published). Use every few sessions, when the user says "are we on track?", "is this getting out of hand?", or before a demo. The anti-overthinking and anti-feature-creep skill.
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Read
|
|
6
|
+
- Bash
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Skill: risk-check
|
|
10
|
+
|
|
11
|
+
## Goal
|
|
12
|
+
|
|
13
|
+
Be the brake. Compare the current state of the project to the spec and architecture, and call out where reality is drifting. Recommend concrete cuts.
|
|
14
|
+
|
|
15
|
+
## Recommended model
|
|
16
|
+
|
|
17
|
+
Opus 4.7 or GPT-5.5.
|
|
18
|
+
|
|
19
|
+
## Inputs
|
|
20
|
+
|
|
21
|
+
Read these (required):
|
|
22
|
+
|
|
23
|
+
- `.ai/product-spec.md`
|
|
24
|
+
- `.ai/architecture.md`
|
|
25
|
+
- `.ai/board.md`
|
|
26
|
+
- `.ai/decision-log.md` if it exists
|
|
27
|
+
- `.spark/state.json` if it exists
|
|
28
|
+
- `packs/*/pack.toml` if pack state exists and the registry is available
|
|
29
|
+
|
|
30
|
+
Sample reality:
|
|
31
|
+
|
|
32
|
+
- `git log --oneline -30`
|
|
33
|
+
- top-level directory listing
|
|
34
|
+
- list of dependencies in `package.json` / `pyproject.toml` / equivalent
|
|
35
|
+
|
|
36
|
+
## Rules
|
|
37
|
+
|
|
38
|
+
- Compare **what is in the code now** to **what the spec said**. Highlight gaps in both directions: missing must-haves, plus things built that the spec did not ask for.
|
|
39
|
+
- Treat the spec's non-goals list as a checklist of things that should NOT be present in code. Violations are creep, not features.
|
|
40
|
+
- Recommend cuts, not additions. The default fix is "remove or defer," not "build more."
|
|
41
|
+
- Distinguish **drift** (planned scope grew quietly) from **discovery** (new task properly added to the board). Discovery is fine; silent drift is not.
|
|
42
|
+
- For pack-level drift, inspect `.spark/state.json` when present. For each installed pack, determine its provided capabilities from state or from `packs/<name>/pack.toml`; if none of those capabilities are referenced in `.ai/product-spec.md` or `.ai/architecture.md`, flag it as drift.
|
|
43
|
+
- The pack-level drift recommendation is exactly: **review or revert the pack-install commit via git**. Do not suggest a CLI removal command; v1 has no pack uninstall flow.
|
|
44
|
+
- For each installed pack whose manifest declares `[runtime_package]` (hybrid pack), inspect the consumer project's `package.json` (`dependencies` + `devDependencies`) for the named helper. Compare the installed version against the latest published version on the npm registry (use `bun pm view <pkg> version` or `npm view <pkg> version` via Bash). If the installed version is more than two minor versions behind the latest, flag it under "Stale helper". A `file:` specifier counts as "local dev link" and is NOT stale.
|
|
45
|
+
|
|
46
|
+
## Checklist
|
|
47
|
+
|
|
48
|
+
- **Scope creep** — features in code that are not in `MVP feature list`, or are in `Non-goals`.
|
|
49
|
+
- **Architecture creep** — services / dependencies / abstractions beyond what `architecture.md` declared.
|
|
50
|
+
- **Pack-level drift** — installed packs whose provided capabilities are not justified by the spec or architecture.
|
|
51
|
+
- **Stale helper** — hybrid packs whose helper package is more than two minor versions behind the latest on npm.
|
|
52
|
+
- **Unclear tasks** — open board tasks without observable acceptance criteria.
|
|
53
|
+
- **Missing tests / verification** — tasks marked `Validated` with no run command or no review.
|
|
54
|
+
- **Hidden dependencies** — packages added not justified by a task or decision.
|
|
55
|
+
- **Stalled tasks** — tasks in `In progress` for more than ~2 sessions with no commits.
|
|
56
|
+
|
|
57
|
+
## Output format
|
|
58
|
+
|
|
59
|
+
```md
|
|
60
|
+
## Pack-level drift
|
|
61
|
+
- no drift detected
|
|
62
|
+
- <pack-name>: provides <capability tag(s)>; none are referenced in `.ai/product-spec.md` or `.ai/architecture.md` — **recommend: review or revert the pack-install commit via git**
|
|
63
|
+
|
|
64
|
+
## Stale helper
|
|
65
|
+
- no stale helpers
|
|
66
|
+
- <pack-name>: helper `<helper-package>` installed at <installed-version>, latest is <latest-version> — **recommend: `bun update <helper-package>`**
|
|
67
|
+
|
|
68
|
+
## Risk check
|
|
69
|
+
|
|
70
|
+
### Scope creep
|
|
71
|
+
- <thing built / in progress> — not in spec / in non-goals — **recommend: cut | defer | keep with decision log entry**
|
|
72
|
+
|
|
73
|
+
### Architecture creep
|
|
74
|
+
- <new service / dep / abstraction> — **recommend: revert | document in architecture.md**
|
|
75
|
+
|
|
76
|
+
### Unclear tasks
|
|
77
|
+
- <TASK-ID>: criteria are vague — **recommend: rewrite or send to `/board-review`**
|
|
78
|
+
|
|
79
|
+
### Hidden dependencies
|
|
80
|
+
- <package> added in <commit> — justification: <none | <task>>
|
|
81
|
+
|
|
82
|
+
### Stalled tasks
|
|
83
|
+
- <TASK-ID>: in progress since <when> — **recommend: split | unblock | drop**
|
|
84
|
+
|
|
85
|
+
### Summary
|
|
86
|
+
- Drift severity: low | medium | high
|
|
87
|
+
- Suggested next action: <one line>
|
|
88
|
+
```
|