@rsaglobaltech/specgate 0.8.1

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 (494) hide show
  1. package/CHANGELOG.md +1016 -0
  2. package/README.md +148 -0
  3. package/bin/specgate.js +2 -0
  4. package/bin/specgate.ts +383 -0
  5. package/dist/bin/specgate.js +342 -0
  6. package/dist/bin/specgate.js.map +1 -0
  7. package/dist/packages/core/src/application/AddRequirementUseCase.js +24 -0
  8. package/dist/packages/core/src/application/AddRequirementUseCase.js.map +1 -0
  9. package/dist/packages/core/src/application/ArchiveChangeUseCase.js +185 -0
  10. package/dist/packages/core/src/application/ArchiveChangeUseCase.js.map +1 -0
  11. package/dist/packages/core/src/application/CheckAgainstLockUseCase.js +134 -0
  12. package/dist/packages/core/src/application/CheckAgainstLockUseCase.js.map +1 -0
  13. package/dist/packages/core/src/application/GenerateAgentPromptUseCase.js +25 -0
  14. package/dist/packages/core/src/application/GenerateAgentPromptUseCase.js.map +1 -0
  15. package/dist/packages/core/src/application/GeneratePlanUseCase.js +135 -0
  16. package/dist/packages/core/src/application/GeneratePlanUseCase.js.map +1 -0
  17. package/dist/packages/core/src/application/LinkRequirementUseCase.js +25 -0
  18. package/dist/packages/core/src/application/LinkRequirementUseCase.js.map +1 -0
  19. package/dist/packages/core/src/application/RemovePackUseCase.js +28 -0
  20. package/dist/packages/core/src/application/RemovePackUseCase.js.map +1 -0
  21. package/dist/packages/core/src/application/UpdateRequirementStatusUseCase.js +37 -0
  22. package/dist/packages/core/src/application/UpdateRequirementStatusUseCase.js.map +1 -0
  23. package/dist/packages/core/src/application/ValidateChangeUseCase.js +86 -0
  24. package/dist/packages/core/src/application/ValidateChangeUseCase.js.map +1 -0
  25. package/dist/packages/core/src/application/ValidateProjectUseCase.js +101 -0
  26. package/dist/packages/core/src/application/ValidateProjectUseCase.js.map +1 -0
  27. package/dist/packages/core/src/application/ports/IDomainPackRepository.js +3 -0
  28. package/dist/packages/core/src/application/ports/IDomainPackRepository.js.map +1 -0
  29. package/dist/packages/core/src/application/ports/IHarnessConfigRepository.js +3 -0
  30. package/dist/packages/core/src/application/ports/IHarnessConfigRepository.js.map +1 -0
  31. package/dist/packages/core/src/application/ports/ILockfileRepository.js +3 -0
  32. package/dist/packages/core/src/application/ports/ILockfileRepository.js.map +1 -0
  33. package/dist/packages/core/src/application/ports/IManifestRepository.js +3 -0
  34. package/dist/packages/core/src/application/ports/IManifestRepository.js.map +1 -0
  35. package/dist/packages/core/src/application/ports/IProjectRepository.js +3 -0
  36. package/dist/packages/core/src/application/ports/IProjectRepository.js.map +1 -0
  37. package/dist/packages/core/src/application/ports/IRequirementGraphRepository.js +3 -0
  38. package/dist/packages/core/src/application/ports/IRequirementGraphRepository.js.map +1 -0
  39. package/dist/packages/core/src/application/ports/ITraceabilityRepository.js +3 -0
  40. package/dist/packages/core/src/application/ports/ITraceabilityRepository.js.map +1 -0
  41. package/dist/packages/core/src/domain/AgentPrompt.js +79 -0
  42. package/dist/packages/core/src/domain/AgentPrompt.js.map +1 -0
  43. package/dist/packages/core/src/domain/ArchivePlan.js +26 -0
  44. package/dist/packages/core/src/domain/ArchivePlan.js.map +1 -0
  45. package/dist/packages/core/src/domain/AuthoringScope.js +48 -0
  46. package/dist/packages/core/src/domain/AuthoringScope.js.map +1 -0
  47. package/dist/packages/core/src/domain/ChangeTemplates.js +133 -0
  48. package/dist/packages/core/src/domain/ChangeTemplates.js.map +1 -0
  49. package/dist/packages/core/src/domain/CucumberMessages.js +256 -0
  50. package/dist/packages/core/src/domain/CucumberMessages.js.map +1 -0
  51. package/dist/packages/core/src/domain/DeclaredArtifacts.js +117 -0
  52. package/dist/packages/core/src/domain/DeclaredArtifacts.js.map +1 -0
  53. package/dist/packages/core/src/domain/DeltaSpec.js +219 -0
  54. package/dist/packages/core/src/domain/DeltaSpec.js.map +1 -0
  55. package/dist/packages/core/src/domain/Diagnostic.js +75 -0
  56. package/dist/packages/core/src/domain/Diagnostic.js.map +1 -0
  57. package/dist/packages/core/src/domain/DomainPack.js +62 -0
  58. package/dist/packages/core/src/domain/DomainPack.js.map +1 -0
  59. package/dist/packages/core/src/domain/EmptyAttempt.js +60 -0
  60. package/dist/packages/core/src/domain/EmptyAttempt.js.map +1 -0
  61. package/dist/packages/core/src/domain/FileChangeSet.js +37 -0
  62. package/dist/packages/core/src/domain/FileChangeSet.js.map +1 -0
  63. package/dist/packages/core/src/domain/Gherkin.js +272 -0
  64. package/dist/packages/core/src/domain/Gherkin.js.map +1 -0
  65. package/dist/packages/core/src/domain/GherkinDialects.js +97 -0
  66. package/dist/packages/core/src/domain/GherkinDialects.js.map +1 -0
  67. package/dist/packages/core/src/domain/GherkinQuality.js +160 -0
  68. package/dist/packages/core/src/domain/GherkinQuality.js.map +1 -0
  69. package/dist/packages/core/src/domain/GherkinTags.js +119 -0
  70. package/dist/packages/core/src/domain/GherkinTags.js.map +1 -0
  71. package/dist/packages/core/src/domain/GitSafety.js +77 -0
  72. package/dist/packages/core/src/domain/GitSafety.js.map +1 -0
  73. package/dist/packages/core/src/domain/HarnessConfig.js +58 -0
  74. package/dist/packages/core/src/domain/HarnessConfig.js.map +1 -0
  75. package/dist/packages/core/src/domain/HarnessReport.js +162 -0
  76. package/dist/packages/core/src/domain/HarnessReport.js.map +1 -0
  77. package/dist/packages/core/src/domain/HarnessRun.js +154 -0
  78. package/dist/packages/core/src/domain/HarnessRun.js.map +1 -0
  79. package/dist/packages/core/src/domain/InboundChange.js +127 -0
  80. package/dist/packages/core/src/domain/InboundChange.js.map +1 -0
  81. package/dist/packages/core/src/domain/Language.js +112 -0
  82. package/dist/packages/core/src/domain/Language.js.map +1 -0
  83. package/dist/packages/core/src/domain/Lockfile.js +64 -0
  84. package/dist/packages/core/src/domain/Lockfile.js.map +1 -0
  85. package/dist/packages/core/src/domain/PackContribution.js +106 -0
  86. package/dist/packages/core/src/domain/PackContribution.js.map +1 -0
  87. package/dist/packages/core/src/domain/PackDelta.js +298 -0
  88. package/dist/packages/core/src/domain/PackDelta.js.map +1 -0
  89. package/dist/packages/core/src/domain/PackSpec.js +481 -0
  90. package/dist/packages/core/src/domain/PackSpec.js.map +1 -0
  91. package/dist/packages/core/src/domain/ProfileMatch.js +87 -0
  92. package/dist/packages/core/src/domain/ProfileMatch.js.map +1 -0
  93. package/dist/packages/core/src/domain/Reconciliation.js +72 -0
  94. package/dist/packages/core/src/domain/Reconciliation.js.map +1 -0
  95. package/dist/packages/core/src/domain/RequirementGraph.js +197 -0
  96. package/dist/packages/core/src/domain/RequirementGraph.js.map +1 -0
  97. package/dist/packages/core/src/domain/RequirementPlan.js +85 -0
  98. package/dist/packages/core/src/domain/RequirementPlan.js.map +1 -0
  99. package/dist/packages/core/src/domain/RequirementReadiness.js +115 -0
  100. package/dist/packages/core/src/domain/RequirementReadiness.js.map +1 -0
  101. package/dist/packages/core/src/domain/RequirementSyntax.js +91 -0
  102. package/dist/packages/core/src/domain/RequirementSyntax.js.map +1 -0
  103. package/dist/packages/core/src/domain/ResumeState.js +115 -0
  104. package/dist/packages/core/src/domain/ResumeState.js.map +1 -0
  105. package/dist/packages/core/src/domain/RunBudget.js +103 -0
  106. package/dist/packages/core/src/domain/RunBudget.js.map +1 -0
  107. package/dist/packages/core/src/domain/SpecDiff.js +48 -0
  108. package/dist/packages/core/src/domain/SpecDiff.js.map +1 -0
  109. package/dist/packages/core/src/domain/SpecParser.js +406 -0
  110. package/dist/packages/core/src/domain/SpecParser.js.map +1 -0
  111. package/dist/packages/core/src/domain/SpecopsManifest.js +90 -0
  112. package/dist/packages/core/src/domain/SpecopsManifest.js.map +1 -0
  113. package/dist/packages/core/src/domain/TraceabilityFormat.js +317 -0
  114. package/dist/packages/core/src/domain/TraceabilityFormat.js.map +1 -0
  115. package/dist/packages/core/src/domain/TraceabilityMatrix.js +200 -0
  116. package/dist/packages/core/src/domain/TraceabilityMatrix.js.map +1 -0
  117. package/dist/packages/core/src/domain/TraceabilityMerge.js +180 -0
  118. package/dist/packages/core/src/domain/TraceabilityMerge.js.map +1 -0
  119. package/dist/packages/core/src/domain/ValidationReport.js +53 -0
  120. package/dist/packages/core/src/domain/ValidationReport.js.map +1 -0
  121. package/dist/packages/core/src/domain/ValueAnnotations.js +138 -0
  122. package/dist/packages/core/src/domain/ValueAnnotations.js.map +1 -0
  123. package/dist/packages/core/src/domain/WriteScope.js +155 -0
  124. package/dist/packages/core/src/domain/WriteScope.js.map +1 -0
  125. package/dist/packages/core/src/domain/YamlLite.js +226 -0
  126. package/dist/packages/core/src/domain/YamlLite.js.map +1 -0
  127. package/dist/packages/core/src/index.js +120 -0
  128. package/dist/packages/core/src/index.js.map +1 -0
  129. package/dist/packages/core/src/infrastructure/ChangeWorkspace.js +276 -0
  130. package/dist/packages/core/src/infrastructure/ChangeWorkspace.js.map +1 -0
  131. package/dist/packages/core/src/infrastructure/ConsoleReporter.js +19 -0
  132. package/dist/packages/core/src/infrastructure/ConsoleReporter.js.map +1 -0
  133. package/dist/packages/core/src/infrastructure/DirectorySnapshot.js +106 -0
  134. package/dist/packages/core/src/infrastructure/DirectorySnapshot.js.map +1 -0
  135. package/dist/packages/core/src/infrastructure/DiskDomainPackRepository.js +57 -0
  136. package/dist/packages/core/src/infrastructure/DiskDomainPackRepository.js.map +1 -0
  137. package/dist/packages/core/src/infrastructure/DiskHarnessConfigRepository.js +58 -0
  138. package/dist/packages/core/src/infrastructure/DiskHarnessConfigRepository.js.map +1 -0
  139. package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js +69 -0
  140. package/dist/packages/core/src/infrastructure/DiskLanguageRepository.js.map +1 -0
  141. package/dist/packages/core/src/infrastructure/DiskLockfileRepository.js +64 -0
  142. package/dist/packages/core/src/infrastructure/DiskLockfileRepository.js.map +1 -0
  143. package/dist/packages/core/src/infrastructure/DiskManifestRepository.js +88 -0
  144. package/dist/packages/core/src/infrastructure/DiskManifestRepository.js.map +1 -0
  145. package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js +138 -0
  146. package/dist/packages/core/src/infrastructure/DiskPackDeltaRepository.js.map +1 -0
  147. package/dist/packages/core/src/infrastructure/DiskPackRepository.js +130 -0
  148. package/dist/packages/core/src/infrastructure/DiskPackRepository.js.map +1 -0
  149. package/dist/packages/core/src/infrastructure/DiskProjectRepository.js +127 -0
  150. package/dist/packages/core/src/infrastructure/DiskProjectRepository.js.map +1 -0
  151. package/dist/packages/core/src/infrastructure/DiskRequirementGraphRepository.js +124 -0
  152. package/dist/packages/core/src/infrastructure/DiskRequirementGraphRepository.js.map +1 -0
  153. package/dist/packages/core/src/infrastructure/DiskTraceabilityRepository.js +53 -0
  154. package/dist/packages/core/src/infrastructure/DiskTraceabilityRepository.js.map +1 -0
  155. package/dist/packages/core/src/infrastructure/GitContributionStager.js +99 -0
  156. package/dist/packages/core/src/infrastructure/GitContributionStager.js.map +1 -0
  157. package/dist/packages/core/src/infrastructure/GitMergeDriver.js +103 -0
  158. package/dist/packages/core/src/infrastructure/GitMergeDriver.js.map +1 -0
  159. package/dist/packages/core/src/infrastructure/HarnessConfigFile.js +348 -0
  160. package/dist/packages/core/src/infrastructure/HarnessConfigFile.js.map +1 -0
  161. package/dist/packages/core/src/infrastructure/PackChangeDeposit.js +106 -0
  162. package/dist/packages/core/src/infrastructure/PackChangeDeposit.js.map +1 -0
  163. package/dist/packages/core/src/infrastructure/RemotePackResolver.js +181 -0
  164. package/dist/packages/core/src/infrastructure/RemotePackResolver.js.map +1 -0
  165. package/dist/packages/core/src/infrastructure/SpecopsConfigFile.js +94 -0
  166. package/dist/packages/core/src/infrastructure/SpecopsConfigFile.js.map +1 -0
  167. package/dist/packages/core/test/unit/authoring-scope.test.js +102 -0
  168. package/dist/packages/core/test/unit/authoring-scope.test.js.map +1 -0
  169. package/dist/packages/core/test/unit/change-templates.test.js +96 -0
  170. package/dist/packages/core/test/unit/change-templates.test.js.map +1 -0
  171. package/dist/packages/core/test/unit/cucumber-messages.test.js +232 -0
  172. package/dist/packages/core/test/unit/cucumber-messages.test.js.map +1 -0
  173. package/dist/packages/core/test/unit/declared-artifacts.test.js +124 -0
  174. package/dist/packages/core/test/unit/declared-artifacts.test.js.map +1 -0
  175. package/dist/packages/core/test/unit/empty-attempt.test.js +79 -0
  176. package/dist/packages/core/test/unit/empty-attempt.test.js.map +1 -0
  177. package/dist/packages/core/test/unit/gherkin-dialects.test.js +115 -0
  178. package/dist/packages/core/test/unit/gherkin-dialects.test.js.map +1 -0
  179. package/dist/packages/core/test/unit/gherkin-keyword-case.test.js +110 -0
  180. package/dist/packages/core/test/unit/gherkin-keyword-case.test.js.map +1 -0
  181. package/dist/packages/core/test/unit/gherkin-quality.test.js +151 -0
  182. package/dist/packages/core/test/unit/gherkin-quality.test.js.map +1 -0
  183. package/dist/packages/core/test/unit/gherkin-tags.test.js +127 -0
  184. package/dist/packages/core/test/unit/gherkin-tags.test.js.map +1 -0
  185. package/dist/packages/core/test/unit/git-safety.test.js +104 -0
  186. package/dist/packages/core/test/unit/git-safety.test.js.map +1 -0
  187. package/dist/packages/core/test/unit/harness-report.test.js +192 -0
  188. package/dist/packages/core/test/unit/harness-report.test.js.map +1 -0
  189. package/dist/packages/core/test/unit/harness-roles.test.js +86 -0
  190. package/dist/packages/core/test/unit/harness-roles.test.js.map +1 -0
  191. package/dist/packages/core/test/unit/inbound-change.test.js +145 -0
  192. package/dist/packages/core/test/unit/inbound-change.test.js.map +1 -0
  193. package/dist/packages/core/test/unit/matrix-dependencies.test.js +100 -0
  194. package/dist/packages/core/test/unit/matrix-dependencies.test.js.map +1 -0
  195. package/dist/packages/core/test/unit/profile-match.test.js +115 -0
  196. package/dist/packages/core/test/unit/profile-match.test.js.map +1 -0
  197. package/dist/packages/core/test/unit/reconciliation.test.js +112 -0
  198. package/dist/packages/core/test/unit/reconciliation.test.js.map +1 -0
  199. package/dist/packages/core/test/unit/requirement-readiness.test.js +161 -0
  200. package/dist/packages/core/test/unit/requirement-readiness.test.js.map +1 -0
  201. package/dist/packages/core/test/unit/resume-state.test.js +124 -0
  202. package/dist/packages/core/test/unit/resume-state.test.js.map +1 -0
  203. package/dist/packages/core/test/unit/run-budget.test.js +113 -0
  204. package/dist/packages/core/test/unit/run-budget.test.js.map +1 -0
  205. package/dist/packages/core/test/unit/traceability-merge.test.js +159 -0
  206. package/dist/packages/core/test/unit/traceability-merge.test.js.map +1 -0
  207. package/dist/packages/core/test/unit/validate-project.test.js +156 -0
  208. package/dist/packages/core/test/unit/validate-project.test.js.map +1 -0
  209. package/dist/packages/core/test/unit/value-annotations.test.js +149 -0
  210. package/dist/packages/core/test/unit/value-annotations.test.js.map +1 -0
  211. package/dist/packages/core/test/unit/write-scope.test.js +165 -0
  212. package/dist/packages/core/test/unit/write-scope.test.js.map +1 -0
  213. package/dist/packages/core/test/unit/yaml-lite.test.js +78 -0
  214. package/dist/packages/core/test/unit/yaml-lite.test.js.map +1 -0
  215. package/dist/scripts/adopt_project.js +11 -0
  216. package/dist/scripts/adopt_project.js.map +1 -0
  217. package/dist/scripts/agents/commands.js +100 -0
  218. package/dist/scripts/agents/commands.js.map +1 -0
  219. package/dist/scripts/agents/init.js +482 -0
  220. package/dist/scripts/agents/init.js.map +1 -0
  221. package/dist/scripts/alm/cli.js +154 -0
  222. package/dist/scripts/alm/cli.js.map +1 -0
  223. package/dist/scripts/alm/clients.js +30 -0
  224. package/dist/scripts/alm/clients.js.map +1 -0
  225. package/dist/scripts/alm/core.js +258 -0
  226. package/dist/scripts/alm/core.js.map +1 -0
  227. package/dist/scripts/alm/port.js +116 -0
  228. package/dist/scripts/alm/port.js.map +1 -0
  229. package/dist/scripts/alm/providers/azure.js +79 -0
  230. package/dist/scripts/alm/providers/azure.js.map +1 -0
  231. package/dist/scripts/alm/providers/github.js +124 -0
  232. package/dist/scripts/alm/providers/github.js.map +1 -0
  233. package/dist/scripts/alm/providers/http-client.js +47 -0
  234. package/dist/scripts/alm/providers/http-client.js.map +1 -0
  235. package/dist/scripts/alm/providers/index.js +107 -0
  236. package/dist/scripts/alm/providers/index.js.map +1 -0
  237. package/dist/scripts/alm/providers/jira.js +129 -0
  238. package/dist/scripts/alm/providers/jira.js.map +1 -0
  239. package/dist/scripts/bundle_pack.js +10 -0
  240. package/dist/scripts/bundle_pack.js.map +1 -0
  241. package/dist/scripts/change/archive.js +68 -0
  242. package/dist/scripts/change/archive.js.map +1 -0
  243. package/dist/scripts/change/artifacts.js +143 -0
  244. package/dist/scripts/change/artifacts.js.map +1 -0
  245. package/dist/scripts/change/cli.js +39 -0
  246. package/dist/scripts/change/cli.js.map +1 -0
  247. package/dist/scripts/change/delta.js +20 -0
  248. package/dist/scripts/change/delta.js.map +1 -0
  249. package/dist/scripts/change/instructions.js +339 -0
  250. package/dist/scripts/change/instructions.js.map +1 -0
  251. package/dist/scripts/ci_init.js +12 -0
  252. package/dist/scripts/ci_init.js.map +1 -0
  253. package/dist/scripts/cli/commands/alm/PullCommand.js +238 -0
  254. package/dist/scripts/cli/commands/alm/PullCommand.js.map +1 -0
  255. package/dist/scripts/cli/commands/change/ChangeCommand.js +867 -0
  256. package/dist/scripts/cli/commands/change/ChangeCommand.js.map +1 -0
  257. package/dist/scripts/cli/commands/config/CiInitCommand.js +144 -0
  258. package/dist/scripts/cli/commands/config/CiInitCommand.js.map +1 -0
  259. package/dist/scripts/cli/commands/config/CompletionCommand.js +160 -0
  260. package/dist/scripts/cli/commands/config/CompletionCommand.js.map +1 -0
  261. package/dist/scripts/cli/commands/config/ConfigInitCommand.js +108 -0
  262. package/dist/scripts/cli/commands/config/ConfigInitCommand.js.map +1 -0
  263. package/dist/scripts/cli/commands/config/ConfigSetCommand.js +166 -0
  264. package/dist/scripts/cli/commands/config/ConfigSetCommand.js.map +1 -0
  265. package/dist/scripts/cli/commands/config/GenAgentContractCommand.js +212 -0
  266. package/dist/scripts/cli/commands/config/GenAgentContractCommand.js.map +1 -0
  267. package/dist/scripts/cli/commands/harness/RunCommand.js +1922 -0
  268. package/dist/scripts/cli/commands/harness/RunCommand.js.map +1 -0
  269. package/dist/scripts/cli/commands/mcp/McpInstallCommand.js +114 -0
  270. package/dist/scripts/cli/commands/mcp/McpInstallCommand.js.map +1 -0
  271. package/dist/scripts/cli/commands/mcp/index.js +29 -0
  272. package/dist/scripts/cli/commands/mcp/index.js.map +1 -0
  273. package/dist/scripts/cli/commands/pack/BundlePackCommand.js +59 -0
  274. package/dist/scripts/cli/commands/pack/BundlePackCommand.js.map +1 -0
  275. package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js +559 -0
  276. package/dist/scripts/cli/commands/pack/ExpandDomainPackCommand.js.map +1 -0
  277. package/dist/scripts/cli/commands/pack/InferPackCommand.js +304 -0
  278. package/dist/scripts/cli/commands/pack/InferPackCommand.js.map +1 -0
  279. package/dist/scripts/cli/commands/pack/InitPackCommand.js +368 -0
  280. package/dist/scripts/cli/commands/pack/InitPackCommand.js.map +1 -0
  281. package/dist/scripts/cli/commands/pack/LintPackCommand.js +631 -0
  282. package/dist/scripts/cli/commands/pack/LintPackCommand.js.map +1 -0
  283. package/dist/scripts/cli/commands/pack/pack-args.js +83 -0
  284. package/dist/scripts/cli/commands/pack/pack-args.js.map +1 -0
  285. package/dist/scripts/cli/commands/project/AdoptCommand.js +414 -0
  286. package/dist/scripts/cli/commands/project/AdoptCommand.js.map +1 -0
  287. package/dist/scripts/cli/commands/project/InitFromPackCommand.js +188 -0
  288. package/dist/scripts/cli/commands/project/InitFromPackCommand.js.map +1 -0
  289. package/dist/scripts/cli/commands/project/InitProjectCommand.js +791 -0
  290. package/dist/scripts/cli/commands/project/InitProjectCommand.js.map +1 -0
  291. package/dist/scripts/cli/commands/project/OnboardCommand.js +655 -0
  292. package/dist/scripts/cli/commands/project/OnboardCommand.js.map +1 -0
  293. package/dist/scripts/cli/commands/project/UpdateCommand.js +206 -0
  294. package/dist/scripts/cli/commands/project/UpdateCommand.js.map +1 -0
  295. package/dist/scripts/cli/commands/project/WizardCommand.js +166 -0
  296. package/dist/scripts/cli/commands/project/WizardCommand.js.map +1 -0
  297. package/dist/scripts/cli/commands/quality/DoctorCommand.js +553 -0
  298. package/dist/scripts/cli/commands/quality/DoctorCommand.js.map +1 -0
  299. package/dist/scripts/cli/commands/quality/FixCommand.js +201 -0
  300. package/dist/scripts/cli/commands/quality/FixCommand.js.map +1 -0
  301. package/dist/scripts/cli/commands/quality/LicenseCheckCommand.js +187 -0
  302. package/dist/scripts/cli/commands/quality/LicenseCheckCommand.js.map +1 -0
  303. package/dist/scripts/cli/commands/quality/ReportCommand.js +557 -0
  304. package/dist/scripts/cli/commands/quality/ReportCommand.js.map +1 -0
  305. package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js +764 -0
  306. package/dist/scripts/cli/commands/quality/ValidateSpecsCommand.js.map +1 -0
  307. package/dist/scripts/cli/commands/spec/DoneCommand.js +116 -0
  308. package/dist/scripts/cli/commands/spec/DoneCommand.js.map +1 -0
  309. package/dist/scripts/cli/commands/spec/PlanCommand.js +397 -0
  310. package/dist/scripts/cli/commands/spec/PlanCommand.js.map +1 -0
  311. package/dist/scripts/cli/commands/spec/ReqCommand.js +303 -0
  312. package/dist/scripts/cli/commands/spec/ReqCommand.js.map +1 -0
  313. package/dist/scripts/cli/commands/spec/StatusCommand.js +206 -0
  314. package/dist/scripts/cli/commands/spec/StatusCommand.js.map +1 -0
  315. package/dist/scripts/cli/commands/spec/StudioCommand.js +241 -0
  316. package/dist/scripts/cli/commands/spec/StudioCommand.js.map +1 -0
  317. package/dist/scripts/cli/commands/specops/ContributeCommand.js +313 -0
  318. package/dist/scripts/cli/commands/specops/ContributeCommand.js.map +1 -0
  319. package/dist/scripts/cli/commands/specops/DiffCommand.js +394 -0
  320. package/dist/scripts/cli/commands/specops/DiffCommand.js.map +1 -0
  321. package/dist/scripts/cli/commands/specops/SyncCommand.js +380 -0
  322. package/dist/scripts/cli/commands/specops/SyncCommand.js.map +1 -0
  323. package/dist/scripts/completion.js +24 -0
  324. package/dist/scripts/completion.js.map +1 -0
  325. package/dist/scripts/config_init.js +12 -0
  326. package/dist/scripts/config_init.js.map +1 -0
  327. package/dist/scripts/config_set.js +20 -0
  328. package/dist/scripts/config_set.js.map +1 -0
  329. package/dist/scripts/docs/blocks.js +137 -0
  330. package/dist/scripts/docs/blocks.js.map +1 -0
  331. package/dist/scripts/docs/build-site.js +425 -0
  332. package/dist/scripts/docs/build-site.js.map +1 -0
  333. package/dist/scripts/docs/nav.js +198 -0
  334. package/dist/scripts/docs/nav.js.map +1 -0
  335. package/dist/scripts/docs/record-terminal.js +477 -0
  336. package/dist/scripts/docs/record-terminal.js.map +1 -0
  337. package/dist/scripts/docs/terminal-storyboard.js +121 -0
  338. package/dist/scripts/docs/terminal-storyboard.js.map +1 -0
  339. package/dist/scripts/doctor.js +14 -0
  340. package/dist/scripts/doctor.js.map +1 -0
  341. package/dist/scripts/done.js +17 -0
  342. package/dist/scripts/done.js.map +1 -0
  343. package/dist/scripts/expand_domain_pack.js +18 -0
  344. package/dist/scripts/expand_domain_pack.js.map +1 -0
  345. package/dist/scripts/fix.js +12 -0
  346. package/dist/scripts/fix.js.map +1 -0
  347. package/dist/scripts/gen_agent_contract.js +14 -0
  348. package/dist/scripts/gen_agent_contract.js.map +1 -0
  349. package/dist/scripts/gen_mcp_tools.js +264 -0
  350. package/dist/scripts/gen_mcp_tools.js.map +1 -0
  351. package/dist/scripts/harness/init.js +358 -0
  352. package/dist/scripts/harness/init.js.map +1 -0
  353. package/dist/scripts/harness/prompt.js +18 -0
  354. package/dist/scripts/harness/prompt.js.map +1 -0
  355. package/dist/scripts/harness/report.js +323 -0
  356. package/dist/scripts/harness/report.js.map +1 -0
  357. package/dist/scripts/harness/run.js +33 -0
  358. package/dist/scripts/harness/run.js.map +1 -0
  359. package/dist/scripts/infer_pack.js +17 -0
  360. package/dist/scripts/infer_pack.js.map +1 -0
  361. package/dist/scripts/init_from_pack.js +16 -0
  362. package/dist/scripts/init_from_pack.js.map +1 -0
  363. package/dist/scripts/init_pack.js +16 -0
  364. package/dist/scripts/init_pack.js.map +1 -0
  365. package/dist/scripts/init_project.js +17 -0
  366. package/dist/scripts/init_project.js.map +1 -0
  367. package/dist/scripts/lib/agent.js +99 -0
  368. package/dist/scripts/lib/agent.js.map +1 -0
  369. package/dist/scripts/lib/capability-specs.js +80 -0
  370. package/dist/scripts/lib/capability-specs.js.map +1 -0
  371. package/dist/scripts/lib/command.js +17 -0
  372. package/dist/scripts/lib/command.js.map +1 -0
  373. package/dist/scripts/lib/diagnostics.js +62 -0
  374. package/dist/scripts/lib/diagnostics.js.map +1 -0
  375. package/dist/scripts/lib/monorepo-fanout.js +118 -0
  376. package/dist/scripts/lib/monorepo-fanout.js.map +1 -0
  377. package/dist/scripts/lib/placeholders.js +190 -0
  378. package/dist/scripts/lib/placeholders.js.map +1 -0
  379. package/dist/scripts/lib/project-root.js +124 -0
  380. package/dist/scripts/lib/project-root.js.map +1 -0
  381. package/dist/scripts/lib/requirement-graph.js +31 -0
  382. package/dist/scripts/lib/requirement-graph.js.map +1 -0
  383. package/dist/scripts/lib/surface.js +609 -0
  384. package/dist/scripts/lib/surface.js.map +1 -0
  385. package/dist/scripts/license_check.js +15 -0
  386. package/dist/scripts/license_check.js.map +1 -0
  387. package/dist/scripts/lint_pack.js +18 -0
  388. package/dist/scripts/lint_pack.js.map +1 -0
  389. package/dist/scripts/merge-traceability.js +106 -0
  390. package/dist/scripts/merge-traceability.js.map +1 -0
  391. package/dist/scripts/onboard.js +22 -0
  392. package/dist/scripts/onboard.js.map +1 -0
  393. package/dist/scripts/plan.js +17 -0
  394. package/dist/scripts/plan.js.map +1 -0
  395. package/dist/scripts/plugin/gate-hook.js +171 -0
  396. package/dist/scripts/plugin/gate-hook.js.map +1 -0
  397. package/dist/scripts/report.js +17 -0
  398. package/dist/scripts/report.js.map +1 -0
  399. package/dist/scripts/req.js +22 -0
  400. package/dist/scripts/req.js.map +1 -0
  401. package/dist/scripts/schema/cli.js +215 -0
  402. package/dist/scripts/schema/cli.js.map +1 -0
  403. package/dist/scripts/schema/registry.js +264 -0
  404. package/dist/scripts/schema/registry.js.map +1 -0
  405. package/dist/scripts/specops/add.js +180 -0
  406. package/dist/scripts/specops/add.js.map +1 -0
  407. package/dist/scripts/specops/against_lock.js +100 -0
  408. package/dist/scripts/specops/against_lock.js.map +1 -0
  409. package/dist/scripts/specops/as_change.js +49 -0
  410. package/dist/scripts/specops/as_change.js.map +1 -0
  411. package/dist/scripts/specops/contribute.js +24 -0
  412. package/dist/scripts/specops/contribute.js.map +1 -0
  413. package/dist/scripts/specops/diff.js +32 -0
  414. package/dist/scripts/specops/diff.js.map +1 -0
  415. package/dist/scripts/specops/lock.js +39 -0
  416. package/dist/scripts/specops/lock.js.map +1 -0
  417. package/dist/scripts/specops/manifest.js +90 -0
  418. package/dist/scripts/specops/manifest.js.map +1 -0
  419. package/dist/scripts/specops/remove.js +102 -0
  420. package/dist/scripts/specops/remove.js.map +1 -0
  421. package/dist/scripts/specops/sync.js +27 -0
  422. package/dist/scripts/specops/sync.js.map +1 -0
  423. package/dist/scripts/specops/verify.js +149 -0
  424. package/dist/scripts/specops/verify.js.map +1 -0
  425. package/dist/scripts/status.js +17 -0
  426. package/dist/scripts/status.js.map +1 -0
  427. package/dist/scripts/studio.js +14 -0
  428. package/dist/scripts/studio.js.map +1 -0
  429. package/dist/scripts/update.js +17 -0
  430. package/dist/scripts/update.js.map +1 -0
  431. package/dist/scripts/validate_specs.js +10 -0
  432. package/dist/scripts/validate_specs.js.map +1 -0
  433. package/examples/project.config.example +19 -0
  434. package/examples/project.yaml.example +17 -0
  435. package/package.json +105 -0
  436. package/templates/adopt/AI_RULES.md.tpl +27 -0
  437. package/templates/adopt/adr-readme.md.tpl +5 -0
  438. package/templates/adopt/baseline.feature.tpl +9 -0
  439. package/templates/adopt/spec.md.tpl +25 -0
  440. package/templates/adopt/traceability.md.tpl +11 -0
  441. package/templates/backend/AI_RULES.md.tpl +35 -0
  442. package/templates/backend/features/core/health.feature.tpl +7 -0
  443. package/templates/base/.devcontainer/devcontainer.json.tpl +18 -0
  444. package/templates/base/.dockerignore.tpl +11 -0
  445. package/templates/base/.env.dev.app.tpl +13 -0
  446. package/templates/base/.env.dev.infra.tpl +6 -0
  447. package/templates/base/.env.dev.tpl +16 -0
  448. package/templates/base/.env.example.tpl +17 -0
  449. package/templates/base/.env.feature.app.tpl +11 -0
  450. package/templates/base/.env.feature.infra.tpl +4 -0
  451. package/templates/base/.env.feature.tpl +16 -0
  452. package/templates/base/.env.prod.app.tpl +13 -0
  453. package/templates/base/.env.prod.infra.tpl +6 -0
  454. package/templates/base/.env.prod.tpl +16 -0
  455. package/templates/base/.github/workflows/specs.yml.tpl +26 -0
  456. package/templates/base/.gitignore.tpl +9 -0
  457. package/templates/base/.pre-commit-config.yaml.tpl +10 -0
  458. package/templates/base/AGENTS.md.tpl +32 -0
  459. package/templates/base/README.md.tpl +32 -0
  460. package/templates/base/docker-compose.yml.tpl +13 -0
  461. package/templates/base/docs/specs/adr/README.md.tpl +10 -0
  462. package/templates/base/docs/specs/aggregates.md.tpl +5 -0
  463. package/templates/base/docs/specs/commands.md.tpl +13 -0
  464. package/templates/base/docs/specs/domain-model.md.tpl +30 -0
  465. package/templates/base/docs/specs/events.md.tpl +5 -0
  466. package/templates/base/docs/specs/review-checklist.md.tpl +18 -0
  467. package/templates/base/docs/specs/runtime-environments.md.tpl +26 -0
  468. package/templates/base/docs/specs/status-model.md.tpl +16 -0
  469. package/templates/base/docs/specs/traceability.md.tpl +7 -0
  470. package/templates/base/docs/specs/use-cases.md.tpl +5 -0
  471. package/templates/base/spec.md.tpl +63 -0
  472. package/templates/ci/azure.yml.tpl +40 -0
  473. package/templates/ci/github.yml.tpl +40 -0
  474. package/templates/ci/gitlab.yml.tpl +21 -0
  475. package/templates/ci/jenkins.tpl +35 -0
  476. package/templates/contracts/AI_RULES.md.tpl +55 -0
  477. package/templates/contracts/asyncapi-stub.yaml.tpl +24 -0
  478. package/templates/contracts/contract-traceability.md.tpl +10 -0
  479. package/templates/contracts/openapi-stub.yaml.tpl +29 -0
  480. package/templates/contracts/pacts-gitkeep.tpl +0 -0
  481. package/templates/contracts/test-strategy.md.tpl +94 -0
  482. package/templates/frontend/AI_RULES.md.tpl +34 -0
  483. package/templates/frontend/features/core/health.feature.tpl +6 -0
  484. package/templates/harness/harness.config.yaml.tpl +74 -0
  485. package/templates/harness/prompt-prefix.md.tpl +60 -0
  486. package/templates/mobile/AI_RULES.md.tpl +56 -0
  487. package/templates/mobile/features/core/health.feature.tpl +7 -0
  488. package/templates/modules/auth/backend/registration_and_login.feature.tpl +10 -0
  489. package/templates/modules/auth/frontend/login.feature.tpl +5 -0
  490. package/templates/modules/billing/backend/billing_settlement.feature.tpl +5 -0
  491. package/templates/modules/billing/frontend/billing_summary.feature.tpl +5 -0
  492. package/templates/modules/dashboard/backend/dashboard_kpi.feature.tpl +5 -0
  493. package/templates/modules/dashboard/frontend/dashboard.feature.tpl +5 -0
  494. package/vendor/mermaid.min.js +3636 -0
