specky-sdd 3.5.0 → 3.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.
Files changed (101) hide show
  1. package/.apm/hooks/scripts/ears-validator.sh +56 -17
  2. package/.apm/prompts/specky-api.prompt.md +1 -1
  3. package/.apm/prompts/specky-research.prompt.md +2 -2
  4. package/.apm/skills/research-analyst/SKILL.md +2 -2
  5. package/.apm/skills/specky-onboarding/SKILL.md +6 -4
  6. package/CHANGELOG.md +52 -0
  7. package/README.md +44 -8
  8. package/SECURITY.md +19 -9
  9. package/apm.yml +1 -1
  10. package/config.yml +1 -1
  11. package/dist/cli/commands/doctor.d.ts.map +1 -1
  12. package/dist/cli/commands/doctor.js +5 -0
  13. package/dist/cli/commands/doctor.js.map +1 -1
  14. package/dist/cli/commands/status.d.ts.map +1 -1
  15. package/dist/cli/commands/status.js +17 -2
  16. package/dist/cli/commands/status.js.map +1 -1
  17. package/dist/cli/index.js +32 -0
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/cli/lib/update-check.d.ts +36 -0
  20. package/dist/cli/lib/update-check.d.ts.map +1 -0
  21. package/dist/cli/lib/update-check.js +165 -0
  22. package/dist/cli/lib/update-check.js.map +1 -0
  23. package/dist/config.d.ts +4 -0
  24. package/dist/config.d.ts.map +1 -1
  25. package/dist/config.js +14 -0
  26. package/dist/config.js.map +1 -1
  27. package/dist/index.js +18 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/services/diagram-generator.d.ts +53 -4
  30. package/dist/services/diagram-generator.d.ts.map +1 -1
  31. package/dist/services/diagram-generator.js +565 -178
  32. package/dist/services/diagram-generator.js.map +1 -1
  33. package/dist/services/doc-generator.d.ts +44 -0
  34. package/dist/services/doc-generator.d.ts.map +1 -1
  35. package/dist/services/doc-generator.js +352 -50
  36. package/dist/services/doc-generator.js.map +1 -1
  37. package/dist/services/document-converter.d.ts +10 -7
  38. package/dist/services/document-converter.d.ts.map +1 -1
  39. package/dist/services/document-converter.js +113 -38
  40. package/dist/services/document-converter.js.map +1 -1
  41. package/dist/services/iac-generator.d.ts +31 -3
  42. package/dist/services/iac-generator.d.ts.map +1 -1
  43. package/dist/services/iac-generator.js +509 -41
  44. package/dist/services/iac-generator.js.map +1 -1
  45. package/dist/services/pbt-generator.d.ts +12 -0
  46. package/dist/services/pbt-generator.d.ts.map +1 -1
  47. package/dist/services/pbt-generator.js +296 -145
  48. package/dist/services/pbt-generator.js.map +1 -1
  49. package/dist/services/state-machine.d.ts +15 -1
  50. package/dist/services/state-machine.d.ts.map +1 -1
  51. package/dist/services/state-machine.js +21 -3
  52. package/dist/services/state-machine.js.map +1 -1
  53. package/dist/services/test-generator.d.ts +8 -0
  54. package/dist/services/test-generator.d.ts.map +1 -1
  55. package/dist/services/test-generator.js +134 -33
  56. package/dist/services/test-generator.js.map +1 -1
  57. package/dist/services/test-traceability-mapper.d.ts.map +1 -1
  58. package/dist/services/test-traceability-mapper.js +8 -3
  59. package/dist/services/test-traceability-mapper.js.map +1 -1
  60. package/dist/services/work-item-exporter.d.ts +70 -9
  61. package/dist/services/work-item-exporter.d.ts.map +1 -1
  62. package/dist/services/work-item-exporter.js +115 -53
  63. package/dist/services/work-item-exporter.js.map +1 -1
  64. package/dist/templates/checklist.md +2 -3
  65. package/dist/templates/cross-analysis.md +2 -4
  66. package/dist/tools/documentation.d.ts.map +1 -1
  67. package/dist/tools/documentation.js +9 -3
  68. package/dist/tools/documentation.js.map +1 -1
  69. package/dist/tools/environment.d.ts.map +1 -1
  70. package/dist/tools/environment.js +75 -12
  71. package/dist/tools/environment.js.map +1 -1
  72. package/dist/tools/infrastructure.d.ts.map +1 -1
  73. package/dist/tools/infrastructure.js +7 -39
  74. package/dist/tools/infrastructure.js.map +1 -1
  75. package/dist/tools/input.js +4 -4
  76. package/dist/tools/input.js.map +1 -1
  77. package/dist/tools/integration.js +4 -4
  78. package/dist/tools/integration.js.map +1 -1
  79. package/dist/tools/pipeline.d.ts.map +1 -1
  80. package/dist/tools/pipeline.js +42 -4
  81. package/dist/tools/pipeline.js.map +1 -1
  82. package/dist/tools/quality.d.ts.map +1 -1
  83. package/dist/tools/quality.js +36 -9
  84. package/dist/tools/quality.js.map +1 -1
  85. package/dist/tools/testing.d.ts +10 -0
  86. package/dist/tools/testing.d.ts.map +1 -1
  87. package/dist/tools/testing.js +66 -13
  88. package/dist/tools/testing.js.map +1 -1
  89. package/dist/tools/transcript.d.ts.map +1 -1
  90. package/dist/tools/transcript.js +66 -41
  91. package/dist/tools/transcript.js.map +1 -1
  92. package/dist/tools/utility.d.ts.map +1 -1
  93. package/dist/tools/utility.js +22 -12
  94. package/dist/tools/utility.js.map +1 -1
  95. package/dist/tools/visualization.d.ts +21 -0
  96. package/dist/tools/visualization.d.ts.map +1 -1
  97. package/dist/tools/visualization.js +130 -29
  98. package/dist/tools/visualization.js.map +1 -1
  99. package/package.json +5 -2
  100. package/templates/checklist.md +2 -3
  101. package/templates/cross-analysis.md +2 -4
