@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.
Files changed (54) hide show
  1. package/.claude/skills/architecture-cutline/SKILL.md +96 -0
  2. package/.claude/skills/board-review/SKILL.md +77 -0
  3. package/.claude/skills/code-review/SKILL.md +76 -0
  4. package/.claude/skills/execute-task/SKILL.md +80 -0
  5. package/.claude/skills/idea-sharpen/SKILL.md +65 -0
  6. package/.claude/skills/implementation-brief/SKILL.md +87 -0
  7. package/.claude/skills/mvp-board/SKILL.md +95 -0
  8. package/.claude/skills/mvp-grill/SKILL.md +60 -0
  9. package/.claude/skills/mvp-spec/SKILL.md +78 -0
  10. package/.claude/skills/new-pack/SKILL.md +156 -0
  11. package/.claude/skills/next-task/SKILL.md +65 -0
  12. package/.claude/skills/pack-add/SKILL.md +64 -0
  13. package/.claude/skills/pack-resolve/SKILL.md +67 -0
  14. package/.claude/skills/parallel-execution/SKILL.md +68 -0
  15. package/.claude/skills/qa-verify/SKILL.md +77 -0
  16. package/.claude/skills/risk-check/SKILL.md +88 -0
  17. package/.claude/skills/sync-board/SKILL.md +76 -0
  18. package/.claude/skills/ux-theme/SKILL.md +93 -0
  19. package/.codex/skills/architecture-cutline/SKILL.md +94 -0
  20. package/.codex/skills/board-review/SKILL.md +75 -0
  21. package/.codex/skills/code-review/SKILL.md +73 -0
  22. package/.codex/skills/execute-task/SKILL.md +76 -0
  23. package/.codex/skills/idea-sharpen/SKILL.md +63 -0
  24. package/.codex/skills/implementation-brief/SKILL.md +85 -0
  25. package/.codex/skills/mvp-board/SKILL.md +93 -0
  26. package/.codex/skills/mvp-grill/SKILL.md +58 -0
  27. package/.codex/skills/mvp-spec/SKILL.md +76 -0
  28. package/.codex/skills/new-pack/SKILL.md +153 -0
  29. package/.codex/skills/next-task/SKILL.md +64 -0
  30. package/.codex/skills/pack-add/SKILL.md +62 -0
  31. package/.codex/skills/pack-resolve/SKILL.md +65 -0
  32. package/.codex/skills/parallel-execution/SKILL.md +66 -0
  33. package/.codex/skills/qa-verify/SKILL.md +74 -0
  34. package/.codex/skills/risk-check/SKILL.md +86 -0
  35. package/.codex/skills/sync-board/SKILL.md +72 -0
  36. package/.codex/skills/ux-theme/SKILL.md +91 -0
  37. package/package.json +8 -5
  38. package/packs/README.md +22 -24
  39. package/packs/ai-anthropic/files/lib/anthropic.ts +46 -3
  40. package/packs/ai-anthropic/pack.toml +2 -3
  41. package/packs/auth-better-auth/files/app/api/auth/[...all]/route.ts +2 -2
  42. package/packs/auth-better-auth/files/lib/auth.ts +40 -1
  43. package/packs/auth-better-auth/pack.toml +1 -5
  44. package/packs/auth-better-auth-pg/files/app/api/auth/[...all]/route.ts +2 -2
  45. package/packs/auth-better-auth-pg/files/lib/auth.ts +40 -1
  46. package/packs/auth-better-auth-pg/pack.toml +1 -5
  47. package/packs/payments-stripe/files/lib/stripe.ts +104 -6
  48. package/packs/payments-stripe/pack.toml +1 -5
  49. package/packs/sync-zero/files/components/ZeroProvider.tsx +11 -1
  50. package/packs/sync-zero/files/lib/zero/client.ts +3 -3
  51. package/packs/sync-zero/files/lib/zero/schema.ts +15 -2
  52. package/packs/sync-zero/pack.toml +0 -4
  53. package/scripts/sync-skills.ts +223 -0
  54. /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
+ ```