@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,553 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.DoctorCommand = void 0;
37
+ exports.nodeFloor = nodeFloor;
38
+ const fs = __importStar(require("node:fs"));
39
+ const path = __importStar(require("node:path"));
40
+ const node_child_process_1 = require("node:child_process");
41
+ const project_root_1 = require("../../../lib/project-root");
42
+ const diagnostics_1 = require("../../../lib/diagnostics");
43
+ const placeholders_1 = require("../../../lib/placeholders");
44
+ const GherkinQuality_1 = require("../../../../packages/core/src/domain/GherkinQuality");
45
+ const agent_1 = require("../../../lib/agent");
46
+ const command_1 = require("../../../lib/command");
47
+ const init_1 = require("../../../harness/init");
48
+ const ChangeWorkspace_1 = require("../../../../packages/core/src/infrastructure/ChangeWorkspace");
49
+ const RICH_HEADER = "| Requirement | Scenario ID | Feature file | Use Case | Command/Query | Aggregate | Event | Technical artifact | Test artifact | Status |";
50
+ const LEGACY_HEADER = "| Feature | Scenario | Technical artifact | Status |";
51
+ function nodeFloor(rootDir = (0, project_root_1.findCliRoot)(__dirname)) {
52
+ try {
53
+ const pkg = JSON.parse(fs.readFileSync(path.join(rootDir, "package.json"), "utf8"));
54
+ const raw = (pkg.engines && pkg.engines.node) || ">=22";
55
+ const match = raw.match(/\d+/);
56
+ return match ? Number(match[0]) : 22;
57
+ }
58
+ catch {
59
+ return 22;
60
+ }
61
+ }
62
+ class DoctorCommand extends command_1.BaseCommand {
63
+ findings = [];
64
+ ok(check, detail) {
65
+ this.findings.push({ level: "ok", check, detail });
66
+ }
67
+ warn(check, detail, fix) {
68
+ this.findings.push({ level: "warn", check, detail, fix });
69
+ }
70
+ recordError(check, detail, fix) {
71
+ this.findings.push({ level: "error", check, detail, fix });
72
+ }
73
+ walk(dir) {
74
+ const out = [];
75
+ if (!fs.existsSync(dir))
76
+ return out;
77
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
78
+ if (entry.name === "node_modules" || entry.name === ".git")
79
+ continue;
80
+ const full = path.join(dir, entry.name);
81
+ if (entry.isDirectory())
82
+ out.push(...this.walk(full));
83
+ else
84
+ out.push(full);
85
+ }
86
+ return out;
87
+ }
88
+ readIfExists(p) {
89
+ try {
90
+ return fs.readFileSync(p, "utf8");
91
+ }
92
+ catch {
93
+ return null;
94
+ }
95
+ }
96
+ describeInstall() {
97
+ const rootDir = (0, project_root_1.findCliRoot)(__dirname);
98
+ let version = "unknown";
99
+ try {
100
+ version = JSON.parse(fs.readFileSync(path.join(rootDir, "package.json"), "utf8")).version;
101
+ }
102
+ catch {
103
+ // An unreadable or malformed package.json leaves version "unknown", which
104
+ // is what doctor reports. Failing here would hide every other check.
105
+ }
106
+ const posix = rootDir.split(path.sep).join("/");
107
+ let kind = "local checkout";
108
+ if (/\/(_npx|\.npm\/_npx)\//.test(posix))
109
+ kind = "npx cache — temporary, not installed";
110
+ else if (/\/lib\/node_modules\//.test(posix))
111
+ kind = "global install";
112
+ else if (/\/node_modules\//.test(posix))
113
+ kind = "project dependency";
114
+ return { version, rootDir, kind };
115
+ }
116
+ checkEnvironment() {
117
+ const install = this.describeInstall();
118
+ this.ok("csda", `v${install.version} — ${install.kind}\n ${install.rootDir}`);
119
+ const floor = nodeFloor(install.rootDir);
120
+ const major = Number(process.versions.node.split(".")[0]);
121
+ if (major >= floor) {
122
+ this.ok("Node.js", `v${process.versions.node}`);
123
+ }
124
+ else {
125
+ this.recordError("Node.js", `v${process.versions.node} is below the required minimum`, `Install Node.js >= ${floor} (https://nodejs.org) or use nvm/fnm to switch.`);
126
+ }
127
+ const git = (0, node_child_process_1.spawnSync)("git", ["--version"], { encoding: "utf8", shell: false });
128
+ if (git.status === 0) {
129
+ this.ok("git", git.stdout.trim());
130
+ }
131
+ else {
132
+ this.warn("git", "git is not available on PATH", "Install git — init, specops (remote packs) and harness need it.");
133
+ }
134
+ }
135
+ checkStructure(dir) {
136
+ const required = [
137
+ "spec.md",
138
+ "AI_RULES.md",
139
+ "README.md",
140
+ "docs/specs/traceability.md",
141
+ "docs/specs/adr/README.md",
142
+ ];
143
+ const missing = required.filter((f) => !fs.existsSync(path.join(dir, f)));
144
+ if (missing.length === 0) {
145
+ this.ok("SDD structure", "all required files present");
146
+ }
147
+ else {
148
+ for (const f of missing) {
149
+ this.recordError("SDD structure", `missing required file: ${f}`, "Run `specgate adopt` (brownfield) to generate missing skeleton files without overwriting anything.");
150
+ }
151
+ }
152
+ if (!fs.existsSync(path.join(dir, "features"))) {
153
+ this.recordError("features/", "directory does not exist", "Create features/ and add at least one .feature file (or `specops add` a pack).");
154
+ }
155
+ }
156
+ readSpecTree(dir) {
157
+ const parts = [];
158
+ const root = this.readIfExists(path.join(dir, "spec.md"));
159
+ if (root !== null)
160
+ parts.push(root);
161
+ const capabilities = path.join(dir, "docs/specs/capabilities");
162
+ if (fs.existsSync(capabilities)) {
163
+ for (const entry of fs.readdirSync(capabilities, { withFileTypes: true })) {
164
+ if (!entry.isDirectory())
165
+ continue;
166
+ const spec = this.readIfExists(path.join(capabilities, entry.name, "spec.md"));
167
+ if (spec !== null)
168
+ parts.push(spec);
169
+ }
170
+ }
171
+ return parts.length > 0 ? parts.join("\n") : null;
172
+ }
173
+ checkTraceability(dir) {
174
+ const tracePath = path.join(dir, "docs/specs/traceability.md");
175
+ const trace = this.readIfExists(tracePath);
176
+ if (trace === null)
177
+ return;
178
+ let mode = null;
179
+ if (trace.includes(RICH_HEADER))
180
+ mode = "rich";
181
+ else if (trace.includes(LEGACY_HEADER))
182
+ mode = "legacy";
183
+ if (!mode) {
184
+ this.recordError("traceability.md", "matrix header not recognised", `Paste the rich header into docs/specs/traceability.md:\n ${RICH_HEADER}`);
185
+ return;
186
+ }
187
+ this.ok("traceability.md", `${mode} matrix`);
188
+ const featuresDir = path.join(dir, "features");
189
+ const featureFiles = fs.existsSync(featuresDir)
190
+ ? this.walk(featuresDir).filter((f) => f.endsWith(".feature"))
191
+ : [];
192
+ if (featureFiles.length === 0) {
193
+ this.recordError("features/", "no .feature files found", "Write at least one Gherkin scenario or `specops add` a domain pack.");
194
+ }
195
+ else {
196
+ this.ok("features/", `${featureFiles.length} feature file(s)`);
197
+ }
198
+ const orphanFeatures = featureFiles
199
+ .map((ff) => path.relative(dir, ff).split(path.sep).join("/"))
200
+ .filter((rel) => !trace.includes(rel));
201
+ for (const rel of orphanFeatures) {
202
+ this.recordError("orphan feature", `${rel} has no row in traceability.md`, `Add a matrix row referencing \`${rel}\` (validate prints a paste-ready one).`);
203
+ }
204
+ const referenced = trace.match(/`(features\/[^`]+\.feature)`/g) || [];
205
+ for (const raw of referenced) {
206
+ const rel = raw.replace(/`/g, "");
207
+ if (!fs.existsSync(path.join(dir, rel))) {
208
+ this.recordError("dangling matrix row", `traceability.md references ${rel}, which does not exist`, `Create ${rel} or fix/remove the row pointing at it.`);
209
+ }
210
+ }
211
+ const spec = this.readSpecTree(dir);
212
+ if (spec !== null) {
213
+ const specReqs = new Set(spec.match(/\bREQ-\d+\b/g) || []);
214
+ const matrixReqs = new Set(trace.match(/\bREQ-\d+\b/g) || []);
215
+ for (const req of specReqs) {
216
+ if (!matrixReqs.has(req)) {
217
+ this.warn("requirement coverage", `${req} is in spec.md but has no traceability row`, "Add a row for it — `specgate plan` lists what each REQ still needs.");
218
+ }
219
+ }
220
+ for (const req of matrixReqs) {
221
+ if (req !== "REQ-TBD" && !specReqs.has(req)) {
222
+ this.warn("requirement coverage", `${req} is in traceability.md but spec.md has no section for it`, `Add a \`## ${req} — <title>\` section to spec.md (or remove the stale row).`);
223
+ }
224
+ }
225
+ }
226
+ }
227
+ checkCapabilityDrift(dir) {
228
+ const capabilities = path.join(dir, "docs/specs/capabilities");
229
+ if (!fs.existsSync(capabilities))
230
+ return;
231
+ const trace = this.readIfExists(path.join(dir, "docs/specs/traceability.md"));
232
+ if (trace === null)
233
+ return;
234
+ const inMatrix = new Set(trace.match(/\bREQ-\d+\b/g) || []);
235
+ let checked = 0;
236
+ for (const entry of fs.readdirSync(capabilities, { withFileTypes: true })) {
237
+ if (!entry.isDirectory())
238
+ continue;
239
+ const spec = this.readIfExists(path.join(capabilities, entry.name, "spec.md"));
240
+ if (spec === null)
241
+ continue;
242
+ for (const req of new Set(spec.match(/\bREQ-\d+\b/g) || [])) {
243
+ checked++;
244
+ if (!inMatrix.has(req)) {
245
+ this.warn("capability drift", `${req} is in the ${entry.name} capability spec but has no traceability row`, `specgate req add` +
246
+ " — or re-run `specgate change archive`, which writes the row for you.");
247
+ }
248
+ }
249
+ }
250
+ if (checked > 0)
251
+ this.ok("capability specs", `${checked} requirement(s) reconciled with the matrix`);
252
+ }
253
+ checkChanges(dir) {
254
+ const changesDir = path.join(dir, "docs/specs/changes");
255
+ if (!fs.existsSync(changesDir)) {
256
+ this.ok("changes", "no change directory (not using the change lifecycle — that is fine)");
257
+ return;
258
+ }
259
+ const active = (0, ChangeWorkspace_1.listChangeIds)(dir);
260
+ const archived = (0, ChangeWorkspace_1.listArchivedIds)(dir);
261
+ for (const id of active) {
262
+ const deltas = (0, ChangeWorkspace_1.listDeltas)(dir, id);
263
+ const config = (0, ChangeWorkspace_1.readConfig)(dir, id);
264
+ const progress = (0, ChangeWorkspace_1.taskProgress)(dir, id);
265
+ if (progress.total > 0 && progress.remaining === 0) {
266
+ this.warn("stale change", `${id} has all ${progress.total} tasks checked but is still active`, `Archive it: specgate change archive ${id} --dry-run`);
267
+ }
268
+ if (deltas.length === 0 && config.skip_specs !== true) {
269
+ this.warn("empty change", `${id} declares no delta specs`, `Write one under docs/specs/changes/${id}/specs/<capability>/spec.md, or set skip_specs: true in its change.yaml if this change has no behavioural impact.`);
270
+ }
271
+ }
272
+ for (const id of archived) {
273
+ const raw = this.readIfExists(path.join((0, ChangeWorkspace_1.paths)(dir).archive, id, "tasks.md"));
274
+ if (raw === null)
275
+ continue;
276
+ const tasks = (0, ChangeWorkspace_1.parseTasks)(raw);
277
+ const remaining = tasks.filter((t) => !t.done).length;
278
+ if (tasks.length > 0 && remaining > 0) {
279
+ this.warn("archived with open tasks", `${id} was archived with ${remaining} task(s) unchecked`, "Either the tasks were not needed — delete them — or the work is unfinished and needs a follow-up change.");
280
+ }
281
+ }
282
+ if (active.length === 0 && archived.length === 0) {
283
+ this.ok("changes", "no changes yet");
284
+ }
285
+ else {
286
+ this.ok("changes", `${active.length} active, ${archived.length} archived`);
287
+ }
288
+ }
289
+ checkPlaceholders(dir) {
290
+ const offenders = (0, placeholders_1.findUnresolvedPlaceholders)(dir);
291
+ if (offenders.length === 0) {
292
+ this.ok("placeholders", "no unresolved {{...}} tokens");
293
+ }
294
+ else {
295
+ for (const f of offenders) {
296
+ this.recordError("placeholders", `unresolved {{...}} tokens in ${f}`, "Replace them with real values, or re-expand the pack with the missing --var values.");
297
+ }
298
+ }
299
+ }
300
+ /**
301
+ * `.gitattributes` is committed; the merge driver it names is not.
302
+ *
303
+ * `merge.csda-matrix.driver` lives in each clone's git config, so a project
304
+ * that set it up still merges by lines on every other machine and in CI —
305
+ * and the symptom is a conflict in `traceability.md` during a merge, which is
306
+ * a long way from the cause. Warn, never fail: without the driver git falls
307
+ * back to its built-in merge, which is what the project had before. Unhelped
308
+ * is not broken.
309
+ */
310
+ checkMergeDriver(dir) {
311
+ const attributes = path.join(dir, ".gitattributes");
312
+ if (!fs.existsSync(attributes))
313
+ return;
314
+ if (!fs.readFileSync(attributes, "utf8").includes(`merge=${init_1.MERGE_DRIVER_NAME}`))
315
+ return;
316
+ const get = (key) => String((0, node_child_process_1.spawnSync)("git", ["-C", dir, "config", "--get", key], { encoding: "utf8" }).stdout || "").trim();
317
+ const driver = get(`merge.${init_1.MERGE_DRIVER_NAME}.driver`);
318
+ const name = get(`merge.${init_1.MERGE_DRIVER_NAME}.name`);
319
+ if (driver) {
320
+ this.ok("merge driver", "traceability.md merges row by row");
321
+ return;
322
+ }
323
+ if (name) {
324
+ // Half-registered is the one state worse than unregistered: git refuses
325
+ // the merge outright with "custom merge driver ... lacks command line",
326
+ // so the file cannot be merged at all. An error, not a warning.
327
+ this.recordError("merge driver", `merge.${init_1.MERGE_DRIVER_NAME}.name is set but its driver command is missing — git will refuse to merge traceability.md`, `Either finish the registration with \`specgate harness init --project-dir .\`, or remove the half: git config --unset merge.${init_1.MERGE_DRIVER_NAME}.name`);
328
+ return;
329
+ }
330
+ this.warn("merge driver", ".gitattributes routes traceability.md to the csda merge driver, but this clone has not registered it", "Run `specgate harness init --project-dir .` here. Until then git merges the matrix by lines, so two parallel harness branches collide on adjacent rows.");
331
+ }
332
+ /**
333
+ * Does the declared architecture profile still describe this project?
334
+ *
335
+ * ADR-0022 makes the profile a declaration rather than an inference, which
336
+ * only stays honest if something notices when it stops being true: a
337
+ * `minimal` project that has grown a domain model, or a `tactical-ddd` one
338
+ * whose `aggregates.md` has been an empty heading for six months. Both are
339
+ * warnings — the profile is a statement of intent, and a project is allowed
340
+ * to be mid-move.
341
+ */
342
+ checkArchitectureProfile(dir) {
343
+ const rules = path.join(dir, "AI_RULES.md");
344
+ if (!fs.existsSync(rules))
345
+ return;
346
+ const declared = /^-\s*Architecture:\s*(\S+)/m.exec(fs.readFileSync(rules, "utf8"))?.[1];
347
+ if (!declared)
348
+ return;
349
+ const known = ["minimal", "layered", "tactical-ddd"];
350
+ if (!known.includes(declared)) {
351
+ this.warn("architecture", `AI_RULES.md declares an unknown architecture profile '${declared}'`, `Use one of: ${known.join(", ")}.`);
352
+ return;
353
+ }
354
+ // The signal is the matrix, not the domain documents.
355
+ //
356
+ // Those documents ship with placeholder rows — `AGG-001 | CoreAggregate`,
357
+ // `CMD-001 | ExampleCommand` — so "the file has table rows" is true the
358
+ // moment a project is generated and says nothing about whether anyone
359
+ // modelled anything. The matrix is the artefact the project actually
360
+ // maintains, and its Aggregate and Event columns hold `-` until they are
361
+ // used, which is exactly the question being asked.
362
+ const matrix = path.join(dir, "docs", "specs", "traceability.md");
363
+ if (!fs.existsSync(matrix))
364
+ return;
365
+ const rows = fs
366
+ .readFileSync(matrix, "utf8")
367
+ .split("\n")
368
+ .filter((l) => l.trim().startsWith("|") && !l.includes("---") && /REQ-/.test(l));
369
+ const modelsDomain = rows.some((row) => {
370
+ const cells = row.split("|").map((c) => c.trim());
371
+ const [aggregate, event] = [cells[6], cells[7]];
372
+ const stated = (v) => v && v !== "-" && v !== "TBD";
373
+ return stated(aggregate) || stated(event);
374
+ });
375
+ if (declared === "minimal" && modelsDomain) {
376
+ this.warn("architecture", "profile is 'minimal' but requirements name aggregates or events in the matrix", "Move to `layered` or `tactical-ddd` in AI_RULES.md. A profile the project has outgrown tells the agent the wrong thing.");
377
+ return;
378
+ }
379
+ // Only worth saying once a project has substance: a freshly generated one
380
+ // has modelled nothing yet, and that is not drift, it is Tuesday.
381
+ if (declared === "tactical-ddd" && !modelsDomain && rows.length > 1) {
382
+ this.warn("architecture", `profile is 'tactical-ddd' but none of its ${rows.length} requirements names an aggregate or event`, "Either model the domain, or declare `layered` — the rulebook is telling the agent to map every command to an aggregate the project does not have.");
383
+ return;
384
+ }
385
+ this.ok("architecture", `${declared} — matches what the project models`);
386
+ }
387
+ /**
388
+ * Scenarios that cannot fail, reported as findings rather than as a gate (A3).
389
+ *
390
+ * `specgate validate --strict-scenarios` is the gate; this is the advisory. The
391
+ * split is deliberate: a repository brought in with `specgate adopt` can carry
392
+ * dozens of features written before this tool existed, and failing its first
393
+ * `validate` teaches people to skip the gate rather than fix the scenarios.
394
+ * `doctor` is where this project already reports "here is what is weak, here
395
+ * is the fix", so that is where the gradual path belongs.
396
+ *
397
+ * Errors are reported as errors even so, because they are not weakness: a
398
+ * scenario Cucumber sees as empty reports `0 steps Ā· exit 0`, so the gate
399
+ * approves the requirement without having checked it (H14).
400
+ */
401
+ checkScenarioQuality(dir) {
402
+ const featuresDir = path.join(dir, "features");
403
+ if (!fs.existsSync(featuresDir))
404
+ return;
405
+ const files = [];
406
+ const walk = (d) => {
407
+ for (const entry of fs.readdirSync(d, { withFileTypes: true })) {
408
+ const full = path.join(d, entry.name);
409
+ if (entry.isDirectory())
410
+ walk(full);
411
+ else if (entry.name.endsWith(".feature"))
412
+ files.push(full);
413
+ }
414
+ };
415
+ walk(featuresDir);
416
+ if (files.length === 0)
417
+ return;
418
+ let errors = 0;
419
+ let warnings = 0;
420
+ for (const file of files.sort()) {
421
+ const rel = path.relative(dir, file).split(path.sep).join("/");
422
+ for (const f of (0, GherkinQuality_1.analyseGherkinSource)(fs.readFileSync(file, "utf8"), rel)) {
423
+ const where = f.line ? `${rel}:${f.line}` : rel;
424
+ if (f.severity === "error") {
425
+ errors += 1;
426
+ this.recordError("scenarios", `${where} ${f.message}`, f.fix || "");
427
+ }
428
+ else {
429
+ warnings += 1;
430
+ this.warn("scenarios", `${where} ${f.message}`, f.fix || "");
431
+ }
432
+ }
433
+ }
434
+ if (errors === 0 && warnings === 0) {
435
+ this.ok("scenarios", `${files.length} feature file(s), every scenario runnable`);
436
+ }
437
+ else if (errors === 0) {
438
+ this.warn("scenarios", `${warnings} scenario(s) could be sharper`, "Run `specgate validate <dir> --strict-scenarios` to gate on this.");
439
+ }
440
+ }
441
+ checkSampleRequirement(dir) {
442
+ if (!fs.existsSync(path.join(dir, ".specops.lock")))
443
+ return;
444
+ const traceRaw = this.readIfExists(path.join(dir, "docs/specs/traceability.md"));
445
+ if (traceRaw === null)
446
+ return;
447
+ const row = traceRaw.split("\n").find((line) => /^\|\s*REQ-000\s*\|/.test(line));
448
+ if (!row)
449
+ return;
450
+ const untouched = row.includes("features/core/health.feature") && /\bDraft\b/.test(row);
451
+ if (!untouched) {
452
+ this.ok("sample requirement", "REQ-000 has been adapted — treating it as yours");
453
+ return;
454
+ }
455
+ this.warn("sample requirement", "REQ-000 is the scaffold's starter requirement and a domain pack is installed — " +
456
+ "the pack's own requirements now cover this", "Remove the REQ-000 row from docs/specs/traceability.md and delete " +
457
+ "features/core/health.feature, unless you meant to keep it. " +
458
+ "New projects can skip it with `specgate init --no-sample-req` (implied by --from-pack).");
459
+ }
460
+ checkSpecops(dir) {
461
+ const lockPath = path.join(dir, ".specops.lock");
462
+ const lockRaw = this.readIfExists(lockPath);
463
+ if (lockRaw === null) {
464
+ this.ok("specops", "no lockfile (packs not used — that is fine at L1/L2)");
465
+ return;
466
+ }
467
+ let lock;
468
+ try {
469
+ lock = JSON.parse(lockRaw);
470
+ }
471
+ catch (err) {
472
+ this.recordError("specops", `.specops.lock is not valid JSON: ${err.message}`, "Restore it from git history, or delete it and re-run `specops add` for each pack.");
473
+ return;
474
+ }
475
+ const packs = Array.isArray(lock.packs) ? lock.packs : [];
476
+ this.ok("specops", `.specops.lock with ${packs.length} pack(s)`);
477
+ if (packs.length > 0 && !fs.existsSync(path.join(dir, ".specops", "baseline"))) {
478
+ this.warn("specops baseline", ".specops/baseline/ is missing — `specops sync` cannot three-way merge", "Re-run `specops sync` to regenerate it, and commit .specops/baseline/.");
479
+ }
480
+ }
481
+ execute() {
482
+ const argv = this.args;
483
+ const start = argv[0] === "doctor" ? 1 : 0;
484
+ let projectDir = null;
485
+ for (let i = start; i < argv.length; i++) {
486
+ if (argv[i] === "--project-dir" && argv[i + 1])
487
+ projectDir = argv[++i];
488
+ else if (argv[i] === "--json")
489
+ continue;
490
+ else if (argv[i] === "--help" || argv[i] === "-h") {
491
+ process.stdout.write("Usage:\n specgate doctor [--project-dir <dir>] [--json]\n\n" +
492
+ "Runs every diagnostic (environment, structure, traceability in both\n" +
493
+ "directions, placeholders, specops lockfile) and prints a fix per finding.\n");
494
+ process.exit(0);
495
+ }
496
+ }
497
+ const io = (0, agent_1.agentIo)((0, agent_1.wantsJson)(argv));
498
+ this.checkEnvironment();
499
+ let dir = ".";
500
+ try {
501
+ dir = (0, project_root_1.resolveProjectDir)(projectDir || ".");
502
+ }
503
+ catch {
504
+ dir = projectDir || ".";
505
+ }
506
+ if (!io.json)
507
+ process.stdout.write(`\n🩺 Doctor report for: ${dir}\n\n`);
508
+ if (!fs.existsSync(path.join(dir, "spec.md"))) {
509
+ this.recordError("project", "spec.md not found — this directory is not spec-driven yet", "Run `specgate adopt` here (existing code) or `init` (new project).");
510
+ }
511
+ else {
512
+ this.checkStructure(dir);
513
+ this.checkTraceability(dir);
514
+ this.checkCapabilityDrift(dir);
515
+ this.checkChanges(dir);
516
+ this.checkPlaceholders(dir);
517
+ this.checkSpecops(dir);
518
+ this.checkMergeDriver(dir);
519
+ this.checkArchitectureProfile(dir);
520
+ this.checkSampleRequirement(dir);
521
+ this.checkScenarioQuality(dir);
522
+ }
523
+ const errors = this.findings.filter((f) => f.level === "error").length;
524
+ const warns = this.findings.filter((f) => f.level === "warn").length;
525
+ if (io.json) {
526
+ const SEVERITY_OF = { ok: "info", warn: "warning", error: "error" };
527
+ io.emit({
528
+ doctor: {
529
+ projectDir: dir,
530
+ errors,
531
+ warnings: warns,
532
+ passed: this.findings.length - errors - warns,
533
+ },
534
+ status: this.findings.map((f) => (0, diagnostics_1.diagnostic)(SEVERITY_OF[f.level], `doctor_${String(f.check)
535
+ .toLowerCase()
536
+ .replace(/[^a-z0-9]+/g, "_")
537
+ .replace(/^_|_$/g, "")}`, f.detail, { target: f.check, ...(f.fix ? { fix: f.fix } : {}) })),
538
+ });
539
+ process.exit(errors === 0 ? agent_1.EXIT.OK : agent_1.EXIT.FAILURE);
540
+ }
541
+ const icons = { ok: "āœ…", warn: "āš ļø", error: "āŒ" };
542
+ for (const f of this.findings) {
543
+ process.stdout.write(`${icons[f.level]} ${f.check}: ${f.detail}\n`);
544
+ if (f.fix)
545
+ process.stdout.write(` šŸ’” Fix: ${f.fix}\n`);
546
+ }
547
+ process.stdout.write(`\n${errors === 0 ? "āœ…" : "āŒ"} ${errors} error(s), ${warns} warning(s), ` +
548
+ `${this.findings.length - errors - warns} check(s) passed\n`);
549
+ process.exit(errors === 0 ? agent_1.EXIT.OK : agent_1.EXIT.FAILURE);
550
+ }
551
+ }
552
+ exports.DoctorCommand = DoctorCommand;
553
+ //# sourceMappingURL=DoctorCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DoctorCommand.js","sourceRoot":"","sources":["../../../../../scripts/cli/commands/quality/DoctorCommand.ts"],"names":[],"mappings":"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"}