specweave 1.0.263 β†’ 1.0.265

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.
Files changed (53) hide show
  1. package/CLAUDE.md +25 -25
  2. package/dist/src/cli/commands/docs.d.ts.map +1 -1
  3. package/dist/src/cli/commands/docs.js +13 -5
  4. package/dist/src/cli/commands/docs.js.map +1 -1
  5. package/dist/src/core/living-docs/content-distributor.js +1 -1
  6. package/dist/src/core/living-docs/content-distributor.js.map +1 -1
  7. package/dist/src/core/living-docs/scaffolding/template-engine.js +1 -1
  8. package/dist/src/core/living-docs/scaffolding/template-engine.js.map +1 -1
  9. package/dist/src/core/living-docs/sync-helpers/generators.js +1 -1
  10. package/dist/src/core/living-docs/sync-helpers/generators.js.map +1 -1
  11. package/dist/src/core/llm/consent.d.ts +33 -0
  12. package/dist/src/core/llm/consent.d.ts.map +1 -0
  13. package/dist/src/core/llm/consent.js +94 -0
  14. package/dist/src/core/llm/consent.js.map +1 -0
  15. package/dist/src/core/llm/provider-factory.d.ts +2 -0
  16. package/dist/src/core/llm/provider-factory.d.ts.map +1 -1
  17. package/dist/src/core/llm/provider-factory.js +12 -0
  18. package/dist/src/core/llm/provider-factory.js.map +1 -1
  19. package/dist/src/core/llm/types.d.ts +17 -0
  20. package/dist/src/core/llm/types.d.ts.map +1 -1
  21. package/dist/src/core/llm/types.js.map +1 -1
  22. package/dist/src/core/skills/skill-judge.d.ts.map +1 -1
  23. package/dist/src/core/skills/skill-judge.js +14 -0
  24. package/dist/src/core/skills/skill-judge.js.map +1 -1
  25. package/dist/src/utils/docs-preview/config-generator.d.ts +14 -6
  26. package/dist/src/utils/docs-preview/config-generator.d.ts.map +1 -1
  27. package/dist/src/utils/docs-preview/config-generator.js +526 -137
  28. package/dist/src/utils/docs-preview/config-generator.js.map +1 -1
  29. package/dist/src/utils/docs-preview/docusaurus-setup.d.ts +1 -1
  30. package/dist/src/utils/docs-preview/docusaurus-setup.d.ts.map +1 -1
  31. package/dist/src/utils/docs-preview/docusaurus-setup.js +121 -48
  32. package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
  33. package/dist/src/utils/docs-preview/index.d.ts +3 -2
  34. package/dist/src/utils/docs-preview/index.d.ts.map +1 -1
  35. package/dist/src/utils/docs-preview/index.js +3 -2
  36. package/dist/src/utils/docs-preview/index.js.map +1 -1
  37. package/dist/src/utils/docs-preview/project-detector.d.ts +16 -0
  38. package/dist/src/utils/docs-preview/project-detector.d.ts.map +1 -0
  39. package/dist/src/utils/docs-preview/project-detector.js +234 -0
  40. package/dist/src/utils/docs-preview/project-detector.js.map +1 -0
  41. package/dist/src/utils/docs-preview/server-manager.d.ts +4 -0
  42. package/dist/src/utils/docs-preview/server-manager.d.ts.map +1 -1
  43. package/dist/src/utils/docs-preview/server-manager.js +102 -7
  44. package/dist/src/utils/docs-preview/server-manager.js.map +1 -1
  45. package/dist/src/utils/docs-preview/types.d.ts +28 -0
  46. package/dist/src/utils/docs-preview/types.d.ts.map +1 -1
  47. package/package.json +1 -6
  48. package/plugins/specweave/scripts/progress.js +148 -50
  49. package/plugins/specweave/scripts/read-progress.sh +128 -52
  50. package/plugins/specweave/scripts/rebuild-dashboard-cache.sh +23 -17
  51. package/plugins/specweave/skills/done/SKILL.md +5 -4
  52. package/plugins/specweave/skills/judge-llm/SKILL.md +18 -0
  53. package/plugins/specweave/skills/progress/SKILL.md +7 -21
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-detector.js","sourceRoot":"","sources":["../../../../src/utils/docs-preview/project-detector.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,10 @@ export declare function openBrowserUrl(url: string): Promise<void>;
19
19
  * Kill all Docusaurus processes (SAFE - uses execFileNoThrow)