@@ -3,6 +3,14 @@ import { currentTimestamp } from "../utils/runtime-context.js";
3
3
  export class DocGenerator {
4
4
  fileManager;
5
5
  stateMachine;
6
+ /** Technologies recognized when deriving runbook content from DESIGN.md. */
7
+ static KNOWN_TECH = [
8
+ "Node.js", "TypeScript", "Express", "Fastify", "NestJS", "React", "Next.js", "Vue",
9
+ "Python", "FastAPI", "Django", "Flask", "Golang", "Rust", "Java", "Spring", "Kotlin",
10
+ "PostgreSQL", "Postgres", "MySQL", "SQLite", "MongoDB", "Redis", "Kafka", "RabbitMQ",
11
+ "Elasticsearch", "Docker", "Kubernetes", "Terraform", "Nginx", "GraphQL", "gRPC",
12
+ ];
13
+ static DATABASES = ["PostgreSQL", "Postgres", "MySQL", "SQLite", "MongoDB", "Redis"];
6
14
  constructor(fileManager, stateMachine) {
7
15
  this.fileManager = fileManager;
8
16
  this.stateMachine = stateMachine;
@@ -17,15 +25,15 @@ export class DocGenerator {
17
25
  let content = `# ${featureName} — Complete Documentation\n\n`;
18
26
  content += `**Feature**: ${featureNumber}-${featureName}\n**Generated**: ${currentTimestamp()}\n\n---\n\n`;
19
27
  if (spec) {
20
- content += `## Specification\n\n${this.summarize(spec)}\n\n`;
28
+ content += `## Specification\n\n${this.summarizeSpec(spec)}\n\n`;
21
29
  sections.push("Specification");
22
30
  }
23
31
  if (design) {
24
- content += `## Architecture & Design\n\n${this.summarize(design)}\n\n`;
32
+ content += `## Architecture & Design\n\n${this.summarizeDesign(design)}\n\n`;
25
33
  sections.push("Architecture & Design");
26
34
  }
27
35
  if (tasks) {
28
- content += `## Implementation Plan\n\n${this.summarize(tasks)}\n\n`;
36
+ content += `## Implementation Plan\n\n${this.summarize(tasks, 30)}\n\n`;
29
37
  sections.push("Implementation Plan");
30
38
  }
31
39
  if (analysis) {
@@ -48,33 +56,86 @@ export class DocGenerator {
48
56
  content += `### Request\n\n\`\`\`json\n${ep.request || "{}"}\n\`\`\`\n\n`;
49
57
  content += `### Response\n\n\`\`\`json\n${ep.response || "{}"}\n\`\`\`\n\n---\n\n`;
50
58
  }
51
- return { type: "api", content, file_path: `docs/api-${featureNumber}.md`, sections: endpoints.map(e => `${e.method} ${e.path}`), explanation: `Generated API documentation with ${endpoints.length} endpoints.` };
59
+ const withExamples = endpoints.filter((e) => e.request || e.response).length;
60
+ return { type: "api", content, file_path: `docs/api-${featureNumber}.md`, sections: endpoints.map(e => `${e.method} ${e.path}`), explanation: `Generated API documentation with ${endpoints.length} endpoints (${withExamples} with request/response examples from DESIGN.md).` };
52
61
  }
53
62
  async generateRunbook(featureDir, featureNumber) {
54
- await this.safeRead(featureDir, "DESIGN.md");
63
+ const design = await this.safeRead(featureDir, "DESIGN.md") || "";
55
64
  const featureName = featureDir.replace(/.*\d{3}-/, "");
56
- const content = [
65
+ const endpoints = this.extractEndpoints(design);
66
+ const stack = this.detectTechStack(design);
67
+ const infrastructure = this.cleanSectionExcerpt(this.extractDesignSection(design, /infrastructure|deployment/i), 8);
68
+ const security = this.cleanSectionExcerpt(this.extractDesignSection(design, /security/i), 6);
69
+ const database = stack.find((t) => DocGenerator.DATABASES.includes(t));
70
+ const lines = [
57
71
  `# Operational Runbook: ${featureName}`,
58
72
  `\n**Feature**: ${featureNumber}\n**Last Updated**: ${currentTimestamp()}\n`,
59
- `## Deployment`,
60
- `1. Build: \`npm run build\``,
61
- `2. Test: \`npm test\``,
62
- `3. Deploy: Follow CI/CD pipeline\n`,
63
- `## Monitoring`,
64
- `- Health check: \`GET /health\``,
65
- `- Logs: Check application logs for errors\n`,
66
- `## Troubleshooting`,
67
- `| Symptom | Cause | Resolution |`,
68
- `|---------|-------|-----------|`,
69
- `| 500 errors | Database connection | Check connection string |`,
70
- `| Slow responses | High load | Scale horizontally |`,
71
- `| Auth failures | Token expiry | Check token configuration |\n`,
72
- `## Rollback`,
73
- `1. Revert deployment to previous version`,
74
- `2. Verify health checks pass`,
75
- `3. Notify team\n`,
76
- ].join("\n");
77
- return { type: "runbook", content, file_path: `docs/runbook-${featureNumber}.md`, sections: ["Deployment", "Monitoring", "Troubleshooting", "Rollback"], explanation: "Generated operational runbook." };
73
+ ];
74
+ const sections = [];
75
+ if (stack.length > 0) {
76
+ lines.push(`## Tech Stack`, ...stack.map((t) => `- ${t}`), ``);
77
+ sections.push("Tech Stack");
78
+ }
79
+ lines.push(`## Deployment`);
80
+ const deploySteps = [];
81
+ if (stack.includes("Docker"))
82
+ deploySteps.push(`Build the container image: \`docker build -t ${featureName} .\``);
83
+ if (stack.some((t) => ["Node.js", "TypeScript", "Express", "Fastify", "NestJS"].includes(t))) {
84
+ deploySteps.push("Install and build: `npm ci && npm run build`", "Run the test suite: `npm test`");
85
+ }
86
+ if (stack.includes("Kubernetes"))
87
+ deploySteps.push(`Roll out: \`kubectl rollout status deployment/${featureName}\``);
88
+ if (deploySteps.length === 0)
89
+ deploySteps.push("Build: `npm run build`", "Test: `npm test`", "Deploy: Follow CI/CD pipeline");
90
+ lines.push(...deploySteps.map((step, i) => `${i + 1}. ${step}`), ``);
91
+ if (infrastructure)
92
+ lines.push(`### Infrastructure (from DESIGN.md)`, ``, infrastructure, ``);
93
+ sections.push("Deployment");
94
+ lines.push(`## Monitoring`);
95
+ if (endpoints.length > 0) {
96
+ lines.push(`Feature endpoints to monitor:`);
97
+ for (const ep of endpoints.slice(0, 8)) {
98
+ lines.push(`- \`${ep.method} ${ep.path}\` — ${ep.description}`);
99
+ }
100
+ }
101
+ lines.push(`- Health check: \`GET /health\``, `- Logs: Check application logs for errors`);
102
+ if (database)
103
+ lines.push(`- Monitor ${database} connectivity, connection-pool saturation, and slow queries`);
104
+ lines.push(``);
105
+ sections.push("Monitoring");
106
+ lines.push(`## Troubleshooting`, `| Symptom | Cause | Resolution |`, `|---------|-------|-----------|`);
107
+ const rows = [];
108
+ if (database)
109
+ rows.push(`| 500 errors | ${database} connection failure | Verify ${database} availability and connection string |`);
110
+ if (endpoints.length > 0) {
111
+ const first = endpoints[0];
112
+ rows.push(`| 4xx/5xx from \`${first.method} ${first.path}\` | Payload drift from the design contract | Compare request/response against the API contracts in DESIGN.md |`);
113
+ }
114
+ if (security || /\b(auth|token|jwt|oauth)\b/i.test(design)) {
115
+ rows.push(`| Auth failures | Token expiry or misconfiguration | Check token configuration |`);
116
+ }
117
+ if (rows.length === 0) {
118
+ rows.push(`| 500 errors | Database connection | Check connection string |`, `| Auth failures | Token expiry | Check token configuration |`);
119
+ }
120
+ rows.push(`| Slow responses | High load | Scale horizontally |`);
121
+ lines.push(...rows, ``);
122
+ if (security)
123
+ lines.push(`### Security Notes (from DESIGN.md)`, ``, security, ``);
124
+ sections.push("Troubleshooting");
125
+ lines.push(`## Rollback`, stack.includes("Kubernetes")
126
+ ? `1. Roll back: \`kubectl rollout undo deployment/${featureName}\``
127
+ : `1. Revert deployment to previous version`, `2. Verify health checks pass`, `3. Notify team\n`);
128
+ sections.push("Rollback");
129
+ const derived = stack.length > 0 || endpoints.length > 0 || infrastructure || security;
130
+ return {
131
+ type: "runbook",
132
+ content: lines.join("\n"),
133
+ file_path: `docs/runbook-${featureNumber}.md`,
134
+ sections,
135
+ explanation: derived
136
+ ? `Generated operational runbook derived from DESIGN.md (${stack.length} technologies, ${endpoints.length} endpoints).`
137
+ : "Generated operational runbook (generic template — DESIGN.md had no detectable stack, endpoints, or infrastructure).",
138
+ };
78
139
  }
79
140
  async generateOnboarding(featureDir, featureNumber) {
80
141
  const spec = await this.safeRead(featureDir, "SPECIFICATION.md") || "";
@@ -84,9 +145,9 @@ export class DocGenerator {
84
145
  `# Developer Onboarding: ${featureName}`,
85
146
  `\n> Welcome! This guide helps you understand and contribute to this feature.\n`,
86
147
  `## What This Feature Does`,
87
- this.summarize(spec).substring(0, 500),
148
+ this.summarizeSpec(spec) || `_No specification content available yet — run sdd_write_spec first._`,
88
149
  `\n## Architecture Overview`,
89
- this.summarize(design).substring(0, 500),
150
+ this.summarizeDesign(design) || `_No design content available yet — run sdd_write_design first._`,
90
151
  `\n## Getting Started`,
91
152
  `1. Clone the repository`,
92
153
  `2. Install dependencies: \`npm install\``,
@@ -107,23 +168,30 @@ export class DocGenerator {
107
168
  return { type: "onboarding", content, file_path: `docs/onboarding-${featureNumber}.md`, sections: ["What This Feature Does", "Architecture Overview", "Getting Started", "Key Concepts", "Where to Find Things"], explanation: "Generated developer onboarding guide." };
108
169
  }
109
170
  async generateAllDocs(featureDir, featureNumber) {
110
- const [full, api, runbook, onboarding] = await Promise.all([
111
- this.generateFullDocs(featureDir, featureNumber),
112
- this.generateApiDocs(featureDir, featureNumber),
113
- this.generateRunbook(featureDir, featureNumber),
114
- this.generateOnboarding(featureDir, featureNumber),
115
- ]);
116
- // Also generate journey docs if state machine is available
117
- const results = [full, api, runbook, onboarding];
118
- try {
119
- const journey = await this.generateJourneyDocs(featureDir, featureNumber);
120
- results.push(journey);
121
- }
122
- catch {
123
- // Journey docs are optional — skip if state not available
124
- }
171
+ // All five advertised doc types run in the same parallel batch. Failures
172
+ // are collected and surfaced to the caller instead of silently dropped.
173
+ const generators = [
174
+ { type: "full", generate: () => this.generateFullDocs(featureDir, featureNumber) },
175
+ { type: "api", generate: () => this.generateApiDocs(featureDir, featureNumber) },
176
+ { type: "runbook", generate: () => this.generateRunbook(featureDir, featureNumber) },
177
+ { type: "onboarding", generate: () => this.generateOnboarding(featureDir, featureNumber) },
178
+ { type: "journey", generate: () => this.generateJourneyDocs(featureDir, featureNumber) },
179
+ ];
180
+ const settled = await Promise.allSettled(generators.map((g) => g.generate()));
181
+ const results = [];
182
+ const failures = [];
183
+ settled.forEach((outcome, i) => {
184
+ if (outcome.status === "fulfilled") {
185
+ results.push(outcome.value);
186
+ }
187
+ else {
188
+ const reason = outcome.reason instanceof Error ? outcome.reason.message : String(outcome.reason);
189
+ failures.push({ type: generators[i].type, error: reason });
190
+ }
191
+ });
125
192
  return {
126
193
  results,
194
+ failures,
127
195
  total_generated: results.length,
128
196
  total_sections: results.reduce((sum, r) => sum + r.sections.length, 0),
129
197
  };
@@ -255,18 +323,252 @@ export class DocGenerator {
255
323
  };
256
324
  }
257
325
  // ─── Helpers ───
258
- summarize(content) {
259
- const lines = content.split("\n").filter(l => l.trim() && !l.startsWith("---") && !l.startsWith("```"));
260
- return lines.slice(0, 15).join("\n");
326
+ /** Strip a leading YAML frontmatter block (--- ... ---) from a document. */
327
+ stripFrontmatter(content) {
328
+ if (!content.startsWith("---"))
329
+ return content;
330
+ const closing = content.indexOf("\n---", 3);
331
+ if (closing === -1)
332
+ return content;
333
+ return content.slice(closing + 4).replace(/^\r?\n/, "");
334
+ }
335
+ /**
336
+ * Generic content summary. Skips frontmatter, the Table of Contents,
337
+ * code fences, separators, comments, and TODO placeholders, then keeps
338
+ * the first `maxLines` meaningful lines.
339
+ */
340
+ summarize(content, maxLines = 15) {
341
+ const lines = this.stripFrontmatter(content).split("\n");
342
+ const kept = [];
343
+ let inCodeFence = false;
344
+ let inToc = false;
345
+ for (const line of lines) {
346
+ const trimmed = line.trim();
347
+ if (trimmed.startsWith("```")) {
348
+ inCodeFence = !inCodeFence;
349
+ continue;
350
+ }
351
+ if (inCodeFence)
352
+ continue;
353
+ if (/^#{1,6}\s+table of contents/i.test(trimmed)) {
354
+ inToc = true;
355
+ continue;
356
+ }
357
+ if (inToc) {
358
+ if (!trimmed.startsWith("#"))
359
+ continue;
360
+ inToc = false;
361
+ }
362
+ if (!trimmed || trimmed === "---" || trimmed.startsWith("<!--") || trimmed.includes("[TODO:"))
363
+ continue;
364
+ kept.push(line);
365
+ if (kept.length >= maxLines)
366
+ break;
367
+ }
368
+ return kept.join("\n");
261
369
  }
370
+ /** Parse EARS requirement blocks (### REQ-XXX-NNN ...) out of SPECIFICATION.md. */
371
+ extractRequirements(spec) {
372
+ const headingRegex = /^###\s+(REQ-[A-Za-z0-9_-]*\d+)\s*:?\s*(.*)$/gm;
373
+ const headings = [];
374
+ let match;
375
+ while ((match = headingRegex.exec(spec)) !== null) {
376
+ headings.push({ id: match[1], label: match[2].trim(), start: match.index, bodyStart: match.index + match[0].length });
377
+ }
378
+ return headings
379
+ .map((heading, i) => {
380
+ const end = i + 1 < headings.length ? headings[i + 1].start : spec.length;
381
+ const block = spec.slice(heading.bodyStart, end);
382
+ // Stop at the next non-REQ heading (e.g. "## 2. Functional Requirements").
383
+ const nextHeading = block.search(/^#{2,3}\s+/m);
384
+ const body = nextHeading === -1 ? block : block.slice(0, nextHeading);
385
+ const parts = body.split(/\*\*Acceptance Criteria:?\*\*/i);
386
+ const text = (parts[0] || "")
387
+ .split("\n")
388
+ .map((l) => l.trim())
389
+ .filter((l) => l && l !== "---" && !l.startsWith("```"))
390
+ .join(" ");
391
+ const criteria = (parts[1] || "")
392
+ .split("\n")
393
+ .map((l) => l.trim())
394
+ .filter((l) => l.startsWith("- "))
395
+ .map((l) => l.slice(2).trim());
396
+ return { id: heading.id, label: heading.label, text, criteria };
397
+ })
398
+ .filter((req) => req.text.length > 0);
399
+ }
400
+ /**
401
+ * Requirement-aware spec summary: pulls the actual EARS "shall" statements
402
+ * with their REQ IDs instead of the frontmatter/ToC head of the file.
403
+ */
404
+ summarizeSpec(spec) {
405
+ const requirements = this.extractRequirements(spec);
406
+ if (requirements.length === 0)
407
+ return this.summarize(spec);
408
+ const entries = requirements.map((req) => {
409
+ const label = req.label ? ` ${req.label}` : "";
410
+ const criteria = req.criteria.length > 0 ? `\n - Acceptance: ${req.criteria.join("; ")}` : "";
411
+ return `- **${req.id}**${label}: ${req.text}${criteria}`;
412
+ });
413
+ const plural = requirements.length === 1 ? "requirement" : "requirements";
414
+ return `This feature is specified by ${requirements.length} EARS ${plural}:\n\n${entries.join("\n")}`;
415
+ }
416
+ /** Extract the body of the first "## ..." design section whose title matches. */
417
+ extractDesignSection(design, titlePattern) {
418
+ const body = this.stripFrontmatter(design);
419
+ const headingRegex = /^##\s+(.+)$/gm;
420
+ const headings = [];
421
+ let match;
422
+ while ((match = headingRegex.exec(body)) !== null) {
423
+ headings.push({ title: match[1].trim(), start: match.index, bodyStart: match.index + match[0].length });
424
+ }
425
+ for (let i = 0; i < headings.length; i++) {
426
+ if (!titlePattern.test(headings[i].title))
427
+ continue;
428
+ const end = i + 1 < headings.length ? headings[i + 1].start : body.length;
429
+ return body.slice(headings[i].bodyStart, end);
430
+ }
431
+ return "";
432
+ }
433
+ /** Clean a design-section excerpt: drop template hints, TODOs, fences, and separators. */
434
+ cleanSectionExcerpt(section, maxLines = 12) {
435
+ const kept = [];
436
+ let inCodeFence = false;
437
+ for (const line of section.split("\n")) {
438
+ const trimmed = line.trim();
439
+ if (trimmed.startsWith("```")) {
440
+ inCodeFence = !inCodeFence;
441
+ continue;
442
+ }
443
+ if (inCodeFence)
444
+ continue;
445
+ if (!trimmed || trimmed === "---" || trimmed.startsWith(">") || trimmed.startsWith("<!--") || trimmed.includes("[TODO:"))
446
+ continue;
447
+ kept.push(line);
448
+ if (kept.length >= maxLines)
449
+ break;
450
+ }
451
+ return kept.join("\n").trim();
452
+ }
453
+ /**
454
+ * Architecture-aware design summary: pulls the C4 sections, data model, and
455
+ * API contracts instead of the frontmatter/ToC head of the file.
456
+ */
457
+ summarizeDesign(design) {
458
+ const parts = [];
459
+ const sectionSpecs = [
460
+ { heading: "System Context", pattern: /system context/i },
461
+ { heading: "Container Architecture", pattern: /container architecture/i },
462
+ { heading: "Component Design", pattern: /component design/i },
463
+ { heading: "Data Model", pattern: /data model/i },
464
+ { heading: "API Contracts", pattern: /api contracts?/i },
465
+ ];
466
+ for (const { heading, pattern } of sectionSpecs) {
467
+ const excerpt = this.cleanSectionExcerpt(this.extractDesignSection(design, pattern));
468
+ if (excerpt)
469
+ parts.push(`### ${heading}\n\n${excerpt}`);
470
+ }
471
+ return parts.length > 0 ? parts.join("\n\n") : this.summarize(design);
472
+ }
473
+ /** Remove ```mermaid fenced blocks so diagram edges are not scanned as endpoints. */
474
+ stripMermaidBlocks(content) {
475
+ return content.replace(/```mermaid[\s\S]*?(?:```|$)/g, "");
476
+ }
477
+ /** Detect technologies named in DESIGN.md (word-boundary matched). */
478
+ detectTechStack(design) {
479
+ const found = [];
480
+ for (const tech of DocGenerator.KNOWN_TECH) {
481
+ const escaped = tech.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
482
+ if (new RegExp(`(?:^|[^\\w])${escaped}(?:[^\\w]|$)`, "i").test(design))
483
+ found.push(tech);
484
+ }
485
+ return found;
486
+ }
487
+ /** Pull the schema/JSON body that follows a **Request:** or **Response:** marker. */
488
+ extractContractBody(block, marker, stopAt) {
489
+ const markerMatch = marker.exec(block);
490
+ if (!markerMatch)
491
+ return undefined;
492
+ let rest = block.slice(markerMatch.index + markerMatch[0].length);
493
+ if (stopAt) {
494
+ const stop = stopAt.exec(rest);
495
+ if (stop)
496
+ rest = rest.slice(0, stop.index);
497
+ }
498
+ const separator = rest.search(/^---\s*$/m);
499
+ if (separator !== -1)
500
+ rest = rest.slice(0, separator);
501
+ const value = rest.replace(/```(?:json)?/g, "").trim();
502
+ if (!value || /^n\/?a\.?$/i.test(value))
503
+ return undefined;
504
+ return value;
505
+ }
506
+ /**
507
+ * Extract API endpoints from DESIGN.md. Structured contract blocks
508
+ * ("### METHOD /path" with **Request:** and **Response:** bodies) are
509
+ * parsed first, including their JSON examples; a fallback scan picks up
510
+ * endpoints mentioned in prose. Mermaid diagrams are excluded and
511
+ * endpoints are deduplicated by METHOD+path.
512
+ */
262
513
  extractEndpoints(design) {
263
- const endpoints = [];
264
- const regex = /\b(GET|POST|PUT|PATCH|DELETE)\s+([/\w{}:-]+)/g;
514
+ const scannable = this.stripMermaidBlocks(this.stripFrontmatter(design));
515
+ const byKey = new Map();
516
+ // 1. Structured API contract blocks.
517
+ const contractRegex = /^###\s+(GET|POST|PUT|PATCH|DELETE)\s+(\/\S*)\s*$/gm;
518
+ const contracts = [];
265
519
  let match;
266
- while ((match = regex.exec(design)) !== null) {
267
- endpoints.push({ method: match[1], path: match[2], description: `${match[1]} ${match[2]}` });
520
+ while ((match = contractRegex.exec(scannable)) !== null) {
521
+ contracts.push({ method: match[1], path: match[2], bodyStart: match.index + match[0].length });
522
+ }
523
+ for (const contract of contracts) {
524
+ const rest = scannable.slice(contract.bodyStart);
525
+ const nextHeading = rest.search(/^#{2,3}\s+/m);
526
+ const block = nextHeading === -1 ? rest : rest.slice(0, nextHeading);
527
+ const description = block
528
+ .split("\n")
529
+ .map((l) => l.trim())
530
+ .find((l) => l && l !== "---" && !l.startsWith("**") && !l.startsWith("```") && !l.startsWith("{") && !l.startsWith("["))
531
+ || `${contract.method} ${contract.path}`;
532
+ let request = this.extractContractBody(block, /\*\*Request:?\*\*/i, /\*\*Response:?\*\*/i);
533
+ let response = this.extractContractBody(block, /\*\*Response:?\*\*/i);
534
+ // Fallback: bare ```json fences under the endpoint heading.
535
+ if (!request && !response) {
536
+ const fences = [...block.matchAll(/```json\s*([\s\S]*?)```/g)]
537
+ .map((m) => m[1].trim())
538
+ .filter((body) => body.length > 0);
539
+ const hasRequestBody = ["POST", "PUT", "PATCH"].includes(contract.method);
540
+ if (fences.length >= 2) {
541
+ request = fences[0];
542
+ response = fences[1];
543
+ }
544
+ else if (fences.length === 1) {
545
+ if (hasRequestBody)
546
+ request = fences[0];
547
+ else
548
+ response = fences[0];
549
+ }
550
+ }
551
+ const key = `${contract.method} ${contract.path}`;
552
+ if (!byKey.has(key)) {
553
+ const endpoint = { method: contract.method, path: contract.path, description };
554
+ if (request)
555
+ endpoint.request = request;
556
+ if (response)
557
+ endpoint.response = response;
558
+ byKey.set(key, endpoint);
559
+ }
560
+ }
561
+ // 2. Fallback scan for endpoints mentioned outside contract blocks.
562
+ const inlineRegex = /\b(GET|POST|PUT|PATCH|DELETE)\s+(\/[\w{}:./-]*)/g;
563
+ while ((match = inlineRegex.exec(scannable)) !== null) {
564
+ const method = match[1];
565
+ const path = match[2].replace(/[.,;:]+$/, "");
566
+ const key = `${method} ${path}`;
567
+ if (!byKey.has(key)) {
568
+ byKey.set(key, { method, path, description: `${method} ${path}` });
569
+ }
268
570
  }
269
- return endpoints;
571
+ return [...byKey.values()];
270
572
  }
271
573
  async safeRead(featureDir, fileName) {
272
574
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"doc-generator.js","sourceRoot":"","sources":["../../src/services/doc-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doc-generator.js","sourceRoot":"","sources":["../../src/services/doc-generator.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,12 @@
2
2
  * DocumentConverter — Converts PDF, DOCX, PPTX, TXT, MD to Markdown.
3
3
  * MVP implementation uses built-in parsing. Enhanced conversion with
4
4
  * mammoth/pdfjs-dist available when those dependencies are installed.
5
+ *
6
+ * HONESTY CONTRACT: the built-in extractor only handles uncompressed
7
+ * (stored) Office zips and uncompressed PDF text streams. Compressed
8
+ * content — which is what Word/PowerPoint/PDF exporters actually
9
+ * produce — FAILS with an actionable error instead of returning
10
+ * gibberish or empty text presented as success.
5
11
  */
6
12
  import type { FileManager } from "./file-manager.js";
7
13
  import type { DocumentConversionResult, DocumentFormat } from "../types.js";
@@ -30,7 +36,8 @@ export declare class DocumentConverter {
30
36
  private convertText;
31
37
  /**
32
38
  * DOCX → Markdown via XML extraction from zip.
33
- * MVP: extracts paragraph text from document.xml.
39
+ * Built-in extraction only handles uncompressed (stored) zips — compressed
40
+ * DOCX (what Word writes) fails honestly instead of returning gibberish.
34
41
  * Enhanced: use mammoth when available.
35
42
  */
36
43
  private convertDocx;
@@ -42,18 +49,14 @@ export declare class DocumentConverter {
42
49
  private convertPdf;
43
50
  /**
44
51
  * PPTX → Markdown via XML extraction from zip.
45
- * MVP: extracts text from slide XML files.
52
+ * Built-in extraction only handles uncompressed (stored) zips — compressed
53
+ * PPTX (what PowerPoint writes) fails honestly instead of returning gibberish.
46
54
  */
47
55
  private convertPptx;
48
56
  /**
49
57
  * Transcript (VTT/SRT) → Markdown.
50
58
  */
51
59
  private convertTranscript;
52
- /**
53
- * Extract text from an XML file inside a zip buffer.
54
- * Used for DOCX (word/document.xml) and PPTX (ppt/slides/slideN.xml).
55
- */
56
- private extractTextFromXmlZip;
57
60
  /**
58
61
  * Basic text extraction from PDF buffer.
59
62
  * Looks for text streams between BT and ET markers.
@@ -1 +1 @@
1
- {"version":3,"file":"document-converter.d.ts","sourceRoot":"","sources":["../../src/services/document-converter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAa5E,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAErD;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,cAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAsBnG;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,wBAAwB;IAWtE;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;YACW,eAAe;IAY7B;;OAEG;YACW,WAAW;IAYzB;;;;OAIG;YACW,WAAW;IA8BzB;;;;OAIG;YACW,UAAU;IA0CxB;;;OAGG;YACW,WAAW;IAsBzB;;OAEG;YACW,iBAAiB;IA0B/B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAoBhC;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,UAAU;CAGnB"}
1
+ {"version":3,"file":"document-converter.d.ts","sourceRoot":"","sources":["../../src/services/document-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAsF5E,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,WAAW;IAErD;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,cAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAsBnG;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,wBAAwB;IAWtE;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;YACW,eAAe;IAY7B;;OAEG;YACW,WAAW;IAYzB;;;;;OAKG;YACW,WAAW;IAgDzB;;;;OAIG;YACW,UAAU;IAqDxB;;;;OAIG;YACW,WAAW;IA8CzB;;OAEG;YACW,iBAAiB;IA0B/B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAoBhC;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,UAAU;CAGnB"}