specweave 0.6.8 β 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/README.md +1 -1
- package/CLAUDE.md +903 -99
- package/README.md +143 -207
- package/bin/specweave.js +67 -0
- package/dist/cli/commands/abandon.d.ts +13 -0
- package/dist/cli/commands/abandon.d.ts.map +1 -0
- package/dist/cli/commands/abandon.js +15 -0
- package/dist/cli/commands/abandon.js.map +1 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +90 -18
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/pause.d.ts +13 -0
- package/dist/cli/commands/pause.d.ts.map +1 -0
- package/dist/cli/commands/pause.js +15 -0
- package/dist/cli/commands/pause.js.map +1 -0
- package/dist/cli/commands/qa.d.ts +54 -0
- package/dist/cli/commands/qa.d.ts.map +1 -0
- package/dist/cli/commands/qa.js +98 -0
- package/dist/cli/commands/qa.js.map +1 -0
- package/dist/cli/commands/resume.d.ts +12 -0
- package/dist/cli/commands/resume.d.ts.map +1 -0
- package/dist/cli/commands/resume.js +14 -0
- package/dist/cli/commands/resume.js.map +1 -0
- package/dist/cli/commands/status.d.ts +12 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +23 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/ado.d.ts +57 -0
- package/dist/cli/helpers/issue-tracker/ado.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/ado.js +223 -0
- package/dist/cli/helpers/issue-tracker/ado.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/github.d.ts +65 -0
- package/dist/cli/helpers/issue-tracker/github.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/github.js +284 -0
- package/dist/cli/helpers/issue-tracker/github.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/index.d.ts +22 -0
- package/dist/cli/helpers/issue-tracker/index.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/index.js +270 -0
- package/dist/cli/helpers/issue-tracker/index.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/jira.d.ts +61 -0
- package/dist/cli/helpers/issue-tracker/jira.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/jira.js +265 -0
- package/dist/cli/helpers/issue-tracker/jira.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/types.d.ts +86 -0
- package/dist/cli/helpers/issue-tracker/types.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/types.js +16 -0
- package/dist/cli/helpers/issue-tracker/types.js.map +1 -0
- package/dist/cli/helpers/issue-tracker/utils.d.ts +103 -0
- package/dist/cli/helpers/issue-tracker/utils.d.ts.map +1 -0
- package/dist/cli/helpers/issue-tracker/utils.js +240 -0
- package/dist/cli/helpers/issue-tracker/utils.js.map +1 -0
- package/dist/core/increment/limits.d.ts +68 -0
- package/dist/core/increment/limits.d.ts.map +1 -0
- package/dist/core/increment/limits.js +224 -0
- package/dist/core/increment/limits.js.map +1 -0
- package/dist/core/increment/metadata-manager.d.ts +114 -0
- package/dist/core/increment/metadata-manager.d.ts.map +1 -0
- package/dist/core/increment/metadata-manager.js +320 -0
- package/dist/core/increment/metadata-manager.js.map +1 -0
- package/dist/core/increment/status-commands.d.ts +43 -0
- package/dist/core/increment/status-commands.d.ts.map +1 -0
- package/dist/core/increment/status-commands.js +277 -0
- package/dist/core/increment/status-commands.js.map +1 -0
- package/dist/core/plugin-detector.d.ts +1 -0
- package/dist/core/plugin-detector.d.ts.map +1 -1
- package/dist/core/plugin-detector.js +25 -0
- package/dist/core/plugin-detector.js.map +1 -1
- package/dist/core/qa/qa-runner.d.ts +16 -0
- package/dist/core/qa/qa-runner.d.ts.map +1 -0
- package/dist/core/qa/qa-runner.js +404 -0
- package/dist/core/qa/qa-runner.js.map +1 -0
- package/dist/core/qa/quality-gate-decider.d.ts +53 -0
- package/dist/core/qa/quality-gate-decider.d.ts.map +1 -0
- package/dist/core/qa/quality-gate-decider.js +268 -0
- package/dist/core/qa/quality-gate-decider.js.map +1 -0
- package/dist/core/qa/risk-calculator.d.ts +126 -0
- package/dist/core/qa/risk-calculator.d.ts.map +1 -0
- package/dist/core/qa/risk-calculator.js +247 -0
- package/dist/core/qa/risk-calculator.js.map +1 -0
- package/dist/core/qa/types.d.ts +315 -0
- package/dist/core/qa/types.d.ts.map +1 -0
- package/dist/core/qa/types.js +8 -0
- package/dist/core/qa/types.js.map +1 -0
- package/dist/core/types/config.d.ts +35 -0
- package/dist/core/types/config.d.ts.map +1 -1
- package/dist/core/types/config.js +16 -0
- package/dist/core/types/config.js.map +1 -1
- package/dist/core/types/increment-metadata.d.ts +120 -0
- package/dist/core/types/increment-metadata.d.ts.map +1 -0
- package/dist/core/types/increment-metadata.js +138 -0
- package/dist/core/types/increment-metadata.js.map +1 -0
- package/dist/hooks/lib/invoke-translator-skill.d.ts +60 -0
- package/dist/hooks/lib/invoke-translator-skill.d.ts.map +1 -0
- package/dist/hooks/lib/invoke-translator-skill.js +201 -0
- package/dist/hooks/lib/invoke-translator-skill.js.map +1 -0
- package/dist/hooks/lib/translate-file.d.ts +59 -0
- package/dist/hooks/lib/translate-file.d.ts.map +1 -0
- package/dist/hooks/lib/translate-file.js +350 -0
- package/dist/hooks/lib/translate-file.js.map +1 -0
- package/dist/locales/en/cli.json +3 -1
- package/dist/metrics/calculators/change-failure-rate.d.ts +22 -0
- package/dist/metrics/calculators/change-failure-rate.d.ts.map +1 -0
- package/dist/metrics/calculators/change-failure-rate.js +70 -0
- package/dist/metrics/calculators/change-failure-rate.js.map +1 -0
- package/dist/metrics/calculators/deployment-frequency.d.ts +20 -0
- package/dist/metrics/calculators/deployment-frequency.d.ts.map +1 -0
- package/dist/metrics/calculators/deployment-frequency.js +61 -0
- package/dist/metrics/calculators/deployment-frequency.js.map +1 -0
- package/dist/metrics/calculators/lead-time.d.ts +22 -0
- package/dist/metrics/calculators/lead-time.d.ts.map +1 -0
- package/dist/metrics/calculators/lead-time.js +82 -0
- package/dist/metrics/calculators/lead-time.js.map +1 -0
- package/dist/metrics/calculators/mttr.d.ts +21 -0
- package/dist/metrics/calculators/mttr.d.ts.map +1 -0
- package/dist/metrics/calculators/mttr.js +60 -0
- package/dist/metrics/calculators/mttr.js.map +1 -0
- package/dist/metrics/dora-calculator.d.ts +24 -0
- package/dist/metrics/dora-calculator.d.ts.map +1 -0
- package/dist/metrics/dora-calculator.js +104 -0
- package/dist/metrics/dora-calculator.js.map +1 -0
- package/dist/metrics/github-client.d.ts +51 -0
- package/dist/metrics/github-client.d.ts.map +1 -0
- package/dist/metrics/github-client.js +133 -0
- package/dist/metrics/github-client.js.map +1 -0
- package/dist/metrics/types.d.ts +112 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +10 -0
- package/dist/metrics/types.js.map +1 -0
- package/dist/metrics/utils/percentile.d.ts +25 -0
- package/dist/metrics/utils/percentile.d.ts.map +1 -0
- package/dist/metrics/utils/percentile.js +46 -0
- package/dist/metrics/utils/percentile.js.map +1 -0
- package/dist/metrics/utils/tier-classifier.d.ts +61 -0
- package/dist/metrics/utils/tier-classifier.d.ts.map +1 -0
- package/dist/metrics/utils/tier-classifier.js +100 -0
- package/dist/metrics/utils/tier-classifier.js.map +1 -0
- package/dist/utils/auth-helpers.d.ts +58 -0
- package/dist/utils/auth-helpers.d.ts.map +1 -0
- package/dist/utils/auth-helpers.js +108 -0
- package/dist/utils/auth-helpers.js.map +1 -0
- package/dist/utils/env-file.d.ts +88 -0
- package/dist/utils/env-file.d.ts.map +1 -0
- package/dist/utils/env-file.js +180 -0
- package/dist/utils/env-file.js.map +1 -0
- package/dist/utils/plugin-detection.d.ts +50 -0
- package/dist/utils/plugin-detection.d.ts.map +1 -0
- package/dist/utils/plugin-detection.js +229 -0
- package/dist/utils/plugin-detection.js.map +1 -0
- package/dist/utils/secrets-loader.d.ts +88 -0
- package/dist/utils/secrets-loader.d.ts.map +1 -0
- package/dist/utils/secrets-loader.js +271 -0
- package/dist/utils/secrets-loader.js.map +1 -0
- package/dist/utils/translation.d.ts +187 -0
- package/dist/utils/translation.d.ts.map +1 -0
- package/dist/utils/translation.js +414 -0
- package/dist/utils/translation.js.map +1 -0
- package/package.json +28 -44
- package/plugins/specweave/.claude-plugin/plugin.json +3 -3
- package/plugins/specweave/agents/pm/AGENT.md +330 -54
- package/plugins/specweave/agents/test-aware-planner/AGENT.md +1035 -0
- package/plugins/specweave/agents/test-aware-planner/templates/README.md +118 -0
- package/plugins/specweave/agents/test-aware-planner/templates/task-non-testable.md.template +24 -0
- package/plugins/specweave/agents/test-aware-planner/templates/task-testable.md.template +53 -0
- package/plugins/specweave/agents/test-aware-planner/templates/tasks-frontmatter.md.template +11 -0
- package/plugins/specweave/commands/README.md +88 -163
- package/plugins/specweave/commands/specweave-abandon.md +314 -0
- package/plugins/specweave/commands/specweave-check-tests.md +546 -0
- package/plugins/specweave/commands/{do.md β specweave-do.md} +5 -7
- package/plugins/specweave/commands/{increment.md β specweave-increment.md} +231 -4
- package/plugins/specweave/commands/specweave-pause.md +189 -0
- package/plugins/specweave/commands/specweave-qa.md +245 -0
- package/plugins/specweave/commands/specweave-resume.md +216 -0
- package/plugins/specweave/commands/specweave-status.md +397 -0
- package/plugins/specweave/commands/specweave-sync-tasks.md +256 -0
- package/plugins/specweave/commands/{translate.md β specweave-translate.md} +3 -3
- package/plugins/specweave/commands/specweave-update-scope.md +351 -0
- package/plugins/specweave/commands/specweave.md +21 -21
- package/plugins/specweave/hooks/post-increment-planning.sh +335 -0
- package/plugins/specweave/hooks/post-task-completion.sh +141 -0
- package/plugins/specweave/skills/SKILLS-INDEX.md +1 -1
- package/plugins/specweave/skills/brownfield-analyzer/SKILL.md +9 -9
- package/plugins/specweave/skills/increment-planner/SKILL.md +400 -212
- package/plugins/specweave/skills/increment-quality-judge-v2/SKILL.md +499 -0
- package/plugins/specweave/skills/plugin-detector/SKILL.md +114 -1
- package/plugins/specweave/skills/project-kickstarter/SKILL.md +74 -1
- package/plugins/specweave/skills/{rfc-generator β spec-generator}/SKILL.md +22 -29
- package/plugins/specweave/skills/specweave-detector/SKILL.md +3 -3
- package/plugins/specweave/skills/specweave-framework/SKILL.md +2 -2
- package/plugins/specweave-ado/.claude-plugin/plugin.json +18 -4
- package/plugins/specweave-ado/agents/ado-manager/AGENT.md +426 -0
- package/plugins/specweave-ado/commands/close-workitem.md +52 -0
- package/plugins/specweave-ado/commands/create-workitem.md +53 -0
- package/plugins/specweave-ado/commands/status.md +53 -0
- package/plugins/specweave-ado/commands/sync.md +55 -0
- package/plugins/specweave-ado/lib/ado-client.ts +361 -0
- package/plugins/specweave-ado/reference/ado-specweave-mapping.md +552 -0
- package/plugins/specweave-ado/skills/ado-sync/SKILL.md +344 -193
- package/plugins/specweave-docs/skills/docusaurus/SKILL.md +73 -0
- package/plugins/specweave-github/agents/github-manager/AGENT.md +49 -0
- package/plugins/specweave-github/commands/{github-close-issue.md β close-issue.md} +1 -1
- package/plugins/specweave-github/commands/{github-create-issue.md β create-issue.md} +1 -1
- package/plugins/specweave-github/commands/{github-status.md β status.md} +1 -1
- package/plugins/specweave-github/commands/{github-sync-tasks.md β sync-tasks.md} +1 -1
- package/plugins/specweave-github/commands/{github-sync.md β sync.md} +1 -1
- package/plugins/specweave-github/reference/github-specweave-mapping.md +377 -0
- package/plugins/specweave-github/skills/github-sync/SKILL.md +11 -3
- package/plugins/specweave-infrastructure/commands/{specweave.monitor-setup.md β monitor-setup.md} +5 -0
- package/plugins/specweave-infrastructure/commands/{specweave.slo-implement.md β slo-implement.md} +5 -0
- package/plugins/specweave-jira/agents/jira-manager/AGENT.md +380 -0
- package/plugins/specweave-jira/commands/{specweave.sync-jira.md β sync.md} +1 -1
- package/plugins/specweave-jira/reference/jira-specweave-mapping.md +508 -0
- package/plugins/specweave-ml/commands/ml-deploy.md +1 -1
- package/plugins/specweave-ml/commands/ml-evaluate.md +1 -1
- package/plugins/specweave-ml/commands/ml-explain.md +1 -1
- package/plugins/specweave-ml/commands/{specweave.ml-pipeline.md β ml-pipeline.md} +5 -0
- package/src/templates/AGENTS.md.template +331 -31
- package/src/templates/CLAUDE.md.template +36 -21
- package/src/templates/COMPLETION-REPORT.template.md +128 -0
- package/src/templates/README.md.template +17 -16
- package/src/templates/docs/README.md +11 -9
- package/src/templates/docs/spec-template.md +229 -0
- package/plugins/specweave/commands/inc.md +0 -85
- package/plugins/specweave/commands/list-increments.md +0 -180
- package/src/adapters/README.md +0 -275
- package/src/adapters/adapter-base.ts +0 -182
- package/src/adapters/adapter-interface.ts +0 -166
- package/src/adapters/adapter-loader.ts +0 -256
- package/src/adapters/agents-md-generator.ts +0 -228
- package/src/adapters/claude/README.md +0 -233
- package/src/adapters/claude/adapter.ts +0 -468
- package/src/adapters/claude-md-generator.ts +0 -377
- package/src/adapters/codex/README.md +0 -105
- package/src/adapters/codex/adapter.ts +0 -333
- package/src/adapters/cursor/.cursor/context/docs-context.md +0 -62
- package/src/adapters/cursor/.cursor/context/increments-context.md +0 -71
- package/src/adapters/cursor/.cursor/context/strategy-context.md +0 -73
- package/src/adapters/cursor/.cursor/context/tests-context.md +0 -89
- package/src/adapters/cursor/README.md +0 -283
- package/src/adapters/cursor/adapter.ts +0 -451
- package/src/adapters/doc-generator.ts +0 -331
- package/src/adapters/gemini/README.md +0 -97
- package/src/adapters/gemini/adapter.ts +0 -298
- package/src/adapters/generic/README.md +0 -277
- package/src/adapters/generic/adapter.ts +0 -378
- package/src/adapters/registry.yaml +0 -187
- /package/plugins/specweave/commands/{costs.md β specweave-costs.md} +0 -0
- /package/plugins/specweave/commands/{done.md β specweave-done.md} +0 -0
- /package/plugins/specweave/commands/{next.md β specweave-next.md} +0 -0
- /package/plugins/specweave/commands/{progress.md β specweave-progress.md} +0 -0
- /package/plugins/specweave/commands/{sync-docs.md β specweave-sync-docs.md} +0 -0
- /package/plugins/specweave/commands/{tdd-cycle.md β specweave-tdd-cycle.md} +0 -0
- /package/plugins/specweave/commands/{tdd-green.md β specweave-tdd-green.md} +0 -0
- /package/plugins/specweave/commands/{tdd-red.md β specweave-tdd-red.md} +0 -0
- /package/plugins/specweave/commands/{tdd-refactor.md β specweave-tdd-refactor.md} +0 -0
- /package/plugins/specweave/commands/{validate.md β specweave-validate.md} +0 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: resume
|
|
3
|
+
description: Resume a paused increment
|
|
4
|
+
usage: /specweave:resume <increment-id>
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Resume Increment Command
|
|
8
|
+
|
|
9
|
+
**Usage**: `/specweave:resume <increment-id>`
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Purpose
|
|
14
|
+
|
|
15
|
+
Resume a paused increment when:
|
|
16
|
+
- **Blocker resolved** (API keys arrived, approval granted)
|
|
17
|
+
- **Ready to continue** after deprioritization
|
|
18
|
+
- **Prerequisite completed** (can now proceed)
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Behavior
|
|
23
|
+
|
|
24
|
+
1. **Validates** increment exists and is "paused"
|
|
25
|
+
2. **Calculates** pause duration (days, hours)
|
|
26
|
+
3. **Updates** metadata.json:
|
|
27
|
+
- `status`: "paused" β "active"
|
|
28
|
+
- Clears `pausedReason` and `pausedAt`
|
|
29
|
+
- Updates `lastActivity` timestamp
|
|
30
|
+
4. **Displays** context (pause duration, last activity)
|
|
31
|
+
5. **Suggests** next actions (/do to continue work)
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Examples
|
|
36
|
+
|
|
37
|
+
### Resume after a few days
|
|
38
|
+
```bash
|
|
39
|
+
/resume 0006
|
|
40
|
+
|
|
41
|
+
β
Increment 0006 resumed
|
|
42
|
+
β±οΈ Was paused for: 3 days, 4 hours
|
|
43
|
+
π‘ Last activity: Created translation pipeline
|
|
44
|
+
π Continue with: /do
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Resume after a few hours
|
|
48
|
+
```bash
|
|
49
|
+
/resume 0007
|
|
50
|
+
|
|
51
|
+
β
Increment 0007 resumed
|
|
52
|
+
β±οΈ Was paused for: 2 hours
|
|
53
|
+
π Continue with: /do
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Edge Cases
|
|
59
|
+
|
|
60
|
+
### Already Active
|
|
61
|
+
```bash
|
|
62
|
+
/resume 0006
|
|
63
|
+
|
|
64
|
+
β οΈ Increment 0006 is already active
|
|
65
|
+
No action needed. Continue with: /do
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Cannot Resume Completed
|
|
69
|
+
```bash
|
|
70
|
+
/resume 0005
|
|
71
|
+
|
|
72
|
+
β Cannot resume increment 0005
|
|
73
|
+
Status: completed
|
|
74
|
+
Increment is already complete
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Resume Abandoned (Confirmation Required)
|
|
78
|
+
```bash
|
|
79
|
+
/resume 0008
|
|
80
|
+
|
|
81
|
+
β οΈ Increment 0008 is abandoned
|
|
82
|
+
Reason: Requirements changed
|
|
83
|
+
|
|
84
|
+
Are you sure you want to resume? [y/N]: y
|
|
85
|
+
|
|
86
|
+
β
Increment 0008 resumed
|
|
87
|
+
β οΈ Note: Was abandoned 5 days ago
|
|
88
|
+
π‘ Review spec.md to ensure still relevant
|
|
89
|
+
π Continue with: /do
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Increment Not Found
|
|
93
|
+
```bash
|
|
94
|
+
/resume 9999
|
|
95
|
+
|
|
96
|
+
β Increment not found: 9999
|
|
97
|
+
π‘ Check paused increments: /status --paused
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Implementation
|
|
103
|
+
|
|
104
|
+
This command uses the MetadataManager to update increment status:
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
import { MetadataManager, IncrementStatus } from '../src/core/increment/metadata-manager';
|
|
108
|
+
|
|
109
|
+
// Read current metadata
|
|
110
|
+
const metadata = MetadataManager.read(incrementId);
|
|
111
|
+
|
|
112
|
+
// Validate can resume
|
|
113
|
+
if (metadata.status === IncrementStatus.COMPLETED) {
|
|
114
|
+
throw new Error('Cannot resume completed increment');
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Calculate pause duration
|
|
118
|
+
const pauseDuration = calculateDuration(metadata.pausedAt, new Date());
|
|
119
|
+
|
|
120
|
+
// Update status
|
|
121
|
+
MetadataManager.updateStatus(incrementId, IncrementStatus.ACTIVE);
|
|
122
|
+
|
|
123
|
+
// Display context
|
|
124
|
+
console.log(`Was paused for: ${pauseDuration}`);
|
|
125
|
+
console.log(`Last activity: ${getLastActivity(incrementId)}`);
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Status Flow
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
paused ββresumeββ> active
|
|
134
|
+
β
|
|
135
|
+
abandoned ββresumeββ> active (with confirmation)
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Related Commands
|
|
141
|
+
|
|
142
|
+
- `/pause <id>` - Pause active increment
|
|
143
|
+
- `/status` - Show all increment statuses
|
|
144
|
+
- `/status --paused` - Show only paused increments
|
|
145
|
+
- `/do` - Continue work after resuming
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Best Practices
|
|
150
|
+
|
|
151
|
+
β
**Review spec.md first** - Especially after long pauses
|
|
152
|
+
|
|
153
|
+
β
**Check for changes** - Dependencies, requirements may have changed
|
|
154
|
+
|
|
155
|
+
β
**Update estimates** - If scope changed during pause
|
|
156
|
+
|
|
157
|
+
β
**Communicate** - Let team know you're resuming (if collaborative)
|
|
158
|
+
|
|
159
|
+
β **Don't blindly resume** - Re-validate context first
|
|
160
|
+
|
|
161
|
+
β **Don't resume abandoned without review** - Understand why it was abandoned
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Automatic Suggestions
|
|
166
|
+
|
|
167
|
+
When you run `/status`, stale paused increments trigger suggestions:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
/status
|
|
171
|
+
|
|
172
|
+
βΈοΈ Paused (2):
|
|
173
|
+
π 0006-stripe [feature]
|
|
174
|
+
Paused: 3 days ago
|
|
175
|
+
Reason: Waiting for API keys
|
|
176
|
+
π‘ Check if API keys arrived β /resume 0006
|
|
177
|
+
|
|
178
|
+
π 0007-refactor [refactor]
|
|
179
|
+
Paused: 10 days ago
|
|
180
|
+
Reason: Deprioritized
|
|
181
|
+
β οΈ STALE! Consider resuming or abandoning
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Context Recovery
|
|
187
|
+
|
|
188
|
+
After resuming, the command shows helpful context:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
/resume 0006
|
|
192
|
+
|
|
193
|
+
β
Increment 0006 resumed
|
|
194
|
+
|
|
195
|
+
π Status before pause:
|
|
196
|
+
- Progress: 30% (6/20 tasks done)
|
|
197
|
+
- Last completed: T-005 (Create translation pipeline)
|
|
198
|
+
- Paused reason: Waiting for Stripe API keys
|
|
199
|
+
|
|
200
|
+
π‘ Next steps:
|
|
201
|
+
1. Review spec.md (requirements may have changed)
|
|
202
|
+
2. Check dependencies (are API keys available?)
|
|
203
|
+
3. Continue with: /do
|
|
204
|
+
|
|
205
|
+
π Quick commands:
|
|
206
|
+
/do # Resume work
|
|
207
|
+
/progress # See detailed progress
|
|
208
|
+
/validate # Check increment health
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
**Command**: `/specweave:resume` (or `/resume`)
|
|
214
|
+
**Plugin**: specweave (core)
|
|
215
|
+
**Version**: v0.7.0+
|
|
216
|
+
**Part of**: Increment 0007 - Smart Status Management
|
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: status
|
|
3
|
+
description: Show increment status overview with rich details (active, paused, completed, abandoned)
|
|
4
|
+
usage: /specweave:status [--active|--paused|--completed|--abandoned|--stale]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Increment Status Command
|
|
8
|
+
|
|
9
|
+
**Usage**: `/specweave:status [filter]`
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Purpose
|
|
14
|
+
|
|
15
|
+
Display comprehensive increment status overview:
|
|
16
|
+
- **Active** increments (currently working)
|
|
17
|
+
- **Paused** increments (blocked/deprioritized)
|
|
18
|
+
- **Completed** increments (done)
|
|
19
|
+
- **Abandoned** increments (obsolete)
|
|
20
|
+
- **Warnings** for stale increments (paused >7 days, active >30 days)
|
|
21
|
+
- **Suggestions** for next actions
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Output Format
|
|
26
|
+
|
|
27
|
+
### Default (All Increments)
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
/status
|
|
31
|
+
|
|
32
|
+
π Increment Status Overview
|
|
33
|
+
|
|
34
|
+
π₯ Active (2):
|
|
35
|
+
π¨ 0005-payment-hotfix [hotfix]
|
|
36
|
+
Progress: 90% (18/20 tasks)
|
|
37
|
+
Age: 6 hours
|
|
38
|
+
Last: Fixed Stripe webhook signature
|
|
39
|
+
|
|
40
|
+
π§ 0006-i18n [feature]
|
|
41
|
+
Progress: 50% (10/20 tasks)
|
|
42
|
+
Age: 2 days
|
|
43
|
+
Last: Created translation pipeline
|
|
44
|
+
|
|
45
|
+
βΈοΈ Paused (1):
|
|
46
|
+
π 0007-stripe-integration [feature]
|
|
47
|
+
Progress: 30% (6/20 tasks)
|
|
48
|
+
Paused: 3 days ago
|
|
49
|
+
Reason: Waiting for Stripe API keys
|
|
50
|
+
β οΈ Review or abandon?
|
|
51
|
+
|
|
52
|
+
β
Completed (4):
|
|
53
|
+
0001-core-framework
|
|
54
|
+
0002-core-enhancements
|
|
55
|
+
0003-intelligent-model-selection
|
|
56
|
+
0004-plugin-architecture
|
|
57
|
+
|
|
58
|
+
π Summary:
|
|
59
|
+
- Active: 2 increments (1 hotfix, 1 feature)
|
|
60
|
+
- Paused: 1 increment
|
|
61
|
+
- Completed: 4 increments
|
|
62
|
+
- Context switching: 20-40% cost (2 active)
|
|
63
|
+
|
|
64
|
+
π Type Limits (v0.7.0+):
|
|
65
|
+
β
hotfix: 1/unlimited active
|
|
66
|
+
β
feature: 1/2 active
|
|
67
|
+
β
refactor: 0/1 active
|
|
68
|
+
β
bug: 0/unlimited active
|
|
69
|
+
β
change-request: 0/2 active
|
|
70
|
+
β
experiment: 0/unlimited active
|
|
71
|
+
|
|
72
|
+
π‘ Suggestions:
|
|
73
|
+
- Complete 0005 first (90% done, almost there!)
|
|
74
|
+
- Resume or abandon 0007 (stale)
|
|
75
|
+
|
|
76
|
+
Commands:
|
|
77
|
+
/do # Continue current work
|
|
78
|
+
/resume 0007 # Resume paused increment
|
|
79
|
+
/abandon 0007 # Abandon if obsolete
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Filtered Views
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Active only
|
|
86
|
+
/status --active
|
|
87
|
+
|
|
88
|
+
π₯ Active Increments (2):
|
|
89
|
+
π¨ 0005-payment-hotfix [hotfix] (90% done, 6 hours)
|
|
90
|
+
π§ 0006-i18n [feature] (50% done, 2 days)
|
|
91
|
+
|
|
92
|
+
# Paused only
|
|
93
|
+
/status --paused
|
|
94
|
+
|
|
95
|
+
βΈοΈ Paused Increments (1):
|
|
96
|
+
π 0007-stripe [feature] (paused 3 days)
|
|
97
|
+
Reason: Waiting for API keys
|
|
98
|
+
|
|
99
|
+
# Stale only (paused >7 days OR active >30 days)
|
|
100
|
+
/status --stale
|
|
101
|
+
|
|
102
|
+
β οΈ Stale Increments (2):
|
|
103
|
+
π 0008-experiment [experiment] (paused 10 days)
|
|
104
|
+
π¨ AUTO-ABANDON WARNING (14 days inactive)
|
|
105
|
+
|
|
106
|
+
π§ 0009-big-refactor [refactor] (active 35 days)
|
|
107
|
+
β οΈ Long-running - consider breaking into smaller increments
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## Implementation
|
|
113
|
+
|
|
114
|
+
Uses MetadataManager and Limits to query and display:
|
|
115
|
+
|
|
116
|
+
```typescript
|
|
117
|
+
import { MetadataManager, IncrementStatus } from '../src/core/increment/metadata-manager';
|
|
118
|
+
import { checkAllLimits, getLimitsSummary } from '../src/core/increment/limits';
|
|
119
|
+
|
|
120
|
+
// Get all increments
|
|
121
|
+
const allIncrements = MetadataManager.getAll();
|
|
122
|
+
|
|
123
|
+
// Group by status
|
|
124
|
+
const active = allIncrements.filter(m => m.status === IncrementStatus.ACTIVE);
|
|
125
|
+
const paused = allIncrements.filter(m => m.status === IncrementStatus.PAUSED);
|
|
126
|
+
const completed = allIncrements.filter(m => m.status === IncrementStatus.COMPLETED);
|
|
127
|
+
const abandoned = allIncrements.filter(m => m.status === IncrementStatus.ABANDONED);
|
|
128
|
+
|
|
129
|
+
// Get extended metadata (with progress%)
|
|
130
|
+
const extended = active.map(m => MetadataManager.getExtended(m.id));
|
|
131
|
+
|
|
132
|
+
// Display rich output
|
|
133
|
+
console.log('π Increment Status Overview\n');
|
|
134
|
+
|
|
135
|
+
// Active
|
|
136
|
+
if (active.length > 0) {
|
|
137
|
+
console.log(`π₯ Active (${active.length}):`);
|
|
138
|
+
extended.forEach(inc => {
|
|
139
|
+
const icon = inc.type === 'hotfix' ? 'π¨' : 'π§';
|
|
140
|
+
console.log(` ${icon} ${inc.id} [${inc.type}]`);
|
|
141
|
+
console.log(` Progress: ${inc.progress}% (${inc.completedTasks}/${inc.totalTasks} tasks)`);
|
|
142
|
+
console.log(` Age: ${formatAge(inc.ageInDays)}`);
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// ... similar for paused, completed, abandoned
|
|
147
|
+
|
|
148
|
+
// Summary with type limits (v0.7.0+)
|
|
149
|
+
console.log('\nπ Summary:');
|
|
150
|
+
console.log(` - Active: ${active.length} increments`);
|
|
151
|
+
console.log(` - Paused: ${paused.length} increments`);
|
|
152
|
+
console.log(` - Completed: ${completed.length} increments`);
|
|
153
|
+
|
|
154
|
+
// Type limits breakdown
|
|
155
|
+
console.log('\nπ Type Limits (v0.7.0+):');
|
|
156
|
+
const limitsCheck = checkAllLimits();
|
|
157
|
+
for (const [type, check] of Object.entries(limitsCheck)) {
|
|
158
|
+
const icon = check.exceeded ? 'β οΈ ' : 'β
';
|
|
159
|
+
const limitStr = check.limit === null ? 'unlimited' : check.limit.toString();
|
|
160
|
+
console.log(` ${icon} ${type}: ${check.current}/${limitStr} active`);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Context switching warning if multiple active
|
|
164
|
+
if (active.length > 1) {
|
|
165
|
+
const cost = active.length === 2 ? '20-30%' : '40%';
|
|
166
|
+
console.log(`\nβ οΈ Context switching: ${cost} productivity cost`);
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Progress Calculation
|
|
173
|
+
|
|
174
|
+
Progress percentage calculated from tasks.md:
|
|
175
|
+
|
|
176
|
+
```typescript
|
|
177
|
+
// Count completed tasks: [x] or [X]
|
|
178
|
+
const completedMatches = tasksContent.match(/\[x\]/gi);
|
|
179
|
+
const completedTasks = completedMatches ? completedMatches.length : 0;
|
|
180
|
+
|
|
181
|
+
// Count total tasks: [ ] or [x]
|
|
182
|
+
const totalMatches = tasksContent.match(/\[ \]|\[x\]/gi);
|
|
183
|
+
const totalTasks = totalMatches ? totalMatches.length : 0;
|
|
184
|
+
|
|
185
|
+
// Calculate percentage
|
|
186
|
+
const progress = Math.round((completedTasks / totalTasks) * 100);
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## Warnings and Suggestions
|
|
192
|
+
|
|
193
|
+
### Stale Paused Increments
|
|
194
|
+
|
|
195
|
+
Paused >7 days β warning:
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
βΈοΈ Paused (1):
|
|
199
|
+
π 0007-stripe [feature]
|
|
200
|
+
Paused: 10 days ago
|
|
201
|
+
β οΈ STALE! Review or abandon?
|
|
202
|
+
|
|
203
|
+
π‘ Actions:
|
|
204
|
+
/resume 0007 # If unblocked
|
|
205
|
+
/abandon 0007 # If no longer needed
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### Long-Running Active Increments
|
|
209
|
+
|
|
210
|
+
Active >30 days β warning:
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
π₯ Active (1):
|
|
214
|
+
π§ 0009-big-refactor [refactor]
|
|
215
|
+
Progress: 45% (23/50 tasks)
|
|
216
|
+
Age: 35 days
|
|
217
|
+
β οΈ Long-running! Consider breaking into smaller increments
|
|
218
|
+
|
|
219
|
+
π‘ Suggestion: Large increments increase risk and reduce velocity
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### Context Switching Cost
|
|
223
|
+
|
|
224
|
+
Multiple active features β warning:
|
|
225
|
+
|
|
226
|
+
```
|
|
227
|
+
π Summary:
|
|
228
|
+
- Active: 3 features (0010, 0011, 0012)
|
|
229
|
+
- Context switching: 40-60% productivity cost
|
|
230
|
+
|
|
231
|
+
β οΈ High context switching detected!
|
|
232
|
+
Research shows: 3+ concurrent tasks = 40% productivity loss
|
|
233
|
+
Suggestion: Complete or pause one before continuing
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Auto-Abandon Warning (Experiments)
|
|
237
|
+
|
|
238
|
+
Experiments inactive >14 days β warning:
|
|
239
|
+
|
|
240
|
+
```
|
|
241
|
+
π§ͺ Experiments (1):
|
|
242
|
+
π¬ 0010-graphql-experiment [experiment]
|
|
243
|
+
Last activity: 15 days ago
|
|
244
|
+
π¨ AUTO-ABANDON WARNING
|
|
245
|
+
|
|
246
|
+
π‘ Experiments auto-abandon after 14 days of inactivity
|
|
247
|
+
To prevent: Update via /do or /touch 0010
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## Filters
|
|
253
|
+
|
|
254
|
+
### --active
|
|
255
|
+
|
|
256
|
+
Show only active increments
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
/status --active
|
|
260
|
+
|
|
261
|
+
π₯ Active (2):
|
|
262
|
+
π¨ 0005-hotfix [hotfix] (90% done)
|
|
263
|
+
π§ 0006-i18n [feature] (50% done)
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### --paused
|
|
267
|
+
|
|
268
|
+
Show only paused increments
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
/status --paused
|
|
272
|
+
|
|
273
|
+
βΈοΈ Paused (2):
|
|
274
|
+
π 0007-stripe [feature] (paused 3 days)
|
|
275
|
+
Reason: Waiting for API keys
|
|
276
|
+
|
|
277
|
+
π 0008-refactor [refactor] (paused 10 days)
|
|
278
|
+
Reason: Deprioritized
|
|
279
|
+
β οΈ STALE
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### --completed
|
|
283
|
+
|
|
284
|
+
Show only completed increments
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
/status --completed
|
|
288
|
+
|
|
289
|
+
β
Completed (5):
|
|
290
|
+
0001-core-framework (completed 30 days ago)
|
|
291
|
+
0002-core-enhancements (completed 25 days ago)
|
|
292
|
+
0003-model-selection (completed 20 days ago)
|
|
293
|
+
0004-plugin-architecture (completed 15 days ago)
|
|
294
|
+
0005-cross-platform (completed 10 days ago)
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### --abandoned
|
|
298
|
+
|
|
299
|
+
Show only abandoned increments
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
/status --abandoned
|
|
303
|
+
|
|
304
|
+
β Abandoned (3):
|
|
305
|
+
0008-old-approach (Requirements changed)
|
|
306
|
+
0009-failed-experiment (Experiment failed)
|
|
307
|
+
0010-superseded (Replaced by 0011)
|
|
308
|
+
|
|
309
|
+
π Stats:
|
|
310
|
+
- Abandonment rate: 30% (3/10 total)
|
|
311
|
+
- Common reasons: Requirements changed (2), Experiment failed (1)
|
|
312
|
+
|
|
313
|
+
π‘ Periodically review _abandoned/ for learnings
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### --stale
|
|
317
|
+
|
|
318
|
+
Show only stale increments (paused >7 days OR active >30 days)
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
/status --stale
|
|
322
|
+
|
|
323
|
+
β οΈ Stale Increments (3):
|
|
324
|
+
π 0007-stripe [feature] (paused 10 days)
|
|
325
|
+
π 0008-experiment [experiment] (paused 15 days)
|
|
326
|
+
π¨ AUTO-ABANDON WARNING
|
|
327
|
+
π§ 0009-refactor [refactor] (active 35 days)
|
|
328
|
+
β οΈ Long-running
|
|
329
|
+
|
|
330
|
+
π‘ Review stale increments weekly
|
|
331
|
+
Paused >7 days: Resume or abandon
|
|
332
|
+
Active >30 days: Consider breaking into smaller increments
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
---
|
|
336
|
+
|
|
337
|
+
## Related Commands
|
|
338
|
+
|
|
339
|
+
- `/do` - Continue work on active increment
|
|
340
|
+
- `/progress` - Detailed progress for current increment
|
|
341
|
+
- `/pause <id>` - Pause active increment
|
|
342
|
+
- `/resume <id>` - Resume paused increment
|
|
343
|
+
- `/abandon <id>` - Abandon increment (move to _abandoned/)
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## Best Practices
|
|
348
|
+
|
|
349
|
+
β
**Check status regularly** - Daily or before starting work
|
|
350
|
+
|
|
351
|
+
β
**Address warnings promptly** - Don't let stale increments pile up
|
|
352
|
+
|
|
353
|
+
β
**Complete before starting new** - Minimize context switching
|
|
354
|
+
|
|
355
|
+
β
**Review abandoned for learnings** - Understand patterns
|
|
356
|
+
|
|
357
|
+
β **Don't ignore stale warnings** - They indicate blocked or forgotten work
|
|
358
|
+
|
|
359
|
+
β **Don't accumulate paused increments** - Resume or abandon
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## Statistics and Analytics
|
|
364
|
+
|
|
365
|
+
Future enhancement (v0.8.0+):
|
|
366
|
+
|
|
367
|
+
```bash
|
|
368
|
+
/status --analytics
|
|
369
|
+
|
|
370
|
+
π Increment Analytics (Last 90 Days):
|
|
371
|
+
|
|
372
|
+
Velocity:
|
|
373
|
+
- Completed: 8 increments
|
|
374
|
+
- Avg cycle time: 4.2 days
|
|
375
|
+
- Completion rate: 80%
|
|
376
|
+
|
|
377
|
+
Quality:
|
|
378
|
+
- Avg coverage: 85%
|
|
379
|
+
- Avg tasks/increment: 25
|
|
380
|
+
|
|
381
|
+
Patterns:
|
|
382
|
+
- Most common type: feature (70%)
|
|
383
|
+
- Context switching: 1.5 active avg
|
|
384
|
+
- Stale rate: 15% (paused >7 days)
|
|
385
|
+
|
|
386
|
+
Recommendations:
|
|
387
|
+
- β
Good velocity (8 increments/90 days)
|
|
388
|
+
- β οΈ High abandonment (20%) - review scoping
|
|
389
|
+
- β
Low context switching (1.5 avg)
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
---
|
|
393
|
+
|
|
394
|
+
**Command**: `/specweave:status` (or `/status`)
|
|
395
|
+
**Plugin**: specweave (core)
|
|
396
|
+
**Version**: v0.7.0+
|
|
397
|
+
**Part of**: Increment 0007 - Smart Status Management
|