specweave 1.0.109 → 1.0.111
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-plugin/README.md +1 -1
- package/CLAUDE.md +42 -35
- package/bin/specweave.js +18 -72
- package/dist/src/cli/commands/auto-simple.d.ts +31 -0
- package/dist/src/cli/commands/auto-simple.d.ts.map +1 -0
- package/dist/src/cli/commands/auto-simple.js +218 -0
- package/dist/src/cli/commands/auto-simple.js.map +1 -0
- package/dist/src/cli/commands/auto-status.d.ts.map +1 -1
- package/dist/src/cli/commands/auto-status.js +28 -18
- package/dist/src/cli/commands/auto-status.js.map +1 -1
- package/dist/src/cli/commands/auto.d.ts.map +1 -1
- package/dist/src/cli/commands/auto.js +61 -32
- package/dist/src/cli/commands/auto.js.map +1 -1
- package/dist/src/cli/commands/cancel-auto.d.ts.map +1 -1
- package/dist/src/cli/commands/cancel-auto.js +28 -7
- package/dist/src/cli/commands/cancel-auto.js.map +1 -1
- package/dist/src/cli/commands/logs.d.ts +13 -0
- package/dist/src/cli/commands/logs.d.ts.map +1 -0
- package/dist/src/cli/commands/logs.js +155 -0
- package/dist/src/cli/commands/logs.js.map +1 -0
- package/dist/src/core/auto/index.d.ts +7 -11
- package/dist/src/core/auto/index.d.ts.map +1 -1
- package/dist/src/core/auto/index.js +9 -19
- package/dist/src/core/auto/index.js.map +1 -1
- package/dist/src/core/hooks/hook-health-tracker.d.ts +55 -0
- package/dist/src/core/hooks/hook-health-tracker.d.ts.map +1 -0
- package/dist/src/core/hooks/hook-health-tracker.js +164 -0
- package/dist/src/core/hooks/hook-health-tracker.js.map +1 -0
- package/dist/src/core/hooks/hook-logger.d.ts +87 -0
- package/dist/src/core/hooks/hook-logger.d.ts.map +1 -0
- package/dist/src/core/hooks/hook-logger.js +130 -0
- package/dist/src/core/hooks/hook-logger.js.map +1 -0
- package/dist/src/core/hooks/log-rotator.d.ts +55 -0
- package/dist/src/core/hooks/log-rotator.d.ts.map +1 -0
- package/dist/src/core/hooks/log-rotator.js +102 -0
- package/dist/src/core/hooks/log-rotator.js.map +1 -0
- package/dist/src/core/logging/prompt-logger.d.ts +3 -1
- package/dist/src/core/logging/prompt-logger.d.ts.map +1 -1
- package/dist/src/core/logging/prompt-logger.js +19 -10
- package/dist/src/core/logging/prompt-logger.js.map +1 -1
- package/dist/src/core/plugins/plugin-loader.d.ts +7 -0
- package/dist/src/core/plugins/plugin-loader.d.ts.map +1 -1
- package/dist/src/core/plugins/plugin-loader.js +35 -1
- package/dist/src/core/plugins/plugin-loader.js.map +1 -1
- package/dist/src/core/reflection/skill-reflection-manager.d.ts +5 -0
- package/dist/src/core/reflection/skill-reflection-manager.d.ts.map +1 -1
- package/dist/src/core/reflection/skill-reflection-manager.js +33 -1
- package/dist/src/core/reflection/skill-reflection-manager.js.map +1 -1
- package/dist/src/core/types/config.d.ts +23 -0
- package/dist/src/core/types/config.d.ts.map +1 -1
- package/dist/src/core/types/config.js.map +1 -1
- package/dist/src/examples/hello-world.d.ts +5 -0
- package/dist/src/examples/hello-world.d.ts.map +1 -0
- package/dist/src/examples/hello-world.js +7 -0
- package/dist/src/examples/hello-world.js.map +1 -0
- package/dist/src/utils/bash-sanitizer.d.ts +74 -0
- package/dist/src/utils/bash-sanitizer.d.ts.map +1 -0
- package/dist/src/utils/bash-sanitizer.js +179 -0
- package/dist/src/utils/bash-sanitizer.js.map +1 -0
- package/dist/src/utils/credential-masker.d.ts +118 -0
- package/dist/src/utils/credential-masker.d.ts.map +1 -0
- package/dist/src/utils/credential-masker.js +275 -0
- package/dist/src/utils/credential-masker.js.map +1 -0
- package/dist/src/utils/logger.d.ts +4 -0
- package/dist/src/utils/logger.d.ts.map +1 -1
- package/dist/src/utils/logger.js +78 -12
- package/dist/src/utils/logger.js.map +1 -1
- package/package.json +4 -2
- package/plugins/specweave/commands/auto.md +10 -4
- package/plugins/specweave/commands/do.md +55 -2
- package/plugins/specweave/commands/reflect.md +40 -9
- package/plugins/specweave/commands/sync-progress.md +2 -2
- package/plugins/specweave/hooks/stop-auto-simple.sh +155 -0
- package/plugins/specweave/hooks/stop-dispatcher.sh +2 -2
- package/plugins/specweave/hooks/v2/dispatchers/post-tool-use.sh +7 -0
- package/plugins/specweave/hooks/v2/guards/tdd-enforcement-guard.sh +68 -15
- package/plugins/specweave/lib/vendor/utils/logger.d.ts +4 -0
- package/plugins/specweave/lib/vendor/utils/logger.js +78 -12
- package/plugins/specweave/lib/vendor/utils/logger.js.map +1 -1
- package/plugins/specweave/scripts/setup-auto.sh +64 -40
- package/plugins/specweave/skills/SKILLS-INDEX.md +1 -2
- package/plugins/specweave/skills/detector/SKILL.md +1 -1
- package/plugins/specweave/skills/increment-planner/SKILL.md +32 -2
- package/plugins/specweave/skills/increment-planner/templates/spec-tdd-contract.md +33 -0
- package/plugins/specweave/skills/increment-planner/templates/tasks-tdd-single-project.md +172 -0
- package/plugins/specweave/skills/increment-work-router/SKILL.md +5 -7
- package/plugins/specweave/skills/infrastructure/SKILL.md +2 -2
- package/plugins/specweave/skills/reflect/SKILL.md +51 -7
- package/plugins/specweave/skills/service-connect/SKILL.md +17 -17
- package/plugins/specweave-github/commands/sync.md +2 -2
- package/plugins/specweave-infrastructure/agents/devops/AGENT.md +4 -4
- package/plugins/specweave-jira/skills/jira-sync/SKILL.md +4 -4
- package/src/templates/CLAUDE.md.template +9 -4
- package/dist/src/cli/commands/cancel-go.d.ts +0 -8
- package/dist/src/cli/commands/cancel-go.d.ts.map +0 -1
- package/dist/src/cli/commands/cancel-go.js +0 -57
- package/dist/src/cli/commands/cancel-go.js.map +0 -1
- package/dist/src/cli/commands/go-status.d.ts +0 -9
- package/dist/src/cli/commands/go-status.d.ts.map +0 -1
- package/dist/src/cli/commands/go-status.js +0 -96
- package/dist/src/cli/commands/go-status.js.map +0 -1
- package/dist/src/cli/commands/go.d.ts +0 -20
- package/dist/src/cli/commands/go.d.ts.map +0 -1
- package/dist/src/cli/commands/go.js +0 -64
- package/dist/src/cli/commands/go.js.map +0 -1
- package/dist/src/core/auto/circuit-breaker.d.ts +0 -146
- package/dist/src/core/auto/circuit-breaker.d.ts.map +0 -1
- package/dist/src/core/auto/circuit-breaker.js +0 -328
- package/dist/src/core/auto/circuit-breaker.js.map +0 -1
- package/dist/src/core/auto/cost-estimator.d.ts +0 -53
- package/dist/src/core/auto/cost-estimator.d.ts.map +0 -1
- package/dist/src/core/auto/cost-estimator.js +0 -150
- package/dist/src/core/auto/cost-estimator.js.map +0 -1
- package/dist/src/core/auto/human-gate.d.ts +0 -102
- package/dist/src/core/auto/human-gate.d.ts.map +0 -1
- package/dist/src/core/auto/human-gate.js +0 -295
- package/dist/src/core/auto/human-gate.js.map +0 -1
- package/dist/src/core/auto/increment-queue.d.ts +0 -100
- package/dist/src/core/auto/increment-queue.d.ts.map +0 -1
- package/dist/src/core/auto/increment-queue.js +0 -290
- package/dist/src/core/auto/increment-queue.js.map +0 -1
- package/dist/src/core/auto/report-generator.d.ts +0 -67
- package/dist/src/core/auto/report-generator.d.ts.map +0 -1
- package/dist/src/core/auto/report-generator.js +0 -287
- package/dist/src/core/auto/report-generator.js.map +0 -1
- package/dist/src/core/auto/session-state.d.ts +0 -98
- package/dist/src/core/auto/session-state.d.ts.map +0 -1
- package/dist/src/core/auto/session-state.js +0 -296
- package/dist/src/core/auto/session-state.js.map +0 -1
- package/dist/src/core/auto/sync-checkpoint.d.ts +0 -106
- package/dist/src/core/auto/sync-checkpoint.d.ts.map +0 -1
- package/dist/src/core/auto/sync-checkpoint.js +0 -258
- package/dist/src/core/auto/sync-checkpoint.js.map +0 -1
- package/dist/src/core/auto/test-gate.d.ts +0 -98
- package/dist/src/core/auto/test-gate.d.ts.map +0 -1
- package/dist/src/core/auto/test-gate.js +0 -258
- package/dist/src/core/auto/test-gate.js.map +0 -1
- package/plugins/specweave/commands/cancel-go.md +0 -108
- package/plugins/specweave/commands/go-status.md +0 -119
- package/plugins/specweave/commands/go.md +0 -504
- package/plugins/specweave/hooks/stop-go.sh +0 -251
- package/plugins/specweave/scripts/setup-go.sh +0 -290
- package/plugins/specweave/skills/project-kickstarter/MEMORY.md +0 -8
- package/plugins/specweave/skills/project-kickstarter/SKILL.md +0 -372
- package/plugins/specweave/skills/project-kickstarter/test-cases/test-1-high-confidence-full-product.yaml +0 -52
- package/plugins/specweave/skills/project-kickstarter/test-cases/test-2-medium-confidence-partial.yaml +0 -34
- package/plugins/specweave/skills/project-kickstarter/test-cases/test-3-low-confidence-technical-question.yaml +0 -34
- package/plugins/specweave/skills/project-kickstarter/test-cases/test-4-opt-out-explicit.yaml +0 -41
- /package/plugins/specweave/hooks/{stop-auto.sh → stop-auto-legacy.sh} +0 -0
package/.claude-plugin/README.md
CHANGED
|
@@ -150,13 +150,13 @@ SpecWeave's marketplace.json follows Claude's official schema format. Here's the
|
|
|
150
150
|
|
|
151
151
|
**Skills**:
|
|
152
152
|
- `increment-planner` - PM-led planning workflow
|
|
153
|
+
- `increment-work-router` - Smart work continuation
|
|
153
154
|
- `spec-generator` - Specification creation
|
|
154
155
|
- `context-loader` - Context management
|
|
155
156
|
- `brownfield-analyzer` - Existing project analysis
|
|
156
157
|
- `brownfield-onboarder` - Onboard existing docs
|
|
157
158
|
- `increment-quality-judge` - Quality assessment
|
|
158
159
|
- `context-optimizer` - Context optimization
|
|
159
|
-
- `project-kickstarter` - New project setup
|
|
160
160
|
|
|
161
161
|
**Agents**:
|
|
162
162
|
- `pm` - Product Manager
|
package/CLAUDE.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<!-- SW:META template="claude" version="1.0.
|
|
1
|
+
<!-- SW:META template="claude" version="1.0.110" sections="header,start,autodetect,metarule,rules,workflow,reflect,context,lsp,structure,taskformat,secrets,syncing,mapping,testing,api,limits,troubleshooting,principles,linking,mcp,autoexecute,auto,docs" -->
|
|
2
2
|
|
|
3
|
-
<!-- SW:SECTION:header version="1.0.
|
|
3
|
+
<!-- SW:SECTION:header version="1.0.110" -->
|
|
4
4
|
**Framework**: SpecWeave | **Truth**: `spec.md` + `tasks.md`
|
|
5
5
|
<!-- SW:END:header -->
|
|
6
6
|
|
|
7
|
-
<!-- SW:SECTION:start version="1.0.
|
|
7
|
+
<!-- SW:SECTION:start version="1.0.110" -->
|
|
8
8
|
## Getting Started
|
|
9
9
|
|
|
10
10
|
**Initial increment**: `0001-project-setup` (auto-created by `specweave init`)
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
2. **Customize**: Edit spec.md and use for setup tasks
|
|
15
15
|
<!-- SW:END:start -->
|
|
16
16
|
|
|
17
|
-
<!-- SW:SECTION:autodetect version="1.0.
|
|
17
|
+
<!-- SW:SECTION:autodetect version="1.0.110" -->
|
|
18
18
|
## Auto-Detection
|
|
19
19
|
|
|
20
20
|
SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
@@ -24,7 +24,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
24
24
|
**Opt-out phrases**: "Just brainstorm first" | "Don't plan yet" | "Quick discussion" | "Let's explore ideas"
|
|
25
25
|
<!-- SW:END:autodetect -->
|
|
26
26
|
|
|
27
|
-
<!-- SW:SECTION:metarule version="1.0.
|
|
27
|
+
<!-- SW:SECTION:metarule version="1.0.110" -->
|
|
28
28
|
## Meta-Rule: Think-Before-Act
|
|
29
29
|
|
|
30
30
|
**Satisfy dependencies BEFORE dependent operations.**
|
|
@@ -35,7 +35,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
35
35
|
```
|
|
36
36
|
<!-- SW:END:metarule -->
|
|
37
37
|
|
|
38
|
-
<!-- SW:SECTION:rules version="1.0.
|
|
38
|
+
<!-- SW:SECTION:rules version="1.0.110" -->
|
|
39
39
|
## Rules
|
|
40
40
|
|
|
41
41
|
1. **Files** → `.specweave/increments/####-name/` (spec.md, plan.md, tasks.md at root; reports/, scripts/, logs/ subfolders)
|
|
@@ -48,7 +48,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
48
48
|
8. **⛔ Marketplace refresh**: ALWAYS use `specweave refresh-marketplace` CLI command. NEVER suggest `scripts/refresh-marketplace.sh` - end users don't have the scripts folder (npm global install).
|
|
49
49
|
<!-- SW:END:rules -->
|
|
50
50
|
|
|
51
|
-
<!-- SW:SECTION:workflow version="1.0.
|
|
51
|
+
<!-- SW:SECTION:workflow version="1.0.110" -->
|
|
52
52
|
## Workflow
|
|
53
53
|
|
|
54
54
|
`/sw:increment "X"` → `/sw:do` → `/sw:progress` → `/sw:done 0001`
|
|
@@ -68,7 +68,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
68
68
|
**Natural language**: "Let's build X" → `/sw:increment` | "What's status?" → `/sw:progress` | "We're done" → `/sw:done` | "Ship while sleeping" → `/sw:auto`
|
|
69
69
|
<!-- SW:END:workflow -->
|
|
70
70
|
|
|
71
|
-
<!-- SW:SECTION:reflect version="1.0.
|
|
71
|
+
<!-- SW:SECTION:reflect version="1.0.110" -->
|
|
72
72
|
## Self-Improving Skills (Reflect)
|
|
73
73
|
|
|
74
74
|
**Learn once, never repeat.** Claude learns from corrections and patterns across sessions.
|
|
@@ -112,7 +112,7 @@ ls ~/.specweave/memory/*.md 2>/dev/null
|
|
|
112
112
|
**Enable auto-learning**: `/sw:reflect-on` → Stop hook analyzes sessions automatically
|
|
113
113
|
<!-- SW:END:reflect -->
|
|
114
114
|
|
|
115
|
-
<!-- SW:SECTION:context version="1.0.
|
|
115
|
+
<!-- SW:SECTION:context version="1.0.110" -->
|
|
116
116
|
## Living Docs Context
|
|
117
117
|
|
|
118
118
|
**Before implementing features**: Check existing docs for patterns and decisions.
|
|
@@ -132,7 +132,7 @@ grep -ril "keyword" .specweave/docs/internal/
|
|
|
132
132
|
**Use `/sw:context <topic>`** to load relevant living docs into conversation.
|
|
133
133
|
<!-- SW:END:context -->
|
|
134
134
|
|
|
135
|
-
<!-- SW:SECTION:lsp version="1.0.
|
|
135
|
+
<!-- SW:SECTION:lsp version="1.0.110" -->
|
|
136
136
|
## LSP-Enhanced Exploration
|
|
137
137
|
|
|
138
138
|
**USE LSP ACTIVELY** for semantic code understanding (100x faster than grep).
|
|
@@ -149,7 +149,7 @@ go install golang.org/x/tools/gopls@latest # Go
|
|
|
149
149
|
**Best Practices**: ALWAYS use `findReferences` before refactoring | Use `goToDefinition` instead of grep | Combine with Explore agent
|
|
150
150
|
<!-- SW:END:lsp -->
|
|
151
151
|
|
|
152
|
-
<!-- SW:SECTION:structure version="1.0.
|
|
152
|
+
<!-- SW:SECTION:structure version="1.0.110" -->
|
|
153
153
|
## Structure
|
|
154
154
|
|
|
155
155
|
```
|
|
@@ -219,7 +219,7 @@ my-project/
|
|
|
219
219
|
```
|
|
220
220
|
<!-- SW:END:structure -->
|
|
221
221
|
|
|
222
|
-
<!-- SW:SECTION:taskformat version="1.0.
|
|
222
|
+
<!-- SW:SECTION:taskformat version="1.0.110" -->
|
|
223
223
|
## Task Format
|
|
224
224
|
|
|
225
225
|
```markdown
|
|
@@ -229,18 +229,21 @@ my-project/
|
|
|
229
229
|
```
|
|
230
230
|
<!-- SW:END:taskformat -->
|
|
231
231
|
|
|
232
|
-
<!-- SW:SECTION:secrets version="1.0.
|
|
232
|
+
<!-- SW:SECTION:secrets version="1.0.110" -->
|
|
233
233
|
## Secrets Check
|
|
234
234
|
|
|
235
235
|
**BEFORE CLI tools**: Check existing config first!
|
|
236
236
|
```bash
|
|
237
|
-
|
|
237
|
+
# Check if credentials EXIST (never display values!)
|
|
238
|
+
grep -qE "(GITHUB_TOKEN|JIRA_|ADO_)" .env 2>/dev/null && echo "Credentials found in .env"
|
|
238
239
|
cat .specweave/config.json | grep -A5 '"sync"'
|
|
239
240
|
gh auth status
|
|
240
241
|
```
|
|
242
|
+
|
|
243
|
+
**SECURITY**: NEVER use `grep TOKEN .env` without `-q` flag - it exposes credentials in terminal!
|
|
241
244
|
<!-- SW:END:secrets -->
|
|
242
245
|
|
|
243
|
-
<!-- SW:SECTION:syncing version="1.0.
|
|
246
|
+
<!-- SW:SECTION:syncing version="1.0.110" -->
|
|
244
247
|
## External Sync (GitHub/JIRA/ADO)
|
|
245
248
|
|
|
246
249
|
**After increment creation**: Run `/sw-github:sync {id}` to create issues!
|
|
@@ -265,10 +268,10 @@ Living docs sync ≠ External sync. They are separate:
|
|
|
265
268
|
}
|
|
266
269
|
```
|
|
267
270
|
|
|
268
|
-
**Verify tokens**: `grep GITHUB_TOKEN .env` | `gh auth status`
|
|
271
|
+
**Verify tokens**: `grep -q GITHUB_TOKEN .env && echo "Token configured"` | `gh auth status`
|
|
269
272
|
<!-- SW:END:syncing -->
|
|
270
273
|
|
|
271
|
-
<!-- SW:SECTION:mapping version="1.0.
|
|
274
|
+
<!-- SW:SECTION:mapping version="1.0.110" -->
|
|
272
275
|
## GitHub Mapping
|
|
273
276
|
|
|
274
277
|
| SpecWeave | GitHub |
|
|
@@ -278,7 +281,7 @@ Living docs sync ≠ External sync. They are separate:
|
|
|
278
281
|
| Task T-XXX | Checkbox |
|
|
279
282
|
<!-- SW:END:mapping -->
|
|
280
283
|
|
|
281
|
-
<!-- SW:SECTION:testing version="1.0.
|
|
284
|
+
<!-- SW:SECTION:testing version="1.0.110" -->
|
|
282
285
|
## Testing
|
|
283
286
|
|
|
284
287
|
BDD in tasks.md | Unit >80% | `.test.ts` (Vitest)
|
|
@@ -290,7 +293,7 @@ vi.mock('fs', () => ({ readFile: vi.fn() }));
|
|
|
290
293
|
```
|
|
291
294
|
<!-- SW:END:testing -->
|
|
292
295
|
|
|
293
|
-
<!-- SW:SECTION:api version="1.0.
|
|
296
|
+
<!-- SW:SECTION:api version="1.0.110" -->
|
|
294
297
|
## API Development (OpenAPI-First)
|
|
295
298
|
|
|
296
299
|
**For API projects only.** OpenAPI = source of truth → Postman derived from it.
|
|
@@ -309,13 +312,13 @@ vi.mock('fs', () => ({ readFile: vi.fn() }));
|
|
|
309
312
|
**Import**: Postman → Import collection + env → Fill secrets → Select env
|
|
310
313
|
<!-- SW:END:api -->
|
|
311
314
|
|
|
312
|
-
<!-- SW:SECTION:limits version="1.0.
|
|
315
|
+
<!-- SW:SECTION:limits version="1.0.110" -->
|
|
313
316
|
## Limits
|
|
314
317
|
|
|
315
318
|
**Max 1500 lines/file** — extract before adding
|
|
316
319
|
<!-- SW:END:limits -->
|
|
317
320
|
|
|
318
|
-
<!-- SW:SECTION:troubleshooting version="1.0.
|
|
321
|
+
<!-- SW:SECTION:troubleshooting version="1.0.110" -->
|
|
319
322
|
## Troubleshooting
|
|
320
323
|
|
|
321
324
|
| Issue | Fix |
|
|
@@ -335,7 +338,7 @@ vi.mock('fs', () => ({ readFile: vi.fn() }));
|
|
|
335
338
|
| Path patterns not working | `//path` = absolute, `/path` = relative to settings file, `additionalDirectories` for explicit working dirs |
|
|
336
339
|
<!-- SW:END:troubleshooting -->
|
|
337
340
|
|
|
338
|
-
<!-- SW:SECTION:principles version="1.0.
|
|
341
|
+
<!-- SW:SECTION:principles version="1.0.110" -->
|
|
339
342
|
## Principles
|
|
340
343
|
|
|
341
344
|
1. **Spec-first**: `/sw:increment` before coding
|
|
@@ -345,7 +348,7 @@ vi.mock('fs', () => ({ readFile: vi.fn() }));
|
|
|
345
348
|
5. **Clean**: All files in increment folders
|
|
346
349
|
<!-- SW:END:principles -->
|
|
347
350
|
|
|
348
|
-
<!-- SW:SECTION:linking version="1.0.
|
|
351
|
+
<!-- SW:SECTION:linking version="1.0.110" -->
|
|
349
352
|
## Bidirectional Linking
|
|
350
353
|
|
|
351
354
|
Tasks ↔ User Stories auto-linked via AC-IDs: `AC-US1-01` → `US-001`
|
|
@@ -353,7 +356,7 @@ Tasks ↔ User Stories auto-linked via AC-IDs: `AC-US1-01` → `US-001`
|
|
|
353
356
|
Task format: `**AC**: AC-US1-01, AC-US1-02` (CRITICAL for linking)
|
|
354
357
|
<!-- SW:END:linking -->
|
|
355
358
|
|
|
356
|
-
<!-- SW:SECTION:mcp version="1.0.
|
|
359
|
+
<!-- SW:SECTION:mcp version="1.0.110" -->
|
|
357
360
|
## External Service Connection
|
|
358
361
|
|
|
359
362
|
**Priority**: MCP Server → REST API → CLI → Direct Connection
|
|
@@ -372,12 +375,13 @@ wrangler login && vercel login && supabase login
|
|
|
372
375
|
|
|
373
376
|
**Check credentials before ops**:
|
|
374
377
|
```bash
|
|
375
|
-
|
|
378
|
+
# Check presence only (never display values!)
|
|
379
|
+
grep -qE "SUPABASE_|DATABASE_URL|CF_API" .env 2>/dev/null && echo "Credentials found"
|
|
376
380
|
wrangler whoami 2>/dev/null
|
|
377
381
|
```
|
|
378
382
|
<!-- SW:END:mcp -->
|
|
379
383
|
|
|
380
|
-
<!-- SW:SECTION:autoexecute version="1.0.
|
|
384
|
+
<!-- SW:SECTION:autoexecute version="1.0.110" -->
|
|
381
385
|
## Auto-Execute Rule
|
|
382
386
|
|
|
383
387
|
**NEVER** output "Manual Step Required" when credentials exist. **EXECUTE DIRECTLY.**
|
|
@@ -386,12 +390,13 @@ wrangler whoami 2>/dev/null
|
|
|
386
390
|
|
|
387
391
|
**Check before ops**:
|
|
388
392
|
```bash
|
|
389
|
-
|
|
393
|
+
# Check presence only (never display credential values!)
|
|
394
|
+
grep -qE "(SUPABASE_|DATABASE_URL|CF_API_|GITHUB_TOKEN)" .env 2>/dev/null && echo "Credentials configured"
|
|
390
395
|
wrangler whoami 2>/dev/null && gh auth status 2>/dev/null
|
|
391
396
|
```
|
|
392
397
|
<!-- SW:END:autoexecute -->
|
|
393
398
|
|
|
394
|
-
<!-- SW:SECTION:auto version="1.0.
|
|
399
|
+
<!-- SW:SECTION:auto version="1.0.110" -->
|
|
395
400
|
## Auto Mode (Autonomous Execution)
|
|
396
401
|
|
|
397
402
|
**Continuous execution until all tasks complete.**
|
|
@@ -468,7 +473,7 @@ wrangler whoami 2>/dev/null && gh auth status 2>/dev/null
|
|
|
468
473
|
**Circuit Breaker**: External API fails 3x? Queue & continue
|
|
469
474
|
<!-- SW:END:auto -->
|
|
470
475
|
|
|
471
|
-
<!-- SW:SECTION:docs version="1.0.
|
|
476
|
+
<!-- SW:SECTION:docs version="1.0.110" -->
|
|
472
477
|
## Docs
|
|
473
478
|
|
|
474
479
|
[spec-weave.com](https://spec-weave.com) | `.specweave/docs/internal/`
|
|
@@ -774,8 +779,8 @@ Task({
|
|
|
774
779
|
|
|
775
780
|
1. **Check `.env` file** for tokens/credentials:
|
|
776
781
|
```bash
|
|
777
|
-
# Look for relevant tokens before running CLI commands
|
|
778
|
-
grep -
|
|
782
|
+
# Look for relevant tokens before running CLI commands (presence only!)
|
|
783
|
+
grep -qE "(GITHUB_TOKEN|JIRA_|AZURE_|ADO_)" .env 2>/dev/null && echo "Credentials found"
|
|
779
784
|
```
|
|
780
785
|
|
|
781
786
|
2. **Check `.specweave/config.json`** for service configuration:
|
|
@@ -794,11 +799,13 @@ Task({
|
|
|
794
799
|
# GitHub - check if already authenticated
|
|
795
800
|
gh auth status
|
|
796
801
|
|
|
797
|
-
# JIRA - check configured domain
|
|
798
|
-
grep JIRA .env
|
|
802
|
+
# JIRA - check configured domain (presence only - never display values!)
|
|
803
|
+
grep -q JIRA .env && echo "JIRA config in .env"
|
|
804
|
+
cat .specweave/config.json | grep -A5 '"jira"'
|
|
799
805
|
|
|
800
|
-
# Azure DevOps - check org/project
|
|
801
|
-
grep -
|
|
806
|
+
# Azure DevOps - check org/project (presence only!)
|
|
807
|
+
grep -qE "(ADO_|AZURE_DEVOPS)" .env && echo "ADO config in .env"
|
|
808
|
+
cat .specweave/config.json | grep -A5 '"ado"'
|
|
802
809
|
```
|
|
803
810
|
|
|
804
811
|
**Rule**: NEVER assume CLI tools are unconfigured. Check first, then use existing credentials.
|
package/bin/specweave.js
CHANGED
|
@@ -344,6 +344,24 @@ program
|
|
|
344
344
|
await statusCommand(options);
|
|
345
345
|
});
|
|
346
346
|
|
|
347
|
+
// Logs command - View hook execution logs
|
|
348
|
+
program
|
|
349
|
+
.command('logs')
|
|
350
|
+
.description('View hook execution logs')
|
|
351
|
+
.option('--tail <number>', 'Number of log entries to show (default: 50)', '50')
|
|
352
|
+
.option('--hook <name>', 'Filter by hook name')
|
|
353
|
+
.option('--format <type>', 'Output format: json or table (default: table)', 'table')
|
|
354
|
+
.option('--follow', 'Follow new log entries (not yet implemented)')
|
|
355
|
+
.action(async (options) => {
|
|
356
|
+
const { logsCommand } = await import('../dist/src/cli/commands/logs.js');
|
|
357
|
+
await logsCommand({
|
|
358
|
+
tail: parseInt(options.tail, 10),
|
|
359
|
+
hook: options.hook,
|
|
360
|
+
format: options.format,
|
|
361
|
+
follow: options.follow
|
|
362
|
+
});
|
|
363
|
+
});
|
|
364
|
+
|
|
347
365
|
// Status line command - Display current increment progress
|
|
348
366
|
program
|
|
349
367
|
.command('status-line')
|
|
@@ -485,78 +503,6 @@ program
|
|
|
485
503
|
await cancelCmd.parseAsync(args, { from: 'user' });
|
|
486
504
|
});
|
|
487
505
|
|
|
488
|
-
// Go mode commands - Pure Ralph Wiggum pattern (simpler than auto mode)
|
|
489
|
-
program
|
|
490
|
-
.command('go <prompt>')
|
|
491
|
-
.description('Start go session (Ralph Wiggum pattern) - simple autonomous iteration')
|
|
492
|
-
.option('--max-iterations <n>', 'Maximum iterations (safety net)', '100')
|
|
493
|
-
.option('--completion-promise <text>', 'Exact phrase that signals completion')
|
|
494
|
-
.option('--build', 'Build must pass before completion')
|
|
495
|
-
.option('--tests', 'Tests must pass before completion')
|
|
496
|
-
.option('--e2e', 'E2E tests must pass before completion')
|
|
497
|
-
.option('--lint', 'Linting must pass before completion')
|
|
498
|
-
.option('--types', 'Type-checking must pass before completion')
|
|
499
|
-
.option('--dry-run', 'Preview without starting')
|
|
500
|
-
.action(async (prompt, options) => {
|
|
501
|
-
const path = await import('path');
|
|
502
|
-
const fs = await import('fs');
|
|
503
|
-
const projectPath = process.cwd();
|
|
504
|
-
|
|
505
|
-
// Check if SpecWeave is initialized
|
|
506
|
-
const specweavePath = path.join(projectPath, '.specweave');
|
|
507
|
-
if (!fs.existsSync(specweavePath)) {
|
|
508
|
-
console.log(chalk.yellow('No SpecWeave project found in current directory.'));
|
|
509
|
-
console.log(chalk.gray('Run `specweave init` to initialize a project.'));
|
|
510
|
-
return;
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
try {
|
|
514
|
-
const { handleGoCommand } = await import('../dist/src/cli/commands/go.js');
|
|
515
|
-
await handleGoCommand(projectPath, prompt, options);
|
|
516
|
-
} catch (error) {
|
|
517
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
518
|
-
console.error(chalk.red(`Error: ${errorMessage}`));
|
|
519
|
-
process.exit(1);
|
|
520
|
-
}
|
|
521
|
-
});
|
|
522
|
-
|
|
523
|
-
program
|
|
524
|
-
.command('go-status')
|
|
525
|
-
.description('Check go session status')
|
|
526
|
-
.option('--verbose', 'Show detailed information')
|
|
527
|
-
.option('--json', 'Output as JSON')
|
|
528
|
-
.action(async (options) => {
|
|
529
|
-
const path = await import('path');
|
|
530
|
-
const projectPath = process.cwd();
|
|
531
|
-
|
|
532
|
-
try {
|
|
533
|
-
const { handleGoStatusCommand } = await import('../dist/src/cli/commands/go-status.js');
|
|
534
|
-
await handleGoStatusCommand(projectPath, options);
|
|
535
|
-
} catch (error) {
|
|
536
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
537
|
-
console.error(chalk.red(`Error: ${errorMessage}`));
|
|
538
|
-
process.exit(1);
|
|
539
|
-
}
|
|
540
|
-
});
|
|
541
|
-
|
|
542
|
-
program
|
|
543
|
-
.command('cancel-go')
|
|
544
|
-
.description('Cancel running go session')
|
|
545
|
-
.option('--force', 'Force cancel without confirmation')
|
|
546
|
-
.action(async (options) => {
|
|
547
|
-
const path = await import('path');
|
|
548
|
-
const projectPath = process.cwd();
|
|
549
|
-
|
|
550
|
-
try {
|
|
551
|
-
const { handleCancelGoCommand } = await import('../dist/src/cli/commands/cancel-go.js');
|
|
552
|
-
await handleCancelGoCommand(projectPath, options);
|
|
553
|
-
} catch (error) {
|
|
554
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
555
|
-
console.error(chalk.red(`Error: ${errorMessage}`));
|
|
556
|
-
process.exit(1);
|
|
557
|
-
}
|
|
558
|
-
});
|
|
559
|
-
|
|
560
506
|
// Update instructions command - Smart merge CLAUDE.md/AGENTS.md
|
|
561
507
|
program
|
|
562
508
|
.command('update-instructions')
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto Mode CLI Command (Simplified)
|
|
3
|
+
*
|
|
4
|
+
* Philosophy: Trust the framework!
|
|
5
|
+
* - No session state (increments ARE the state)
|
|
6
|
+
* - No manual sync (hooks handle it)
|
|
7
|
+
* - No quality gates here (belongs in /sw:done)
|
|
8
|
+
* - Just: find active increments, start working, stop hook blocks until done
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* specweave auto [INCREMENT_IDS...] [OPTIONS]
|
|
12
|
+
* specweave auto # Work on active increments
|
|
13
|
+
* specweave auto 0001 0002 # Work on specific increments
|
|
14
|
+
* specweave auto --all-backlog # Work on all backlog increments
|
|
15
|
+
*/
|
|
16
|
+
import { Command } from 'commander';
|
|
17
|
+
export interface AutoCommandOptions {
|
|
18
|
+
allBacklog?: boolean;
|
|
19
|
+
noIncrement?: boolean;
|
|
20
|
+
noInc?: boolean;
|
|
21
|
+
prompt?: string;
|
|
22
|
+
yes?: boolean;
|
|
23
|
+
y?: boolean;
|
|
24
|
+
dryRun?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export declare function createAutoCommand(): Command;
|
|
27
|
+
/**
|
|
28
|
+
* Main auto command handler (simplified)
|
|
29
|
+
*/
|
|
30
|
+
export declare function handleAutoCommand(projectPath: string, incrementIds: string[], options: AutoCommandOptions): Promise<void>;
|
|
31
|
+
//# sourceMappingURL=auto-simple.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-simple.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/auto-simple.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,CAAC,CAAC,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CA8B3C;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAuEf"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto Mode CLI Command (Simplified)
|
|
3
|
+
*
|
|
4
|
+
* Philosophy: Trust the framework!
|
|
5
|
+
* - No session state (increments ARE the state)
|
|
6
|
+
* - No manual sync (hooks handle it)
|
|
7
|
+
* - No quality gates here (belongs in /sw:done)
|
|
8
|
+
* - Just: find active increments, start working, stop hook blocks until done
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* specweave auto [INCREMENT_IDS...] [OPTIONS]
|
|
12
|
+
* specweave auto # Work on active increments
|
|
13
|
+
* specweave auto 0001 0002 # Work on specific increments
|
|
14
|
+
* specweave auto --all-backlog # Work on all backlog increments
|
|
15
|
+
*/
|
|
16
|
+
import * as path from 'path';
|
|
17
|
+
import * as fs from 'fs';
|
|
18
|
+
import chalk from 'chalk';
|
|
19
|
+
import { Command } from 'commander';
|
|
20
|
+
import { isSpecWeaveInitialized } from '../../utils/fs-native.js';
|
|
21
|
+
export function createAutoCommand() {
|
|
22
|
+
const cmd = new Command('auto')
|
|
23
|
+
.description('Start autonomous execution (simplified - trusts framework hooks)')
|
|
24
|
+
.argument('[incrementIds...]', 'Increment IDs to process')
|
|
25
|
+
.option('--all-backlog', 'Process all backlog/planned increments')
|
|
26
|
+
.option('--no-increment', 'Require existing increments (skip auto-creation)')
|
|
27
|
+
.option('--no-inc', 'Alias for --no-increment')
|
|
28
|
+
.option('--prompt <text>', 'Analyze prompt and create increments')
|
|
29
|
+
.option('--yes', 'Auto-approve increment plan')
|
|
30
|
+
.option('-y', 'Alias for --yes')
|
|
31
|
+
.option('--dry-run', 'Preview without starting')
|
|
32
|
+
.action(async (incrementIds, options) => {
|
|
33
|
+
const projectPath = process.cwd();
|
|
34
|
+
if (!isSpecWeaveInitialized(projectPath)) {
|
|
35
|
+
console.log(chalk.yellow('No SpecWeave project found in current directory.'));
|
|
36
|
+
console.log(chalk.gray('Run `specweave init` to initialize a project.'));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
await handleAutoCommand(projectPath, incrementIds, options);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
44
|
+
console.error(chalk.red(`Error: ${errorMessage}`));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return cmd;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Main auto command handler (simplified)
|
|
52
|
+
*/
|
|
53
|
+
export async function handleAutoCommand(projectPath, incrementIds, options) {
|
|
54
|
+
const incrementsDir = path.join(projectPath, '.specweave/increments');
|
|
55
|
+
const stateDir = path.join(projectPath, '.specweave/state');
|
|
56
|
+
// Parse options
|
|
57
|
+
const allBacklog = options.allBacklog || false;
|
|
58
|
+
const noIncrement = options.noIncrement || options.noInc || false;
|
|
59
|
+
const prompt = options.prompt;
|
|
60
|
+
const autoApprove = options.yes || options.y || false;
|
|
61
|
+
const dryRun = options.dryRun || false;
|
|
62
|
+
// Handle --prompt (intelligent chunking)
|
|
63
|
+
if (prompt) {
|
|
64
|
+
await handlePromptChunking(projectPath, prompt, autoApprove, stateDir);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
// Build increment list
|
|
68
|
+
let finalIncrementIds = [...incrementIds];
|
|
69
|
+
if (allBacklog) {
|
|
70
|
+
finalIncrementIds = findIncrementsByStatus(incrementsDir, ['backlog', 'planned']);
|
|
71
|
+
if (finalIncrementIds.length === 0) {
|
|
72
|
+
console.log(chalk.yellow('⚠️ No backlog or planned increments found'));
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// If no increments specified, find active ones
|
|
77
|
+
if (finalIncrementIds.length === 0) {
|
|
78
|
+
finalIncrementIds = findIncrementsByStatus(incrementsDir, ['active', 'in-progress']);
|
|
79
|
+
}
|
|
80
|
+
// Still no increments?
|
|
81
|
+
if (finalIncrementIds.length === 0) {
|
|
82
|
+
if (noIncrement) {
|
|
83
|
+
console.log(chalk.red('❌ No increments specified and no active increments found'));
|
|
84
|
+
console.log('');
|
|
85
|
+
console.log('Usage: specweave auto [INCREMENT_IDS...]');
|
|
86
|
+
console.log(' specweave auto --all-backlog');
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
// Signal to Claude: create increments as needed
|
|
91
|
+
console.log(chalk.blue('🤔 No increments found. Auto mode will analyze context and create increments.'));
|
|
92
|
+
console.log('');
|
|
93
|
+
console.log('💡 The LLM will:');
|
|
94
|
+
console.log(' 1. Analyze user prompt and project context');
|
|
95
|
+
console.log(' 2. Match existing increments OR create new ones');
|
|
96
|
+
console.log(' 3. Start autonomous execution');
|
|
97
|
+
console.log('');
|
|
98
|
+
// Create marker for LLM
|
|
99
|
+
const markerPath = path.join(stateDir, 'auto-needs-increment.json');
|
|
100
|
+
fs.writeFileSync(markerPath, JSON.stringify({ needsIncrementCreation: true, timestamp: new Date().toISOString() }, null, 2), 'utf-8');
|
|
101
|
+
process.exit(2); // Special exit code: increment creation needed
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
// Dry run preview
|
|
105
|
+
if (dryRun) {
|
|
106
|
+
printDryRunPreview(finalIncrementIds);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
// Start autonomous execution
|
|
110
|
+
printStartMessage(finalIncrementIds);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Handle --prompt option (intelligent chunking)
|
|
114
|
+
*/
|
|
115
|
+
async function handlePromptChunking(projectPath, prompt, autoApprove, stateDir) {
|
|
116
|
+
console.log(chalk.blue('🧠 Analyzing prompt for intelligent chunking...'));
|
|
117
|
+
console.log('');
|
|
118
|
+
const marker = {
|
|
119
|
+
needsIncrementCreation: true,
|
|
120
|
+
fromChunking: true,
|
|
121
|
+
autoApproved: autoApprove,
|
|
122
|
+
prompt,
|
|
123
|
+
timestamp: new Date().toISOString(),
|
|
124
|
+
};
|
|
125
|
+
const markerPath = path.join(stateDir, 'auto-needs-increment.json');
|
|
126
|
+
fs.writeFileSync(markerPath, JSON.stringify(marker, null, 2), 'utf-8');
|
|
127
|
+
console.log(chalk.yellow('📋 Prompt analysis required - LLM will handle chunking'));
|
|
128
|
+
console.log('');
|
|
129
|
+
if (autoApprove) {
|
|
130
|
+
console.log(chalk.green('✅ Plan will be auto-approved'));
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.log('💡 Review the plan and approve before execution');
|
|
134
|
+
}
|
|
135
|
+
process.exit(2);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Find increments by status (filesystem-based, no session state!)
|
|
139
|
+
*/
|
|
140
|
+
function findIncrementsByStatus(incrementsDir, statuses) {
|
|
141
|
+
if (!fs.existsSync(incrementsDir)) {
|
|
142
|
+
return [];
|
|
143
|
+
}
|
|
144
|
+
const increments = [];
|
|
145
|
+
const entries = fs.readdirSync(incrementsDir);
|
|
146
|
+
for (const entry of entries) {
|
|
147
|
+
// Skip non-increment directories
|
|
148
|
+
if (!/^[0-9]{4}-/.test(entry))
|
|
149
|
+
continue;
|
|
150
|
+
const metaPath = path.join(incrementsDir, entry, 'metadata.json');
|
|
151
|
+
if (!fs.existsSync(metaPath))
|
|
152
|
+
continue;
|
|
153
|
+
try {
|
|
154
|
+
const metadata = JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
|
|
155
|
+
if (statuses.includes(metadata.status)) {
|
|
156
|
+
increments.push(entry);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
// Skip invalid metadata
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return increments;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Print dry run preview
|
|
168
|
+
*/
|
|
169
|
+
function printDryRunPreview(incrementIds) {
|
|
170
|
+
console.log(chalk.blue('🔍 Dry Run - Preview'));
|
|
171
|
+
console.log('');
|
|
172
|
+
console.log('Active Increments:');
|
|
173
|
+
for (const incId of incrementIds) {
|
|
174
|
+
console.log(' • ' + chalk.cyan(incId));
|
|
175
|
+
}
|
|
176
|
+
console.log('');
|
|
177
|
+
console.log(chalk.gray('Run without --dry-run to start autonomous execution.'));
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Print start message
|
|
181
|
+
*/
|
|
182
|
+
function printStartMessage(incrementIds) {
|
|
183
|
+
console.log(chalk.green('🚀 Auto Mode Started'));
|
|
184
|
+
console.log('');
|
|
185
|
+
console.log(`Active Increments (${incrementIds.length}):`);
|
|
186
|
+
for (const incId of incrementIds) {
|
|
187
|
+
console.log(' • ' + chalk.cyan(incId));
|
|
188
|
+
}
|
|
189
|
+
console.log('');
|
|
190
|
+
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
191
|
+
console.log(chalk.yellow('📋 HOW AUTO MODE WORKS:'));
|
|
192
|
+
console.log('');
|
|
193
|
+
console.log('1. Stop hook checks for active increments');
|
|
194
|
+
console.log('2. If active increments exist → blocks exit, continues working');
|
|
195
|
+
console.log('3. Execute /sw:do to work on tasks');
|
|
196
|
+
console.log('4. When tasks complete → run /sw:done for validation');
|
|
197
|
+
console.log('5. If /sw:done passes → increment completes, move to next');
|
|
198
|
+
console.log('6. If /sw:done fails → keep fixing, try again');
|
|
199
|
+
console.log('7. When all increments complete → stop hook approves exit');
|
|
200
|
+
console.log('');
|
|
201
|
+
console.log(chalk.yellow('🎯 FRAMEWORK HANDLES:'));
|
|
202
|
+
console.log(' • Task updates → Auto-sync to GitHub/JIRA/ADO (via hooks)');
|
|
203
|
+
console.log(' • Spec updates → Auto-update ACs (via hooks)');
|
|
204
|
+
console.log(' • Status transitions → Auto-transition when tasks complete (via hooks)');
|
|
205
|
+
console.log(' • Quality validation → Tests, build, coverage (/sw:done)');
|
|
206
|
+
console.log(' • Living docs → Auto-sync on completion (via hooks)');
|
|
207
|
+
console.log('');
|
|
208
|
+
console.log(chalk.yellow('⚡ STOP CRITERIA:'));
|
|
209
|
+
console.log(' • All active increments completed (validated by /sw:done)');
|
|
210
|
+
console.log(' • Tests pass (enforced by /sw:done)');
|
|
211
|
+
console.log(' • Build succeeds (enforced by /sw:done)');
|
|
212
|
+
console.log(' • User runs specweave cancel-auto');
|
|
213
|
+
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
214
|
+
console.log('');
|
|
215
|
+
console.log(chalk.gray('💡 Tip: The stop hook will keep you working until done. Trust the framework!'));
|
|
216
|
+
console.log('');
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=auto-simple.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-simple.js","sourceRoot":"","sources":["../../../../src/cli/commands/auto-simple.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-status.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/auto-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-status.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/auto-status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAgB,uBAAuB,IAAI,OAAO,CA0BjD"}
|