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,122 @@
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
+ import { createHash } from "node:crypto";
10
+ import { describe, it } from "node:test";
11
+ import { strict as assert } from "node:assert";
12
+ describe("Checkpoint Config Hash Bug Diagnostics", () => {
13
+ it("diagnostic-1: identifies which properties cause hash mismatch", () => {
14
+ // Main process config (from evaluate.ts)
15
+ const mainProcessConfig = {
16
+ continueOnError: true,
17
+ repetitions: 1,
18
+ seedBase: 42,
19
+ timeoutMs: 300_000,
20
+ collectProvenance: true,
21
+ concurrency: 12, // This varies!
22
+ onProgress: undefined,
23
+ onResult: undefined,
24
+ };
25
+ // Worker process config (what workers actually use)
26
+ const workerConfig = {
27
+ continueOnError: true,
28
+ repetitions: 1,
29
+ seedBase: 42,
30
+ timeoutMs: 300_000,
31
+ collectProvenance: true,
32
+ };
33
+ const mainHash = createHash("sha256")
34
+ .update(JSON.stringify(mainProcessConfig, Object.keys(mainProcessConfig).sort()))
35
+ .digest("hex");
36
+ const workerHash = createHash("sha256")
37
+ .update(JSON.stringify(workerConfig, Object.keys(workerConfig).sort()))
38
+ .digest("hex");
39
+ console.log("Main process hash:", mainHash);
40
+ console.log("Worker process hash:", workerHash);
41
+ console.log("Match:", mainHash === workerHash);
42
+ // They should NOT match because 'concurrency' is different
43
+ assert.notStrictEqual(mainHash, workerHash);
44
+ // This is the bug! The hash includes functions/concurrency which varies
45
+ });
46
+ it("diagnostic-2: demonstrates correct hash normalization", () => {
47
+ // Extract only serializable properties for hashing
48
+ const extractConfigForHash = (config) => {
49
+ const { concurrency, onProgress, onResult, ...hashable } = config;
50
+ return hashable;
51
+ };
52
+ const config1 = {
53
+ continueOnError: true,
54
+ repetitions: 1,
55
+ seedBase: 42,
56
+ timeoutMs: 300_000,
57
+ collectProvenance: true,
58
+ concurrency: 12,
59
+ onProgress: () => { },
60
+ onResult: async () => { },
61
+ };
62
+ const config2 = {
63
+ continueOnError: true,
64
+ repetitions: 1,
65
+ seedBase: 42,
66
+ timeoutMs: 300_000,
67
+ collectProvenance: true,
68
+ concurrency: 4, // Different!
69
+ onProgress: undefined,
70
+ onResult: undefined,
71
+ };
72
+ const hash1 = createHash("sha256")
73
+ .update(JSON.stringify(extractConfigForHash(config1), Object.keys(extractConfigForHash(config1)).sort()))
74
+ .digest("hex");
75
+ const hash2 = createHash("sha256")
76
+ .update(JSON.stringify(extractConfigForHash(config2), Object.keys(extractConfigForHash(config2)).sort()))
77
+ .digest("hex");
78
+ console.log("Normalized hash 1:", hash1);
79
+ console.log("Normalized hash 2:", hash2);
80
+ console.log("Match after normalization:", hash1 === hash2);
81
+ // They SHOULD match after normalization
82
+ assert.strictEqual(hash1, hash2);
83
+ });
84
+ it("diagnostic-3: shows actual checkpoint vs computed hash", () => {
85
+ // This is what's stored in the checkpoint
86
+ const storedHash = "a5cf20f1520ebfdb108b04f62a4a06682e4c8c791e00c7aed32fa25088ce53d5";
87
+ // What the main process computes
88
+ const mainConfig = {
89
+ continueOnError: true,
90
+ repetitions: 1,
91
+ seedBase: 42,
92
+ timeoutMs: 300_000,
93
+ collectProvenance: true,
94
+ concurrency: 12,
95
+ };
96
+ // What a worker computes
97
+ const workerConfig = {
98
+ continueOnError: true,
99
+ repetitions: 1,
100
+ seedBase: 42,
101
+ timeoutMs: 300_000,
102
+ collectProvenance: true,
103
+ };
104
+ const mainHash = createHash("sha256")
105
+ .update(JSON.stringify(mainConfig, Object.keys(mainConfig).sort()))
106
+ .digest("hex");
107
+ const workerHash = createHash("sha256")
108
+ .update(JSON.stringify(workerConfig, Object.keys(workerConfig).sort()))
109
+ .digest("hex");
110
+ console.log("Stored hash:", storedHash);
111
+ console.log("Main process hash:", mainHash);
112
+ console.log("Worker process hash:", workerHash);
113
+ console.log("Main matches stored:", mainHash === storedHash);
114
+ console.log("Worker matches stored:", workerHash === storedHash);
115
+ // The stored hash matches main process (with concurrency=12)
116
+ assert.strictEqual(mainHash, storedHash);
117
+ // Worker hash differs (no concurrency property)
118
+ assert.notStrictEqual(workerHash, storedHash);
119
+ // This proves workers will always have hash mismatch!
120
+ });
121
+ });
122
+ //# sourceMappingURL=checkpoint-hash-bug.diagnostic.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-hash-bug.diagnostic.test.js","sourceRoot":"","sources":["../../../src/executor/__tests__/checkpoint-hash-bug.diagnostic.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Integration tests for CheckpointManager
3
+ *
4
+ * Tests end-to-end checkpoint operations with real file system.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=checkpoint-manager.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-manager.integration.test.d.ts","sourceRoot":"","sources":["../../../src/executor/__tests__/checkpoint-manager.integration.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,330 @@
1
+ /**
2
+ * Integration tests for CheckpointManager
3
+ *
4
+ * Tests end-to-end checkpoint operations with real file system.
5
+ */
6
+ import { existsSync, rmSync, unlinkSync } from "node:fs";
7
+ import { join } from "node:path";
8
+ import { describe, it, beforeEach, afterEach } from "node:test";
9
+ import assert from "node:assert/strict";
10
+ import { CheckpointManager, InMemoryLock } from "../checkpoint-manager.js";
11
+ import { FileStorage } from "../checkpoint-storage.js";
12
+ const TEST_DIR = join(process.cwd(), "test-checkpoints");
13
+ /**
14
+ * Create a minimal valid EvaluationResult for testing.
15
+ * @param runId
16
+ */
17
+ const createTestResult = (runId) => {
18
+ const runContext = {
19
+ runId,
20
+ sut: "test-sut",
21
+ sutRole: "primary",
22
+ caseId: "test-case",
23
+ config: { repetitions: 1, seedBase: 42 },
24
+ };
25
+ return {
26
+ run: runContext,
27
+ correctness: {
28
+ expectedExists: false,
29
+ producedOutput: true,
30
+ valid: true,
31
+ matchesExpected: null,
32
+ },
33
+ outputs: {},
34
+ metrics: { numeric: {} },
35
+ provenance: {
36
+ runtime: {
37
+ platform: process.platform,
38
+ arch: process.arch,
39
+ nodeVersion: process.version,
40
+ },
41
+ },
42
+ };
43
+ };
44
+ /**
45
+ * Clean up test checkpoint files.
46
+ * @param path
47
+ */
48
+ const cleanupCheckpointFile = (path) => {
49
+ try {
50
+ if (existsSync(path)) {
51
+ unlinkSync(path);
52
+ }
53
+ }
54
+ catch {
55
+ // Ignore
56
+ }
57
+ };
58
+ /**
59
+ * Clean up test directory.
60
+ */
61
+ const cleanupTestDir = () => {
62
+ try {
63
+ rmSync(TEST_DIR, { recursive: true, force: true });
64
+ }
65
+ catch {
66
+ // Ignore
67
+ }
68
+ };
69
+ describe("CheckpointManager (Integration)", () => {
70
+ beforeEach(() => {
71
+ cleanupTestDir();
72
+ });
73
+ afterEach(() => {
74
+ cleanupTestDir();
75
+ });
76
+ describe("End-to-end checkpoint lifecycle", () => {
77
+ it("should create checkpoint, save results, load, and verify", async () => {
78
+ const checkpointPath = join(TEST_DIR, "checkpoint.json");
79
+ const storage = new FileStorage(checkpointPath);
80
+ const lock = new InMemoryLock();
81
+ const checkpoint = new CheckpointManager({ storage, lock });
82
+ // Initially no checkpoint
83
+ assert.strictEqual(await checkpoint.load(), false);
84
+ assert.strictEqual(checkpoint.exists(), false);
85
+ // Save a result
86
+ const result1 = createTestResult("run1");
87
+ await checkpoint.saveIncremental(result1);
88
+ // Load checkpoint
89
+ const loaded = await checkpoint.load();
90
+ assert.strictEqual(loaded, true);
91
+ assert.strictEqual(checkpoint.exists(), true);
92
+ // Verify data
93
+ assert.strictEqual(checkpoint.isCompleted("run1"), true);
94
+ assert.strictEqual(checkpoint.getResults().length, 1);
95
+ // Save another result
96
+ const result2 = createTestResult("run2");
97
+ await checkpoint.saveIncremental(result2);
98
+ // Reload and verify both results
99
+ await checkpoint.load();
100
+ assert.strictEqual(checkpoint.isCompleted("run1"), true);
101
+ assert.strictEqual(checkpoint.isCompleted("run2"), true);
102
+ assert.strictEqual(checkpoint.getResults().length, 2);
103
+ // Clean up
104
+ cleanupCheckpointFile(checkpointPath);
105
+ });
106
+ it("should resume from checkpoint and save more results", async () => {
107
+ const checkpointPath = join(TEST_DIR, "resume-checkpoint.json");
108
+ const storage = new FileStorage(checkpointPath);
109
+ const lock = new InMemoryLock();
110
+ const checkpoint = new CheckpointManager({ storage, lock });
111
+ // Save initial results
112
+ await checkpoint.saveIncremental(createTestResult("run1"));
113
+ await checkpoint.saveIncremental(createTestResult("run2"));
114
+ // Create new checkpoint manager instance (simulating process restart)
115
+ const storage2 = new FileStorage(checkpointPath);
116
+ const checkpoint2 = new CheckpointManager({ storage: storage2, lock });
117
+ await checkpoint2.load();
118
+ // Verify existing data
119
+ assert.strictEqual(checkpoint2.isCompleted("run1"), true);
120
+ assert.strictEqual(checkpoint2.isCompleted("run2"), true);
121
+ // Add more results
122
+ await checkpoint2.saveIncremental(createTestResult("run3"));
123
+ await checkpoint2.saveIncremental(createTestResult("run4"));
124
+ // Final verification with yet another instance
125
+ const storage3 = new FileStorage(checkpointPath);
126
+ const checkpoint3 = new CheckpointManager({ storage: storage3, lock });
127
+ await checkpoint3.load();
128
+ assert.strictEqual(checkpoint3.getResults().length, 4);
129
+ assert.strictEqual(checkpoint3.isCompleted("run1"), true);
130
+ assert.strictEqual(checkpoint3.isCompleted("run2"), true);
131
+ assert.strictEqual(checkpoint3.isCompleted("run3"), true);
132
+ assert.strictEqual(checkpoint3.isCompleted("run4"), true);
133
+ // Clean up
134
+ cleanupCheckpointFile(checkpointPath);
135
+ });
136
+ });
137
+ describe("Multi-worker simulation", () => {
138
+ it("should handle multiple workers writing to separate files", async () => {
139
+ const workers = 3;
140
+ const checkpoints = [];
141
+ const checkpointPaths = [];
142
+ // Create checkpoint managers for each worker
143
+ for (let index = 0; index < workers; index++) {
144
+ const path = join(TEST_DIR, `checkpoint-worker-${index}.json`);
145
+ checkpointPaths.push(path);
146
+ const storage = new FileStorage(path);
147
+ const lock = new InMemoryLock();
148
+ const checkpoint = new CheckpointManager({
149
+ storage,
150
+ lock,
151
+ workerIndex: index,
152
+ totalWorkers: workers,
153
+ basePath: TEST_DIR,
154
+ });
155
+ checkpoints.push(checkpoint);
156
+ }
157
+ // Each worker saves different results
158
+ await checkpoints[0].saveIncremental(createTestResult("run0"));
159
+ await checkpoints[0].saveIncremental(createTestResult("run1"));
160
+ await checkpoints[1].saveIncremental(createTestResult("run2"));
161
+ await checkpoints[1].saveIncremental(createTestResult("run3"));
162
+ await checkpoints[2].saveIncremental(createTestResult("run4"));
163
+ await checkpoints[2].saveIncremental(createTestResult("run5"));
164
+ // Verify each worker has their own data
165
+ await checkpoints[0].load();
166
+ assert.strictEqual(checkpoints[0].getResults().length, 2);
167
+ assert.strictEqual(checkpoints[0].isCompleted("run0"), true);
168
+ assert.strictEqual(checkpoints[0].isCompleted("run1"), true);
169
+ await checkpoints[1].load();
170
+ assert.strictEqual(checkpoints[1].getResults().length, 2);
171
+ assert.strictEqual(checkpoints[1].isCompleted("run2"), true);
172
+ assert.strictEqual(checkpoints[1].isCompleted("run3"), true);
173
+ await checkpoints[2].load();
174
+ assert.strictEqual(checkpoints[2].getResults().length, 2);
175
+ assert.strictEqual(checkpoints[2].isCompleted("run4"), true);
176
+ assert.strictEqual(checkpoints[2].isCompleted("run5"), true);
177
+ // Clean up
178
+ for (const path of checkpointPaths) {
179
+ cleanupCheckpointFile(path);
180
+ }
181
+ });
182
+ });
183
+ describe("Merge phase", () => {
184
+ it("should merge multiple worker checkpoints into aggregate", async () => {
185
+ const workers = 3;
186
+ const checkpointPaths = [];
187
+ // Create worker checkpoints
188
+ for (let index = 0; index < workers; index++) {
189
+ const path = join(TEST_DIR, `checkpoint-worker-${index}.json`);
190
+ checkpointPaths.push(path);
191
+ const storage = new FileStorage(path);
192
+ const lock = new InMemoryLock();
193
+ const checkpoint = new CheckpointManager({
194
+ storage,
195
+ lock,
196
+ workerIndex: index,
197
+ totalWorkers: workers,
198
+ basePath: TEST_DIR,
199
+ });
200
+ // Initialize with config hash
201
+ checkpoint.initializeEmpty([], [], { repetitions: 1 }, 6);
202
+ // Save some results
203
+ const baseIndex = index * 2;
204
+ await checkpoint.saveIncremental(createTestResult(`run${baseIndex}`));
205
+ await checkpoint.saveIncremental(createTestResult(`run${baseIndex + 1}`));
206
+ }
207
+ // Now merge them
208
+ const mainPath = join(TEST_DIR, "checkpoint.json");
209
+ const mainStorage = new FileStorage(mainPath);
210
+ const mainCheckpoint = new CheckpointManager({
211
+ storage: mainStorage,
212
+ lock: new InMemoryLock(),
213
+ });
214
+ await mainCheckpoint.mergeShards(checkpointPaths);
215
+ // Verify merged data
216
+ assert.strictEqual(mainCheckpoint.exists(), true);
217
+ assert.strictEqual(mainCheckpoint.getResults().length, 6);
218
+ assert.strictEqual(mainCheckpoint.isCompleted("run0"), true);
219
+ assert.strictEqual(mainCheckpoint.isCompleted("run1"), true);
220
+ assert.strictEqual(mainCheckpoint.isCompleted("run2"), true);
221
+ assert.strictEqual(mainCheckpoint.isCompleted("run3"), true);
222
+ assert.strictEqual(mainCheckpoint.isCompleted("run4"), true);
223
+ assert.strictEqual(mainCheckpoint.isCompleted("run5"), true);
224
+ // Clean up
225
+ cleanupCheckpointFile(mainPath);
226
+ for (const path of checkpointPaths) {
227
+ cleanupCheckpointFile(path);
228
+ }
229
+ });
230
+ it("should use FileStorage.findShards to discover worker checkpoints", async () => {
231
+ const workers = 3;
232
+ // Create worker checkpoints
233
+ for (let index = 0; index < workers; index++) {
234
+ const path = join(TEST_DIR, `checkpoint-worker-${index}.json`);
235
+ const storage = new FileStorage(path);
236
+ const lock = new InMemoryLock();
237
+ const checkpoint = new CheckpointManager({
238
+ storage,
239
+ lock,
240
+ workerIndex: index,
241
+ totalWorkers: workers,
242
+ basePath: TEST_DIR,
243
+ });
244
+ await checkpoint.saveIncremental(createTestResult(`run${index}`));
245
+ }
246
+ // Discover shards
247
+ const shards = await FileStorage.findShards(TEST_DIR);
248
+ assert.strictEqual(shards.length, 3);
249
+ // Merge discovered shards
250
+ const mainPath = join(TEST_DIR, "checkpoint.json");
251
+ const mainStorage = new FileStorage(mainPath);
252
+ const mainCheckpoint = new CheckpointManager({
253
+ storage: mainStorage,
254
+ lock: new InMemoryLock(),
255
+ });
256
+ await mainCheckpoint.mergeShards(shards);
257
+ // Verify all results merged
258
+ assert.strictEqual(mainCheckpoint.getResults().length, 3);
259
+ // Clean up
260
+ cleanupCheckpointFile(mainPath);
261
+ for (let index = 0; index < workers; index++) {
262
+ cleanupCheckpointFile(join(TEST_DIR, `checkpoint-worker-${index}.json`));
263
+ }
264
+ });
265
+ });
266
+ describe("Progress tracking", () => {
267
+ it("should calculate progress correctly", async () => {
268
+ const checkpointPath = join(TEST_DIR, "progress-checkpoint.json");
269
+ const storage = new FileStorage(checkpointPath);
270
+ const lock = new InMemoryLock();
271
+ const checkpoint = new CheckpointManager({ storage, lock });
272
+ // Initialize with total planned and save to persist totalPlanned
273
+ checkpoint.initializeEmpty([], [], { repetitions: 1 }, 10);
274
+ await checkpoint.save();
275
+ const progress1 = checkpoint.getProgress();
276
+ assert.strictEqual(progress1.completed, 0);
277
+ assert.strictEqual(progress1.total, 10);
278
+ assert.strictEqual(progress1.percent, 0);
279
+ // Save some results
280
+ await checkpoint.saveIncremental(createTestResult("run1"));
281
+ await checkpoint.saveIncremental(createTestResult("run2"));
282
+ await checkpoint.saveIncremental(createTestResult("run3"));
283
+ // Reload and check progress
284
+ await checkpoint.load();
285
+ const progress2 = checkpoint.getProgress();
286
+ assert.strictEqual(progress2.completed, 3);
287
+ assert.strictEqual(progress2.total, 10);
288
+ assert.strictEqual(progress2.percent, 30);
289
+ // Complete all
290
+ for (let index = 4; index <= 10; index++) {
291
+ await checkpoint.saveIncremental(createTestResult(`run${index}`));
292
+ }
293
+ await checkpoint.load();
294
+ const progress3 = checkpoint.getProgress();
295
+ assert.strictEqual(progress3.completed, 10);
296
+ assert.strictEqual(progress3.total, 10);
297
+ assert.strictEqual(progress3.percent, 100);
298
+ // Clean up
299
+ cleanupCheckpointFile(checkpointPath);
300
+ });
301
+ });
302
+ describe("Filter remaining runs", () => {
303
+ it("should filter out completed runs", async () => {
304
+ const checkpointPath = join(TEST_DIR, "filter-checkpoint.json");
305
+ const storage = new FileStorage(checkpointPath);
306
+ const lock = new InMemoryLock();
307
+ const checkpoint = new CheckpointManager({ storage, lock });
308
+ // Save some results
309
+ await checkpoint.saveIncremental(createTestResult("run1"));
310
+ await checkpoint.saveIncremental(createTestResult("run2"));
311
+ await checkpoint.saveIncremental(createTestResult("run3"));
312
+ // Reload
313
+ await checkpoint.load();
314
+ // Filter remaining
315
+ const allRuns = [
316
+ { runId: "run1", sutId: "sut", caseId: "case", repetition: 0, seed: 1 },
317
+ { runId: "run2", sutId: "sut", caseId: "case", repetition: 0, seed: 2 },
318
+ { runId: "run3", sutId: "sut", caseId: "case", repetition: 0, seed: 3 },
319
+ { runId: "run4", sutId: "sut", caseId: "case", repetition: 0, seed: 4 },
320
+ { runId: "run5", sutId: "sut", caseId: "case", repetition: 0, seed: 5 },
321
+ ];
322
+ const remaining = checkpoint.filterRemaining(allRuns);
323
+ assert.strictEqual(remaining.length, 2);
324
+ assert.deepStrictEqual(remaining.map((r) => r.runId), ["run4", "run5"]);
325
+ // Clean up
326
+ cleanupCheckpointFile(checkpointPath);
327
+ });
328
+ });
329
+ });
330
+ //# sourceMappingURL=checkpoint-manager.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-manager.integration.test.js","sourceRoot":"","sources":["../../../src/executor/__tests__/checkpoint-manager.integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Unit tests for CheckpointManager
3
+ *
4
+ * Tests checkpoint management, staleness detection, and shard merging.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=checkpoint-manager.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoint-manager.unit.test.d.ts","sourceRoot":"","sources":["../../../src/executor/__tests__/checkpoint-manager.unit.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}