specweave 0.34.4 → 0.34.6
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/bin/fix-marketplace-errors.sh +55 -7
- package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-feature-sync.js +3 -1
- package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -1
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +11 -2
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/living-docs.js +4 -4
- package/dist/src/cli/commands/living-docs.js.map +1 -1
- package/dist/src/cli/helpers/init/brownfield-analysis.js +15 -15
- package/dist/src/cli/helpers/init/brownfield-analysis.js.map +1 -1
- package/dist/src/cli/helpers/init/living-docs-preflight.js +7 -7
- package/dist/src/cli/helpers/init/living-docs-preflight.js.map +1 -1
- package/dist/src/cli/helpers/init/plugin-installer.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/plugin-installer.js +61 -9
- package/dist/src/cli/helpers/init/plugin-installer.js.map +1 -1
- package/dist/src/core/background/types.d.ts +3 -0
- package/dist/src/core/background/types.d.ts.map +1 -1
- package/dist/src/core/living-docs/delivery/delivery-generator.d.ts +58 -0
- package/dist/src/core/living-docs/delivery/delivery-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/delivery/delivery-generator.js +501 -0
- package/dist/src/core/living-docs/delivery/delivery-generator.js.map +1 -0
- package/dist/src/core/living-docs/delivery/index.d.ts +8 -0
- package/dist/src/core/living-docs/delivery/index.d.ts.map +1 -0
- package/dist/src/core/living-docs/delivery/index.js +7 -0
- package/dist/src/core/living-docs/delivery/index.js.map +1 -0
- package/dist/src/core/living-docs/diagrams/index.d.ts +8 -0
- package/dist/src/core/living-docs/diagrams/index.d.ts.map +1 -0
- package/dist/src/core/living-docs/diagrams/index.js +7 -0
- package/dist/src/core/living-docs/diagrams/index.js.map +1 -0
- package/dist/src/core/living-docs/diagrams/mermaid-generator.d.ts +103 -0
- package/dist/src/core/living-docs/diagrams/mermaid-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/diagrams/mermaid-generator.js +515 -0
- package/dist/src/core/living-docs/diagrams/mermaid-generator.js.map +1 -0
- package/dist/src/core/living-docs/enterprise/enterprise-generator.d.ts +85 -0
- package/dist/src/core/living-docs/enterprise/enterprise-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/enterprise/enterprise-generator.js +556 -0
- package/dist/src/core/living-docs/enterprise/enterprise-generator.js.map +1 -0
- package/dist/src/core/living-docs/enterprise/history-analyzer.d.ts +91 -0
- package/dist/src/core/living-docs/enterprise/history-analyzer.d.ts.map +1 -0
- package/dist/src/core/living-docs/enterprise/history-analyzer.js +321 -0
- package/dist/src/core/living-docs/enterprise/history-analyzer.js.map +1 -0
- package/dist/src/core/living-docs/enterprise/index.d.ts +18 -0
- package/dist/src/core/living-docs/enterprise/index.d.ts.map +1 -0
- package/dist/src/core/living-docs/enterprise/index.js +14 -0
- package/dist/src/core/living-docs/enterprise/index.js.map +1 -0
- package/dist/src/core/living-docs/enterprise/relationship-mapper.d.ts +58 -0
- package/dist/src/core/living-docs/enterprise/relationship-mapper.d.ts.map +1 -0
- package/dist/src/core/living-docs/enterprise/relationship-mapper.js +227 -0
- package/dist/src/core/living-docs/enterprise/relationship-mapper.js.map +1 -0
- package/dist/src/core/living-docs/enterprise/spec-loader.d.ts +161 -0
- package/dist/src/core/living-docs/enterprise/spec-loader.d.ts.map +1 -0
- package/dist/src/core/living-docs/enterprise/spec-loader.js +470 -0
- package/dist/src/core/living-docs/enterprise/spec-loader.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts +31 -1
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.d.ts.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js +626 -14
- package/dist/src/core/living-docs/intelligent-analyzer/inconsistency-detector.js.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts +8 -0
- package/dist/src/core/living-docs/intelligent-analyzer/index.d.ts.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/index.js +87 -4
- package/dist/src/core/living-docs/intelligent-analyzer/index.js.map +1 -1
- package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts +3 -1
- package/dist/src/core/living-docs/intelligent-analyzer/types.d.ts.map +1 -1
- package/dist/src/core/living-docs/operations/index.d.ts +8 -0
- package/dist/src/core/living-docs/operations/index.d.ts.map +1 -0
- package/dist/src/core/living-docs/operations/index.js +7 -0
- package/dist/src/core/living-docs/operations/index.js.map +1 -0
- package/dist/src/core/living-docs/operations/ops-generator.d.ts +53 -0
- package/dist/src/core/living-docs/operations/ops-generator.d.ts.map +1 -0
- package/dist/src/core/living-docs/operations/ops-generator.js +462 -0
- package/dist/src/core/living-docs/operations/ops-generator.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/commands/living-docs.md +168 -39
- package/plugins/specweave-github/lib/github-feature-sync.js +1 -1
- package/plugins/specweave-github/lib/github-feature-sync.ts +3 -1
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Operations Documentation Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates operational documentation:
|
|
5
|
+
* - Runbooks from hook scripts and patterns
|
|
6
|
+
* - Monitoring guidance
|
|
7
|
+
* - Incident templates
|
|
8
|
+
* - SLA tracking
|
|
9
|
+
*/
|
|
10
|
+
import * as fs from 'fs';
|
|
11
|
+
import * as path from 'path';
|
|
12
|
+
import { glob } from 'glob';
|
|
13
|
+
import { consoleLogger } from '../../../utils/logger.js';
|
|
14
|
+
/**
|
|
15
|
+
* Generates operations documentation
|
|
16
|
+
*/
|
|
17
|
+
export class OpsGenerator {
|
|
18
|
+
constructor(options) {
|
|
19
|
+
this.projectPath = options.projectPath;
|
|
20
|
+
this.logger = options.logger ?? consoleLogger;
|
|
21
|
+
this.opsPath = path.join(this.projectPath, '.specweave/docs/internal/operations');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generate all operations documentation
|
|
25
|
+
*/
|
|
26
|
+
async generate() {
|
|
27
|
+
const filesCreated = [];
|
|
28
|
+
// Ensure operations directory exists
|
|
29
|
+
fs.mkdirSync(this.opsPath, { recursive: true });
|
|
30
|
+
// 1. Generate Runbooks
|
|
31
|
+
this.logger.info(' Generating runbooks...');
|
|
32
|
+
const runbookResult = await this.generateRunbooks();
|
|
33
|
+
if (runbookResult.file) {
|
|
34
|
+
filesCreated.push(runbookResult.file);
|
|
35
|
+
}
|
|
36
|
+
// 2. Generate Monitoring documentation
|
|
37
|
+
this.logger.info(' Generating monitoring docs...');
|
|
38
|
+
const monitoringResult = await this.generateMonitoringDocs();
|
|
39
|
+
if (monitoringResult.file) {
|
|
40
|
+
filesCreated.push(monitoringResult.file);
|
|
41
|
+
}
|
|
42
|
+
// 3. Generate Incident templates
|
|
43
|
+
this.logger.info(' Generating incident templates...');
|
|
44
|
+
const incidentResult = await this.generateIncidentDocs();
|
|
45
|
+
if (incidentResult.file) {
|
|
46
|
+
filesCreated.push(incidentResult.file);
|
|
47
|
+
}
|
|
48
|
+
// 4. Generate SLA documentation
|
|
49
|
+
this.logger.info(' Generating SLA docs...');
|
|
50
|
+
const slaResult = await this.generateSLADocs();
|
|
51
|
+
if (slaResult.file) {
|
|
52
|
+
filesCreated.push(slaResult.file);
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
filesCreated,
|
|
56
|
+
savedFiles: filesCreated, // Alias for consistency
|
|
57
|
+
runbooksFound: runbookResult.count,
|
|
58
|
+
monitoringConfigsFound: monitoringResult.count,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generate runbooks from hooks and scripts
|
|
63
|
+
*/
|
|
64
|
+
async generateRunbooks() {
|
|
65
|
+
const runbooks = [];
|
|
66
|
+
// Find hook scripts
|
|
67
|
+
const hookPaths = [
|
|
68
|
+
path.join(this.projectPath, 'plugins/specweave/hooks'),
|
|
69
|
+
path.join(this.projectPath, '.specweave/hooks'),
|
|
70
|
+
];
|
|
71
|
+
for (const hookPath of hookPaths) {
|
|
72
|
+
if (!fs.existsSync(hookPath))
|
|
73
|
+
continue;
|
|
74
|
+
const scripts = await glob('**/*.sh', { cwd: hookPath, nodir: true });
|
|
75
|
+
for (const script of scripts) {
|
|
76
|
+
const info = this.parseHookScript(path.join(hookPath, script));
|
|
77
|
+
if (info) {
|
|
78
|
+
runbooks.push({
|
|
79
|
+
name: info.name,
|
|
80
|
+
description: info.description,
|
|
81
|
+
type: 'hook',
|
|
82
|
+
source: script,
|
|
83
|
+
steps: info.steps,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Find shell scripts in scripts/ folder
|
|
89
|
+
const scriptsPath = path.join(this.projectPath, 'scripts');
|
|
90
|
+
if (fs.existsSync(scriptsPath)) {
|
|
91
|
+
const scripts = await glob('**/*.sh', { cwd: scriptsPath, nodir: true });
|
|
92
|
+
for (const script of scripts) {
|
|
93
|
+
const info = this.parseHookScript(path.join(scriptsPath, script));
|
|
94
|
+
if (info) {
|
|
95
|
+
runbooks.push({
|
|
96
|
+
name: info.name,
|
|
97
|
+
description: info.description,
|
|
98
|
+
type: 'script',
|
|
99
|
+
source: `scripts/${script}`,
|
|
100
|
+
steps: info.steps,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Add standard runbooks based on detected patterns
|
|
106
|
+
const standardRunbooks = this.generateStandardRunbooks();
|
|
107
|
+
runbooks.push(...standardRunbooks);
|
|
108
|
+
// Generate documentation
|
|
109
|
+
const lines = [
|
|
110
|
+
'# Operational Runbooks',
|
|
111
|
+
'',
|
|
112
|
+
`*Generated: ${new Date().toLocaleDateString()} | Runbooks: ${runbooks.length}*`,
|
|
113
|
+
'',
|
|
114
|
+
'## Quick Reference',
|
|
115
|
+
'',
|
|
116
|
+
'| Runbook | Type | Description |',
|
|
117
|
+
'|---------|------|-------------|',
|
|
118
|
+
];
|
|
119
|
+
for (const rb of runbooks) {
|
|
120
|
+
lines.push(`| [${rb.name}](#${rb.name.toLowerCase().replace(/\s+/g, '-')}) | ${rb.type} | ${rb.description.substring(0, 50)}... |`);
|
|
121
|
+
}
|
|
122
|
+
lines.push('', '## Runbook Details', '');
|
|
123
|
+
for (const rb of runbooks) {
|
|
124
|
+
lines.push(`### ${rb.name}`, '');
|
|
125
|
+
lines.push(`**Type**: ${rb.type}`);
|
|
126
|
+
if (rb.source) {
|
|
127
|
+
lines.push(`**Source**: \`${rb.source}\``);
|
|
128
|
+
}
|
|
129
|
+
lines.push('');
|
|
130
|
+
lines.push(rb.description, '');
|
|
131
|
+
if (rb.steps.length > 0) {
|
|
132
|
+
lines.push('**Steps**:', '');
|
|
133
|
+
for (let i = 0; i < rb.steps.length; i++) {
|
|
134
|
+
lines.push(`${i + 1}. ${rb.steps[i]}`);
|
|
135
|
+
}
|
|
136
|
+
lines.push('');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
lines.push('---', `*Last updated: ${new Date().toISOString()}*`);
|
|
140
|
+
const filePath = path.join(this.opsPath, 'RUNBOOKS.md');
|
|
141
|
+
fs.writeFileSync(filePath, lines.join('\n'));
|
|
142
|
+
return { file: filePath, count: runbooks.length };
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Generate monitoring documentation
|
|
146
|
+
*/
|
|
147
|
+
async generateMonitoringDocs() {
|
|
148
|
+
const monitoringConfigs = [];
|
|
149
|
+
// Check for common monitoring configurations
|
|
150
|
+
const prometheusPath = path.join(this.projectPath, 'prometheus.yml');
|
|
151
|
+
if (fs.existsSync(prometheusPath)) {
|
|
152
|
+
monitoringConfigs.push({
|
|
153
|
+
name: 'Prometheus',
|
|
154
|
+
type: 'metrics',
|
|
155
|
+
configFile: 'prometheus.yml',
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
const grafanaPath = path.join(this.projectPath, 'grafana');
|
|
159
|
+
if (fs.existsSync(grafanaPath)) {
|
|
160
|
+
monitoringConfigs.push({
|
|
161
|
+
name: 'Grafana',
|
|
162
|
+
type: 'dashboards',
|
|
163
|
+
configFile: 'grafana/',
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
// Check package.json for monitoring dependencies
|
|
167
|
+
const pkgPath = path.join(this.projectPath, 'package.json');
|
|
168
|
+
if (fs.existsSync(pkgPath)) {
|
|
169
|
+
try {
|
|
170
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
171
|
+
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
|
|
172
|
+
if (deps['prom-client']) {
|
|
173
|
+
monitoringConfigs.push({ name: 'Prometheus Client', type: 'metrics' });
|
|
174
|
+
}
|
|
175
|
+
if (deps['dd-trace']) {
|
|
176
|
+
monitoringConfigs.push({ name: 'Datadog APM', type: 'tracing' });
|
|
177
|
+
}
|
|
178
|
+
if (deps['@opentelemetry/api']) {
|
|
179
|
+
monitoringConfigs.push({ name: 'OpenTelemetry', type: 'tracing' });
|
|
180
|
+
}
|
|
181
|
+
if (deps['newrelic']) {
|
|
182
|
+
monitoringConfigs.push({ name: 'New Relic', type: 'apm' });
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
catch { /* ignore */ }
|
|
186
|
+
}
|
|
187
|
+
// Generate documentation
|
|
188
|
+
const lines = [
|
|
189
|
+
'# Monitoring Documentation',
|
|
190
|
+
'',
|
|
191
|
+
`*Generated: ${new Date().toLocaleDateString()}*`,
|
|
192
|
+
'',
|
|
193
|
+
'## Monitoring Stack',
|
|
194
|
+
'',
|
|
195
|
+
'| Tool | Type | Config |',
|
|
196
|
+
'|------|------|--------|',
|
|
197
|
+
];
|
|
198
|
+
for (const config of monitoringConfigs) {
|
|
199
|
+
lines.push(`| ${config.name} | ${config.type} | ${config.configFile || '-'} |`);
|
|
200
|
+
}
|
|
201
|
+
lines.push('', '## Key Metrics to Monitor', '');
|
|
202
|
+
lines.push('### Application Metrics', '');
|
|
203
|
+
lines.push('- Request latency (p50, p95, p99)');
|
|
204
|
+
lines.push('- Error rate');
|
|
205
|
+
lines.push('- Request throughput');
|
|
206
|
+
lines.push('- Active connections');
|
|
207
|
+
lines.push('');
|
|
208
|
+
lines.push('### Infrastructure Metrics', '');
|
|
209
|
+
lines.push('- CPU utilization');
|
|
210
|
+
lines.push('- Memory usage');
|
|
211
|
+
lines.push('- Disk I/O');
|
|
212
|
+
lines.push('- Network throughput');
|
|
213
|
+
lines.push('');
|
|
214
|
+
lines.push('### Business Metrics', '');
|
|
215
|
+
lines.push('- Feature usage rates');
|
|
216
|
+
lines.push('- User sessions');
|
|
217
|
+
lines.push('- Transaction volume');
|
|
218
|
+
lines.push('');
|
|
219
|
+
lines.push('## Alerting Guidelines', '');
|
|
220
|
+
lines.push('| Severity | Response Time | Examples |');
|
|
221
|
+
lines.push('|----------|---------------|----------|');
|
|
222
|
+
lines.push('| P1 - Critical | 15 min | Service down, data loss |');
|
|
223
|
+
lines.push('| P2 - High | 1 hour | Degraded performance, partial outage |');
|
|
224
|
+
lines.push('| P3 - Medium | 4 hours | Non-critical errors, capacity warnings |');
|
|
225
|
+
lines.push('| P4 - Low | 24 hours | Minor issues, optimization opportunities |');
|
|
226
|
+
lines.push('');
|
|
227
|
+
lines.push('---', `*Last updated: ${new Date().toISOString()}*`);
|
|
228
|
+
const filePath = path.join(this.opsPath, 'MONITORING.md');
|
|
229
|
+
fs.writeFileSync(filePath, lines.join('\n'));
|
|
230
|
+
return { file: filePath, count: monitoringConfigs.length };
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Generate incident documentation templates
|
|
234
|
+
*/
|
|
235
|
+
async generateIncidentDocs() {
|
|
236
|
+
const lines = [
|
|
237
|
+
'# Incident Management',
|
|
238
|
+
'',
|
|
239
|
+
`*Generated: ${new Date().toLocaleDateString()}*`,
|
|
240
|
+
'',
|
|
241
|
+
'## Incident Response Process',
|
|
242
|
+
'',
|
|
243
|
+
'```mermaid',
|
|
244
|
+
'graph LR',
|
|
245
|
+
' A[Detect] --> B[Assess]',
|
|
246
|
+
' B --> C[Triage]',
|
|
247
|
+
' C --> D[Investigate]',
|
|
248
|
+
' D --> E[Mitigate]',
|
|
249
|
+
' E --> F[Resolve]',
|
|
250
|
+
' F --> G[Post-mortem]',
|
|
251
|
+
'```',
|
|
252
|
+
'',
|
|
253
|
+
'## Incident Severity Levels',
|
|
254
|
+
'',
|
|
255
|
+
'| Level | Description | Response | Examples |',
|
|
256
|
+
'|-------|-------------|----------|----------|',
|
|
257
|
+
'| SEV1 | Critical - Complete outage | Immediate, all hands | Service unreachable |',
|
|
258
|
+
'| SEV2 | Major - Partial outage | < 30 min, on-call | Degraded performance |',
|
|
259
|
+
'| SEV3 | Minor - Limited impact | < 4 hours | Feature unavailable |',
|
|
260
|
+
'| SEV4 | Low - Minimal impact | Next business day | Minor bug |',
|
|
261
|
+
'',
|
|
262
|
+
'## Incident Template',
|
|
263
|
+
'',
|
|
264
|
+
'### Incident Report: [TITLE]',
|
|
265
|
+
'',
|
|
266
|
+
'**Date**: YYYY-MM-DD',
|
|
267
|
+
'**Severity**: SEV[1-4]',
|
|
268
|
+
'**Duration**: X hours',
|
|
269
|
+
'**Impact**: [Description of impact]',
|
|
270
|
+
'',
|
|
271
|
+
'#### Timeline',
|
|
272
|
+
'',
|
|
273
|
+
'| Time | Event |',
|
|
274
|
+
'|------|-------|',
|
|
275
|
+
'| HH:MM | Issue detected |',
|
|
276
|
+
'| HH:MM | Investigation started |',
|
|
277
|
+
'| HH:MM | Root cause identified |',
|
|
278
|
+
'| HH:MM | Mitigation applied |',
|
|
279
|
+
'| HH:MM | Resolved |',
|
|
280
|
+
'',
|
|
281
|
+
'#### Root Cause',
|
|
282
|
+
'',
|
|
283
|
+
'[Description of root cause]',
|
|
284
|
+
'',
|
|
285
|
+
'#### Resolution',
|
|
286
|
+
'',
|
|
287
|
+
'[Description of how it was resolved]',
|
|
288
|
+
'',
|
|
289
|
+
'#### Action Items',
|
|
290
|
+
'',
|
|
291
|
+
'- [ ] Prevent recurrence',
|
|
292
|
+
'- [ ] Improve detection',
|
|
293
|
+
'- [ ] Update documentation',
|
|
294
|
+
'',
|
|
295
|
+
'## Post-Mortem Process',
|
|
296
|
+
'',
|
|
297
|
+
'1. Schedule post-mortem within 48 hours',
|
|
298
|
+
'2. Gather all participants',
|
|
299
|
+
'3. Review timeline and facts',
|
|
300
|
+
'4. Identify root causes (5 Whys)',
|
|
301
|
+
'5. Define action items',
|
|
302
|
+
'6. Document and share learnings',
|
|
303
|
+
'',
|
|
304
|
+
'---',
|
|
305
|
+
`*Last updated: ${new Date().toISOString()}*`,
|
|
306
|
+
];
|
|
307
|
+
const filePath = path.join(this.opsPath, 'INCIDENT-HISTORY.md');
|
|
308
|
+
fs.writeFileSync(filePath, lines.join('\n'));
|
|
309
|
+
return { file: filePath };
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Generate SLA documentation
|
|
313
|
+
*/
|
|
314
|
+
async generateSLADocs() {
|
|
315
|
+
const lines = [
|
|
316
|
+
'# Service Level Agreements (SLA)',
|
|
317
|
+
'',
|
|
318
|
+
`*Generated: ${new Date().toLocaleDateString()}*`,
|
|
319
|
+
'',
|
|
320
|
+
'## SLA Overview',
|
|
321
|
+
'',
|
|
322
|
+
'| Service | Target | Current | Status |',
|
|
323
|
+
'|---------|--------|---------|--------|',
|
|
324
|
+
'| Availability | 99.9% | TBD | 🟡 |',
|
|
325
|
+
'| Response Time (p95) | < 200ms | TBD | 🟡 |',
|
|
326
|
+
'| Error Rate | < 0.1% | TBD | 🟡 |',
|
|
327
|
+
'',
|
|
328
|
+
'## Definitions',
|
|
329
|
+
'',
|
|
330
|
+
'### Availability',
|
|
331
|
+
'',
|
|
332
|
+
'Percentage of time the service is operational and accessible.',
|
|
333
|
+
'',
|
|
334
|
+
'| Target | Monthly Downtime |',
|
|
335
|
+
'|--------|-----------------|',
|
|
336
|
+
'| 99.9% | 43.8 minutes |',
|
|
337
|
+
'| 99.95% | 21.9 minutes |',
|
|
338
|
+
'| 99.99% | 4.38 minutes |',
|
|
339
|
+
'',
|
|
340
|
+
'### Response Time',
|
|
341
|
+
'',
|
|
342
|
+
'Time from request receipt to response delivery.',
|
|
343
|
+
'',
|
|
344
|
+
'| Percentile | Target |',
|
|
345
|
+
'|------------|--------|',
|
|
346
|
+
'| p50 | < 50ms |',
|
|
347
|
+
'| p95 | < 200ms |',
|
|
348
|
+
'| p99 | < 500ms |',
|
|
349
|
+
'',
|
|
350
|
+
'### Error Rate',
|
|
351
|
+
'',
|
|
352
|
+
'Percentage of requests resulting in 5xx errors.',
|
|
353
|
+
'',
|
|
354
|
+
'## Error Budget',
|
|
355
|
+
'',
|
|
356
|
+
'```',
|
|
357
|
+
'Monthly Error Budget = (100% - SLA Target) * Total Minutes',
|
|
358
|
+
'',
|
|
359
|
+
'For 99.9% SLA:',
|
|
360
|
+
'Error Budget = 0.1% * 43,200 minutes = 43.2 minutes/month',
|
|
361
|
+
'```',
|
|
362
|
+
'',
|
|
363
|
+
'## Measurement',
|
|
364
|
+
'',
|
|
365
|
+
'- **Tool**: [Prometheus/Datadog/etc.]',
|
|
366
|
+
'- **Dashboard**: [Link to monitoring dashboard]',
|
|
367
|
+
'- **Reporting**: Monthly SLA report',
|
|
368
|
+
'',
|
|
369
|
+
'---',
|
|
370
|
+
`*Last updated: ${new Date().toISOString()}*`,
|
|
371
|
+
];
|
|
372
|
+
const filePath = path.join(this.opsPath, 'SLA-TRACKING.md');
|
|
373
|
+
fs.writeFileSync(filePath, lines.join('\n'));
|
|
374
|
+
return { file: filePath };
|
|
375
|
+
}
|
|
376
|
+
// Helper methods
|
|
377
|
+
parseHookScript(filePath) {
|
|
378
|
+
try {
|
|
379
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
380
|
+
const name = path.basename(filePath, '.sh');
|
|
381
|
+
// Extract description from first comment block
|
|
382
|
+
const descMatch = content.match(/^#\s*(.+)/m);
|
|
383
|
+
const description = descMatch ? descMatch[1] : `Script: ${name}`;
|
|
384
|
+
// Extract major steps from comments
|
|
385
|
+
const steps = [];
|
|
386
|
+
const stepMatches = content.match(/^#\s*\d+[\.\)]\s*(.+)/gm);
|
|
387
|
+
if (stepMatches) {
|
|
388
|
+
for (const match of stepMatches) {
|
|
389
|
+
steps.push(match.replace(/^#\s*\d+[\.\)]\s*/, ''));
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
return { name, description, steps };
|
|
393
|
+
}
|
|
394
|
+
catch {
|
|
395
|
+
return null;
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
generateStandardRunbooks() {
|
|
399
|
+
const runbooks = [];
|
|
400
|
+
// Check for npm project
|
|
401
|
+
if (fs.existsSync(path.join(this.projectPath, 'package.json'))) {
|
|
402
|
+
runbooks.push({
|
|
403
|
+
name: 'Application Restart',
|
|
404
|
+
description: 'Steps to safely restart the application',
|
|
405
|
+
type: 'standard',
|
|
406
|
+
steps: [
|
|
407
|
+
'Check current service health',
|
|
408
|
+
'Notify stakeholders',
|
|
409
|
+
'Stop the service: `npm stop` or `systemctl stop app`',
|
|
410
|
+
'Clear cache if needed: `npm cache clean --force`',
|
|
411
|
+
'Start the service: `npm start` or `systemctl start app`',
|
|
412
|
+
'Verify health: check logs and health endpoint',
|
|
413
|
+
'Notify stakeholders of completion',
|
|
414
|
+
],
|
|
415
|
+
});
|
|
416
|
+
runbooks.push({
|
|
417
|
+
name: 'Dependency Update',
|
|
418
|
+
description: 'Process for updating npm dependencies',
|
|
419
|
+
type: 'standard',
|
|
420
|
+
steps: [
|
|
421
|
+
'Create a new branch: `git checkout -b deps-update`',
|
|
422
|
+
'Check for updates: `npm outdated`',
|
|
423
|
+
'Update dependencies: `npm update`',
|
|
424
|
+
'Run tests: `npm test`',
|
|
425
|
+
'Review changes: `git diff package-lock.json`',
|
|
426
|
+
'Commit and create PR',
|
|
427
|
+
],
|
|
428
|
+
});
|
|
429
|
+
}
|
|
430
|
+
// Check for Docker
|
|
431
|
+
if (fs.existsSync(path.join(this.projectPath, 'Dockerfile'))) {
|
|
432
|
+
runbooks.push({
|
|
433
|
+
name: 'Container Restart',
|
|
434
|
+
description: 'Steps to restart Docker containers',
|
|
435
|
+
type: 'standard',
|
|
436
|
+
steps: [
|
|
437
|
+
'Check container status: `docker ps`',
|
|
438
|
+
'Stop container: `docker-compose stop` or `docker stop <id>`',
|
|
439
|
+
'Remove container (optional): `docker rm <id>`',
|
|
440
|
+
'Rebuild if needed: `docker-compose build`',
|
|
441
|
+
'Start container: `docker-compose up -d`',
|
|
442
|
+
'Verify logs: `docker logs -f <id>`',
|
|
443
|
+
],
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
// Add cleanup runbook
|
|
447
|
+
runbooks.push({
|
|
448
|
+
name: 'Cache Cleanup',
|
|
449
|
+
description: 'Clear various caches to resolve issues',
|
|
450
|
+
type: 'standard',
|
|
451
|
+
steps: [
|
|
452
|
+
'Clear npm cache: `npm cache clean --force`',
|
|
453
|
+
'Clear build artifacts: `rm -rf dist/ build/`',
|
|
454
|
+
'Clear node_modules if needed: `rm -rf node_modules && npm install`',
|
|
455
|
+
'Clear SpecWeave cache: `rm -rf .specweave/cache/`',
|
|
456
|
+
'Restart the application',
|
|
457
|
+
],
|
|
458
|
+
});
|
|
459
|
+
return runbooks;
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
//# sourceMappingURL=ops-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ops-generator.js","sourceRoot":"","sources":["../../../../../src/core/living-docs/operations/ops-generator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specweave",
|
|
3
|
-
"version": "0.34.
|
|
3
|
+
"version": "0.34.6",
|
|
4
4
|
"description": "Spec-driven development framework for Claude Code. AI-native workflow with living documentation, intelligent agents, and multilingual support (9 languages). Enterprise-grade traceability with permanent specs and temporary increments.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|