@opensip-cli/fitness 0.1.0

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 (576) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +8 -0
  3. package/README.md +31 -0
  4. package/dist/__tests__/baseline-plane.test.d.ts +12 -0
  5. package/dist/__tests__/baseline-plane.test.d.ts.map +1 -0
  6. package/dist/__tests__/baseline-plane.test.js +63 -0
  7. package/dist/__tests__/baseline-plane.test.js.map +1 -0
  8. package/dist/__tests__/check-utils.test.d.ts +10 -0
  9. package/dist/__tests__/check-utils.test.d.ts.map +1 -0
  10. package/dist/__tests__/check-utils.test.js +193 -0
  11. package/dist/__tests__/check-utils.test.js.map +1 -0
  12. package/dist/__tests__/fingerprint-parity.test.d.ts +14 -0
  13. package/dist/__tests__/fingerprint-parity.test.d.ts.map +1 -0
  14. package/dist/__tests__/fingerprint-parity.test.js +59 -0
  15. package/dist/__tests__/fingerprint-parity.test.js.map +1 -0
  16. package/dist/__tests__/fit-execute-opts.test.d.ts +15 -0
  17. package/dist/__tests__/fit-execute-opts.test.d.ts.map +1 -0
  18. package/dist/__tests__/fit-execute-opts.test.js +124 -0
  19. package/dist/__tests__/fit-execute-opts.test.js.map +1 -0
  20. package/dist/__tests__/public-api.test.d.ts +19 -0
  21. package/dist/__tests__/public-api.test.d.ts.map +1 -0
  22. package/dist/__tests__/public-api.test.js +85 -0
  23. package/dist/__tests__/public-api.test.js.map +1 -0
  24. package/dist/__tests__/tool.test.d.ts +10 -0
  25. package/dist/__tests__/tool.test.d.ts.map +1 -0
  26. package/dist/__tests__/tool.test.js +57 -0
  27. package/dist/__tests__/tool.test.js.map +1 -0
  28. package/dist/baseline-strategy.d.ts +21 -0
  29. package/dist/baseline-strategy.d.ts.map +1 -0
  30. package/dist/baseline-strategy.js +21 -0
  31. package/dist/baseline-strategy.js.map +1 -0
  32. package/dist/check-utils/display.d.ts +52 -0
  33. package/dist/check-utils/display.d.ts.map +1 -0
  34. package/dist/check-utils/display.js +66 -0
  35. package/dist/check-utils/display.js.map +1 -0
  36. package/dist/check-utils/index.d.ts +17 -0
  37. package/dist/check-utils/index.d.ts.map +1 -0
  38. package/dist/check-utils/index.js +13 -0
  39. package/dist/check-utils/index.js.map +1 -0
  40. package/dist/check-utils/path-matching.d.ts +40 -0
  41. package/dist/check-utils/path-matching.d.ts.map +1 -0
  42. package/dist/check-utils/path-matching.js +38 -0
  43. package/dist/check-utils/path-matching.js.map +1 -0
  44. package/dist/check-utils/source-analysis.d.ts +36 -0
  45. package/dist/check-utils/source-analysis.d.ts.map +1 -0
  46. package/dist/check-utils/source-analysis.js +44 -0
  47. package/dist/check-utils/source-analysis.js.map +1 -0
  48. package/dist/check-utils/test-helpers.d.ts +57 -0
  49. package/dist/check-utils/test-helpers.d.ts.map +1 -0
  50. package/dist/check-utils/test-helpers.js +71 -0
  51. package/dist/check-utils/test-helpers.js.map +1 -0
  52. package/dist/cli/__tests__/fit-gate-mode.test.d.ts +14 -0
  53. package/dist/cli/__tests__/fit-gate-mode.test.d.ts.map +1 -0
  54. package/dist/cli/__tests__/fit-gate-mode.test.js +110 -0
  55. package/dist/cli/__tests__/fit-gate-mode.test.js.map +1 -0
  56. package/dist/cli/__tests__/fit-modes-live.test.d.ts +13 -0
  57. package/dist/cli/__tests__/fit-modes-live.test.d.ts.map +1 -0
  58. package/dist/cli/__tests__/fit-modes-live.test.js +182 -0
  59. package/dist/cli/__tests__/fit-modes-live.test.js.map +1 -0
  60. package/dist/cli/__tests__/report-data.test.d.ts +12 -0
  61. package/dist/cli/__tests__/report-data.test.d.ts.map +1 -0
  62. package/dist/cli/__tests__/report-data.test.js +113 -0
  63. package/dist/cli/__tests__/report-data.test.js.map +1 -0
  64. package/dist/cli/fit/__tests__/display-fold.test.d.ts +8 -0
  65. package/dist/cli/fit/__tests__/display-fold.test.d.ts.map +1 -0
  66. package/dist/cli/fit/__tests__/display-fold.test.js +87 -0
  67. package/dist/cli/fit/__tests__/display-fold.test.js.map +1 -0
  68. package/dist/cli/fit/__tests__/gate-resolved-config.test.d.ts +16 -0
  69. package/dist/cli/fit/__tests__/gate-resolved-config.test.d.ts.map +1 -0
  70. package/dist/cli/fit/__tests__/gate-resolved-config.test.js +62 -0
  71. package/dist/cli/fit/__tests__/gate-resolved-config.test.js.map +1 -0
  72. package/dist/cli/fit/check-loader.d.ts +37 -0
  73. package/dist/cli/fit/check-loader.d.ts.map +1 -0
  74. package/dist/cli/fit/check-loader.js +154 -0
  75. package/dist/cli/fit/check-loader.js.map +1 -0
  76. package/dist/cli/fit/config-loader.d.ts +55 -0
  77. package/dist/cli/fit/config-loader.d.ts.map +1 -0
  78. package/dist/cli/fit/config-loader.js +107 -0
  79. package/dist/cli/fit/config-loader.js.map +1 -0
  80. package/dist/cli/fit/display-registry.d.ts +19 -0
  81. package/dist/cli/fit/display-registry.d.ts.map +1 -0
  82. package/dist/cli/fit/display-registry.js +33 -0
  83. package/dist/cli/fit/display-registry.js.map +1 -0
  84. package/dist/cli/fit/envelope-view.d.ts +49 -0
  85. package/dist/cli/fit/envelope-view.d.ts.map +1 -0
  86. package/dist/cli/fit/envelope-view.js +85 -0
  87. package/dist/cli/fit/envelope-view.js.map +1 -0
  88. package/dist/cli/fit/fit-aux-command-specs.d.ts +35 -0
  89. package/dist/cli/fit/fit-aux-command-specs.d.ts.map +1 -0
  90. package/dist/cli/fit/fit-aux-command-specs.js +110 -0
  91. package/dist/cli/fit/fit-aux-command-specs.js.map +1 -0
  92. package/dist/cli/fit/fit-command-spec.d.ts +24 -0
  93. package/dist/cli/fit/fit-command-spec.d.ts.map +1 -0
  94. package/dist/cli/fit/fit-command-spec.js +131 -0
  95. package/dist/cli/fit/fit-command-spec.js.map +1 -0
  96. package/dist/cli/fit/gate-compare-render.d.ts +13 -0
  97. package/dist/cli/fit/gate-compare-render.d.ts.map +1 -0
  98. package/dist/cli/fit/gate-compare-render.js +87 -0
  99. package/dist/cli/fit/gate-compare-render.js.map +1 -0
  100. package/dist/cli/fit/recipe-selector.d.ts +53 -0
  101. package/dist/cli/fit/recipe-selector.d.ts.map +1 -0
  102. package/dist/cli/fit/recipe-selector.js +106 -0
  103. package/dist/cli/fit/recipe-selector.js.map +1 -0
  104. package/dist/cli/fit/recipe-selector.test.d.ts +2 -0
  105. package/dist/cli/fit/recipe-selector.test.d.ts.map +1 -0
  106. package/dist/cli/fit/recipe-selector.test.js +69 -0
  107. package/dist/cli/fit/recipe-selector.test.js.map +1 -0
  108. package/dist/cli/fit/resolved-fitness-config.d.ts +48 -0
  109. package/dist/cli/fit/resolved-fitness-config.d.ts.map +1 -0
  110. package/dist/cli/fit/resolved-fitness-config.js +46 -0
  111. package/dist/cli/fit/resolved-fitness-config.js.map +1 -0
  112. package/dist/cli/fit/result-builders.d.ts +91 -0
  113. package/dist/cli/fit/result-builders.d.ts.map +1 -0
  114. package/dist/cli/fit/result-builders.js +206 -0
  115. package/dist/cli/fit/result-builders.js.map +1 -0
  116. package/dist/cli/fit-list.d.ts +7 -0
  117. package/dist/cli/fit-list.d.ts.map +1 -0
  118. package/dist/cli/fit-list.js +24 -0
  119. package/dist/cli/fit-list.js.map +1 -0
  120. package/dist/cli/fit-modes.d.ts +42 -0
  121. package/dist/cli/fit-modes.d.ts.map +1 -0
  122. package/dist/cli/fit-modes.js +322 -0
  123. package/dist/cli/fit-modes.js.map +1 -0
  124. package/dist/cli/fit-recipes.d.ts +7 -0
  125. package/dist/cli/fit-recipes.d.ts.map +1 -0
  126. package/dist/cli/fit-recipes.js +34 -0
  127. package/dist/cli/fit-recipes.js.map +1 -0
  128. package/dist/cli/fit-runner-views.d.ts +33 -0
  129. package/dist/cli/fit-runner-views.d.ts.map +1 -0
  130. package/dist/cli/fit-runner-views.js +92 -0
  131. package/dist/cli/fit-runner-views.js.map +1 -0
  132. package/dist/cli/fit-runner.d.ts +44 -0
  133. package/dist/cli/fit-runner.d.ts.map +1 -0
  134. package/dist/cli/fit-runner.js +250 -0
  135. package/dist/cli/fit-runner.js.map +1 -0
  136. package/dist/cli/fit-worker.d.ts +26 -0
  137. package/dist/cli/fit-worker.d.ts.map +1 -0
  138. package/dist/cli/fit-worker.js +67 -0
  139. package/dist/cli/fit-worker.js.map +1 -0
  140. package/dist/cli/fit.d.ts +74 -0
  141. package/dist/cli/fit.d.ts.map +1 -0
  142. package/dist/cli/fit.js +149 -0
  143. package/dist/cli/fit.js.map +1 -0
  144. package/dist/cli/report-data.d.ts +44 -0
  145. package/dist/cli/report-data.d.ts.map +1 -0
  146. package/dist/cli/report-data.js +89 -0
  147. package/dist/cli/report-data.js.map +1 -0
  148. package/dist/config/__tests__/fitness-config-schema.test.d.ts +6 -0
  149. package/dist/config/__tests__/fitness-config-schema.test.d.ts.map +1 -0
  150. package/dist/config/__tests__/fitness-config-schema.test.js +37 -0
  151. package/dist/config/__tests__/fitness-config-schema.test.js.map +1 -0
  152. package/dist/config/fitness-config-schema.d.ts +48 -0
  153. package/dist/config/fitness-config-schema.d.ts.map +1 -0
  154. package/dist/config/fitness-config-schema.js +62 -0
  155. package/dist/config/fitness-config-schema.js.map +1 -0
  156. package/dist/framework/__tests__/abortable-exec.test.d.ts +9 -0
  157. package/dist/framework/__tests__/abortable-exec.test.d.ts.map +1 -0
  158. package/dist/framework/__tests__/abortable-exec.test.js +102 -0
  159. package/dist/framework/__tests__/abortable-exec.test.js.map +1 -0
  160. package/dist/framework/__tests__/check-config.test.d.ts +2 -0
  161. package/dist/framework/__tests__/check-config.test.d.ts.map +1 -0
  162. package/dist/framework/__tests__/check-config.test.js +56 -0
  163. package/dist/framework/__tests__/check-config.test.js.map +1 -0
  164. package/dist/framework/__tests__/check-types.test.d.ts +2 -0
  165. package/dist/framework/__tests__/check-types.test.d.ts.map +1 -0
  166. package/dist/framework/__tests__/check-types.test.js +76 -0
  167. package/dist/framework/__tests__/check-types.test.js.map +1 -0
  168. package/dist/framework/__tests__/command-executor.test.d.ts +2 -0
  169. package/dist/framework/__tests__/command-executor.test.d.ts.map +1 -0
  170. package/dist/framework/__tests__/command-executor.test.js +110 -0
  171. package/dist/framework/__tests__/command-executor.test.js.map +1 -0
  172. package/dist/framework/__tests__/content-filter-dispatch.test.d.ts +2 -0
  173. package/dist/framework/__tests__/content-filter-dispatch.test.d.ts.map +1 -0
  174. package/dist/framework/__tests__/content-filter-dispatch.test.js +122 -0
  175. package/dist/framework/__tests__/content-filter-dispatch.test.js.map +1 -0
  176. package/dist/framework/__tests__/define-check.test.d.ts +2 -0
  177. package/dist/framework/__tests__/define-check.test.d.ts.map +1 -0
  178. package/dist/framework/__tests__/define-check.test.js +402 -0
  179. package/dist/framework/__tests__/define-check.test.js.map +1 -0
  180. package/dist/framework/__tests__/define-regex-list-check.test.d.ts +15 -0
  181. package/dist/framework/__tests__/define-regex-list-check.test.d.ts.map +1 -0
  182. package/dist/framework/__tests__/define-regex-list-check.test.js +299 -0
  183. package/dist/framework/__tests__/define-regex-list-check.test.js.map +1 -0
  184. package/dist/framework/__tests__/directive-inventory.test.d.ts +2 -0
  185. package/dist/framework/__tests__/directive-inventory.test.d.ts.map +1 -0
  186. package/dist/framework/__tests__/directive-inventory.test.js +111 -0
  187. package/dist/framework/__tests__/directive-inventory.test.js.map +1 -0
  188. package/dist/framework/__tests__/directive-parsing.test.d.ts +13 -0
  189. package/dist/framework/__tests__/directive-parsing.test.d.ts.map +1 -0
  190. package/dist/framework/__tests__/directive-parsing.test.js +86 -0
  191. package/dist/framework/__tests__/directive-parsing.test.js.map +1 -0
  192. package/dist/framework/__tests__/execution-context.globalexcludes-parity.test.d.ts +2 -0
  193. package/dist/framework/__tests__/execution-context.globalexcludes-parity.test.d.ts.map +1 -0
  194. package/dist/framework/__tests__/execution-context.globalexcludes-parity.test.js +56 -0
  195. package/dist/framework/__tests__/execution-context.globalexcludes-parity.test.js.map +1 -0
  196. package/dist/framework/__tests__/execution-context.test.d.ts +2 -0
  197. package/dist/framework/__tests__/execution-context.test.d.ts.map +1 -0
  198. package/dist/framework/__tests__/execution-context.test.js +140 -0
  199. package/dist/framework/__tests__/execution-context.test.js.map +1 -0
  200. package/dist/framework/__tests__/file-accessor.test.d.ts +2 -0
  201. package/dist/framework/__tests__/file-accessor.test.d.ts.map +1 -0
  202. package/dist/framework/__tests__/file-accessor.test.js +106 -0
  203. package/dist/framework/__tests__/file-accessor.test.js.map +1 -0
  204. package/dist/framework/__tests__/file-cache.test.d.ts +2 -0
  205. package/dist/framework/__tests__/file-cache.test.d.ts.map +1 -0
  206. package/dist/framework/__tests__/file-cache.test.js +122 -0
  207. package/dist/framework/__tests__/file-cache.test.js.map +1 -0
  208. package/dist/framework/__tests__/file-type-filter.test.d.ts +9 -0
  209. package/dist/framework/__tests__/file-type-filter.test.d.ts.map +1 -0
  210. package/dist/framework/__tests__/file-type-filter.test.js +39 -0
  211. package/dist/framework/__tests__/file-type-filter.test.js.map +1 -0
  212. package/dist/framework/__tests__/ignore-processing.test.d.ts +11 -0
  213. package/dist/framework/__tests__/ignore-processing.test.d.ts.map +1 -0
  214. package/dist/framework/__tests__/ignore-processing.test.js +175 -0
  215. package/dist/framework/__tests__/ignore-processing.test.js.map +1 -0
  216. package/dist/framework/__tests__/import-graph.test.d.ts +15 -0
  217. package/dist/framework/__tests__/import-graph.test.d.ts.map +1 -0
  218. package/dist/framework/__tests__/import-graph.test.js +164 -0
  219. package/dist/framework/__tests__/import-graph.test.js.map +1 -0
  220. package/dist/framework/__tests__/memory-profiler.test.d.ts +9 -0
  221. package/dist/framework/__tests__/memory-profiler.test.d.ts.map +1 -0
  222. package/dist/framework/__tests__/memory-profiler.test.js +108 -0
  223. package/dist/framework/__tests__/memory-profiler.test.js.map +1 -0
  224. package/dist/framework/__tests__/parse-cache.test.d.ts +9 -0
  225. package/dist/framework/__tests__/parse-cache.test.d.ts.map +1 -0
  226. package/dist/framework/__tests__/parse-cache.test.js +51 -0
  227. package/dist/framework/__tests__/parse-cache.test.js.map +1 -0
  228. package/dist/framework/__tests__/path-matcher.test.d.ts +2 -0
  229. package/dist/framework/__tests__/path-matcher.test.d.ts.map +1 -0
  230. package/dist/framework/__tests__/path-matcher.test.js +113 -0
  231. package/dist/framework/__tests__/path-matcher.test.js.map +1 -0
  232. package/dist/framework/__tests__/register-helpers.test.d.ts +2 -0
  233. package/dist/framework/__tests__/register-helpers.test.d.ts.map +1 -0
  234. package/dist/framework/__tests__/register-helpers.test.js +51 -0
  235. package/dist/framework/__tests__/register-helpers.test.js.map +1 -0
  236. package/dist/framework/__tests__/registry.test.d.ts +2 -0
  237. package/dist/framework/__tests__/registry.test.d.ts.map +1 -0
  238. package/dist/framework/__tests__/registry.test.js +211 -0
  239. package/dist/framework/__tests__/registry.test.js.map +1 -0
  240. package/dist/framework/__tests__/result-builder.test.d.ts +2 -0
  241. package/dist/framework/__tests__/result-builder.test.d.ts.map +1 -0
  242. package/dist/framework/__tests__/result-builder.test.js +153 -0
  243. package/dist/framework/__tests__/result-builder.test.js.map +1 -0
  244. package/dist/framework/__tests__/scope-registry.test.d.ts +8 -0
  245. package/dist/framework/__tests__/scope-registry.test.d.ts.map +1 -0
  246. package/dist/framework/__tests__/scope-registry.test.js +156 -0
  247. package/dist/framework/__tests__/scope-registry.test.js.map +1 -0
  248. package/dist/framework/__tests__/scope-resolver.golden.test.d.ts +2 -0
  249. package/dist/framework/__tests__/scope-resolver.golden.test.d.ts.map +1 -0
  250. package/dist/framework/__tests__/scope-resolver.golden.test.js +105 -0
  251. package/dist/framework/__tests__/scope-resolver.golden.test.js.map +1 -0
  252. package/dist/framework/__tests__/scope-resolver.test.d.ts +2 -0
  253. package/dist/framework/__tests__/scope-resolver.test.d.ts.map +1 -0
  254. package/dist/framework/__tests__/scope-resolver.test.js +150 -0
  255. package/dist/framework/__tests__/scope-resolver.test.js.map +1 -0
  256. package/dist/framework/__tests__/severity-mapping.test.d.ts +2 -0
  257. package/dist/framework/__tests__/severity-mapping.test.d.ts.map +1 -0
  258. package/dist/framework/__tests__/severity-mapping.test.js +74 -0
  259. package/dist/framework/__tests__/severity-mapping.test.js.map +1 -0
  260. package/dist/framework/__tests__/strip-literals.test.d.ts +2 -0
  261. package/dist/framework/__tests__/strip-literals.test.d.ts.map +1 -0
  262. package/dist/framework/__tests__/strip-literals.test.js +87 -0
  263. package/dist/framework/__tests__/strip-literals.test.js.map +1 -0
  264. package/dist/framework/abortable-exec.d.ts +34 -0
  265. package/dist/framework/abortable-exec.d.ts.map +1 -0
  266. package/dist/framework/abortable-exec.js +143 -0
  267. package/dist/framework/abortable-exec.js.map +1 -0
  268. package/dist/framework/check-config.d.ts +175 -0
  269. package/dist/framework/check-config.d.ts.map +1 -0
  270. package/dist/framework/check-config.js +115 -0
  271. package/dist/framework/check-config.js.map +1 -0
  272. package/dist/framework/check-types.d.ts +82 -0
  273. package/dist/framework/check-types.d.ts.map +1 -0
  274. package/dist/framework/check-types.js +63 -0
  275. package/dist/framework/check-types.js.map +1 -0
  276. package/dist/framework/command-executor.d.ts +25 -0
  277. package/dist/framework/command-executor.d.ts.map +1 -0
  278. package/dist/framework/command-executor.js +63 -0
  279. package/dist/framework/command-executor.js.map +1 -0
  280. package/dist/framework/comment-openers.d.ts +11 -0
  281. package/dist/framework/comment-openers.d.ts.map +1 -0
  282. package/dist/framework/comment-openers.js +11 -0
  283. package/dist/framework/comment-openers.js.map +1 -0
  284. package/dist/framework/constants.d.ts +9 -0
  285. package/dist/framework/constants.d.ts.map +1 -0
  286. package/dist/framework/constants.js +16 -0
  287. package/dist/framework/constants.js.map +1 -0
  288. package/dist/framework/define-check.d.ts +38 -0
  289. package/dist/framework/define-check.d.ts.map +1 -0
  290. package/dist/framework/define-check.js +296 -0
  291. package/dist/framework/define-check.js.map +1 -0
  292. package/dist/framework/define-regex-list-check.d.ts +160 -0
  293. package/dist/framework/define-regex-list-check.d.ts.map +1 -0
  294. package/dist/framework/define-regex-list-check.js +177 -0
  295. package/dist/framework/define-regex-list-check.js.map +1 -0
  296. package/dist/framework/directive-inventory.d.ts +37 -0
  297. package/dist/framework/directive-inventory.d.ts.map +1 -0
  298. package/dist/framework/directive-inventory.js +82 -0
  299. package/dist/framework/directive-inventory.js.map +1 -0
  300. package/dist/framework/directive-parsing.d.ts +23 -0
  301. package/dist/framework/directive-parsing.d.ts.map +1 -0
  302. package/dist/framework/directive-parsing.js +39 -0
  303. package/dist/framework/directive-parsing.js.map +1 -0
  304. package/dist/framework/execution-context.d.ts +98 -0
  305. package/dist/framework/execution-context.d.ts.map +1 -0
  306. package/dist/framework/execution-context.js +145 -0
  307. package/dist/framework/execution-context.js.map +1 -0
  308. package/dist/framework/file-accessor.d.ts +20 -0
  309. package/dist/framework/file-accessor.d.ts.map +1 -0
  310. package/dist/framework/file-accessor.js +122 -0
  311. package/dist/framework/file-accessor.js.map +1 -0
  312. package/dist/framework/file-cache.d.ts +70 -0
  313. package/dist/framework/file-cache.d.ts.map +1 -0
  314. package/dist/framework/file-cache.js +199 -0
  315. package/dist/framework/file-cache.js.map +1 -0
  316. package/dist/framework/file-type-filter.d.ts +11 -0
  317. package/dist/framework/file-type-filter.d.ts.map +1 -0
  318. package/dist/framework/file-type-filter.js +21 -0
  319. package/dist/framework/file-type-filter.js.map +1 -0
  320. package/dist/framework/ignore-processing.d.ts +36 -0
  321. package/dist/framework/ignore-processing.d.ts.map +1 -0
  322. package/dist/framework/ignore-processing.js +172 -0
  323. package/dist/framework/ignore-processing.js.map +1 -0
  324. package/dist/framework/import-graph.d.ts +51 -0
  325. package/dist/framework/import-graph.d.ts.map +1 -0
  326. package/dist/framework/import-graph.js +217 -0
  327. package/dist/framework/import-graph.js.map +1 -0
  328. package/dist/framework/memory-profiler.d.ts +53 -0
  329. package/dist/framework/memory-profiler.d.ts.map +1 -0
  330. package/dist/framework/memory-profiler.js +92 -0
  331. package/dist/framework/memory-profiler.js.map +1 -0
  332. package/dist/framework/parse-cache.d.ts +24 -0
  333. package/dist/framework/parse-cache.d.ts.map +1 -0
  334. package/dist/framework/parse-cache.js +41 -0
  335. package/dist/framework/parse-cache.js.map +1 -0
  336. package/dist/framework/path-matcher.d.ts +86 -0
  337. package/dist/framework/path-matcher.d.ts.map +1 -0
  338. package/dist/framework/path-matcher.js +138 -0
  339. package/dist/framework/path-matcher.js.map +1 -0
  340. package/dist/framework/register-helpers.d.ts +11 -0
  341. package/dist/framework/register-helpers.d.ts.map +1 -0
  342. package/dist/framework/register-helpers.js +19 -0
  343. package/dist/framework/register-helpers.js.map +1 -0
  344. package/dist/framework/registry.d.ts +51 -0
  345. package/dist/framework/registry.d.ts.map +1 -0
  346. package/dist/framework/registry.js +131 -0
  347. package/dist/framework/registry.js.map +1 -0
  348. package/dist/framework/result-builder.d.ts +74 -0
  349. package/dist/framework/result-builder.d.ts.map +1 -0
  350. package/dist/framework/result-builder.js +154 -0
  351. package/dist/framework/result-builder.js.map +1 -0
  352. package/dist/framework/scope-registry.d.ts +38 -0
  353. package/dist/framework/scope-registry.d.ts.map +1 -0
  354. package/dist/framework/scope-registry.js +77 -0
  355. package/dist/framework/scope-registry.js.map +1 -0
  356. package/dist/framework/scope-resolver.d.ts +23 -0
  357. package/dist/framework/scope-resolver.d.ts.map +1 -0
  358. package/dist/framework/scope-resolver.js +102 -0
  359. package/dist/framework/scope-resolver.js.map +1 -0
  360. package/dist/framework/severity-mapping.d.ts +17 -0
  361. package/dist/framework/severity-mapping.d.ts.map +1 -0
  362. package/dist/framework/severity-mapping.js +71 -0
  363. package/dist/framework/severity-mapping.js.map +1 -0
  364. package/dist/framework/strip-literals.d.ts +73 -0
  365. package/dist/framework/strip-literals.d.ts.map +1 -0
  366. package/dist/framework/strip-literals.js +213 -0
  367. package/dist/framework/strip-literals.js.map +1 -0
  368. package/dist/index.d.ts +47 -0
  369. package/dist/index.d.ts.map +1 -0
  370. package/dist/index.js +64 -0
  371. package/dist/index.js.map +1 -0
  372. package/dist/internal.d.ts +17 -0
  373. package/dist/internal.d.ts.map +1 -0
  374. package/dist/internal.js +17 -0
  375. package/dist/internal.js.map +1 -0
  376. package/dist/persistence/session-payload.d.ts +68 -0
  377. package/dist/persistence/session-payload.d.ts.map +1 -0
  378. package/dist/persistence/session-payload.js +78 -0
  379. package/dist/persistence/session-payload.js.map +1 -0
  380. package/dist/persistence/session-payload.test.d.ts +11 -0
  381. package/dist/persistence/session-payload.test.d.ts.map +1 -0
  382. package/dist/persistence/session-payload.test.js +80 -0
  383. package/dist/persistence/session-payload.test.js.map +1 -0
  384. package/dist/persistence/session-replay.d.ts +14 -0
  385. package/dist/persistence/session-replay.d.ts.map +1 -0
  386. package/dist/persistence/session-replay.js +85 -0
  387. package/dist/persistence/session-replay.js.map +1 -0
  388. package/dist/persistence/session-replay.test.d.ts +10 -0
  389. package/dist/persistence/session-replay.test.d.ts.map +1 -0
  390. package/dist/persistence/session-replay.test.js +171 -0
  391. package/dist/persistence/session-replay.test.js.map +1 -0
  392. package/dist/plugins/__tests__/check-package-discovery.test.d.ts +2 -0
  393. package/dist/plugins/__tests__/check-package-discovery.test.d.ts.map +1 -0
  394. package/dist/plugins/__tests__/check-package-discovery.test.js +48 -0
  395. package/dist/plugins/__tests__/check-package-discovery.test.js.map +1 -0
  396. package/dist/plugins/__tests__/lang-domain.test.d.ts +2 -0
  397. package/dist/plugins/__tests__/lang-domain.test.d.ts.map +1 -0
  398. package/dist/plugins/__tests__/lang-domain.test.js +192 -0
  399. package/dist/plugins/__tests__/lang-domain.test.js.map +1 -0
  400. package/dist/plugins/__tests__/loader.test.d.ts +2 -0
  401. package/dist/plugins/__tests__/loader.test.d.ts.map +1 -0
  402. package/dist/plugins/__tests__/loader.test.js +271 -0
  403. package/dist/plugins/__tests__/loader.test.js.map +1 -0
  404. package/dist/plugins/check-package-discovery.d.ts +19 -0
  405. package/dist/plugins/check-package-discovery.d.ts.map +1 -0
  406. package/dist/plugins/check-package-discovery.js +34 -0
  407. package/dist/plugins/check-package-discovery.js.map +1 -0
  408. package/dist/plugins/loader.d.ts +32 -0
  409. package/dist/plugins/loader.d.ts.map +1 -0
  410. package/dist/plugins/loader.js +198 -0
  411. package/dist/plugins/loader.js.map +1 -0
  412. package/dist/plugins/types.d.ts +29 -0
  413. package/dist/plugins/types.d.ts.map +1 -0
  414. package/dist/plugins/types.js +9 -0
  415. package/dist/plugins/types.js.map +1 -0
  416. package/dist/recipes/__tests__/built-in-recipes.test.d.ts +2 -0
  417. package/dist/recipes/__tests__/built-in-recipes.test.d.ts.map +1 -0
  418. package/dist/recipes/__tests__/built-in-recipes.test.js +93 -0
  419. package/dist/recipes/__tests__/built-in-recipes.test.js.map +1 -0
  420. package/dist/recipes/__tests__/check-config.test.d.ts +12 -0
  421. package/dist/recipes/__tests__/check-config.test.d.ts.map +1 -0
  422. package/dist/recipes/__tests__/check-config.test.js +90 -0
  423. package/dist/recipes/__tests__/check-config.test.js.map +1 -0
  424. package/dist/recipes/__tests__/check-resolution.test.d.ts +2 -0
  425. package/dist/recipes/__tests__/check-resolution.test.d.ts.map +1 -0
  426. package/dist/recipes/__tests__/check-resolution.test.js +160 -0
  427. package/dist/recipes/__tests__/check-resolution.test.js.map +1 -0
  428. package/dist/recipes/__tests__/execution-branches.test.d.ts +10 -0
  429. package/dist/recipes/__tests__/execution-branches.test.d.ts.map +1 -0
  430. package/dist/recipes/__tests__/execution-branches.test.js +612 -0
  431. package/dist/recipes/__tests__/execution-branches.test.js.map +1 -0
  432. package/dist/recipes/__tests__/execution-paths.test.d.ts +10 -0
  433. package/dist/recipes/__tests__/execution-paths.test.d.ts.map +1 -0
  434. package/dist/recipes/__tests__/execution-paths.test.js +280 -0
  435. package/dist/recipes/__tests__/execution-paths.test.js.map +1 -0
  436. package/dist/recipes/__tests__/registry.test.d.ts +2 -0
  437. package/dist/recipes/__tests__/registry.test.d.ts.map +1 -0
  438. package/dist/recipes/__tests__/registry.test.js +89 -0
  439. package/dist/recipes/__tests__/registry.test.js.map +1 -0
  440. package/dist/recipes/__tests__/retry.test.d.ts +2 -0
  441. package/dist/recipes/__tests__/retry.test.d.ts.map +1 -0
  442. package/dist/recipes/__tests__/retry.test.js +75 -0
  443. package/dist/recipes/__tests__/retry.test.js.map +1 -0
  444. package/dist/recipes/__tests__/run-one-check.test.d.ts +14 -0
  445. package/dist/recipes/__tests__/run-one-check.test.d.ts.map +1 -0
  446. package/dist/recipes/__tests__/run-one-check.test.js +182 -0
  447. package/dist/recipes/__tests__/run-one-check.test.js.map +1 -0
  448. package/dist/recipes/__tests__/service.test.d.ts +11 -0
  449. package/dist/recipes/__tests__/service.test.d.ts.map +1 -0
  450. package/dist/recipes/__tests__/service.test.js +572 -0
  451. package/dist/recipes/__tests__/service.test.js.map +1 -0
  452. package/dist/recipes/built-in-recipes.d.ts +14 -0
  453. package/dist/recipes/built-in-recipes.d.ts.map +1 -0
  454. package/dist/recipes/built-in-recipes.js +241 -0
  455. package/dist/recipes/built-in-recipes.js.map +1 -0
  456. package/dist/recipes/check-config.d.ts +56 -0
  457. package/dist/recipes/check-config.d.ts.map +1 -0
  458. package/dist/recipes/check-config.js +61 -0
  459. package/dist/recipes/check-config.js.map +1 -0
  460. package/dist/recipes/check-resolution.d.ts +36 -0
  461. package/dist/recipes/check-resolution.d.ts.map +1 -0
  462. package/dist/recipes/check-resolution.js +81 -0
  463. package/dist/recipes/check-resolution.js.map +1 -0
  464. package/dist/recipes/check-result-processor.d.ts +51 -0
  465. package/dist/recipes/check-result-processor.d.ts.map +1 -0
  466. package/dist/recipes/check-result-processor.js +197 -0
  467. package/dist/recipes/check-result-processor.js.map +1 -0
  468. package/dist/recipes/parallel-execution.d.ts +38 -0
  469. package/dist/recipes/parallel-execution.d.ts.map +1 -0
  470. package/dist/recipes/parallel-execution.js +61 -0
  471. package/dist/recipes/parallel-execution.js.map +1 -0
  472. package/dist/recipes/registry.d.ts +47 -0
  473. package/dist/recipes/registry.d.ts.map +1 -0
  474. package/dist/recipes/registry.js +70 -0
  475. package/dist/recipes/registry.js.map +1 -0
  476. package/dist/recipes/retry.d.ts +29 -0
  477. package/dist/recipes/retry.d.ts.map +1 -0
  478. package/dist/recipes/retry.js +23 -0
  479. package/dist/recipes/retry.js.map +1 -0
  480. package/dist/recipes/run-one-check.d.ts +59 -0
  481. package/dist/recipes/run-one-check.d.ts.map +1 -0
  482. package/dist/recipes/run-one-check.js +174 -0
  483. package/dist/recipes/run-one-check.js.map +1 -0
  484. package/dist/recipes/sequential-execution.d.ts +12 -0
  485. package/dist/recipes/sequential-execution.d.ts.map +1 -0
  486. package/dist/recipes/sequential-execution.js +48 -0
  487. package/dist/recipes/sequential-execution.js.map +1 -0
  488. package/dist/recipes/service-types.d.ts +87 -0
  489. package/dist/recipes/service-types.d.ts.map +1 -0
  490. package/dist/recipes/service-types.js +8 -0
  491. package/dist/recipes/service-types.js.map +1 -0
  492. package/dist/recipes/service.d.ts +73 -0
  493. package/dist/recipes/service.d.ts.map +1 -0
  494. package/dist/recipes/service.js +438 -0
  495. package/dist/recipes/service.js.map +1 -0
  496. package/dist/recipes/types.d.ts +155 -0
  497. package/dist/recipes/types.d.ts.map +1 -0
  498. package/dist/recipes/types.js +56 -0
  499. package/dist/recipes/types.js.map +1 -0
  500. package/dist/scaffold/config-block.d.ts +17 -0
  501. package/dist/scaffold/config-block.d.ts.map +1 -0
  502. package/dist/scaffold/config-block.js +30 -0
  503. package/dist/scaffold/config-block.js.map +1 -0
  504. package/dist/scaffold/examples.d.ts +30 -0
  505. package/dist/scaffold/examples.d.ts.map +1 -0
  506. package/dist/scaffold/examples.js +129 -0
  507. package/dist/scaffold/examples.js.map +1 -0
  508. package/dist/scope-augmentation.d.ts +77 -0
  509. package/dist/scope-augmentation.d.ts.map +1 -0
  510. package/dist/scope-augmentation.js +31 -0
  511. package/dist/scope-augmentation.js.map +1 -0
  512. package/dist/signalers/__tests__/loader.test.d.ts +2 -0
  513. package/dist/signalers/__tests__/loader.test.d.ts.map +1 -0
  514. package/dist/signalers/__tests__/loader.test.js +141 -0
  515. package/dist/signalers/__tests__/loader.test.js.map +1 -0
  516. package/dist/signalers/__tests__/violation-to-signal.test.d.ts +2 -0
  517. package/dist/signalers/__tests__/violation-to-signal.test.d.ts.map +1 -0
  518. package/dist/signalers/__tests__/violation-to-signal.test.js +59 -0
  519. package/dist/signalers/__tests__/violation-to-signal.test.js.map +1 -0
  520. package/dist/signalers/index.d.ts +8 -0
  521. package/dist/signalers/index.d.ts.map +1 -0
  522. package/dist/signalers/index.js +9 -0
  523. package/dist/signalers/index.js.map +1 -0
  524. package/dist/signalers/loader.d.ts +30 -0
  525. package/dist/signalers/loader.d.ts.map +1 -0
  526. package/dist/signalers/loader.js +120 -0
  527. package/dist/signalers/loader.js.map +1 -0
  528. package/dist/signalers/schema.d.ts +60 -0
  529. package/dist/signalers/schema.d.ts.map +1 -0
  530. package/dist/signalers/schema.js +74 -0
  531. package/dist/signalers/schema.js.map +1 -0
  532. package/dist/signalers/types.d.ts +13 -0
  533. package/dist/signalers/types.d.ts.map +1 -0
  534. package/dist/signalers/types.js +5 -0
  535. package/dist/signalers/types.js.map +1 -0
  536. package/dist/signalers/violation-to-signal.d.ts +38 -0
  537. package/dist/signalers/violation-to-signal.d.ts.map +1 -0
  538. package/dist/signalers/violation-to-signal.js +43 -0
  539. package/dist/signalers/violation-to-signal.js.map +1 -0
  540. package/dist/targets/__tests__/loader.test.d.ts +2 -0
  541. package/dist/targets/__tests__/loader.test.d.ts.map +1 -0
  542. package/dist/targets/__tests__/loader.test.js +190 -0
  543. package/dist/targets/__tests__/loader.test.js.map +1 -0
  544. package/dist/targets/__tests__/target-registry.test.d.ts +2 -0
  545. package/dist/targets/__tests__/target-registry.test.d.ts.map +1 -0
  546. package/dist/targets/__tests__/target-registry.test.js +182 -0
  547. package/dist/targets/__tests__/target-registry.test.js.map +1 -0
  548. package/dist/targets/index.d.ts +18 -0
  549. package/dist/targets/index.d.ts.map +1 -0
  550. package/dist/targets/index.js +21 -0
  551. package/dist/targets/index.js.map +1 -0
  552. package/dist/targets/loader.d.ts +27 -0
  553. package/dist/targets/loader.d.ts.map +1 -0
  554. package/dist/targets/loader.js +178 -0
  555. package/dist/targets/loader.js.map +1 -0
  556. package/dist/targets/target-registry.d.ts +41 -0
  557. package/dist/targets/target-registry.d.ts.map +1 -0
  558. package/dist/targets/target-registry.js +71 -0
  559. package/dist/targets/target-registry.js.map +1 -0
  560. package/dist/targets/types.d.ts +14 -0
  561. package/dist/targets/types.d.ts.map +1 -0
  562. package/dist/targets/types.js +14 -0
  563. package/dist/targets/types.js.map +1 -0
  564. package/dist/tool.d.ts +61 -0
  565. package/dist/tool.d.ts.map +1 -0
  566. package/dist/tool.js +260 -0
  567. package/dist/tool.js.map +1 -0
  568. package/dist/types/findings.d.ts +113 -0
  569. package/dist/types/findings.d.ts.map +1 -0
  570. package/dist/types/findings.js +89 -0
  571. package/dist/types/findings.js.map +1 -0
  572. package/dist/types/severity.d.ts +15 -0
  573. package/dist/types/severity.d.ts.map +1 -0
  574. package/dist/types/severity.js +33 -0
  575. package/dist/types/severity.js.map +1 -0
  576. package/package.json +137 -0
