ppef 1.0.0 → 1.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 (336) hide show
  1. package/README.md +172 -0
  2. package/bin/ppef.mjs +20 -0
  3. package/dist/__tests__/framework-pipeline.integration.test.d.ts +7 -0
  4. package/dist/__tests__/framework-pipeline.integration.test.d.ts.map +1 -0
  5. package/dist/__tests__/framework-pipeline.integration.test.js +415 -0
  6. package/dist/__tests__/framework-pipeline.integration.test.js.map +1 -0
  7. package/dist/__tests__/index-exports.unit.test.d.ts +8 -0
  8. package/dist/__tests__/index-exports.unit.test.d.ts.map +1 -0
  9. package/dist/__tests__/index-exports.unit.test.js +127 -0
  10. package/dist/__tests__/index-exports.unit.test.js.map +1 -0
  11. package/dist/__tests__/registry-executor.integration.test.d.ts +5 -0
  12. package/dist/__tests__/registry-executor.integration.test.d.ts.map +1 -0
  13. package/dist/__tests__/registry-executor.integration.test.js +352 -0
  14. package/dist/__tests__/registry-executor.integration.test.js.map +1 -0
  15. package/dist/__tests__/test-helpers.d.ts +94 -0
  16. package/dist/__tests__/test-helpers.d.ts.map +1 -0
  17. package/dist/__tests__/test-helpers.js +271 -0
  18. package/dist/__tests__/test-helpers.js.map +1 -0
  19. package/dist/aggregation/__tests__/aggregators.unit.test.d.ts +7 -0
  20. package/dist/aggregation/__tests__/aggregators.unit.test.d.ts.map +1 -0
  21. package/dist/aggregation/__tests__/aggregators.unit.test.js +350 -0
  22. package/dist/aggregation/__tests__/aggregators.unit.test.js.map +1 -0
  23. package/dist/aggregation/__tests__/pipeline.unit.test.d.ts +7 -0
  24. package/dist/aggregation/__tests__/pipeline.unit.test.d.ts.map +1 -0
  25. package/dist/aggregation/__tests__/pipeline.unit.test.js +213 -0
  26. package/dist/aggregation/__tests__/pipeline.unit.test.js.map +1 -0
  27. package/dist/aggregation/aggregators.d.ts +63 -0
  28. package/dist/aggregation/aggregators.d.ts.map +1 -0
  29. package/dist/aggregation/aggregators.js +228 -0
  30. package/dist/aggregation/aggregators.js.map +1 -0
  31. package/dist/aggregation/index.d.ts +8 -0
  32. package/dist/aggregation/index.d.ts.map +1 -0
  33. package/dist/aggregation/index.js +8 -0
  34. package/dist/aggregation/index.js.map +1 -0
  35. package/dist/aggregation/pipeline.d.ts +38 -0
  36. package/dist/aggregation/pipeline.d.ts.map +1 -0
  37. package/dist/aggregation/pipeline.js +198 -0
  38. package/dist/aggregation/pipeline.js.map +1 -0
  39. package/dist/claims/__tests__/evaluator.unit.test.d.ts +12 -0
  40. package/dist/claims/__tests__/evaluator.unit.test.d.ts.map +1 -0
  41. package/dist/claims/__tests__/evaluator.unit.test.js +801 -0
  42. package/dist/claims/__tests__/evaluator.unit.test.js.map +1 -0
  43. package/dist/claims/evaluator.d.ts +33 -0
  44. package/dist/claims/evaluator.d.ts.map +1 -0
  45. package/dist/claims/evaluator.js +174 -0
  46. package/dist/claims/evaluator.js.map +1 -0
  47. package/dist/claims/index.d.ts +7 -0
  48. package/dist/claims/index.d.ts.map +1 -0
  49. package/dist/claims/index.js +7 -0
  50. package/dist/claims/index.js.map +1 -0
  51. package/dist/cli/__tests__/aggregate.command.unit.test.d.ts +7 -0
  52. package/dist/cli/__tests__/aggregate.command.unit.test.d.ts.map +1 -0
  53. package/dist/cli/__tests__/aggregate.command.unit.test.js +396 -0
  54. package/dist/cli/__tests__/aggregate.command.unit.test.js.map +1 -0
  55. package/dist/cli/__tests__/commands.unit.test.d.ts +10 -0
  56. package/dist/cli/__tests__/commands.unit.test.d.ts.map +1 -0
  57. package/dist/cli/__tests__/commands.unit.test.js +217 -0
  58. package/dist/cli/__tests__/commands.unit.test.js.map +1 -0
  59. package/dist/cli/__tests__/index.unit.test.d.ts +10 -0
  60. package/dist/cli/__tests__/index.unit.test.d.ts.map +1 -0
  61. package/dist/cli/__tests__/index.unit.test.js +65 -0
  62. package/dist/cli/__tests__/index.unit.test.js.map +1 -0
  63. package/dist/cli/__tests__/logger.unit.test.d.ts +11 -0
  64. package/dist/cli/__tests__/logger.unit.test.d.ts.map +1 -0
  65. package/dist/cli/__tests__/logger.unit.test.js +180 -0
  66. package/dist/cli/__tests__/logger.unit.test.js.map +1 -0
  67. package/dist/cli/__tests__/module-loader.unit.test.d.ts +11 -0
  68. package/dist/cli/__tests__/module-loader.unit.test.d.ts.map +1 -0
  69. package/dist/cli/__tests__/module-loader.unit.test.js +262 -0
  70. package/dist/cli/__tests__/module-loader.unit.test.js.map +1 -0
  71. package/dist/cli/__tests__/output-writer.unit.test.d.ts +10 -0
  72. package/dist/cli/__tests__/output-writer.unit.test.d.ts.map +1 -0
  73. package/dist/cli/__tests__/output-writer.unit.test.js +216 -0
  74. package/dist/cli/__tests__/output-writer.unit.test.js.map +1 -0
  75. package/dist/cli/__tests__/plan.command.unit.test.d.ts +7 -0
  76. package/dist/cli/__tests__/plan.command.unit.test.d.ts.map +1 -0
  77. package/dist/cli/__tests__/plan.command.unit.test.js +289 -0
  78. package/dist/cli/__tests__/plan.command.unit.test.js.map +1 -0
  79. package/dist/cli/__tests__/run.command.unit.test.d.ts +7 -0
  80. package/dist/cli/__tests__/run.command.unit.test.d.ts.map +1 -0
  81. package/dist/cli/__tests__/run.command.unit.test.js +422 -0
  82. package/dist/cli/__tests__/run.command.unit.test.js.map +1 -0
  83. package/dist/cli/__tests__/validate.command.unit.test.d.ts +7 -0
  84. package/dist/cli/__tests__/validate.command.unit.test.d.ts.map +1 -0
  85. package/dist/cli/__tests__/validate.command.unit.test.js +226 -0
  86. package/dist/cli/__tests__/validate.command.unit.test.js.map +1 -0
  87. package/dist/cli/command-deps.d.ts +125 -0
  88. package/dist/cli/command-deps.d.ts.map +1 -0
  89. package/dist/cli/command-deps.js +7 -0
  90. package/dist/cli/command-deps.js.map +1 -0
  91. package/dist/cli/commands/aggregate.d.ts +35 -0
  92. package/dist/cli/commands/aggregate.d.ts.map +1 -0
  93. package/dist/cli/commands/aggregate.js +121 -0
  94. package/dist/cli/commands/aggregate.js.map +1 -0
  95. package/dist/cli/commands/plan.d.ts +36 -0
  96. package/dist/cli/commands/plan.d.ts.map +1 -0
  97. package/dist/cli/commands/plan.js +109 -0
  98. package/dist/cli/commands/plan.js.map +1 -0
  99. package/dist/cli/commands/run.d.ts +33 -0
  100. package/dist/cli/commands/run.d.ts.map +1 -0
  101. package/dist/cli/commands/run.js +185 -0
  102. package/dist/cli/commands/run.js.map +1 -0
  103. package/dist/cli/commands/validate.d.ts +27 -0
  104. package/dist/cli/commands/validate.d.ts.map +1 -0
  105. package/dist/cli/commands/validate.js +88 -0
  106. package/dist/cli/commands/validate.js.map +1 -0
  107. package/dist/cli/config-loader.d.ts +30 -0
  108. package/dist/cli/config-loader.d.ts.map +1 -0
  109. package/dist/cli/config-loader.js +181 -0
  110. package/dist/cli/config-loader.js.map +1 -0
  111. package/dist/cli/index.d.ts +26 -0
  112. package/dist/cli/index.d.ts.map +1 -0
  113. package/dist/cli/index.js +58 -0
  114. package/dist/cli/index.js.map +1 -0
  115. package/dist/cli/logger.d.ts +75 -0
  116. package/dist/cli/logger.d.ts.map +1 -0
  117. package/dist/cli/logger.js +131 -0
  118. package/dist/cli/logger.js.map +1 -0
  119. package/dist/cli/module-loader.d.ts +46 -0
  120. package/dist/cli/module-loader.d.ts.map +1 -0
  121. package/dist/cli/module-loader.js +116 -0
  122. package/dist/cli/module-loader.js.map +1 -0
  123. package/dist/cli/output-writer.d.ts +51 -0
  124. package/dist/cli/output-writer.d.ts.map +1 -0
  125. package/dist/cli/output-writer.js +65 -0
  126. package/dist/cli/output-writer.js.map +1 -0
  127. package/dist/cli/types.d.ts +174 -0
  128. package/dist/cli/types.d.ts.map +1 -0
  129. package/dist/cli/types.js +7 -0
  130. package/dist/cli/types.js.map +1 -0
  131. package/dist/collector/__tests__/result-collector.unit.test.d.ts +7 -0
  132. package/dist/collector/__tests__/result-collector.unit.test.d.ts.map +1 -0
  133. package/dist/collector/__tests__/result-collector.unit.test.js +1021 -0
  134. package/dist/collector/__tests__/result-collector.unit.test.js.map +1 -0
  135. package/dist/collector/__tests__/schema.unit.test.d.ts +7 -0
  136. package/dist/collector/__tests__/schema.unit.test.d.ts.map +1 -0
  137. package/dist/collector/__tests__/schema.unit.test.js +360 -0
  138. package/dist/collector/__tests__/schema.unit.test.js.map +1 -0
  139. package/dist/collector/index.d.ts +8 -0
  140. package/dist/collector/index.d.ts.map +1 -0
  141. package/dist/collector/index.js +8 -0
  142. package/dist/collector/index.js.map +1 -0
  143. package/dist/collector/result-collector.d.ts +159 -0
  144. package/dist/collector/result-collector.d.ts.map +1 -0
  145. package/dist/collector/result-collector.js +213 -0
  146. package/dist/collector/result-collector.js.map +1 -0
  147. package/dist/collector/schema.d.ts +34 -0
  148. package/dist/collector/schema.d.ts.map +1 -0
  149. package/dist/collector/schema.js +145 -0
  150. package/dist/collector/schema.js.map +1 -0
  151. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.d.ts +10 -0
  152. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.d.ts.map +1 -0
  153. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.js +122 -0
  154. package/dist/executor/__tests__/checkpoint-hash-bug.diagnostic.test.js.map +1 -0
  155. package/dist/executor/__tests__/checkpoint-manager.integration.test.d.ts +7 -0
  156. package/dist/executor/__tests__/checkpoint-manager.integration.test.d.ts.map +1 -0
  157. package/dist/executor/__tests__/checkpoint-manager.integration.test.js +330 -0
  158. package/dist/executor/__tests__/checkpoint-manager.integration.test.js.map +1 -0
  159. package/dist/executor/__tests__/checkpoint-manager.unit.test.d.ts +7 -0
  160. package/dist/executor/__tests__/checkpoint-manager.unit.test.d.ts.map +1 -0
  161. package/dist/executor/__tests__/checkpoint-manager.unit.test.js +531 -0
  162. package/dist/executor/__tests__/checkpoint-manager.unit.test.js.map +1 -0
  163. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts +8 -0
  164. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts.map +1 -0
  165. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js +493 -0
  166. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js.map +1 -0
  167. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.d.ts +8 -0
  168. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.d.ts.map +1 -0
  169. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.js +164 -0
  170. package/dist/executor/__tests__/checkpoint-merge-bug.unit.test.js.map +1 -0
  171. package/dist/executor/__tests__/checkpoint-storage.unit.test.d.ts +7 -0
  172. package/dist/executor/__tests__/checkpoint-storage.unit.test.d.ts.map +1 -0
  173. package/dist/executor/__tests__/checkpoint-storage.unit.test.js +490 -0
  174. package/dist/executor/__tests__/checkpoint-storage.unit.test.js.map +1 -0
  175. package/dist/executor/__tests__/executor.unit.test.d.ts +7 -0
  176. package/dist/executor/__tests__/executor.unit.test.d.ts.map +1 -0
  177. package/dist/executor/__tests__/executor.unit.test.js +202 -0
  178. package/dist/executor/__tests__/executor.unit.test.js.map +1 -0
  179. package/dist/executor/__tests__/memory-monitor.unit.test.d.ts +7 -0
  180. package/dist/executor/__tests__/memory-monitor.unit.test.d.ts.map +1 -0
  181. package/dist/executor/__tests__/memory-monitor.unit.test.js +285 -0
  182. package/dist/executor/__tests__/memory-monitor.unit.test.js.map +1 -0
  183. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.d.ts +12 -0
  184. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.d.ts.map +1 -0
  185. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.js +196 -0
  186. package/dist/executor/__tests__/parallel-checkpoint-merge.integration.test.js.map +1 -0
  187. package/dist/executor/__tests__/parallel-executor.integration.test.d.ts +7 -0
  188. package/dist/executor/__tests__/parallel-executor.integration.test.d.ts.map +1 -0
  189. package/dist/executor/__tests__/parallel-executor.integration.test.js +249 -0
  190. package/dist/executor/__tests__/parallel-executor.integration.test.js.map +1 -0
  191. package/dist/executor/__tests__/parallel-executor.unit.test.d.ts +8 -0
  192. package/dist/executor/__tests__/parallel-executor.unit.test.d.ts.map +1 -0
  193. package/dist/executor/__tests__/parallel-executor.unit.test.js +473 -0
  194. package/dist/executor/__tests__/parallel-executor.unit.test.js.map +1 -0
  195. package/dist/executor/__tests__/run-id.unit.test.d.ts +8 -0
  196. package/dist/executor/__tests__/run-id.unit.test.d.ts.map +1 -0
  197. package/dist/executor/__tests__/run-id.unit.test.js +156 -0
  198. package/dist/executor/__tests__/run-id.unit.test.js.map +1 -0
  199. package/dist/executor/__tests__/worker-entry.integration.test.d.ts +24 -0
  200. package/dist/executor/__tests__/worker-entry.integration.test.d.ts.map +1 -0
  201. package/dist/executor/__tests__/worker-entry.integration.test.js +82 -0
  202. package/dist/executor/__tests__/worker-entry.integration.test.js.map +1 -0
  203. package/dist/executor/__tests__/worker-entry.unit.test.d.ts +7 -0
  204. package/dist/executor/__tests__/worker-entry.unit.test.d.ts.map +1 -0
  205. package/dist/executor/__tests__/worker-entry.unit.test.js +364 -0
  206. package/dist/executor/__tests__/worker-entry.unit.test.js.map +1 -0
  207. package/dist/executor/checkpoint-manager.d.ts +231 -0
  208. package/dist/executor/checkpoint-manager.d.ts.map +1 -0
  209. package/dist/executor/checkpoint-manager.js +395 -0
  210. package/dist/executor/checkpoint-manager.js.map +1 -0
  211. package/dist/executor/checkpoint-storage.d.ts +230 -0
  212. package/dist/executor/checkpoint-storage.d.ts.map +1 -0
  213. package/dist/executor/checkpoint-storage.js +370 -0
  214. package/dist/executor/checkpoint-storage.js.map +1 -0
  215. package/dist/executor/checkpoint-types.d.ts +48 -0
  216. package/dist/executor/checkpoint-types.d.ts.map +1 -0
  217. package/dist/executor/checkpoint-types.js +8 -0
  218. package/dist/executor/checkpoint-types.js.map +1 -0
  219. package/dist/executor/executor.d.ts +164 -0
  220. package/dist/executor/executor.d.ts.map +1 -0
  221. package/dist/executor/executor.js +408 -0
  222. package/dist/executor/executor.js.map +1 -0
  223. package/dist/executor/index.d.ts +11 -0
  224. package/dist/executor/index.d.ts.map +1 -0
  225. package/dist/executor/index.js +11 -0
  226. package/dist/executor/index.js.map +1 -0
  227. package/dist/executor/memory-monitor.d.ts +115 -0
  228. package/dist/executor/memory-monitor.d.ts.map +1 -0
  229. package/dist/executor/memory-monitor.js +168 -0
  230. package/dist/executor/memory-monitor.js.map +1 -0
  231. package/dist/executor/parallel-executor.d.ts +239 -0
  232. package/dist/executor/parallel-executor.d.ts.map +1 -0
  233. package/dist/executor/parallel-executor.js +329 -0
  234. package/dist/executor/parallel-executor.js.map +1 -0
  235. package/dist/executor/run-id.d.ts +71 -0
  236. package/dist/executor/run-id.d.ts.map +1 -0
  237. package/dist/executor/run-id.js +74 -0
  238. package/dist/executor/run-id.js.map +1 -0
  239. package/dist/executor/worker-entry.d.ts +10 -0
  240. package/dist/executor/worker-entry.d.ts.map +1 -0
  241. package/dist/executor/worker-entry.js +42 -0
  242. package/dist/executor/worker-entry.js.map +1 -0
  243. package/dist/executor/worker-executor.d.ts +156 -0
  244. package/dist/executor/worker-executor.d.ts.map +1 -0
  245. package/dist/executor/worker-executor.js +88 -0
  246. package/dist/executor/worker-executor.js.map +1 -0
  247. package/dist/index.cjs +11 -0
  248. package/dist/index.d.ts +15 -0
  249. package/dist/index.d.ts.map +1 -0
  250. package/dist/index.js +24 -0
  251. package/dist/index.js.map +1 -0
  252. package/dist/registry/case-registry.d.ts +113 -0
  253. package/dist/registry/case-registry.d.ts.map +1 -0
  254. package/dist/registry/case-registry.js +160 -0
  255. package/dist/registry/case-registry.js.map +1 -0
  256. package/dist/registry/index.d.ts +8 -0
  257. package/dist/registry/index.d.ts.map +1 -0
  258. package/dist/registry/index.js +8 -0
  259. package/dist/registry/index.js.map +1 -0
  260. package/dist/registry/sut-registry.d.ts +96 -0
  261. package/dist/registry/sut-registry.d.ts.map +1 -0
  262. package/dist/registry/sut-registry.js +126 -0
  263. package/dist/registry/sut-registry.js.map +1 -0
  264. package/dist/renderers/index.d.ts +10 -0
  265. package/dist/renderers/index.d.ts.map +1 -0
  266. package/dist/renderers/index.js +9 -0
  267. package/dist/renderers/index.js.map +1 -0
  268. package/dist/renderers/latex-renderer.d.ts +84 -0
  269. package/dist/renderers/latex-renderer.d.ts.map +1 -0
  270. package/dist/renderers/latex-renderer.js +208 -0
  271. package/dist/renderers/latex-renderer.js.map +1 -0
  272. package/dist/renderers/types.d.ts +106 -0
  273. package/dist/renderers/types.d.ts.map +1 -0
  274. package/dist/renderers/types.js +23 -0
  275. package/dist/renderers/types.js.map +1 -0
  276. package/dist/robustness/__tests__/analyzer.unit.test.d.ts +11 -0
  277. package/dist/robustness/__tests__/analyzer.unit.test.d.ts.map +1 -0
  278. package/dist/robustness/__tests__/analyzer.unit.test.js +455 -0
  279. package/dist/robustness/__tests__/analyzer.unit.test.js.map +1 -0
  280. package/dist/robustness/__tests__/perturbations.unit.test.d.ts +11 -0
  281. package/dist/robustness/__tests__/perturbations.unit.test.d.ts.map +1 -0
  282. package/dist/robustness/__tests__/perturbations.unit.test.js +284 -0
  283. package/dist/robustness/__tests__/perturbations.unit.test.js.map +1 -0
  284. package/dist/robustness/analyzer.d.ts +61 -0
  285. package/dist/robustness/analyzer.d.ts.map +1 -0
  286. package/dist/robustness/analyzer.js +191 -0
  287. package/dist/robustness/analyzer.js.map +1 -0
  288. package/dist/robustness/index.d.ts +8 -0
  289. package/dist/robustness/index.d.ts.map +1 -0
  290. package/dist/robustness/index.js +8 -0
  291. package/dist/robustness/index.js.map +1 -0
  292. package/dist/robustness/perturbations.d.ts +46 -0
  293. package/dist/robustness/perturbations.d.ts.map +1 -0
  294. package/dist/robustness/perturbations.js +184 -0
  295. package/dist/robustness/perturbations.js.map +1 -0
  296. package/dist/statistical/__tests__/mann-whitney-u.unit.test.d.ts +7 -0
  297. package/dist/statistical/__tests__/mann-whitney-u.unit.test.d.ts.map +1 -0
  298. package/dist/statistical/__tests__/mann-whitney-u.unit.test.js +185 -0
  299. package/dist/statistical/__tests__/mann-whitney-u.unit.test.js.map +1 -0
  300. package/dist/statistical/index.d.ts +8 -0
  301. package/dist/statistical/index.d.ts.map +1 -0
  302. package/dist/statistical/index.js +8 -0
  303. package/dist/statistical/index.js.map +1 -0
  304. package/dist/statistical/mann-whitney-u.d.ts +62 -0
  305. package/dist/statistical/mann-whitney-u.d.ts.map +1 -0
  306. package/dist/statistical/mann-whitney-u.js +127 -0
  307. package/dist/statistical/mann-whitney-u.js.map +1 -0
  308. package/dist/types/aggregate.d.ts +124 -0
  309. package/dist/types/aggregate.d.ts.map +1 -0
  310. package/dist/types/aggregate.js +9 -0
  311. package/dist/types/aggregate.js.map +1 -0
  312. package/dist/types/case.d.ts +105 -0
  313. package/dist/types/case.d.ts.map +1 -0
  314. package/dist/types/case.js +10 -0
  315. package/dist/types/case.js.map +1 -0
  316. package/dist/types/claims.d.ts +122 -0
  317. package/dist/types/claims.d.ts.map +1 -0
  318. package/dist/types/claims.js +14 -0
  319. package/dist/types/claims.js.map +1 -0
  320. package/dist/types/index.d.ts +12 -0
  321. package/dist/types/index.d.ts.map +1 -0
  322. package/dist/types/index.js +7 -0
  323. package/dist/types/index.js.map +1 -0
  324. package/dist/types/perturbation.d.ts +105 -0
  325. package/dist/types/perturbation.d.ts.map +1 -0
  326. package/dist/types/perturbation.js +9 -0
  327. package/dist/types/perturbation.js.map +1 -0
  328. package/dist/types/result.d.ts +150 -0
  329. package/dist/types/result.d.ts.map +1 -0
  330. package/dist/types/result.js +12 -0
  331. package/dist/types/result.js.map +1 -0
  332. package/dist/types/sut.d.ts +128 -0
  333. package/dist/types/sut.d.ts.map +1 -0
  334. package/dist/types/sut.js +12 -0
  335. package/dist/types/sut.js.map +1 -0
  336. package/package.json +290 -7
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Result Collector
3
+ *
4
+ * Collects, validates, and stores evaluation results.
5
+ * Replaces the simple MetricsCollector with a schema-aware implementation.
6
+ */
7
+ import type { Primitive } from "../types/case.js";
8
+ import type { EvaluationResult, ResultBatch } from "../types/result.js";
9
+ import type { SutRole } from "../types/sut.js";
10
+ /**
11
+ * Filter criteria for querying results.
12
+ */
13
+ export interface ResultFilter {
14
+ /** Filter by SUT ID */
15
+ sut?: string;
16
+ /** Filter by SUT role */
17
+ sutRole?: SutRole;
18
+ /** Filter by case ID */
19
+ caseId?: string;
20
+ /** Filter by case class */
21
+ caseClass?: string;
22
+ /** Filter by validity */
23
+ valid?: boolean;
24
+ /** Filter by metric presence */
25
+ hasMetric?: string;
26
+ /** Custom predicate */
27
+ predicate?: (result: EvaluationResult) => boolean;
28
+ }
29
+ /**
30
+ * Aggregation options.
31
+ */
32
+ export interface AggregationOptions {
33
+ /** Group by SUT */
34
+ groupBySut?: boolean;
35
+ /** Group by case class */
36
+ groupByCaseClass?: boolean;
37
+ /** Metrics to aggregate */
38
+ metrics?: string[];
39
+ }
40
+ /**
41
+ * Schema validation error.
42
+ */
43
+ export interface ValidationError {
44
+ field: string;
45
+ message: string;
46
+ }
47
+ /**
48
+ * Result collector with schema validation and querying.
49
+ */
50
+ export declare class ResultCollector {
51
+ private results;
52
+ private readonly schemaVersion;
53
+ /**
54
+ * Record a single result with validation.
55
+ *
56
+ * @param result - Result to record
57
+ * @throws Error if result fails validation
58
+ */
59
+ record(result: EvaluationResult): void;
60
+ /**
61
+ * Record multiple results.
62
+ *
63
+ * @param results - Results to record
64
+ */
65
+ recordBatch(results: EvaluationResult[]): void;
66
+ /**
67
+ * Validate a result against the schema.
68
+ *
69
+ * @param result - Result to validate
70
+ * @returns Array of validation errors (empty if valid)
71
+ */
72
+ validate(result: EvaluationResult): ValidationError[];
73
+ /**
74
+ * Query results with filters.
75
+ *
76
+ * @param filter - Filter criteria
77
+ * @returns Matching results
78
+ */
79
+ query(filter?: ResultFilter): EvaluationResult[];
80
+ /**
81
+ * Get all results for a specific SUT.
82
+ *
83
+ * @param sutId - SUT identifier
84
+ * @returns Results for that SUT
85
+ */
86
+ getBySut(sutId: string): EvaluationResult[];
87
+ /**
88
+ * Get all results for a specific case class.
89
+ *
90
+ * @param caseClass - Case class
91
+ * @returns Results for that case class
92
+ */
93
+ getByCaseClass(caseClass: string): EvaluationResult[];
94
+ /**
95
+ * Get unique SUT IDs in the collection.
96
+ */
97
+ getUniqueSuts(): string[];
98
+ /**
99
+ * Get unique case classes in the collection.
100
+ */
101
+ getUniqueCaseClasses(): string[];
102
+ /**
103
+ * Get unique metric names in the collection.
104
+ */
105
+ getUniqueMetrics(): string[];
106
+ /**
107
+ * Get all results.
108
+ */
109
+ getAll(): EvaluationResult[];
110
+ /**
111
+ * Get result count.
112
+ */
113
+ get count(): number;
114
+ /**
115
+ * Check if empty.
116
+ */
117
+ get isEmpty(): boolean;
118
+ /**
119
+ * Clear all results.
120
+ */
121
+ clear(): void;
122
+ /**
123
+ * Serialize to ResultBatch format.
124
+ *
125
+ * @param metadata - Optional batch metadata
126
+ * @returns Serializable batch
127
+ */
128
+ serialize(metadata?: Record<string, Primitive>): ResultBatch;
129
+ /**
130
+ * Load from a ResultBatch.
131
+ *
132
+ * @param batch - Batch to load
133
+ * @param append - Whether to append to existing results
134
+ */
135
+ load(batch: ResultBatch, append?: boolean): void;
136
+ /**
137
+ * Extract a specific metric across all results.
138
+ *
139
+ * @param metricName - Metric to extract
140
+ * @returns Array of { runId, value } pairs
141
+ */
142
+ extractMetric(metricName: string): {
143
+ runId: string;
144
+ value: number;
145
+ }[];
146
+ /**
147
+ * Get metric values for a specific SUT.
148
+ *
149
+ * @param sutId - SUT identifier
150
+ * @param metricName - Metric name
151
+ * @returns Array of metric values
152
+ */
153
+ getMetricValues(sutId: string, metricName: string): number[];
154
+ }
155
+ /**
156
+ * Global result collector instance.
157
+ */
158
+ export declare const resultCollector: ResultCollector;
159
+ //# sourceMappingURL=result-collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-collector.d.ts","sourceRoot":"","sources":["../../src/collector/result-collector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC5B,uBAAuB;IACvB,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,yBAAyB;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,yBAAyB;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,uBAAuB;IACvB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC,mBAAmB;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,0BAA0B;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,qBAAa,eAAe;IAC3B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAW;IAEzC;;;;;OAKG;IACH,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAUtC;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAM9C;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,eAAe,EAAE;IAyBrD;;;;;OAKG;IACH,KAAK,CAAC,MAAM,GAAE,YAAiB,GAAG,gBAAgB,EAAE;IAapD;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAI3C;;;;;OAKG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAIrD;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAIzB;;OAEG;IACH,oBAAoB,IAAI,MAAM,EAAE;IAOhC;;OAEG;IACH,gBAAgB,IAAI,MAAM,EAAE;IAU5B;;OAEG;IACH,MAAM,IAAI,gBAAgB,EAAE;IAI5B;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,CAElB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,OAAO,CAErB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,WAAW;IAS5D;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,UAAQ,GAAG,IAAI;IAO9C;;;;;OAKG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE;IASrE;;;;;;OAMG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE;CAK5D;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,iBAAwB,CAAC"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Result Collector
3
+ *
4
+ * Collects, validates, and stores evaluation results.
5
+ * Replaces the simple MetricsCollector with a schema-aware implementation.
6
+ */
7
+ /**
8
+ * Result collector with schema validation and querying.
9
+ */
10
+ export class ResultCollector {
11
+ results = [];
12
+ schemaVersion = "1.0.0";
13
+ /**
14
+ * Record a single result with validation.
15
+ *
16
+ * @param result - Result to record
17
+ * @throws Error if result fails validation
18
+ */
19
+ record(result) {
20
+ const errors = this.validate(result);
21
+ if (errors.length > 0) {
22
+ throw new Error(`Invalid result: ${errors.map((e) => `${e.field}: ${e.message}`).join(", ")}`);
23
+ }
24
+ this.results.push(result);
25
+ }
26
+ /**
27
+ * Record multiple results.
28
+ *
29
+ * @param results - Results to record
30
+ */
31
+ recordBatch(results) {
32
+ for (const result of results) {
33
+ this.record(result);
34
+ }
35
+ }
36
+ /**
37
+ * Validate a result against the schema.
38
+ *
39
+ * @param result - Result to validate
40
+ * @returns Array of validation errors (empty if valid)
41
+ */
42
+ validate(result) {
43
+ const errors = [];
44
+ // Validate required nested properties have non-empty values
45
+ if (result.run.runId === "") {
46
+ errors.push({ field: "run.runId", message: "Missing run ID" });
47
+ }
48
+ if (result.run.sut === "") {
49
+ errors.push({ field: "run.sut", message: "Missing SUT identifier" });
50
+ }
51
+ if (result.run.caseId === "") {
52
+ errors.push({ field: "run.caseId", message: "Missing case ID" });
53
+ }
54
+ if (Object.keys(result.metrics.numeric).length === 0) {
55
+ errors.push({ field: "metrics.numeric", message: "Missing numeric metrics" });
56
+ }
57
+ if (result.provenance.runtime.platform === "") {
58
+ errors.push({ field: "provenance.runtime.platform", message: "Missing platform" });
59
+ }
60
+ return errors;
61
+ }
62
+ /**
63
+ * Query results with filters.
64
+ *
65
+ * @param filter - Filter criteria
66
+ * @returns Matching results
67
+ */
68
+ query(filter = {}) {
69
+ return this.results.filter((result) => {
70
+ if (filter.sut && result.run.sut !== filter.sut)
71
+ return false;
72
+ if (filter.sutRole && result.run.sutRole !== filter.sutRole)
73
+ return false;
74
+ if (filter.caseId && result.run.caseId !== filter.caseId)
75
+ return false;
76
+ if (filter.caseClass && result.run.caseClass !== filter.caseClass)
77
+ return false;
78
+ if (filter.valid !== undefined && result.correctness.valid !== filter.valid)
79
+ return false;
80
+ if (filter.hasMetric && !(filter.hasMetric in result.metrics.numeric))
81
+ return false;
82
+ if (filter.predicate && !filter.predicate(result))
83
+ return false;
84
+ return true;
85
+ });
86
+ }
87
+ /**
88
+ * Get all results for a specific SUT.
89
+ *
90
+ * @param sutId - SUT identifier
91
+ * @returns Results for that SUT
92
+ */
93
+ getBySut(sutId) {
94
+ return this.query({ sut: sutId });
95
+ }
96
+ /**
97
+ * Get all results for a specific case class.
98
+ *
99
+ * @param caseClass - Case class
100
+ * @returns Results for that case class
101
+ */
102
+ getByCaseClass(caseClass) {
103
+ return this.query({ caseClass });
104
+ }
105
+ /**
106
+ * Get unique SUT IDs in the collection.
107
+ */
108
+ getUniqueSuts() {
109
+ return [...new Set(this.results.map((r) => r.run.sut))];
110
+ }
111
+ /**
112
+ * Get unique case classes in the collection.
113
+ */
114
+ getUniqueCaseClasses() {
115
+ const classes = this.results
116
+ .map((r) => r.run.caseClass)
117
+ .filter((c) => c !== undefined);
118
+ return [...new Set(classes)];
119
+ }
120
+ /**
121
+ * Get unique metric names in the collection.
122
+ */
123
+ getUniqueMetrics() {
124
+ const metrics = new Set();
125
+ for (const result of this.results) {
126
+ for (const metric of Object.keys(result.metrics.numeric)) {
127
+ metrics.add(metric);
128
+ }
129
+ }
130
+ return [...metrics];
131
+ }
132
+ /**
133
+ * Get all results.
134
+ */
135
+ getAll() {
136
+ return [...this.results];
137
+ }
138
+ /**
139
+ * Get result count.
140
+ */
141
+ get count() {
142
+ return this.results.length;
143
+ }
144
+ /**
145
+ * Check if empty.
146
+ */
147
+ get isEmpty() {
148
+ return this.results.length === 0;
149
+ }
150
+ /**
151
+ * Clear all results.
152
+ */
153
+ clear() {
154
+ this.results = [];
155
+ }
156
+ /**
157
+ * Serialize to ResultBatch format.
158
+ *
159
+ * @param metadata - Optional batch metadata
160
+ * @returns Serializable batch
161
+ */
162
+ serialize(metadata) {
163
+ return {
164
+ version: this.schemaVersion,
165
+ timestamp: new Date().toISOString(),
166
+ results: this.results,
167
+ metadata,
168
+ };
169
+ }
170
+ /**
171
+ * Load from a ResultBatch.
172
+ *
173
+ * @param batch - Batch to load
174
+ * @param append - Whether to append to existing results
175
+ */
176
+ load(batch, append = false) {
177
+ if (!append) {
178
+ this.results = [];
179
+ }
180
+ this.recordBatch(batch.results);
181
+ }
182
+ /**
183
+ * Extract a specific metric across all results.
184
+ *
185
+ * @param metricName - Metric to extract
186
+ * @returns Array of { runId, value } pairs
187
+ */
188
+ extractMetric(metricName) {
189
+ return this.results
190
+ .filter((r) => metricName in r.metrics.numeric)
191
+ .map((r) => ({
192
+ runId: r.run.runId,
193
+ value: r.metrics.numeric[metricName],
194
+ }));
195
+ }
196
+ /**
197
+ * Get metric values for a specific SUT.
198
+ *
199
+ * @param sutId - SUT identifier
200
+ * @param metricName - Metric name
201
+ * @returns Array of metric values
202
+ */
203
+ getMetricValues(sutId, metricName) {
204
+ return this.results
205
+ .filter((r) => r.run.sut === sutId && metricName in r.metrics.numeric)
206
+ .map((r) => r.metrics.numeric[metricName]);
207
+ }
208
+ }
209
+ /**
210
+ * Global result collector instance.
211
+ */
212
+ export const resultCollector = new ResultCollector();
213
+ //# sourceMappingURL=result-collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-collector.js","sourceRoot":"","sources":["../../src/collector/result-collector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Schema Definitions and Validators
3
+ *
4
+ * Provides schema validation utilities for the evaluation framework.
5
+ */
6
+ /**
7
+ * Schema validation result.
8
+ */
9
+ export interface SchemaValidation {
10
+ valid: boolean;
11
+ errors: string[];
12
+ }
13
+ /**
14
+ * Validate an EvaluationResult against the schema.
15
+ * @param result
16
+ */
17
+ export declare const validateResult: (result: unknown) => SchemaValidation;
18
+ /**
19
+ * Validate an EvaluationCase against the schema.
20
+ * @param evaluationCase
21
+ */
22
+ export declare const validateCase: (evaluationCase: unknown) => SchemaValidation;
23
+ /**
24
+ * Validate a SutRegistration against the schema.
25
+ * @param registration
26
+ */
27
+ export declare const validateSutRegistration: (registration: unknown) => SchemaValidation;
28
+ /**
29
+ * Deep freeze an object to ensure immutability.
30
+ * @param obj
31
+ * @param object
32
+ */
33
+ export declare const deepFreeze: <T extends object>(object: T) => Readonly<T>;
34
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/collector/schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,OAAO,KAAG,gBAoEhD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,gBAAgB,OAAO,KAAG,gBAqBtD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,cAAc,OAAO,KAAG,gBAqC/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,EAAE,QAAQ,CAAC,KAAG,QAAQ,CAAC,CAAC,CAQlE,CAAC"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Schema Definitions and Validators
3
+ *
4
+ * Provides schema validation utilities for the evaluation framework.
5
+ */
6
+ /**
7
+ * Validate an EvaluationResult against the schema.
8
+ * @param result
9
+ */
10
+ export const validateResult = (result) => {
11
+ const errors = [];
12
+ if (!result || typeof result !== "object") {
13
+ return { valid: false, errors: ["Result must be an object"] };
14
+ }
15
+ const r = result;
16
+ // Validate run context
17
+ if (!r.run || typeof r.run !== "object") {
18
+ errors.push("Missing or invalid run context");
19
+ }
20
+ else {
21
+ if (typeof r.run.runId !== "string" || r.run.runId.length === 0) {
22
+ errors.push("run.runId must be a non-empty string");
23
+ }
24
+ if (typeof r.run.sut !== "string" || r.run.sut.length === 0) {
25
+ errors.push("run.sut must be a non-empty string");
26
+ }
27
+ if (!["primary", "baseline", "oracle"].includes(r.run.sutRole)) {
28
+ errors.push("run.sutRole must be 'primary', 'baseline', or 'oracle'");
29
+ }
30
+ if (typeof r.run.caseId !== "string" || r.run.caseId.length === 0) {
31
+ errors.push("run.caseId must be a non-empty string");
32
+ }
33
+ }
34
+ // Validate correctness
35
+ if (!r.correctness || typeof r.correctness !== "object") {
36
+ errors.push("Missing or invalid correctness assessment");
37
+ }
38
+ else {
39
+ if (typeof r.correctness.expectedExists !== "boolean") {
40
+ errors.push("correctness.expectedExists must be a boolean");
41
+ }
42
+ if (typeof r.correctness.producedOutput !== "boolean") {
43
+ errors.push("correctness.producedOutput must be a boolean");
44
+ }
45
+ if (typeof r.correctness.valid !== "boolean") {
46
+ errors.push("correctness.valid must be a boolean");
47
+ }
48
+ }
49
+ // Validate metrics
50
+ if (!r.metrics || typeof r.metrics !== "object") {
51
+ errors.push("Missing or invalid metrics");
52
+ }
53
+ else {
54
+ if (typeof r.metrics.numeric !== "object") {
55
+ errors.push("metrics.numeric must be an object");
56
+ }
57
+ else {
58
+ for (const [key, value] of Object.entries(r.metrics.numeric)) {
59
+ if (typeof value !== "number" || !Number.isFinite(value)) {
60
+ errors.push(`metrics.numeric.${key} must be a finite number`);
61
+ }
62
+ }
63
+ }
64
+ }
65
+ // Validate provenance
66
+ if (!r.provenance || typeof r.provenance !== "object") {
67
+ errors.push("Missing or invalid provenance");
68
+ }
69
+ else if (typeof r.provenance.runtime !== "object") {
70
+ errors.push("provenance.runtime must be an object");
71
+ }
72
+ return {
73
+ valid: errors.length === 0,
74
+ errors,
75
+ };
76
+ };
77
+ /**
78
+ * Validate an EvaluationCase against the schema.
79
+ * @param evaluationCase
80
+ */
81
+ export const validateCase = (evaluationCase) => {
82
+ const errors = [];
83
+ if (!evaluationCase || typeof evaluationCase !== "object") {
84
+ return { valid: false, errors: ["Case must be an object"] };
85
+ }
86
+ const c = evaluationCase;
87
+ if (typeof c.caseId !== "string" || c.caseId.length === 0) {
88
+ errors.push("caseId must be a non-empty string");
89
+ }
90
+ if (!c.inputs || typeof c.inputs !== "object") {
91
+ errors.push("inputs must be an object");
92
+ }
93
+ return {
94
+ valid: errors.length === 0,
95
+ errors,
96
+ };
97
+ };
98
+ /**
99
+ * Validate a SutRegistration against the schema.
100
+ * @param registration
101
+ */
102
+ export const validateSutRegistration = (registration) => {
103
+ const errors = [];
104
+ if (!registration || typeof registration !== "object") {
105
+ return { valid: false, errors: ["Registration must be an object"] };
106
+ }
107
+ const r = registration;
108
+ if (typeof r.id !== "string" || r.id.length === 0) {
109
+ errors.push("id must be a non-empty string");
110
+ }
111
+ if (typeof r.name !== "string" || r.name.length === 0) {
112
+ errors.push("name must be a non-empty string");
113
+ }
114
+ if (typeof r.version !== "string" || r.version.length === 0) {
115
+ errors.push("version must be a non-empty string");
116
+ }
117
+ if (!["primary", "baseline", "oracle"].includes(r.role ?? "")) {
118
+ errors.push("role must be 'primary', 'baseline', or 'oracle'");
119
+ }
120
+ if (!r.config || typeof r.config !== "object") {
121
+ errors.push("config must be an object");
122
+ }
123
+ if (!Array.isArray(r.tags)) {
124
+ errors.push("tags must be an array");
125
+ }
126
+ return {
127
+ valid: errors.length === 0,
128
+ errors,
129
+ };
130
+ };
131
+ /**
132
+ * Deep freeze an object to ensure immutability.
133
+ * @param obj
134
+ * @param object
135
+ */
136
+ export const deepFreeze = (object) => {
137
+ Object.freeze(object);
138
+ for (const value of Object.values(object)) {
139
+ if (value && typeof value === "object" && !Object.isFrozen(value)) {
140
+ deepFreeze(value);
141
+ }
142
+ }
143
+ return object;
144
+ };
145
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/collector/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Diagnostic Tests for Checkpoint Config Hash Bug
3
+ *
4
+ * Root cause: Config hash calculation includes properties that vary between
5
+ * main process and workers (e.g., 'concurrency'), causing checkpoint invalidation.
6
+ *
7
+ * This test diagnoses and will help fix the hash matching issue.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=checkpoint-hash-bug.diagnostic.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-hash-bug.diagnostic.test.d.ts","sourceRoot":"","sources":["../../../src/executor/__tests__/checkpoint-hash-bug.diagnostic.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}