@@ -0,0 +1,154 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * `alm` — keep the traceability matrix and the enterprise ALM
5
+ * (Jira / Azure Boards) in sync.
6
+ *
7
+ * Usage:
8
+ * specgate alm sync [--project-dir <dir>] [--dry-run]
9
+ * specgate alm pull [--label <name>] [--project-dir <dir>] [--dry-run]
10
+ * specgate alm link <REQ-id> <issue-key> [--project-dir <dir>]
11
+ * specgate alm status [--project-dir <dir>]
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ const project_root_1 = require("../lib/project-root");
15
+ const core_1 = require("./core");
16
+ const clients_1 = require("./clients");
17
+ const diagnostics_1 = require("../lib/diagnostics");
18
+ const PullCommand_1 = require("../cli/commands/alm/PullCommand");
19
+ function logInfo(msg) {
20
+ process.stdout.write(`ℹ️ [INFO] ${msg}\n`);
21
+ }
22
+ function logWarn(msg) {
23
+ process.stdout.write(`⚠️ [WARN] ${msg}\n`);
24
+ }
25
+ function logError(msg) {
26
+ process.stderr.write(`❌ [ERROR] ${msg}\n`);
27
+ }
28
+ function usage() {
29
+ process.stdout.write("Usage:\n" +
30
+ " specgate alm sync [--project-dir <dir>] [--dry-run]\n" +
31
+ " specgate alm link <REQ-id> <issue-key> [--project-dir <dir>]\n" +
32
+ " specgate alm status [--project-dir <dir>]\n" +
33
+ " specgate alm pull [--label <name>] [--project-dir <dir>] [--dry-run]\n\n" +
34
+ "sync Creates an ALM issue for every unlinked REQ, closes issues whose REQ\n" +
35
+ " is Implemented, and reports drift (issue done, REQ still open).\n" +
36
+ "link Manually map an existing issue to a requirement.\n" +
37
+ "status Print the current REQ ↔ issue mapping without network access.\n" +
38
+ "pull Open a change per labelled issue. The scenario is left unwritten:\n" +
39
+ " a ticket carries no acceptance criterion, so that part is yours.\n\n" +
40
+ "Configuration: alm.config.yaml at the project root (provider, base_url,\n" +
41
+ "project_key, token_env). Tokens come from the environment, never the file.\n");
42
+ }
43
+ function parseCommon(argv) {
44
+ const opts = { projectDir: ".", dryRun: false, rest: [] };
45
+ for (let i = 0; i < argv.length; i++) {
46
+ if (argv[i] === "--project-dir" && argv[i + 1])
47
+ opts.projectDir = argv[++i];
48
+ else if (argv[i] === "--dry-run")
49
+ opts.dryRun = true;
50
+ else if (argv[i] === "--help" || argv[i] === "-h") {
51
+ usage();
52
+ process.exit(0);
53
+ }
54
+ else
55
+ opts.rest.push(argv[i]);
56
+ }
57
+ return opts;
58
+ }
59
+ async function main() {
60
+ let argv = process.argv.slice(2);
61
+ if (argv[0] === "alm")
62
+ argv = argv.slice(1);
63
+ const sub = argv[0];
64
+ const opts = parseCommon(argv.slice(1));
65
+ let projectDir;
66
+ try {
67
+ projectDir = (0, project_root_1.resolveProjectDir)(opts.projectDir, { requireSentinel: true });
68
+ }
69
+ catch (err) {
70
+ logError(err.message);
71
+ process.exit(2);
72
+ }
73
+ if (sub === "status") {
74
+ const map = (0, core_1.readAlmMap)(projectDir);
75
+ const reqs = (0, core_1.extractRequirements)(projectDir);
76
+ for (const req of reqs) {
77
+ const linked = map[req.id];
78
+ process.stdout.write(`${req.id} [${req.status}] → ${linked ? linked.issue : "(unlinked)"}\n`);
79
+ }
80
+ process.exit(0);
81
+ }
82
+ if (sub === "link") {
83
+ const [reqId, issueKey] = opts.rest;
84
+ if (!reqId || !issueKey) {
85
+ logError("alm link expects: <REQ-id> <issue-key>");
86
+ usage();
87
+ process.exit(2);
88
+ }
89
+ if (!/^REQ-\d+$/.test(reqId)) {
90
+ logError(`'${reqId}' is not a REQ id (expected REQ-NNN).`);
91
+ process.exit(2);
92
+ }
93
+ const map = (0, core_1.readAlmMap)(projectDir);
94
+ map[reqId] = { issue: issueKey, url: null };
95
+ const written = (0, core_1.writeAlmMap)(projectDir, map, false);
96
+ logInfo(`Linked ${reqId} → ${issueKey} (${written}). Commit the mapping file.`);
97
+ process.exit(0);
98
+ }
99
+ if (sub === "sync") {
100
+ try {
101
+ const cfg = (0, core_1.readAlmConfig)(projectDir);
102
+ // Keys nothing reads are reported before the first request, not after a
103
+ // sync that quietly ignored half the file.
104
+ const configFindings = (0, core_1.lintAlmConfig)(cfg, projectDir);
105
+ if (configFindings.length > 0)
106
+ (0, diagnostics_1.printDiagnostics)(configFindings, process.stdout);
107
+ const client = (0, clients_1.makeClient)(cfg, undefined, projectDir);
108
+ const map = (0, core_1.readAlmMap)(projectDir);
109
+ const reqs = (0, core_1.extractRequirements)(projectDir);
110
+ const actions = await (0, core_1.syncRequirements)(reqs, map, client, { dryRun: opts.dryRun });
111
+ let drift = 0;
112
+ for (const a of actions) {
113
+ if (a.action === "drift") {
114
+ drift++;
115
+ logWarn(`DRIFT ${a.req}: ${a.detail}`);
116
+ }
117
+ else if (a.action !== "in-sync") {
118
+ logInfo(`${a.action} ${a.req}${a.issue ? ` → ${a.issue}` : ""}`);
119
+ }
120
+ }
121
+ if (!opts.dryRun)
122
+ (0, core_1.writeAlmMap)(projectDir, map, false);
123
+ const summary = actions.reduce((acc, a) => {
124
+ acc[a.action] = (acc[a.action] || 0) + 1;
125
+ return acc;
126
+ }, {});
127
+ logInfo(`Summary: ${JSON.stringify(summary)}`);
128
+ if (drift > 0) {
129
+ logWarn(`${drift} drift finding(s) — reconcile the matrix or the board.`);
130
+ process.exit(1);
131
+ }
132
+ process.exit(0);
133
+ }
134
+ catch (err) {
135
+ logError(err.message);
136
+ process.exit(1);
137
+ }
138
+ }
139
+ if (sub === "pull") {
140
+ // Implemented outside `scripts/alm/` on purpose: ADR-0021 forbids this
141
+ // subsystem from writing the spec tree, and a pull has to produce files.
142
+ // The ALM half reads the board; the change lifecycle writes the proposal.
143
+ await (0, PullCommand_1.main)(argv.slice(1));
144
+ return;
145
+ }
146
+ logError(`Unknown alm sub-command: ${sub || "(none)"}. Expected: sync, link, status, pull`);
147
+ usage();
148
+ process.exit(2);
149
+ }
150
+ main().catch((err) => {
151
+ logError(err && err.message ? err.message : String(err));
152
+ process.exit(1);
153
+ });
154
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../scripts/alm/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.githubClient = exports.azureClient = exports.jiraClient = void 0;
4
+ exports.makeClient = makeClient;
5
+ const providers_1 = require("./providers");
6
+ /**
7
+ * Client construction, resolved through the provider registry.
8
+ *
9
+ * This file used to *be* the two connectors, selected by a ternary on
10
+ * `cfg.provider`. The connectors now live in `providers/` behind the
11
+ * `AlmProvider` port (see `port.ts` for why), and what is left here is the
12
+ * lookup plus the names the rest of the tree already imports.
13
+ *
14
+ * A client carries its provider's capabilities, because the core has to know
15
+ * what an ALM cannot do — `syncRequirements` reports a requirement it cannot
16
+ * close rather than throwing — and the client is the only thing it holds.
17
+ */
18
+ function makeClient(cfg, fetchImpl, projectDir) {
19
+ return (0, providers_1.getProvider)(cfg.provider, projectDir).create(cfg, fetchImpl);
20
+ }
21
+ // The two provider-specific factories, kept under the names they have always
22
+ // had. Callers that want one connector directly — the tests do — should not
23
+ // have to know the registry exists.
24
+ const jiraClient = (cfg, fetchImpl) => (0, providers_1.getProvider)("jira").create(cfg, fetchImpl);
25
+ exports.jiraClient = jiraClient;
26
+ const azureClient = (cfg, fetchImpl) => (0, providers_1.getProvider)("azure").create(cfg, fetchImpl);
27
+ exports.azureClient = azureClient;
28
+ const githubClient = (cfg, fetchImpl) => (0, providers_1.getProvider)("github").create(cfg, fetchImpl);
29
+ exports.githubClient = githubClient;
30
+ //# sourceMappingURL=clients.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clients.js","sourceRoot":"","sources":["../../../scripts/alm/clients.ts"],"names":[],"mappings":";;;AAeA,gCAEC;AAjBD,2CAA0C;AAG1C;;;;;;;;;;;GAWG;AACH,SAAgB,UAAU,CAAC,GAAc,EAAE,SAAqB,EAAE,UAAmB;IACnF,OAAO,IAAA,uBAAW,EAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AACtE,CAAC;AAED,6EAA6E;AAC7E,4EAA4E;AAC5E,oCAAoC;AAC7B,MAAM,UAAU,GAAG,CAAC,GAAc,EAAE,SAAqB,EAAa,EAAE,CAC7E,IAAA,uBAAW,EAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AADhC,QAAA,UAAU,cACsB;AAEtC,MAAM,WAAW,GAAG,CAAC,GAAc,EAAE,SAAqB,EAAa,EAAE,CAC9E,IAAA,uBAAW,EAAC,OAAO,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AADjC,QAAA,WAAW,eACsB;AAEvC,MAAM,YAAY,GAAG,CAAC,GAAc,EAAE,SAAqB,EAAa,EAAE,CAC/E,IAAA,uBAAW,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;AADlC,QAAA,YAAY,gBACsB"}
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+ /**
3
+ * ALM (Jira / Azure Boards) synchronisation core — provider-agnostic.
4
+ *
5
+ * Enterprise requirements live in the ALM, not in markdown; without a link
6
+ * the traceability matrix and the board drift apart (friction F7). This
7
+ * module keeps them honest:
8
+ *
9
+ * - every REQ in the traceability matrix maps to exactly one ALM issue
10
+ * (mapping persisted in .specops/alm-map.json, committed);
11
+ * - REQs without an issue get one created;
12
+ * - a REQ reaching Implemented/Verified/Released transitions its issue
13
+ * to Done;
14
+ * - an issue closed while its REQ is still open is reported as DRIFT.
15
+ *
16
+ * All network access goes through an injected `client` so the logic is
17
+ * fully testable offline: { createIssue, getIssueStatus, closeIssue }.
18
+ */
19
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
26
+ }) : (function(o, m, k, k2) {
27
+ if (k2 === undefined) k2 = k;
28
+ o[k2] = m[k];
29
+ }));
30
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
31
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
32
+ }) : function(o, v) {
33
+ o["default"] = v;
34
+ });
35
+ var __importStar = (this && this.__importStar) || (function () {
36
+ var ownKeys = function(o) {
37
+ ownKeys = Object.getOwnPropertyNames || function (o) {
38
+ var ar = [];
39
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
40
+ return ar;
41
+ };
42
+ return ownKeys(o);
43
+ };
44
+ return function (mod) {
45
+ if (mod && mod.__esModule) return mod;
46
+ var result = {};
47
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
48
+ __setModuleDefault(result, mod);
49
+ return result;
50
+ };
51
+ })();
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.DONE_STATUSES = exports.CONFIG_FILENAME = exports.MAP_RELPATH = void 0;
54
+ exports.readAlmConfig = readAlmConfig;
55
+ exports.lintAlmConfig = lintAlmConfig;
56
+ exports.readAlmMap = readAlmMap;
57
+ exports.writeAlmMap = writeAlmMap;
58
+ exports.extractRequirements = extractRequirements;
59
+ exports.syncRequirements = syncRequirements;
60
+ const fs = __importStar(require("node:fs"));
61
+ const path = __importStar(require("node:path"));
62
+ const YamlLite_1 = require("../../packages/core/src/domain/YamlLite");
63
+ const diagnostics_1 = require("../lib/diagnostics");
64
+ const providers_1 = require("./providers");
65
+ const port_1 = require("./port");
66
+ exports.MAP_RELPATH = path.join(".specops", "alm-map.json");
67
+ exports.CONFIG_FILENAME = "alm.config.yaml";
68
+ /** Matrix statuses that mean "this requirement is delivered". */
69
+ exports.DONE_STATUSES = new Set(["Implemented", "Verified", "Released"]);
70
+ // ── Config ────────────────────────────────────────────────────────────────────
71
+ /**
72
+ * Read alm.config.yaml. Tokens are NEVER stored in the file — only the
73
+ * name of the environment variable that holds them.
74
+ */
75
+ function readAlmConfig(projectDir) {
76
+ const cfgPath = path.join(projectDir, exports.CONFIG_FILENAME);
77
+ if (!fs.existsSync(cfgPath)) {
78
+ // Built from the declarations rather than written out: a hand-kept example
79
+ // teaches whichever provider it was written for. It used to show
80
+ // `project_key`, which GitHub does not read at all — the same key its own
81
+ // linter now warns about.
82
+ const perProvider = providers_1.PROVIDERS.map((p) => ` # ${p.label}\n` +
83
+ ` provider: ${p.id}\n` +
84
+ [...p.config.required].map((k) => ` ${k}: …`).join("\n") +
85
+ (p.config.optional.length > 0 ? `\n # optional: ${[...p.config.optional].join(", ")}` : "")).join("\n\n");
86
+ throw new Error(`${exports.CONFIG_FILENAME} not found in ${projectDir}.\n` +
87
+ "Fix: create it with `alm_version: 1` and one of:\n\n" +
88
+ `${perProvider}\n\n` +
89
+ "Credentials are never in this file: `token_env` names the environment " +
90
+ "variable that holds the token.");
91
+ }
92
+ // The parser cannot know this document's shape; the port declares it, so the
93
+ // cast happens once, here, at the file boundary.
94
+ const cfg = ((0, YamlLite_1.parseYamlLite)(fs.readFileSync(cfgPath, "utf8")) || {});
95
+ if (!cfg.provider)
96
+ throw new Error(`${exports.CONFIG_FILENAME}: missing required key 'provider'.`);
97
+ // Which keys are required is the provider's business, not this function's.
98
+ // Asking every provider for the same four was how a Jira config with no
99
+ // `user_env` passed here and failed at network time instead.
100
+ const provider = (0, providers_1.getProvider)(cfg.provider, projectDir);
101
+ for (const key of provider.config.required) {
102
+ if (!cfg[key]) {
103
+ throw new Error(`${exports.CONFIG_FILENAME}: missing required key '${key}' for provider '${provider.id}'.\n` +
104
+ `Fix: add it. ${provider.label} requires: ${provider.config.required.join(", ")}.`);
105
+ }
106
+ }
107
+ return cfg;
108
+ }
109
+ /**
110
+ * Report the keys in a config that nothing will read.
111
+ *
112
+ * `harness.config.yaml` rejects an unknown key outright, on the grounds that a
113
+ * key nobody reads is worse than a missing one because the file looks
114
+ * configured. The same reasoning applies here, but this file predates the
115
+ * check and rejecting outright would break a working pipeline over a stray
116
+ * line — so it warns, and says which provider *would* have read the key. That
117
+ * second half is the useful part: `done_state` is real, and doing nothing on
118
+ * a Jira project is exactly the failure this reports.
119
+ *
120
+ * @returns {object[]} diagnostics, empty when every key is read
121
+ */
122
+ function lintAlmConfig(cfg, projectDir) {
123
+ const provider = (0, providers_1.getProvider)(cfg.provider, projectDir);
124
+ const read = new Set([
125
+ ...port_1.CORE_CONFIG_KEYS,
126
+ ...provider.config.required,
127
+ ...provider.config.optional,
128
+ ]);
129
+ const diagnostics = [];
130
+ for (const key of Object.keys(cfg)) {
131
+ if (read.has(key))
132
+ continue;
133
+ const alsoIn = providers_1.PROVIDERS.filter((p) => p.id !== provider.id && [...p.config.required, ...p.config.optional].includes(key)).map((p) => p.id);
134
+ diagnostics.push((0, diagnostics_1.warning)("alm_config_unread_key", alsoIn.length > 0
135
+ ? `'${key}' is read by ${alsoIn.join(", ")}, not by ${provider.id} — it does nothing here.`
136
+ : `'${key}' is read by no ALM provider.`, {
137
+ target: key,
138
+ file: exports.CONFIG_FILENAME,
139
+ fix: alsoIn.length > 0
140
+ ? `Remove '${key}', or switch provider to ${alsoIn[0]} if that is what you meant.`
141
+ : `Remove '${key}'. ${provider.label} reads: ${[...read].sort().join(", ")}.`,
142
+ }));
143
+ }
144
+ return diagnostics;
145
+ }
146
+ // ── Mapping file ──────────────────────────────────────────────────────────────
147
+ function readAlmMap(projectDir) {
148
+ const mapPath = path.join(projectDir, exports.MAP_RELPATH);
149
+ if (!fs.existsSync(mapPath))
150
+ return {};
151
+ return JSON.parse(fs.readFileSync(mapPath, "utf8"));
152
+ }
153
+ function writeAlmMap(projectDir, map, dryRun) {
154
+ const mapPath = path.join(projectDir, exports.MAP_RELPATH);
155
+ if (dryRun)
156
+ return mapPath;
157
+ fs.mkdirSync(path.dirname(mapPath), { recursive: true });
158
+ fs.writeFileSync(mapPath, `${JSON.stringify(map, null, 2)}\n`, "utf8");
159
+ return mapPath;
160
+ }
161
+ // ── Requirement extraction ────────────────────────────────────────────────────
162
+ /**
163
+ * Read REQ ids + aggregated status from the traceability matrix, and their
164
+ * titles from spec.md. A REQ is "done" when every one of its rows carries a
165
+ * done status.
166
+ * @returns Array<{ id, title, status: "done"|"open" }>
167
+ */
168
+ function extractRequirements(projectDir) {
169
+ const tracePath = path.join(projectDir, "docs", "specs", "traceability.md");
170
+ if (!fs.existsSync(tracePath)) {
171
+ throw new Error(`No traceability matrix at ${tracePath} — run adopt/init first.`);
172
+ }
173
+ const spec = fs.existsSync(path.join(projectDir, "spec.md"))
174
+ ? fs.readFileSync(path.join(projectDir, "spec.md"), "utf8")
175
+ : "";
176
+ const titles = {};
177
+ for (const m of spec.matchAll(/^##\s+(REQ-\d+)\s*[—-]\s*(.+)$/gm)) {
178
+ titles[m[1]] = m[2].trim();
179
+ }
180
+ const rowsByReq = new Map();
181
+ for (const line of fs.readFileSync(tracePath, "utf8").split("\n")) {
182
+ if (!line.trim().startsWith("|") || line.includes("---"))
183
+ continue;
184
+ const cells = line.split("|").map((c) => c.trim());
185
+ const req = cells.find((c) => /^REQ-\d+$/.test(c));
186
+ if (!req)
187
+ continue;
188
+ const status = cells[cells.length - 2] || "";
189
+ if (!rowsByReq.has(req))
190
+ rowsByReq.set(req, []);
191
+ rowsByReq.get(req).push(status);
192
+ }
193
+ return [...rowsByReq.entries()].map(([id, statuses]) => ({
194
+ id,
195
+ title: titles[id] || id,
196
+ status: statuses.length > 0 && statuses.every((s) => exports.DONE_STATUSES.has(s)) ? "done" : "open",
197
+ }));
198
+ }
199
+ // ── Sync ──────────────────────────────────────────────────────────────────────
200
+ /**
201
+ * Reconcile requirements with the ALM through the injected client.
202
+ * @param {Array<{id,title,status}>} requirements
203
+ * @param {Record<string,{issue:string}>} map REQ → issue mapping (mutated)
204
+ * @param {{createIssue,getIssueStatus,closeIssue}} client
205
+ * @param {{ dryRun?: boolean }} opts
206
+ * @returns {Promise<Array<{req,action,issue,detail?}>>} actions taken/planned
207
+ */
208
+ async function syncRequirements(requirements, map, client, opts) {
209
+ const dryRun = !!(opts && opts.dryRun);
210
+ const actions = [];
211
+ for (const req of requirements) {
212
+ const linked = map[req.id];
213
+ if (!linked) {
214
+ if (dryRun) {
215
+ actions.push({ req: req.id, action: "would-create", issue: null });
216
+ continue;
217
+ }
218
+ const issue = await client.createIssue(req.id, req.title);
219
+ map[req.id] = { issue: issue.key, url: issue.url || null };
220
+ actions.push({ req: req.id, action: "created", issue: issue.key });
221
+ continue;
222
+ }
223
+ const issueStatus = await client.getIssueStatus(linked.issue); // "open" | "done"
224
+ if (req.status === "done" && issueStatus !== "done") {
225
+ // A provider that cannot close says so up front, and the run reports it
226
+ // per requirement rather than throwing halfway through the queue.
227
+ if (client.capabilities && client.capabilities.close === false) {
228
+ actions.push({
229
+ req: req.id,
230
+ action: "close-unsupported",
231
+ issue: linked.issue,
232
+ detail: `${req.id} is done, but this provider cannot close ${linked.issue} — close it by hand.`,
233
+ });
234
+ continue;
235
+ }
236
+ if (!dryRun)
237
+ await client.closeIssue(linked.issue);
238
+ actions.push({
239
+ req: req.id,
240
+ action: dryRun ? "would-close" : "closed",
241
+ issue: linked.issue,
242
+ });
243
+ }
244
+ else if (req.status !== "done" && issueStatus === "done") {
245
+ actions.push({
246
+ req: req.id,
247
+ action: "drift",
248
+ issue: linked.issue,
249
+ detail: `${linked.issue} is done in the ALM but ${req.id} is not Implemented in traceability.md`,
250
+ });
251
+ }
252
+ else {
253
+ actions.push({ req: req.id, action: "in-sync", issue: linked.issue });
254
+ }
255
+ }
256
+ return actions;
257
+ }
258
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../scripts/alm/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ "use strict";
2
+ /**
3
+ * `AlmProvider` — the contract every ALM connector implements.
4
+ *
5
+ * The two connectors that existed before this module were a ternary in
6
+ * `clients.ts` over `provider === "jira"`, which scales to two and no further.
7
+ * Worse, nothing recorded *which configuration keys each provider reads*, and
8
+ * three consequences of that shipped:
9
+ *
10
+ * 1. a Jira config with no `user_env` passes validation and fails later with
11
+ * "Environment variable JIRA_USER is not set" — a variable the file never
12
+ * named;
13
+ * 2. `alm.config.yaml` accepts any key at all, so `nonsense_key: 42` and a
14
+ * `user_env` on an Azure config are read by nobody and reported by
15
+ * nobody. `harness.config.yaml` takes the opposite position, in this same
16
+ * repository, and says why: a key nobody reads is worse than a missing
17
+ * one, because the file looks configured;
18
+ * 3. `done_state` is read by Azure and ignored by Jira, which discovers the
19
+ * transition from the workflow. Setting it on a Jira project does
20
+ * nothing, silently.
21
+ *
22
+ * So a provider declares three things, and each is read by something:
23
+ *
24
+ * `config` which keys it requires and which it merely accepts.
25
+ * `lintAlmConfig` reports the rest.
26
+ * `capabilities` which operations it can perform. `syncRequirements`
27
+ * degrades instead of throwing when one is missing.
28
+ * `create` the factory, taking the validated config and a fetch
29
+ * implementation so every provider is testable offline.
30
+ *
31
+ * The declaration is not decoration: `tests/unit/alm-conformance.test.ts`
32
+ * runs the same suite against every registered provider and fails when an
33
+ * implementation and its declaration disagree.
34
+ */
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.CORE_CONFIG_KEYS = exports.CAPABILITY_METHOD = exports.CAPABILITIES = void 0;
37
+ exports.checkProviderDeclaration = checkProviderDeclaration;
38
+ /** Every capability name, for the checks that iterate them. */
39
+ exports.CAPABILITIES = [
40
+ "create",
41
+ "readStatus",
42
+ "close",
43
+ "listIssues",
44
+ ];
45
+ /** The client method each capability promises. */
46
+ exports.CAPABILITY_METHOD = {
47
+ create: "createIssue",
48
+ readStatus: "getIssueStatus",
49
+ close: "closeIssue",
50
+ listIssues: "listIssues",
51
+ };
52
+ /** Config keys the core itself reads, whatever the provider. */
53
+ exports.CORE_CONFIG_KEYS = ["alm_version", "provider"];
54
+ /**
55
+ * Check a provider declaration is well formed.
56
+ *
57
+ * Called by the conformance kit rather than at import time: a malformed
58
+ * provider is a bug in this repository, not a condition a user can reach, and
59
+ * paying for the check on every CLI start would be a tax on everyone.
60
+ *
61
+ * @returns problems, empty when the declaration is sound
62
+ */
63
+ function checkProviderDeclaration(provider) {
64
+ if (!provider || typeof provider !== "object")
65
+ return ["provider is not an object"];
66
+ const candidate = provider;
67
+ const problems = [];
68
+ const at = (msg) => problems.push(`${candidate.id ?? "(anonymous)"}: ${msg}`);
69
+ if (typeof candidate.id !== "string" || !candidate.id)
70
+ at("declares no id");
71
+ if (typeof candidate.label !== "string" || !candidate.label)
72
+ at("declares no label");
73
+ if (typeof candidate.create !== "function")
74
+ at("declares no create() factory");
75
+ problems.push(...checkConfigContract(candidate));
76
+ problems.push(...checkCapabilities(candidate));
77
+ return problems;
78
+ }
79
+ function checkConfigContract(candidate) {
80
+ const label = candidate.id ?? "(anonymous)";
81
+ const config = candidate.config;
82
+ if (!config || typeof config !== "object")
83
+ return [`${label}: declares no config contract`];
84
+ const problems = [];
85
+ for (const bucket of ["required", "optional"]) {
86
+ if (!Array.isArray(config[bucket]))
87
+ problems.push(`${label}: config.${bucket} is not an array`);
88
+ }
89
+ const declared = [...(config.required ?? []), ...(config.optional ?? [])];
90
+ const duplicated = declared.filter((key, i) => declared.indexOf(key) !== i);
91
+ if (duplicated.length > 0)
92
+ problems.push(`${label}: declares ${duplicated.join(", ")} twice`);
93
+ for (const key of declared) {
94
+ if (exports.CORE_CONFIG_KEYS.includes(key))
95
+ problems.push(`${label}: re-declares the core key '${key}'`);
96
+ }
97
+ return problems;
98
+ }
99
+ function checkCapabilities(candidate) {
100
+ const label = candidate.id ?? "(anonymous)";
101
+ const caps = candidate.capabilities;
102
+ if (!caps || typeof caps !== "object")
103
+ return [`${label}: declares no capabilities`];
104
+ const problems = [];
105
+ for (const capability of exports.CAPABILITIES) {
106
+ if (typeof caps[capability] !== "boolean") {
107
+ problems.push(`${label}: capability '${capability}' is not declared as a boolean`);
108
+ }
109
+ }
110
+ const extra = Object.keys(caps).filter((name) => !exports.CAPABILITIES.includes(name));
111
+ if (extra.length > 0) {
112
+ problems.push(`${label}: declares unknown capabilit(y/ies): ${extra.join(", ")}`);
113
+ }
114
+ return problems;
115
+ }
116
+ //# sourceMappingURL=port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"port.js","sourceRoot":"","sources":["../../../scripts/alm/port.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;;;AA6HH,4DAcC;AA1CD,+DAA+D;AAClD,QAAA,YAAY,GAAuC;IAC9D,QAAQ;IACR,YAAY;IACZ,OAAO;IACP,YAAY;CACb,CAAC;AAEF,kDAAkD;AACrC,QAAA,iBAAiB,GAA6D;IACzF,MAAM,EAAE,aAAa;IACrB,UAAU,EAAE,gBAAgB;IAC5B,KAAK,EAAE,YAAY;IACnB,UAAU,EAAE,YAAY;CACzB,CAAC;AAEF,gEAAgE;AACnD,QAAA,gBAAgB,GAAsB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AAE/E;;;;;;;;GAQG;AACH,SAAgB,wBAAwB,CAAC,QAAiB;IACxD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAEpF,MAAM,SAAS,GAAG,QAAgC,CAAC;IACnD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,EAAE,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,EAAE,IAAI,aAAa,KAAK,GAAG,EAAE,CAAC,CAAC;IAEtF,IAAI,OAAO,SAAS,CAAC,EAAE,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,EAAE;QAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC;IAC5E,IAAI,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK;QAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC;IACrF,IAAI,OAAO,SAAS,CAAC,MAAM,KAAK,UAAU;QAAE,EAAE,CAAC,8BAA8B,CAAC,CAAC;IAE/E,QAAQ,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,QAAQ,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/C,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,mBAAmB,CAAC,SAA+B;IAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,IAAI,aAAa,CAAC;IAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAChC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,CAAC,GAAG,KAAK,+BAA+B,CAAC,CAAC;IAE5F,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,MAAM,IAAI,CAAC,UAAU,EAAE,UAAU,CAAU,EAAE,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,YAAY,MAAM,kBAAkB,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5E,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,cAAc,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAE9F,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,IAAI,wBAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,+BAA+B,GAAG,GAAG,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,SAA+B;IACxD,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,IAAI,aAAa,CAAC;IAC5C,MAAM,IAAI,GAAG,SAAS,CAAC,YAAY,CAAC;IACpC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,CAAC,GAAG,KAAK,4BAA4B,CAAC,CAAC;IAErF,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,UAAU,IAAI,oBAAY,EAAE,CAAC;QACtC,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,iBAAiB,UAAU,gCAAgC,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CACpC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,oBAAY,CAAC,QAAQ,CAAC,IAA6B,CAAC,CAChE,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,wCAAwC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}