specweave 1.0.197 → 1.0.199
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 +37 -64
- package/bin/specweave.js +24 -0
- package/dist/src/cli/commands/interview.d.ts +21 -0
- package/dist/src/cli/commands/interview.d.ts.map +1 -0
- package/dist/src/cli/commands/interview.js +248 -0
- package/dist/src/cli/commands/interview.js.map +1 -0
- package/dist/src/cli/commands/lsp.d.ts.map +1 -1
- package/dist/src/cli/commands/lsp.js +27 -0
- package/dist/src/cli/commands/lsp.js.map +1 -1
- package/dist/src/cli/commands/reconcile.d.ts +24 -0
- package/dist/src/cli/commands/reconcile.d.ts.map +1 -0
- package/dist/src/cli/commands/reconcile.js +139 -0
- package/dist/src/cli/commands/reconcile.js.map +1 -0
- package/dist/src/core/increment/reconcile-manager.d.ts +131 -0
- package/dist/src/core/increment/reconcile-manager.d.ts.map +1 -0
- package/dist/src/core/increment/reconcile-manager.js +752 -0
- package/dist/src/core/increment/reconcile-manager.js.map +1 -0
- package/dist/src/core/lsp/lsp-client.d.ts +3 -0
- package/dist/src/core/lsp/lsp-client.d.ts.map +1 -1
- package/dist/src/core/lsp/lsp-client.js +120 -32
- package/dist/src/core/lsp/lsp-client.js.map +1 -1
- package/dist/src/core/lsp/lsp-manager.d.ts +10 -1
- package/dist/src/core/lsp/lsp-manager.d.ts.map +1 -1
- package/dist/src/core/lsp/lsp-manager.js +46 -16
- package/dist/src/core/lsp/lsp-manager.js.map +1 -1
- package/dist/src/core/lsp/tsserver-client.d.ts +99 -0
- package/dist/src/core/lsp/tsserver-client.d.ts.map +1 -0
- package/dist/src/core/lsp/tsserver-client.js +523 -0
- package/dist/src/core/lsp/tsserver-client.js.map +1 -0
- package/dist/src/core/reflection/skill-memory-injector.d.ts +42 -0
- package/dist/src/core/reflection/skill-memory-injector.d.ts.map +1 -0
- package/dist/src/core/reflection/skill-memory-injector.js +67 -0
- package/dist/src/core/reflection/skill-memory-injector.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/commands/increment.md +2 -0
- package/plugins/specweave/commands/reconcile.md +440 -0
- package/plugins/specweave/hooks/user-prompt-submit.sh +81 -6
- package/plugins/specweave/hooks/v2/guards/interview-enforcement-guard.sh +171 -0
- package/plugins/specweave/skills/increment-planner/SKILL.md +15 -1
- package/plugins/specweave/skills/increment-planner/phases/00-preflight.md +40 -0
- package/plugins/specweave/skills/lsp/SKILL.md +40 -176
- package/plugins/specweave/skills/pm/phases/00-deep-interview.md +49 -1
package/CLAUDE.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- SW:META template="claude" version="1.0.
|
|
1
|
+
<!-- SW:META template="claude" version="1.0.198" 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
|
|
@@ -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.198" -->
|
|
57
57
|
**Framework**: SpecWeave | **Truth**: `spec.md` + `tasks.md`
|
|
58
58
|
<!-- SW:END:header -->
|
|
59
59
|
|
|
@@ -131,31 +131,16 @@ IMPLEMENTATION PHASE:
|
|
|
131
131
|
- Stripe → sw-payments:stripe-integration
|
|
132
132
|
- Database → sw-backend:database-optimizer
|
|
133
133
|
|
|
134
|
-
CODE INTELLIGENCE (LSP
|
|
135
|
-
⚠️
|
|
136
|
-
|
|
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)
|
|
141
|
-
|
|
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
|
|
134
|
+
CODE INTELLIGENCE (LSP):
|
|
135
|
+
⚠️ Requires setup - see "LSP Setup" section below
|
|
146
136
|
```
|
|
147
137
|
|
|
148
|
-
###
|
|
149
|
-
|
|
150
|
-
**CRITICAL DISTINCTION** - Two different plugin types:
|
|
138
|
+
### Skills vs LSP Plugins
|
|
151
139
|
|
|
152
|
-
| Type | Has SKILL.md | How to Use |
|
|
153
|
-
|
|
154
|
-
| **Skill plugins** | ✅ Yes | `/skill-name` or `Skill({ skill: "name" })` |
|
|
155
|
-
| **LSP plugins** | ❌ No |
|
|
156
|
-
|
|
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.
|
|
140
|
+
| Type | Has SKILL.md | How to Use |
|
|
141
|
+
|------|--------------|------------|
|
|
142
|
+
| **Skill plugins** | ✅ Yes | `/skill-name` or `Skill({ skill: "name" })` |
|
|
143
|
+
| **LSP plugins** | ❌ No | See "LSP Setup" section below |
|
|
159
144
|
|
|
160
145
|
### Why Auto-Activation May Not Trigger
|
|
161
146
|
|
|
@@ -189,7 +174,7 @@ Skill(sw-backend:dotnet-backend) → .NET API patterns
|
|
|
189
174
|
Before marking implementation complete, verify:
|
|
190
175
|
- [ ] Used planning skills (PM, Architect) if complex feature
|
|
191
176
|
- [ ] Used domain skills for each tech in the stack
|
|
192
|
-
- [ ] LSP configured if needed (
|
|
177
|
+
- [ ] LSP configured if needed (see LSP Setup section below)
|
|
193
178
|
- [ ] Invoked skills explicitly if auto-activation didn't trigger
|
|
194
179
|
<!-- SW:END:skill-chaining -->
|
|
195
180
|
|
|
@@ -292,7 +277,7 @@ SpecWeave's `user-prompt-submit.sh` hook auto-installs LSP plugins with **projec
|
|
|
292
277
|
|
|
293
278
|
**Reference**: [Official Docs](https://code.claude.com/docs/en/discover-plugins#install-plugins) | [Settings Scopes](https://code.claude.com/docs/en/settings#configuration-scopes)
|
|
294
279
|
|
|
295
|
-
<!-- SW:SECTION:start version="1.0.
|
|
280
|
+
<!-- SW:SECTION:start version="1.0.198" -->
|
|
296
281
|
## Getting Started
|
|
297
282
|
|
|
298
283
|
**Initial increment**: `0001-project-setup` (auto-created by `specweave init`)
|
|
@@ -302,7 +287,7 @@ SpecWeave's `user-prompt-submit.sh` hook auto-installs LSP plugins with **projec
|
|
|
302
287
|
2. **Customize**: Edit spec.md and use for setup tasks
|
|
303
288
|
<!-- SW:END:start -->
|
|
304
289
|
|
|
305
|
-
<!-- SW:SECTION:autodetect version="1.0.
|
|
290
|
+
<!-- SW:SECTION:autodetect version="1.0.198" -->
|
|
306
291
|
## Auto-Detection
|
|
307
292
|
|
|
308
293
|
SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
@@ -312,7 +297,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
312
297
|
**Opt-out phrases**: "Just brainstorm first" | "Don't plan yet" | "Quick discussion" | "Let's explore ideas"
|
|
313
298
|
<!-- SW:END:autodetect -->
|
|
314
299
|
|
|
315
|
-
<!-- SW:SECTION:metarule version="1.0.
|
|
300
|
+
<!-- SW:SECTION:metarule version="1.0.198" -->
|
|
316
301
|
## Meta-Rule: Think-Before-Act
|
|
317
302
|
|
|
318
303
|
**Satisfy dependencies BEFORE dependent operations.**
|
|
@@ -323,7 +308,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
323
308
|
```
|
|
324
309
|
<!-- SW:END:metarule -->
|
|
325
310
|
|
|
326
|
-
<!-- SW:SECTION:rules version="1.0.
|
|
311
|
+
<!-- SW:SECTION:rules version="1.0.198" -->
|
|
327
312
|
## Rules
|
|
328
313
|
|
|
329
314
|
1. **Files** → `.specweave/increments/####-name/` (see Structure section for details)
|
|
@@ -339,7 +324,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
339
324
|
Use next available number. **NEVER create duplicate prefixes.**
|
|
340
325
|
<!-- SW:END:rules -->
|
|
341
326
|
|
|
342
|
-
<!-- SW:SECTION:workflow version="1.0.
|
|
327
|
+
<!-- SW:SECTION:workflow version="1.0.198" -->
|
|
343
328
|
## Workflow
|
|
344
329
|
|
|
345
330
|
`/sw:increment "X"` → `/sw:do` → `/sw:progress` → `/sw:done 0001`
|
|
@@ -385,7 +370,7 @@ project/
|
|
|
385
370
|
**NEVER assume single-repo mode without scanning first!**
|
|
386
371
|
<!-- SW:END:save-nested-repos -->
|
|
387
372
|
|
|
388
|
-
<!-- SW:SECTION:reflect version="1.0.
|
|
373
|
+
<!-- SW:SECTION:reflect version="1.0.198" -->
|
|
389
374
|
## Skill Memories
|
|
390
375
|
|
|
391
376
|
SpecWeave learns from corrections. Learnings saved here automatically. Edit or delete as needed.
|
|
@@ -397,16 +382,10 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
|
|
|
397
382
|
|
|
398
383
|
<!-- Auto-captured by SpecWeave reflect. Edit or delete as needed. -->
|
|
399
384
|
|
|
400
|
-
###
|
|
401
|
-
- **2026-01
|
|
402
|
-
|
|
403
|
-
### Logging
|
|
404
|
-
- **2026-01-29**: // Do NOT verify immediately - show dialog instead
|
|
385
|
+
### Pm
|
|
386
|
+
- **2026-02-01**: Enable interview process during increment creation for SpecWeave projects
|
|
405
387
|
|
|
406
|
-
|
|
407
|
-
- **2026-01-29**: Always check for credentials FIRST (presence only - never display values)
|
|
408
|
-
|
|
409
|
-
<!-- SW:SECTION:context version="1.0.196" -->
|
|
388
|
+
<!-- SW:SECTION:context version="1.0.198" -->
|
|
410
389
|
## Context
|
|
411
390
|
|
|
412
391
|
**Before implementing**: Check ADRs at `.specweave/docs/internal/architecture/adr/`
|
|
@@ -414,7 +393,7 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
|
|
|
414
393
|
**Load context**: `/sw:context <topic>` loads relevant living docs into conversation
|
|
415
394
|
<!-- SW:END:context -->
|
|
416
395
|
|
|
417
|
-
<!-- SW:SECTION:structure version="1.0.
|
|
396
|
+
<!-- SW:SECTION:structure version="1.0.198" -->
|
|
418
397
|
## Structure
|
|
419
398
|
|
|
420
399
|
```
|
|
@@ -429,7 +408,7 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
|
|
|
429
408
|
**Everything else → subfolders**: `reports/` | `logs/` | `scripts/` | `backups/`
|
|
430
409
|
<!-- SW:END:structure -->
|
|
431
410
|
|
|
432
|
-
<!-- SW:SECTION:taskformat version="1.0.
|
|
411
|
+
<!-- SW:SECTION:taskformat version="1.0.198" -->
|
|
433
412
|
## Task Format
|
|
434
413
|
|
|
435
414
|
```markdown
|
|
@@ -439,7 +418,7 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
|
|
|
439
418
|
```
|
|
440
419
|
<!-- SW:END:taskformat -->
|
|
441
420
|
|
|
442
|
-
<!-- SW:SECTION:secrets version="1.0.
|
|
421
|
+
<!-- SW:SECTION:secrets version="1.0.198" -->
|
|
443
422
|
## Secrets Check
|
|
444
423
|
|
|
445
424
|
**BEFORE CLI tools**: Check existing config first!
|
|
@@ -453,7 +432,7 @@ gh auth status
|
|
|
453
432
|
**SECURITY**: NEVER use `grep TOKEN .env` without `-q` flag - it exposes credentials in terminal!
|
|
454
433
|
<!-- SW:END:secrets -->
|
|
455
434
|
|
|
456
|
-
<!-- SW:SECTION:syncing version="1.0.
|
|
435
|
+
<!-- SW:SECTION:syncing version="1.0.198" -->
|
|
457
436
|
## External Sync (GitHub/JIRA/ADO)
|
|
458
437
|
|
|
459
438
|
**Commands**: `/sw-github:sync {id}` (issues) | `/sw:sync-specs` (living docs only)
|
|
@@ -463,7 +442,7 @@ gh auth status
|
|
|
463
442
|
**Config**: Set `sync.github.enabled: true` + `canUpdateExternalItems: true` in config.json
|
|
464
443
|
<!-- SW:END:syncing -->
|
|
465
444
|
|
|
466
|
-
<!-- SW:SECTION:testing version="1.0.
|
|
445
|
+
<!-- SW:SECTION:testing version="1.0.198" -->
|
|
467
446
|
## Testing
|
|
468
447
|
|
|
469
448
|
BDD in tasks.md | Unit >80% | `.test.ts` (Vitest)
|
|
@@ -475,7 +454,7 @@ vi.mock('./module', () => ({ func: mockFn }));
|
|
|
475
454
|
```
|
|
476
455
|
<!-- SW:END:testing -->
|
|
477
456
|
|
|
478
|
-
<!-- SW:SECTION:tdd version="1.0.
|
|
457
|
+
<!-- SW:SECTION:tdd version="1.0.198" -->
|
|
479
458
|
## TDD Mode (Test-Driven Development)
|
|
480
459
|
|
|
481
460
|
**When `testing.defaultTestMode: "TDD"` is configured**, follow RED-GREEN-REFACTOR discipline:
|
|
@@ -536,7 +515,7 @@ When TDD is enabled, tasks include phase markers:
|
|
|
536
515
|
**Rule**: Complete dependencies BEFORE dependent tasks (RED before GREEN).
|
|
537
516
|
<!-- SW:END:tdd -->
|
|
538
517
|
|
|
539
|
-
<!-- SW:SECTION:api version="1.0.
|
|
518
|
+
<!-- SW:SECTION:api version="1.0.198" -->
|
|
540
519
|
## API Development (OpenAPI-First)
|
|
541
520
|
|
|
542
521
|
**For API projects only.** Commands: `/sw:api-docs --all` | `--openapi` | `--postman` | `--validate`
|
|
@@ -544,13 +523,13 @@ When TDD is enabled, tasks include phase markers:
|
|
|
544
523
|
Enable in config: `{"apiDocs":{"enabled":true,"openApiPath":"openapi.yaml"}}`
|
|
545
524
|
<!-- SW:END:api -->
|
|
546
525
|
|
|
547
|
-
<!-- SW:SECTION:limits version="1.0.
|
|
526
|
+
<!-- SW:SECTION:limits version="1.0.198" -->
|
|
548
527
|
## Limits
|
|
549
528
|
|
|
550
529
|
**Max 1500 lines/file** — extract before adding
|
|
551
530
|
<!-- SW:END:limits -->
|
|
552
531
|
|
|
553
|
-
<!-- SW:SECTION:troubleshooting version="1.0.
|
|
532
|
+
<!-- SW:SECTION:troubleshooting version="1.0.198" -->
|
|
554
533
|
## Troubleshooting
|
|
555
534
|
|
|
556
535
|
| Issue | Fix |
|
|
@@ -567,7 +546,7 @@ Enable in config: `{"apiDocs":{"enabled":true,"openApiPath":"openapi.yaml"}}`
|
|
|
567
546
|
| Docs folder collisions | Check: `ls docs/ \| grep -E '^[0-9]{2}-' \| cut -d'-' -f1 \| sort \| uniq -d` |
|
|
568
547
|
<!-- SW:END:troubleshooting -->
|
|
569
548
|
|
|
570
|
-
<!-- SW:SECTION:lazyloading version="1.0.
|
|
549
|
+
<!-- SW:SECTION:lazyloading version="1.0.198" -->
|
|
571
550
|
## Plugin Auto-Loading
|
|
572
551
|
|
|
573
552
|
Plugins load automatically based on project type and keywords. Manual install if needed:
|
|
@@ -581,7 +560,7 @@ export SPECWEAVE_DISABLE_AUTO_LOAD=1 # Disable auto-load
|
|
|
581
560
|
**Token savings**: Core ~3-5K tokens vs all plugins ~60K+
|
|
582
561
|
<!-- SW:END:lazyloading -->
|
|
583
562
|
|
|
584
|
-
<!-- SW:SECTION:principles version="1.0.
|
|
563
|
+
<!-- SW:SECTION:principles version="1.0.198" -->
|
|
585
564
|
## Principles
|
|
586
565
|
|
|
587
566
|
1. **Spec-first**: `/sw:increment` before coding
|
|
@@ -590,7 +569,7 @@ export SPECWEAVE_DISABLE_AUTO_LOAD=1 # Disable auto-load
|
|
|
590
569
|
4. **Traceable**: All work → specs → ACs
|
|
591
570
|
<!-- SW:END:principles -->
|
|
592
571
|
|
|
593
|
-
<!-- SW:SECTION:linking version="1.0.
|
|
572
|
+
<!-- SW:SECTION:linking version="1.0.198" -->
|
|
594
573
|
## Bidirectional Linking
|
|
595
574
|
|
|
596
575
|
Tasks ↔ User Stories auto-linked via AC-IDs: `AC-US1-01` → `US-001`
|
|
@@ -598,7 +577,7 @@ Tasks ↔ User Stories auto-linked via AC-IDs: `AC-US1-01` → `US-001`
|
|
|
598
577
|
Task format: `**AC**: AC-US1-01, AC-US1-02` (CRITICAL for linking)
|
|
599
578
|
<!-- SW:END:linking -->
|
|
600
579
|
|
|
601
|
-
<!-- SW:SECTION:mcp version="1.0.
|
|
580
|
+
<!-- SW:SECTION:mcp version="1.0.198" -->
|
|
602
581
|
## External Services
|
|
603
582
|
|
|
604
583
|
**Priority**: CLI tools first (simpler) → MCP for complex integrations
|
|
@@ -620,7 +599,7 @@ claude mcp add --transport stdio postgres -- npx -y @modelcontextprotocol/server
|
|
|
620
599
|
MCP supports lazy-loading (auto mode) - tools load on-demand when >10% context.
|
|
621
600
|
<!-- SW:END:mcp -->
|
|
622
601
|
|
|
623
|
-
<!-- SW:SECTION:auto version="1.0.
|
|
602
|
+
<!-- SW:SECTION:auto version="1.0.198" -->
|
|
624
603
|
## Auto Mode
|
|
625
604
|
|
|
626
605
|
**Commands**: `/sw:auto` (start) | `/sw:auto-status` (check) | `/sw:cancel-auto` (emergency only)
|
|
@@ -637,7 +616,7 @@ MCP supports lazy-loading (auto mode) - tools load on-demand when >10% context.
|
|
|
637
616
|
**STOP & ASK** if: Spec conflicts | Task unnecessary | Requirement ambiguous
|
|
638
617
|
<!-- SW:END:auto -->
|
|
639
618
|
|
|
640
|
-
<!-- SW:SECTION:docs version="1.0.
|
|
619
|
+
<!-- SW:SECTION:docs version="1.0.198" -->
|
|
641
620
|
## Docs
|
|
642
621
|
|
|
643
622
|
[spec-weave.com](https://spec-weave.com)
|
|
@@ -722,11 +701,7 @@ User Stories need `**Project**: my-project` field for external sync. Each US = O
|
|
|
722
701
|
- Use `sw-backend:*` skills for .NET/Node/Python APIs
|
|
723
702
|
- Use `sw-payments:stripe-integration` for Stripe
|
|
724
703
|
|
|
725
|
-
**Code Intelligence (LSP
|
|
726
|
-
- LSP requires `ENABLE_LSP_TOOL=1` environment variable
|
|
727
|
-
- Official marketplace plugins are broken ([Issue #15148](https://github.com/anthropics/claude-code/issues/15148))
|
|
728
|
-
- Use `boostvolt/claude-code-lsps` marketplace instead
|
|
729
|
-
- Operations: goToDefinition, findReferences, hover, documentSymbol, workspaceSymbol
|
|
704
|
+
**Code Intelligence (LSP):** See "LSP Setup" section above for configuration requirements.
|
|
730
705
|
|
|
731
706
|
**Pattern:**
|
|
732
707
|
```
|
|
@@ -967,14 +942,12 @@ If skills don't auto-activate:
|
|
|
967
942
|
| Domain work (React, .NET, Stripe) | Let auto-activate, Skill tool if not |
|
|
968
943
|
| Architecture, security review | Usually auto-activates on keywords |
|
|
969
944
|
| Hook says "SKILL FIRST" | **Always** use Skill tool explicitly |
|
|
970
|
-
| **Code intelligence (LSP)** |
|
|
945
|
+
| **Code intelligence (LSP)** | See "LSP Setup" section |
|
|
971
946
|
| Increment planning | Use PM/Architect skills for spec/plan refinement |
|
|
972
947
|
| External syncs | Commands: `/sw-github:sync` |
|
|
973
948
|
| Codebase exploration | Task tool: `subagent_type: "Explore"` |
|
|
974
949
|
| Complex planning | Task tool: `subagent_type: "Plan"` |
|
|
975
950
|
|
|
976
|
-
**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.
|
|
977
|
-
|
|
978
951
|
**Reference**: See `plugins/PLUGINS-INDEX.md` for full plugin catalog with triggers.
|
|
979
952
|
|
|
980
953
|
---
|
|
@@ -1161,7 +1134,7 @@ npm run rebuild
|
|
|
1161
1134
|
| Source of truth | tasks.md + spec.md (update immediately) |
|
|
1162
1135
|
| Completion | `/sw:done` only (NEVER edit metadata.json directly) |
|
|
1163
1136
|
| **Skills** | **ALWAYS use when available** (PM, Architect, domain skills) |
|
|
1164
|
-
| **LSP** |
|
|
1137
|
+
| **LSP** | See "LSP Setup" section (requires explicit setup) |
|
|
1165
1138
|
| Increment root | ONLY 4 files: spec.md, plan.md, tasks.md, metadata.json |
|
|
1166
1139
|
| Increment IDs | 🚨 Check ALL folders: `find .specweave/increments -maxdepth 2 -name "[0-9]*" \| grep -oE '[0-9]{4}E?'` |
|
|
1167
1140
|
| Reports/logs | Always to `reports/`, `logs/` subfolders |
|
package/bin/specweave.js
CHANGED
|
@@ -367,6 +367,30 @@ program
|
|
|
367
367
|
await statusCommand(options);
|
|
368
368
|
});
|
|
369
369
|
|
|
370
|
+
// Interview command - Manage Deep Interview Mode state
|
|
371
|
+
const interviewCmd = program
|
|
372
|
+
.command('interview <action> [increment-id] [category] [summary]')
|
|
373
|
+
.description('Manage Deep Interview Mode for increment planning')
|
|
374
|
+
.action(async (action, incrementId, category, summary) => {
|
|
375
|
+
const { interviewCommand } = await import('../dist/src/cli/commands/interview.js');
|
|
376
|
+
await interviewCommand(action, incrementId, category, summary);
|
|
377
|
+
});
|
|
378
|
+
|
|
379
|
+
interviewCmd.addHelpText('after', `
|
|
380
|
+
Actions:
|
|
381
|
+
start <increment-id> Start interview tracking
|
|
382
|
+
mark-covered <id> <category> [summary] Mark category as covered
|
|
383
|
+
status [increment-id] Show interview status
|
|
384
|
+
clear <increment-id> Clear interview state
|
|
385
|
+
|
|
386
|
+
Categories: architecture, integrations, ui-ux, performance, security, edge-cases
|
|
387
|
+
|
|
388
|
+
Examples:
|
|
389
|
+
specweave interview start 0021-auth-feature
|
|
390
|
+
specweave interview mark-covered 0021-auth-feature architecture "Microservices with Redis"
|
|
391
|
+
specweave interview status 0021-auth-feature
|
|
392
|
+
`);
|
|
393
|
+
|
|
370
394
|
// Logs command - View hook execution logs
|
|
371
395
|
program
|
|
372
396
|
.command('logs')
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Start interview tracking for an increment
|
|
3
|
+
*/
|
|
4
|
+
export declare function interviewStart(incrementId: string): Promise<void>;
|
|
5
|
+
/**
|
|
6
|
+
* Mark a category as covered
|
|
7
|
+
*/
|
|
8
|
+
export declare function interviewMarkCovered(incrementId: string, category: string, summary: string): Promise<void>;
|
|
9
|
+
/**
|
|
10
|
+
* Show interview status for an increment
|
|
11
|
+
*/
|
|
12
|
+
export declare function interviewStatus(incrementId?: string): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Clear interview state (after spec is created)
|
|
15
|
+
*/
|
|
16
|
+
export declare function interviewClear(incrementId: string): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Main interview command handler
|
|
19
|
+
*/
|
|
20
|
+
export declare function interviewCommand(action: string, incrementId?: string, categoryOrSummary?: string, summary?: string): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=interview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interview.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/interview.ts"],"names":[],"mappings":"AAiDA;;GAEG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCvE;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CA+Cf;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyEzE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAcvE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,EACpB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CA2Cf"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { findProjectRoot } from '../../utils/find-project-root.js';
|
|
4
|
+
const DEFAULT_CATEGORIES = ['architecture', 'integrations', 'ui-ux', 'performance', 'security', 'edge-cases'];
|
|
5
|
+
/**
|
|
6
|
+
* Get interview state file path for an increment
|
|
7
|
+
*/
|
|
8
|
+
function getInterviewStatePath(projectRoot, incrementId) {
|
|
9
|
+
return path.join(projectRoot, '.specweave', 'state', `interview-${incrementId}.json`);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Get required categories from config
|
|
13
|
+
*/
|
|
14
|
+
function getRequiredCategories(projectRoot) {
|
|
15
|
+
try {
|
|
16
|
+
const configPath = path.join(projectRoot, '.specweave', 'config.json');
|
|
17
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
18
|
+
return config.planning?.deepInterview?.categories || DEFAULT_CATEGORIES;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return DEFAULT_CATEGORIES;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Check if strict enforcement is enabled
|
|
26
|
+
*/
|
|
27
|
+
function isStrictEnforcement(projectRoot) {
|
|
28
|
+
try {
|
|
29
|
+
const configPath = path.join(projectRoot, '.specweave', 'config.json');
|
|
30
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
31
|
+
return config.planning?.deepInterview?.enabled === true &&
|
|
32
|
+
config.planning?.deepInterview?.enforcement === 'strict';
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Start interview tracking for an increment
|
|
40
|
+
*/
|
|
41
|
+
export async function interviewStart(incrementId) {
|
|
42
|
+
const projectRoot = findProjectRoot(process.cwd());
|
|
43
|
+
if (!projectRoot) {
|
|
44
|
+
console.error('❌ Not in a SpecWeave project. Run `specweave init` first.');
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
const stateDir = path.join(projectRoot, '.specweave', 'state');
|
|
48
|
+
if (!fs.existsSync(stateDir)) {
|
|
49
|
+
fs.mkdirSync(stateDir, { recursive: true });
|
|
50
|
+
}
|
|
51
|
+
const statePath = getInterviewStatePath(projectRoot, incrementId);
|
|
52
|
+
if (fs.existsSync(statePath)) {
|
|
53
|
+
console.log(`⚠️ Interview already started for ${incrementId}`);
|
|
54
|
+
await interviewStatus(incrementId);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
const state = {
|
|
58
|
+
incrementId,
|
|
59
|
+
startedAt: new Date().toISOString(),
|
|
60
|
+
coveredCategories: {}
|
|
61
|
+
};
|
|
62
|
+
fs.writeFileSync(statePath, JSON.stringify(state, null, 2));
|
|
63
|
+
console.log(`✅ Interview started for ${incrementId}`);
|
|
64
|
+
console.log('');
|
|
65
|
+
console.log('Cover all categories before creating spec.md:');
|
|
66
|
+
const categories = getRequiredCategories(projectRoot);
|
|
67
|
+
categories.forEach(cat => console.log(` - [ ] ${cat}`));
|
|
68
|
+
console.log('');
|
|
69
|
+
console.log('Mark categories as covered:');
|
|
70
|
+
console.log(` specweave interview mark-covered ${incrementId} architecture "summary"`);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Mark a category as covered
|
|
74
|
+
*/
|
|
75
|
+
export async function interviewMarkCovered(incrementId, category, summary) {
|
|
76
|
+
const projectRoot = findProjectRoot(process.cwd());
|
|
77
|
+
if (!projectRoot) {
|
|
78
|
+
console.error('❌ Not in a SpecWeave project.');
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
const categories = getRequiredCategories(projectRoot);
|
|
82
|
+
if (!categories.includes(category)) {
|
|
83
|
+
console.error(`❌ Unknown category: ${category}`);
|
|
84
|
+
console.error(`Valid categories: ${categories.join(', ')}`);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
const statePath = getInterviewStatePath(projectRoot, incrementId);
|
|
88
|
+
let state;
|
|
89
|
+
if (fs.existsSync(statePath)) {
|
|
90
|
+
state = JSON.parse(fs.readFileSync(statePath, 'utf-8'));
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
// Auto-start interview if not started
|
|
94
|
+
state = {
|
|
95
|
+
incrementId,
|
|
96
|
+
startedAt: new Date().toISOString(),
|
|
97
|
+
coveredCategories: {}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
state.coveredCategories[category] = {
|
|
101
|
+
coveredAt: new Date().toISOString(),
|
|
102
|
+
summary: summary || 'Covered'
|
|
103
|
+
};
|
|
104
|
+
fs.writeFileSync(statePath, JSON.stringify(state, null, 2));
|
|
105
|
+
console.log(`✅ Marked ${category} as covered: ${summary || 'Covered'}`);
|
|
106
|
+
// Show remaining
|
|
107
|
+
const covered = Object.keys(state.coveredCategories);
|
|
108
|
+
const remaining = categories.filter(c => !covered.includes(c));
|
|
109
|
+
if (remaining.length === 0) {
|
|
110
|
+
console.log('');
|
|
111
|
+
console.log('🎉 All categories covered! You can now create spec.md');
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
console.log('');
|
|
115
|
+
console.log(`Remaining: ${remaining.join(', ')}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Show interview status for an increment
|
|
120
|
+
*/
|
|
121
|
+
export async function interviewStatus(incrementId) {
|
|
122
|
+
const projectRoot = findProjectRoot(process.cwd());
|
|
123
|
+
if (!projectRoot) {
|
|
124
|
+
console.error('❌ Not in a SpecWeave project.');
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
const isStrict = isStrictEnforcement(projectRoot);
|
|
128
|
+
const categories = getRequiredCategories(projectRoot);
|
|
129
|
+
console.log('📋 Deep Interview Mode');
|
|
130
|
+
console.log(` Enforcement: ${isStrict ? '🔴 STRICT (blocks spec creation)' : '🟡 Advisory'}`);
|
|
131
|
+
console.log(` Categories: ${categories.join(', ')}`);
|
|
132
|
+
console.log('');
|
|
133
|
+
if (!incrementId) {
|
|
134
|
+
// Show all active interviews
|
|
135
|
+
const stateDir = path.join(projectRoot, '.specweave', 'state');
|
|
136
|
+
if (!fs.existsSync(stateDir)) {
|
|
137
|
+
console.log('No active interviews.');
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const files = fs.readdirSync(stateDir).filter(f => f.startsWith('interview-'));
|
|
141
|
+
if (files.length === 0) {
|
|
142
|
+
console.log('No active interviews.');
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
console.log('Active interviews:');
|
|
146
|
+
for (const file of files) {
|
|
147
|
+
const state = JSON.parse(fs.readFileSync(path.join(stateDir, file), 'utf-8'));
|
|
148
|
+
const covered = Object.keys(state.coveredCategories).length;
|
|
149
|
+
const total = categories.length;
|
|
150
|
+
const emoji = covered === total ? '✅' : '🔄';
|
|
151
|
+
console.log(` ${emoji} ${state.incrementId}: ${covered}/${total} categories covered`);
|
|
152
|
+
}
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
// Show specific increment
|
|
156
|
+
const statePath = getInterviewStatePath(projectRoot, incrementId);
|
|
157
|
+
if (!fs.existsSync(statePath)) {
|
|
158
|
+
console.log(`No interview started for ${incrementId}`);
|
|
159
|
+
console.log(`Start with: specweave interview start ${incrementId}`);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const state = JSON.parse(fs.readFileSync(statePath, 'utf-8'));
|
|
163
|
+
const covered = Object.keys(state.coveredCategories);
|
|
164
|
+
console.log(`Interview: ${incrementId}`);
|
|
165
|
+
console.log(`Started: ${state.startedAt}`);
|
|
166
|
+
console.log('');
|
|
167
|
+
console.log('Categories:');
|
|
168
|
+
for (const cat of categories) {
|
|
169
|
+
if (covered.includes(cat)) {
|
|
170
|
+
const info = state.coveredCategories[cat];
|
|
171
|
+
console.log(` [x] ${cat}: ${info.summary}`);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
console.log(` [ ] ${cat}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
const remaining = categories.filter(c => !covered.includes(c));
|
|
178
|
+
if (remaining.length === 0) {
|
|
179
|
+
console.log('');
|
|
180
|
+
console.log('🎉 All categories covered! Ready for spec creation.');
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
console.log('');
|
|
184
|
+
console.log(`⚠️ ${remaining.length} categories remaining: ${remaining.join(', ')}`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Clear interview state (after spec is created)
|
|
189
|
+
*/
|
|
190
|
+
export async function interviewClear(incrementId) {
|
|
191
|
+
const projectRoot = findProjectRoot(process.cwd());
|
|
192
|
+
if (!projectRoot) {
|
|
193
|
+
console.error('❌ Not in a SpecWeave project.');
|
|
194
|
+
process.exit(1);
|
|
195
|
+
}
|
|
196
|
+
const statePath = getInterviewStatePath(projectRoot, incrementId);
|
|
197
|
+
if (fs.existsSync(statePath)) {
|
|
198
|
+
fs.unlinkSync(statePath);
|
|
199
|
+
console.log(`✅ Interview state cleared for ${incrementId}`);
|
|
200
|
+
}
|
|
201
|
+
else {
|
|
202
|
+
console.log(`No interview state found for ${incrementId}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Main interview command handler
|
|
207
|
+
*/
|
|
208
|
+
export async function interviewCommand(action, incrementId, categoryOrSummary, summary) {
|
|
209
|
+
switch (action) {
|
|
210
|
+
case 'start':
|
|
211
|
+
if (!incrementId) {
|
|
212
|
+
console.error('Usage: specweave interview start <increment-id>');
|
|
213
|
+
process.exit(1);
|
|
214
|
+
}
|
|
215
|
+
await interviewStart(incrementId);
|
|
216
|
+
break;
|
|
217
|
+
case 'mark-covered':
|
|
218
|
+
case 'mark':
|
|
219
|
+
case 'cover':
|
|
220
|
+
if (!incrementId || !categoryOrSummary) {
|
|
221
|
+
console.error('Usage: specweave interview mark-covered <increment-id> <category> [summary]');
|
|
222
|
+
process.exit(1);
|
|
223
|
+
}
|
|
224
|
+
await interviewMarkCovered(incrementId, categoryOrSummary, summary || '');
|
|
225
|
+
break;
|
|
226
|
+
case 'status':
|
|
227
|
+
await interviewStatus(incrementId);
|
|
228
|
+
break;
|
|
229
|
+
case 'clear':
|
|
230
|
+
if (!incrementId) {
|
|
231
|
+
console.error('Usage: specweave interview clear <increment-id>');
|
|
232
|
+
process.exit(1);
|
|
233
|
+
}
|
|
234
|
+
await interviewClear(incrementId);
|
|
235
|
+
break;
|
|
236
|
+
default:
|
|
237
|
+
console.log('Usage: specweave interview <action> [args]');
|
|
238
|
+
console.log('');
|
|
239
|
+
console.log('Actions:');
|
|
240
|
+
console.log(' start <increment-id> Start interview tracking');
|
|
241
|
+
console.log(' mark-covered <id> <category> [summary] Mark category as covered');
|
|
242
|
+
console.log(' status [increment-id] Show interview status');
|
|
243
|
+
console.log(' clear <increment-id> Clear interview state');
|
|
244
|
+
console.log('');
|
|
245
|
+
console.log('Categories: architecture, integrations, ui-ux, performance, security, edge-cases');
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=interview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interview.js","sourceRoot":"","sources":["../../../../src/cli/commands/interview.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lsp.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/lsp.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAiD9F;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"lsp.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/lsp.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAiD9F;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAyCf;AA+BD;;GAEG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAiCf;AA+BD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoC3F;AAsCD;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCvF;AAyED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAoE1C;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAAE,EACpB,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDxE"}
|