@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,38 @@
1
+ /**
2
+ * @fileoverview Path matching utilities for fitness checks.
3
+ *
4
+ * Factory function for creating path matchers that work with both string
5
+ * patterns (using `includes`) and RegExp patterns (using `test`). Previously
6
+ * each check pack carried a byte-identical copy of this helper — surfaced by
7
+ * the graph tool's duplicated-function-body rule. Both packs depend on
8
+ * @opensip-cli/fitness, so the engine is the natural shared home.
9
+ */
10
+ /**
11
+ * Creates a path matcher function from an array of patterns.
12
+ *
13
+ * String patterns match using `path.includes(pattern)`.
14
+ * RegExp patterns match using `pattern.test(path)`.
15
+ *
16
+ * @param patterns - Array of string or RegExp patterns to match against
17
+ * @returns A function that returns true if the path matches any pattern
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * // String patterns (includes matching)
22
+ * const isExcluded = createPathMatcher(['/__tests__/', '/node_modules/']);
23
+ * isExcluded('/src/__tests__/foo.ts'); // true
24
+ *
25
+ * // RegExp patterns (test matching)
26
+ * const isTestFile = createPathMatcher([/\.test\.ts$/, /\.spec\.ts$/]);
27
+ * isTestFile('foo.test.ts'); // true
28
+ *
29
+ * // Mixed patterns
30
+ * const isIgnored = createPathMatcher(['/dist/', /node_modules/]);
31
+ * isIgnored('/project/dist/bundle.js'); // true
32
+ * isIgnored('/project/node_modules/lodash/index.js'); // true
33
+ * ```
34
+ */
35
+ export function createPathMatcher(patterns) {
36
+ return (path) => patterns.some((p) => (typeof p === 'string' ? path.includes(p) : p.test(path)));
37
+ }
38
+ //# sourceMappingURL=path-matching.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-matching.js","sourceRoot":"","sources":["../../src/check-utils/path-matching.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgC;IAChE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnG,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @fileoverview Source code analysis utilities
3
+ *
4
+ * Utilities for analyzing source code content.
5
+ * These are generic helpers used across fitness checks for code analysis.
6
+ */
7
+ /**
8
+ * Options for isCommentLine detection
9
+ */
10
+ export interface IsCommentLineOptions {
11
+ /**
12
+ * Include block comment start markers (/*) as comment lines
13
+ * @default true
14
+ */
15
+ includeBlockStart?: boolean;
16
+ }
17
+ /**
18
+ * Check if a line of code is a comment line.
19
+ *
20
+ * Detects:
21
+ * - Single-line comments: // ...
22
+ * - Block comment continuation lines: * ...
23
+ * - Optionally block comment start: /* ...
24
+ *
25
+ * @param line - The line of code to check
26
+ * @param options - Detection options
27
+ * @returns True if the line is a comment
28
+ *
29
+ * @example
30
+ * isCommentLine(' // this is a comment') // true
31
+ * isCommentLine(' * continuation line') // true
32
+ * isCommentLine(' const x = 1;') // false
33
+ * isCommentLine(' /* block start', { includeBlockStart: true }) // true
34
+ */
35
+ export declare function isCommentLine(line: string, options?: IsCommentLineOptions): boolean;
36
+ //# sourceMappingURL=source-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-analysis.d.ts","sourceRoot":"","sources":["../../src/check-utils/source-analysis.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAwBvF"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @fileoverview Source code analysis utilities
3
+ *
4
+ * Utilities for analyzing source code content.
5
+ * These are generic helpers used across fitness checks for code analysis.
6
+ */
7
+ /**
8
+ * Check if a line of code is a comment line.
9
+ *
10
+ * Detects:
11
+ * - Single-line comments: // ...
12
+ * - Block comment continuation lines: * ...
13
+ * - Optionally block comment start: /* ...
14
+ *
15
+ * @param line - The line of code to check
16
+ * @param options - Detection options
17
+ * @returns True if the line is a comment
18
+ *
19
+ * @example
20
+ * isCommentLine(' // this is a comment') // true
21
+ * isCommentLine(' * continuation line') // true
22
+ * isCommentLine(' const x = 1;') // false
23
+ * isCommentLine(' /* block start', { includeBlockStart: true }) // true
24
+ */
25
+ export function isCommentLine(line, options = {}) {
26
+ const { includeBlockStart = true } = options;
27
+ const trimmed = line.trim();
28
+ // Single-line comment
29
+ if (trimmed.startsWith('//')) {
30
+ return true;
31
+ }
32
+ // Block comment start (/* ...) — check before * continuation since /* starts with *
33
+ if (trimmed.startsWith('/*')) {
34
+ return includeBlockStart;
35
+ }
36
+ // Block comment continuation (lines starting with * followed by space, /, or end-of-line)
37
+ // Excludes operators like *= to avoid false positives
38
+ if (trimmed.startsWith('*') &&
39
+ (trimmed.length === 1 || trimmed[1] === ' ' || trimmed[1] === '/' || trimmed[1] === '*')) {
40
+ return true;
41
+ }
42
+ return false;
43
+ }
44
+ //# sourceMappingURL=source-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-analysis.js","sourceRoot":"","sources":["../../src/check-utils/source-analysis.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,UAAgC,EAAE;IAC5E,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE5B,sBAAsB;IACtB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oFAAoF;IACpF,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,0FAA0F;IAC1F,sDAAsD;IACtD,IACE,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QACvB,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EACxF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @fileoverview Unified test file detection utilities
3
+ * @version 1.0.0
4
+ *
5
+ * Consolidated test file detection that replaces various duplicated implementations.
6
+ * These utilities are specific to code analysis tooling.
7
+ */
8
+ /**
9
+ * Options for isTestFile detection
10
+ */
11
+ export interface IsTestFileOptions {
12
+ /**
13
+ * Check for __tests__ directory pattern
14
+ * @default true
15
+ */
16
+ checkTestsDir?: boolean;
17
+ /**
18
+ * Check for .test.ts/.test.tsx extension pattern
19
+ * @default true
20
+ */
21
+ checkTestExtension?: boolean;
22
+ /**
23
+ * Check for .spec.ts/.spec.tsx extension pattern
24
+ * @default true
25
+ */
26
+ checkSpecExtension?: boolean;
27
+ /**
28
+ * Exclude .d.ts declaration files from being considered test files
29
+ * @default true
30
+ */
31
+ excludeDeclarationFiles?: boolean;
32
+ /**
33
+ * Additional custom patterns to check (RegExp patterns)
34
+ * @default []
35
+ */
36
+ additionalPatterns?: RegExp[];
37
+ }
38
+ /**
39
+ * Check if a file path is a test file.
40
+ *
41
+ * @param filePath - File path to check
42
+ * @param options - Detection options
43
+ * @returns True if the file is a test file
44
+ *
45
+ * @example
46
+ * // Default: comprehensive check
47
+ * isTestFile('src/__tests__/utils.test.ts') // true
48
+ * isTestFile('src/utils.ts') // false
49
+ * isTestFile('src/types.d.ts') // false
50
+ *
51
+ * @example
52
+ * // Check only specific patterns
53
+ * isTestFile('src/foo.spec.ts', { checkTestsDir: false }) // true
54
+ * isTestFile('src/__tests__/foo.ts', { checkTestExtension: false, checkSpecExtension: false }) // true
55
+ */
56
+ export declare function isTestFile(filePath: string, options?: IsTestFileOptions): boolean;
57
+ //# sourceMappingURL=test-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../src/check-utils/test-helpers.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAElC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAsBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAwCrF"}
@@ -0,0 +1,71 @@
1
+ // @fitness-ignore-file batch-operation-limits -- iterates bounded collections (config entries, registry items, or small analysis results)
2
+ /**
3
+ * @fileoverview Unified test file detection utilities
4
+ * @version 1.0.0
5
+ *
6
+ * Consolidated test file detection that replaces various duplicated implementations.
7
+ * These utilities are specific to code analysis tooling.
8
+ */
9
+ /**
10
+ * Standard test file patterns used across the codebase. Matches
11
+ * .test.{ts,tsx,js,jsx,mts,cts} and .spec.{ts,tsx,js,jsx,mts,cts} so the
12
+ * helper subsumes inline 7-arm endsWith chains some checks were keeping
13
+ * for .test.js / .test.jsx coverage.
14
+ */
15
+ const TEST_FILE_PATTERNS = {
16
+ /** Files ending with .test.{ts,tsx,js,jsx,mts,cts} */
17
+ testExtension: /\.test\.(?:tsx?|jsx?|mts|cts)$/,
18
+ /** Files ending with .spec.{ts,tsx,js,jsx,mts,cts} */
19
+ specExtension: /\.spec\.(?:tsx?|jsx?|mts|cts)$/,
20
+ /** Files in __tests__ directory */
21
+ testsDirectory: /__tests__[/\\]/,
22
+ /** Declaration files that should be excluded */
23
+ declarationFile: /\.d\.ts$/,
24
+ };
25
+ /**
26
+ * Check if a file path is a test file.
27
+ *
28
+ * @param filePath - File path to check
29
+ * @param options - Detection options
30
+ * @returns True if the file is a test file
31
+ *
32
+ * @example
33
+ * // Default: comprehensive check
34
+ * isTestFile('src/__tests__/utils.test.ts') // true
35
+ * isTestFile('src/utils.ts') // false
36
+ * isTestFile('src/types.d.ts') // false
37
+ *
38
+ * @example
39
+ * // Check only specific patterns
40
+ * isTestFile('src/foo.spec.ts', { checkTestsDir: false }) // true
41
+ * isTestFile('src/__tests__/foo.ts', { checkTestExtension: false, checkSpecExtension: false }) // true
42
+ */
43
+ export function isTestFile(filePath, options = {}) {
44
+ const { checkTestsDir = true, checkTestExtension = true, checkSpecExtension = true, excludeDeclarationFiles = true, additionalPatterns = [], } = options;
45
+ // Normalize path separators for cross-platform compatibility
46
+ const normalized = filePath.replaceAll('\\', '/');
47
+ // Exclude declaration files first
48
+ if (excludeDeclarationFiles && normalized.endsWith('.d.ts')) {
49
+ return false;
50
+ }
51
+ // Check __tests__ directory
52
+ if (checkTestsDir && TEST_FILE_PATTERNS.testsDirectory.test(normalized)) {
53
+ return true;
54
+ }
55
+ // Check .test.ts/.test.tsx extension
56
+ if (checkTestExtension && TEST_FILE_PATTERNS.testExtension.test(normalized)) {
57
+ return true;
58
+ }
59
+ // Check .spec.ts/.spec.tsx extension
60
+ if (checkSpecExtension && TEST_FILE_PATTERNS.specExtension.test(normalized)) {
61
+ return true;
62
+ }
63
+ // Check additional custom patterns
64
+ for (const pattern of additionalPatterns) {
65
+ if (pattern.test(normalized)) {
66
+ return true;
67
+ }
68
+ }
69
+ return false;
70
+ }
71
+ //# sourceMappingURL=test-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../src/check-utils/test-helpers.ts"],"names":[],"mappings":"AAAA,0IAA0I;AAC1I;;;;;;GAMG;AAqCH;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG;IACzB,sDAAsD;IACtD,aAAa,EAAE,gCAAgC;IAE/C,sDAAsD;IACtD,aAAa,EAAE,gCAAgC;IAE/C,mCAAmC;IACnC,cAAc,EAAE,gBAAgB;IAEhC,gDAAgD;IAChD,eAAe,EAAE,UAAU;CACnB,CAAC;AAEX;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,UAA6B,EAAE;IAC1E,MAAM,EACJ,aAAa,GAAG,IAAI,EACpB,kBAAkB,GAAG,IAAI,EACzB,kBAAkB,GAAG,IAAI,EACzB,uBAAuB,GAAG,IAAI,EAC9B,kBAAkB,GAAG,EAAE,GACxB,GAAG,OAAO,CAAC;IAEZ,6DAA6D;IAC7D,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAElD,kCAAkC;IAClC,IAAI,uBAAuB,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,4BAA4B;IAC5B,IAAI,aAAa,IAAI,kBAAkB,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mCAAmC;IACnC,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * ADR-0020 + ADR-0035: `fit --gate-save` (the `fit:ci` dogfood gate) must
3
+ * HARD-FAIL the step on a fail-threshold breach, not exit 0 and lean on the
4
+ * downstream Code Scanning ratchet. Post-ADR-0035 the hard-fail is the single
5
+ * host verdict: gate-save delivers the run envelope WITHOUT a `runFailed`
6
+ * override, and the host derives the findings exit from `envelope.verdict.passed`
7
+ * (the RUNTIME_ERROR mapping itself is pinned in envelope-routing.test.ts). These
8
+ * tests assert gate-save reaches delivery with the correct envelope verdict.
9
+ *
10
+ * `executeFit` is mocked so the test drives the gate verdict directly via the
11
+ * run envelope's `verdict.passed`.
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=fit-gate-mode.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fit-gate-mode.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/fit-gate-mode.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * ADR-0020 + ADR-0035: `fit --gate-save` (the `fit:ci` dogfood gate) must
3
+ * HARD-FAIL the step on a fail-threshold breach, not exit 0 and lean on the
4
+ * downstream Code Scanning ratchet. Post-ADR-0035 the hard-fail is the single
5
+ * host verdict: gate-save delivers the run envelope WITHOUT a `runFailed`
6
+ * override, and the host derives the findings exit from `envelope.verdict.passed`
7
+ * (the RUNTIME_ERROR mapping itself is pinned in envelope-routing.test.ts). These
8
+ * tests assert gate-save reaches delivery with the correct envelope verdict.
9
+ *
10
+ * `executeFit` is mocked so the test drives the gate verdict directly via the
11
+ * run envelope's `verdict.passed`.
12
+ */
13
+ import { createRunTimer } from '@opensip-cli/core';
14
+ import { DataStoreFactory } from '@opensip-cli/datastore';
15
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
16
+ vi.mock('../fit.js', () => ({ executeFit: vi.fn() }));
17
+ import { runGateMode } from '../fit-modes.js';
18
+ import { executeFit } from '../fit.js';
19
+ let datastore;
20
+ /** A run envelope whose single verdict is `passed` (the host's exit driver). */
21
+ const envelopeWith = (passed) => ({
22
+ tool: 'fitness',
23
+ schemaVersion: 2,
24
+ units: [],
25
+ signals: [],
26
+ verdict: { passed, score: passed ? 100 : 0, summary: {} },
27
+ });
28
+ /** A successful executeFit result carrying the given verdict envelope. */
29
+ const fitResult = (passed) => {
30
+ const envelope = envelopeWith(passed);
31
+ return {
32
+ result: { type: 'fit-done', label: 'gate', cwd: '/x', envelope, configFound: true },
33
+ envelope,
34
+ };
35
+ };
36
+ function mockCli() {
37
+ const setExitCode = vi.fn();
38
+ const deliverSignals = vi.fn(() => Promise.resolve());
39
+ const cli = {
40
+ setExitCode,
41
+ deliverSignals,
42
+ render: vi.fn(() => Promise.resolve()),
43
+ emitRaw: vi.fn(),
44
+ emitEnvelope: vi.fn(),
45
+ emitError: vi.fn(),
46
+ emitJson: vi.fn(),
47
+ logger: console,
48
+ // ADR-0036 host baseline seams — gate-save/compare route persistence + diff
49
+ // through these (the host owns them); no-op stubs suffice for the exit/deliver
50
+ // contract these tests assert.
51
+ saveBaseline: vi.fn(() => Promise.resolve()),
52
+ compareBaseline: vi.fn(() => Promise.resolve({ added: [], resolved: [], unchanged: [], degraded: false })),
53
+ exportBaselineSarif: vi.fn(() => Promise.resolve()),
54
+ exportBaselineFingerprints: vi.fn(() => Promise.resolve()),
55
+ scope: { datastore: () => datastore },
56
+ runSession: {
57
+ timing: createRunTimer(),
58
+ record: () => undefined,
59
+ },
60
+ };
61
+ return { cli, setExitCode, deliverSignals };
62
+ }
63
+ function gateSaveArgs() {
64
+ return {
65
+ json: false,
66
+ list: false,
67
+ recipes: false,
68
+ verbose: false,
69
+ debug: false,
70
+ quiet: true,
71
+ open: false,
72
+ cwd: '/x',
73
+ exclude: [],
74
+ gateSave: true,
75
+ gateCompare: false,
76
+ };
77
+ }
78
+ beforeEach(() => {
79
+ datastore = DataStoreFactory.open({ backend: 'memory' });
80
+ vi.clearAllMocks();
81
+ });
82
+ afterEach(() => {
83
+ datastore.close();
84
+ vi.restoreAllMocks();
85
+ });
86
+ describe('runGateMode --gate-save (ADR-0020 hard-fail via the host verdict)', () => {
87
+ it('delivers a failing-verdict envelope WITHOUT a runFailed override (the host hard-fails on verdict.passed=false)', async () => {
88
+ vi.mocked(executeFit).mockResolvedValue(fitResult(false));
89
+ const { cli, deliverSignals } = mockCli();
90
+ await runGateMode(gateSaveArgs(), cli);
91
+ // The baseline is still delivered even when the gate fails (SARIF export runs
92
+ // in a separate `if: always()` CI step). gate-save's findings gate IS the host
93
+ // verdict, so it passes no override — the host sets RUNTIME_ERROR from
94
+ // envelope.verdict.passed=false (mapping pinned in envelope-routing.test.ts).
95
+ expect(deliverSignals).toHaveBeenCalledTimes(1);
96
+ const [deliveredEnvelope, opts] = deliverSignals.mock.calls[0] ?? [];
97
+ expect(deliveredEnvelope.verdict.passed).toBe(false);
98
+ expect(opts).not.toHaveProperty('runFailed');
99
+ });
100
+ it('delivers a passing-verdict envelope when the run is clean', async () => {
101
+ vi.mocked(executeFit).mockResolvedValue(fitResult(true));
102
+ const { cli, deliverSignals } = mockCli();
103
+ await runGateMode(gateSaveArgs(), cli);
104
+ expect(deliverSignals).toHaveBeenCalledTimes(1);
105
+ const [deliveredEnvelope, opts] = deliverSignals.mock.calls[0] ?? [];
106
+ expect(deliveredEnvelope.verdict.passed).toBe(true);
107
+ expect(opts).not.toHaveProperty('runFailed');
108
+ });
109
+ });
110
+ //# sourceMappingURL=fit-gate-mode.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fit-gate-mode.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/fit-gate-mode.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * runLiveMode / runJsonMode dispatch (ADR-0011 Phase 6).
3
+ *
4
+ * The animated Ink live view is a TTY-only affordance. On a TTY `runLiveMode`
5
+ * renders live (and the tool's `registerLiveView` callback delivers signals);
6
+ * in a pipe / CI / redirect (non-TTY) it falls back to running the engine,
7
+ * rendering the static `fit-done` result through the seam, then delivering the
8
+ * envelope once at the composition root. `runJsonMode` emits the envelope via
9
+ * `cli.emitEnvelope` and delivers once. These tests pin the dispatch + the
10
+ * single `deliverSignals` egress call (the root owns exit 4, tested there).
11
+ */
12
+ export {};
13
+ //# sourceMappingURL=fit-modes-live.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fit-modes-live.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/fit-modes-live.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * runLiveMode / runJsonMode dispatch (ADR-0011 Phase 6).
3
+ *
4
+ * The animated Ink live view is a TTY-only affordance. On a TTY `runLiveMode`
5
+ * renders live (and the tool's `registerLiveView` callback delivers signals);
6
+ * in a pipe / CI / redirect (non-TTY) it falls back to running the engine,
7
+ * rendering the static `fit-done` result through the seam, then delivering the
8
+ * envelope once at the composition root. `runJsonMode` emits the envelope via
9
+ * `cli.emitEnvelope` and delivers once. These tests pin the dispatch + the
10
+ * single `deliverSignals` egress call (the root owns exit 4, tested there).
11
+ */
12
+ import { buildSignalEnvelope } from '@opensip-cli/contracts';
13
+ import { createRunTimer, HOST_VERDICT_POLICY_FALLBACK, } from '@opensip-cli/core';
14
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
15
+ import { runJsonMode, runLiveMode } from '../fit-modes.js';
16
+ import { executeFit } from '../fit.js';
17
+ vi.mock('../fit.js', () => ({ executeFit: vi.fn() }));
18
+ const executeFitMock = executeFit;
19
+ function mockCli() {
20
+ const renderLive = vi.fn().mockResolvedValue(undefined);
21
+ const render = vi.fn().mockResolvedValue(undefined);
22
+ const setExitCode = vi.fn();
23
+ const maybeOpenReport = vi.fn().mockResolvedValue(undefined);
24
+ const emitJson = vi.fn();
25
+ const emitEnvelope = vi.fn();
26
+ // 2.12.0: the structured-error seam. Mirror the host — it sets the exit code.
27
+ const emitError = vi.fn((detail) => setExitCode(detail.exitCode));
28
+ const deliverSignals = vi.fn().mockResolvedValue(undefined);
29
+ const cli = {
30
+ renderLive,
31
+ render,
32
+ setExitCode,
33
+ maybeOpenReport,
34
+ emitJson,
35
+ emitEnvelope,
36
+ emitError,
37
+ deliverSignals,
38
+ logger: console,
39
+ scope: { datastore: () => undefined },
40
+ runSession: {
41
+ timing: createRunTimer(),
42
+ record: () => undefined,
43
+ },
44
+ };
45
+ return {
46
+ cli,
47
+ renderLive,
48
+ render,
49
+ setExitCode,
50
+ maybeOpenReport,
51
+ emitEnvelope,
52
+ emitError,
53
+ deliverSignals,
54
+ };
55
+ }
56
+ const args = { cwd: '/x' };
57
+ function envelope() {
58
+ return buildSignalEnvelope({
59
+ tool: 'fit',
60
+ runId: 'r',
61
+ createdAt: '2026-06-04T00:00:00.000Z',
62
+ units: [],
63
+ signals: [],
64
+ policy: HOST_VERDICT_POLICY_FALLBACK,
65
+ runFaulted: false,
66
+ });
67
+ }
68
+ const savedTTY = process.stdout.isTTY;
69
+ function setTTY(value) {
70
+ Object.defineProperty(process.stdout, 'isTTY', { value, configurable: true });
71
+ }
72
+ beforeEach(() => {
73
+ executeFitMock.mockReset();
74
+ });
75
+ afterEach(() => {
76
+ Object.defineProperty(process.stdout, 'isTTY', { value: savedTTY, configurable: true });
77
+ vi.restoreAllMocks();
78
+ });
79
+ describe('runLiveMode', () => {
80
+ it('renders the animated live view on a TTY (and never the static seam)', async () => {
81
+ setTTY(true);
82
+ const { cli, renderLive, render, maybeOpenReport, deliverSignals } = mockCli();
83
+ await runLiveMode(args, cli, 'fit', false);
84
+ expect(renderLive).toHaveBeenCalledWith('fit', args);
85
+ expect(render).not.toHaveBeenCalled();
86
+ expect(executeFitMock).not.toHaveBeenCalled();
87
+ // The TTY live view delivers via the tool's registerLiveView callback,
88
+ // not runLiveMode — so runLiveMode itself does not call deliverSignals here.
89
+ expect(deliverSignals).not.toHaveBeenCalled();
90
+ expect(maybeOpenReport).toHaveBeenCalledTimes(1);
91
+ });
92
+ it('falls back to the static fit-done result + delivers once on non-TTY', async () => {
93
+ setTTY(false);
94
+ const result = { type: 'fit-done' };
95
+ executeFitMock.mockResolvedValue({ result, envelope: envelope() });
96
+ const { cli, renderLive, render, setExitCode, deliverSignals } = mockCli();
97
+ await runLiveMode(args, cli, 'fit', false);
98
+ expect(renderLive).not.toHaveBeenCalled();
99
+ expect(executeFitMock).toHaveBeenCalledTimes(1);
100
+ expect(render).toHaveBeenCalledWith(result);
101
+ expect(deliverSignals).toHaveBeenCalledTimes(1);
102
+ // ADR-0035: the mode no longer sets the findings exit — the host derives it
103
+ // from envelope.verdict.passed inside deliverSignals (mocked here; the exit
104
+ // behaviour is covered in envelope-routing.test.ts).
105
+ expect(setExitCode).not.toHaveBeenCalled();
106
+ });
107
+ it('delivers the envelope on a non-TTY run; the host owns the findings exit (ADR-0035)', async () => {
108
+ setTTY(false);
109
+ executeFitMock.mockResolvedValue({
110
+ result: { type: 'fit-done' },
111
+ envelope: envelope(),
112
+ });
113
+ const { cli, render, deliverSignals } = mockCli();
114
+ await runLiveMode(args, cli, 'fit', false);
115
+ // The mode renders + delivers; deliverSignals (the host seam) owns the exit.
116
+ expect(render).toHaveBeenCalled();
117
+ expect(deliverSignals).toHaveBeenCalledTimes(1);
118
+ expect(deliverSignals.mock.calls[0]?.[1]).not.toHaveProperty('runFailed');
119
+ });
120
+ it("propagates an error result's exit code on a non-TTY run (no delivery)", async () => {
121
+ setTTY(false);
122
+ const result = { type: 'error', exitCode: 2, message: 'no config' };
123
+ executeFitMock.mockResolvedValue({ result });
124
+ const { cli, setExitCode, render, deliverSignals } = mockCli();
125
+ await runLiveMode(args, cli, 'fit', false);
126
+ expect(setExitCode).toHaveBeenCalledWith(2);
127
+ expect(render).toHaveBeenCalledWith(result);
128
+ expect(deliverSignals).not.toHaveBeenCalled();
129
+ });
130
+ });
131
+ describe('runJsonMode', () => {
132
+ const reportArgs = {
133
+ cwd: '/x',
134
+ reportTo: 'https://sink.example',
135
+ apiKey: 'k',
136
+ };
137
+ it('emits the envelope and delivers signals once (no runFailed — host derives exit)', async () => {
138
+ const env = envelope();
139
+ executeFitMock.mockResolvedValue({
140
+ result: { type: 'fit-done' },
141
+ envelope: env,
142
+ });
143
+ const { cli, emitEnvelope, deliverSignals } = mockCli();
144
+ await runJsonMode(reportArgs, cli);
145
+ expect(emitEnvelope).toHaveBeenCalledWith(env);
146
+ expect(deliverSignals).toHaveBeenCalledTimes(1);
147
+ // ADR-0035: a normal run delivers WITHOUT `runFailed`; the host derives the
148
+ // findings exit from envelope.verdict.passed.
149
+ expect(deliverSignals).toHaveBeenCalledWith(env, {
150
+ cwd: '/x',
151
+ reportTo: 'https://sink.example',
152
+ apiKey: 'k',
153
+ });
154
+ });
155
+ it('delivers without runFailed on a failing run; the host owns the exit (ADR-0035)', async () => {
156
+ const env = envelope();
157
+ executeFitMock.mockResolvedValue({
158
+ result: { type: 'fit-done' },
159
+ envelope: env,
160
+ });
161
+ const { cli, setExitCode, deliverSignals } = mockCli();
162
+ await runJsonMode(reportArgs, cli);
163
+ // The mode no longer computes shouldFail or sets the exit — deliverSignals
164
+ // (the host seam) owns it, derived from the envelope verdict.
165
+ expect(setExitCode).not.toHaveBeenCalled();
166
+ expect(deliverSignals.mock.calls[0]?.[1]).not.toHaveProperty('runFailed');
167
+ });
168
+ it('emits an error payload and does not deliver on an error result', async () => {
169
+ executeFitMock.mockResolvedValue({
170
+ result: { type: 'error', exitCode: 2, message: 'no config' },
171
+ });
172
+ const { cli, emitEnvelope, emitError, deliverSignals, setExitCode } = mockCli();
173
+ await runJsonMode(args, cli);
174
+ // 2.12.0 (§5.5): a failed --json run emits a structured error through the
175
+ // `emitError` seam (host wraps it + sets the exit code), not a bare envelope.
176
+ expect(emitError).toHaveBeenCalledWith({ message: 'no config', exitCode: 2 });
177
+ expect(setExitCode).toHaveBeenCalledWith(2);
178
+ expect(emitEnvelope).not.toHaveBeenCalled();
179
+ expect(deliverSignals).not.toHaveBeenCalled();
180
+ });
181
+ });
182
+ //# sourceMappingURL=fit-modes-live.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fit-modes-live.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/fit-modes-live.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Tests for `collectFitnessReportData` — fitness's contribution to
3
+ * the cross-tool dashboard composed by the CLI (audit 2026-05-29, L2).
4
+ *
5
+ * The collector returns ONLY fitness-owned inputs (check catalog, recipe
6
+ * catalog, editor protocol) keyed by the field names
7
+ * `generateDashboardHtml` consumes. It does NOT read sessions, the graph
8
+ * catalog, write any file, or open a browser — those are the CLI
9
+ * composition root's job now.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=report-data.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-data.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/report-data.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}