20
20
  */
21
21
  export declare function killAllDocusaurusProcesses(): Promise<number>;
22
+ /**
23
+ * Kill process occupying a specific port
24
+ */
25
+ export declare function killProcessOnPort(port: number): Promise<boolean>;
22
26
  /**
23
27
  * Check if Docusaurus server is running
24
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"server-manager.d.ts","sourceRoot":"","sources":["../../../../src/utils/docs-preview/server-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1D;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,GAAE,MAAa,EAAE,OAAO,GAAE,MAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAQzG;AAsBD;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAkCtG;AAiFD;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO/D;AAED;;GAEG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,CAwDlE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAExE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAoB,GAAG,MAAM,CAE7E"}
1
+ {"version":3,"file":"server-manager.d.ts","sourceRoot":"","sources":["../../../../src/utils/docs-preview/server-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE1D;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,GAAE,MAAa,EAAE,OAAO,GAAE,MAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAQzG;AAsBD;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAwEtG;AA8GD;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAO/D;AAED;;GAEG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,CAwDlE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgCtE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAExE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAoB,GAAG,MAAM,CAE7E"}
@@ -42,35 +42,94 @@ export async function startDevServer(targetDir, options) {
42
42
  throw new Error(`Port ${port} is already in use`);
43
43
  }
44
44
  // Start Docusaurus dev server
45
- const process = spawn('npm', ['run', 'start', '--', '--port', port.toString(), '--host', host], {
45
+ const childProc = spawn('npm', ['run', 'start', '--', '--port', port.toString(), '--host', host], {
46
46
  cwd: targetDir,
47
47
  stdio: ['ignore', 'pipe', 'pipe'],
48
48
  shell: true
49
49
  });
50
+ // Collect stderr for diagnostics on failure (capped to prevent unbounded growth)
51
+ const STDERR_MAX = 8192;
52
+ let stderrOutput = '';
53
+ childProc.stderr?.on('data', (data) => {
54
+ if (stderrOutput.length < STDERR_MAX) {
55
+ stderrOutput += data.toString();
56
+ }
57
+ });
58
+ // Forward key stdout lines so users see Docusaurus compilation progress
59
+ // Filter out verbose warnings (broken links, deprecations) to keep output clean
60
+ childProc.stdout?.on('data', (data) => {
61
+ const lines = data.toString().split('\n');
62
+ for (const raw of lines) {
63
+ const line = raw.trim();
64
+ if (!line)
65
+ continue;
66
+ // Only show progress-relevant lines, skip verbose warnings
67
+ if (line.includes('[WARNING]'))
68
+ continue;
69
+ console.log(` ${line}`);
70
+ }
71
+ });
72
+ // Track whether the process has exited
73
+ let processExited = false;
74
+ let exitCode = null;
75
+ childProc.on('exit', (code) => {
76
+ processExited = true;
77
+ exitCode = code;
78
+ });
50
79
  const url = `http://${host}:${port}`;
51
- // Wait for server to be ready
52
- // Increased timeout to 120s for large documentation sites (744+ docs)
53
- await waitForServer(url, 120000); // 120 second timeout
80
+ // Wait for server to be ready (fail fast if process crashes)
81
+ // 180s timeout for very large doc sites on slow machines; crash detection makes this a soft ceiling
82
+ await waitForServer(url, 180000, () => {
83
+ if (processExited) {
84
+ const errorSnippet = extractErrorFromOutput(stderrOutput);
85
+ throw new Error(`Docusaurus process exited with code ${exitCode} before server was ready.` +
86
+ (errorSnippet ? `\n\nError details:\n${errorSnippet}` : '\n\nRun manually for full output: cd .specweave/docs-site-internal && npx docusaurus start'));
87
+ }
88
+ });
54
89
  // Open browser if requested
55
90
  if (openBrowser) {
56
91
  await openBrowserUrl(url);
57
92
  }
58
93
  return {
59
- pid: process.pid,
94
+ pid: childProc.pid,
60
95
  port,
61
96
  url,
62
97
  stop: async () => {
63
- await stopServer(process);
98
+ await stopServer(childProc);
64
99
  }
65
100
  };
66
101
  }
102
+ /**
103
+ * Extract meaningful error message from Docusaurus stderr output
104
+ */
105
+ function extractErrorFromOutput(output) {
106
+ if (!output)
107
+ return '';
108
+ // Look for [ERROR] lines which Docusaurus uses for fatal errors
109
+ const errorLines = output.split('\n').filter(line => line.includes('[ERROR]') || line.includes('Error:') || line.includes('YAMLException'));
110
+ if (errorLines.length > 0) {
111
+ return errorLines.slice(0, 5).join('\n');
112
+ }
113
+ // Return last meaningful lines if no specific error pattern found
114
+ const lines = output.trim().split('\n').filter(l => l.trim());
115
+ return lines.slice(-5).join('\n');
116
+ }
67
117
  /**
68
118
  * Wait for server to be ready
119
+ * @param checkProcessAlive - Optional callback that throws if the server process has crashed
69
120
  */
