@mcoda/core 0.1.8 → 0.1.11

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 (216) hide show
  1. package/CHANGELOG.md +3 -0
  2. package/README.md +2 -2
  3. package/dist/api/AgentsApi.d.ts +9 -1
  4. package/dist/api/AgentsApi.d.ts.map +1 -1
  5. package/dist/api/AgentsApi.js +201 -6
  6. package/dist/api/QaTasksApi.d.ts.map +1 -1
  7. package/dist/api/QaTasksApi.js +6 -0
  8. package/dist/api/TasksApi.d.ts.map +1 -1
  9. package/dist/api/TasksApi.js +1 -0
  10. package/dist/index.d.ts +4 -0
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +4 -0
  13. package/dist/prompts/PdrPrompts.d.ts.map +1 -1
  14. package/dist/prompts/PdrPrompts.js +9 -1
  15. package/dist/prompts/SdsPrompts.d.ts.map +1 -1
  16. package/dist/prompts/SdsPrompts.js +9 -0
  17. package/dist/services/agents/AgentRatingFormula.d.ts +27 -0
  18. package/dist/services/agents/AgentRatingFormula.d.ts.map +1 -0
  19. package/dist/services/agents/AgentRatingFormula.js +45 -0
  20. package/dist/services/agents/AgentRatingService.d.ts +60 -0
  21. package/dist/services/agents/AgentRatingService.d.ts.map +1 -0
  22. package/dist/services/agents/AgentRatingService.js +363 -0
  23. package/dist/services/agents/GatewayAgentService.d.ts +11 -0
  24. package/dist/services/agents/GatewayAgentService.d.ts.map +1 -1
  25. package/dist/services/agents/GatewayAgentService.js +525 -84
  26. package/dist/services/agents/GatewayHandoff.d.ts +11 -0
  27. package/dist/services/agents/GatewayHandoff.d.ts.map +1 -0
  28. package/dist/services/agents/GatewayHandoff.js +141 -0
  29. package/dist/services/agents/RoutingService.d.ts +1 -0
  30. package/dist/services/agents/RoutingService.d.ts.map +1 -1
  31. package/dist/services/agents/RoutingService.js +4 -4
  32. package/dist/services/backlog/BacklogService.d.ts +23 -0
  33. package/dist/services/backlog/BacklogService.d.ts.map +1 -1
  34. package/dist/services/backlog/BacklogService.js +62 -7
  35. package/dist/services/backlog/TaskOrderingHeuristics.d.ts +12 -0
  36. package/dist/services/backlog/TaskOrderingHeuristics.d.ts.map +1 -0
  37. package/dist/services/backlog/TaskOrderingHeuristics.js +56 -0
  38. package/dist/services/backlog/TaskOrderingService.d.ts +17 -4
  39. package/dist/services/backlog/TaskOrderingService.d.ts.map +1 -1
  40. package/dist/services/backlog/TaskOrderingService.js +538 -79
  41. package/dist/services/docs/DocInventory.d.ts +11 -0
  42. package/dist/services/docs/DocInventory.d.ts.map +1 -0
  43. package/dist/services/docs/DocInventory.js +230 -0
  44. package/dist/services/docs/DocgenRunContext.d.ts +59 -0
  45. package/dist/services/docs/DocgenRunContext.d.ts.map +1 -0
  46. package/dist/services/docs/DocgenRunContext.js +4 -0
  47. package/dist/services/docs/DocsService.d.ts +70 -3
  48. package/dist/services/docs/DocsService.d.ts.map +1 -1
  49. package/dist/services/docs/DocsService.js +1930 -89
  50. package/dist/services/docs/alignment/DocAlignmentGraph.d.ts +23 -0
  51. package/dist/services/docs/alignment/DocAlignmentGraph.d.ts.map +1 -0
  52. package/dist/services/docs/alignment/DocAlignmentGraph.js +78 -0
  53. package/dist/services/docs/alignment/DocAlignmentPatcher.d.ts +19 -0
  54. package/dist/services/docs/alignment/DocAlignmentPatcher.d.ts.map +1 -0
  55. package/dist/services/docs/alignment/DocAlignmentPatcher.js +222 -0
  56. package/dist/services/docs/patch/DocPatchEngine.d.ts +57 -0
  57. package/dist/services/docs/patch/DocPatchEngine.d.ts.map +1 -0
  58. package/dist/services/docs/patch/DocPatchEngine.js +331 -0
  59. package/dist/services/docs/review/Glossary.d.ts +16 -0
  60. package/dist/services/docs/review/Glossary.d.ts.map +1 -0
  61. package/dist/services/docs/review/Glossary.js +47 -0
  62. package/dist/services/docs/review/ReviewReportRenderer.d.ts +3 -0
  63. package/dist/services/docs/review/ReviewReportRenderer.d.ts.map +1 -0
  64. package/dist/services/docs/review/ReviewReportRenderer.js +133 -0
  65. package/dist/services/docs/review/ReviewReportSchema.d.ts +39 -0
  66. package/dist/services/docs/review/ReviewReportSchema.d.ts.map +1 -0
  67. package/dist/services/docs/review/ReviewReportSchema.js +47 -0
  68. package/dist/services/docs/review/ReviewTypes.d.ts +76 -0
  69. package/dist/services/docs/review/ReviewTypes.d.ts.map +1 -0
  70. package/dist/services/docs/review/ReviewTypes.js +94 -0
  71. package/dist/services/docs/review/gates/AdminOpenApiSpecGate.d.ts +7 -0
  72. package/dist/services/docs/review/gates/AdminOpenApiSpecGate.d.ts.map +1 -0
  73. package/dist/services/docs/review/gates/AdminOpenApiSpecGate.js +93 -0
  74. package/dist/services/docs/review/gates/ApiPathConsistencyGate.d.ts +7 -0
  75. package/dist/services/docs/review/gates/ApiPathConsistencyGate.d.ts.map +1 -0
  76. package/dist/services/docs/review/gates/ApiPathConsistencyGate.js +308 -0
  77. package/dist/services/docs/review/gates/BuildReadyCompletenessGate.d.ts +8 -0
  78. package/dist/services/docs/review/gates/BuildReadyCompletenessGate.d.ts.map +1 -0
  79. package/dist/services/docs/review/gates/BuildReadyCompletenessGate.js +278 -0
  80. package/dist/services/docs/review/gates/DeploymentBlueprintGate.d.ts +8 -0
  81. package/dist/services/docs/review/gates/DeploymentBlueprintGate.d.ts.map +1 -0
  82. package/dist/services/docs/review/gates/DeploymentBlueprintGate.js +487 -0
  83. package/dist/services/docs/review/gates/NoMaybesGate.d.ts +8 -0
  84. package/dist/services/docs/review/gates/NoMaybesGate.d.ts.map +1 -0
  85. package/dist/services/docs/review/gates/NoMaybesGate.js +145 -0
  86. package/dist/services/docs/review/gates/OpenApiCoverageGate.d.ts +7 -0
  87. package/dist/services/docs/review/gates/OpenApiCoverageGate.d.ts.map +1 -0
  88. package/dist/services/docs/review/gates/OpenApiCoverageGate.js +266 -0
  89. package/dist/services/docs/review/gates/OpenApiSchemaSanityGate.d.ts +7 -0
  90. package/dist/services/docs/review/gates/OpenApiSchemaSanityGate.d.ts.map +1 -0
  91. package/dist/services/docs/review/gates/OpenApiSchemaSanityGate.js +59 -0
  92. package/dist/services/docs/review/gates/OpenQuestionsGate.d.ts +7 -0
  93. package/dist/services/docs/review/gates/OpenQuestionsGate.d.ts.map +1 -0
  94. package/dist/services/docs/review/gates/OpenQuestionsGate.js +200 -0
  95. package/dist/services/docs/review/gates/PdrInterfacesGate.d.ts +7 -0
  96. package/dist/services/docs/review/gates/PdrInterfacesGate.d.ts.map +1 -0
  97. package/dist/services/docs/review/gates/PdrInterfacesGate.js +159 -0
  98. package/dist/services/docs/review/gates/PdrOpenQuestionsGate.d.ts +8 -0
  99. package/dist/services/docs/review/gates/PdrOpenQuestionsGate.d.ts.map +1 -0
  100. package/dist/services/docs/review/gates/PdrOpenQuestionsGate.js +129 -0
  101. package/dist/services/docs/review/gates/PdrOwnershipGate.d.ts +7 -0
  102. package/dist/services/docs/review/gates/PdrOwnershipGate.d.ts.map +1 -0
  103. package/dist/services/docs/review/gates/PdrOwnershipGate.js +169 -0
  104. package/dist/services/docs/review/gates/PlaceholderArtifactGate.d.ts +10 -0
  105. package/dist/services/docs/review/gates/PlaceholderArtifactGate.d.ts.map +1 -0
  106. package/dist/services/docs/review/gates/PlaceholderArtifactGate.js +261 -0
  107. package/dist/services/docs/review/gates/RfpConsentGate.d.ts +6 -0
  108. package/dist/services/docs/review/gates/RfpConsentGate.d.ts.map +1 -0
  109. package/dist/services/docs/review/gates/RfpConsentGate.js +127 -0
  110. package/dist/services/docs/review/gates/RfpDefinitionGate.d.ts +7 -0
  111. package/dist/services/docs/review/gates/RfpDefinitionGate.d.ts.map +1 -0
  112. package/dist/services/docs/review/gates/RfpDefinitionGate.js +173 -0
  113. package/dist/services/docs/review/gates/SdsAdaptersGate.d.ts +7 -0
  114. package/dist/services/docs/review/gates/SdsAdaptersGate.d.ts.map +1 -0
  115. package/dist/services/docs/review/gates/SdsAdaptersGate.js +196 -0
  116. package/dist/services/docs/review/gates/SdsDecisionsGate.d.ts +7 -0
  117. package/dist/services/docs/review/gates/SdsDecisionsGate.d.ts.map +1 -0
  118. package/dist/services/docs/review/gates/SdsDecisionsGate.js +89 -0
  119. package/dist/services/docs/review/gates/SdsOpsGate.d.ts +7 -0
  120. package/dist/services/docs/review/gates/SdsOpsGate.d.ts.map +1 -0
  121. package/dist/services/docs/review/gates/SdsOpsGate.js +162 -0
  122. package/dist/services/docs/review/gates/SdsPolicyTelemetryGate.d.ts +7 -0
  123. package/dist/services/docs/review/gates/SdsPolicyTelemetryGate.d.ts.map +1 -0
  124. package/dist/services/docs/review/gates/SdsPolicyTelemetryGate.js +166 -0
  125. package/dist/services/docs/review/gates/SqlRequiredTablesGate.d.ts +7 -0
  126. package/dist/services/docs/review/gates/SqlRequiredTablesGate.d.ts.map +1 -0
  127. package/dist/services/docs/review/gates/SqlRequiredTablesGate.js +273 -0
  128. package/dist/services/docs/review/gates/SqlSyntaxGate.d.ts +7 -0
  129. package/dist/services/docs/review/gates/SqlSyntaxGate.d.ts.map +1 -0
  130. package/dist/services/docs/review/gates/SqlSyntaxGate.js +203 -0
  131. package/dist/services/docs/review/gates/TerminologyNormalizationGate.d.ts +9 -0
  132. package/dist/services/docs/review/gates/TerminologyNormalizationGate.d.ts.map +1 -0
  133. package/dist/services/docs/review/gates/TerminologyNormalizationGate.js +217 -0
  134. package/dist/services/docs/review/glossary.json +47 -0
  135. package/dist/services/estimate/EstimateService.d.ts +2 -0
  136. package/dist/services/estimate/EstimateService.d.ts.map +1 -1
  137. package/dist/services/estimate/EstimateService.js +66 -18
  138. package/dist/services/estimate/VelocityService.d.ts +4 -0
  139. package/dist/services/estimate/VelocityService.d.ts.map +1 -1
  140. package/dist/services/estimate/VelocityService.js +179 -36
  141. package/dist/services/estimate/types.d.ts +1 -0
  142. package/dist/services/estimate/types.d.ts.map +1 -1
  143. package/dist/services/execution/GatewayTrioService.d.ts +200 -0
  144. package/dist/services/execution/GatewayTrioService.d.ts.map +1 -0
  145. package/dist/services/execution/GatewayTrioService.js +2492 -0
  146. package/dist/services/execution/QaApiRunner.d.ts +30 -0
  147. package/dist/services/execution/QaApiRunner.d.ts.map +1 -0
  148. package/dist/services/execution/QaApiRunner.js +881 -0
  149. package/dist/services/execution/QaFollowupService.d.ts +2 -0
  150. package/dist/services/execution/QaFollowupService.d.ts.map +1 -1
  151. package/dist/services/execution/QaFollowupService.js +9 -2
  152. package/dist/services/execution/QaPlanValidator.d.ts +10 -0
  153. package/dist/services/execution/QaPlanValidator.d.ts.map +1 -0
  154. package/dist/services/execution/QaPlanValidator.js +128 -0
  155. package/dist/services/execution/QaProfileService.d.ts +27 -1
  156. package/dist/services/execution/QaProfileService.d.ts.map +1 -1
  157. package/dist/services/execution/QaProfileService.js +354 -7
  158. package/dist/services/execution/QaTasksService.d.ts +59 -1
  159. package/dist/services/execution/QaTasksService.d.ts.map +1 -1
  160. package/dist/services/execution/QaTasksService.js +3347 -318
  161. package/dist/services/execution/QaTestCommandBuilder.d.ts +51 -0
  162. package/dist/services/execution/QaTestCommandBuilder.d.ts.map +1 -0
  163. package/dist/services/execution/QaTestCommandBuilder.js +495 -0
  164. package/dist/services/execution/TaskSelectionService.d.ts +4 -2
  165. package/dist/services/execution/TaskSelectionService.d.ts.map +1 -1
  166. package/dist/services/execution/TaskSelectionService.js +144 -28
  167. package/dist/services/execution/TaskStateService.d.ts +19 -6
  168. package/dist/services/execution/TaskStateService.d.ts.map +1 -1
  169. package/dist/services/execution/TaskStateService.js +128 -13
  170. package/dist/services/execution/WorkOnTasksService.d.ts +32 -1
  171. package/dist/services/execution/WorkOnTasksService.d.ts.map +1 -1
  172. package/dist/services/execution/WorkOnTasksService.js +4667 -722
  173. package/dist/services/jobs/JobInsightsService.d.ts +4 -0
  174. package/dist/services/jobs/JobInsightsService.d.ts.map +1 -1
  175. package/dist/services/jobs/JobInsightsService.js +51 -5
  176. package/dist/services/jobs/JobResumeService.d.ts.map +1 -1
  177. package/dist/services/jobs/JobResumeService.js +23 -10
  178. package/dist/services/jobs/JobService.d.ts +56 -4
  179. package/dist/services/jobs/JobService.d.ts.map +1 -1
  180. package/dist/services/jobs/JobService.js +232 -1
  181. package/dist/services/openapi/OpenApiService.d.ts +51 -0
  182. package/dist/services/openapi/OpenApiService.d.ts.map +1 -1
  183. package/dist/services/openapi/OpenApiService.js +953 -106
  184. package/dist/services/planning/CreateTasksService.d.ts +21 -0
  185. package/dist/services/planning/CreateTasksService.d.ts.map +1 -1
  186. package/dist/services/planning/CreateTasksService.js +569 -31
  187. package/dist/services/planning/RefineTasksService.d.ts +9 -0
  188. package/dist/services/planning/RefineTasksService.d.ts.map +1 -1
  189. package/dist/services/planning/RefineTasksService.js +409 -59
  190. package/dist/services/review/CodeReviewService.d.ts +18 -0
  191. package/dist/services/review/CodeReviewService.d.ts.map +1 -1
  192. package/dist/services/review/CodeReviewService.js +1309 -167
  193. package/dist/services/review/ReviewNormalizer.d.ts +9 -0
  194. package/dist/services/review/ReviewNormalizer.d.ts.map +1 -0
  195. package/dist/services/review/ReviewNormalizer.js +147 -0
  196. package/dist/services/shared/AuthErrors.d.ts +3 -0
  197. package/dist/services/shared/AuthErrors.d.ts.map +1 -0
  198. package/dist/services/shared/AuthErrors.js +17 -0
  199. package/dist/services/shared/DocdexGuidance.d.ts +7 -0
  200. package/dist/services/shared/DocdexGuidance.d.ts.map +1 -0
  201. package/dist/services/shared/DocdexGuidance.js +12 -0
  202. package/dist/services/shared/ProjectGuidance.d.ts +17 -0
  203. package/dist/services/shared/ProjectGuidance.d.ts.map +1 -0
  204. package/dist/services/shared/ProjectGuidance.js +78 -0
  205. package/dist/services/system/ToolDenylist.d.ts +13 -0
  206. package/dist/services/system/ToolDenylist.d.ts.map +1 -0
  207. package/dist/services/system/ToolDenylist.js +85 -0
  208. package/dist/services/tasks/TaskCommentFormatter.d.ts +20 -0
  209. package/dist/services/tasks/TaskCommentFormatter.d.ts.map +1 -0
  210. package/dist/services/tasks/TaskCommentFormatter.js +54 -0
  211. package/dist/services/telemetry/TelemetryService.d.ts.map +1 -1
  212. package/dist/services/telemetry/TelemetryService.js +39 -7
  213. package/dist/workspace/WorkspaceManager.d.ts +26 -0
  214. package/dist/workspace/WorkspaceManager.d.ts.map +1 -1
  215. package/dist/workspace/WorkspaceManager.js +206 -32
  216. package/package.json +6 -5
