specweave 1.0.181 → 1.0.183
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.md +105 -63
- package/dist/src/core/lazy-loading/official-plugin-manager.d.ts.map +1 -1
- package/dist/src/core/lazy-loading/official-plugin-manager.js +16 -0
- package/dist/src/core/lazy-loading/official-plugin-manager.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/scripts/lsp-check.sh +80 -23
- package/plugins/specweave-mobile/skills/native-modules/SKILL.md +116 -0
package/CLAUDE.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- SW:META template="claude" version="1.0.
|
|
1
|
+
<!-- SW:META template="claude" version="1.0.182" sections="header,start,autodetect,metarule,rules,workflow,reflect,context,structure,taskformat,secrets,syncing,testing,tdd,api,limits,troubleshooting,lazyloading,principles,linking,mcp,auto,docs" -->
|
|
2
2
|
|
|
3
3
|
<!-- SW:SECTION:hook-priority version="1.0.171" -->
|
|
4
4
|
## ⛔ ABSOLUTE PRIORITY: Hook Instructions Are Mandatory
|
|
@@ -33,7 +33,7 @@ If hook says **"SKILL FIRST"** or shows a Skill tool call to make:
|
|
|
33
33
|
1. ✅ Call the Skill tool FIRST (exactly as shown in hook)
|
|
34
34
|
2. ✅ THEN invoke ADDITIONAL domain skills for each technology
|
|
35
35
|
3. ✅ THEN proceed with implementation
|
|
36
|
-
4. ✅ LSP
|
|
36
|
+
4. ✅ LSP requires setup (see LSP Setup section below)
|
|
37
37
|
|
|
38
38
|
**"SKILL FIRST" does NOT mean "only use one skill"!**
|
|
39
39
|
|
|
@@ -53,7 +53,7 @@ Hooks exist to enforce workflow discipline. If you ignore them:
|
|
|
53
53
|
**This is non-negotiable. No exceptions. No "just this once".**
|
|
54
54
|
<!-- SW:END:hook-priority -->
|
|
55
55
|
|
|
56
|
-
<!-- SW:SECTION:header version="1.0.
|
|
56
|
+
<!-- SW:SECTION:header version="1.0.182" -->
|
|
57
57
|
**Framework**: SpecWeave | **Truth**: `spec.md` + `tasks.md`
|
|
58
58
|
<!-- SW:END:header -->
|
|
59
59
|
|
|
@@ -131,16 +131,18 @@ IMPLEMENTATION PHASE:
|
|
|
131
131
|
- Stripe → sw-payments:stripe-integration
|
|
132
132
|
- Database → sw-backend:database-optimizer
|
|
133
133
|
|
|
134
|
-
CODE INTELLIGENCE (
|
|
135
|
-
LSP
|
|
136
|
-
- .cs files → csharp-lsp activates (provides diagnostics, go-to-definition)
|
|
137
|
-
- .ts/.tsx files → typescript-lsp activates (type checking, references)
|
|
138
|
-
- .py files → pyright-lsp activates (type hints, errors)
|
|
134
|
+
CODE INTELLIGENCE (LSP - REQUIRES SETUP):
|
|
135
|
+
⚠️ LSP does NOT work automatically - it requires explicit setup!
|
|
139
136
|
|
|
140
|
-
|
|
141
|
-
|
|
137
|
+
**Setup steps:**
|
|
138
|
+
1. Enable: `export ENABLE_LSP_TOOL=1` (add to ~/.zshrc or ~/.bashrc)
|
|
139
|
+
2. Add marketplace: `/plugin marketplace add boostvolt/claude-code-lsps`
|
|
140
|
+
3. Install plugin: `/plugin install vtsls@claude-code-lsps` (TypeScript)
|
|
142
141
|
|
|
143
|
-
|
|
142
|
+
**Note:** Official marketplace LSP plugins are broken (Issue #15148).
|
|
143
|
+
Use `boostvolt/claude-code-lsps` instead.
|
|
144
|
+
|
|
145
|
+
**Available LSP operations:** goToDefinition, findReferences, hover, documentSymbol, workspaceSymbol
|
|
144
146
|
```
|
|
145
147
|
|
|
146
148
|
### Understanding LSP vs Skills
|
|
@@ -150,22 +152,10 @@ CODE INTELLIGENCE (AUTOMATIC - no invocation needed):
|
|
|
150
152
|
| Type | Has SKILL.md | How to Use | Example |
|
|
151
153
|
|------|--------------|------------|---------|
|
|
152
154
|
| **Skill plugins** | ✅ Yes | `/skill-name` or `Skill({ skill: "name" })` | sw:pm, sw:architect |
|
|
153
|
-
| **LSP plugins** | ❌ No |
|
|
154
|
-
|
|
155
|
-
LSP plugins are defined in [marketplace.json](https://github.com/anthropics/claude-plugins-official) with `lspServers` config:
|
|
156
|
-
```json
|
|
157
|
-
{
|
|
158
|
-
"name": "csharp-lsp",
|
|
159
|
-
"lspServers": {
|
|
160
|
-
"csharp-ls": {
|
|
161
|
-
"command": "csharp-ls",
|
|
162
|
-
"extensionToLanguage": { ".cs": "csharp" }
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
```
|
|
155
|
+
| **LSP plugins** | ❌ No | Requires `ENABLE_LSP_TOOL=1` + working plugin | vtsls, pyright |
|
|
167
156
|
|
|
168
|
-
|
|
157
|
+
**⚠️ Official marketplace LSP plugins are broken** ([Issue #15148](https://github.com/anthropics/claude-code/issues/15148)).
|
|
158
|
+
Use `boostvolt/claude-code-lsps` marketplace instead.
|
|
169
159
|
|
|
170
160
|
### Why Auto-Activation May Not Trigger
|
|
171
161
|
|
|
@@ -191,7 +181,7 @@ Skill(sw:increment-planner) → Plan the increment
|
|
|
191
181
|
Skill(sw-frontend:frontend-architect) → React dashboard patterns
|
|
192
182
|
Skill(sw-payments:stripe-integration) → Stripe checkout flow
|
|
193
183
|
Skill(sw-backend:dotnet-backend) → .NET API patterns
|
|
194
|
-
[LSP
|
|
184
|
+
[LSP available if configured - see LSP Setup section]
|
|
195
185
|
```
|
|
196
186
|
|
|
197
187
|
### Skill Usage Checklist
|
|
@@ -199,11 +189,62 @@ Skill(sw-backend:dotnet-backend) → .NET API patterns
|
|
|
199
189
|
Before marking implementation complete, verify:
|
|
200
190
|
- [ ] Used planning skills (PM, Architect) if complex feature
|
|
201
191
|
- [ ] Used domain skills for each tech in the stack
|
|
202
|
-
- [ ] LSP
|
|
192
|
+
- [ ] LSP configured if needed (requires `ENABLE_LSP_TOOL=1` + plugin setup)
|
|
203
193
|
- [ ] Invoked skills explicitly if auto-activation didn't trigger
|
|
204
194
|
<!-- SW:END:skill-chaining -->
|
|
205
195
|
|
|
206
|
-
|
|
196
|
+
## LSP Setup (Code Intelligence)
|
|
197
|
+
|
|
198
|
+
**⚠️ LSP does NOT work automatically - requires explicit setup!**
|
|
199
|
+
|
|
200
|
+
### Prerequisites
|
|
201
|
+
|
|
202
|
+
1. **Enable LSP tool** (add to `~/.zshrc` or `~/.bashrc`):
|
|
203
|
+
```bash
|
|
204
|
+
export ENABLE_LSP_TOOL=1
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
2. **Install working marketplace** (official plugins are broken - [Issue #15148](https://github.com/anthropics/claude-code/issues/15148)):
|
|
208
|
+
```
|
|
209
|
+
/plugin marketplace add boostvolt/claude-code-lsps
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
3. **Install language plugins**:
|
|
213
|
+
```
|
|
214
|
+
/plugin install vtsls@claude-code-lsps # TypeScript/JavaScript
|
|
215
|
+
/plugin install pyright@claude-code-lsps # Python
|
|
216
|
+
/plugin install gopls@claude-code-lsps # Go
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
4. **Install language server binaries** (system-level):
|
|
220
|
+
```bash
|
|
221
|
+
npm install -g typescript-language-server typescript # TypeScript
|
|
222
|
+
pip install pyright # Python
|
|
223
|
+
go install golang.org/x/tools/gopls@latest # Go
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
5. **Restart Claude Code**
|
|
227
|
+
|
|
228
|
+
### Available LSP Operations
|
|
229
|
+
|
|
230
|
+
| Operation | Description |
|
|
231
|
+
|-----------|-------------|
|
|
232
|
+
| `goToDefinition` | Navigate to symbol definition |
|
|
233
|
+
| `findReferences` | Find all usages of a symbol |
|
|
234
|
+
| `hover` | Show type info and documentation |
|
|
235
|
+
| `documentSymbol` | List symbols in current file |
|
|
236
|
+
| `workspaceSymbol` | Search symbols across project |
|
|
237
|
+
|
|
238
|
+
### Why Official Plugins Don't Work
|
|
239
|
+
|
|
240
|
+
The official `typescript-lsp@claude-plugins-official` and similar plugins:
|
|
241
|
+
- Only contain README.md files (no config)
|
|
242
|
+
- `lspServers` configuration is never extracted from marketplace.json
|
|
243
|
+
- LSP manager initializes with 0 servers
|
|
244
|
+
|
|
245
|
+
Use `boostvolt/claude-code-lsps` until official plugins are fixed.
|
|
246
|
+
|
|
247
|
+
<!-- SW:SECTION:start version="1.0.182" -->
|
|
207
248
|
## Getting Started
|
|
208
249
|
|
|
209
250
|
**Initial increment**: `0001-project-setup` (auto-created by `specweave init`)
|
|
@@ -213,7 +254,7 @@ Before marking implementation complete, verify:
|
|
|
213
254
|
2. **Customize**: Edit spec.md and use for setup tasks
|
|
214
255
|
<!-- SW:END:start -->
|
|
215
256
|
|
|
216
|
-
<!-- SW:SECTION:autodetect version="1.0.
|
|
257
|
+
<!-- SW:SECTION:autodetect version="1.0.182" -->
|
|
217
258
|
## Auto-Detection
|
|
218
259
|
|
|
219
260
|
SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
@@ -223,7 +264,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
223
264
|
**Opt-out phrases**: "Just brainstorm first" | "Don't plan yet" | "Quick discussion" | "Let's explore ideas"
|
|
224
265
|
<!-- SW:END:autodetect -->
|
|
225
266
|
|
|
226
|
-
<!-- SW:SECTION:metarule version="1.0.
|
|
267
|
+
<!-- SW:SECTION:metarule version="1.0.182" -->
|
|
227
268
|
## Meta-Rule: Think-Before-Act
|
|
228
269
|
|
|
229
270
|
**Satisfy dependencies BEFORE dependent operations.**
|
|
@@ -234,7 +275,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
234
275
|
```
|
|
235
276
|
<!-- SW:END:metarule -->
|
|
236
277
|
|
|
237
|
-
<!-- SW:SECTION:rules version="1.0.
|
|
278
|
+
<!-- SW:SECTION:rules version="1.0.182" -->
|
|
238
279
|
## Rules
|
|
239
280
|
|
|
240
281
|
1. **Files** → `.specweave/increments/####-name/` (see Structure section for details)
|
|
@@ -245,7 +286,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
245
286
|
6. **⛔ Marketplace refresh**: Use `specweave refresh-marketplace` CLI (not `scripts/refresh-marketplace.sh`)
|
|
246
287
|
<!-- SW:END:rules -->
|
|
247
288
|
|
|
248
|
-
<!-- SW:SECTION:workflow version="1.0.
|
|
289
|
+
<!-- SW:SECTION:workflow version="1.0.182" -->
|
|
249
290
|
## Workflow
|
|
250
291
|
|
|
251
292
|
`/sw:increment "X"` → `/sw:do` → `/sw:progress` → `/sw:done 0001`
|
|
@@ -265,7 +306,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
265
306
|
**Natural language**: "Let's build X" → `/sw:increment` | "What's status?" → `/sw:progress` | "We're done" → `/sw:done` | "Ship while sleeping" → `/sw:auto`
|
|
266
307
|
<!-- SW:END:workflow -->
|
|
267
308
|
|
|
268
|
-
<!-- SW:SECTION:reflect version="1.0.
|
|
309
|
+
<!-- SW:SECTION:reflect version="1.0.182" -->
|
|
269
310
|
## Skill Memories
|
|
270
311
|
|
|
271
312
|
SpecWeave learns from corrections. Learnings saved here automatically. Edit or delete as needed.
|
|
@@ -278,15 +319,16 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
|
|
|
278
319
|
<!-- Auto-captured by SpecWeave reflect. Edit or delete as needed. -->
|
|
279
320
|
|
|
280
321
|
### Devops
|
|
281
|
-
- **2026-01-
|
|
322
|
+
- **2026-01-29**: LSP requires ENABLE_LSP_TOOL=1 env var + boostvolt/claude-code-lsps marketplace (official plugins broken)
|
|
282
323
|
|
|
283
324
|
### Logging
|
|
284
|
-
- **2026-01-
|
|
325
|
+
- **2026-01-29**: // Do NOT verify immediately - show dialog instead
|
|
285
326
|
|
|
286
327
|
### General
|
|
287
|
-
- **2026-01-
|
|
328
|
+
- **2026-01-29**: Always check for credentials FIRST (presence only - never display values
|
|
329
|
+
- **2026-01-29**: in this codebase. Then use goToDefinition to show me where it's defined.
|
|
288
330
|
|
|
289
|
-
<!-- SW:SECTION:context version="1.0.
|
|
331
|
+
<!-- SW:SECTION:context version="1.0.182" -->
|
|
290
332
|
## Context
|
|
291
333
|
|
|
292
334
|
**Before implementing**: Check ADRs at `.specweave/docs/internal/architecture/adr/`
|
|
@@ -294,7 +336,7 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
|
|
|
294
336
|
**Load context**: `/sw:context <topic>` loads relevant living docs into conversation
|
|
295
337
|
<!-- SW:END:context -->
|
|
296
338
|
|
|
297
|
-
<!-- SW:SECTION:structure version="1.0.
|
|
339
|
+
<!-- SW:SECTION:structure version="1.0.182" -->
|
|
298
340
|
## Structure
|
|
299
341
|
|
|
300
342
|
```
|
|
@@ -309,7 +351,7 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
|
|
|
309
351
|
**Everything else → subfolders**: `reports/` | `logs/` | `scripts/` | `backups/`
|
|
310
352
|
<!-- SW:END:structure -->
|
|
311
353
|
|
|
312
|
-
<!-- SW:SECTION:taskformat version="1.0.
|
|
354
|
+
<!-- SW:SECTION:taskformat version="1.0.182" -->
|
|
313
355
|
## Task Format
|
|
314
356
|
|
|
315
357
|
```markdown
|
|
@@ -319,7 +361,7 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
|
|
|
319
361
|
```
|
|
320
362
|
<!-- SW:END:taskformat -->
|
|
321
363
|
|
|
322
|
-
<!-- SW:SECTION:secrets version="1.0.
|
|
364
|
+
<!-- SW:SECTION:secrets version="1.0.182" -->
|
|
323
365
|
## Secrets Check
|
|
324
366
|
|
|
325
367
|
**BEFORE CLI tools**: Check existing config first!
|
|
@@ -333,7 +375,7 @@ gh auth status
|
|
|
333
375
|
**SECURITY**: NEVER use `grep TOKEN .env` without `-q` flag - it exposes credentials in terminal!
|
|
334
376
|
<!-- SW:END:secrets -->
|
|
335
377
|
|
|
336
|
-
<!-- SW:SECTION:syncing version="1.0.
|
|
378
|
+
<!-- SW:SECTION:syncing version="1.0.182" -->
|
|
337
379
|
## External Sync (GitHub/JIRA/ADO)
|
|
338
380
|
|
|
339
381
|
**Commands**: `/sw-github:sync {id}` (issues) | `/sw:sync-specs` (living docs only)
|
|
@@ -343,7 +385,7 @@ gh auth status
|
|
|
343
385
|
**Config**: Set `sync.github.enabled: true` + `canUpdateExternalItems: true` in config.json
|
|
344
386
|
<!-- SW:END:syncing -->
|
|
345
387
|
|
|
346
|
-
<!-- SW:SECTION:testing version="1.0.
|
|
388
|
+
<!-- SW:SECTION:testing version="1.0.182" -->
|
|
347
389
|
## Testing
|
|
348
390
|
|
|
349
391
|
BDD in tasks.md | Unit >80% | `.test.ts` (Vitest)
|
|
@@ -355,7 +397,7 @@ vi.mock('./module', () => ({ func: mockFn }));
|
|
|
355
397
|
```
|
|
356
398
|
<!-- SW:END:testing -->
|
|
357
399
|
|
|
358
|
-
<!-- SW:SECTION:tdd version="1.0.
|
|
400
|
+
<!-- SW:SECTION:tdd version="1.0.182" -->
|
|
359
401
|
## TDD Mode (Test-Driven Development)
|
|
360
402
|
|
|
361
403
|
**When `testing.defaultTestMode: "TDD"` is configured**, follow RED-GREEN-REFACTOR discipline:
|
|
@@ -416,7 +458,7 @@ When TDD is enabled, tasks include phase markers:
|
|
|
416
458
|
**Rule**: Complete dependencies BEFORE dependent tasks (RED before GREEN).
|
|
417
459
|
<!-- SW:END:tdd -->
|
|
418
460
|
|
|
419
|
-
<!-- SW:SECTION:api version="1.0.
|
|
461
|
+
<!-- SW:SECTION:api version="1.0.182" -->
|
|
420
462
|
## API Development (OpenAPI-First)
|
|
421
463
|
|
|
422
464
|
**For API projects only.** Commands: `/sw:api-docs --all` | `--openapi` | `--postman` | `--validate`
|
|
@@ -424,13 +466,13 @@ When TDD is enabled, tasks include phase markers:
|
|
|
424
466
|
Enable in config: `{"apiDocs":{"enabled":true,"openApiPath":"openapi.yaml"}}`
|
|
425
467
|
<!-- SW:END:api -->
|
|
426
468
|
|
|
427
|
-
<!-- SW:SECTION:limits version="1.0.
|
|
469
|
+
<!-- SW:SECTION:limits version="1.0.182" -->
|
|
428
470
|
## Limits
|
|
429
471
|
|
|
430
472
|
**Max 1500 lines/file** — extract before adding
|
|
431
473
|
<!-- SW:END:limits -->
|
|
432
474
|
|
|
433
|
-
<!-- SW:SECTION:troubleshooting version="1.0.
|
|
475
|
+
<!-- SW:SECTION:troubleshooting version="1.0.182" -->
|
|
434
476
|
## Troubleshooting
|
|
435
477
|
|
|
436
478
|
| Issue | Fix |
|
|
@@ -446,7 +488,7 @@ Enable in config: `{"apiDocs":{"enabled":true,"openApiPath":"openapi.yaml"}}`
|
|
|
446
488
|
| Marketplace shows 0 | Normal with auto-load; `/plugin list` shows actual |
|
|
447
489
|
<!-- SW:END:troubleshooting -->
|
|
448
490
|
|
|
449
|
-
<!-- SW:SECTION:lazyloading version="1.0.
|
|
491
|
+
<!-- SW:SECTION:lazyloading version="1.0.182" -->
|
|
450
492
|
## Plugin Auto-Loading
|
|
451
493
|
|
|
452
494
|
Plugins load automatically based on project type and keywords. Manual install if needed:
|
|
@@ -460,7 +502,7 @@ export SPECWEAVE_DISABLE_AUTO_LOAD=1 # Disable auto-load
|
|
|
460
502
|
**Token savings**: Core ~3-5K tokens vs all plugins ~60K+
|
|
461
503
|
<!-- SW:END:lazyloading -->
|
|
462
504
|
|
|
463
|
-
<!-- SW:SECTION:principles version="1.0.
|
|
505
|
+
<!-- SW:SECTION:principles version="1.0.182" -->
|
|
464
506
|
## Principles
|
|
465
507
|
|
|
466
508
|
1. **Spec-first**: `/sw:increment` before coding
|
|
@@ -469,7 +511,7 @@ export SPECWEAVE_DISABLE_AUTO_LOAD=1 # Disable auto-load
|
|
|
469
511
|
4. **Traceable**: All work → specs → ACs
|
|
470
512
|
<!-- SW:END:principles -->
|
|
471
513
|
|
|
472
|
-
<!-- SW:SECTION:linking version="1.0.
|
|
514
|
+
<!-- SW:SECTION:linking version="1.0.182" -->
|
|
473
515
|
## Bidirectional Linking
|
|
474
516
|
|
|
475
517
|
Tasks ↔ User Stories auto-linked via AC-IDs: `AC-US1-01` → `US-001`
|
|
@@ -477,7 +519,7 @@ Tasks ↔ User Stories auto-linked via AC-IDs: `AC-US1-01` → `US-001`
|
|
|
477
519
|
Task format: `**AC**: AC-US1-01, AC-US1-02` (CRITICAL for linking)
|
|
478
520
|
<!-- SW:END:linking -->
|
|
479
521
|
|
|
480
|
-
<!-- SW:SECTION:mcp version="1.0.
|
|
522
|
+
<!-- SW:SECTION:mcp version="1.0.182" -->
|
|
481
523
|
## External Services
|
|
482
524
|
|
|
483
525
|
**Priority**: CLI tools first (simpler) → MCP for complex integrations
|
|
@@ -499,7 +541,7 @@ claude mcp add --transport stdio postgres -- npx -y @modelcontextprotocol/server
|
|
|
499
541
|
MCP supports lazy-loading (auto mode) - tools load on-demand when >10% context.
|
|
500
542
|
<!-- SW:END:mcp -->
|
|
501
543
|
|
|
502
|
-
<!-- SW:SECTION:auto version="1.0.
|
|
544
|
+
<!-- SW:SECTION:auto version="1.0.182" -->
|
|
503
545
|
## Auto Mode
|
|
504
546
|
|
|
505
547
|
**Commands**: `/sw:auto` (start) | `/sw:auto-status` (check) | `/sw:cancel-auto` (emergency only)
|
|
@@ -516,7 +558,7 @@ MCP supports lazy-loading (auto mode) - tools load on-demand when >10% context.
|
|
|
516
558
|
**STOP & ASK** if: Spec conflicts | Task unnecessary | Requirement ambiguous
|
|
517
559
|
<!-- SW:END:auto -->
|
|
518
560
|
|
|
519
|
-
<!-- SW:SECTION:docs version="1.0.
|
|
561
|
+
<!-- SW:SECTION:docs version="1.0.182" -->
|
|
520
562
|
## Docs
|
|
521
563
|
|
|
522
564
|
[spec-weave.com](https://spec-weave.com)
|
|
@@ -601,16 +643,16 @@ User Stories need `**Project**: my-project` field for external sync. Each US = O
|
|
|
601
643
|
- Use `sw-backend:*` skills for .NET/Node/Python APIs
|
|
602
644
|
- Use `sw-payments:stripe-integration` for Stripe
|
|
603
645
|
|
|
604
|
-
**Code Intelligence (LSP -
|
|
605
|
-
- LSP
|
|
606
|
-
-
|
|
607
|
-
-
|
|
608
|
-
-
|
|
646
|
+
**Code Intelligence (LSP - REQUIRES SETUP):**
|
|
647
|
+
- LSP requires `ENABLE_LSP_TOOL=1` environment variable
|
|
648
|
+
- Official marketplace plugins are broken ([Issue #15148](https://github.com/anthropics/claude-code/issues/15148))
|
|
649
|
+
- Use `boostvolt/claude-code-lsps` marketplace instead
|
|
650
|
+
- Operations: goToDefinition, findReferences, hover, documentSymbol, workspaceSymbol
|
|
609
651
|
|
|
610
652
|
**Pattern:**
|
|
611
653
|
```
|
|
612
654
|
/sw:increment → PM skill → Architect skill → Implementation skills
|
|
613
|
-
(LSP
|
|
655
|
+
(LSP available if configured)
|
|
614
656
|
```
|
|
615
657
|
|
|
616
658
|
### 8. NODE_OPTIONS and VSCode Debug Mode
|
|
@@ -805,7 +847,7 @@ New plugins add more skills. Custom user skills are equally valid. To discover a
|
|
|
805
847
|
| **Security** | `sw:security` | security, OWASP, vulnerabilities |
|
|
806
848
|
| **TDD** | `sw:tdd-orchestrator` | TDD, test-driven, red-green-refactor |
|
|
807
849
|
|
|
808
|
-
**Note:** LSP
|
|
850
|
+
**Note:** LSP requires separate setup (`ENABLE_LSP_TOOL=1` + plugin installation). Official marketplace LSP plugins are currently broken - use `boostvolt/claude-code-lsps` instead.
|
|
809
851
|
|
|
810
852
|
**Plus any skills from:**
|
|
811
853
|
- Newly installed plugins
|
|
@@ -846,13 +888,13 @@ If skills don't auto-activate:
|
|
|
846
888
|
| Domain work (React, .NET, Stripe) | Let auto-activate, Skill tool if not |
|
|
847
889
|
| Architecture, security review | Usually auto-activates on keywords |
|
|
848
890
|
| Hook says "SKILL FIRST" | **Always** use Skill tool explicitly |
|
|
849
|
-
| **Code intelligence (LSP)** |
|
|
891
|
+
| **Code intelligence (LSP)** | Requires setup: `ENABLE_LSP_TOOL=1` + `boostvolt/claude-code-lsps` |
|
|
850
892
|
| Increment planning | Use PM/Architect skills for spec/plan refinement |
|
|
851
893
|
| External syncs | Commands: `/sw-github:sync` |
|
|
852
894
|
| Codebase exploration | Task tool: `subagent_type: "Explore"` |
|
|
853
895
|
| Complex planning | Task tool: `subagent_type: "Plan"` |
|
|
854
896
|
|
|
855
|
-
**IMPORTANT**: LSP
|
|
897
|
+
**IMPORTANT**: LSP requires explicit setup. Set `ENABLE_LSP_TOOL=1` and use `boostvolt/claude-code-lsps` marketplace (official plugins are broken). Once configured, LSP provides: goToDefinition, findReferences, hover, documentSymbol, workspaceSymbol.
|
|
856
898
|
|
|
857
899
|
**Reference**: See `plugins/PLUGINS-INDEX.md` for full plugin catalog with triggers.
|
|
858
900
|
|
|
@@ -1040,7 +1082,7 @@ npm run rebuild
|
|
|
1040
1082
|
| Source of truth | tasks.md + spec.md (update immediately) |
|
|
1041
1083
|
| Completion | `/sw:done` only (NEVER edit metadata.json directly) |
|
|
1042
1084
|
| **Skills** | **ALWAYS use when available** (PM, Architect, domain skills) |
|
|
1043
|
-
| **LSP** |
|
|
1085
|
+
| **LSP** | Requires `ENABLE_LSP_TOOL=1` + `boostvolt/claude-code-lsps` (official plugins broken) |
|
|
1044
1086
|
| Increment root | ONLY 4 files: spec.md, plan.md, tasks.md, metadata.json |
|
|
1045
1087
|
| Increment IDs | 🚨 Check ALL folders: `find .specweave/increments -maxdepth 2 -name "[0-9]*" \| grep -oE '[0-9]{4}E?'` |
|
|
1046
1088
|
| Reports/logs | Always to `reports/`, `logs/` subfolders |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"official-plugin-manager.d.ts","sourceRoot":"","sources":["../../../../src/core/lazy-loading/official-plugin-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;GAEG;AACH,eAAO,MAAM,gBAAgB,qCAAsC,CAAC;AAEpE;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,oDAAqD,CAAC;AAE5F;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"official-plugin-manager.d.ts","sourceRoot":"","sources":["../../../../src/core/lazy-loading/official-plugin-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AASH;;GAEG;AACH,eAAO,MAAM,gBAAgB,qCAAsC,CAAC;AAEpE;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,oDAAqD,CAAC;AAE5F;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAmItD,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,qCAAqC;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,+BAA+B;IAC/B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,uCAAuC;IACvC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,wCAAwC;IACxC,YAAY,EAAE,OAAO,CAAC;IACtB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAgBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAW7D;AAED;;GAEG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,EAAE,CAiCtD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CA6BjE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,iBAAiB,CA+CzD;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA0HvF;AAuBD;;;GAGG;AACH,wBAAsB,8BAA8B,CAClD,UAAU,EAAE,MAAM,EAClB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA2D5B;AAwBD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE5D"}
|
|
@@ -32,6 +32,22 @@ export const OFFICIAL_PLUGIN_MAP = {
|
|
|
32
32
|
// ============================================================================
|
|
33
33
|
// LSP PLUGINS (Language Server Protocol for code intelligence)
|
|
34
34
|
// ============================================================================
|
|
35
|
+
// TypeScript/JavaScript (most common - uses typescript-language-server)
|
|
36
|
+
'typescript': 'typescript-lsp',
|
|
37
|
+
'ts': 'typescript-lsp',
|
|
38
|
+
'javascript': 'typescript-lsp',
|
|
39
|
+
'js': 'typescript-lsp',
|
|
40
|
+
'react': 'typescript-lsp',
|
|
41
|
+
'nextjs': 'typescript-lsp',
|
|
42
|
+
'next.js': 'typescript-lsp',
|
|
43
|
+
'vue': 'typescript-lsp',
|
|
44
|
+
'angular': 'typescript-lsp',
|
|
45
|
+
'svelte': 'typescript-lsp',
|
|
46
|
+
'node': 'typescript-lsp',
|
|
47
|
+
'nodejs': 'typescript-lsp',
|
|
48
|
+
'express': 'typescript-lsp',
|
|
49
|
+
'nestjs': 'typescript-lsp',
|
|
50
|
+
// C#/.NET
|
|
35
51
|
'csharp': 'csharp-lsp',
|
|
36
52
|
'c#': 'csharp-lsp',
|
|
37
53
|
'.net': 'csharp-lsp',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"official-plugin-manager.js","sourceRoot":"","sources":["../../../../src/core/lazy-loading/official-plugin-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"official-plugin-manager.js","sourceRoot":"","sources":["../../../../src/core/lazy-loading/official-plugin-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.183",
|
|
4
4
|
"description": "Spec-driven development framework for Claude Code. AI-native workflow with living documentation, intelligent agents, and multilingual support (9 languages). Enterprise-grade traceability with permanent specs and temporary increments.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
# v1.0.180 - Only check DOMINANT languages (top 3 by file count, min 10 files)
|
|
11
11
|
# Prevents warning overload in large multi-repo projects
|
|
12
12
|
# v1.0.181 - REFACTOR: Extracted language configs to maintainable data structure
|
|
13
|
+
# v1.0.182 - Add plugin verification: check both binary AND Claude plugin installation
|
|
14
|
+
# Detects gap: binary present but plugin missing (AC-US4-01, AC-US4-02, AC-US4-03)
|
|
13
15
|
|
|
14
16
|
set +e # CRITICAL: Never use set -e in background workers
|
|
15
17
|
|
|
@@ -31,24 +33,29 @@ MIN_FILE_COUNT=10 # Minimum files to consider a language "dominant"
|
|
|
31
33
|
MAX_LANGUAGES=3 # Maximum languages to warn about
|
|
32
34
|
MAX_DEPTH=5 # Search depth (avoids deep node_modules)
|
|
33
35
|
|
|
36
|
+
# Claude plugin installation file
|
|
37
|
+
CLAUDE_HOME="${HOME}/.claude"
|
|
38
|
+
INSTALLED_PLUGINS_FILE="${CLAUDE_HOME}/plugins/installed_plugins.json"
|
|
39
|
+
|
|
34
40
|
# =============================================================================
|
|
35
41
|
# LANGUAGE SERVER MAPPINGS (Add new languages here!)
|
|
36
42
|
# =============================================================================
|
|
37
|
-
# Format: "Language|extensions|binaries|install_command"
|
|
43
|
+
# Format: "Language|extensions|binaries|install_command|plugin_name"
|
|
38
44
|
# - extensions: comma-separated file extensions (e.g., "ts,tsx,js,jsx")
|
|
39
45
|
# - binaries: colon-separated binaries to check (any match = installed)
|
|
40
|
-
# - install_command: command to install the language server
|
|
46
|
+
# - install_command: command to install the language server BINARY
|
|
47
|
+
# - plugin_name: Claude plugin name for LSP (e.g., typescript-lsp)
|
|
41
48
|
#
|
|
42
49
|
# To add a new language, just add a line to this array:
|
|
43
50
|
LANGUAGE_CONFIGS=(
|
|
44
|
-
"TypeScript|ts,tsx,js,jsx|typescript-language-server|npm install -g typescript-language-server typescript"
|
|
45
|
-
"Python|py|pyright-langserver:pylsp|pip install pyright"
|
|
46
|
-
"C#|cs|csharp-ls:omnisharp|dotnet tool install -g csharp-ls"
|
|
47
|
-
"Go|go|gopls|go install golang.org/x/tools/gopls@latest"
|
|
48
|
-
"Rust|rs|rust-analyzer|rustup component add rust-analyzer"
|
|
49
|
-
"Java|java|jdtls|brew install jdtls (requires JDK 17+)"
|
|
50
|
-
"PHP|php|intelephense|npm install -g intelephense"
|
|
51
|
-
"Ruby|rb|solargraph|gem install solargraph"
|
|
51
|
+
"TypeScript|ts,tsx,js,jsx|typescript-language-server|npm install -g typescript-language-server typescript|typescript-lsp"
|
|
52
|
+
"Python|py|pyright-langserver:pylsp|pip install pyright|python-lsp"
|
|
53
|
+
"C#|cs|csharp-ls:omnisharp|dotnet tool install -g csharp-ls|csharp-lsp"
|
|
54
|
+
"Go|go|gopls|go install golang.org/x/tools/gopls@latest|go-lsp"
|
|
55
|
+
"Rust|rs|rust-analyzer|rustup component add rust-analyzer|rust-lsp"
|
|
56
|
+
"Java|java|jdtls|brew install jdtls (requires JDK 17+)|java-lsp"
|
|
57
|
+
"PHP|php|intelephense|npm install -g intelephense|php-lsp"
|
|
58
|
+
"Ruby|rb|solargraph|gem install solargraph|ruby-lsp"
|
|
52
59
|
)
|
|
53
60
|
|
|
54
61
|
# =============================================================================
|
|
@@ -93,16 +100,35 @@ has_any_binary() {
|
|
|
93
100
|
return 1 # Not found
|
|
94
101
|
}
|
|
95
102
|
|
|
103
|
+
# Check if a Claude plugin is installed
|
|
104
|
+
# Reads ~/.claude/plugins/installed_plugins.json
|
|
105
|
+
is_plugin_installed() {
|
|
106
|
+
local plugin_name="$1"
|
|
107
|
+
|
|
108
|
+
# If installed_plugins.json doesn't exist, plugin is not installed
|
|
109
|
+
if [[ ! -f "$INSTALLED_PLUGINS_FILE" ]]; then
|
|
110
|
+
return 1 # Not installed
|
|
111
|
+
fi
|
|
112
|
+
|
|
113
|
+
# Check if plugin name appears in the installed plugins file
|
|
114
|
+
# Format: {"plugin_name@marketplace": {...}}
|
|
115
|
+
if grep -q "\"${plugin_name}@" "$INSTALLED_PLUGINS_FILE" 2>/dev/null; then
|
|
116
|
+
return 0 # Installed
|
|
117
|
+
fi
|
|
118
|
+
|
|
119
|
+
return 1 # Not installed
|
|
120
|
+
}
|
|
121
|
+
|
|
96
122
|
# =============================================================================
|
|
97
123
|
# MAIN LOGIC
|
|
98
124
|
# =============================================================================
|
|
99
125
|
|
|
100
126
|
declare -A LANG_COUNTS
|
|
101
|
-
declare -A LANG_INFO # "binaries|install_cmd"
|
|
127
|
+
declare -A LANG_INFO # "binaries|install_cmd|plugin_name"
|
|
102
128
|
|
|
103
129
|
# Process each language config
|
|
104
130
|
for config in "${LANGUAGE_CONFIGS[@]}"; do
|
|
105
|
-
IFS='|' read -r lang extensions binaries install_cmd <<< "$config"
|
|
131
|
+
IFS='|' read -r lang extensions binaries install_cmd plugin_name <<< "$config"
|
|
106
132
|
|
|
107
133
|
# Count files for this language
|
|
108
134
|
file_count=$(count_extensions "$extensions")
|
|
@@ -110,7 +136,7 @@ for config in "${LANGUAGE_CONFIGS[@]}"; do
|
|
|
110
136
|
# Only track languages with significant presence
|
|
111
137
|
if [[ "$file_count" -ge "$MIN_FILE_COUNT" ]]; then
|
|
112
138
|
LANG_COUNTS["$lang"]=$file_count
|
|
113
|
-
LANG_INFO["$lang"]="${binaries}|${install_cmd}"
|
|
139
|
+
LANG_INFO["$lang"]="${binaries}|${install_cmd}|${plugin_name}"
|
|
114
140
|
fi
|
|
115
141
|
done
|
|
116
142
|
|
|
@@ -119,25 +145,39 @@ TOP_LANGUAGES=($(for lang in "${!LANG_COUNTS[@]}"; do
|
|
|
119
145
|
echo "${LANG_COUNTS[$lang]} $lang"
|
|
120
146
|
done | sort -rn | head -n "$MAX_LANGUAGES" | awk '{print $2}'))
|
|
121
147
|
|
|
122
|
-
# Check LSP
|
|
123
|
-
|
|
148
|
+
# Check LSP for top languages - both binary AND plugin
|
|
149
|
+
MISSING_BINARY=() # Binary not installed
|
|
150
|
+
MISSING_PLUGIN=() # Binary installed but plugin missing
|
|
124
151
|
for lang in "${TOP_LANGUAGES[@]}"; do
|
|
125
152
|
INFO="${LANG_INFO[$lang]}"
|
|
153
|
+
# Parse: "binaries|install_cmd|plugin_name"
|
|
126
154
|
BINARIES="${INFO%%|*}"
|
|
127
|
-
|
|
155
|
+
REST="${INFO#*|}"
|
|
156
|
+
INSTALL_CMD="${REST%%|*}"
|
|
157
|
+
PLUGIN_NAME="${REST##*|}"
|
|
158
|
+
|
|
159
|
+
FILE_COUNT="${LANG_COUNTS[$lang]}"
|
|
128
160
|
|
|
129
161
|
if ! has_any_binary "$BINARIES"; then
|
|
130
|
-
|
|
131
|
-
|
|
162
|
+
# Binary not installed
|
|
163
|
+
MISSING_BINARY+=("$lang ($FILE_COUNT files)|missing_binary|$INSTALL_CMD|$PLUGIN_NAME")
|
|
164
|
+
elif ! is_plugin_installed "$PLUGIN_NAME"; then
|
|
165
|
+
# Binary installed but plugin missing - this is the gap!
|
|
166
|
+
MISSING_PLUGIN+=("$lang ($FILE_COUNT files)|missing_plugin|$INSTALL_CMD|$PLUGIN_NAME")
|
|
132
167
|
fi
|
|
133
168
|
done
|
|
134
169
|
|
|
170
|
+
# Combine both arrays for output
|
|
171
|
+
MISSING_SERVERS=("${MISSING_BINARY[@]}" "${MISSING_PLUGIN[@]}")
|
|
172
|
+
|
|
135
173
|
# =============================================================================
|
|
136
174
|
# OUTPUT RESULTS
|
|
137
175
|
# =============================================================================
|
|
138
176
|
|
|
139
177
|
TOTAL_LANGS=${#LANG_COUNTS[@]}
|
|
140
178
|
CHECKED_LANGS=${#TOP_LANGUAGES[@]}
|
|
179
|
+
BINARY_MISSING_COUNT=${#MISSING_BINARY[@]}
|
|
180
|
+
PLUGIN_MISSING_COUNT=${#MISSING_PLUGIN[@]}
|
|
141
181
|
|
|
142
182
|
if [[ ${#MISSING_SERVERS[@]} -eq 0 ]]; then
|
|
143
183
|
# All language servers installed (or no dominant languages)
|
|
@@ -151,20 +191,35 @@ if [[ ${#MISSING_SERVERS[@]} -eq 0 ]]; then
|
|
|
151
191
|
"totalLanguages": $TOTAL_LANGS,
|
|
152
192
|
"checkedLanguages": $CHECKED_LANGS,
|
|
153
193
|
"minFileCount": $MIN_FILE_COUNT,
|
|
154
|
-
"maxLanguages": $MAX_LANGUAGES
|
|
194
|
+
"maxLanguages": $MAX_LANGUAGES,
|
|
195
|
+
"binaryMissing": 0,
|
|
196
|
+
"pluginMissing": 0
|
|
155
197
|
}
|
|
156
198
|
}
|
|
157
199
|
EOF
|
|
158
200
|
else
|
|
159
201
|
# Some language servers missing - build JSON array
|
|
202
|
+
# Format: "lang (X files)|type|binary_install|plugin_name"
|
|
160
203
|
MISSING_JSON=""
|
|
161
204
|
for server in "${MISSING_SERVERS[@]}"; do
|
|
162
|
-
|
|
163
|
-
|
|
205
|
+
# Parse the pipe-separated values
|
|
206
|
+
IFS='|' read -r LANG TYPE BINARY_CMD PLUGIN_NAME <<< "$server"
|
|
207
|
+
|
|
208
|
+
# Build plugin install command: claude plugin install X@claude-plugins-official
|
|
209
|
+
PLUGIN_CMD="claude plugin install ${PLUGIN_NAME}@claude-plugins-official"
|
|
210
|
+
|
|
211
|
+
# Build human-readable message based on issue type
|
|
212
|
+
if [[ "$TYPE" == "missing_binary" ]]; then
|
|
213
|
+
MESSAGE="Language server binary not installed. Run: $BINARY_CMD"
|
|
214
|
+
else
|
|
215
|
+
# missing_plugin - binary present but Claude plugin not registered
|
|
216
|
+
MESSAGE="Binary installed but Claude plugin missing. Run: $PLUGIN_CMD"
|
|
217
|
+
fi
|
|
218
|
+
|
|
164
219
|
if [[ -n "$MISSING_JSON" ]]; then
|
|
165
220
|
MISSING_JSON="$MISSING_JSON,"
|
|
166
221
|
fi
|
|
167
|
-
MISSING_JSON="$MISSING_JSON{\"language\":\"$LANG\",\"
|
|
222
|
+
MISSING_JSON="$MISSING_JSON{\"language\":\"$LANG\",\"type\":\"$TYPE\",\"binaryInstall\":\"$BINARY_CMD\",\"pluginInstall\":\"$PLUGIN_CMD\",\"plugin\":\"$PLUGIN_NAME\",\"message\":\"$MESSAGE\"}"
|
|
168
223
|
done
|
|
169
224
|
|
|
170
225
|
cat > "$STATE_FILE" <<EOF
|
|
@@ -177,7 +232,9 @@ else
|
|
|
177
232
|
"totalLanguages": $TOTAL_LANGS,
|
|
178
233
|
"checkedLanguages": $CHECKED_LANGS,
|
|
179
234
|
"minFileCount": $MIN_FILE_COUNT,
|
|
180
|
-
"maxLanguages": $MAX_LANGUAGES
|
|
235
|
+
"maxLanguages": $MAX_LANGUAGES,
|
|
236
|
+
"binaryMissing": $BINARY_MISSING_COUNT,
|
|
237
|
+
"pluginMissing": $PLUGIN_MISSING_COUNT
|
|
181
238
|
}
|
|
182
239
|
}
|
|
183
240
|
EOF
|
|
@@ -526,6 +526,8 @@ Ask me when you need help with:
|
|
|
526
526
|
- **JSI bindings for synchronous native calls**
|
|
527
527
|
- **Expo config plugins for native configuration**
|
|
528
528
|
- **Interop layer for legacy Bridge modules**
|
|
529
|
+
- **Native listener lifecycle (singleton patterns for IAP, push, deep links)**
|
|
530
|
+
- **Debugging silent failures in async native events**
|
|
529
531
|
|
|
530
532
|
## Essential Commands
|
|
531
533
|
|
|
@@ -755,6 +757,120 @@ export function getCalendarModule() {
|
|
|
755
757
|
}
|
|
756
758
|
```
|
|
757
759
|
|
|
760
|
+
### 7. Native Singleton Listeners (App-Lifetime)
|
|
761
|
+
|
|
762
|
+
**CRITICAL**: Some native listeners must persist for the app's entire lifetime. **Never** clean them up in `useEffect` cleanup.
|
|
763
|
+
|
|
764
|
+
**Why This Matters**
|
|
765
|
+
|
|
766
|
+
Native platform events often arrive asynchronously from system UI (payment sheets, biometric dialogs, push notifications). The component that initiated the flow may unmount while system UI is visible, but events arrive AFTER the system UI dismisses. If the listener is cleaned up, events are silently lost.
|
|
767
|
+
|
|
768
|
+
**The Rule**
|
|
769
|
+
|
|
770
|
+
| Listener Type | Cleanup on Unmount? | Reason |
|
|
771
|
+
|--------------|---------------------|--------|
|
|
772
|
+
| iOS StoreKit (`setPurchaseListener`) | **NEVER** | Events arrive after payment sheet dismisses |
|
|
773
|
+
| Google Play Billing listener | **NEVER** | Same async flow as iOS |
|
|
774
|
+
| Push notification handlers | **NEVER** | Can arrive at any time |
|
|
775
|
+
| Deep link listeners | **NEVER** | App may be backgrounded during navigation |
|
|
776
|
+
| Biometric auth callbacks | **NEVER** | System UI dialog is external |
|
|
777
|
+
| **JavaScript event subscriptions** | ✅ OK | React lifecycle managed, no native async |
|
|
778
|
+
|
|
779
|
+
**Implementation Pattern - Singleton Service**
|
|
780
|
+
|
|
781
|
+
```typescript
|
|
782
|
+
// services/IAPService.ts - Singleton, initialized once
|
|
783
|
+
class IAPService {
|
|
784
|
+
private static initialized = false;
|
|
785
|
+
|
|
786
|
+
static async initialize() {
|
|
787
|
+
if (this.initialized) return;
|
|
788
|
+
this.initialized = true;
|
|
789
|
+
|
|
790
|
+
// Native listener - NEVER disconnected
|
|
791
|
+
await InAppPurchases.connectAsync();
|
|
792
|
+
InAppPurchases.setPurchaseListener(({ responseCode, results }) => {
|
|
793
|
+
if (responseCode === IAPResponseCode.OK && results) {
|
|
794
|
+
results.forEach(purchase => this.processPurchase(purchase));
|
|
795
|
+
}
|
|
796
|
+
});
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
private static async processPurchase(purchase: InAppPurchase) {
|
|
800
|
+
// Validate receipt, unlock content, finish transaction
|
|
801
|
+
await finishTransactionAsync(purchase, true);
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
// DO NOT add a disconnect method!
|
|
805
|
+
// The native listener must persist for app lifetime
|
|
806
|
+
}
|
|
807
|
+
```
|
|
808
|
+
|
|
809
|
+
```typescript
|
|
810
|
+
// App.tsx - Initialize once at app root
|
|
811
|
+
export default function App() {
|
|
812
|
+
useEffect(() => {
|
|
813
|
+
IAPService.initialize();
|
|
814
|
+
// NO cleanup return - this is intentional!
|
|
815
|
+
}, []);
|
|
816
|
+
|
|
817
|
+
return <RootNavigator />;
|
|
818
|
+
}
|
|
819
|
+
```
|
|
820
|
+
|
|
821
|
+
```typescript
|
|
822
|
+
// screens/PurchaseScreen.tsx - Component can have JS subscriptions
|
|
823
|
+
function PurchaseScreen() {
|
|
824
|
+
useEffect(() => {
|
|
825
|
+
// JS-level subscription - OK to cleanup
|
|
826
|
+
const subscription = purchaseEvents.subscribe(handleLocalUI);
|
|
827
|
+
return () => subscription.unsubscribe(); // ✅ OK - JS level only
|
|
828
|
+
}, []);
|
|
829
|
+
|
|
830
|
+
const handleBuy = async () => {
|
|
831
|
+
// Initiates native purchase flow
|
|
832
|
+
// Component may unmount while payment sheet is visible
|
|
833
|
+
// But IAPService singleton still receives the event
|
|
834
|
+
await InAppPurchases.purchaseItemAsync('premium_upgrade');
|
|
835
|
+
};
|
|
836
|
+
}
|
|
837
|
+
```
|
|
838
|
+
|
|
839
|
+
**Common Mistake - DO NOT DO THIS**
|
|
840
|
+
|
|
841
|
+
```typescript
|
|
842
|
+
// ❌ WRONG - Listener cleaned up, purchase events lost!
|
|
843
|
+
function BrokenPurchaseScreen() {
|
|
844
|
+
useEffect(() => {
|
|
845
|
+
InAppPurchases.connectAsync();
|
|
846
|
+
InAppPurchases.setPurchaseListener(handlePurchase);
|
|
847
|
+
|
|
848
|
+
return () => {
|
|
849
|
+
InAppPurchases.disconnectAsync(); // 💥 BUG!
|
|
850
|
+
// User completes purchase in payment sheet
|
|
851
|
+
// Component unmounts during navigation
|
|
852
|
+
// Event arrives but listener is gone
|
|
853
|
+
// Purchase succeeds but app never knows!
|
|
854
|
+
};
|
|
855
|
+
}, []);
|
|
856
|
+
}
|
|
857
|
+
```
|
|
858
|
+
|
|
859
|
+
**Debugging Silent Failures**
|
|
860
|
+
|
|
861
|
+
If purchases succeed (user charged) but app doesn't respond:
|
|
862
|
+
1. Check if `setPurchaseListener` is in a component that might unmount
|
|
863
|
+
2. Verify listener is set at app root, not in purchase screen
|
|
864
|
+
3. Add logging in the singleton to confirm events arrive
|
|
865
|
+
4. Test scenario: Start purchase → navigate away → complete purchase
|
|
866
|
+
|
|
867
|
+
**Applies To**
|
|
868
|
+
- `expo-in-app-purchases` / `react-native-iap`
|
|
869
|
+
- `expo-notifications` / `react-native-push-notification`
|
|
870
|
+
- `expo-linking` / Deep link handlers
|
|
871
|
+
- `expo-local-authentication` / Biometric callbacks
|
|
872
|
+
- Any native module with async system UI
|
|
873
|
+
|
|
758
874
|
## Integration with SpecWeave
|
|
759
875
|
|
|
760
876
|
**Native Module Planning**
|