@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,557 @@
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.ReportCommand = void 0;
37
+ exports.buildReport = buildReport;
38
+ exports.buildDeclaredValues = buildDeclaredValues;
39
+ exports.readSpecops = readSpecops;
40
+ exports.sparkline = sparkline;
41
+ exports.renderHtml = renderHtml;
42
+ exports.renderJson = renderJson;
43
+ exports.parseArgs = parseArgs;
44
+ const fs = __importStar(require("node:fs"));
45
+ const path = __importStar(require("node:path"));
46
+ const project_root_1 = require("../../../lib/project-root");
47
+ const PlanCommand_1 = require("../spec/PlanCommand");
48
+ const command_1 = require("../../../lib/command");
49
+ const capability_specs_1 = require("../../../lib/capability-specs");
50
+ const DeclaredArtifacts_1 = require("../../../../packages/core/src/domain/DeclaredArtifacts");
51
+ const src_1 = require("../../../../packages/core/src");
52
+ const monorepo_fanout_1 = require("../../../lib/monorepo-fanout");
53
+ const HISTORY_REL = "reports/spec-coverage-history.jsonl";
54
+ const DONE_CATEGORY = "DONE";
55
+ function buildReport(projectDir) {
56
+ const tracePath = path.join(projectDir, "docs/specs/traceability.md");
57
+ const content = fs.readFileSync(tracePath, "utf8");
58
+ const rows = (0, PlanCommand_1.parseTraceability)(content);
59
+ const items = rows
60
+ .map((r) => (0, PlanCommand_1.classify)(r, (rel) => (0, PlanCommand_1.fileExists)(projectDir, rel)))
61
+ .filter((x) => x !== null);
62
+ const orphans = (0, PlanCommand_1.detectOrphans)(projectDir, items);
63
+ const byCategory = items.reduce((acc, it) => {
64
+ acc[it.category] = (acc[it.category] || 0) + 1;
65
+ return acc;
66
+ }, {});
67
+ const total = items.length;
68
+ const implemented = byCategory[DONE_CATEGORY] || 0;
69
+ const implementedPct = total === 0 ? 0 : Math.round((implemented / total) * 1000) / 10;
70
+ const needsTest = items.filter((it) => !it.test_exists).map((it) => it.requirement);
71
+ return {
72
+ schemaVersion: 1,
73
+ projectDir: path.resolve(projectDir),
74
+ total,
75
+ implemented,
76
+ pending: total - implemented,
77
+ implementedPct: implementedPct,
78
+ byCategory: byCategory,
79
+ needsTest: needsTest,
80
+ orphanFeatures: orphans,
81
+ specops: readSpecops(projectDir),
82
+ requirements: items,
83
+ declaredValues: buildDeclaredValues(projectDir, items),
84
+ };
85
+ }
86
+ /**
87
+ * The declared-value drift model (§8.6): for every capability-spec
88
+ * requirement that declares a `value_<id>=` in its `csda:trace`, read the
89
+ * code file(s) its matrix row already points at (the same Technical/Test
90
+ * artifact `--strict-links` checks exist) and compare.
91
+ *
92
+ * A requirement with no `value_*` key contributes nothing — this only ever
93
+ * reports on what was explicitly annotated, same restraint as
94
+ * `DeclaredArtifacts`.
95
+ */
96
+ function buildDeclaredValues(projectDir, items) {
97
+ const byRequirement = new Map();
98
+ for (const it of items)
99
+ if (it && it.requirement)
100
+ byRequirement.set(it.requirement, it);
101
+ let matched = 0;
102
+ let diverging = 0;
103
+ let specOnly = 0;
104
+ let codeOnly = 0;
105
+ const allItems = [];
106
+ for (const { req, specFile } of (0, capability_specs_1.readCapabilityRequirements)(projectDir)) {
107
+ const specEntries = (0, src_1.declaredSpecValues)(req.trace);
108
+ if (specEntries.length === 0)
109
+ continue;
110
+ const row = byRequirement.get(req.id);
111
+ const codeFiles = new Set();
112
+ for (const cell of [row && row.technical_artifact, row && row.test_artifact]) {
113
+ for (const p of (0, DeclaredArtifacts_1.declaredPaths)(cell))
114
+ codeFiles.add(p.split("#")[0]);
115
+ }
116
+ const codeEntries = [];
117
+ for (const rel of codeFiles) {
118
+ const abs = path.join(projectDir, rel);
119
+ if (!fs.existsSync(abs))
120
+ continue;
121
+ let text;
122
+ try {
123
+ text = fs.readFileSync(abs, "utf8");
124
+ }
125
+ catch {
126
+ continue;
127
+ }
128
+ for (const e of (0, src_1.declaredCodeValues)(text))
129
+ codeEntries.push({ ...e, file: rel });
130
+ }
131
+ for (const c of (0, src_1.compareDeclaredValues)(specEntries, codeEntries)) {
132
+ allItems.push({
133
+ id: c.id,
134
+ requirement: req.id,
135
+ specValue: c.specValue,
136
+ specFile,
137
+ specLine: req.line,
138
+ codeValue: c.codeValue,
139
+ codeFile: c.codeFile,
140
+ codeLine: c.codeLine,
141
+ status: c.status,
142
+ });
143
+ if (c.status === "matched")
144
+ matched++;
145
+ else if (c.status === "diverging")
146
+ diverging++;
147
+ else if (c.status === "spec_only")
148
+ specOnly++;
149
+ else if (c.status === "code_only")
150
+ codeOnly++;
151
+ }
152
+ }
153
+ return {
154
+ total: matched + diverging,
155
+ matched,
156
+ diverging,
157
+ specOnly,
158
+ codeOnly,
159
+ items: allItems,
160
+ };
161
+ }
162
+ function readSpecops(projectDir) {
163
+ const lockPath = path.join(projectDir, ".specops.lock");
164
+ if (!fs.existsSync(lockPath)) {
165
+ return { used: false, packs: [], baselinePresent: true, drift: [] };
166
+ }
167
+ const drift = [];
168
+ let packs = [];
169
+ try {
170
+ const lock = JSON.parse(fs.readFileSync(lockPath, "utf8"));
171
+ packs = Array.isArray(lock.packs) ? lock.packs : [];
172
+ }
173
+ catch (err) {
174
+ drift.push(`.specops.lock is not valid JSON: ${err.message}`);
175
+ }
176
+ const baselinePresent = packs.length === 0 || fs.existsSync(path.join(projectDir, ".specops", "baseline"));
177
+ if (!baselinePresent) {
178
+ drift.push(".specops/baseline/ is missing — `specops sync` cannot three-way merge.");
179
+ }
180
+ return {
181
+ used: true,
182
+ packs: packs.map((p) => ({
183
+ pack: p.pack || p.name || "(unknown)",
184
+ version: p.version || p.ref || "",
185
+ })),
186
+ baselinePresent: baselinePresent,
187
+ drift,
188
+ };
189
+ }
190
+ function readHistory(projectDir) {
191
+ const file = path.join(projectDir, HISTORY_REL);
192
+ if (!fs.existsSync(file))
193
+ return [];
194
+ const out = [];
195
+ for (const line of fs.readFileSync(file, "utf8").split("\n")) {
196
+ const t = line.trim();
197
+ if (!t)
198
+ continue;
199
+ try {
200
+ const e = JSON.parse(t);
201
+ if (typeof e.implementedPct === "number")
202
+ out.push(e);
203
+ }
204
+ catch {
205
+ // A truncated or hand-edited history line is skipped, not fatal: the
206
+ // ledger is append-only telemetry, and one bad line must not lose the rest.
207
+ }
208
+ }
209
+ return out;
210
+ }
211
+ function appendHistory(projectDir, report, now) {
212
+ const file = path.join(projectDir, HISTORY_REL);
213
+ fs.mkdirSync(path.dirname(file), { recursive: true });
214
+ const dv = report.declaredValues || { total: 0, matched: 0, diverging: 0 };
215
+ const entry = {
216
+ ts: now.toISOString(),
217
+ total: report.total,
218
+ implemented: report.implemented,
219
+ implementedPct: report.implementedPct,
220
+ // Additive (§8.6) — an older history line simply lacks these; readHistory
221
+ // only requires `implementedPct` to accept a line, so nothing breaks.
222
+ valuesTotal: dv.total,
223
+ valuesMatched: dv.matched,
224
+ valuesDiverging: dv.diverging,
225
+ };
226
+ fs.appendFileSync(file, JSON.stringify(entry) + "\n");
227
+ }
228
+ function esc(v) {
229
+ return String(v == null ? "" : v)
230
+ .replace(/&/g, "&amp;")
231
+ .replace(/</g, "&lt;")
232
+ .replace(/>/g, "&gt;")
233
+ .replace(/"/g, "&quot;");
234
+ }
235
+ const CATEGORY_LABELS = {
236
+ DONE: "Done",
237
+ NEEDS_STATUS_UPDATE: "Awaiting status",
238
+ NEEDS_IMPLEMENTATION: "Code missing",
239
+ NEEDS_TEST: "Test missing",
240
+ NEEDS_FEATURE: "Feature missing",
241
+ NEEDS_EVERYTHING: "Nothing yet",
242
+ };
243
+ /** One series as SVG polyline coordinates, `w`×`h`, 0–100 scale. */
244
+ function sparklineCoords(pts, w, h, max) {
245
+ const step = w / (pts.length - 1);
246
+ return pts.map((p, i) => `${(i * step).toFixed(1)},${(h - (p / max) * h).toFixed(1)}`).join(" ");
247
+ }
248
+ function sparkline(history) {
249
+ const pts = history.map((h) => h.implementedPct);
250
+ if (pts.length < 2)
251
+ return "";
252
+ const w = 240;
253
+ const h = 40;
254
+ const max = 100;
255
+ const coords = sparklineCoords(pts, w, h, max);
256
+ const last = coords.split(" ").pop().split(",");
257
+ // The declared-value trend (§8.6) is a second, dashed series — drawn only
258
+ // when *every* history point has it, never interpolated across a gap left
259
+ // by runs recorded before this feature existed or before anything was
260
+ // annotated. A trend line implying data between two points is worse than
261
+ // no trend line.
262
+ let valueSeries = "";
263
+ const valuePts = history.map((h) => typeof h.valuesTotal === "number" && h.valuesTotal > 0
264
+ ? Math.round((h.valuesMatched / h.valuesTotal) * 1000) / 10
265
+ : null);
266
+ if (valuePts.every((p) => p !== null)) {
267
+ const vCoords = sparklineCoords(valuePts, w, h, max);
268
+ const vLast = vCoords.split(" ").pop().split(",");
269
+ valueSeries =
270
+ `<polyline fill="none" stroke="#1c7ed6" stroke-width="2" stroke-dasharray="4 2" ` +
271
+ `points="${vCoords}"/>` +
272
+ `<circle cx="${vLast[0]}" cy="${vLast[1]}" r="3" fill="#1c7ed6"/>`;
273
+ }
274
+ return (`<svg class="spark" viewBox="0 0 ${w} ${h}" width="${w}" height="${h}" role="img" ` +
275
+ `aria-label="Coverage trend over ${pts.length} runs">` +
276
+ `<polyline fill="none" stroke="#2f9e44" stroke-width="2" points="${coords}"/>` +
277
+ `<circle cx="${last[0]}" cy="${last[1]}" r="3" fill="#2f9e44"/>` +
278
+ valueSeries +
279
+ `</svg>`);
280
+ }
281
+ function tile(value, label, tone = "") {
282
+ return (`<div class="tile ${tone || ""}">` +
283
+ `<div class="tile-value">${esc(value)}</div>` +
284
+ `<div class="tile-label">${esc(label)}</div></div>`);
285
+ }
286
+ function renderHtml(report, opts) {
287
+ const generatedAt = (opts && opts.generatedAt) || new Date();
288
+ const history = (opts && opts.history) || [];
289
+ const pct = report.implementedPct;
290
+ const projectName = path.basename(report.projectDir);
291
+ const rows = report.requirements
292
+ .map((it) => {
293
+ const mark = (b) => (b ? '<span class="ok">✓</span>' : '<span class="no">·</span>');
294
+ const catLabel = CATEGORY_LABELS[it.category] || it.category;
295
+ const catClass = it.category === "DONE" ? "done" : "todo";
296
+ return (`<tr>` +
297
+ `<td class="req">${esc(it.requirement)}</td>` +
298
+ `<td>${esc(it.status || "—")}</td>` +
299
+ `<td class="ctr">${mark(it.feature_exists)}</td>` +
300
+ `<td class="ctr">${mark(it.test_exists)}</td>` +
301
+ `<td class="ctr">${mark(it.technical_exists)}</td>` +
302
+ `<td><span class="badge ${catClass}">${esc(catLabel)}</span></td>` +
303
+ `</tr>`);
304
+ })
305
+ .join("\n");
306
+ const specopsBlock = report.specops.used
307
+ ? `<h2>Domain packs</h2><p>${report.specops.packs
308
+ .map((p) => `<code>${esc(p.pack)}</code> ${esc(p.version)}`)
309
+ .join(", ") || "—"}</p>` +
310
+ (report.specops.drift.length
311
+ ? `<ul class="drift">${report.specops.drift.map((d) => `<li>${esc(d)}</li>`).join("")}</ul>`
312
+ : `<p class="ok-line">✓ No specops drift detected.</p>`)
313
+ : "";
314
+ const orphanBlock = report.orphanFeatures.length
315
+ ? `<h2>Orphan feature files</h2><ul class="drift">${report.orphanFeatures
316
+ .map((f) => `<li><code>${esc(f)}</code></li>`)
317
+ .join("")}</ul>`
318
+ : "";
319
+ // §8.6 — declared-value drift. Only rendered when there is something
320
+ // annotated at all: a project with no `value_*`/`csda:value` pair has
321
+ // nothing to show, the same restraint `orphanBlock` already applies.
322
+ const dv = report.declaredValues || { total: 0, specOnly: 0, codeOnly: 0, items: [] };
323
+ const dvSeen = dv.total + dv.specOnly + dv.codeOnly;
324
+ const STATUS_LABELS = {
325
+ matched: "Matched",
326
+ diverging: "Diverges",
327
+ spec_only: "Spec only",
328
+ code_only: "Code only",
329
+ };
330
+ const declaredValuesBlock = dvSeen
331
+ ? `<h2>Declared values (§8.6)</h2>` +
332
+ `<p class="meta">${dv.matched} matched · ${dv.diverging} diverging · ` +
333
+ `${dv.specOnly} spec-only · ${dv.codeOnly} code-only</p>` +
334
+ `<div class="table-wrap"><table><thead><tr>` +
335
+ `<th>Requirement</th><th>Id</th><th>Spec value</th><th>Code value</th><th>State</th>` +
336
+ `</tr></thead><tbody>` +
337
+ dv.items
338
+ .map((it) => {
339
+ const cls = it.status === "matched" ? "done" : "todo";
340
+ const codeCell = it.codeFile
341
+ ? `<code>${esc(it.codeValue)}</code> <span class="meta">${esc(it.codeFile)}:${esc(it.codeLine)}</span>`
342
+ : '<span class="no">·</span>';
343
+ const specCell = it.specValue !== null
344
+ ? `<code>${esc(it.specValue)}</code>`
345
+ : '<span class="no">·</span>';
346
+ return (`<tr><td class="req">${esc(it.requirement)}</td><td><code>${esc(it.id)}</code></td>` +
347
+ `<td>${specCell}</td><td>${codeCell}</td>` +
348
+ `<td><span class="badge ${cls}">${esc(STATUS_LABELS[it.status] || it.status)}</span></td></tr>`);
349
+ })
350
+ .join("\n") +
351
+ `</tbody></table></div>`
352
+ : "";
353
+ const hasValueTrend = history.some((h) => typeof h.valuesTotal === "number" && h.valuesTotal > 0);
354
+ const trendBlock = sparkline(history)
355
+ ? `<div class="trend"><span class="trend-label">${hasValueTrend ? "Coverage (green) · Value match (blue, dashed)" : "Coverage trend"}</span>${sparkline(history)}</div>`
356
+ : "";
357
+ const pctTone = pct >= 80 ? "good" : pct >= 40 ? "warn" : "bad";
358
+ return `<!doctype html>
359
+ <html lang="en">
360
+ <head>
361
+ <meta charset="utf-8">
362
+ <meta name="viewport" content="width=device-width, initial-scale=1">
363
+ <title>Spec coverage — ${esc(projectName)}</title>
364
+ <style>
365
+ :root { color-scheme: light dark; }
366
+ * { box-sizing: border-box; }
367
+ body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
368
+ margin: 0; padding: 2rem; background: #f7f8fa; color: #1a1a1a; }
369
+ @media (prefers-color-scheme: dark) { body { background: #16181d; color: #e6e6e6; } }
370
+ header { max-width: 960px; margin: 0 auto 1.5rem; }
371
+ h1 { font-size: 1.4rem; margin: 0 0 .25rem; }
372
+ .meta { color: #888; font-size: .85rem; }
373
+ main { max-width: 960px; margin: 0 auto; }
374
+ .tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
375
+ gap: 1rem; margin: 1.5rem 0; }
376
+ .tile { background: #fff; border: 1px solid #e3e5e9; border-radius: 10px; padding: 1rem 1.25rem; }
377
+ @media (prefers-color-scheme: dark) { .tile { background: #21242b; border-color: #2f333c; } }
378
+ .tile-value { font-size: 2rem; font-weight: 700; line-height: 1; }
379
+ .tile-label { color: #888; font-size: .8rem; margin-top: .35rem; text-transform: uppercase; letter-spacing: .03em; }
380
+ .tile.good .tile-value { color: #2f9e44; }
381
+ .tile.warn .tile-value { color: #e8a91d; }
382
+ .tile.bad .tile-value { color: #e03131; }
383
+ .bar { height: 12px; border-radius: 6px; background: #e3e5e9; overflow: hidden; margin: .5rem 0 0; }
384
+ @media (prefers-color-scheme: dark) { .bar { background: #2f333c; } }
385
+ .bar > span { display: block; height: 100%; background: #2f9e44; }
386
+ .trend { display: flex; align-items: center; gap: 1rem; margin: 1rem 0; }
387
+ .trend-label { color: #888; font-size: .8rem; text-transform: uppercase; letter-spacing: .03em; }
388
+ table { width: 100%; border-collapse: collapse; margin-top: .5rem; font-size: .9rem;
389
+ background: #fff; border: 1px solid #e3e5e9; border-radius: 10px; overflow: hidden; }
390
+ @media (prefers-color-scheme: dark) { table { background: #21242b; border-color: #2f333c; } }
391
+ th, td { padding: .55rem .75rem; text-align: left; border-bottom: 1px solid #eceef1; }
392
+ @media (prefers-color-scheme: dark) { th, td { border-color: #2a2e36; } }
393
+ th { font-size: .72rem; text-transform: uppercase; letter-spacing: .04em; color: #888; }
394
+ td.ctr, th.ctr { text-align: center; }
395
+ td.req { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-weight: 600; }
396
+ .ok { color: #2f9e44; font-weight: 700; }
397
+ .no { color: #c0c4cc; }
398
+ .badge { display: inline-block; padding: .1rem .5rem; border-radius: 999px; font-size: .75rem; }
399
+ .badge.done { background: #d3f9d8; color: #2b8a3e; }
400
+ .badge.todo { background: #fff3bf; color: #b08900; }
401
+ @media (prefers-color-scheme: dark) {
402
+ .badge.done { background: #133a1c; color: #69db7c; }
403
+ .badge.todo { background: #3a3312; color: #ffd43b; }
404
+ }
405
+ h2 { font-size: 1rem; margin: 1.75rem 0 .5rem; }
406
+ .drift { color: #e03131; }
407
+ .ok-line { color: #2f9e44; }
408
+ code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .85em; }
409
+ .table-wrap { overflow-x: auto; }
410
+ </style>
411
+ </head>
412
+ <body>
413
+ <header>
414
+ <h1>Spec coverage — ${esc(projectName)}</h1>
415
+ <div class="meta">Generated ${esc(generatedAt.toISOString())} · ${esc(report.total)} requirement(s)</div>
416
+ </header>
417
+ <main>
418
+ <div class="tiles">
419
+ ${tile(pct + "%", "Implemented", pctTone)}
420
+ ${tile(report.implemented, "Done")}
421
+ ${tile(report.pending, "Pending")}
422
+ ${tile(report.needsTest.length, "Missing a test", report.needsTest.length ? "warn" : "good")}
423
+ ${tile(report.orphanFeatures.length, "Orphan features", report.orphanFeatures.length ? "bad" : "good")}
424
+ ${dvSeen ? tile(dv.diverging, "Value drift", dv.diverging ? "bad" : "good") : ""}
425
+ </div>
426
+ <div class="bar"><span style="width:${pct}%"></span></div>
427
+ ${trendBlock}
428
+ <div class="table-wrap">
429
+ <table>
430
+ <thead><tr>
431
+ <th>REQ</th><th>Status</th><th class="ctr">Feature</th>
432
+ <th class="ctr">Test</th><th class="ctr">Code</th><th>State</th>
433
+ </tr></thead>
434
+ <tbody>
435
+ ${rows}
436
+ </tbody>
437
+ </table>
438
+ </div>
439
+ ${specopsBlock}
440
+ ${orphanBlock}
441
+ ${declaredValuesBlock}
442
+ </main>
443
+ </body>
444
+ </html>
445
+ `;
446
+ }
447
+ function toCamelRequirement(item) {
448
+ const { scenario_id, feature_file, technical_artifact, test_artifact, feature_exists, technical_exists, test_exists, ...rest } = item;
449
+ return {
450
+ ...rest,
451
+ scenarioId: scenario_id,
452
+ featureFile: feature_file,
453
+ technicalArtifact: technical_artifact,
454
+ testArtifact: test_artifact,
455
+ featureExists: feature_exists,
456
+ technicalExists: technical_exists,
457
+ testExists: test_exists,
458
+ };
459
+ }
460
+ function renderJson(report) {
461
+ const wire = {
462
+ ...report,
463
+ requirements: (report.requirements || []).map(toCamelRequirement),
464
+ status: report.status || [],
465
+ };
466
+ return JSON.stringify(wire, null, 2) + "\n";
467
+ }
468
+ function parseArgs(argv) {
469
+ const opts = {
470
+ projectDir: ".",
471
+ format: "html",
472
+ out: null,
473
+ stdout: false,
474
+ record: false,
475
+ };
476
+ for (let i = 0; i < argv.length; i++) {
477
+ const a = argv[i];
478
+ if (a === "--project-dir" && argv[i + 1])
479
+ opts.projectDir = argv[++i];
480
+ else if (a === "--out" && argv[i + 1])
481
+ opts.out = argv[++i];
482
+ else if (a === "--format" && argv[i + 1])
483
+ opts.format = argv[++i];
484
+ else if (a === "--json") {
485
+ opts.format = "json";
486
+ opts.stdout = true;
487
+ }
488
+ else if (a === "--html")
489
+ opts.format = "html";
490
+ else if (a === "--stdout")
491
+ opts.stdout = true;
492
+ else if (a === "--record")
493
+ opts.record = true;
494
+ else if (a === "--help" || a === "-h") {
495
+ process.stdout.write(`\n 📊 report — spec-coverage dashboard\n\n` +
496
+ ` USAGE\n` +
497
+ ` specgate report [--project-dir <path>] [--format html|json]\n` +
498
+ ` [--out <file>] [--stdout] [--record]\n\n`);
499
+ process.exit(0);
500
+ }
501
+ else if (a.startsWith("-")) {
502
+ process.stderr.write(`Unknown flag: ${a}\n`);
503
+ process.exit(2);
504
+ }
505
+ }
506
+ if (!["html", "json"].includes(opts.format)) {
507
+ process.stderr.write(`Invalid --format: ${opts.format}. Expected: html | json.\n`);
508
+ process.exit(2);
509
+ }
510
+ return opts;
511
+ }
512
+ class ReportCommand extends command_1.BaseCommand {
513
+ execute() {
514
+ const opts = parseArgs(this.args);
515
+ let projectDir;
516
+ try {
517
+ projectDir = (0, project_root_1.resolveProjectDir)(opts.projectDir);
518
+ }
519
+ catch (err) {
520
+ process.stderr.write(`${err.message}\n`);
521
+ process.exit(2);
522
+ }
523
+ const monorepo = (0, monorepo_fanout_1.runMonorepoFanout)(projectDir, "report.js");
524
+ if (monorepo !== null) {
525
+ process.exit(monorepo.failures === 0 ? 0 : 1);
526
+ }
527
+ const tracePath = path.join(projectDir, "docs/specs/traceability.md");
528
+ if (!fs.existsSync(tracePath)) {
529
+ process.stderr.write(`docs/specs/traceability.md not found in ${projectDir}\n`);
530
+ process.exit(2);
531
+ }
532
+ const report = buildReport(projectDir);
533
+ const now = new Date();
534
+ if (opts.record)
535
+ appendHistory(projectDir, report, now);
536
+ const history = readHistory(projectDir);
537
+ const output = opts.format === "json"
538
+ ? renderJson(report)
539
+ : renderHtml(report, { generatedAt: now, history });
540
+ if (opts.stdout) {
541
+ process.stdout.write(output);
542
+ }
543
+ else {
544
+ const defaultOut = opts.format === "json" ? "reports/spec-coverage.json" : "reports/spec-coverage.html";
545
+ const outPath = path.isAbsolute(opts.out || defaultOut)
546
+ ? opts.out || defaultOut
547
+ : path.join(projectDir, opts.out || defaultOut);
548
+ fs.mkdirSync(path.dirname(outPath), { recursive: true });
549
+ fs.writeFileSync(outPath, output);
550
+ process.stdout.write(`📊 Wrote ${path.relative(projectDir, outPath) || outPath} — ` +
551
+ `${report.implementedPct}% implemented (${report.implemented}/${report.total}).\n`);
552
+ }
553
+ process.exit(0);
554
+ }
555
+ }
556
+ exports.ReportCommand = ReportCommand;
557
+ //# sourceMappingURL=ReportCommand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReportCommand.js","sourceRoot":"","sources":["../../../../../scripts/cli/commands/quality/ReportCommand.ts"],"names":[],"mappings":"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"}