@@ -0,0 +1,278 @@
1
+ import { promises as fs } from "node:fs";
2
+ import YAML from "yaml";
3
+ const REQUIRED_PDR_HEADINGS = ["scope", "interfaces"];
4
+ const REQUIRED_SDS_HEADINGS = ["architecture", "operations"];
5
+ const normalizeHeading = (heading) => heading
6
+ .toLowerCase()
7
+ .replace(/[^a-z0-9]+/g, " ")
8
+ .trim();
9
+ const extractHeadings = (content) => {
10
+ const lines = content.split(/\r?\n/);
11
+ const headings = [];
12
+ for (let i = 0; i < lines.length; i += 1) {
13
+ const match = lines[i]?.match(/^#{1,6}\s+(.*)$/);
14
+ if (match) {
15
+ headings.push({ text: match[1]?.trim() ?? "", line: i + 1 });
16
+ }
17
+ }
18
+ return headings;
19
+ };
20
+ const hasRequiredHeadings = (content, required) => {
21
+ const headings = extractHeadings(content);
22
+ const normalized = headings.map((h) => normalizeHeading(h.text));
23
+ const lineMap = {};
24
+ for (const heading of headings) {
25
+ lineMap[normalizeHeading(heading.text)] = heading.line;
26
+ }
27
+ const missing = required.filter((req) => !normalized.includes(req));
28
+ return { missing, lineMap };
29
+ };
30
+ const buildIssue = (input) => {
31
+ return {
32
+ id: input.id,
33
+ gateId: "gate-build-ready-completeness",
34
+ severity: input.severity ?? "high",
35
+ category: "completeness",
36
+ artifact: input.artifactKind,
37
+ message: input.message,
38
+ remediation: input.remediation,
39
+ location: input.location ??
40
+ { kind: "heading", heading: "Artifacts", path: input.artifact?.path },
41
+ metadata: input.metadata,
42
+ };
43
+ };
44
+ const checkOpenApi = async (record) => {
45
+ const issues = [];
46
+ const notes = [];
47
+ try {
48
+ const content = await fs.readFile(record.path, "utf8");
49
+ let parsed;
50
+ try {
51
+ parsed = YAML.parse(content);
52
+ }
53
+ catch (error) {
54
+ issues.push(buildIssue({
55
+ id: `gate-build-ready-completeness-openapi-parse`,
56
+ artifact: record,
57
+ artifactKind: "openapi",
58
+ message: `OpenAPI spec is not valid YAML: ${error.message}`,
59
+ remediation: "Regenerate or fix the OpenAPI spec so it parses cleanly.",
60
+ location: { kind: "line_range", path: record.path, lineStart: 1, lineEnd: 1 },
61
+ metadata: { issueType: "openapi_parse" },
62
+ }));
63
+ return { issues, notes };
64
+ }
65
+ if (!parsed?.openapi) {
66
+ issues.push(buildIssue({
67
+ id: `gate-build-ready-completeness-openapi-missing-version`,
68
+ artifact: record,
69
+ artifactKind: "openapi",
70
+ message: "OpenAPI spec missing openapi version field.",
71
+ remediation: "Add the openapi version (e.g., 3.1.0) to the spec.",
72
+ metadata: { issueType: "openapi_missing_version" },
73
+ }));
74
+ }
75
+ if (!parsed?.paths || Object.keys(parsed.paths ?? {}).length === 0) {
76
+ issues.push(buildIssue({
77
+ id: `gate-build-ready-completeness-openapi-missing-paths`,
78
+ artifact: record,
79
+ artifactKind: "openapi",
80
+ message: "OpenAPI spec is missing paths definitions.",
81
+ remediation: "Ensure the OpenAPI spec includes a paths section with endpoints.",
82
+ metadata: { issueType: "openapi_missing_paths" },
83
+ }));
84
+ }
85
+ }
86
+ catch (error) {
87
+ notes.push(`Unable to read OpenAPI spec ${record.path}: ${error.message ?? String(error)}`);
88
+ }
89
+ return { issues, notes };
90
+ };
91
+ const checkSql = async (record) => {
92
+ const issues = [];
93
+ const notes = [];
94
+ try {
95
+ const content = await fs.readFile(record.path, "utf8");
96
+ if (!/\bcreate\s+table\b/i.test(content)) {
97
+ issues.push(buildIssue({
98
+ id: `gate-build-ready-completeness-sql-missing-tables`,
99
+ artifact: record,
100
+ artifactKind: "sql",
101
+ message: "SQL schema does not contain any CREATE TABLE statements.",
102
+ remediation: "Define the required schema tables in the SQL output.",
103
+ metadata: { issueType: "sql_missing_tables" },
104
+ }));
105
+ }
106
+ }
107
+ catch (error) {
108
+ notes.push(`Unable to read SQL schema ${record.path}: ${error.message ?? String(error)}`);
109
+ }
110
+ return { issues, notes };
111
+ };
112
+ const checkMarkdownHeadings = async (record, required, label) => {
113
+ const issues = [];
114
+ const notes = [];
115
+ try {
116
+ const content = await fs.readFile(record.path, "utf8");
117
+ const { missing, lineMap } = hasRequiredHeadings(content, required);
118
+ if (missing.length > 0) {
119
+ for (const heading of missing) {
120
+ issues.push(buildIssue({
121
+ id: `gate-build-ready-completeness-${record.kind}-${heading}`,
122
+ artifact: record,
123
+ artifactKind: record.kind,
124
+ message: `${label} is missing the "${heading}" section.`,
125
+ remediation: `Add a ${heading} section to the ${label}.`,
126
+ location: {
127
+ kind: "heading",
128
+ heading: heading,
129
+ path: record.path,
130
+ },
131
+ metadata: { issueType: "missing_heading", heading, line: lineMap[heading] },
132
+ }));
133
+ }
134
+ }
135
+ }
136
+ catch (error) {
137
+ notes.push(`Unable to read ${label} ${record.path}: ${error.message ?? String(error)}`);
138
+ }
139
+ return { issues, notes };
140
+ };
141
+ const hasAnyArtifacts = (artifacts) => Boolean(artifacts.pdr || artifacts.sds || artifacts.sql || artifacts.openapi.length > 0 || artifacts.blueprints.length > 0);
142
+ const deploymentHasEnvExample = (records) => records.some((record) => record.path.toLowerCase().endsWith(".env.example"));
143
+ const deploymentHasManifest = (records) => records.some((record) => {
144
+ const lower = record.path.toLowerCase();
145
+ return (lower.includes("docker-compose") ||
146
+ lower.endsWith("kustomization.yaml") ||
147
+ lower.endsWith("kustomization.yml") ||
148
+ lower.includes("/k8s/") ||
149
+ lower.includes("/deploy/") ||
150
+ lower.includes("/deployment/"));
151
+ });
152
+ export const runBuildReadyCompletenessGate = async (input) => {
153
+ const { artifacts, buildReady } = input;
154
+ if (!hasAnyArtifacts(artifacts)) {
155
+ return {
156
+ gateId: "gate-build-ready-completeness",
157
+ gateName: "Build-Ready Completeness",
158
+ status: "skipped",
159
+ issues: [],
160
+ notes: ["No artifacts available for build-ready completeness checks."],
161
+ };
162
+ }
163
+ const issues = [];
164
+ const notes = [];
165
+ const missingArtifacts = [];
166
+ if (!artifacts.pdr) {
167
+ missingArtifacts.push("pdr");
168
+ issues.push(buildIssue({
169
+ id: "gate-build-ready-completeness-missing-pdr",
170
+ artifact: undefined,
171
+ artifactKind: "pdr",
172
+ message: "PDR artifact is missing.",
173
+ remediation: "Generate or provide a PDR document.",
174
+ metadata: { issueType: "missing_artifact", required: "pdr" },
175
+ }));
176
+ }
177
+ if (!artifacts.sds) {
178
+ missingArtifacts.push("sds");
179
+ issues.push(buildIssue({
180
+ id: "gate-build-ready-completeness-missing-sds",
181
+ artifact: undefined,
182
+ artifactKind: "sds",
183
+ message: "SDS artifact is missing.",
184
+ remediation: "Generate or provide an SDS document.",
185
+ metadata: { issueType: "missing_artifact", required: "sds" },
186
+ }));
187
+ }
188
+ if (!artifacts.openapi || artifacts.openapi.length === 0) {
189
+ missingArtifacts.push("openapi");
190
+ issues.push(buildIssue({
191
+ id: "gate-build-ready-completeness-missing-openapi",
192
+ artifact: undefined,
193
+ artifactKind: "openapi",
194
+ message: "OpenAPI spec is missing.",
195
+ remediation: "Generate or provide an OpenAPI spec.",
196
+ metadata: { issueType: "missing_artifact", required: "openapi" },
197
+ }));
198
+ }
199
+ if (!artifacts.sql) {
200
+ missingArtifacts.push("sql");
201
+ issues.push(buildIssue({
202
+ id: "gate-build-ready-completeness-missing-sql",
203
+ artifact: undefined,
204
+ artifactKind: "sql",
205
+ message: "SQL schema output is missing.",
206
+ remediation: "Generate or provide the SQL schema output.",
207
+ metadata: { issueType: "missing_artifact", required: "sql" },
208
+ }));
209
+ }
210
+ if (!artifacts.blueprints || artifacts.blueprints.length === 0) {
211
+ missingArtifacts.push("deployment");
212
+ issues.push(buildIssue({
213
+ id: "gate-build-ready-completeness-missing-deployment",
214
+ artifact: undefined,
215
+ artifactKind: "deployment",
216
+ message: "Deployment blueprint artifacts are missing.",
217
+ remediation: "Generate deployment blueprint files (docker-compose, k8s, env example).",
218
+ metadata: { issueType: "missing_artifact", required: "deployment" },
219
+ }));
220
+ }
221
+ if (artifacts.pdr) {
222
+ const result = await checkMarkdownHeadings(artifacts.pdr, REQUIRED_PDR_HEADINGS, "PDR");
223
+ issues.push(...result.issues);
224
+ notes.push(...result.notes);
225
+ }
226
+ if (artifacts.sds) {
227
+ const result = await checkMarkdownHeadings(artifacts.sds, REQUIRED_SDS_HEADINGS, "SDS");
228
+ issues.push(...result.issues);
229
+ notes.push(...result.notes);
230
+ }
231
+ if (artifacts.openapi.length > 0) {
232
+ for (const record of artifacts.openapi) {
233
+ const result = await checkOpenApi(record);
234
+ issues.push(...result.issues);
235
+ notes.push(...result.notes);
236
+ }
237
+ }
238
+ if (artifacts.sql) {
239
+ const result = await checkSql(artifacts.sql);
240
+ issues.push(...result.issues);
241
+ notes.push(...result.notes);
242
+ }
243
+ if (artifacts.blueprints.length > 0) {
244
+ if (!deploymentHasEnvExample(artifacts.blueprints)) {
245
+ issues.push(buildIssue({
246
+ id: "gate-build-ready-completeness-missing-env-example",
247
+ artifact: artifacts.blueprints[0],
248
+ artifactKind: "deployment",
249
+ message: "Deployment blueprint missing .env.example.",
250
+ remediation: "Include a .env.example mapping for required environment variables.",
251
+ metadata: { issueType: "deployment_missing_env" },
252
+ }));
253
+ }
254
+ if (!deploymentHasManifest(artifacts.blueprints)) {
255
+ issues.push(buildIssue({
256
+ id: "gate-build-ready-completeness-missing-manifest",
257
+ artifact: artifacts.blueprints[0],
258
+ artifactKind: "deployment",
259
+ message: "Deployment blueprint missing compose or k8s manifests.",
260
+ remediation: "Provide docker-compose or Kubernetes manifests for deployment.",
261
+ metadata: { issueType: "deployment_missing_manifest" },
262
+ }));
263
+ }
264
+ }
265
+ const status = issues.length === 0 ? "pass" : buildReady ? "fail" : "warn";
266
+ return {
267
+ gateId: "gate-build-ready-completeness",
268
+ gateName: "Build-Ready Completeness",
269
+ status,
270
+ issues,
271
+ notes: notes.length ? notes : undefined,
272
+ metadata: {
273
+ missingArtifacts,
274
+ issueCount: issues.length,
275
+ buildReady: Boolean(buildReady),
276
+ },
277
+ };
278
+ };
@@ -0,0 +1,8 @@
1
+ import { DocgenArtifactInventory } from "../../DocgenRunContext.js";
2
+ import { ReviewGateResult } from "../ReviewTypes.js";
3
+ export interface DeploymentBlueprintGateInput {
4
+ artifacts: DocgenArtifactInventory;
5
+ buildReady?: boolean;
6
+ }
7
+ export declare const runDeploymentBlueprintGate: (input: DeploymentBlueprintGateInput) => Promise<ReviewGateResult>;
8
+ //# sourceMappingURL=DeploymentBlueprintGate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeploymentBlueprintGate.d.ts","sourceRoot":"","sources":["../../../../../src/services/docs/review/gates/DeploymentBlueprintGate.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqB,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAA+B,MAAM,mBAAmB,CAAC;AAElF,MAAM,WAAW,4BAA4B;IAC3C,SAAS,EAAE,uBAAuB,CAAC;IACnC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAsQD,eAAO,MAAM,0BAA0B,GACrC,OAAO,4BAA4B,KAClC,OAAO,CAAC,gBAAgB,CA8R1B,CAAC"}