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 CHANGED
@@ -1,4 +1,4 @@
1
- <!-- SW:META template="claude" version="1.0.180" sections="header,start,autodetect,metarule,rules,workflow,reflect,context,structure,taskformat,secrets,syncing,testing,tdd,api,limits,troubleshooting,lazyloading,principles,linking,mcp,auto,docs" -->
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 works AUTOMATICALLY when editing code files (no invocation needed)
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.180" -->
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 (AUTOMATIC - no invocation needed):
135
- LSP plugins work AUTOMATICALLY when editing code files:
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
- ⚠️ LSP plugins are NOT skills - they have NO SKILL.md, NO /slash-command
141
- ⚠️ You CANNOT invoke them via Skill() - they work transparently
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
- See https://spec-weave.com/docs/guides/lsp-integration for setup
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 | **AUTOMATIC** - activates on file extension | csharp-lsp, typescript-lsp |
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
- **No SKILL.md = Not a skill = Cannot invoke directly**
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 works automatically when editing .cs, .ts, .tsx files]
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 is working (automatic - check by editing code files)
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
- <!-- SW:SECTION:start version="1.0.180" -->
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.180" -->
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.180" -->
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.180" -->
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.180" -->
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.180" -->
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-28**: never repeat this problem trying to call lsp explicitly
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-28**: // Do NOT verify immediately - show dialog instead
325
+ - **2026-01-29**: // Do NOT verify immediately - show dialog instead
285
326
 
286
327
  ### General
287
- - **2026-01-28**: Always check for credentials FIRST (presence only - never display values
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.180" -->
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.180" -->
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.180" -->
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.180" -->
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.180" -->
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.180" -->
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.180" -->
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.180" -->
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.180" -->
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.180" -->
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.180" -->
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.180" -->
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.180" -->
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.180" -->
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.180" -->
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.180" -->
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 - AUTOMATIC):**
605
- - LSP plugins work automatically when editing code files
606
- - ⚠️ LSP plugins are NOT skills - they cannot be invoked!
607
- - They activate based on file extension (.cs → csharp-lsp, .ts → typescript-lsp)
608
- - See: https://github.com/anthropics/claude-plugins-official
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 works automatically in the background)
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 plugins (`csharp-lsp`, `typescript-lsp`, `pyright-lsp`) are NOT in this table because they are NOT skills. They work AUTOMATICALLY when editing code files. See [official marketplace](https://github.com/anthropics/claude-plugins-official).
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)** | **AUTOMATIC** - LSP activates when editing code files |
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 plugins (csharp-lsp, typescript-lsp, pyright-lsp) are NOT skills - they work AUTOMATICALLY. You cannot invoke them via Skill() tool. They activate based on file extension when you edit code.
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** | **AUTOMATIC** - works when editing code files (NOT a skill, cannot invoke) |
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,CAiHtD,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"}
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.181",
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 only for top languages
123
- MISSING_SERVERS=()
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
- INSTALL_CMD="${INFO##*|}"
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
- FILE_COUNT="${LANG_COUNTS[$lang]}"
131
- MISSING_SERVERS+=("$lang ($FILE_COUNT files)|$INSTALL_CMD")
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
- LANG="${server%%|*}"
163
- CMD="${server##*|}"
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\",\"install\":\"$CMD\"}"
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**