@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,477 @@
1
+ "use strict";
2
+ /**
3
+ * The landing page's terminal, recorded from the real CLI.
4
+ *
5
+ * ## Why a recording and not a GIF
6
+ *
7
+ * This repository ships no binaries, and a marketing GIF would be the first —
8
+ * unreviewable in a diff, stale the moment output changes, and heavier than the
9
+ * rest of the page put together. A recording is text: it diffs, it is asserted
10
+ * against the CLI it claims to show, and the whole thing is about 15 KB.
11
+ *
12
+ * The claim the page makes is "this is what it prints". That claim is only
13
+ * worth making if it stays true, which is what `--check`, the guards in
14
+ * `tests/unit/docs-terminal.test.ts` and the pinned version are for.
15
+ *
16
+ * ## Determinism
17
+ *
18
+ * Every capture must produce the same bytes, or the file churns, people stop
19
+ * regenerating it, and the recording quietly becomes a lie. Two mechanisms: the
20
+ * environment is built from scratch rather than inherited (`buildEnv`), and
21
+ * what survives that is flattened by an ordered, named list of rules (`RULES`).
22
+ *
23
+ * Colour is not captured. `NO_COLOR` and a piped stdout make the CLI emit no
24
+ * escape at all, and the meaning is recovered from the markers it already
25
+ * prints — the tick, the cross, the warning sign. Classify, do not capture.
26
+ */
27
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
28
+ if (k2 === undefined) k2 = k;
29
+ var desc = Object.getOwnPropertyDescriptor(m, k);
30
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
31
+ desc = { enumerable: true, get: function() { return m[k]; } };
32
+ }
33
+ Object.defineProperty(o, k2, desc);
34
+ }) : (function(o, m, k, k2) {
35
+ if (k2 === undefined) k2 = k;
36
+ o[k2] = m[k];
37
+ }));
38
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
39
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
40
+ }) : function(o, v) {
41
+ o["default"] = v;
42
+ });
43
+ var __importStar = (this && this.__importStar) || (function () {
44
+ var ownKeys = function(o) {
45
+ ownKeys = Object.getOwnPropertyNames || function (o) {
46
+ var ar = [];
47
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
48
+ return ar;
49
+ };
50
+ return ownKeys(o);
51
+ };
52
+ return function (mod) {
53
+ if (mod && mod.__esModule) return mod;
54
+ var result = {};
55
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
56
+ __setModuleDefault(result, mod);
57
+ return result;
58
+ };
59
+ })();
60
+ Object.defineProperty(exports, "__esModule", { value: true });
61
+ exports.INDEX_PATH = exports.JSON_PATH = exports.RULES = exports.COLS = void 0;
62
+ exports.classify = classify;
63
+ exports.normalise = normalise;
64
+ exports.assertNoSecrets = assertNoSecrets;
65
+ exports.pace = pace;
66
+ exports.promptFor = promptFor;
67
+ exports.renderTranscript = renderTranscript;
68
+ exports.renderFallbackHtml = renderFallbackHtml;
69
+ exports.recordTranscript = recordTranscript;
70
+ exports.serialise = serialise;
71
+ exports.writeRecording = writeRecording;
72
+ const node_child_process_1 = require("node:child_process");
73
+ const fs = __importStar(require("node:fs"));
74
+ const os = __importStar(require("node:os"));
75
+ const path = __importStar(require("node:path"));
76
+ const terminal_storyboard_1 = require("./terminal-storyboard");
77
+ const blocks_1 = require("./blocks");
78
+ const ROOT = path.resolve(__dirname, "../../..");
79
+ const DOCS = path.join(ROOT, "docs");
80
+ /** The pinned instant. Every timestamp in the recording becomes this. */
81
+ const PINNED_TIME = "2026-01-01T00-00-00-000Z";
82
+ /** Terminal width the capture pretends to have. */
83
+ exports.COLS = 88;
84
+ // ── Classification ───────────────────────────────────────────────────────────
85
+ /**
86
+ * A line's colour, derived from what the CLI printed rather than from ANSI.
87
+ *
88
+ * The CLI's diagnostics carry a marker in every surface, which is exactly the
89
+ * information the escape sequence would have encoded.
90
+ */
91
+ function classify(line) {
92
+ const t = line.trim();
93
+ if (t === "")
94
+ return "out";
95
+ if (/^(❌|✖|✗)/.test(t) || /\[ERROR\]/.test(t) || /^not ok /.test(t))
96
+ return "err";
97
+ if (/^(⚠|▲|⛔)/.test(t) || /\[WARN\]/.test(t))
98
+ return "warn";
99
+ // The tick is not always first: the CLI prefixes most surfaces with an info
100
+ // marker, so `ℹ️ [INFO] ✅ Validation passed` would read as neutral grey if
101
+ // this were anchored. Error and warning are checked above, so a line carrying
102
+ // both still comes out as the worse of the two.
103
+ if (/[✅✔✓]/.test(t))
104
+ return "ok";
105
+ if (/^\s*\d+ passed\b/.test(t))
106
+ return "ok";
107
+ if (/^(ℹ)/.test(t) || /\[INFO\]/.test(t))
108
+ return "info";
109
+ if (/^[─—-]{2,}/.test(t) || t.startsWith("#"))
110
+ return "dim";
111
+ return "out";
112
+ }
113
+ /**
114
+ * The rules, in order and by name.
115
+ *
116
+ * Named rather than inlined so the test can assert each one still runs, and so
117
+ * a new rule cannot be slipped in without appearing here. Order matters: the
118
+ * scratch directory lives under the system temp directory, so `scratch` has to
119
+ * win before `tmp` gets a chance to flatten it.
120
+ */
121
+ exports.RULES = [
122
+ {
123
+ // A spinner rewrites its line with a carriage return; only the last write
124
+ // was ever visible.
125
+ id: "carriage",
126
+ apply: (s) => (s.includes("\r") ? s.slice(s.lastIndexOf("\r") + 1) : s),
127
+ },
128
+ {
129
+ // Belt and braces: NO_COLOR should mean there is nothing here to strip.
130
+ // `no-control-regex` is disabled because matching the escape character is
131
+ // the entire job — there is no way to strip ANSI without naming it.
132
+ id: "ansi",
133
+ apply: (s) => s
134
+ // eslint-disable-next-line no-control-regex
135
+ .replace(/\u001b\[[0-9;?]*[ -/]*[@-~]/g, "")
136
+ // eslint-disable-next-line no-control-regex
137
+ .replace(/\u001b\][^\u0007]*\u0007/g, ""),
138
+ },
139
+ {
140
+ id: "scratch",
141
+ apply: (s, ctx) => ctx.scratch.reduce((acc, root) => acc.split(root).join("~"), s),
142
+ },
143
+ {
144
+ id: "repo",
145
+ apply: (s, ctx) => s.split(ctx.repoRoot).join("."),
146
+ },
147
+ {
148
+ id: "tmp",
149
+ apply: (s) => s.replace(/\/var\/folders\/\S+/g, "/tmp/csda-demo"),
150
+ },
151
+ {
152
+ // A path built by string concatenation would have escaped `scratch`.
153
+ id: "home",
154
+ apply: (s, ctx) => s
155
+ .split(ctx.home)
156
+ .join("~")
157
+ .replace(/\/Users\/[^/\s"']+/g, "~")
158
+ .replace(/\/home\/[^/\s"']+/g, "~"),
159
+ },
160
+ {
161
+ id: "iso",
162
+ apply: (s) => s.replace(/\d{4}-\d{2}-\d{2}T[\d:.-]+Z?/g, PINNED_TIME),
163
+ },
164
+ {
165
+ // Git dates are pinned, but a SHA still depends on tree content, so a
166
+ // template edit would otherwise rewrite every SHA in the file.
167
+ id: "sha",
168
+ apply: (s, ctx) => s.replace(/\b[0-9a-f]{7,40}\b/g, (sha) => {
169
+ let alias = ctx.shas.get(sha);
170
+ if (!alias) {
171
+ alias = (0xc5da000 + ctx.shas.size).toString(16);
172
+ ctx.shas.set(sha, alias);
173
+ }
174
+ return alias;
175
+ }),
176
+ },
177
+ {
178
+ id: "duration",
179
+ apply: (s) => s
180
+ .replace(/duration_ms [\d.]+/g, "duration_ms 1.234")
181
+ .replace(/\b\d+(\.\d+)?ms\b/g, "12ms")
182
+ .replace(/\b\d+\.\d+s\b/g, "1.2s"),
183
+ },
184
+ {
185
+ id: "nodever",
186
+ apply: (s) => s.replace(/\bv(\d+)\.\d+\.\d+\b/g, "v$1.x"),
187
+ },
188
+ {
189
+ id: "hostname",
190
+ apply: (s, ctx) => (ctx.hostname ? s.split(ctx.hostname).join("demo-host") : s),
191
+ },
192
+ {
193
+ id: "trim",
194
+ apply: (s) => s.replace(/[ \t]+$/, ""),
195
+ },
196
+ ];
197
+ function normalise(line, ctx) {
198
+ return exports.RULES.reduce((acc, rule) => rule.apply(acc, ctx), line);
199
+ }
200
+ /**
201
+ * Abort the capture on anything credential-shaped.
202
+ *
203
+ * Redacting silently would let a leaked pattern become normal. The recording is
204
+ * committed, so the only safe behaviour is to fail loudly and let a person look.
205
+ */
206
+ function assertNoSecrets(line, where) {
207
+ const pattern = /(ghp_|gho_|ghs_|github_pat_)[A-Za-z0-9_]{8,}|sk-[A-Za-z0-9]{16,}|AKIA[0-9A-Z]{16}|-----BEGIN [A-Z ]*PRIVATE KEY/;
208
+ if (pattern.test(line)) {
209
+ throw new Error(`credential-shaped string in "${where}" — capture aborted, look at it yourself`);
210
+ }
211
+ }
212
+ // ── Pacing ───────────────────────────────────────────────────────────────────
213
+ /**
214
+ * Computed, never hand-tuned.
215
+ *
216
+ * A hand-edited pace is the kind of edit that turns a recording into a
217
+ * dramatisation, so the test bounds-checks both numbers.
218
+ */
219
+ function pace(lineCount) {
220
+ const hold = 700 + lineCount * 90;
221
+ return { typeMs: 26, holdMs: Math.max(900, Math.min(3600, hold)) };
222
+ }
223
+ // ── Rendering ────────────────────────────────────────────────────────────────
224
+ function escapeHtml(s) {
225
+ return s
226
+ .replace(/&/g, "&amp;")
227
+ .replace(/</g, "&lt;")
228
+ .replace(/>/g, "&gt;")
229
+ .replace(/"/g, "&quot;");
230
+ }
231
+ function promptFor(step) {
232
+ return `${step.cwd} $`;
233
+ }
234
+ /** The transcript as plain text — what a reader would have seen. */
235
+ function renderTranscript(rec) {
236
+ const out = [];
237
+ for (const step of rec.steps) {
238
+ out.push(`${promptFor(step)} ${step.command}`);
239
+ for (const line of step.lines)
240
+ out.push(line.t);
241
+ if (step.truncated)
242
+ out.push(`… ${step.omitted} more lines`);
243
+ out.push("");
244
+ }
245
+ return out.join("\n").trimEnd();
246
+ }
247
+ /**
248
+ * The no-JavaScript fallback, written into `index.html` between sentinels.
249
+ *
250
+ * The player hides this only after its JSON has parsed, so a blocked fetch, a
251
+ * `file://` origin or a schema version it does not know all leave the reader
252
+ * with the complete transcript.
253
+ */
254
+ function renderFallbackHtml(rec) {
255
+ return `<pre class="term__transcript"><code>${escapeHtml(renderTranscript(rec))}\n</code></pre>`;
256
+ }
257
+ // ── Capture ──────────────────────────────────────────────────────────────────
258
+ function buildEnv(scratch) {
259
+ const nodeDir = path.dirname(process.execPath);
260
+ return {
261
+ PATH: [path.join(scratch, "bin"), nodeDir, "/usr/bin", "/bin", "/usr/sbin", "/sbin"].join(":"),
262
+ HOME: scratch,
263
+ TMPDIR: path.join(scratch, "tmp"),
264
+ TZ: "UTC",
265
+ LC_ALL: "C",
266
+ LANG: "C.UTF-8",
267
+ NO_COLOR: "1",
268
+ TERM: "dumb",
269
+ COLUMNS: String(exports.COLS),
270
+ CI: "1",
271
+ GIT_CONFIG_GLOBAL: "/dev/null",
272
+ GIT_CONFIG_SYSTEM: "/dev/null",
273
+ GIT_AUTHOR_NAME: "csda demo",
274
+ GIT_COMMITTER_NAME: "csda demo",
275
+ GIT_AUTHOR_EMAIL: "demo@example.invalid",
276
+ GIT_COMMITTER_EMAIL: "demo@example.invalid",
277
+ GIT_AUTHOR_DATE: "2026-01-01T00:00:00+0000",
278
+ GIT_COMMITTER_DATE: "2026-01-01T00:00:00+0000",
279
+ };
280
+ }
281
+ const CONFIG_YAML = `PROJECT_NAME: Smart Parking
282
+ PROJECT_SLUG: smart-parking
283
+ PROJECT_TYPE: backend
284
+ DOMAIN: parking operations
285
+ STACK: Node 20, Express, PostgreSQL
286
+ API_STYLE: REST with DTO boundaries
287
+ TESTING: node:test
288
+ `;
289
+ const HARNESS_YAML = `harness_version: 1
290
+ agent: 'csda-stub-agent {prompt_file}'
291
+ test_cmd: 'node --test test/*.test.js'
292
+ max_attempts: 1
293
+ `;
294
+ function run(cwd, env, argv) {
295
+ const r = (0, node_child_process_1.spawnSync)(argv[0], argv.slice(1), { cwd, env, encoding: "utf8" });
296
+ if (r.status !== 0) {
297
+ throw new Error(`setup failed: ${argv.join(" ")}\n${r.stdout || ""}${r.stderr || ""}`);
298
+ }
299
+ }
300
+ /**
301
+ * Build the world the beats run in.
302
+ *
303
+ * Nothing here is shown. It exists so that what *is* shown is worth a reader's
304
+ * attention: putting a stub agent on PATH and copying a pack next to the work
305
+ * are both true, and neither is why anyone is on the page.
306
+ */
307
+ function prepare(scratch) {
308
+ const bin = path.join(scratch, "bin");
309
+ fs.mkdirSync(bin, { recursive: true });
310
+ fs.mkdirSync(path.join(scratch, "tmp"), { recursive: true });
311
+ fs.writeFileSync(path.join(bin, "specgate"), `#!/usr/bin/env bash\nexec node "${path.join(ROOT, "bin", "specgate.js")}" "$@"\n`, { mode: 0o755 });
312
+ // Reused, not forked: one deterministic agent, one place to fix it.
313
+ fs.copyFileSync(path.join(ROOT, "scripts", "demo", "stub-agent.sh"), path.join(bin, "csda-stub-agent"));
314
+ fs.chmodSync(path.join(bin, "csda-stub-agent"), 0o755);
315
+ // A local pack rather than a clone: a recording CI can reproduce cannot
316
+ // depend on the network, and `--pack-root` is a documented way to work.
317
+ fs.cpSync(path.join(ROOT, "packs", "multi-tenant"), path.join(scratch, "packs", "multi-tenant"), {
318
+ recursive: true,
319
+ });
320
+ fs.writeFileSync(path.join(scratch, "smart-parking.yaml"), CONFIG_YAML, "utf8");
321
+ }
322
+ /**
323
+ * The repository the harness needs, created between the `plan` and `harness`
324
+ * beats.
325
+ *
326
+ * The harness reads git's own config rather than the environment, and refuses
327
+ * to start without an identity — measured, not assumed, and the reason
328
+ * `git config` appears here as well as in `buildEnv`.
329
+ */
330
+ function projectSetup(scratch, env) {
331
+ const project = path.join(scratch, "smart-parking");
332
+ fs.writeFileSync(path.join(project, "harness.config.yaml"), HARNESS_YAML, "utf8");
333
+ run(project, env, ["git", "init", "-q", "-b", "main", "."]);
334
+ run(project, env, ["git", "config", "user.name", "csda demo"]);
335
+ run(project, env, ["git", "config", "user.email", "demo@example.invalid"]);
336
+ run(project, env, ["git", "add", "-A"]);
337
+ run(project, env, ["git", "commit", "-qm", "initial: specs and the pack"]);
338
+ }
339
+ function truncate(lines, maxLines) {
340
+ if (lines.length <= maxLines)
341
+ return { lines, truncated: false, omitted: 0 };
342
+ return { lines: lines.slice(0, maxLines), truncated: true, omitted: lines.length - maxLines };
343
+ }
344
+ /** The command as a reader should type it, with the scratch path shown as `~`. */
345
+ function displayCommand(beat) {
346
+ if (beat.shell)
347
+ return beat.shell;
348
+ return (beat.argv || [])
349
+ .map((a) => a.replace("{HOME}", "~"))
350
+ .map((a) => (/[ '"$]/.test(a) ? `"${a}"` : a))
351
+ .join(" ");
352
+ }
353
+ function recordTranscript() {
354
+ const scratch = fs.mkdtempSync(path.join(os.tmpdir(), "csda-term-"));
355
+ const env = buildEnv(scratch);
356
+ const ctx = {
357
+ // Longest first, so a prefix never shadows the path it is a prefix of.
358
+ scratch: [...new Set([fs.realpathSync(scratch), scratch])].sort((a, b) => b.length - a.length),
359
+ repoRoot: ROOT,
360
+ home: os.homedir(),
361
+ hostname: os.hostname(),
362
+ shas: new Map(),
363
+ };
364
+ try {
365
+ prepare(scratch);
366
+ const steps = [];
367
+ for (const beat of terminal_storyboard_1.BEATS) {
368
+ if (beat.id === "harness-config")
369
+ projectSetup(scratch, env);
370
+ const cwd = path.join(scratch, beat.cwd);
371
+ const argv = beat.shell
372
+ ? ["bash", "-c", beat.shell]
373
+ : (beat.argv || []).map((a) => a.replace("{HOME}", scratch));
374
+ const r = (0, node_child_process_1.spawnSync)(argv[0], argv.slice(1), {
375
+ cwd,
376
+ env,
377
+ encoding: "utf8",
378
+ stdio: ["ignore", "pipe", "pipe"],
379
+ maxBuffer: 16 * 1024 * 1024,
380
+ });
381
+ if (r.error)
382
+ throw new Error(`${beat.id}: ${r.error.message}`);
383
+ const collect = (raw, stream) => (raw || "")
384
+ .replace(/\r\n/g, "\n")
385
+ .split("\n")
386
+ .map((line) => normalise(line, ctx))
387
+ .map((t) => {
388
+ assertNoSecrets(t, beat.id);
389
+ return { t, c: classify(t), s: stream };
390
+ });
391
+ // stdout and stderr come off two pipes; their real interleaving is not
392
+ // reproducible, so stderr is appended and `streamsMerged: false` says so
393
+ // rather than pretending otherwise.
394
+ const all = [...collect(r.stdout, "out"), ...collect(r.stderr, "err")];
395
+ while (all.length && all[all.length - 1].t.trim() === "")
396
+ all.pop();
397
+ while (all.length && all[0].t.trim() === "")
398
+ all.shift();
399
+ const { lines, truncated, omitted } = truncate(all, beat.maxLines);
400
+ const { typeMs, holdMs } = pace(lines.length);
401
+ steps.push({
402
+ id: beat.id,
403
+ caption: beat.caption,
404
+ cwd: beat.cwd ? `~/${beat.cwd}` : "~",
405
+ command: displayCommand(beat),
406
+ surface: beat.surface,
407
+ exit: r.status === null ? -1 : r.status,
408
+ typeMs,
409
+ holdMs,
410
+ truncated,
411
+ omitted,
412
+ lines,
413
+ });
414
+ }
415
+ const pkg = JSON.parse(fs.readFileSync(path.join(ROOT, "package.json"), "utf8"));
416
+ return {
417
+ schemaVersion: 1,
418
+ recordedWith: {
419
+ version: pkg.version,
420
+ node: process.version.replace(/^v(\d+)\..*/, "v$1.x"),
421
+ platform: process.platform,
422
+ packSource: "local",
423
+ },
424
+ recordedAt: new Date().toISOString().slice(0, 10),
425
+ title: "smart-parking",
426
+ cols: exports.COLS,
427
+ streamsMerged: false,
428
+ steps,
429
+ };
430
+ }
431
+ finally {
432
+ fs.rmSync(scratch, { recursive: true, force: true });
433
+ }
434
+ }
435
+ // ── Writing ──────────────────────────────────────────────────────────────────
436
+ exports.JSON_PATH = path.join(DOCS, "assets", "terminal-demo.json");
437
+ exports.INDEX_PATH = path.join(DOCS, "index.html");
438
+ function serialise(rec) {
439
+ return `${JSON.stringify(rec, null, 2)}\n`;
440
+ }
441
+ function writeRecording(rec) {
442
+ fs.writeFileSync(exports.JSON_PATH, serialise(rec), "utf8");
443
+ const index = fs.readFileSync(exports.INDEX_PATH, "utf8");
444
+ fs.writeFileSync(exports.INDEX_PATH, (0, blocks_1.replaceBlock)(index, "terminal", renderFallbackHtml(rec)), "utf8");
445
+ }
446
+ function main() {
447
+ const check = process.argv.includes("--check");
448
+ const rec = recordTranscript();
449
+ if (!check) {
450
+ writeRecording(rec);
451
+ const bytes = Buffer.byteLength(serialise(rec));
452
+ process.stdout.write(`recorded ${rec.steps.length} steps from v${rec.recordedWith.version} — ` +
453
+ `${(bytes / 1024).toFixed(1)} KB\n`);
454
+ return;
455
+ }
456
+ const problems = [];
457
+ const onDisk = fs.existsSync(exports.JSON_PATH) ? fs.readFileSync(exports.JSON_PATH, "utf8") : "";
458
+ // `recordedAt` is a date, not a claim about the CLI, so a capture on a later
459
+ // day is not staleness. Everything else must match byte for byte.
460
+ const strip = (s) => s.replace(/"recordedAt": "[^"]*"/, '"recordedAt": "-"');
461
+ if (strip(onDisk) !== strip(serialise(rec))) {
462
+ problems.push("docs/assets/terminal-demo.json is out of date — run `npm run docs:terminal`");
463
+ }
464
+ const block = (0, blocks_1.readBlock)(fs.readFileSync(exports.INDEX_PATH, "utf8"), "terminal");
465
+ if ((block || "").trim() !== renderFallbackHtml(rec).trim()) {
466
+ problems.push("the fallback transcript in docs/index.html no longer matches the recording");
467
+ }
468
+ if (problems.length > 0) {
469
+ process.stderr.write(`${problems.join("\n")}\n`);
470
+ process.exitCode = 1;
471
+ return;
472
+ }
473
+ process.stdout.write("the recording is current\n");
474
+ }
475
+ if (require.main === module)
476
+ main();
477
+ //# sourceMappingURL=record-terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-terminal.js","sourceRoot":"","sources":["../../../scripts/docs/record-terminal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ /**
3
+ * What the landing page's terminal shows, declared as data.
4
+ *
5
+ * Read by two things that must not disagree: `record-terminal.ts`, which runs
6
+ * these commands for real and writes the recording, and `docs-terminal.test.ts`,
7
+ * which checks the recording is still of this storyboard and of this CLI.
8
+ *
9
+ * ## Why these nine
10
+ *
11
+ * `scripts/demo/demo.tape` tells the same story in ten beats for a video. A
12
+ * landing page is not a video: it is read beside prose, by someone deciding
13
+ * whether to spend an afternoon on this. So the beats that survive are the ones
14
+ * that answer a question an evaluator actually has —
15
+ *
16
+ * - how much do I have to write? `cat smart-parking.yaml`
17
+ * - what do I get? `init`, `specops add`
18
+ * - what does it think is left to do? `plan`
19
+ * - does it lock me to one AI vendor? `cat harness.config.yaml`
20
+ * - what happens when I let it run? `harness run`
21
+ * - did it touch my specs? `git diff --stat`
22
+ * - is the code real? `node --test`
23
+ * - and is the chain still intact? `validate`
24
+ *
25
+ * — and the beats that only look good in motion are gone.
26
+ *
27
+ * Every one of these was run against the real CLI before being written down.
28
+ * The last beat is `validate` because the page's "The loop" section promises
29
+ * exactly that, and ending there closes the loop the reader just read about.
30
+ */
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.BEATS = void 0;
33
+ exports.BEATS = [
34
+ {
35
+ id: "config",
36
+ caption: "Everything you have to write by hand. Seven lines.",
37
+ cwd: "",
38
+ argv: ["cat", "smart-parking.yaml"],
39
+ surface: null,
40
+ maxLines: 10,
41
+ },
42
+ {
43
+ id: "init",
44
+ caption: "Requirements, Gherkin, a traceability matrix and the rules for agents.",
45
+ cwd: "",
46
+ argv: ["specgate", "init", "--config", "./smart-parking.yaml", "--out", ".", "--no-git"],
47
+ surface: "init",
48
+ maxLines: 14,
49
+ },
50
+ {
51
+ id: "specops-add",
52
+ caption: "A domain pack, installed and pinned. Not copy-pasted.",
53
+ cwd: "smart-parking",
54
+ argv: [
55
+ "specgate",
56
+ "specops",
57
+ "add",
58
+ "--pack-root",
59
+ "{HOME}/packs",
60
+ "--pack",
61
+ "multi-tenant/backend",
62
+ "--var",
63
+ "PROJECT_NAME=Smart Parking",
64
+ "--var",
65
+ "PROJECT_SLUG=smart-parking",
66
+ "--var",
67
+ "DOMAIN=parking operations",
68
+ ],
69
+ surface: "specops add",
70
+ maxLines: 8,
71
+ },
72
+ {
73
+ id: "plan",
74
+ caption: "The queue, derived from the matrix. Nobody maintains this by hand.",
75
+ cwd: "smart-parking",
76
+ argv: ["specgate", "plan"],
77
+ surface: "plan",
78
+ maxLines: 15,
79
+ },
80
+ {
81
+ id: "harness-config",
82
+ caption: "Any CLI that takes a prompt. The tool never talks to a model itself.",
83
+ cwd: "smart-parking",
84
+ argv: ["cat", "harness.config.yaml"],
85
+ surface: null,
86
+ maxLines: 6,
87
+ },
88
+ {
89
+ id: "harness-run",
90
+ caption: "One requirement, one worktree, one agent — and a gate that can say no.",
91
+ cwd: "smart-parking",
92
+ argv: ["specgate", "harness", "run", "--req", "REQ-000"],
93
+ surface: "harness run",
94
+ maxLines: 14,
95
+ },
96
+ {
97
+ id: "diff",
98
+ caption: "What the agent touched. The feature files are not on this list.",
99
+ cwd: "smart-parking",
100
+ argv: ["git", "diff", "--stat", "main", "harness/REQ-000"],
101
+ surface: null,
102
+ maxLines: 8,
103
+ },
104
+ {
105
+ id: "tests",
106
+ caption: "Its own test, on its own branch. Nothing was merged for you.",
107
+ cwd: "smart-parking",
108
+ shell: "git switch -q harness/REQ-000 && node --test test/*.test.js",
109
+ surface: null,
110
+ maxLines: 12,
111
+ },
112
+ {
113
+ id: "validate",
114
+ caption: "And the chain still holds. This is the command CI runs.",
115
+ cwd: "smart-parking",
116
+ argv: ["specgate", "validate", "."],
117
+ surface: "validate",
118
+ maxLines: 8,
119
+ },
120
+ ];
121
+ //# sourceMappingURL=terminal-storyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-storyboard.js","sourceRoot":"","sources":["../../../scripts/docs/terminal-storyboard.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;;;AAwBU,QAAA,KAAK,GAAoB;IACpC;QACE,EAAE,EAAE,QAAQ;QACZ,OAAO,EAAE,oDAAoD;QAC7D,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC;QACnC,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,EAAE;KACb;IACD;QACE,EAAE,EAAE,MAAM;QACV,OAAO,EAAE,wEAAwE;QACjF,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,CAAC;QACxF,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,EAAE;KACb;IACD;QACE,EAAE,EAAE,aAAa;QACjB,OAAO,EAAE,uDAAuD;QAChE,GAAG,EAAE,eAAe;QACpB,IAAI,EAAE;YACJ,UAAU;YACV,SAAS;YACT,KAAK;YACL,aAAa;YACb,cAAc;YACd,QAAQ;YACR,sBAAsB;YACtB,OAAO;YACP,4BAA4B;YAC5B,OAAO;YACP,4BAA4B;YAC5B,OAAO;YACP,2BAA2B;SAC5B;QACD,OAAO,EAAE,aAAa;QACtB,QAAQ,EAAE,CAAC;KACZ;IACD;QACE,EAAE,EAAE,MAAM;QACV,OAAO,EAAE,oEAAoE;QAC7E,GAAG,EAAE,eAAe;QACpB,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC;QAC1B,OAAO,EAAE,MAAM;QACf,QAAQ,EAAE,EAAE;KACb;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,OAAO,EAAE,sEAAsE;QAC/E,GAAG,EAAE,eAAe;QACpB,IAAI,EAAE,CAAC,KAAK,EAAE,qBAAqB,CAAC;QACpC,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,CAAC;KACZ;IACD;QACE,EAAE,EAAE,aAAa;QACjB,OAAO,EAAE,wEAAwE;QACjF,GAAG,EAAE,eAAe;QACpB,IAAI,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC;QACxD,OAAO,EAAE,aAAa;QACtB,QAAQ,EAAE,EAAE;KACb;IACD;QACE,EAAE,EAAE,MAAM;QACV,OAAO,EAAE,iEAAiE;QAC1E,GAAG,EAAE,eAAe;QACpB,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,CAAC;QAC1D,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,CAAC;KACZ;IACD;QACE,EAAE,EAAE,OAAO;QACX,OAAO,EAAE,8DAA8D;QACvE,GAAG,EAAE,eAAe;QACpB,KAAK,EAAE,6DAA6D;QACpE,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,EAAE;KACb;IACD;QACE,EAAE,EAAE,UAAU;QACd,OAAO,EAAE,yDAAyD;QAClE,GAAG,EAAE,eAAe;QACpB,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,CAAC;QACnC,OAAO,EAAE,UAAU;QACnB,QAAQ,EAAE,CAAC;KACZ;CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.DoctorCommand = void 0;
5
+ exports.nodeFloor = nodeFloor;
6
+ const DoctorCommand_1 = require("./cli/commands/quality/DoctorCommand");
7
+ Object.defineProperty(exports, "DoctorCommand", { enumerable: true, get: function () { return DoctorCommand_1.DoctorCommand; } });
8
+ function nodeFloor() {
9
+ return (0, DoctorCommand_1.nodeFloor)();
10
+ }
11
+ if (require.main === module) {
12
+ new DoctorCommand_1.DoctorCommand(process.argv.slice(2)).execute();
13
+ }
14
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../scripts/doctor.ts"],"names":[],"mappings":";;;;AAGA,8BAEC;AAJD,wEAAoG;AAM3F,8FANA,6BAAa,OAMA;AAJtB,SAAgB,SAAS;IACvB,OAAO,IAAA,yBAAgB,GAAE,CAAC;AAC5B,CAAC;AAID,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;IAC5B,IAAI,6BAAa,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AACrD,CAAC"}
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ALLOWED_STATUSES = exports.parseArgs = exports.DoneCommand = void 0;
5
+ exports.setRequirementStatus = setRequirementStatus;
6
+ const DoneCommand_1 = require("./cli/commands/spec/DoneCommand");
7
+ Object.defineProperty(exports, "DoneCommand", { enumerable: true, get: function () { return DoneCommand_1.DoneCommand; } });
8
+ Object.defineProperty(exports, "parseArgs", { enumerable: true, get: function () { return DoneCommand_1.parseArgs; } });
9
+ Object.defineProperty(exports, "ALLOWED_STATUSES", { enumerable: true, get: function () { return DoneCommand_1.ALLOWED_STATUSES; } });
10
+ const TraceabilityMatrix_1 = require("../packages/core/src/domain/TraceabilityMatrix");
11
+ function setRequirementStatus(content, reqId, newStatus) {
12
+ return TraceabilityMatrix_1.TraceabilityMatrix.updateStatus(content, reqId, newStatus);
13
+ }
14
+ if (require.main === module) {
15
+ new DoneCommand_1.DoneCommand(process.argv.slice(2)).execute();
16
+ }
17
+ //# sourceMappingURL=done.js.map