@@ -0,0 +1,56 @@
1
+ // @fitness-ignore-file module-coupling-metrics -- type definition module: exports are related interfaces/types for the recipe execution domain
2
+ /**
3
+ * @fileoverview Core types for fitness recipes
4
+ *
5
+ * Defines FitnessRecipe, CheckSelector, RecipeCheckResult, and related
6
+ * types used throughout the recipe execution system.
7
+ */
8
+ import os from 'node:os';
9
+ import { deriveRecipeId } from '@opensip-cli/core';
10
+ /** Default maximum parallelism based on available CPU cores */
11
+ export const DEFAULT_MAX_PARALLEL = os.availableParallelism?.() ?? os.cpus().length;
12
+ /** Default execution options applied when not overridden by a recipe */
13
+ const DEFAULT_EXECUTION_OPTIONS = {
14
+ mode: 'parallel',
15
+ stopOnFirstFailure: false,
16
+ timeout: 30_000,
17
+ maxParallel: DEFAULT_MAX_PARALLEL,
18
+ };
19
+ /** Return the effective max parallelism for a recipe, falling back to the system default */
20
+ export function getEffectiveMaxParallel(recipe) {
21
+ return recipe.execution.maxParallel ?? DEFAULT_MAX_PARALLEL;
22
+ }
23
+ /** Default reporting options applied when not overridden by a recipe */
24
+ const DEFAULT_REPORTING_OPTIONS = {
25
+ format: 'table',
26
+ verbose: false,
27
+ };
28
+ /** Create a frozen FitnessRecipe from a definition, applying defaults for missing options */
29
+ export function defineRecipe(definition) {
30
+ // Release 2.13.0 (§5.8): one shared `<prefix>_<name>` derivation (id unchanged).
31
+ const id = deriveRecipeId('RCP', definition.name);
32
+ const recipe = {
33
+ id,
34
+ name: definition.name,
35
+ displayName: definition.displayName,
36
+ description: definition.description,
37
+ checks: definition.checks,
38
+ execution: {
39
+ ...DEFAULT_EXECUTION_OPTIONS,
40
+ ...definition.execution,
41
+ },
42
+ reporting: {
43
+ ...DEFAULT_REPORTING_OPTIONS,
44
+ ...definition.reporting,
45
+ },
46
+ };
47
+ if (definition.tags || definition.includeDisabled) {
48
+ return Object.freeze({
49
+ ...recipe,
50
+ ...(definition.tags ? { tags: definition.tags } : {}),
51
+ ...(definition.includeDisabled ? { includeDisabled: definition.includeDisabled } : {}),
52
+ });
53
+ }
54
+ return Object.freeze(recipe);
55
+ }
56
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/recipes/types.ts"],"names":[],"mappings":"AAAA,+IAA+I;AAC/I;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA2LnD,+DAA+D;AAC/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;AAEpF,wEAAwE;AACxE,MAAM,yBAAyB,GAA4B;IACzD,IAAI,EAAE,UAAU;IAChB,kBAAkB,EAAE,KAAK;IACzB,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,oBAAoB;CACzB,CAAC;AAEX,4FAA4F;AAC5F,MAAM,UAAU,uBAAuB,CAAC,MAAqB;IAC3D,OAAO,MAAM,CAAC,SAAS,CAAC,WAAW,IAAI,oBAAoB,CAAC;AAC9D,CAAC;AAED,wEAAwE;AACxE,MAAM,yBAAyB,GAA4B;IACzD,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,KAAK;CACN,CAAC;AAEX,6FAA6F;AAC7F,MAAM,UAAU,YAAY,CAAC,UAAmC;IAC9D,iFAAiF;IACjF,MAAM,EAAE,GAAG,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;IAElD,MAAM,MAAM,GAAkB;QAC5B,EAAE;QACF,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,WAAW,EAAE,UAAU,CAAC,WAAW;QACnC,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,SAAS,EAAE;YACT,GAAG,yBAAyB;YAC5B,GAAG,UAAU,CAAC,SAAS;SACxB;QACD,SAAS,EAAE;YACT,GAAG,yBAAyB;YAC5B,GAAG,UAAU,CAAC,SAAS;SACxB;KACF,CAAC;IAEF,IAAI,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,eAAe,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,GAAG,MAAM;YACT,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The `fitness:` block fitness contributes to the scaffolded
3
+ * `opensip-cli.config.yml` (ADR-0038, Tool.scaffoldConfigBlock).
4
+ *
5
+ * Relocated verbatim from the CLI's `config-templates.ts` (the legacy
6
+ * `fitnessBlock` literal). The CLI's `generateConfig` keeps rendering the
7
+ * document header + `targets:` (host-owned, ADR-0023 §schema), and appends
8
+ * each tool's `scaffoldConfigBlock()` — fitness owns its own block bytes.
9
+ *
10
+ * Why a string literal rather than rendering from `fitnessConfigDeclaration.defaults`:
11
+ * the block carries inline guidance comments (`# fail if total errors >= this …`)
12
+ * that the bare defaults object cannot express. ADR-0038 Decision 2 reserved the
13
+ * `scaffoldConfigBlock` escape hatch for exactly this; the byte-exact init golden
14
+ * forces it.
15
+ */
16
+ export declare function fitScaffoldConfigBlock(): string;
17
+ //# sourceMappingURL=config-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-block.d.ts","sourceRoot":"","sources":["../../src/scaffold/config-block.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAa/C"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * The `fitness:` block fitness contributes to the scaffolded
3
+ * `opensip-cli.config.yml` (ADR-0038, Tool.scaffoldConfigBlock).
4
+ *
5
+ * Relocated verbatim from the CLI's `config-templates.ts` (the legacy
6
+ * `fitnessBlock` literal). The CLI's `generateConfig` keeps rendering the
7
+ * document header + `targets:` (host-owned, ADR-0023 §schema), and appends
8
+ * each tool's `scaffoldConfigBlock()` — fitness owns its own block bytes.
9
+ *
10
+ * Why a string literal rather than rendering from `fitnessConfigDeclaration.defaults`:
11
+ * the block carries inline guidance comments (`# fail if total errors >= this …`)
12
+ * that the bare defaults object cannot express. ADR-0038 Decision 2 reserved the
13
+ * `scaffoldConfigBlock` escape hatch for exactly this; the byte-exact init golden
14
+ * forces it.
15
+ */
16
+ export function fitScaffoldConfigBlock() {
17
+ return [
18
+ '',
19
+ '# =============================================================================',
20
+ '# Fitness configuration',
21
+ '# =============================================================================',
22
+ '',
23
+ 'fitness:',
24
+ ' failOnErrors: 1 # fail if total errors >= this (0 = never fail on errors)',
25
+ ' failOnWarnings: 0 # fail if total warnings >= this (0 = warnings are informational)',
26
+ ' disabledChecks: []',
27
+ '',
28
+ ].join('\n');
29
+ }
30
+ //# sourceMappingURL=config-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-block.js","sourceRoot":"","sources":["../../src/scaffold/config-block.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO;QACL,EAAE;QACF,iFAAiF;QACjF,yBAAyB;QACzB,iFAAiF;QACjF,EAAE;QACF,UAAU;QACV,iFAAiF;QACjF,yFAAyF;QACzF,sBAAsB;QACtB,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @fileoverview fitness's `init` example contribution (ADR-0038).
3
+ *
4
+ * fitness OWNS the example check/recipe bytes + the pinned check ids that `init`
5
+ * scaffolds — relocated here from the CLI's `config-templates.ts` so a tool's
6
+ * scaffold content lives with the tool (the host just writes the bytes under
7
+ * `userPluginDir('fit', kind)`). The byte content is verbatim; a Phase-0 golden +
8
+ * a Phase-1 parity test pin byte-identity with the legacy CLI builders.
9
+ */
10
+ import type { ScaffoldContext, ScaffoldFile } from '@opensip-cli/core';
11
+ /**
12
+ * Pinned example-check ids per language — the COMPLETE id universe (drives
13
+ * stale-scaffolded detection regardless of the project's detected languages).
14
+ * Verbatim from the legacy `config-templates.ts`.
15
+ */
16
+ export declare const EXAMPLE_CHECK_IDS: Record<string, string>;
17
+ /** Example fitness check source (verbatim). `language` is tool-local `string`. */
18
+ export declare function exampleCheckSource(language: string, polyglotSuffix?: string): string;
19
+ /** Example fitness recipe source (verbatim). */
20
+ export declare function exampleRecipeSource(slugs: readonly string[]): string;
21
+ /**
22
+ * fitness's scaffold contribution — reproduces `scaffold-writer.ts`'s fit logic:
23
+ * single language ⇒ one `example-check.mjs` + a recipe over `['example-check']`;
24
+ * polyglot ⇒ one `example-check-<lang>.mjs` per language + a recipe over the
25
+ * per-language slugs.
26
+ */
27
+ export declare function fitScaffoldExamples(ctx: ScaffoldContext): ScaffoldFile[];
28
+ /** fitness's COMPLETE stable example-id universe (every language's check id). */
29
+ export declare function fitStableExampleIds(): string[];
30
+ //# sourceMappingURL=examples.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.d.ts","sourceRoot":"","sources":["../../src/scaffold/examples.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEvE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAOpD,CAAC;AAEF,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,SAAK,GAAG,MAAM,CAuChF;AAED,gDAAgD;AAChD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAqBpE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,GAAG,YAAY,EAAE,CAkCxE;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * @fileoverview fitness's `init` example contribution (ADR-0038).
3
+ *
4
+ * fitness OWNS the example check/recipe bytes + the pinned check ids that `init`
5
+ * scaffolds — relocated here from the CLI's `config-templates.ts` so a tool's
6
+ * scaffold content lives with the tool (the host just writes the bytes under
7
+ * `userPluginDir('fit', kind)`). The byte content is verbatim; a Phase-0 golden +
8
+ * a Phase-1 parity test pin byte-identity with the legacy CLI builders.
9
+ */
10
+ /**
11
+ * Pinned example-check ids per language — the COMPLETE id universe (drives
12
+ * stale-scaffolded detection regardless of the project's detected languages).
13
+ * Verbatim from the legacy `config-templates.ts`.
14
+ */
15
+ export const EXAMPLE_CHECK_IDS = {
16
+ typescript: 'a3e1f8c4-9b2d-4f5a-8e6c-7d1a2b3c4d5e',
17
+ rust: 'b4f2e9d5-8c3e-4a6b-9f7d-8e2b3c4d5e6f',
18
+ python: 'c5a3f0e6-7d4f-4b7c-a08e-9f3c4d5e6f70',
19
+ go: 'd6b4a1f7-6e5a-4c8d-b19f-a04d5e6f7081',
20
+ java: 'e7c5b2a8-5f6b-4d9e-c2af-b15e6f708192',
21
+ cpp: 'f8d6c3b9-4a7c-4ea0-d3b0-c26f708192a3',
22
+ };
23
+ /** Example fitness check source (verbatim). `language` is tool-local `string`. */
24
+ export function exampleCheckSource(language, polyglotSuffix = '') {
25
+ // The example check flags any file containing the literal
26
+ // `EXAMPLE_TODO`. Default behavior on a fresh repo is to pass with
27
+ // 0 violations — it scans real files but finds nothing.
28
+ const slug = polyglotSuffix ? `example-check-${polyglotSuffix}` : 'example-check';
29
+ return `// Example fitness check.
30
+ //
31
+ // Edit this file or add new .mjs files to opensip-cli/fit/checks/.
32
+ // Files in this directory are auto-loaded on the next \`opensip fit\` run.
33
+ //
34
+ // This demo flags any file containing the literal \`EXAMPLE_TODO\`. After
35
+ // you confirm the wiring works, delete or replace it with a real check.
36
+ //
37
+ // Docs: https://github.com/opensip-ai/opensip-cli#authoring-a-check-package
38
+ import { defineCheck } from '@opensip-cli/fitness';
39
+
40
+ export const checks = [
41
+ defineCheck({
42
+ id: '${EXAMPLE_CHECK_IDS[language] ?? ''}',
43
+ slug: '${slug}',
44
+ description: 'Demo check — flags any file containing the literal EXAMPLE_TODO',
45
+ scope: { languages: ['${language}'], concerns: ['backend'] },
46
+ tags: ['example'],
47
+ analyze: (content, filePath) => {
48
+ const i = content.indexOf('EXAMPLE_TODO');
49
+ if (i < 0) return [];
50
+ return [{
51
+ line: content.slice(0, i).split('\\n').length,
52
+ message: 'Found the example trigger string.',
53
+ severity: 'warning',
54
+ suggestion:
55
+ 'This is just a demo. Delete opensip-cli/fit/checks/example-check.mjs ' +
56
+ 'once you have your own checks.',
57
+ filePath,
58
+ }];
59
+ },
60
+ }),
61
+ ];
62
+ `;
63
+ }
64
+ /** Example fitness recipe source (verbatim). */
65
+ export function exampleRecipeSource(slugs) {
66
+ const slugList = slugs.map((s) => `'${s}'`).join(', ');
67
+ return `// Example fitness recipe — runs only the example check(s).
68
+ //
69
+ // Edit this file or add new .mjs files to opensip-cli/fit/recipes/.
70
+ // Files in this directory are auto-loaded on the next run.
71
+ //
72
+ // Run this recipe explicitly: opensip fit --recipe example
73
+ //
74
+ // To run all enabled checks (built-in + your custom ones), omit
75
+ // --recipe and the built-in \`default\` recipe applies.
76
+ export const recipes = [{
77
+ id: 'URCP_example',
78
+ name: 'example',
79
+ displayName: 'Example',
80
+ description: 'Demo recipe — runs only the example check(s)',
81
+ checks: { type: 'explicit', checkIds: [${slugList}] },
82
+ execution: { mode: 'parallel', stopOnFirstFailure: false, timeout: 30_000 },
83
+ reporting: { format: 'table', verbose: false },
84
+ }];
85
+ `;
86
+ }
87
+ /**
88
+ * fitness's scaffold contribution — reproduces `scaffold-writer.ts`'s fit logic:
89
+ * single language ⇒ one `example-check.mjs` + a recipe over `['example-check']`;
90
+ * polyglot ⇒ one `example-check-<lang>.mjs` per language + a recipe over the
91
+ * per-language slugs.
92
+ */
93
+ export function fitScaffoldExamples(ctx) {
94
+ const languages = ctx.languages.length > 0 ? ctx.languages : ['typescript'];
95
+ const single = languages.length === 1;
96
+ // Single language ⇒ one un-suffixed `example-check.mjs`. Polyglot ⇒ one
97
+ // `example-check-<lang>.mjs` per language. A declarative `.map` (not a
98
+ // push-in-loop) keeps the check files' contents the single source.
99
+ const checkFiles = single
100
+ ? [
101
+ {
102
+ kind: 'checks',
103
+ filename: 'example-check.mjs',
104
+ content: exampleCheckSource(languages[0] ?? 'typescript'),
105
+ stableId: EXAMPLE_CHECK_IDS[languages[0] ?? 'typescript'] ?? '',
106
+ },
107
+ ]
108
+ : languages.map((lang) => ({
109
+ kind: 'checks',
110
+ filename: `example-check-${lang}.mjs`,
111
+ content: exampleCheckSource(lang, lang),
112
+ stableId: EXAMPLE_CHECK_IDS[lang] ?? '',
113
+ }));
114
+ const slugs = single ? ['example-check'] : languages.map((lang) => `example-check-${lang}`);
115
+ return [
116
+ ...checkFiles,
117
+ {
118
+ kind: 'recipes',
119
+ filename: 'example-recipe.mjs',
120
+ content: exampleRecipeSource(slugs),
121
+ stableId: 'URCP_example',
122
+ },
123
+ ];
124
+ }
125
+ /** fitness's COMPLETE stable example-id universe (every language's check id). */
126
+ export function fitStableExampleIds() {
127
+ return Object.values(EXAMPLE_CHECK_IDS);
128
+ }
129
+ //# sourceMappingURL=examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.js","sourceRoot":"","sources":["../../src/scaffold/examples.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA2B;IACvD,UAAU,EAAE,sCAAsC;IAClD,IAAI,EAAE,sCAAsC;IAC5C,MAAM,EAAE,sCAAsC;IAC9C,EAAE,EAAE,sCAAsC;IAC1C,IAAI,EAAE,sCAAsC;IAC5C,GAAG,EAAE,sCAAsC;CAC5C,CAAC;AAEF,kFAAkF;AAClF,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,cAAc,GAAG,EAAE;IACtE,0DAA0D;IAC1D,mEAAmE;IACnE,wDAAwD;IACxD,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,iBAAiB,cAAc,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC;IAClF,OAAO;;;;;;;;;;;;;WAaE,iBAAiB,CAAC,QAAQ,CAAC,IAAI,EAAE;aAC/B,IAAI;;4BAEW,QAAQ;;;;;;;;;;;;;;;;;CAiBnC,CAAC;AACF,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,mBAAmB,CAAC,KAAwB;IAC1D,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO;;;;;;;;;;;;;;2CAckC,QAAQ;;;;CAIlD,CAAC;AACF,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAoB;IACtD,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;IAEtC,wEAAwE;IACxE,uEAAuE;IACvE,mEAAmE;IACnE,MAAM,UAAU,GAAmB,MAAM;QACvC,CAAC,CAAC;YACE;gBACE,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,mBAAmB;gBAC7B,OAAO,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC;gBACzD,QAAQ,EAAE,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE;aAChE;SACF;QACH,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACvB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,iBAAiB,IAAI,MAAM;YACrC,OAAO,EAAE,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;YACvC,QAAQ,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,EAAE;SACxC,CAAC,CAAC,CAAC;IAER,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;IAE5F,OAAO;QACL,GAAG,UAAU;QACb;YACE,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,oBAAoB;YAC9B,OAAO,EAAE,mBAAmB,CAAC,KAAK,CAAC;YACnC,QAAQ,EAAE,cAAc;SACzB;KACF,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,mBAAmB;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @fileoverview RunScope augmentation for fitness.
3
+ *
4
+ * D7 (tool subscopes via module augmentation, per the RunScope/
5
+ * Registry architecture): tool-specific concerns nest under the tool's
6
+ * name on `RunScope` and are added via TypeScript module augmentation
7
+ * from the tool's own package. Core never imports fitness-shaped types —
8
+ * the layer rule stays intact (`core ← contracts ← {fitness, ...}`).
9
+ *
10
+ * Two singletons used to hang off this package as module-level state:
11
+ *
12
+ * - `defaultRegistry` — per-process check registry.
13
+ * - `defaultRecipeRegistry` — per-process recipe registry.
14
+ *
15
+ * plus the per-process `ensureChecksLoaded` lifecycle state (the
16
+ * `checksLoadedFor` / `pluginLoadErrors` / `loadWarnings` triple).
17
+ *
18
+ * All of it is now per-RunScope. The fitness tool's `contributeScope`
19
+ * hook (in `tool.ts`) instantiates fresh registries + a fresh `load`
20
+ * marker and attaches them to `scope.fitness` once per CLI invocation.
21
+ * Tools and library code read via
22
+ * `currentScope()?.fitness?.{checks,recipes,load}`.
23
+ *
24
+ * The `fitness` slot is intentionally optional and mutable (no
25
+ * `readonly`) on the augmented interface: the kernel doesn't construct
26
+ * it, and only the fitness tool's `contributeScope` writes to it during
27
+ * scope construction. A run that doesn't load the fitness tool carries
28
+ * no `scope.fitness`, and reads return `undefined`.
29
+ */
30
+ import type { CheckRegistry } from './framework/registry.js';
31
+ import type { FitnessRecipeRegistry } from './recipes/registry.js';
32
+ /**
33
+ * Per-RunScope `ensureChecksLoaded` lifecycle state — moved off the
34
+ * `check-loader.ts` module singletons so two concurrent scopes carry
35
+ * independent load state. Mutable: `ensureChecksLoaded` writes it once
36
+ * per run; the phase helpers (`buildFitEnvelope`, `buildFitDoneResult`)
37
+ * and the public accessors read it back.
38
+ */
39
+ export interface FitnessLoadState {
40
+ /** Project directory for which `ensureChecksLoaded` has run to
41
+ * completion in THIS scope. `null` before the first load; `''` is the
42
+ * "loaded" sentinel for the no-project case. */
43
+ loadedFor: string | null;
44
+ /** Plugin load failures from the most recent `ensureChecksLoaded` call. */
45
+ pluginLoadErrors: readonly string[];
46
+ /** Non-fatal user-facing warnings collected during the most recent
47
+ * `ensureChecksLoaded` call. */
48
+ loadWarnings: string[];
49
+ }
50
+ /**
51
+ * Per-RunScope fitness state. Constructed by the fitness tool's
52
+ * `contributeScope()` hook and attached to `scope.fitness`.
53
+ */
54
+ export interface FitnessSubscope {
55
+ /** Check registry — populated by `loadAllPlugins` /
56
+ * `loadDiscoveredCheckPackages` during `ensureChecksLoaded`. */
57
+ readonly checks: CheckRegistry;
58
+ /** Recipe registry — seeded with built-in recipes at construction;
59
+ * plugin loader registers user recipes. */
60
+ readonly recipes: FitnessRecipeRegistry;
61
+ /** `ensureChecksLoaded` lifecycle state for this run. */
62
+ readonly load: FitnessLoadState;
63
+ }
64
+ declare module '@opensip-cli/core' {
65
+ interface ScopeContribution {
66
+ /**
67
+ * Fitness tool's per-run state. Returned by the fitness tool's
68
+ * `contributeScope` hook and installed by the kernel; absent in runs
69
+ * where the fitness tool is not registered. Consumers MUST null-check
70
+ * before reading. Augments `ScopeContribution`, which
71
+ * `ToolScope`/`RunScope` extend — so `cli.scope.fitness` /
72
+ * `currentScope()?.fitness` stay readable.
73
+ */
74
+ fitness?: FitnessSubscope;
75
+ }
76
+ }
77
+ //# sourceMappingURL=scope-augmentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-augmentation.d.ts","sourceRoot":"","sources":["../src/scope-augmentation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;qDAEiD;IACjD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,2EAA2E;IAC3E,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC;qCACiC;IACjC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B;qEACiE;IACjE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B;gDAC4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,qBAAqB,CAAC;IACxC,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;CACjC;AAED,OAAO,QAAQ,mBAAmB,CAAC;IACjC,UAAU,iBAAiB;QACzB;;;;;;;WAOG;QACH,OAAO,CAAC,EAAE,eAAe,CAAC;KAC3B;CACF"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @fileoverview RunScope augmentation for fitness.
3
+ *
4
+ * D7 (tool subscopes via module augmentation, per the RunScope/
5
+ * Registry architecture): tool-specific concerns nest under the tool's
6
+ * name on `RunScope` and are added via TypeScript module augmentation
7
+ * from the tool's own package. Core never imports fitness-shaped types —
8
+ * the layer rule stays intact (`core ← contracts ← {fitness, ...}`).
9
+ *
10
+ * Two singletons used to hang off this package as module-level state:
11
+ *
12
+ * - `defaultRegistry` — per-process check registry.
13
+ * - `defaultRecipeRegistry` — per-process recipe registry.
14
+ *
15
+ * plus the per-process `ensureChecksLoaded` lifecycle state (the
16
+ * `checksLoadedFor` / `pluginLoadErrors` / `loadWarnings` triple).
17
+ *
18
+ * All of it is now per-RunScope. The fitness tool's `contributeScope`
19
+ * hook (in `tool.ts`) instantiates fresh registries + a fresh `load`
20
+ * marker and attaches them to `scope.fitness` once per CLI invocation.
21
+ * Tools and library code read via
22
+ * `currentScope()?.fitness?.{checks,recipes,load}`.
23
+ *
24
+ * The `fitness` slot is intentionally optional and mutable (no
25
+ * `readonly`) on the augmented interface: the kernel doesn't construct
26
+ * it, and only the fitness tool's `contributeScope` writes to it during
27
+ * scope construction. A run that doesn't load the fitness tool carries
28
+ * no `scope.fitness`, and reads return `undefined`.
29
+ */
30
+ export {};
31
+ //# sourceMappingURL=scope-augmentation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-augmentation.js","sourceRoot":"","sources":["../src/scope-augmentation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=loader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.test.d.ts","sourceRoot":"","sources":["../../../src/signalers/__tests__/loader.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,141 @@
1
+ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ import { LanguageRegistry, RunScope, SystemError, ToolRegistry, ValidationError, runWithScopeSync, } from '@opensip-cli/core';
5
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
6
+ import { loadSignalersConfig } from '../loader.js';
7
+ let testDir;
8
+ beforeEach(() => {
9
+ testDir = mkdtempSync(join(tmpdir(), 'opensip-signalers-loader-'));
10
+ });
11
+ afterEach(() => {
12
+ rmSync(testDir, { recursive: true, force: true });
13
+ });
14
+ describe('loadSignalersConfig', () => {
15
+ it('loads a minimal valid config', () => {
16
+ writeFileSync(join(testDir, 'opensip-cli.config.yml'), 'targets: {}\n');
17
+ const cfg = loadSignalersConfig(testDir);
18
+ expect(cfg.targets).toEqual({});
19
+ expect(cfg.fitness.failOnErrors).toBe(1);
20
+ expect(cfg.fitness.failOnWarnings).toBe(0);
21
+ });
22
+ it('parses targets with description, include, exclude', () => {
23
+ writeFileSync(join(testDir, 'opensip-cli.config.yml'), `targets:
24
+ src:
25
+ description: TS source
26
+ include:
27
+ - "src/**/*.ts"
28
+ exclude:
29
+ - "**/*.test.ts"
30
+ languages: [typescript]
31
+ concerns: [backend]
32
+ `);
33
+ const cfg = loadSignalersConfig(testDir);
34
+ expect(cfg.targets.src?.description).toBe('TS source');
35
+ expect(cfg.targets.src?.include).toEqual(['src/**/*.ts']);
36
+ });
37
+ it('caches by resolved file path within the TTL', () => {
38
+ const path = join(testDir, 'opensip-cli.config.yml');
39
+ writeFileSync(path, 'targets: {}\n');
40
+ const a = loadSignalersConfig(testDir);
41
+ // Re-write the file content; cached load should not re-read.
42
+ writeFileSync(path, 'targets: {alt: {description: x, include: ["y"]}}\n');
43
+ const b = loadSignalersConfig(testDir);
44
+ expect(b).toBe(a); // same frozen reference
45
+ });
46
+ it('throws ValidationError when target name violates kebab-case', () => {
47
+ writeFileSync(join(testDir, 'opensip-cli.config.yml'), `targets:
48
+ Invalid_Name:
49
+ description: x
50
+ include: ["y"]
51
+ `);
52
+ expect(() => loadSignalersConfig(testDir)).toThrow(ValidationError);
53
+ });
54
+ it('throws ValidationError when YAML is malformed', () => {
55
+ writeFileSync(join(testDir, 'opensip-cli.config.yml'), 'targets: [unbalanced\n');
56
+ expect(() => loadSignalersConfig(testDir)).toThrow(ValidationError);
57
+ });
58
+ it('throws SystemError when the file is too large', () => {
59
+ const huge = 'x'.repeat(11 * 1024 * 1024); // 11 MB > 10 MB limit
60
+ writeFileSync(join(testDir, 'opensip-cli.config.yml'), huge);
61
+ expect(() => loadSignalersConfig(testDir)).toThrow(SystemError);
62
+ });
63
+ it('respects an explicit --config path', () => {
64
+ writeFileSync(join(testDir, 'custom.yml'), 'targets: {}\n');
65
+ const cfg = loadSignalersConfig(testDir, join(testDir, 'custom.yml'));
66
+ expect(cfg.targets).toEqual({});
67
+ });
68
+ it('treats null YAML as an empty object', () => {
69
+ writeFileSync(join(testDir, 'opensip-cli.config.yml'), '');
70
+ const cfg = loadSignalersConfig(testDir);
71
+ expect(cfg.targets).toEqual({});
72
+ });
73
+ it('throws ValidationError when an explicit path points to a non-existent file', () => {
74
+ // resolveProjectConfigPath throws when --config points at a missing
75
+ // file. This validates that error path propagates cleanly.
76
+ expect(() => loadSignalersConfig(testDir, join(testDir, 'does-not-exist.yml'))).toThrow();
77
+ });
78
+ it('throws ValidationError when the resolved path is a directory (readFileSync EISDIR)', () => {
79
+ const dirAsConfig = join(testDir, 'opensip-cli.config.yml');
80
+ mkdirSync(dirAsConfig, { recursive: true });
81
+ expect(() => loadSignalersConfig(testDir)).toThrow();
82
+ });
83
+ it('treats explicit null section values as default empty objects', () => {
84
+ // Exercises the section() preprocess branch: v != null is preserved
85
+ // verbatim. Counterpart to "treats null YAML as empty object" — that
86
+ // test handles the nullish branch; this one covers the truthy branch.
87
+ writeFileSync(join(testDir, 'opensip-cli.config.yml'), `targets: {}
88
+ fitness:
89
+ failOnErrors: 5
90
+ `);
91
+ const cfg = loadSignalersConfig(testDir);
92
+ expect(cfg.fitness.failOnErrors).toBe(5);
93
+ });
94
+ });
95
+ /** Scope carrying a host-validated config document on its structural slot —
96
+ * installed via Object.assign exactly like the CLI pre-action hook does
97
+ * (scope-types.ts declares it readonly for readers). */
98
+ const makeScopeWithDocument = (configDocument) => {
99
+ const scope = new RunScope({ languages: new LanguageRegistry(), tools: new ToolRegistry() });
100
+ Object.assign(scope, { configDocument });
101
+ return scope;
102
+ };
103
+ describe('loadSignalersConfig — scope-first (ADR-0023 one-reader)', () => {
104
+ it('projects from scope.configDocument without touching the filesystem', () => {
105
+ // No config file exists in testDir — a file read would throw. The scope
106
+ // document alone must satisfy the load.
107
+ const scope = makeScopeWithDocument({
108
+ targets: { src: { description: 'TS source', include: ['src/**/*.ts'] } },
109
+ fitness: { failOnErrors: 3 },
110
+ });
111
+ const cfg = runWithScopeSync(scope, () => loadSignalersConfig(testDir));
112
+ expect(cfg.targets.src?.description).toBe('TS source');
113
+ expect(cfg.fitness.failOnErrors).toBe(3);
114
+ });
115
+ it('ignores a stale on-disk file when the scope carries the document', () => {
116
+ // The host read + validated the document at bootstrap; a file edited
117
+ // after bootstrap (or a different file the tool would have resolved)
118
+ // must NOT win over the scope-carried document.
119
+ writeFileSync(join(testDir, 'opensip-cli.config.yml'), 'targets: {}\nfitness:\n failOnErrors: 99\n');
120
+ const scope = makeScopeWithDocument({ targets: {}, fitness: { failOnErrors: 2 } });
121
+ const cfg = runWithScopeSync(scope, () => loadSignalersConfig(testDir));
122
+ expect(cfg.fitness.failOnErrors).toBe(2);
123
+ });
124
+ it('memoizes the projection per document object (one parse per run)', () => {
125
+ const scope = makeScopeWithDocument({ targets: {} });
126
+ const a = runWithScopeSync(scope, () => loadSignalersConfig(testDir));
127
+ const b = runWithScopeSync(scope, () => loadSignalersConfig(testDir));
128
+ expect(b).toBe(a); // same frozen reference
129
+ });
130
+ it('falls back to the file read when the scope carries no document', () => {
131
+ // A scope WITHOUT configDocument (config-less/agnostic run) must keep the
132
+ // loud missing-config error — never silently validate an empty document.
133
+ const scope = new RunScope({ languages: new LanguageRegistry(), tools: new ToolRegistry() });
134
+ expect(() => runWithScopeSync(scope, () => loadSignalersConfig(testDir))).toThrow(ValidationError);
135
+ });
136
+ it('still rejects an invalid scope document with the fitness error shape', () => {
137
+ const scope = makeScopeWithDocument({ targets: { 'Bad Name': { include: [] } } });
138
+ expect(() => runWithScopeSync(scope, () => loadSignalersConfig(testDir))).toThrow(ValidationError);
139
+ });
140
+ });
141
+ //# sourceMappingURL=loader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.test.js","sourceRoot":"","sources":["../../../src/signalers/__tests__/loader.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=violation-to-signal.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"violation-to-signal.test.d.ts","sourceRoot":"","sources":["../../../src/signalers/__tests__/violation-to-signal.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Unit tests for `violationToSignal` (ADR-0011, Phase 6) — the fitness
3
+ * violation → core `Signal` mapping. Guards the contract that the migration
4
+ * preserves: `source === ruleId === checkSlug`, the legacy 2-level severity is
5
+ * lifted UP into the 4-level `SignalSeverity` (never collapsed), and the
6
+ * file/line/column ride on `code` (and are mirrored to the flat fields).
7
+ *
8
+ * Pure mapping — no framework, no IO, no mocks. `createSignal` generates a
9
+ * non-deterministic `id`/`createdAt`, so those fields are asserted by shape,
10
+ * not value.
11
+ */
12
+ import { describe, expect, it } from 'vitest';
13
+ import { violationToSignal } from '../violation-to-signal.js';
14
+ function violation(over = {}) {
15
+ return {
16
+ file: 'src/foo.ts',
17
+ line: 10,
18
+ column: 3,
19
+ message: 'Something is wrong',
20
+ severity: 'error',
21
+ ...over,
22
+ };
23
+ }
24
+ describe('violationToSignal', () => {
25
+ it('carries the check slug on both source and ruleId', () => {
26
+ const signal = violationToSignal('my-check-slug', violation());
27
+ expect(signal.source).toBe('my-check-slug');
28
+ expect(signal.ruleId).toBe('my-check-slug');
29
+ });
30
+ it('lifts legacy error → high (never collapses)', () => {
31
+ expect(violationToSignal('s', violation({ severity: 'error' })).severity).toBe('high');
32
+ });
33
+ it('lifts legacy warning → medium (never collapses)', () => {
34
+ expect(violationToSignal('s', violation({ severity: 'warning' })).severity).toBe('medium');
35
+ });
36
+ it('maps the code location and mirrors it to the flat fields', () => {
37
+ const signal = violationToSignal('s', violation({ file: 'src/bar.ts', line: 42, column: 7 }));
38
+ expect(signal.code).toEqual({ file: 'src/bar.ts', line: 42, column: 7 });
39
+ expect(signal.filePath).toBe('src/bar.ts');
40
+ expect(signal.line).toBe(42);
41
+ expect(signal.column).toBe(7);
42
+ });
43
+ it('preserves the message and the optional suggestion', () => {
44
+ const signal = violationToSignal('s', violation({ message: 'Bad import', suggestion: 'Use the barrel' }));
45
+ expect(signal.message).toBe('Bad import');
46
+ expect(signal.suggestion).toBe('Use the barrel');
47
+ });
48
+ it('defaults category to quality and provider to opensip-cli', () => {
49
+ const signal = violationToSignal('s', violation());
50
+ expect(signal.category).toBe('quality');
51
+ expect(signal.provider).toBe('opensip-cli');
52
+ });
53
+ it('produces a well-formed Signal id and ISO createdAt', () => {
54
+ const signal = violationToSignal('s', violation());
55
+ expect(signal.id).toMatch(/^sig_/);
56
+ expect(() => new Date(signal.createdAt).toISOString()).not.toThrow();
57
+ });
58
+ });
59
+ //# sourceMappingURL=violation-to-signal.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"violation-to-signal.test.js","sourceRoot":"","sources":["../../../src/signalers/__tests__/violation-to-signal.test.ts"],"names":[],"mappings":"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"}