70
- function waitForServer(url, timeout) {
121
+ function waitForServer(url, timeout, checkProcessAlive) {
71
122
  return new Promise((resolve, reject) => {
72
123
  const startTime = Date.now();
73
124
  const check = async () => {
125
+ // Check if process crashed before making HTTP request
126
+ try {
127
+ checkProcessAlive?.();
128
+ }
129
+ catch (err) {
130
+ reject(err);
131
+ return;
132
+ }
74
133
  try {
75
134
  const http = await import('http');
76
135
  const urlObj = new URL(url);
@@ -198,6 +257,42 @@ export async function killAllDocusaurusProcesses() {
198
257
  return 0;
199
258
  }
200
259
  }
260
+ /**
261
+ * Kill process occupying a specific port
262
+ */
263
+ export async function killProcessOnPort(port) {
264
+ const platform = process.platform;
265
+ try {
266
+ if (platform === 'win32') {
267
+ const result = await execFileNoThrow('netstat', ['-ano']);
268
+ if (!result.success)
269
+ return false;
270
+ const lines = result.stdout.split('\n')
271
+ .filter(line => line.includes(`:${port}`) && line.includes('LISTENING'));
272
+ for (const line of lines) {
273
+ const parts = line.trim().split(/\s+/);
274
+ const pid = parts[parts.length - 1];
275
+ if (pid && /^\d+$/.test(pid)) {
276
+ await execFileNoThrow('taskkill', ['/F', '/PID', pid]);
277
+ }
278
+ }
279
+ return lines.length > 0;
280
+ }
281
+ else {
282
+ const result = await execFileNoThrow('lsof', ['-ti', `:${port}`]);
283
+ if (!result.success || !result.stdout.trim())
284
+ return false;
285
+ const pids = result.stdout.trim().split('\n').filter(p => p.trim());
286
+ for (const pid of pids) {
287
+ await execFileNoThrow('kill', ['-9', pid.trim()]);
288
+ }
289
+ return pids.length > 0;
290
+ }
291
+ }
292
+ catch {
293
+ return false;
294
+ }
295
+ }
201
296
  /**
202
297
  * Check if Docusaurus server is running
203
298
  */
@@ -1 +1 @@
1
- {"version":3,"file":"server-manager.js","sourceRoot":"","sources":["../../../../src/utils/docs-preview/server-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server-manager.js","sourceRoot":"","sources":["../../../../src/utils/docs-preview/server-manager.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,29 @@
1
+ export interface DocCategory {
2
+ /** Folder name (e.g., 'strategy') */
3
+ id: string;
4
+ /** Human-readable label (e.g., 'Strategy') */
5
+ label: string;
6
+ /** Short description for landing page */
7
+ description: string;
8
+ /** Emoji icon for the category */
9
+ icon: string;
10
+ /** Number of markdown documents found */
11
+ docCount: number;
12
+ }
13
+ export interface ProjectMetadata {
14
+ /** Project name */
15
+ name: string;
16
+ /** Project description / tagline */
17
+ description: string;
18
+ /** 1-2 letter initials for logo generation */
19
+ initials: string;
20
+ /** Detected doc categories that actually exist */
21
+ categories: DocCategory[];
22
+ /** Source of the project name detection */
23
+ source: 'config' | 'package' | 'directory';
24
+ /** Path to custom logo file if found */
25
+ logoPath?: string;
26
+ }
1
27
  export interface DocusaurusConfig {
2
28
  title: string;
3
29
  tagline: string;
@@ -7,6 +33,8 @@ export interface DocusaurusConfig {
7
33
  port?: number;
8
34
  theme?: 'default' | 'classic' | 'dark';
9
35
  excludeFolders?: string[];
36
+ /** Auto-detected project metadata */
37
+ projectMetadata?: ProjectMetadata;
10
38
  }
11
39
  export interface SidebarItem {
12
40
  type: 'doc' | 'category';
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/utils/docs-preview/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/utils/docs-preview/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,2CAA2C;IAC3C,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAC;IAC3C,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,qCAAqC;IACrC,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specweave",
3
- "version": "1.0.263",
3
+ "version": "1.0.265",
4
4
  "description": "Spec-driven development framework for AI coding agents. First-class support for Claude Code β€” compatible with any LLM-powered coding tool. Living documentation, autonomous execution, quality gates, and multilingual support (9 languages).",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -38,11 +38,6 @@
38
38
  "validate:platforms": "node scripts/validation/validate-platforms.js",
39
39
  "metrics:dora": "node dist/src/metrics/dora-calculator.js",
40
40
  "generate:diagrams": "bash scripts/generation/generate-diagram-svgs.sh",
41
- "docs:dev": "cd docs-site && npm start",
42
- "docs:build": "cd docs-site && npm run build",
43
- "docs:install": "cd docs-site && npm install --legacy-peer-deps",
44
- "docs:internal": "cd docs-site && npm run start:internal",
45
- "docs:internal:build": "cd docs-site && npm run build:internal",
46
41
  "release:patch": "bash scripts/build/bump-version.sh patch",
47
42
  "release:minor": "bash scripts/build/bump-version.sh minor",
48
43
  "release:major": "bash scripts/build/bump-version.sh major",
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Instant Increment Progress
3
+ * Instant Increment Progress (Node.js fallback)
4
4
  *
5
- * Executed by UserPromptSubmit hook for /sw:progress
6
- * Bypasses LLM entirely - output shown directly to user
5
+ * Executed by UserPromptSubmit hook for /sw:progress when jq is unavailable.
6
+ * Reads files directly (no cache needed). Bypasses LLM entirely.
7
7
  *
8
8
  * Usage: node progress.js [incrementId] [--help]
9
9
  */
@@ -67,34 +67,80 @@ if (incrementFolders.length === 0) {
67
67
  function parseIncrement(folder) {
68
68
  const metaPath = path.join(incrementsDir, folder, 'metadata.json');
69
69
  const tasksPath = path.join(incrementsDir, folder, 'tasks.md');
70
-
70
+ const specPath = path.join(incrementsDir, folder, 'spec.md');
71
+
71
72
  let metadata = { status: 'unknown' };
72
73
  if (fs.existsSync(metaPath)) {
73
74
  try {
74
75
  metadata = JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
75
76
  } catch {}
76
77
  }
77
-
78
+
78
79
  let totalTasks = 0;
79
80
  let completedTasks = 0;
80
-
81
+
81
82
  if (fs.existsSync(tasksPath)) {
82
83
  const content = fs.readFileSync(tasksPath, 'utf-8');
83
- const taskMatches = content.match(/### T-\d+/g);
84
- totalTasks = taskMatches ? taskMatches.length : 0;
85
-
86
- const completedMatches = content.match(/\*\*Status\*\*:\s*\[x\]/gi);
87
- completedTasks = completedMatches ? completedMatches.length : 0;
84
+ const headingTasks = (content.match(/^#{2,} T-\d+/gm) || []).length;
85
+ const checklistTasks = (content.match(/^- \[[x ]\] T-\d+/gm) || []).length;
86
+ totalTasks = headingTasks + checklistTasks;
87
+
88
+ const completedStatus = (content.match(/\*\*Status\*\*:\s*\[x\]/gi) || []).length;
89
+ const completedDate = (content.match(/\*\*Completed\*\*:\s*\d/gi) || []).length;
90
+ const completedChecklist = (content.match(/^- \[x\] T-\d+/gm) || []).length;
91
+ completedTasks = completedStatus + completedDate + completedChecklist;
88
92
  }
89
-
93
+
94
+ let totalAcs = 0;
95
+ let completedAcs = 0;
96
+ if (fs.existsSync(specPath)) {
97
+ const specContent = fs.readFileSync(specPath, 'utf-8');
98
+ const acMatches = specContent.match(/- \[.\] \*\*AC-/g);
99
+ totalAcs = acMatches ? acMatches.length : 0;
100
+ const acDone = specContent.match(/- \[x\] \*\*AC-/g);
101
+ completedAcs = acDone ? acDone.length : 0;
102
+ }
103
+
104
+ // Get last activity from newest file mtime
105
+ let lastActivity = 0;
106
+ try {
107
+ if (fs.existsSync(metaPath)) lastActivity = Math.max(lastActivity, fs.statSync(metaPath).mtimeMs);
108
+ if (fs.existsSync(tasksPath)) lastActivity = Math.max(lastActivity, fs.statSync(tasksPath).mtimeMs);
109
+ if (fs.existsSync(specPath)) lastActivity = Math.max(lastActivity, fs.statSync(specPath).mtimeMs);
110
+ } catch {}
111
+
90
112
  return {
91
113
  id: folder,
92
114
  status: metadata.status || 'unknown',
93
115
  type: metadata.type || 'feature',
116
+ priority: metadata.priority || 'P1',
94
117
  totalTasks,
95
118
  completedTasks,
96
- percentage: totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0
119
+ totalAcs,
120
+ completedAcs,
121
+ percentage: totalTasks > 0 ? Math.round((completedTasks / totalTasks) * 100) : 0,
122
+ lastActivity
123
+ };
124
+ }
125
+
126
+ // Helpers
127
+ function createProgressBar(pct, width = 20) {
128
+ const filled = Math.round((pct / 100) * width);
129
+ const empty = width - filled;
130
+ return `[${'β–ˆ'.repeat(filled)}${'β–‘'.repeat(empty)}]`;
131
+ }
132
+
133
+ function formatStatus(status) {
134
+ const icons = {
135
+ 'active': 'πŸ”„ active',
136
+ 'planning': 'πŸ“ planning',
137
+ 'backlog': 'πŸ“‹ backlog',
138
+ 'ready_for_review': 'πŸ‘€ ready for review',
139
+ 'paused': '⏸️ paused',
140
+ 'completed': 'βœ… completed',
141
+ 'abandoned': '❌ abandoned'
97
142
  };
143
+ return icons[status] || status;
98
144
  }
99
145
 
100
146
  // If specific increment requested
@@ -104,67 +150,139 @@ if (specificId) {
104
150
  console.log(`Increment not found: ${specificId}`);
105
151
  process.exit(1);
106
152
  }
107
-
153
+
108
154
  const inc = parseIncrement(folder);
109
155
  const bar = createProgressBar(inc.percentage);
110
-
156
+
111
157
  console.log(`\nπŸ“Š Progress: ${inc.id}\n`);
112
158
  console.log(`Status: ${formatStatus(inc.status)}`);
113
159
  console.log(`Type: ${inc.type}`);
114
160
  console.log(`Tasks: ${inc.completedTasks}/${inc.totalTasks} (${inc.percentage}%)`);
115
161
  console.log(`Progress: ${bar}`);
162
+ if (inc.totalAcs > 0) {
163
+ const acPct = Math.round((inc.completedAcs / inc.totalAcs) * 100);
164
+ console.log(`ACs: ${inc.completedAcs}/${inc.totalAcs} (${acPct}%)`);
165
+ }
116
166
  process.exit(0);
117
167
  }
118
168
 
119
169
  // Show all active increments
120
170
  const increments = incrementFolders.map(parseIncrement);
121
- const readyForReview = increments.filter(i => i.status === 'ready_for_review');
122
- const active = increments.filter(i => ['active', 'planning', 'backlog'].includes(i.status));
171
+
172
+ // Categorize increments
173
+ const needsClosure = increments
174
+ .filter(i => ['active', 'planning', 'planned'].includes(i.status) && i.totalTasks > 0 && i.completedTasks === i.totalTasks)
175
+ .sort((a, b) => b.lastActivity - a.lastActivity);
176
+
177
+ const readyForReview = increments
178
+ .filter(i => i.status === 'ready_for_review')
179
+ .sort((a, b) => b.lastActivity - a.lastActivity);
180
+
181
+ const active = increments
182
+ .filter(i => ['active', 'planning', 'planned'].includes(i.status) &&
183
+ (i.totalTasks > 0 || i.totalAcs > 0) &&
184
+ !(i.totalTasks > 0 && i.completedTasks === i.totalTasks))
185
+ .sort((a, b) => b.lastActivity - a.lastActivity);
186
+
187
+ const emptyActive = increments
188
+ .filter(i => ['active', 'planning', 'planned'].includes(i.status) && i.totalTasks === 0 && i.totalAcs === 0);
189
+
190
+ const backlog = increments
191
+ .filter(i => i.status === 'backlog')
192
+ .sort((a, b) => b.lastActivity - a.lastActivity);
193
+
123
194
  const paused = increments.filter(i => i.status === 'paused');
124
195
 
125
196
  console.log('\nπŸ“Š Increment Progress\n');
126
197
 
127
- // Show ready_for_review FIRST (needs attention!)
198
+ // Section 1: Needs Closure
199
+ if (needsClosure.length > 0) {
200
+ console.log('⚠️ Needs Closure (100% tasks done):');
201
+ for (const inc of needsClosure) {
202
+ console.log(` ${inc.id} β†’ /sw:done ${inc.id}`);
203
+ }
204
+ console.log('');
205
+ }
206
+
207
+ // Section 2: Ready for Review
128
208
  if (readyForReview.length > 0) {
129
- console.log(`πŸ‘€ Ready for Review (${readyForReview.length}):`);
209
+ console.log('πŸ‘€ Ready for Review:');
130
210
  for (const inc of readyForReview) {
131
- const bar = createProgressBar(inc.percentage, 15);
132
- console.log(` ${inc.id}`);
133
- console.log(` ${bar} ${inc.completedTasks}/${inc.totalTasks} (${inc.percentage}%)`);
211
+ const bar = createProgressBar(inc.percentage, 12);
212
+ const priBadge = inc.priority === 'P0' ? 'πŸ”΄' : inc.priority === 'P1' ? '🟠' : '';
213
+ let acInfo = '';
214
+ if (inc.totalAcs > 0) {
215
+ const acPct = Math.round((inc.completedAcs / inc.totalAcs) * 100);
216
+ acInfo = ` | ${inc.completedAcs}/${inc.totalAcs} ACs (${acPct}%)`;
217
+ }
218
+ console.log(` ${priBadge} ${inc.id}`);
219
+ console.log(` ${bar} ${inc.completedTasks}/${inc.totalTasks} tasks${acInfo}`);
134
220
  console.log(` β†’ /sw:done ${inc.id}`);
135
221
  }
136
222
  console.log('');
137
223
  }
138
224
 
225
+ // Section 3: Active (with work, not done, not empty)
139
226
  if (active.length > 0) {
140
- console.log(`πŸ”„ Active (${active.length}):`);
227
+ console.log('πŸ”„ Active:');
141
228
  for (const inc of active) {
142
- const bar = createProgressBar(inc.percentage, 15);
143
- console.log(` ${inc.id}`);
144
- console.log(` ${bar} ${inc.completedTasks}/${inc.totalTasks} (${inc.percentage}%)`);
229
+ const bar = createProgressBar(inc.percentage, 12);
230
+ const priBadge = inc.priority === 'P0' ? 'πŸ”΄' : inc.priority === 'P1' ? '🟠' : '';
231
+ const statusInd = ['planning', 'planned'].includes(inc.status) ? ' (πŸ“ planning)' : '';
232
+ let acInfo = '';
233
+ if (inc.totalAcs > 0) {
234
+ const acPct = Math.round((inc.completedAcs / inc.totalAcs) * 100);
235
+ acInfo = ` | ${inc.completedAcs}/${inc.totalAcs} ACs (${acPct}%)`;
236
+ }
237
+ console.log(` ${priBadge} ${inc.id}${statusInd}`);
238
+ console.log(` ${bar} ${inc.completedTasks}/${inc.totalTasks} tasks${acInfo}`);
145
239
  }
146
240
  console.log('');
147
241
  }
148
242
 
243
+ // Section 4: Planning (no tasks) β€” collapsed
244
+ if (emptyActive.length > 0) {
245
+ const ids = emptyActive.map(i => i.id).join(', ');
246
+ console.log(`πŸ“ Planning (no tasks): ${ids}`);
247
+ console.log('');
248
+ }
249
+
250
+ // Section 5: Backlog
251
+ if (backlog.length > 0) {
252
+ console.log('πŸ“‹ Backlog:');
253
+ for (const inc of backlog) {
254
+ const priBadge = inc.priority === 'P0' ? 'πŸ”΄' : inc.priority === 'P1' ? '🟠' : '';
255
+ console.log(` ${priBadge} ${inc.id} - ${inc.percentage}% planned`);
256
+ }
257
+ console.log('');
258
+ }
259
+
260
+ // Section 6: Paused
149
261
  if (paused.length > 0) {
150
262
  console.log(`⏸️ Paused (${paused.length}):`);
151
263
  for (const inc of paused) {
152
- console.log(` ${inc.id} - ${inc.percentage}%`);
264
+ console.log(` ${inc.id} - ${inc.percentage}% tasks`);
153
265
  }
154
266
  console.log('');
155
267
  }
156
268
 
157
- // Summary section
158
- if (readyForReview.length > 0 || active.length > 0 || paused.length > 0) {
269
+ // Summary
270
+ const totalActionable = needsClosure.length + readyForReview.length + active.length + emptyActive.length + backlog.length + paused.length;
271
+ if (totalActionable > 0) {
159
272
  console.log('─'.repeat(40));
160
273
  const parts = [];
274
+ if (needsClosure.length > 0) parts.push(`${needsClosure.length} needs closure`);
161
275
  if (readyForReview.length > 0) parts.push(`${readyForReview.length} ready for review`);
162
276
  if (active.length > 0) parts.push(`${active.length} active`);
277
+ if (emptyActive.length > 0) parts.push(`${emptyActive.length} planning`);
278
+ if (backlog.length > 0) parts.push(`${backlog.length} backlog`);
163
279
  if (paused.length > 0) parts.push(`${paused.length} paused`);
164
280
  console.log(`Summary: ${parts.join(', ')}`);
165
281
  console.log('');
166
282
 
167
- if (readyForReview.length > 0) {
283
+ if (needsClosure.length > 0) {
284
+ console.log('πŸ’‘ Run /sw:done <id> to close completed increments');
285
+ } else if (readyForReview.length > 0) {
168
286
  console.log('πŸ’‘ Run /sw:done <id> to close reviewed increments');
169
287
  } else {
170
288
  console.log('πŸ’‘ For details: /sw:progress <incrementId>');
@@ -178,23 +296,3 @@ if (readyForReview.length > 0 || active.length > 0 || paused.length > 0) {
178
296
  console.log('');
179
297
  console.log('πŸ’‘ Run /sw:increment to start new work');
180
298
  }
181
-
182
- // Helpers
183
- function createProgressBar(pct, width = 20) {
184
- const filled = Math.round((pct / 100) * width);
185
- const empty = width - filled;
186
- return `[${'β–ˆ'.repeat(filled)}${'β–‘'.repeat(empty)}]`;
187
- }
188
-
189
- function formatStatus(status) {
190
- const icons = {
191
- 'active': 'πŸ”„ active',
192
- 'planning': 'πŸ“ planning',
193
- 'backlog': 'πŸ“‹ backlog',
194
- 'ready_for_review': 'πŸ‘€ ready for review',
195
- 'paused': '⏸️ paused',
196
- 'completed': 'βœ… completed',
197
- 'abandoned': '❌ abandoned'
198
- };
199
- return icons[status] || status;
200
- }