@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,127 @@
1
+ "use strict";
2
+ /**
3
+ * Turning a board issue into a proposal a human can review.
4
+ *
5
+ * ADR-0021 fixes the shape of this: an ALM issue never becomes a matrix row.
6
+ * It becomes a `change` — a proposal and a delta — which then passes through
7
+ * `change validate` and `change archive` like any change written by hand. The
8
+ * board is a mirror, and a mirror does not get to define a requirement.
9
+ *
10
+ * **The scenarios are left empty on purpose, and that is the whole design.**
11
+ * A Jira ticket has a title, a description and a status. It does not contain an
12
+ * executable acceptance criterion, and deriving Gherkin from prose would be
13
+ * inventing the one thing the spec exists to pin down. The empty scenario is
14
+ * not an unfinished feature: it is the marker for the only work that cannot be
15
+ * automated, and `change validate` will refuse the change until a person — or
16
+ * the `spec-author` role — fills it in.
17
+ *
18
+ * Pure: an issue in, markdown out. Reading the board is the provider's job and
19
+ * writing the folder is the change lifecycle's, which is also what keeps the
20
+ * ALM subsystem free of any write path into the spec tree.
21
+ */
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.inboundChangeId = inboundChangeId;
24
+ exports.planInboundChange = planInboundChange;
25
+ /** `ACME-42 Add dynamic pricing` → `alm-acme-42`. Stable, so a second pull is idempotent. */
26
+ function inboundChangeId(issueKey) {
27
+ const slug = String(issueKey)
28
+ .toLowerCase()
29
+ .replace(/[^a-z0-9]+/g, "-")
30
+ .replace(/^-+|-+$/g, "");
31
+ return `alm-${slug || "issue"}`;
32
+ }
33
+ /** A capability name that will not surprise anyone: the issue's own key. */
34
+ function capabilityFor(issue) {
35
+ return inboundChangeId(issue.key).replace(/^alm-/, "") || "inbound";
36
+ }
37
+ /**
38
+ * The proposal, seeded from what the board actually holds.
39
+ *
40
+ * The issue's own words go in verbatim and are labelled as such. Summarising
41
+ * them would put this tool's paraphrase where the reporter's intent should be,
42
+ * and the reviewer would have no way to tell which was which.
43
+ */
44
+ function renderProposal(issue, reqId) {
45
+ const body = issue.body.trim();
46
+ return [
47
+ `# Proposal: ${issue.title.trim() || issue.key}`,
48
+ "",
49
+ "## Intent",
50
+ "",
51
+ `Raised as ${issue.key}${issue.url ? ` (${issue.url})` : ""}.`,
52
+ "",
53
+ "> Imported verbatim from the board. It has not been edited, summarised or",
54
+ "> interpreted — what the reporter wrote is what a reviewer should read.",
55
+ "",
56
+ body
57
+ ? body
58
+ .split("\n")
59
+ .map((l) => `> ${l}`)
60
+ .join("\n")
61
+ : "> _(the issue has no description)_",
62
+ "",
63
+ "## Scope",
64
+ "",
65
+ "In scope:",
66
+ "",
67
+ `- ${reqId}, as described above`,
68
+ "",
69
+ "Out of scope:",
70
+ "",
71
+ "- <!-- A proposal that excludes nothing has not been thought about. -->",
72
+ "",
73
+ "## Acceptance criteria",
74
+ "",
75
+ "**Not yet written, and that is the point.** A board issue carries a title,",
76
+ "a description and a status; it does not carry an executable acceptance",
77
+ "criterion. Write the scenario in the delta before this change can be",
78
+ "validated.",
79
+ "",
80
+ ].join("\n");
81
+ }
82
+ /**
83
+ * The delta, with a requirement and an unwritten scenario.
84
+ *
85
+ * The scenario heading exists so the shape is obvious and the gap is visible;
86
+ * its steps are a TODO rather than a guess. `change validate` fails while they
87
+ * stay that way, which is the intended behaviour, not an inconvenience.
88
+ */
89
+ function renderDelta(issue, reqId, scenarioId) {
90
+ const title = issue.title.trim() || issue.key;
91
+ return [
92
+ `# Delta — ${capabilityFor(issue)}`,
93
+ "",
94
+ "## ADDED Requirements",
95
+ "",
96
+ `### Requirement: ${reqId} — ${title}`,
97
+ "",
98
+ `The system SHALL satisfy what ${issue.key} describes.`,
99
+ "",
100
+ "<!-- Replace this sentence with the requirement in your own words. The",
101
+ " issue's text is in proposal.md; a requirement is not its description. -->",
102
+ "",
103
+ `#### Scenario: ${scenarioId} — TODO`,
104
+ "",
105
+ "- GIVEN <!-- the precondition -->",
106
+ "- WHEN <!-- the action -->",
107
+ "- THEN <!-- the observable outcome -->",
108
+ "",
109
+ "<!-- These steps are deliberately unwritten. The board cannot supply them:",
110
+ " a ticket has no executable acceptance criterion, and inventing one",
111
+ " would defeat the only check this tool can make. `change validate`",
112
+ " stays red until they say something real. -->",
113
+ "",
114
+ `<!-- csda:trace origin=alm:${issue.key} -->`,
115
+ "",
116
+ ].join("\n");
117
+ }
118
+ /** Everything needed to write one change folder, decided without touching a disk. */
119
+ function planInboundChange(issue, reqId, scenarioId) {
120
+ return {
121
+ changeId: inboundChangeId(issue.key),
122
+ capability: capabilityFor(issue),
123
+ proposal: renderProposal(issue, reqId),
124
+ delta: renderDelta(issue, reqId, scenarioId),
125
+ };
126
+ }
127
+ //# sourceMappingURL=InboundChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InboundChange.js","sourceRoot":"","sources":["../../../../../packages/core/src/domain/InboundChange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ /**
3
+ * The language of generated prose.
4
+ *
5
+ * A Spanish team writing Spanish specs should not have `Added` and `Retired`
6
+ * appear in the middle of them — but they must not have `SHALL` translated
7
+ * either. The grammar is not prose: `SHALL`, `GIVEN`/`WHEN`/`THEN`,
8
+ * `## ADDED Requirements`, `REQ-NNN` and `csda:trace` are what the validator
9
+ * parses. Translating any of them breaks the file.
10
+ *
11
+ * So the split is explicit. Only the sentences a human reads are translated;
12
+ * the keywords never are, and there is a test asserting that.
13
+ *
14
+ * Set with `specgate config set language es`. Defaults to English.
15
+ *
16
+ * The tables and the tag-matching live here. Finding out which language a
17
+ * given project asked for reads its config, so that half is infrastructure —
18
+ * see `DiskLanguageRepository`.
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.DEFAULT = exports.PHRASES = exports.KEYWORDS = void 0;
22
+ exports.phrasesFor = phrasesFor;
23
+ exports.languageFor = languageFor;
24
+ /** Never translated, in any language. These are parsed, not read. */
25
+ exports.KEYWORDS = Object.freeze([
26
+ "SHALL",
27
+ "MUST",
28
+ "SHOULD",
29
+ "MAY",
30
+ "GIVEN",
31
+ "WHEN",
32
+ "THEN",
33
+ "AND",
34
+ "ADDED Requirements",
35
+ "MODIFIED Requirements",
36
+ "REMOVED Requirements",
37
+ "Requirement:",
38
+ "Scenario:",
39
+ "csda:trace",
40
+ ]);
41
+ exports.PHRASES = {
42
+ en: {
43
+ systemShall: (behaviour) => `The system SHALL ${behaviour}.`,
44
+ systemShallMeet: (what) => `The system SHALL satisfy "${what}".`,
45
+ observableBehaviour: "<observable behaviour>",
46
+ priority: (value) => `_Priority: ${value}._`,
47
+ todoSteps: (name) => `- TODO: write the GIVEN / WHEN / THEN steps for "${name}"`,
48
+ todoStepsPlain: "- TODO: write the GIVEN / WHEN / THEN steps",
49
+ precondition: "<precondition>",
50
+ action: "<action>",
51
+ outcome: "<observable outcome>",
52
+ scenarioName: "<scenario name>",
53
+ shortName: "<short name>",
54
+ capability: "<capability>",
55
+ added: "Added",
56
+ modified: "Modified",
57
+ removed: "Retired",
58
+ },
59
+ es: {
60
+ systemShall: (behaviour) => `El sistema SHALL ${behaviour}.`,
61
+ systemShallMeet: (what) => `El sistema SHALL cumplir "${what}".`,
62
+ observableBehaviour: "<comportamiento observable>",
63
+ priority: (value) => `_Prioridad: ${value}._`,
64
+ todoSteps: (name) => `- TODO: escribir los pasos GIVEN / WHEN / THEN de "${name}"`,
65
+ todoStepsPlain: "- TODO: escribir los pasos GIVEN / WHEN / THEN",
66
+ precondition: "<precondición>",
67
+ action: "<acción>",
68
+ outcome: "<resultado observable>",
69
+ scenarioName: "<nombre del escenario>",
70
+ shortName: "<nombre corto>",
71
+ capability: "<capacidad>",
72
+ added: "Añadidos",
73
+ modified: "Modificados",
74
+ removed: "Retirados",
75
+ },
76
+ pt: {
77
+ systemShall: (behaviour) => `O sistema SHALL ${behaviour}.`,
78
+ systemShallMeet: (what) => `O sistema SHALL cumprir "${what}".`,
79
+ observableBehaviour: "<comportamento observável>",
80
+ priority: (value) => `_Prioridade: ${value}._`,
81
+ todoSteps: (name) => `- TODO: escrever os passos GIVEN / WHEN / THEN de "${name}"`,
82
+ todoStepsPlain: "- TODO: escrever os passos GIVEN / WHEN / THEN",
83
+ precondition: "<precondição>",
84
+ action: "<ação>",
85
+ outcome: "<resultado observável>",
86
+ scenarioName: "<nome do cenário>",
87
+ shortName: "<nome curto>",
88
+ capability: "<capacidade>",
89
+ added: "Adicionados",
90
+ modified: "Modificados",
91
+ removed: "Retirados",
92
+ },
93
+ };
94
+ exports.DEFAULT = "en";
95
+ /**
96
+ * The phrase table for a language tag, falling back to the base tag and then
97
+ * to English. `null` or an unknown tag both mean English.
98
+ */
99
+ function phrasesFor(tag) {
100
+ return exports.PHRASES[languageFor(tag)];
101
+ }
102
+ /** Which of the tables above a tag selects. */
103
+ function languageFor(tag) {
104
+ if (!tag)
105
+ return exports.DEFAULT;
106
+ const lower = String(tag).toLowerCase();
107
+ if (exports.PHRASES[lower])
108
+ return lower;
109
+ const base = lower.split("-")[0];
110
+ return exports.PHRASES[base] ? base : exports.DEFAULT;
111
+ }
112
+ //# sourceMappingURL=Language.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Language.js","sourceRoot":"","sources":["../../../../../packages/core/src/domain/Language.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Lockfile = void 0;
4
+ class Lockfile {
5
+ specops_version;
6
+ csda_version;
7
+ packs;
8
+ static CURRENT_SCHEMA_VERSION = 1;
9
+ static FILENAME = ".specops.lock";
10
+ constructor(specops_version, csda_version, packs) {
11
+ this.specops_version = specops_version;
12
+ this.csda_version = csda_version;
13
+ this.packs = packs;
14
+ }
15
+ static createEmpty(csdaVersion = "0.0.0") {
16
+ return new Lockfile(Lockfile.CURRENT_SCHEMA_VERSION, csdaVersion, []);
17
+ }
18
+ static parse(raw) {
19
+ let parsed;
20
+ try {
21
+ parsed = JSON.parse(raw);
22
+ }
23
+ catch (err) {
24
+ throw new Error(`Invalid ${Lockfile.FILENAME}: ${err.message}`);
25
+ }
26
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
27
+ throw new Error(`Invalid ${Lockfile.FILENAME}: root must be an object`);
28
+ }
29
+ const declared = parsed.specops_version;
30
+ if (typeof declared === "number" && declared > Lockfile.CURRENT_SCHEMA_VERSION) {
31
+ throw new Error(`${Lockfile.FILENAME} was written by a newer version of this CLI ` +
32
+ `(lockfile format ${declared}, this CLI understands ${Lockfile.CURRENT_SCHEMA_VERSION}).\n` +
33
+ "Fix: upgrade with `npm install -g create-spec-driven-app@latest`, or ask " +
34
+ "whoever committed the lockfile which version they used.");
35
+ }
36
+ const packs = Array.isArray(parsed.packs) ? parsed.packs : [];
37
+ return new Lockfile(declared || Lockfile.CURRENT_SCHEMA_VERSION, parsed.csda_version || "0.0.0", packs);
38
+ }
39
+ upsertPack(entry) {
40
+ if (!entry || !entry.repo || !entry.pack_id) {
41
+ throw new Error("upsertPack: entry.repo and entry.pack_id are required");
42
+ }
43
+ const idx = this.packs.findIndex((p) => p.repo === entry.repo && p.pack_id === entry.pack_id);
44
+ if (idx >= 0) {
45
+ this.packs[idx] = { ...this.packs[idx], ...entry };
46
+ }
47
+ else {
48
+ this.packs.push({ ...entry });
49
+ }
50
+ this.packs.sort((a, b) => {
51
+ const r = String(a.repo).localeCompare(String(b.repo));
52
+ return r !== 0 ? r : String(a.pack_id).localeCompare(String(b.pack_id));
53
+ });
54
+ }
55
+ toJSON() {
56
+ return {
57
+ specops_version: this.specops_version,
58
+ csda_version: this.csda_version,
59
+ packs: this.packs,
60
+ };
61
+ }
62
+ }
63
+ exports.Lockfile = Lockfile;
64
+ //# sourceMappingURL=Lockfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Lockfile.js","sourceRoot":"","sources":["../../../../../packages/core/src/domain/Lockfile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ /**
3
+ * A change, expressed as a fragment of `pack.yaml`.
4
+ *
5
+ * `specops contribute` sends work back upstream: a capability the project
6
+ * wrote or amended becomes requirements and scenarios a pack maintainer can
7
+ * merge. This is the inverse of `PackDelta`, which turns a pack bump into a
8
+ * change — and like it, the interesting part is a rendering, so it is pure and
9
+ * the git work stays outside.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.deltaToPackFragment = deltaToPackFragment;
13
+ exports.contributionReadme = contributionReadme;
14
+ const SpecParser_1 = require("./SpecParser");
15
+ const yamlString = (v) =>
16
+ // Backslash first: escaping only the quote leaves `\\` before it able to
17
+ // escape the escape, and the value breaks out of its own string.
18
+ `"${String(v === undefined || v === null ? "" : v)
19
+ .replace(/\\/g, "\\\\")
20
+ .replace(/"/g, '\\"')}"`;
21
+ /**
22
+ * Express a delta's requirements in the pack's own model shape.
23
+ *
24
+ * The inverse of `as_change.deriveDelta`: that reads `pack.yaml` and writes a
25
+ * delta, this reads a delta and writes a `pack.yaml` fragment. Round-tripping
26
+ * the two is what makes the pack and the project speak one language.
27
+ */
28
+ function deltaToPackFragment(delta, opts) {
29
+ const o = opts || {};
30
+ const requirements = [];
31
+ const scenarios = [];
32
+ const emit = (req, disposition) => {
33
+ const trace = req.trace || {};
34
+ requirements.push([
35
+ ` - id: ${req.id || "REQ-TODO"}`,
36
+ ` title: ${yamlString(req.name)}`,
37
+ ` priority: ${trace.priority || "Should"}`,
38
+ ` description: ${yamlString((0, SpecParser_1.blockText)(req.text).split("\n")[0])}`,
39
+ ` status: Draft`,
40
+ disposition ? ` # ${disposition}` : null,
41
+ ]
42
+ .filter(Boolean)
43
+ .join("\n"));
44
+ for (const sc of req.scenarios || []) {
45
+ scenarios.push([
46
+ ` - id: ${yamlString(sc.id || "SCN-TODO")}`,
47
+ ` requirement_id: ${req.id || "REQ-TODO"}`,
48
+ trace.uc ? ` use_case: ${trace.uc}` : null,
49
+ trace.feature ? ` target: ${yamlString(trace.feature)}` : null,
50
+ ` scenario: ${yamlString(sc.name)}`,
51
+ trace.cmd ? ` command: ${trace.cmd}` : null,
52
+ trace.agg ? ` aggregate: ${trace.agg}` : null,
53
+ trace.evt ? ` events:\n - ${trace.evt}` : null,
54
+ ]
55
+ .filter(Boolean)
56
+ .join("\n"));
57
+ }
58
+ };
59
+ for (const req of delta.added)
60
+ emit(req, null);
61
+ for (const req of delta.modified)
62
+ emit(req, "MODIFIED upstream — reconcile with the existing entry");
63
+ const removed = delta.removed.map((req) => ` # REMOVED locally: ${req.id || req.name}`);
64
+ const lines = [`# Contribution fragment${o.changeId ? ` — ${o.changeId}` : ""}`, ""];
65
+ if (requirements.length > 0) {
66
+ lines.push("requirements:", ...requirements, "");
67
+ }
68
+ if (scenarios.length > 0) {
69
+ lines.push("scenarios:", ...scenarios, "");
70
+ }
71
+ if (removed.length > 0) {
72
+ lines.push("# Requirements this project retired locally:", ...removed, "");
73
+ }
74
+ if (requirements.length === 0 && scenarios.length === 0 && removed.length === 0) {
75
+ return null;
76
+ }
77
+ while (lines[lines.length - 1] === "")
78
+ lines.pop();
79
+ return `${lines.join("\n")}\n`;
80
+ }
81
+ function contributionReadme(changeId, packId, proposal, summary) {
82
+ return `# Contribution: ${changeId}
83
+
84
+ Proposed upstream from a project consuming \`${packId}\`.
85
+
86
+ ## Summary
87
+
88
+ - Added: ${summary.added.join(", ") || "—"}
89
+ - Modified: ${summary.modified.join(", ") || "—"}
90
+ - Removed locally: ${summary.removed.join(", ") || "—"}
91
+
92
+ ## Files in this contribution
93
+
94
+ | File | What it is |
95
+ | --- | --- |
96
+ | \`fragment.yaml\` | The requirements and scenarios expressed in the pack's model shape. **Not merged into \`pack.yaml\` automatically** — a maintainer decides where each entry belongs and whether the ids collide. |
97
+ | \`delta.md\` | The same change as a delta spec, for reading. |
98
+ | \`proposal.md\` | The consuming project's original proposal. |
99
+
100
+ ## Original proposal
101
+
102
+ ${proposal || "_(the change carried no proposal.md)_"}
103
+ `;
104
+ }
105
+ // ── Git staging ───────────────────────────────────────────────────────────────
106
+ //# sourceMappingURL=PackContribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PackContribution.js","sourceRoot":"","sources":["../../../../../packages/core/src/domain/PackContribution.ts"],"names":[],"mappings":"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"}