@kennethsolomon/shipkit 3.0.6 → 3.1.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 +31 -25
- package/commands/sk/help.md +1 -1
- package/commands/sk/security-check.md +14 -0
- package/package.json +1 -1
- package/skills/sk:e2e/SKILL.md +147 -0
- package/skills/sk:frontend-design/SKILL.md +10 -4
- package/skills/sk:lint/SKILL.md +49 -4
- package/skills/sk:perf/SKILL.md +21 -0
- package/skills/sk:review/SKILL.md +33 -2
- package/skills/sk:setup-claude/SKILL.md +0 -1
- package/skills/sk:setup-claude/templates/CLAUDE.md.template +149 -84
- package/skills/sk:setup-claude/templates/commands/brainstorm.md.template +4 -4
- package/skills/sk:setup-claude/templates/commands/execute-plan.md.template +2 -2
- package/skills/sk:setup-claude/templates/commands/finish-feature.md.template +8 -8
- package/skills/sk:setup-claude/templates/commands/security-check.md.template +3 -3
- package/skills/sk:setup-claude/templates/commands/write-plan.md.template +1 -1
- package/skills/sk:setup-claude/templates/tasks/workflow-status.md.template +25 -22
- package/skills/sk:setup-optimizer/SKILL.md +7 -5
- package/skills/sk:test/SKILL.md +17 -0
- package/commands/sk/features.md +0 -238
- package/commands/sk/release.md +0 -72
- package/skills/sk:setup-claude/templates/commands/features.md.template +0 -238
- package/skills/sk:setup-claude/templates/commands/release.md.template +0 -74
package/commands/sk/features.md
DELETED
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: features
|
|
3
|
-
description: "Sync docs/sk:features/ specs with the current codebase. Auto-detects changed areas and updates only affected specs. Creates the spec system from scratch if it doesn't exist."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
<!-- Generated by /sk:setup-claude -->
|
|
7
|
-
|
|
8
|
-
# /sk:features
|
|
9
|
-
|
|
10
|
-
Keep feature specifications in `docs/sk:features/` in sync with the actual codebase.
|
|
11
|
-
Works with **any project** — framework-agnostic, auto-discovers source structure.
|
|
12
|
-
|
|
13
|
-
## What This Does
|
|
14
|
-
|
|
15
|
-
Maintains `docs/sk:features/` as a platform-agnostic feature specification system —
|
|
16
|
-
the single source of truth shared between web, mobile, and any other platform
|
|
17
|
-
that uses the same backend. Each spec covers: DB schema, business logic, API
|
|
18
|
-
contract, permissions, edge cases, error states, web/mobile UI behavior, and
|
|
19
|
-
platform divergences.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Steps
|
|
24
|
-
|
|
25
|
-
### Step 1: Detect Project State
|
|
26
|
-
|
|
27
|
-
Check what exists:
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
ls docs/sk:features/ 2>/dev/null && echo "EXISTS" || echo "MISSING"
|
|
31
|
-
ls docs/FEATURES.md 2>/dev/null && echo "INDEX_EXISTS" || echo "INDEX_MISSING"
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
**If `docs/sk:features/` does not exist:**
|
|
35
|
-
Ask the user: "No feature specification system found. Create one from scratch?"
|
|
36
|
-
- Yes → jump to **[Create From Scratch](#create-from-scratch)** below
|
|
37
|
-
- No → stop
|
|
38
|
-
|
|
39
|
-
**If `docs/sk:features/` exists:**
|
|
40
|
-
Continue to Step 2.
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
### Step 2: Determine Update Scope
|
|
45
|
-
|
|
46
|
-
Present three options:
|
|
47
|
-
|
|
48
|
-
> **What would you like to update?**
|
|
49
|
-
> **A. Auto-detect** *(recommended)* — scan recent git changes, update only affected specs
|
|
50
|
-
> **B. Select features** — pick which specs to update from the list
|
|
51
|
-
> **C. Refresh all** — update every spec from current source code
|
|
52
|
-
|
|
53
|
-
Wait for the user's choice.
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
### Step 3A: Auto-detect Changed Features
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
git log --since="7 days ago" --name-only --pretty=format: | grep -v '^$' | sort -u
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Map changed file paths to feature specs using these rules:
|
|
64
|
-
|
|
65
|
-
1. **Read `docs/FEATURES.md`** to get the list of all spec files and their names.
|
|
66
|
-
2. For each changed file, determine which spec it belongs to:
|
|
67
|
-
- Match by **feature name similarity**: if the spec is `expenses.md`, look for changed files containing `expense` in their path.
|
|
68
|
-
- Match by **directory**: if the spec is `budgets.md`, match files under any `budgets/` or `budget/` directory.
|
|
69
|
-
- Match by **schema files**: if any migration file, `schema.sql`, `schema.prisma`, `database.ts`, or similar schema file changed → mark ALL specs as potentially affected (schema changes ripple everywhere).
|
|
70
|
-
3. Deduplicate the affected spec list.
|
|
71
|
-
4. Report which specs will be updated and ask for confirmation.
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
### Step 3B: User Selects Features
|
|
76
|
-
|
|
77
|
-
List all `.md` files in `docs/sk:features/` (excluding `_template.md`).
|
|
78
|
-
Let the user pick which ones to update.
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
### Step 3C: Refresh All
|
|
83
|
-
|
|
84
|
-
Set update list = all `.md` files in `docs/sk:features/` (excluding `_template.md`).
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
### Step 4: Update Each Affected Spec
|
|
89
|
-
|
|
90
|
-
For each spec file to update, follow this sequence:
|
|
91
|
-
|
|
92
|
-
#### 4a. Read the existing spec
|
|
93
|
-
Understand its current content and section structure.
|
|
94
|
-
|
|
95
|
-
#### 4b. Discover relevant source files
|
|
96
|
-
|
|
97
|
-
Use a three-step lookup — no hardcoded paths:
|
|
98
|
-
|
|
99
|
-
1. **Name-based search**: the feature name from the spec filename (e.g., `expenses.md` → feature name `expenses`). Search the repo:
|
|
100
|
-
```bash
|
|
101
|
-
# Find files whose name contains the feature keyword
|
|
102
|
-
find . -type f \( -name "*expense*" -o -name "*expenses*" \) \
|
|
103
|
-
! -path "*/node_modules/*" ! -path "*/.git/*" ! -path "*/docs/*" \
|
|
104
|
-
2>/dev/null | head -30
|
|
105
|
-
```
|
|
106
|
-
Adjust the keyword to match the feature name.
|
|
107
|
-
|
|
108
|
-
2. **Related Docs in spec**: read the `## Related Docs` section of the existing spec — it lists previously referenced files. Read those files too.
|
|
109
|
-
|
|
110
|
-
3. **DB schema hint**: read the `## Database Schema` section — it names tables. Search migrations and schema files for those table names.
|
|
111
|
-
|
|
112
|
-
#### 4c. Read the source files
|
|
113
|
-
Read all discovered source files to understand the current implementation.
|
|
114
|
-
|
|
115
|
-
#### 4d. Identify what changed
|
|
116
|
-
Compare the current source code against what the spec describes:
|
|
117
|
-
- New or removed DB columns / tables / constraints
|
|
118
|
-
- Changed business logic rules or state transitions
|
|
119
|
-
- New/changed API payloads or query patterns
|
|
120
|
-
- Updated permission keys or tier requirements
|
|
121
|
-
- New edge cases, error codes, or recovery paths
|
|
122
|
-
|
|
123
|
-
#### 4e. Update only changed sections
|
|
124
|
-
Rewrite only the sections that are out of date. **Preserve all unchanged sections verbatim.**
|
|
125
|
-
Update the `> Status` block if the implementation status on either platform changed.
|
|
126
|
-
|
|
127
|
-
---
|
|
128
|
-
|
|
129
|
-
### Step 5: Handle New Features
|
|
130
|
-
|
|
131
|
-
If source code has a clear new feature (new hook, new route group, new major component) with no corresponding spec:
|
|
132
|
-
|
|
133
|
-
1. Create `docs/sk:features/<feature-name>.md` using `docs/sk:features/_template.md` as base.
|
|
134
|
-
If `_template.md` doesn't exist, use this 11-section structure:
|
|
135
|
-
```
|
|
136
|
-
Status → Overview → Database Schema → Business Logic → API Contract
|
|
137
|
-
→ Permissions & Access Control → Edge Cases → Error States
|
|
138
|
-
→ UI/UX Behavior (### Web + ### Mobile) → Platform Notes → Related Docs
|
|
139
|
-
```
|
|
140
|
-
2. Fill all 11 sections from current source code.
|
|
141
|
-
3. Add the new spec to `docs/FEATURES.md` under the appropriate section.
|
|
142
|
-
|
|
143
|
-
---
|
|
144
|
-
|
|
145
|
-
### Step 6: Update Master Index
|
|
146
|
-
|
|
147
|
-
Review `docs/FEATURES.md`:
|
|
148
|
-
- Add links for any new specs
|
|
149
|
-
- Update status columns (Web / Mobile) if implementation status changed
|
|
150
|
-
- Update any tier/feature tables if permissions changed
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
### Step 7: Report and Commit
|
|
155
|
-
|
|
156
|
-
Show a summary:
|
|
157
|
-
- ✅ **Updated**: `spec-name.md` — what changed (1 sentence each)
|
|
158
|
-
- ➕ **Added**: any new spec files
|
|
159
|
-
- ⏭️ **Skipped**: specs with no detected changes
|
|
160
|
-
|
|
161
|
-
Ask: **"Commit the updated specs?"**
|
|
162
|
-
- Yes → stage only files under `docs/` and commit:
|
|
163
|
-
`docs(features): update feature specs to reflect current implementation`
|
|
164
|
-
- No → leave changes unstaged for the user to review
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
## Create From Scratch
|
|
169
|
-
|
|
170
|
-
When `docs/sk:features/` doesn't exist, discover and document all features:
|
|
171
|
-
|
|
172
|
-
### Discovery Phase
|
|
173
|
-
|
|
174
|
-
1. **Detect source structure** — find where feature logic lives:
|
|
175
|
-
```bash
|
|
176
|
-
# Look for hooks, services, controllers, models, routes
|
|
177
|
-
ls src/ lib/ app/ 2>/dev/null
|
|
178
|
-
find . -maxdepth 4 -type f \
|
|
179
|
-
\( -name "use-*.ts" -o -name "use-*.js" \
|
|
180
|
-
-o -name "*.service.ts" -o -name "*.controller.ts" \
|
|
181
|
-
-o -name "*.model.ts" -o -name "*.router.ts" \) \
|
|
182
|
-
! -path "*/node_modules/*" ! -path "*/.git/*" 2>/dev/null | head -50
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
2. **Detect schema files** — migrations, ORM schemas:
|
|
186
|
-
```bash
|
|
187
|
-
find . -maxdepth 5 \
|
|
188
|
-
\( -name "schema.sql" -o -name "*.schema.prisma" \
|
|
189
|
-
-o -name "database.ts" -o -name "*.migration.*" \) \
|
|
190
|
-
! -path "*/node_modules/*" ! -path "*/.git/*" 2>/dev/null
|
|
191
|
-
ls supabase/migrations/ 2>/dev/null | tail -10
|
|
192
|
-
ls prisma/ 2>/dev/null
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
3. **Identify feature domains** from the discovered files — group related files into named features.
|
|
196
|
-
|
|
197
|
-
4. **Report discovered features** and ask the user to confirm/adjust the list before creating anything.
|
|
198
|
-
|
|
199
|
-
### Creation Phase
|
|
200
|
-
|
|
201
|
-
For each confirmed feature:
|
|
202
|
-
1. Read all relevant source files.
|
|
203
|
-
2. Create `docs/sk:features/<feature-name>.md` with all 11 sections — based entirely on source code.
|
|
204
|
-
|
|
205
|
-
Also create:
|
|
206
|
-
- `docs/FEATURES.md` — master index with:
|
|
207
|
-
- How-to-use section (web path + mobile path via `../project-name/docs/`)
|
|
208
|
-
- Feature table grouped by domain
|
|
209
|
-
- Tier/subscription overview (if the project has tiers)
|
|
210
|
-
- `docs/sk:features/_template.md` — 11-section template for future specs
|
|
211
|
-
|
|
212
|
-
Commit: `docs: add feature specification system`
|
|
213
|
-
|
|
214
|
-
---
|
|
215
|
-
|
|
216
|
-
## Quality Rules (Always Apply)
|
|
217
|
-
|
|
218
|
-
- **Source-verified only** — every claim must be findable in source code; never invent behavior
|
|
219
|
-
- **No placeholders** — no `// TODO`, no `false // will be computed`, no assumed values
|
|
220
|
-
- **Surgical updates** — only rewrite what changed; preserve unchanged sections verbatim
|
|
221
|
-
- **Numeric JSX coercion** — when documenting frontend behavior, note `!!value` (not `value &&`) for numerics to avoid rendering `0` as text in React/React Native
|
|
222
|
-
- **Local date, not UTC** — for any time-bounded query (current month, today, etc.), document that implementations must use local `new Date()`, not `toISOString()` which returns UTC and causes off-by-one for users in non-UTC timezones
|
|
223
|
-
- **All 11 sections required** — mark "N/A" only if genuinely not applicable
|
|
224
|
-
|
|
225
|
-
## Source Discovery Heuristics (Reference)
|
|
226
|
-
|
|
227
|
-
When locating source files for a feature named `<name>`:
|
|
228
|
-
|
|
229
|
-
| What to look for | Search pattern |
|
|
230
|
-
|---|---|
|
|
231
|
-
| Hooks / composables | `use-<name>.*`, `use<Name>.*` |
|
|
232
|
-
| Components | directories or files matching `<name>/`, `*<name>*` |
|
|
233
|
-
| API routes / controllers | `<name>.route.*`, `<name>.controller.*`, `api/<name>/` |
|
|
234
|
-
| Services / repositories | `<name>.service.*`, `<name>.repo.*` |
|
|
235
|
-
| DB schema | `migrations/` containing table name, `schema.prisma`, `database.ts` |
|
|
236
|
-
| Tests | `<name>.test.*`, `<name>.spec.*` |
|
|
237
|
-
|
|
238
|
-
These are starting points — read broadly and verify before updating any section.
|
package/commands/sk/release.md
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: "Automate releases: bump version, update CHANGELOG, create tag, push to GitHub. Use --android and/or --ios flags for App Store / Play Store readiness audit."
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
<!-- Generated by /sk:setup-claude -->
|
|
6
|
-
|
|
7
|
-
# /sk:release
|
|
8
|
-
|
|
9
|
-
Automate the release process for your project. Supports optional mobile store submission review.
|
|
10
|
-
|
|
11
|
-
## Usage
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
/sk:release # Git release only
|
|
15
|
-
/sk:release --android # Git release + Play Store audit
|
|
16
|
-
/sk:release --ios # Git release + App Store audit
|
|
17
|
-
/sk:release --android --ios # Git release + both store audits
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
## Hard Rules
|
|
21
|
-
|
|
22
|
-
- **DO NOT** release without reviewing CHANGELOG.md changes
|
|
23
|
-
- **DO NOT** proceed if CHANGELOG.md has no [Unreleased] section
|
|
24
|
-
- You **must** have a git remote origin (GitHub, GitLab, etc.)
|
|
25
|
-
- Version format must follow semantic versioning (e.g., v1.0.0, v0.2.0-beta)
|
|
26
|
-
- When `--android` or `--ios` flags are present, **always run the store audit after the git release**
|
|
27
|
-
|
|
28
|
-
## Steps
|
|
29
|
-
|
|
30
|
-
1. **Parse flags** — Check for `--android` and/or `--ios` in the user's invocation.
|
|
31
|
-
|
|
32
|
-
2. **Verify CHANGELOG.md** — Check that the [Unreleased] section has the changes you want to release. If not, update CHANGELOG.md first and commit.
|
|
33
|
-
|
|
34
|
-
3. **Run the release script** — This will:
|
|
35
|
-
- Auto-detect: project name, current version, GitHub URL
|
|
36
|
-
- Prompt for: new version number
|
|
37
|
-
- Suggest: release title based on changes
|
|
38
|
-
- Update: CHANGELOG.md (move [Unreleased] -> [Version])
|
|
39
|
-
- Update: version in CLAUDE.md (if it has a Version line)
|
|
40
|
-
- Create: git commit with release message
|
|
41
|
-
- Create: annotated git tag
|
|
42
|
-
- Push: tag to GitHub (with confirmation at each step)
|
|
43
|
-
|
|
44
|
-
4. **Complete the release on GitHub** — The script will show you the GitHub releases link. Go there and:
|
|
45
|
-
- Click "Create release from tag"
|
|
46
|
-
- Use the suggested title
|
|
47
|
-
- Copy the changelog section as release notes
|
|
48
|
-
- Publish the release
|
|
49
|
-
|
|
50
|
-
5. **(If --android or --ios)** **Run Store Readiness Audit** — The release skill will:
|
|
51
|
-
- Auto-detect the mobile framework (Expo, React Native, Flutter, native, Capacitor)
|
|
52
|
-
- Detect if this is a first-time submission or an update
|
|
53
|
-
- Walk through every item in the store checklist, checking config files
|
|
54
|
-
- Report status for each item: PASS / FAIL / WARN / MANUAL CHECK NEEDED
|
|
55
|
-
- Propose fixes for config issues (with your approval)
|
|
56
|
-
- Guide you through manual steps (screenshots, store listing, etc.)
|
|
57
|
-
- Present a summary report with next steps and build/submit commands
|
|
58
|
-
|
|
59
|
-
## When Done
|
|
60
|
-
|
|
61
|
-
> "Release {version} completed! Check GitHub to finalize the release."
|
|
62
|
-
|
|
63
|
-
If store flags were used:
|
|
64
|
-
> "Store readiness audit complete. See the summary report above for remaining action items."
|
|
65
|
-
|
|
66
|
-
## Notes
|
|
67
|
-
|
|
68
|
-
- Each step (commit, tag, push) requires your confirmation
|
|
69
|
-
- You can skip any step and do it manually later
|
|
70
|
-
- The script works with any project type: Node, Python, Go, Rust, etc.
|
|
71
|
-
- Requires: CHANGELOG.md file with [Unreleased] section
|
|
72
|
-
- Store audits support: Expo, React Native, Flutter, native Android/iOS, Capacitor/Ionic, .NET MAUI
|
|
@@ -1,238 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: features
|
|
3
|
-
description: "Sync docs/features/ specs with the current codebase. Auto-detects changed areas and updates only affected specs. Creates the spec system from scratch if it doesn't exist."
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
<!-- Generated by /setup-claude -->
|
|
7
|
-
|
|
8
|
-
# /features
|
|
9
|
-
|
|
10
|
-
Keep feature specifications in `docs/features/` in sync with the actual codebase.
|
|
11
|
-
Works with **any project** — framework-agnostic, auto-discovers source structure.
|
|
12
|
-
|
|
13
|
-
## What This Does
|
|
14
|
-
|
|
15
|
-
Maintains `docs/features/` as a platform-agnostic feature specification system —
|
|
16
|
-
the single source of truth shared between web, mobile, and any other platform
|
|
17
|
-
that uses the same backend. Each spec covers: DB schema, business logic, API
|
|
18
|
-
contract, permissions, edge cases, error states, web/mobile UI behavior, and
|
|
19
|
-
platform divergences.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Steps
|
|
24
|
-
|
|
25
|
-
### Step 1: Detect Project State
|
|
26
|
-
|
|
27
|
-
Check what exists:
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
ls docs/features/ 2>/dev/null && echo "EXISTS" || echo "MISSING"
|
|
31
|
-
ls docs/FEATURES.md 2>/dev/null && echo "INDEX_EXISTS" || echo "INDEX_MISSING"
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
**If `docs/features/` does not exist:**
|
|
35
|
-
Ask the user: "No feature specification system found. Create one from scratch?"
|
|
36
|
-
- Yes → jump to **[Create From Scratch](#create-from-scratch)** below
|
|
37
|
-
- No → stop
|
|
38
|
-
|
|
39
|
-
**If `docs/features/` exists:**
|
|
40
|
-
Continue to Step 2.
|
|
41
|
-
|
|
42
|
-
---
|
|
43
|
-
|
|
44
|
-
### Step 2: Determine Update Scope
|
|
45
|
-
|
|
46
|
-
Present three options:
|
|
47
|
-
|
|
48
|
-
> **What would you like to update?**
|
|
49
|
-
> **A. Auto-detect** *(recommended)* — scan recent git changes, update only affected specs
|
|
50
|
-
> **B. Select features** — pick which specs to update from the list
|
|
51
|
-
> **C. Refresh all** — update every spec from current source code
|
|
52
|
-
|
|
53
|
-
Wait for the user's choice.
|
|
54
|
-
|
|
55
|
-
---
|
|
56
|
-
|
|
57
|
-
### Step 3A: Auto-detect Changed Features
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
git log --since="7 days ago" --name-only --pretty=format: | grep -v '^$' | sort -u
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Map changed file paths to feature specs using these rules:
|
|
64
|
-
|
|
65
|
-
1. **Read `docs/FEATURES.md`** to get the list of all spec files and their names.
|
|
66
|
-
2. For each changed file, determine which spec it belongs to:
|
|
67
|
-
- Match by **feature name similarity**: if the spec is `expenses.md`, look for changed files containing `expense` in their path.
|
|
68
|
-
- Match by **directory**: if the spec is `budgets.md`, match files under any `budgets/` or `budget/` directory.
|
|
69
|
-
- Match by **schema files**: if any migration file, `schema.sql`, `schema.prisma`, `database.ts`, or similar schema file changed → mark ALL specs as potentially affected (schema changes ripple everywhere).
|
|
70
|
-
3. Deduplicate the affected spec list.
|
|
71
|
-
4. Report which specs will be updated and ask for confirmation.
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
### Step 3B: User Selects Features
|
|
76
|
-
|
|
77
|
-
List all `.md` files in `docs/features/` (excluding `_template.md`).
|
|
78
|
-
Let the user pick which ones to update.
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
### Step 3C: Refresh All
|
|
83
|
-
|
|
84
|
-
Set update list = all `.md` files in `docs/features/` (excluding `_template.md`).
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
### Step 4: Update Each Affected Spec
|
|
89
|
-
|
|
90
|
-
For each spec file to update, follow this sequence:
|
|
91
|
-
|
|
92
|
-
#### 4a. Read the existing spec
|
|
93
|
-
Understand its current content and section structure.
|
|
94
|
-
|
|
95
|
-
#### 4b. Discover relevant source files
|
|
96
|
-
|
|
97
|
-
Use a three-step lookup — no hardcoded paths:
|
|
98
|
-
|
|
99
|
-
1. **Name-based search**: the feature name from the spec filename (e.g., `expenses.md` → feature name `expenses`). Search the repo:
|
|
100
|
-
```bash
|
|
101
|
-
# Find files whose name contains the feature keyword
|
|
102
|
-
find . -type f \( -name "*expense*" -o -name "*expenses*" \) \
|
|
103
|
-
! -path "*/node_modules/*" ! -path "*/.git/*" ! -path "*/docs/*" \
|
|
104
|
-
2>/dev/null | head -30
|
|
105
|
-
```
|
|
106
|
-
Adjust the keyword to match the feature name.
|
|
107
|
-
|
|
108
|
-
2. **Related Docs in spec**: read the `## Related Docs` section of the existing spec — it lists previously referenced files. Read those files too.
|
|
109
|
-
|
|
110
|
-
3. **DB schema hint**: read the `## Database Schema` section — it names tables. Search migrations and schema files for those table names.
|
|
111
|
-
|
|
112
|
-
#### 4c. Read the source files
|
|
113
|
-
Read all discovered source files to understand the current implementation.
|
|
114
|
-
|
|
115
|
-
#### 4d. Identify what changed
|
|
116
|
-
Compare the current source code against what the spec describes:
|
|
117
|
-
- New or removed DB columns / tables / constraints
|
|
118
|
-
- Changed business logic rules or state transitions
|
|
119
|
-
- New/changed API payloads or query patterns
|
|
120
|
-
- Updated permission keys or tier requirements
|
|
121
|
-
- New edge cases, error codes, or recovery paths
|
|
122
|
-
|
|
123
|
-
#### 4e. Update only changed sections
|
|
124
|
-
Rewrite only the sections that are out of date. **Preserve all unchanged sections verbatim.**
|
|
125
|
-
Update the `> Status` block if the implementation status on either platform changed.
|
|
126
|
-
|
|
127
|
-
---
|
|
128
|
-
|
|
129
|
-
### Step 5: Handle New Features
|
|
130
|
-
|
|
131
|
-
If source code has a clear new feature (new hook, new route group, new major component) with no corresponding spec:
|
|
132
|
-
|
|
133
|
-
1. Create `docs/features/<feature-name>.md` using `docs/features/_template.md` as base.
|
|
134
|
-
If `_template.md` doesn't exist, use this 11-section structure:
|
|
135
|
-
```
|
|
136
|
-
Status → Overview → Database Schema → Business Logic → API Contract
|
|
137
|
-
→ Permissions & Access Control → Edge Cases → Error States
|
|
138
|
-
→ UI/UX Behavior (### Web + ### Mobile) → Platform Notes → Related Docs
|
|
139
|
-
```
|
|
140
|
-
2. Fill all 11 sections from current source code.
|
|
141
|
-
3. Add the new spec to `docs/FEATURES.md` under the appropriate section.
|
|
142
|
-
|
|
143
|
-
---
|
|
144
|
-
|
|
145
|
-
### Step 6: Update Master Index
|
|
146
|
-
|
|
147
|
-
Review `docs/FEATURES.md`:
|
|
148
|
-
- Add links for any new specs
|
|
149
|
-
- Update status columns (Web / Mobile) if implementation status changed
|
|
150
|
-
- Update any tier/feature tables if permissions changed
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
### Step 7: Report and Commit
|
|
155
|
-
|
|
156
|
-
Show a summary:
|
|
157
|
-
- ✅ **Updated**: `spec-name.md` — what changed (1 sentence each)
|
|
158
|
-
- ➕ **Added**: any new spec files
|
|
159
|
-
- ⏭️ **Skipped**: specs with no detected changes
|
|
160
|
-
|
|
161
|
-
Ask: **"Commit the updated specs?"**
|
|
162
|
-
- Yes → stage only files under `docs/` and commit:
|
|
163
|
-
`docs(features): update feature specs to reflect current implementation`
|
|
164
|
-
- No → leave changes unstaged for the user to review
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
## Create From Scratch
|
|
169
|
-
|
|
170
|
-
When `docs/features/` doesn't exist, discover and document all features:
|
|
171
|
-
|
|
172
|
-
### Discovery Phase
|
|
173
|
-
|
|
174
|
-
1. **Detect source structure** — find where feature logic lives:
|
|
175
|
-
```bash
|
|
176
|
-
# Look for hooks, services, controllers, models, routes
|
|
177
|
-
ls src/ lib/ app/ 2>/dev/null
|
|
178
|
-
find . -maxdepth 4 -type f \
|
|
179
|
-
\( -name "use-*.ts" -o -name "use-*.js" \
|
|
180
|
-
-o -name "*.service.ts" -o -name "*.controller.ts" \
|
|
181
|
-
-o -name "*.model.ts" -o -name "*.router.ts" \) \
|
|
182
|
-
! -path "*/node_modules/*" ! -path "*/.git/*" 2>/dev/null | head -50
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
2. **Detect schema files** — migrations, ORM schemas:
|
|
186
|
-
```bash
|
|
187
|
-
find . -maxdepth 5 \
|
|
188
|
-
\( -name "schema.sql" -o -name "*.schema.prisma" \
|
|
189
|
-
-o -name "database.ts" -o -name "*.migration.*" \) \
|
|
190
|
-
! -path "*/node_modules/*" ! -path "*/.git/*" 2>/dev/null
|
|
191
|
-
ls supabase/migrations/ 2>/dev/null | tail -10
|
|
192
|
-
ls prisma/ 2>/dev/null
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
3. **Identify feature domains** from the discovered files — group related files into named features.
|
|
196
|
-
|
|
197
|
-
4. **Report discovered features** and ask the user to confirm/adjust the list before creating anything.
|
|
198
|
-
|
|
199
|
-
### Creation Phase
|
|
200
|
-
|
|
201
|
-
For each confirmed feature:
|
|
202
|
-
1. Read all relevant source files.
|
|
203
|
-
2. Create `docs/features/<feature-name>.md` with all 11 sections — based entirely on source code.
|
|
204
|
-
|
|
205
|
-
Also create:
|
|
206
|
-
- `docs/FEATURES.md` — master index with:
|
|
207
|
-
- How-to-use section (web path + mobile path via `../project-name/docs/`)
|
|
208
|
-
- Feature table grouped by domain
|
|
209
|
-
- Tier/subscription overview (if the project has tiers)
|
|
210
|
-
- `docs/features/_template.md` — 11-section template for future specs
|
|
211
|
-
|
|
212
|
-
Commit: `docs: add feature specification system`
|
|
213
|
-
|
|
214
|
-
---
|
|
215
|
-
|
|
216
|
-
## Quality Rules (Always Apply)
|
|
217
|
-
|
|
218
|
-
- **Source-verified only** — every claim must be findable in source code; never invent behavior
|
|
219
|
-
- **No placeholders** — no `// TODO`, no `false // will be computed`, no assumed values
|
|
220
|
-
- **Surgical updates** — only rewrite what changed; preserve unchanged sections verbatim
|
|
221
|
-
- **Numeric JSX coercion** — when documenting frontend behavior, note `!!value` (not `value &&`) for numerics to avoid rendering `0` as text in React/React Native
|
|
222
|
-
- **Local date, not UTC** — for any time-bounded query (current month, today, etc.), document that implementations must use local `new Date()`, not `toISOString()` which returns UTC and causes off-by-one for users in non-UTC timezones
|
|
223
|
-
- **All 11 sections required** — mark "N/A" only if genuinely not applicable
|
|
224
|
-
|
|
225
|
-
## Source Discovery Heuristics (Reference)
|
|
226
|
-
|
|
227
|
-
When locating source files for a feature named `<name>`:
|
|
228
|
-
|
|
229
|
-
| What to look for | Search pattern |
|
|
230
|
-
|---|---|
|
|
231
|
-
| Hooks / composables | `use-<name>.*`, `use<Name>.*` |
|
|
232
|
-
| Components | directories or files matching `<name>/`, `*<name>*` |
|
|
233
|
-
| API routes / controllers | `<name>.route.*`, `<name>.controller.*`, `api/<name>/` |
|
|
234
|
-
| Services / repositories | `<name>.service.*`, `<name>.repo.*` |
|
|
235
|
-
| DB schema | `migrations/` containing table name, `schema.prisma`, `database.ts` |
|
|
236
|
-
| Tests | `<name>.test.*`, `<name>.spec.*` |
|
|
237
|
-
|
|
238
|
-
These are starting points — read broadly and verify before updating any section.
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: "Automate releases: bump version, update CHANGELOG, create tag, push to GitHub. Use --android and/or --ios flags for App Store / Play Store readiness audit."
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
<!-- Generated by /setup-claude -->
|
|
6
|
-
|
|
7
|
-
# /release
|
|
8
|
-
|
|
9
|
-
**Workflow:** Read → Explore → Design → Accessibility → Plan → Branch → Migrate → Write Tests → Implement → Lint → Verify Tests → Security → Performance → Review → Finalize → **Release**
|
|
10
|
-
|
|
11
|
-
Automate the release process for your project. Supports optional mobile store submission review.
|
|
12
|
-
|
|
13
|
-
## Usage
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
/release # Git release only
|
|
17
|
-
/release --android # Git release + Play Store audit
|
|
18
|
-
/release --ios # Git release + App Store audit
|
|
19
|
-
/release --android --ios # Git release + both store audits
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Hard Rules
|
|
23
|
-
|
|
24
|
-
- **DO NOT** release without reviewing CHANGELOG.md changes
|
|
25
|
-
- **DO NOT** proceed if CHANGELOG.md has no [Unreleased] section
|
|
26
|
-
- You **must** have a git remote origin (GitHub, GitLab, etc.)
|
|
27
|
-
- Version format must follow semantic versioning (e.g., v1.0.0, v0.2.0-beta)
|
|
28
|
-
- When `--android` or `--ios` flags are present, **always run the store audit after the git release**
|
|
29
|
-
|
|
30
|
-
## Steps
|
|
31
|
-
|
|
32
|
-
1. **Parse flags** — Check for `--android` and/or `--ios` in the user's invocation.
|
|
33
|
-
|
|
34
|
-
2. **Verify CHANGELOG.md** — Check that the [Unreleased] section has the changes you want to release. If not, update CHANGELOG.md first and commit.
|
|
35
|
-
|
|
36
|
-
3. **Run the release script** — This will:
|
|
37
|
-
- Auto-detect: project name, current version, GitHub URL
|
|
38
|
-
- Prompt for: new version number
|
|
39
|
-
- Suggest: release title based on changes
|
|
40
|
-
- Update: CHANGELOG.md (move [Unreleased] -> [Version])
|
|
41
|
-
- Update: version in CLAUDE.md (if it has a Version line)
|
|
42
|
-
- Create: git commit with release message
|
|
43
|
-
- Create: annotated git tag
|
|
44
|
-
- Push: tag to GitHub (with confirmation at each step)
|
|
45
|
-
|
|
46
|
-
4. **Complete the release on GitHub** — The script will show you the GitHub releases link. Go there and:
|
|
47
|
-
- Click "Create release from tag"
|
|
48
|
-
- Use the suggested title
|
|
49
|
-
- Copy the changelog section as release notes
|
|
50
|
-
- Publish the release
|
|
51
|
-
|
|
52
|
-
5. **(If --android or --ios)** **Run Store Readiness Audit** — The release skill will:
|
|
53
|
-
- Auto-detect the mobile framework (Expo, React Native, Flutter, native, Capacitor)
|
|
54
|
-
- Detect if this is a first-time submission or an update
|
|
55
|
-
- Walk through every item in the store checklist, checking config files
|
|
56
|
-
- Report status for each item: PASS / FAIL / WARN / MANUAL CHECK NEEDED
|
|
57
|
-
- Propose fixes for config issues (with your approval)
|
|
58
|
-
- Guide you through manual steps (screenshots, store listing, etc.)
|
|
59
|
-
- Present a summary report with next steps and build/submit commands
|
|
60
|
-
|
|
61
|
-
## When Done
|
|
62
|
-
|
|
63
|
-
> "Release {version} completed! Check GitHub to finalize the release."
|
|
64
|
-
|
|
65
|
-
If store flags were used:
|
|
66
|
-
> "Store readiness audit complete. See the summary report above for remaining action items."
|
|
67
|
-
|
|
68
|
-
## Notes
|
|
69
|
-
|
|
70
|
-
- Each step (commit, tag, push) requires your confirmation
|
|
71
|
-
- You can skip any step and do it manually later
|
|
72
|
-
- The script works with any project type: Node, Python, Go, Rust, etc.
|
|
73
|
-
- Requires: CHANGELOG.md file with [Unreleased] section
|
|
74
|
-
- Store audits support: Expo, React Native, Flutter, native Android/iOS, Capacitor/Ionic, .NET MAUI
|