@opensip-cli/graph 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 (836) 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 +11 -0
  5. package/dist/__tests__/baseline-plane.test.d.ts.map +1 -0
  6. package/dist/__tests__/baseline-plane.test.js +60 -0
  7. package/dist/__tests__/baseline-plane.test.js.map +1 -0
  8. package/dist/__tests__/cache/engine-version.test.d.ts +12 -0
  9. package/dist/__tests__/cache/engine-version.test.d.ts.map +1 -0
  10. package/dist/__tests__/cache/engine-version.test.js +79 -0
  11. package/dist/__tests__/cache/engine-version.test.js.map +1 -0
  12. package/dist/__tests__/cache/invalidate.test.d.ts +9 -0
  13. package/dist/__tests__/cache/invalidate.test.d.ts.map +1 -0
  14. package/dist/__tests__/cache/invalidate.test.js +228 -0
  15. package/dist/__tests__/cache/invalidate.test.js.map +1 -0
  16. package/dist/__tests__/cli/contribution-from-signals.test.d.ts +17 -0
  17. package/dist/__tests__/cli/contribution-from-signals.test.d.ts.map +1 -0
  18. package/dist/__tests__/cli/contribution-from-signals.test.js +89 -0
  19. package/dist/__tests__/cli/contribution-from-signals.test.js.map +1 -0
  20. package/dist/__tests__/cli/detect.test.d.ts +2 -0
  21. package/dist/__tests__/cli/detect.test.d.ts.map +1 -0
  22. package/dist/__tests__/cli/detect.test.js +96 -0
  23. package/dist/__tests__/cli/detect.test.js.map +1 -0
  24. package/dist/__tests__/cli/graph-config.test.d.ts +9 -0
  25. package/dist/__tests__/cli/graph-config.test.d.ts.map +1 -0
  26. package/dist/__tests__/cli/graph-config.test.js +113 -0
  27. package/dist/__tests__/cli/graph-config.test.js.map +1 -0
  28. package/dist/__tests__/cli/graph-execute.test.d.ts +9 -0
  29. package/dist/__tests__/cli/graph-execute.test.d.ts.map +1 -0
  30. package/dist/__tests__/cli/graph-execute.test.js +434 -0
  31. package/dist/__tests__/cli/graph-execute.test.js.map +1 -0
  32. package/dist/__tests__/cli/graph.test.d.ts +12 -0
  33. package/dist/__tests__/cli/graph.test.d.ts.map +1 -0
  34. package/dist/__tests__/cli/graph.test.js +589 -0
  35. package/dist/__tests__/cli/graph.test.js.map +1 -0
  36. package/dist/__tests__/cli/heap-preflight.test.d.ts +11 -0
  37. package/dist/__tests__/cli/heap-preflight.test.d.ts.map +1 -0
  38. package/dist/__tests__/cli/heap-preflight.test.js +150 -0
  39. package/dist/__tests__/cli/heap-preflight.test.js.map +1 -0
  40. package/dist/__tests__/cli/language-mismatch.test.d.ts +10 -0
  41. package/dist/__tests__/cli/language-mismatch.test.d.ts.map +1 -0
  42. package/dist/__tests__/cli/language-mismatch.test.js +155 -0
  43. package/dist/__tests__/cli/language-mismatch.test.js.map +1 -0
  44. package/dist/__tests__/cli/lookup.test.d.ts +7 -0
  45. package/dist/__tests__/cli/lookup.test.d.ts.map +1 -0
  46. package/dist/__tests__/cli/lookup.test.js +104 -0
  47. package/dist/__tests__/cli/lookup.test.js.map +1 -0
  48. package/dist/__tests__/cli/orchestrate.test.d.ts +12 -0
  49. package/dist/__tests__/cli/orchestrate.test.d.ts.map +1 -0
  50. package/dist/__tests__/cli/orchestrate.test.js +315 -0
  51. package/dist/__tests__/cli/orchestrate.test.js.map +1 -0
  52. package/dist/__tests__/cli/positional-paths.test.d.ts +5 -0
  53. package/dist/__tests__/cli/positional-paths.test.d.ts.map +1 -0
  54. package/dist/__tests__/cli/positional-paths.test.js +87 -0
  55. package/dist/__tests__/cli/positional-paths.test.js.map +1 -0
  56. package/dist/__tests__/cli/pressure-monitor.test.d.ts +11 -0
  57. package/dist/__tests__/cli/pressure-monitor.test.d.ts.map +1 -0
  58. package/dist/__tests__/cli/pressure-monitor.test.js +94 -0
  59. package/dist/__tests__/cli/pressure-monitor.test.js.map +1 -0
  60. package/dist/__tests__/cli/sarif-export.test.d.ts +8 -0
  61. package/dist/__tests__/cli/sarif-export.test.d.ts.map +1 -0
  62. package/dist/__tests__/cli/sarif-export.test.js +94 -0
  63. package/dist/__tests__/cli/sarif-export.test.js.map +1 -0
  64. package/dist/__tests__/cli/session-contract.test.d.ts +17 -0
  65. package/dist/__tests__/cli/session-contract.test.d.ts.map +1 -0
  66. package/dist/__tests__/cli/session-contract.test.js +225 -0
  67. package/dist/__tests__/cli/session-contract.test.js.map +1 -0
  68. package/dist/__tests__/cli/symbol-index.test.d.ts +7 -0
  69. package/dist/__tests__/cli/symbol-index.test.d.ts.map +1 -0
  70. package/dist/__tests__/cli/symbol-index.test.js +117 -0
  71. package/dist/__tests__/cli/symbol-index.test.js.map +1 -0
  72. package/dist/__tests__/cli/tool-show-mode.test.d.ts +10 -0
  73. package/dist/__tests__/cli/tool-show-mode.test.d.ts.map +1 -0
  74. package/dist/__tests__/cli/tool-show-mode.test.js +128 -0
  75. package/dist/__tests__/cli/tool-show-mode.test.js.map +1 -0
  76. package/dist/__tests__/cli/workspace-runner-polyglot.test.d.ts +10 -0
  77. package/dist/__tests__/cli/workspace-runner-polyglot.test.d.ts.map +1 -0
  78. package/dist/__tests__/cli/workspace-runner-polyglot.test.js +120 -0
  79. package/dist/__tests__/cli/workspace-runner-polyglot.test.js.map +1 -0
  80. package/dist/__tests__/graph-catalog-drift.test.d.ts +24 -0
  81. package/dist/__tests__/graph-catalog-drift.test.d.ts.map +1 -0
  82. package/dist/__tests__/graph-catalog-drift.test.js +34 -0
  83. package/dist/__tests__/graph-catalog-drift.test.js.map +1 -0
  84. package/dist/__tests__/internal-surface.test.d.ts +17 -0
  85. package/dist/__tests__/internal-surface.test.d.ts.map +1 -0
  86. package/dist/__tests__/internal-surface.test.js +45 -0
  87. package/dist/__tests__/internal-surface.test.js.map +1 -0
  88. package/dist/__tests__/lang-adapter/body-digest.test.d.ts +13 -0
  89. package/dist/__tests__/lang-adapter/body-digest.test.d.ts.map +1 -0
  90. package/dist/__tests__/lang-adapter/body-digest.test.js +51 -0
  91. package/dist/__tests__/lang-adapter/body-digest.test.js.map +1 -0
  92. package/dist/__tests__/lang-adapter/edge-helpers.test.d.ts +12 -0
  93. package/dist/__tests__/lang-adapter/edge-helpers.test.d.ts.map +1 -0
  94. package/dist/__tests__/lang-adapter/edge-helpers.test.js +147 -0
  95. package/dist/__tests__/lang-adapter/edge-helpers.test.js.map +1 -0
  96. package/dist/__tests__/lang-adapter/registry.test.d.ts +9 -0
  97. package/dist/__tests__/lang-adapter/registry.test.d.ts.map +1 -0
  98. package/dist/__tests__/lang-adapter/registry.test.js +228 -0
  99. package/dist/__tests__/lang-adapter/registry.test.js.map +1 -0
  100. package/dist/__tests__/persistence/catalog-repo.test.d.ts +2 -0
  101. package/dist/__tests__/persistence/catalog-repo.test.d.ts.map +1 -0
  102. package/dist/__tests__/persistence/catalog-repo.test.js +188 -0
  103. package/dist/__tests__/persistence/catalog-repo.test.js.map +1 -0
  104. package/dist/__tests__/persistence/session-payload.test.d.ts +2 -0
  105. package/dist/__tests__/persistence/session-payload.test.d.ts.map +1 -0
  106. package/dist/__tests__/persistence/session-payload.test.js +81 -0
  107. package/dist/__tests__/persistence/session-payload.test.js.map +1 -0
  108. package/dist/__tests__/persistence/session-replay.test.d.ts +10 -0
  109. package/dist/__tests__/persistence/session-replay.test.d.ts.map +1 -0
  110. package/dist/__tests__/persistence/session-replay.test.js +196 -0
  111. package/dist/__tests__/persistence/session-replay.test.js.map +1 -0
  112. package/dist/__tests__/public-api.test.d.ts +19 -0
  113. package/dist/__tests__/public-api.test.d.ts.map +1 -0
  114. package/dist/__tests__/public-api.test.js +96 -0
  115. package/dist/__tests__/public-api.test.js.map +1 -0
  116. package/dist/__tests__/render/catalog-json-types.test.d.ts +10 -0
  117. package/dist/__tests__/render/catalog-json-types.test.d.ts.map +1 -0
  118. package/dist/__tests__/render/catalog-json-types.test.js +121 -0
  119. package/dist/__tests__/render/catalog-json-types.test.js.map +1 -0
  120. package/dist/__tests__/render/catalog-json.test.d.ts +19 -0
  121. package/dist/__tests__/render/catalog-json.test.d.ts.map +1 -0
  122. package/dist/__tests__/render/catalog-json.test.js +435 -0
  123. package/dist/__tests__/render/catalog-json.test.js.map +1 -0
  124. package/dist/__tests__/render/opensip-id-derivation.test.d.ts +21 -0
  125. package/dist/__tests__/render/opensip-id-derivation.test.d.ts.map +1 -0
  126. package/dist/__tests__/render/opensip-id-derivation.test.js +159 -0
  127. package/dist/__tests__/render/opensip-id-derivation.test.js.map +1 -0
  128. package/dist/__tests__/render/rule-id-mapping.test.d.ts +13 -0
  129. package/dist/__tests__/render/rule-id-mapping.test.d.ts.map +1 -0
  130. package/dist/__tests__/render/rule-id-mapping.test.js +50 -0
  131. package/dist/__tests__/render/rule-id-mapping.test.js.map +1 -0
  132. package/dist/__tests__/render/sarif-opensip.test.d.ts +20 -0
  133. package/dist/__tests__/render/sarif-opensip.test.d.ts.map +1 -0
  134. package/dist/__tests__/render/sarif-opensip.test.js +235 -0
  135. package/dist/__tests__/render/sarif-opensip.test.js.map +1 -0
  136. package/dist/__tests__/resolution-mode.test.d.ts +10 -0
  137. package/dist/__tests__/resolution-mode.test.d.ts.map +1 -0
  138. package/dist/__tests__/resolution-mode.test.js +96 -0
  139. package/dist/__tests__/resolution-mode.test.js.map +1 -0
  140. package/dist/__tests__/resolve-callee.test.d.ts +2 -0
  141. package/dist/__tests__/resolve-callee.test.d.ts.map +1 -0
  142. package/dist/__tests__/resolve-callee.test.js +119 -0
  143. package/dist/__tests__/resolve-callee.test.js.map +1 -0
  144. package/dist/__tests__/rules/_entry-points.test.d.ts +8 -0
  145. package/dist/__tests__/rules/_entry-points.test.d.ts.map +1 -0
  146. package/dist/__tests__/rules/_entry-points.test.js +74 -0
  147. package/dist/__tests__/rules/_entry-points.test.js.map +1 -0
  148. package/dist/__tests__/rules/_helpers.d.ts +18 -0
  149. package/dist/__tests__/rules/_helpers.d.ts.map +1 -0
  150. package/dist/__tests__/rules/_helpers.js +72 -0
  151. package/dist/__tests__/rules/_helpers.js.map +1 -0
  152. package/dist/__tests__/rules/always-throws-branch.test.d.ts +9 -0
  153. package/dist/__tests__/rules/always-throws-branch.test.d.ts.map +1 -0
  154. package/dist/__tests__/rules/always-throws-branch.test.js +113 -0
  155. package/dist/__tests__/rules/always-throws-branch.test.js.map +1 -0
  156. package/dist/__tests__/rules/cycle-and-coupling.test.d.ts +13 -0
  157. package/dist/__tests__/rules/cycle-and-coupling.test.d.ts.map +1 -0
  158. package/dist/__tests__/rules/cycle-and-coupling.test.js +224 -0
  159. package/dist/__tests__/rules/cycle-and-coupling.test.js.map +1 -0
  160. package/dist/__tests__/rules/duplicated-function-body-config.test.d.ts +8 -0
  161. package/dist/__tests__/rules/duplicated-function-body-config.test.d.ts.map +1 -0
  162. package/dist/__tests__/rules/duplicated-function-body-config.test.js +132 -0
  163. package/dist/__tests__/rules/duplicated-function-body-config.test.js.map +1 -0
  164. package/dist/__tests__/rules/duplicated-function-body-cross-package.test.d.ts +10 -0
  165. package/dist/__tests__/rules/duplicated-function-body-cross-package.test.d.ts.map +1 -0
  166. package/dist/__tests__/rules/duplicated-function-body-cross-package.test.js +274 -0
  167. package/dist/__tests__/rules/duplicated-function-body-cross-package.test.js.map +1 -0
  168. package/dist/__tests__/rules/feature-column-parity.test.d.ts +11 -0
  169. package/dist/__tests__/rules/feature-column-parity.test.d.ts.map +1 -0
  170. package/dist/__tests__/rules/feature-column-parity.test.js +169 -0
  171. package/dist/__tests__/rules/feature-column-parity.test.js.map +1 -0
  172. package/dist/__tests__/rules/high-blast-untested.test.d.ts +13 -0
  173. package/dist/__tests__/rules/high-blast-untested.test.d.ts.map +1 -0
  174. package/dist/__tests__/rules/high-blast-untested.test.js +108 -0
  175. package/dist/__tests__/rules/high-blast-untested.test.js.map +1 -0
  176. package/dist/__tests__/rules/large-function.test.d.ts +11 -0
  177. package/dist/__tests__/rules/large-function.test.d.ts.map +1 -0
  178. package/dist/__tests__/rules/large-function.test.js +105 -0
  179. package/dist/__tests__/rules/large-function.test.js.map +1 -0
  180. package/dist/__tests__/rules/no-side-effect-path.test.d.ts +10 -0
  181. package/dist/__tests__/rules/no-side-effect-path.test.d.ts.map +1 -0
  182. package/dist/__tests__/rules/no-side-effect-path.test.js +301 -0
  183. package/dist/__tests__/rules/no-side-effect-path.test.js.map +1 -0
  184. package/dist/__tests__/rules/orphan-subtree-config.test.d.ts +8 -0
  185. package/dist/__tests__/rules/orphan-subtree-config.test.d.ts.map +1 -0
  186. package/dist/__tests__/rules/orphan-subtree-config.test.js +176 -0
  187. package/dist/__tests__/rules/orphan-subtree-config.test.js.map +1 -0
  188. package/dist/__tests__/rules/registry.test.d.ts +11 -0
  189. package/dist/__tests__/rules/registry.test.d.ts.map +1 -0
  190. package/dist/__tests__/rules/registry.test.js +50 -0
  191. package/dist/__tests__/rules/registry.test.js.map +1 -0
  192. package/dist/__tests__/rules/severity-override.test.d.ts +11 -0
  193. package/dist/__tests__/rules/severity-override.test.d.ts.map +1 -0
  194. package/dist/__tests__/rules/severity-override.test.js +67 -0
  195. package/dist/__tests__/rules/severity-override.test.js.map +1 -0
  196. package/dist/__tests__/rules/test-only-reachable.test.d.ts +9 -0
  197. package/dist/__tests__/rules/test-only-reachable.test.d.ts.map +1 -0
  198. package/dist/__tests__/rules/test-only-reachable.test.js +142 -0
  199. package/dist/__tests__/rules/test-only-reachable.test.js.map +1 -0
  200. package/dist/__tests__/rules/wide-function.test.d.ts +9 -0
  201. package/dist/__tests__/rules/wide-function.test.d.ts.map +1 -0
  202. package/dist/__tests__/rules/wide-function.test.js +64 -0
  203. package/dist/__tests__/rules/wide-function.test.js.map +1 -0
  204. package/dist/__tests__/test-utils/with-graph-scope.d.ts +14 -0
  205. package/dist/__tests__/test-utils/with-graph-scope.d.ts.map +1 -0
  206. package/dist/__tests__/test-utils/with-graph-scope.js +26 -0
  207. package/dist/__tests__/test-utils/with-graph-scope.js.map +1 -0
  208. package/dist/__tests__/tool-branches.test.d.ts +18 -0
  209. package/dist/__tests__/tool-branches.test.d.ts.map +1 -0
  210. package/dist/__tests__/tool-branches.test.js +262 -0
  211. package/dist/__tests__/tool-branches.test.js.map +1 -0
  212. package/dist/__tests__/tool-register.test.d.ts +16 -0
  213. package/dist/__tests__/tool-register.test.d.ts.map +1 -0
  214. package/dist/__tests__/tool-register.test.js +419 -0
  215. package/dist/__tests__/tool-register.test.js.map +1 -0
  216. package/dist/__tests__/tool.test.d.ts +18 -0
  217. package/dist/__tests__/tool.test.d.ts.map +1 -0
  218. package/dist/__tests__/tool.test.js +65 -0
  219. package/dist/__tests__/tool.test.js.map +1 -0
  220. package/dist/baseline-strategy.d.ts +28 -0
  221. package/dist/baseline-strategy.d.ts.map +1 -0
  222. package/dist/baseline-strategy.js +27 -0
  223. package/dist/baseline-strategy.js.map +1 -0
  224. package/dist/cache/engine-version.d.ts +69 -0
  225. package/dist/cache/engine-version.d.ts.map +1 -0
  226. package/dist/cache/engine-version.js +60 -0
  227. package/dist/cache/engine-version.js.map +1 -0
  228. package/dist/cache/invalidate.d.ts +60 -0
  229. package/dist/cache/invalidate.d.ts.map +1 -0
  230. package/dist/cache/invalidate.js +120 -0
  231. package/dist/cache/invalidate.js.map +1 -0
  232. package/dist/cli/__tests__/build-envelope.test.d.ts +8 -0
  233. package/dist/cli/__tests__/build-envelope.test.d.ts.map +1 -0
  234. package/dist/cli/__tests__/build-envelope.test.js +70 -0
  235. package/dist/cli/__tests__/build-envelope.test.js.map +1 -0
  236. package/dist/cli/__tests__/dispatch-envelope.test.d.ts +15 -0
  237. package/dist/cli/__tests__/dispatch-envelope.test.d.ts.map +1 -0
  238. package/dist/cli/__tests__/dispatch-envelope.test.js +73 -0
  239. package/dist/cli/__tests__/dispatch-envelope.test.js.map +1 -0
  240. package/dist/cli/__tests__/dispatch-suppression-root.test.d.ts +18 -0
  241. package/dist/cli/__tests__/dispatch-suppression-root.test.d.ts.map +1 -0
  242. package/dist/cli/__tests__/dispatch-suppression-root.test.js +91 -0
  243. package/dist/cli/__tests__/dispatch-suppression-root.test.js.map +1 -0
  244. package/dist/cli/__tests__/graph-config-schema.test.d.ts +7 -0
  245. package/dist/cli/__tests__/graph-config-schema.test.d.ts.map +1 -0
  246. package/dist/cli/__tests__/graph-config-schema.test.js +60 -0
  247. package/dist/cli/__tests__/graph-config-schema.test.js.map +1 -0
  248. package/dist/cli/__tests__/graph-gate-mode.test.d.ts +15 -0
  249. package/dist/cli/__tests__/graph-gate-mode.test.d.ts.map +1 -0
  250. package/dist/cli/__tests__/graph-gate-mode.test.js +99 -0
  251. package/dist/cli/__tests__/graph-gate-mode.test.js.map +1 -0
  252. package/dist/cli/__tests__/graph-recipes.test.d.ts +7 -0
  253. package/dist/cli/__tests__/graph-recipes.test.d.ts.map +1 -0
  254. package/dist/cli/__tests__/graph-recipes.test.js +24 -0
  255. package/dist/cli/__tests__/graph-recipes.test.js.map +1 -0
  256. package/dist/cli/__tests__/graph-report.test.d.ts +7 -0
  257. package/dist/cli/__tests__/graph-report.test.d.ts.map +1 -0
  258. package/dist/cli/__tests__/graph-report.test.js +138 -0
  259. package/dist/cli/__tests__/graph-report.test.js.map +1 -0
  260. package/dist/cli/__tests__/graph-tracer.test.d.ts +11 -0
  261. package/dist/cli/__tests__/graph-tracer.test.d.ts.map +1 -0
  262. package/dist/cli/__tests__/graph-tracer.test.js +41 -0
  263. package/dist/cli/__tests__/graph-tracer.test.js.map +1 -0
  264. package/dist/cli/__tests__/graph-worker.test.d.ts +13 -0
  265. package/dist/cli/__tests__/graph-worker.test.d.ts.map +1 -0
  266. package/dist/cli/__tests__/graph-worker.test.js +127 -0
  267. package/dist/cli/__tests__/graph-worker.test.js.map +1 -0
  268. package/dist/cli/__tests__/list-files.test.d.ts +12 -0
  269. package/dist/cli/__tests__/list-files.test.d.ts.map +1 -0
  270. package/dist/cli/__tests__/list-files.test.js +146 -0
  271. package/dist/cli/__tests__/list-files.test.js.map +1 -0
  272. package/dist/cli/__tests__/live-suppression-parity.test.d.ts +23 -0
  273. package/dist/cli/__tests__/live-suppression-parity.test.d.ts.map +1 -0
  274. package/dist/cli/__tests__/live-suppression-parity.test.js +136 -0
  275. package/dist/cli/__tests__/live-suppression-parity.test.js.map +1 -0
  276. package/dist/cli/__tests__/orchestrate-spans.test.d.ts +18 -0
  277. package/dist/cli/__tests__/orchestrate-spans.test.d.ts.map +1 -0
  278. package/dist/cli/__tests__/orchestrate-spans.test.js +108 -0
  279. package/dist/cli/__tests__/orchestrate-spans.test.js.map +1 -0
  280. package/dist/cli/__tests__/shard-worker.test.d.ts +10 -0
  281. package/dist/cli/__tests__/shard-worker.test.d.ts.map +1 -0
  282. package/dist/cli/__tests__/shard-worker.test.js +153 -0
  283. package/dist/cli/__tests__/shard-worker.test.js.map +1 -0
  284. package/dist/cli/__tests__/workspace-report.test.d.ts +6 -0
  285. package/dist/cli/__tests__/workspace-report.test.d.ts.map +1 -0
  286. package/dist/cli/__tests__/workspace-report.test.js +89 -0
  287. package/dist/cli/__tests__/workspace-report.test.js.map +1 -0
  288. package/dist/cli/apply-suppressions.d.ts +86 -0
  289. package/dist/cli/apply-suppressions.d.ts.map +1 -0
  290. package/dist/cli/apply-suppressions.js +101 -0
  291. package/dist/cli/apply-suppressions.js.map +1 -0
  292. package/dist/cli/apply-suppressions.test.d.ts +12 -0
  293. package/dist/cli/apply-suppressions.test.d.ts.map +1 -0
  294. package/dist/cli/apply-suppressions.test.js +85 -0
  295. package/dist/cli/apply-suppressions.test.js.map +1 -0
  296. package/dist/cli/build-envelope.d.ts +53 -0
  297. package/dist/cli/build-envelope.d.ts.map +1 -0
  298. package/dist/cli/build-envelope.js +88 -0
  299. package/dist/cli/build-envelope.js.map +1 -0
  300. package/dist/cli/detect.d.ts +37 -0
  301. package/dist/cli/detect.d.ts.map +1 -0
  302. package/dist/cli/detect.js +60 -0
  303. package/dist/cli/detect.js.map +1 -0
  304. package/dist/cli/equivalence-check-command.d.ts +45 -0
  305. package/dist/cli/equivalence-check-command.d.ts.map +1 -0
  306. package/dist/cli/equivalence-check-command.js +196 -0
  307. package/dist/cli/equivalence-check-command.js.map +1 -0
  308. package/dist/cli/graph/graph-aux-command-specs.d.ts +60 -0
  309. package/dist/cli/graph/graph-aux-command-specs.d.ts.map +1 -0
  310. package/dist/cli/graph/graph-aux-command-specs.js +390 -0
  311. package/dist/cli/graph/graph-aux-command-specs.js.map +1 -0
  312. package/dist/cli/graph/graph-command-spec.d.ts +43 -0
  313. package/dist/cli/graph/graph-command-spec.d.ts.map +1 -0
  314. package/dist/cli/graph/graph-command-spec.js +456 -0
  315. package/dist/cli/graph/graph-command-spec.js.map +1 -0
  316. package/dist/cli/graph-config-schema.d.ts +70 -0
  317. package/dist/cli/graph-config-schema.d.ts.map +1 -0
  318. package/dist/cli/graph-config-schema.js +68 -0
  319. package/dist/cli/graph-config-schema.js.map +1 -0
  320. package/dist/cli/graph-config.d.ts +53 -0
  321. package/dist/cli/graph-config.d.ts.map +1 -0
  322. package/dist/cli/graph-config.js +111 -0
  323. package/dist/cli/graph-config.js.map +1 -0
  324. package/dist/cli/graph-modes.d.ts +36 -0
  325. package/dist/cli/graph-modes.d.ts.map +1 -0
  326. package/dist/cli/graph-modes.js +161 -0
  327. package/dist/cli/graph-modes.js.map +1 -0
  328. package/dist/cli/graph-options.d.ts +143 -0
  329. package/dist/cli/graph-options.d.ts.map +1 -0
  330. package/dist/cli/graph-options.js +15 -0
  331. package/dist/cli/graph-options.js.map +1 -0
  332. package/dist/cli/graph-progress.d.ts +31 -0
  333. package/dist/cli/graph-progress.d.ts.map +1 -0
  334. package/dist/cli/graph-progress.js +56 -0
  335. package/dist/cli/graph-progress.js.map +1 -0
  336. package/dist/cli/graph-recipes.d.ts +23 -0
  337. package/dist/cli/graph-recipes.d.ts.map +1 -0
  338. package/dist/cli/graph-recipes.js +44 -0
  339. package/dist/cli/graph-recipes.js.map +1 -0
  340. package/dist/cli/graph-report.d.ts +79 -0
  341. package/dist/cli/graph-report.d.ts.map +1 -0
  342. package/dist/cli/graph-report.js +186 -0
  343. package/dist/cli/graph-report.js.map +1 -0
  344. package/dist/cli/graph-runner.d.ts +106 -0
  345. package/dist/cli/graph-runner.d.ts.map +1 -0
  346. package/dist/cli/graph-runner.js +274 -0
  347. package/dist/cli/graph-runner.js.map +1 -0
  348. package/dist/cli/graph-tracer.d.ts +27 -0
  349. package/dist/cli/graph-tracer.d.ts.map +1 -0
  350. package/dist/cli/graph-tracer.js +33 -0
  351. package/dist/cli/graph-tracer.js.map +1 -0
  352. package/dist/cli/graph-worker.d.ts +29 -0
  353. package/dist/cli/graph-worker.d.ts.map +1 -0
  354. package/dist/cli/graph-worker.js +86 -0
  355. package/dist/cli/graph-worker.js.map +1 -0
  356. package/dist/cli/graph.d.ts +171 -0
  357. package/dist/cli/graph.d.ts.map +1 -0
  358. package/dist/cli/graph.js +1041 -0
  359. package/dist/cli/graph.js.map +1 -0
  360. package/dist/cli/heap-preflight.d.ts +62 -0
  361. package/dist/cli/heap-preflight.d.ts.map +1 -0
  362. package/dist/cli/heap-preflight.js +176 -0
  363. package/dist/cli/heap-preflight.js.map +1 -0
  364. package/dist/cli/list-files.d.ts +37 -0
  365. package/dist/cli/list-files.d.ts.map +1 -0
  366. package/dist/cli/list-files.js +166 -0
  367. package/dist/cli/list-files.js.map +1 -0
  368. package/dist/cli/lookup.d.ts +19 -0
  369. package/dist/cli/lookup.d.ts.map +1 -0
  370. package/dist/cli/lookup.js +87 -0
  371. package/dist/cli/lookup.js.map +1 -0
  372. package/dist/cli/orchestrate/__tests__/_equivalence-harness.d.ts +47 -0
  373. package/dist/cli/orchestrate/__tests__/_equivalence-harness.d.ts.map +1 -0
  374. package/dist/cli/orchestrate/__tests__/_equivalence-harness.js +331 -0
  375. package/dist/cli/orchestrate/__tests__/_equivalence-harness.js.map +1 -0
  376. package/dist/cli/orchestrate/__tests__/_flat-large-fixture.d.ts +69 -0
  377. package/dist/cli/orchestrate/__tests__/_flat-large-fixture.d.ts.map +1 -0
  378. package/dist/cli/orchestrate/__tests__/_flat-large-fixture.js +181 -0
  379. package/dist/cli/orchestrate/__tests__/_flat-large-fixture.js.map +1 -0
  380. package/dist/cli/orchestrate/__tests__/canonical-file-set.test.d.ts +8 -0
  381. package/dist/cli/orchestrate/__tests__/canonical-file-set.test.d.ts.map +1 -0
  382. package/dist/cli/orchestrate/__tests__/canonical-file-set.test.js +51 -0
  383. package/dist/cli/orchestrate/__tests__/canonical-file-set.test.js.map +1 -0
  384. package/dist/cli/orchestrate/__tests__/catalog-builder-incremental.test.d.ts +9 -0
  385. package/dist/cli/orchestrate/__tests__/catalog-builder-incremental.test.d.ts.map +1 -0
  386. package/dist/cli/orchestrate/__tests__/catalog-builder-incremental.test.js +147 -0
  387. package/dist/cli/orchestrate/__tests__/catalog-builder-incremental.test.js.map +1 -0
  388. package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.d.ts +12 -0
  389. package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.d.ts.map +1 -0
  390. package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.js +509 -0
  391. package/dist/cli/orchestrate/__tests__/cross-shard-resolve.test.js.map +1 -0
  392. package/dist/cli/orchestrate/__tests__/determinism.test.d.ts +19 -0
  393. package/dist/cli/orchestrate/__tests__/determinism.test.d.ts.map +1 -0
  394. package/dist/cli/orchestrate/__tests__/determinism.test.js +163 -0
  395. package/dist/cli/orchestrate/__tests__/determinism.test.js.map +1 -0
  396. package/dist/cli/orchestrate/__tests__/edge-identity.test.d.ts +9 -0
  397. package/dist/cli/orchestrate/__tests__/edge-identity.test.d.ts.map +1 -0
  398. package/dist/cli/orchestrate/__tests__/edge-identity.test.js +103 -0
  399. package/dist/cli/orchestrate/__tests__/edge-identity.test.js.map +1 -0
  400. package/dist/cli/orchestrate/__tests__/equivalence-check.test.d.ts +10 -0
  401. package/dist/cli/orchestrate/__tests__/equivalence-check.test.d.ts.map +1 -0
  402. package/dist/cli/orchestrate/__tests__/equivalence-check.test.js +277 -0
  403. package/dist/cli/orchestrate/__tests__/equivalence-check.test.js.map +1 -0
  404. package/dist/cli/orchestrate/__tests__/equivalence-repo-scale.test.d.ts +51 -0
  405. package/dist/cli/orchestrate/__tests__/equivalence-repo-scale.test.d.ts.map +1 -0
  406. package/dist/cli/orchestrate/__tests__/equivalence-repo-scale.test.js +183 -0
  407. package/dist/cli/orchestrate/__tests__/equivalence-repo-scale.test.js.map +1 -0
  408. package/dist/cli/orchestrate/__tests__/equivalence.test.d.ts +47 -0
  409. package/dist/cli/orchestrate/__tests__/equivalence.test.d.ts.map +1 -0
  410. package/dist/cli/orchestrate/__tests__/equivalence.test.js +259 -0
  411. package/dist/cli/orchestrate/__tests__/equivalence.test.js.map +1 -0
  412. package/dist/cli/orchestrate/__tests__/exact-boundary-recovery.test.d.ts +9 -0
  413. package/dist/cli/orchestrate/__tests__/exact-boundary-recovery.test.d.ts.map +1 -0
  414. package/dist/cli/orchestrate/__tests__/exact-boundary-recovery.test.js +105 -0
  415. package/dist/cli/orchestrate/__tests__/exact-boundary-recovery.test.js.map +1 -0
  416. package/dist/cli/orchestrate/__tests__/export-index.test.d.ts +12 -0
  417. package/dist/cli/orchestrate/__tests__/export-index.test.d.ts.map +1 -0
  418. package/dist/cli/orchestrate/__tests__/export-index.test.js +346 -0
  419. package/dist/cli/orchestrate/__tests__/export-index.test.js.map +1 -0
  420. package/dist/cli/orchestrate/__tests__/flat-large-fixture.test.d.ts +16 -0
  421. package/dist/cli/orchestrate/__tests__/flat-large-fixture.test.d.ts.map +1 -0
  422. package/dist/cli/orchestrate/__tests__/flat-large-fixture.test.js +99 -0
  423. package/dist/cli/orchestrate/__tests__/flat-large-fixture.test.js.map +1 -0
  424. package/dist/cli/orchestrate/__tests__/flat-monorepo-strategy.test.d.ts +11 -0
  425. package/dist/cli/orchestrate/__tests__/flat-monorepo-strategy.test.d.ts.map +1 -0
  426. package/dist/cli/orchestrate/__tests__/flat-monorepo-strategy.test.js +271 -0
  427. package/dist/cli/orchestrate/__tests__/flat-monorepo-strategy.test.js.map +1 -0
  428. package/dist/cli/orchestrate/__tests__/function-set-parity.test.d.ts +38 -0
  429. package/dist/cli/orchestrate/__tests__/function-set-parity.test.d.ts.map +1 -0
  430. package/dist/cli/orchestrate/__tests__/function-set-parity.test.js +163 -0
  431. package/dist/cli/orchestrate/__tests__/function-set-parity.test.js.map +1 -0
  432. package/dist/cli/orchestrate/__tests__/incremental-merge.test.d.ts +8 -0
  433. package/dist/cli/orchestrate/__tests__/incremental-merge.test.d.ts.map +1 -0
  434. package/dist/cli/orchestrate/__tests__/incremental-merge.test.js +153 -0
  435. package/dist/cli/orchestrate/__tests__/incremental-merge.test.js.map +1 -0
  436. package/dist/cli/orchestrate/__tests__/partition-files.test.d.ts +10 -0
  437. package/dist/cli/orchestrate/__tests__/partition-files.test.d.ts.map +1 -0
  438. package/dist/cli/orchestrate/__tests__/partition-files.test.js +104 -0
  439. package/dist/cli/orchestrate/__tests__/partition-files.test.js.map +1 -0
  440. package/dist/cli/orchestrate/__tests__/resolution-completeness-floor.test.d.ts +21 -0
  441. package/dist/cli/orchestrate/__tests__/resolution-completeness-floor.test.d.ts.map +1 -0
  442. package/dist/cli/orchestrate/__tests__/resolution-completeness-floor.test.js +59 -0
  443. package/dist/cli/orchestrate/__tests__/resolution-completeness-floor.test.js.map +1 -0
  444. package/dist/cli/orchestrate/__tests__/shard-model.test.d.ts +8 -0
  445. package/dist/cli/orchestrate/__tests__/shard-model.test.d.ts.map +1 -0
  446. package/dist/cli/orchestrate/__tests__/shard-model.test.js +77 -0
  447. package/dist/cli/orchestrate/__tests__/shard-model.test.js.map +1 -0
  448. package/dist/cli/orchestrate/__tests__/shard-runner-spawn.test.d.ts +13 -0
  449. package/dist/cli/orchestrate/__tests__/shard-runner-spawn.test.d.ts.map +1 -0
  450. package/dist/cli/orchestrate/__tests__/shard-runner-spawn.test.js +103 -0
  451. package/dist/cli/orchestrate/__tests__/shard-runner-spawn.test.js.map +1 -0
  452. package/dist/cli/orchestrate/__tests__/sharded-graph.test.d.ts +13 -0
  453. package/dist/cli/orchestrate/__tests__/sharded-graph.test.d.ts.map +1 -0
  454. package/dist/cli/orchestrate/__tests__/sharded-graph.test.js +257 -0
  455. package/dist/cli/orchestrate/__tests__/sharded-graph.test.js.map +1 -0
  456. package/dist/cli/orchestrate/__tests__/worker-pool.test.d.ts +6 -0
  457. package/dist/cli/orchestrate/__tests__/worker-pool.test.d.ts.map +1 -0
  458. package/dist/cli/orchestrate/__tests__/worker-pool.test.js +38 -0
  459. package/dist/cli/orchestrate/__tests__/worker-pool.test.js.map +1 -0
  460. package/dist/cli/orchestrate/cache-orchestrator.d.ts +42 -0
  461. package/dist/cli/orchestrate/cache-orchestrator.d.ts.map +1 -0
  462. package/dist/cli/orchestrate/cache-orchestrator.js +92 -0
  463. package/dist/cli/orchestrate/cache-orchestrator.js.map +1 -0
  464. package/dist/cli/orchestrate/canonical-file-set.d.ts +51 -0
  465. package/dist/cli/orchestrate/canonical-file-set.d.ts.map +1 -0
  466. package/dist/cli/orchestrate/canonical-file-set.js +58 -0
  467. package/dist/cli/orchestrate/canonical-file-set.js.map +1 -0
  468. package/dist/cli/orchestrate/catalog-builder.d.ts +121 -0
  469. package/dist/cli/orchestrate/catalog-builder.d.ts.map +1 -0
  470. package/dist/cli/orchestrate/catalog-builder.js +279 -0
  471. package/dist/cli/orchestrate/catalog-builder.js.map +1 -0
  472. package/dist/cli/orchestrate/catalog-stats.d.ts +31 -0
  473. package/dist/cli/orchestrate/catalog-stats.d.ts.map +1 -0
  474. package/dist/cli/orchestrate/catalog-stats.js +52 -0
  475. package/dist/cli/orchestrate/catalog-stats.js.map +1 -0
  476. package/dist/cli/orchestrate/cross-shard-resolve.d.ts +190 -0
  477. package/dist/cli/orchestrate/cross-shard-resolve.d.ts.map +1 -0
  478. package/dist/cli/orchestrate/cross-shard-resolve.js +523 -0
  479. package/dist/cli/orchestrate/cross-shard-resolve.js.map +1 -0
  480. package/dist/cli/orchestrate/edge-identity.d.ts +48 -0
  481. package/dist/cli/orchestrate/edge-identity.d.ts.map +1 -0
  482. package/dist/cli/orchestrate/edge-identity.js +68 -0
  483. package/dist/cli/orchestrate/edge-identity.js.map +1 -0
  484. package/dist/cli/orchestrate/equivalence-check.d.ts +227 -0
  485. package/dist/cli/orchestrate/equivalence-check.d.ts.map +1 -0
  486. package/dist/cli/orchestrate/equivalence-check.js +264 -0
  487. package/dist/cli/orchestrate/equivalence-check.js.map +1 -0
  488. package/dist/cli/orchestrate/exact-boundary-recovery.d.ts +33 -0
  489. package/dist/cli/orchestrate/exact-boundary-recovery.d.ts.map +1 -0
  490. package/dist/cli/orchestrate/exact-boundary-recovery.js +62 -0
  491. package/dist/cli/orchestrate/exact-boundary-recovery.js.map +1 -0
  492. package/dist/cli/orchestrate/flat-monorepo-strategy.d.ts +171 -0
  493. package/dist/cli/orchestrate/flat-monorepo-strategy.d.ts.map +1 -0
  494. package/dist/cli/orchestrate/flat-monorepo-strategy.js +328 -0
  495. package/dist/cli/orchestrate/flat-monorepo-strategy.js.map +1 -0
  496. package/dist/cli/orchestrate/incremental-merge.d.ts +46 -0
  497. package/dist/cli/orchestrate/incremental-merge.d.ts.map +1 -0
  498. package/dist/cli/orchestrate/incremental-merge.js +236 -0
  499. package/dist/cli/orchestrate/incremental-merge.js.map +1 -0
  500. package/dist/cli/orchestrate/partition-chunk.d.ts +36 -0
  501. package/dist/cli/orchestrate/partition-chunk.d.ts.map +1 -0
  502. package/dist/cli/orchestrate/partition-chunk.js +37 -0
  503. package/dist/cli/orchestrate/partition-chunk.js.map +1 -0
  504. package/dist/cli/orchestrate/partition-files.d.ts +52 -0
  505. package/dist/cli/orchestrate/partition-files.d.ts.map +1 -0
  506. package/dist/cli/orchestrate/partition-files.js +94 -0
  507. package/dist/cli/orchestrate/partition-files.js.map +1 -0
  508. package/dist/cli/orchestrate/resolution-trace.d.ts +11 -0
  509. package/dist/cli/orchestrate/resolution-trace.d.ts.map +1 -0
  510. package/dist/cli/orchestrate/resolution-trace.js +27 -0
  511. package/dist/cli/orchestrate/resolution-trace.js.map +1 -0
  512. package/dist/cli/orchestrate/shard-model.d.ts +99 -0
  513. package/dist/cli/orchestrate/shard-model.d.ts.map +1 -0
  514. package/dist/cli/orchestrate/shard-model.js +23 -0
  515. package/dist/cli/orchestrate/shard-model.js.map +1 -0
  516. package/dist/cli/orchestrate/shard-runner.d.ts +65 -0
  517. package/dist/cli/orchestrate/shard-runner.d.ts.map +1 -0
  518. package/dist/cli/orchestrate/shard-runner.js +169 -0
  519. package/dist/cli/orchestrate/shard-runner.js.map +1 -0
  520. package/dist/cli/orchestrate/sharded-graph.d.ts +86 -0
  521. package/dist/cli/orchestrate/sharded-graph.d.ts.map +1 -0
  522. package/dist/cli/orchestrate/sharded-graph.js +227 -0
  523. package/dist/cli/orchestrate/sharded-graph.js.map +1 -0
  524. package/dist/cli/orchestrate/types.d.ts +31 -0
  525. package/dist/cli/orchestrate/types.d.ts.map +1 -0
  526. package/dist/cli/orchestrate/types.js +24 -0
  527. package/dist/cli/orchestrate/types.js.map +1 -0
  528. package/dist/cli/orchestrate/worker-pool.d.ts +16 -0
  529. package/dist/cli/orchestrate/worker-pool.d.ts.map +1 -0
  530. package/dist/cli/orchestrate/worker-pool.js +39 -0
  531. package/dist/cli/orchestrate/worker-pool.js.map +1 -0
  532. package/dist/cli/orchestrate.d.ts +106 -0
  533. package/dist/cli/orchestrate.d.ts.map +1 -0
  534. package/dist/cli/orchestrate.js +228 -0
  535. package/dist/cli/orchestrate.js.map +1 -0
  536. package/dist/cli/positional-paths.d.ts +23 -0
  537. package/dist/cli/positional-paths.d.ts.map +1 -0
  538. package/dist/cli/positional-paths.js +64 -0
  539. package/dist/cli/positional-paths.js.map +1 -0
  540. package/dist/cli/pressure-monitor.d.ts +62 -0
  541. package/dist/cli/pressure-monitor.d.ts.map +1 -0
  542. package/dist/cli/pressure-monitor.js +110 -0
  543. package/dist/cli/pressure-monitor.js.map +1 -0
  544. package/dist/cli/profile.d.ts +82 -0
  545. package/dist/cli/profile.d.ts.map +1 -0
  546. package/dist/cli/profile.js +120 -0
  547. package/dist/cli/profile.js.map +1 -0
  548. package/dist/cli/report-data.d.ts +46 -0
  549. package/dist/cli/report-data.d.ts.map +1 -0
  550. package/dist/cli/report-data.js +48 -0
  551. package/dist/cli/report-data.js.map +1 -0
  552. package/dist/cli/resolve-adapters.d.ts +19 -0
  553. package/dist/cli/resolve-adapters.d.ts.map +1 -0
  554. package/dist/cli/resolve-adapters.js +38 -0
  555. package/dist/cli/resolve-adapters.js.map +1 -0
  556. package/dist/cli/sarif-export.d.ts +40 -0
  557. package/dist/cli/sarif-export.d.ts.map +1 -0
  558. package/dist/cli/sarif-export.js +69 -0
  559. package/dist/cli/sarif-export.js.map +1 -0
  560. package/dist/cli/shard-worker.d.ts +25 -0
  561. package/dist/cli/shard-worker.d.ts.map +1 -0
  562. package/dist/cli/shard-worker.js +98 -0
  563. package/dist/cli/shard-worker.js.map +1 -0
  564. package/dist/cli/symbol-index.d.ts +51 -0
  565. package/dist/cli/symbol-index.d.ts.map +1 -0
  566. package/dist/cli/symbol-index.js +120 -0
  567. package/dist/cli/symbol-index.js.map +1 -0
  568. package/dist/cli/workspace-report.d.ts +32 -0
  569. package/dist/cli/workspace-report.d.ts.map +1 -0
  570. package/dist/cli/workspace-report.js +107 -0
  571. package/dist/cli/workspace-report.js.map +1 -0
  572. package/dist/cli/workspace-runner.d.ts +104 -0
  573. package/dist/cli/workspace-runner.d.ts.map +1 -0
  574. package/dist/cli/workspace-runner.js +166 -0
  575. package/dist/cli/workspace-runner.js.map +1 -0
  576. package/dist/cross-package/export-index.d.ts +118 -0
  577. package/dist/cross-package/export-index.d.ts.map +1 -0
  578. package/dist/cross-package/export-index.js +296 -0
  579. package/dist/cross-package/export-index.js.map +1 -0
  580. package/dist/cross-package/posix-path.d.ts +16 -0
  581. package/dist/cross-package/posix-path.d.ts.map +1 -0
  582. package/dist/cross-package/posix-path.js +18 -0
  583. package/dist/cross-package/posix-path.js.map +1 -0
  584. package/dist/cross-package/resolve.d.ts +68 -0
  585. package/dist/cross-package/resolve.d.ts.map +1 -0
  586. package/dist/cross-package/resolve.js +83 -0
  587. package/dist/cross-package/resolve.js.map +1 -0
  588. package/dist/index.d.ts +33 -0
  589. package/dist/index.d.ts.map +1 -0
  590. package/dist/index.js +61 -0
  591. package/dist/index.js.map +1 -0
  592. package/dist/internal.d.ts +25 -0
  593. package/dist/internal.d.ts.map +1 -0
  594. package/dist/internal.js +38 -0
  595. package/dist/internal.js.map +1 -0
  596. package/dist/lang-adapter/body-digest.d.ts +46 -0
  597. package/dist/lang-adapter/body-digest.d.ts.map +1 -0
  598. package/dist/lang-adapter/body-digest.js +49 -0
  599. package/dist/lang-adapter/body-digest.js.map +1 -0
  600. package/dist/lang-adapter/edge-helpers.d.ts +104 -0
  601. package/dist/lang-adapter/edge-helpers.d.ts.map +1 -0
  602. package/dist/lang-adapter/edge-helpers.js +120 -0
  603. package/dist/lang-adapter/edge-helpers.js.map +1 -0
  604. package/dist/lang-adapter/registry.d.ts +59 -0
  605. package/dist/lang-adapter/registry.d.ts.map +1 -0
  606. package/dist/lang-adapter/registry.js +100 -0
  607. package/dist/lang-adapter/registry.js.map +1 -0
  608. package/dist/lang-adapter/selector.d.ts +39 -0
  609. package/dist/lang-adapter/selector.d.ts.map +1 -0
  610. package/dist/lang-adapter/selector.js +140 -0
  611. package/dist/lang-adapter/selector.js.map +1 -0
  612. package/dist/lang-adapter/types.d.ts +217 -0
  613. package/dist/lang-adapter/types.d.ts.map +1 -0
  614. package/dist/lang-adapter/types.js +18 -0
  615. package/dist/lang-adapter/types.js.map +1 -0
  616. package/dist/owner-key.d.ts +22 -0
  617. package/dist/owner-key.d.ts.map +1 -0
  618. package/dist/owner-key.js +25 -0
  619. package/dist/owner-key.js.map +1 -0
  620. package/dist/persistence/__tests__/shard-fragment-cache.test.d.ts +8 -0
  621. package/dist/persistence/__tests__/shard-fragment-cache.test.d.ts.map +1 -0
  622. package/dist/persistence/__tests__/shard-fragment-cache.test.js +126 -0
  623. package/dist/persistence/__tests__/shard-fragment-cache.test.js.map +1 -0
  624. package/dist/persistence/catalog-repo.d.ts +77 -0
  625. package/dist/persistence/catalog-repo.d.ts.map +1 -0
  626. package/dist/persistence/catalog-repo.js +229 -0
  627. package/dist/persistence/catalog-repo.js.map +1 -0
  628. package/dist/persistence/schema.d.ts +249 -0
  629. package/dist/persistence/schema.d.ts.map +1 -0
  630. package/dist/persistence/schema.js +53 -0
  631. package/dist/persistence/schema.js.map +1 -0
  632. package/dist/persistence/session-payload.d.ts +96 -0
  633. package/dist/persistence/session-payload.d.ts.map +1 -0
  634. package/dist/persistence/session-payload.js +116 -0
  635. package/dist/persistence/session-payload.js.map +1 -0
  636. package/dist/persistence/session-replay.d.ts +15 -0
  637. package/dist/persistence/session-replay.d.ts.map +1 -0
  638. package/dist/persistence/session-replay.js +80 -0
  639. package/dist/persistence/session-replay.js.map +1 -0
  640. package/dist/pipeline/__tests__/assign-packages.test.d.ts +2 -0
  641. package/dist/pipeline/__tests__/assign-packages.test.d.ts.map +1 -0
  642. package/dist/pipeline/__tests__/assign-packages.test.js +88 -0
  643. package/dist/pipeline/__tests__/assign-packages.test.js.map +1 -0
  644. package/dist/pipeline/__tests__/constrain-edges.test.d.ts +2 -0
  645. package/dist/pipeline/__tests__/constrain-edges.test.d.ts.map +1 -0
  646. package/dist/pipeline/__tests__/constrain-edges.test.js +228 -0
  647. package/dist/pipeline/__tests__/constrain-edges.test.js.map +1 -0
  648. package/dist/pipeline/__tests__/features.test.d.ts +9 -0
  649. package/dist/pipeline/__tests__/features.test.d.ts.map +1 -0
  650. package/dist/pipeline/__tests__/features.test.js +458 -0
  651. package/dist/pipeline/__tests__/features.test.js.map +1 -0
  652. package/dist/pipeline/__tests__/indexes-imports.test.d.ts +2 -0
  653. package/dist/pipeline/__tests__/indexes-imports.test.d.ts.map +1 -0
  654. package/dist/pipeline/__tests__/indexes-imports.test.js +114 -0
  655. package/dist/pipeline/__tests__/indexes-imports.test.js.map +1 -0
  656. package/dist/pipeline/assign-packages.d.ts +18 -0
  657. package/dist/pipeline/assign-packages.d.ts.map +1 -0
  658. package/dist/pipeline/assign-packages.js +86 -0
  659. package/dist/pipeline/assign-packages.js.map +1 -0
  660. package/dist/pipeline/constrain-edges.d.ts +34 -0
  661. package/dist/pipeline/constrain-edges.d.ts.map +1 -0
  662. package/dist/pipeline/constrain-edges.js +139 -0
  663. package/dist/pipeline/constrain-edges.js.map +1 -0
  664. package/dist/pipeline/feature-deps.d.ts +19 -0
  665. package/dist/pipeline/feature-deps.d.ts.map +1 -0
  666. package/dist/pipeline/feature-deps.js +28 -0
  667. package/dist/pipeline/feature-deps.js.map +1 -0
  668. package/dist/pipeline/features.d.ts +50 -0
  669. package/dist/pipeline/features.d.ts.map +1 -0
  670. package/dist/pipeline/features.js +462 -0
  671. package/dist/pipeline/features.js.map +1 -0
  672. package/dist/pipeline/indexes.d.ts +27 -0
  673. package/dist/pipeline/indexes.d.ts.map +1 -0
  674. package/dist/pipeline/indexes.js +159 -0
  675. package/dist/pipeline/indexes.js.map +1 -0
  676. package/dist/recipes/__tests__/built-in-recipes.test.d.ts +5 -0
  677. package/dist/recipes/__tests__/built-in-recipes.test.d.ts.map +1 -0
  678. package/dist/recipes/__tests__/built-in-recipes.test.js +24 -0
  679. package/dist/recipes/__tests__/built-in-recipes.test.js.map +1 -0
  680. package/dist/recipes/__tests__/registry.test.d.ts +7 -0
  681. package/dist/recipes/__tests__/registry.test.d.ts.map +1 -0
  682. package/dist/recipes/__tests__/registry.test.js +34 -0
  683. package/dist/recipes/__tests__/registry.test.js.map +1 -0
  684. package/dist/recipes/__tests__/resolve.test.d.ts +10 -0
  685. package/dist/recipes/__tests__/resolve.test.d.ts.map +1 -0
  686. package/dist/recipes/__tests__/resolve.test.js +38 -0
  687. package/dist/recipes/__tests__/resolve.test.js.map +1 -0
  688. package/dist/recipes/built-in-recipes.d.ts +26 -0
  689. package/dist/recipes/built-in-recipes.d.ts.map +1 -0
  690. package/dist/recipes/built-in-recipes.js +43 -0
  691. package/dist/recipes/built-in-recipes.js.map +1 -0
  692. package/dist/recipes/registry.d.ts +31 -0
  693. package/dist/recipes/registry.d.ts.map +1 -0
  694. package/dist/recipes/registry.js +48 -0
  695. package/dist/recipes/registry.js.map +1 -0
  696. package/dist/recipes/resolve.d.ts +31 -0
  697. package/dist/recipes/resolve.d.ts.map +1 -0
  698. package/dist/recipes/resolve.js +70 -0
  699. package/dist/recipes/resolve.js.map +1 -0
  700. package/dist/recipes/types.d.ts +58 -0
  701. package/dist/recipes/types.d.ts.map +1 -0
  702. package/dist/recipes/types.js +39 -0
  703. package/dist/recipes/types.js.map +1 -0
  704. package/dist/render/__tests__/catalog-json.test.d.ts +9 -0
  705. package/dist/render/__tests__/catalog-json.test.d.ts.map +1 -0
  706. package/dist/render/__tests__/catalog-json.test.js +132 -0
  707. package/dist/render/__tests__/catalog-json.test.js.map +1 -0
  708. package/dist/render/catalog-json-types.d.ts +114 -0
  709. package/dist/render/catalog-json-types.d.ts.map +1 -0
  710. package/dist/render/catalog-json-types.js +23 -0
  711. package/dist/render/catalog-json-types.js.map +1 -0
  712. package/dist/render/catalog-json.d.ts +43 -0
  713. package/dist/render/catalog-json.d.ts.map +1 -0
  714. package/dist/render/catalog-json.js +303 -0
  715. package/dist/render/catalog-json.js.map +1 -0
  716. package/dist/render/opensip-id-derivation.d.ts +73 -0
  717. package/dist/render/opensip-id-derivation.d.ts.map +1 -0
  718. package/dist/render/opensip-id-derivation.js +65 -0
  719. package/dist/render/opensip-id-derivation.js.map +1 -0
  720. package/dist/render/rule-id-mapping.d.ts +61 -0
  721. package/dist/render/rule-id-mapping.d.ts.map +1 -0
  722. package/dist/render/rule-id-mapping.js +82 -0
  723. package/dist/render/rule-id-mapping.js.map +1 -0
  724. package/dist/resolve-callee.d.ts +50 -0
  725. package/dist/resolve-callee.d.ts.map +1 -0
  726. package/dist/resolve-callee.js +80 -0
  727. package/dist/resolve-callee.js.map +1 -0
  728. package/dist/rules/__tests__/__fixtures__/catalog.fixture.d.ts +22 -0
  729. package/dist/rules/__tests__/__fixtures__/catalog.fixture.d.ts.map +1 -0
  730. package/dist/rules/__tests__/__fixtures__/catalog.fixture.js +143 -0
  731. package/dist/rules/__tests__/__fixtures__/catalog.fixture.js.map +1 -0
  732. package/dist/rules/__tests__/create-graph-signal.test.d.ts +8 -0
  733. package/dist/rules/__tests__/create-graph-signal.test.d.ts.map +1 -0
  734. package/dist/rules/__tests__/create-graph-signal.test.js +55 -0
  735. package/dist/rules/__tests__/create-graph-signal.test.js.map +1 -0
  736. package/dist/rules/__tests__/define-rule.test.d.ts +13 -0
  737. package/dist/rules/__tests__/define-rule.test.d.ts.map +1 -0
  738. package/dist/rules/__tests__/define-rule.test.js +102 -0
  739. package/dist/rules/__tests__/define-rule.test.js.map +1 -0
  740. package/dist/rules/__tests__/fingerprint-golden.test.d.ts +21 -0
  741. package/dist/rules/__tests__/fingerprint-golden.test.d.ts.map +1 -0
  742. package/dist/rules/__tests__/fingerprint-golden.test.js +69 -0
  743. package/dist/rules/__tests__/fingerprint-golden.test.js.map +1 -0
  744. package/dist/rules/__tests__/registry.test.d.ts +6 -0
  745. package/dist/rules/__tests__/registry.test.d.ts.map +1 -0
  746. package/dist/rules/__tests__/registry.test.js +37 -0
  747. package/dist/rules/__tests__/registry.test.js.map +1 -0
  748. package/dist/rules/__tests__/rule-behaviors.test.d.ts +9 -0
  749. package/dist/rules/__tests__/rule-behaviors.test.d.ts.map +1 -0
  750. package/dist/rules/__tests__/rule-behaviors.test.js +204 -0
  751. package/dist/rules/__tests__/rule-behaviors.test.js.map +1 -0
  752. package/dist/rules/__tests__/signal-output.snapshot.test.d.ts +11 -0
  753. package/dist/rules/__tests__/signal-output.snapshot.test.d.ts.map +1 -0
  754. package/dist/rules/__tests__/signal-output.snapshot.test.js +55 -0
  755. package/dist/rules/__tests__/signal-output.snapshot.test.js.map +1 -0
  756. package/dist/rules/_approximation.d.ts +23 -0
  757. package/dist/rules/_approximation.d.ts.map +1 -0
  758. package/dist/rules/_approximation.js +28 -0
  759. package/dist/rules/_approximation.js.map +1 -0
  760. package/dist/rules/_entry-points.d.ts +27 -0
  761. package/dist/rules/_entry-points.d.ts.map +1 -0
  762. package/dist/rules/_entry-points.js +81 -0
  763. package/dist/rules/_entry-points.js.map +1 -0
  764. package/dist/rules/_severity-override.d.ts +32 -0
  765. package/dist/rules/_severity-override.d.ts.map +1 -0
  766. package/dist/rules/_severity-override.js +33 -0
  767. package/dist/rules/_severity-override.js.map +1 -0
  768. package/dist/rules/always-throws-branch.d.ts +26 -0
  769. package/dist/rules/always-throws-branch.d.ts.map +1 -0
  770. package/dist/rules/always-throws-branch.js +66 -0
  771. package/dist/rules/always-throws-branch.js.map +1 -0
  772. package/dist/rules/create-graph-signal.d.ts +38 -0
  773. package/dist/rules/create-graph-signal.d.ts.map +1 -0
  774. package/dist/rules/create-graph-signal.js +35 -0
  775. package/dist/rules/create-graph-signal.js.map +1 -0
  776. package/dist/rules/cycle.d.ts +29 -0
  777. package/dist/rules/cycle.d.ts.map +1 -0
  778. package/dist/rules/cycle.js +166 -0
  779. package/dist/rules/cycle.js.map +1 -0
  780. package/dist/rules/cycle.memberlocations.test.d.ts +11 -0
  781. package/dist/rules/cycle.memberlocations.test.d.ts.map +1 -0
  782. package/dist/rules/cycle.memberlocations.test.js +84 -0
  783. package/dist/rules/cycle.memberlocations.test.js.map +1 -0
  784. package/dist/rules/define-rule.d.ts +67 -0
  785. package/dist/rules/define-rule.d.ts.map +1 -0
  786. package/dist/rules/define-rule.js +66 -0
  787. package/dist/rules/define-rule.js.map +1 -0
  788. package/dist/rules/duplicated-function-body.d.ts +40 -0
  789. package/dist/rules/duplicated-function-body.d.ts.map +1 -0
  790. package/dist/rules/duplicated-function-body.js +232 -0
  791. package/dist/rules/duplicated-function-body.js.map +1 -0
  792. package/dist/rules/high-blast-untested.d.ts +26 -0
  793. package/dist/rules/high-blast-untested.d.ts.map +1 -0
  794. package/dist/rules/high-blast-untested.js +82 -0
  795. package/dist/rules/high-blast-untested.js.map +1 -0
  796. package/dist/rules/large-function.d.ts +22 -0
  797. package/dist/rules/large-function.d.ts.map +1 -0
  798. package/dist/rules/large-function.js +72 -0
  799. package/dist/rules/large-function.js.map +1 -0
  800. package/dist/rules/no-side-effect-path.d.ts +31 -0
  801. package/dist/rules/no-side-effect-path.d.ts.map +1 -0
  802. package/dist/rules/no-side-effect-path.js +217 -0
  803. package/dist/rules/no-side-effect-path.js.map +1 -0
  804. package/dist/rules/orphan-subtree.d.ts +11 -0
  805. package/dist/rules/orphan-subtree.d.ts.map +1 -0
  806. package/dist/rules/orphan-subtree.js +104 -0
  807. package/dist/rules/orphan-subtree.js.map +1 -0
  808. package/dist/rules/registry.d.ts +35 -0
  809. package/dist/rules/registry.d.ts.map +1 -0
  810. package/dist/rules/registry.js +96 -0
  811. package/dist/rules/registry.js.map +1 -0
  812. package/dist/rules/test-only-reachable.d.ts +9 -0
  813. package/dist/rules/test-only-reachable.d.ts.map +1 -0
  814. package/dist/rules/test-only-reachable.js +101 -0
  815. package/dist/rules/test-only-reachable.js.map +1 -0
  816. package/dist/rules/unexpected-coupling.d.ts +29 -0
  817. package/dist/rules/unexpected-coupling.d.ts.map +1 -0
  818. package/dist/rules/unexpected-coupling.js +0 -0
  819. package/dist/rules/unexpected-coupling.js.map +1 -0
  820. package/dist/rules/wide-function.d.ts +18 -0
  821. package/dist/rules/wide-function.d.ts.map +1 -0
  822. package/dist/rules/wide-function.js +58 -0
  823. package/dist/rules/wide-function.js.map +1 -0
  824. package/dist/scope-augmentation.d.ts +58 -0
  825. package/dist/scope-augmentation.d.ts.map +1 -0
  826. package/dist/scope-augmentation.js +29 -0
  827. package/dist/scope-augmentation.js.map +1 -0
  828. package/dist/tool.d.ts +29 -0
  829. package/dist/tool.d.ts.map +1 -0
  830. package/dist/tool.js +241 -0
  831. package/dist/tool.js.map +1 -0
  832. package/dist/types.d.ts +642 -0
  833. package/dist/types.d.ts.map +1 -0
  834. package/dist/types.js +2 -0
  835. package/dist/types.js.map +1 -0
  836. package/package.json +136 -0
@@ -0,0 +1,51 @@
1
+ /**
2
+ * repo-scale sharded ≡ exact equivalence oracle (FAST PR-gate SANITY check).
3
+ *
4
+ * The SHARDED build must be byte-equivalent to the SINGLE-PROGRAM (exact) build
5
+ * on the FULL `CatalogEquivalence` — function set + intra/cross edges + SCCs —
6
+ * over a medium multi-package fixture big enough to exercise the real divergence
7
+ * classes, yet small enough that the EXACT engine (the oracle) completes in
8
+ * single-digit milliseconds. It runs under `pnpm test` (Vitest), so it is in the
9
+ * PR gate.
10
+ *
11
+ * ─────────────────────────────────────────────────────────────────────────────
12
+ * THIS IS NOT THE AUTHORITATIVE GATE — it does NOT exercise real dist/*.d.ts
13
+ * resolution. Both engines build through the SYNTHETIC `createEquivalenceHarness`
14
+ * adapter that reuses the production cross-package helpers
15
+ * (`resolveSpecifierToPackage` + `buildExportIndex`), so they AGREE BY
16
+ * CONSTRUCTION. A real `@scope/pkg` import that Node16 resolves to a BUILT,
17
+ * BODILESS `dist/*.d.ts` — the divergence class the exact-engine-under-resolution
18
+ * bug lived in — is structurally unrepresentable here, so this fixture-driven
19
+ * test could never have caught it (false confidence).
20
+ *
21
+ * The REAL guardrail is the dogfood CI step `graph-equivalence-check` (npm
22
+ * `graph:equivalence:ci`): it builds BOTH catalogs on this real monorepo with the
23
+ * real adapter (real dist/*.d.ts resolution) and ratchets the production
24
+ * divergence against `.config/graph-equivalence-budget.json`. Keep this fast test
25
+ * as a sanity check, but the dogfood step is what protects against an
26
+ * edge-resolution regression on real code.
27
+ *
28
+ * ── DIVERGENCE CLASSES the medium fixture (`__fixtures__/medium-pkg`) covers ──
29
+ * - DEEP cross-package chain : app -> svc-b -> svc-a -> {core, util}.
30
+ * - CROSS-PACKAGE CYCLE : core.coreCycle <-> util.utilCycle (a
31
+ * 2-member SCC that drives `cycle` findings;
32
+ * the `sccDifferences` partition guards it).
33
+ * - RELATIVE intra-package edge : util.utilFormat -> ./helpers.utilHelper.
34
+ * - INTRA-FILE same-package edge : core.coreInit -> core.coreHelper.
35
+ * - ROOT-level file : root-script.ts (the synthetic `:root`
36
+ * shard) -> @medium/app.appMain.
37
+ * - TEST-tree file : app/__tests__/app.test.ts -> app.appMain
38
+ * (kept in the canonical set; a test->prod
39
+ * cross-reference inside the package shard).
40
+ *
41
+ * Both engines build through the shared `createEquivalenceHarness` — the SAME
42
+ * fixture-resolution model the small gate (`equivalence.test.ts`) uses — so
43
+ * there is exactly one resolver, never two drifting copies.
44
+ *
45
+ * COLD vs WARM (determinism leg): the harness builds in-memory with no cache, so
46
+ * "warm" is modeled as a SECOND independent build. The merged catalog is a pure
47
+ * function of the fragment SET (shard completion order is canonicalized away), so
48
+ * two builds must be byte-identical — and BOTH must be fully equivalent to exact.
49
+ */
50
+ export {};
51
+ //# sourceMappingURL=equivalence-repo-scale.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equivalence-repo-scale.test.d.ts","sourceRoot":"","sources":["../../../../src/cli/orchestrate/__tests__/equivalence-repo-scale.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG"}
@@ -0,0 +1,183 @@
1
+ /**
2
+ * repo-scale sharded ≡ exact equivalence oracle (FAST PR-gate SANITY check).
3
+ *
4
+ * The SHARDED build must be byte-equivalent to the SINGLE-PROGRAM (exact) build
5
+ * on the FULL `CatalogEquivalence` — function set + intra/cross edges + SCCs —
6
+ * over a medium multi-package fixture big enough to exercise the real divergence
7
+ * classes, yet small enough that the EXACT engine (the oracle) completes in
8
+ * single-digit milliseconds. It runs under `pnpm test` (Vitest), so it is in the
9
+ * PR gate.
10
+ *
11
+ * ─────────────────────────────────────────────────────────────────────────────
12
+ * THIS IS NOT THE AUTHORITATIVE GATE — it does NOT exercise real dist/*.d.ts
13
+ * resolution. Both engines build through the SYNTHETIC `createEquivalenceHarness`
14
+ * adapter that reuses the production cross-package helpers
15
+ * (`resolveSpecifierToPackage` + `buildExportIndex`), so they AGREE BY
16
+ * CONSTRUCTION. A real `@scope/pkg` import that Node16 resolves to a BUILT,
17
+ * BODILESS `dist/*.d.ts` — the divergence class the exact-engine-under-resolution
18
+ * bug lived in — is structurally unrepresentable here, so this fixture-driven
19
+ * test could never have caught it (false confidence).
20
+ *
21
+ * The REAL guardrail is the dogfood CI step `graph-equivalence-check` (npm
22
+ * `graph:equivalence:ci`): it builds BOTH catalogs on this real monorepo with the
23
+ * real adapter (real dist/*.d.ts resolution) and ratchets the production
24
+ * divergence against `.config/graph-equivalence-budget.json`. Keep this fast test
25
+ * as a sanity check, but the dogfood step is what protects against an
26
+ * edge-resolution regression on real code.
27
+ *
28
+ * ── DIVERGENCE CLASSES the medium fixture (`__fixtures__/medium-pkg`) covers ──
29
+ * - DEEP cross-package chain : app -> svc-b -> svc-a -> {core, util}.
30
+ * - CROSS-PACKAGE CYCLE : core.coreCycle <-> util.utilCycle (a
31
+ * 2-member SCC that drives `cycle` findings;
32
+ * the `sccDifferences` partition guards it).
33
+ * - RELATIVE intra-package edge : util.utilFormat -> ./helpers.utilHelper.
34
+ * - INTRA-FILE same-package edge : core.coreInit -> core.coreHelper.
35
+ * - ROOT-level file : root-script.ts (the synthetic `:root`
36
+ * shard) -> @medium/app.appMain.
37
+ * - TEST-tree file : app/__tests__/app.test.ts -> app.appMain
38
+ * (kept in the canonical set; a test->prod
39
+ * cross-reference inside the package shard).
40
+ *
41
+ * Both engines build through the shared `createEquivalenceHarness` — the SAME
42
+ * fixture-resolution model the small gate (`equivalence.test.ts`) uses — so
43
+ * there is exactly one resolver, never two drifting copies.
44
+ *
45
+ * COLD vs WARM (determinism leg): the harness builds in-memory with no cache, so
46
+ * "warm" is modeled as a SECOND independent build. The merged catalog is a pure
47
+ * function of the fragment SET (shard completion order is canonicalized away), so
48
+ * two builds must be byte-identical — and BOTH must be fully equivalent to exact.
49
+ */
50
+ import { dirname, join } from 'node:path';
51
+ import { fileURLToPath } from 'node:url';
52
+ import { describe, expect, it } from 'vitest';
53
+ import { computeSccs } from '../../../pipeline/features.js';
54
+ import { buildIndexes } from '../../../pipeline/indexes.js';
55
+ import { diffCatalogs, isEquivalent } from '../cross-shard-resolve.js';
56
+ import { createEquivalenceHarness } from './_equivalence-harness.js';
57
+ // ── medium fixture geography ──────────────────────────────────────
58
+ const FIXTURE_ROOT = join(dirname(fileURLToPath(import.meta.url)), '__fixtures__', 'medium-pkg');
59
+ const PKG = (name) => join(FIXTURE_ROOT, 'packages', name);
60
+ /** Every package's source files, grouped by package (the shard file lists). */
61
+ const PKG_FILES = {
62
+ core: [join(PKG('core'), 'src', 'index.ts')],
63
+ util: [join(PKG('util'), 'src', 'index.ts'), join(PKG('util'), 'src', 'helpers.ts')],
64
+ 'svc-a': [join(PKG('svc-a'), 'src', 'index.ts')],
65
+ 'svc-b': [join(PKG('svc-b'), 'src', 'index.ts')],
66
+ // pkg-app owns BOTH its src/ and its real __tests__/ tree (kept canonically).
67
+ // The test-tree file is named `index.ts` (NOT `*.test.ts`) so Vitest's own
68
+ // test glob never collects this FIXTURE as a runnable test — the convention
69
+ // the function-set-gap fixture established.
70
+ app: [join(PKG('app'), 'src', 'index.ts'), join(PKG('app'), '__tests__', 'index.ts')],
71
+ };
72
+ /** Root-level files under no packages/* unit → the synthetic `:root` shard. */
73
+ const ROOT_FILES = [join(FIXTURE_ROOT, 'root-script.ts')];
74
+ const ALL_FILES = [...Object.values(PKG_FILES).flat(), ...ROOT_FILES];
75
+ /** Five package shards + the synthetic `:root` shard (root shard last). */
76
+ const SHARDS = [
77
+ ...Object.entries(PKG_FILES).map(([name, files]) => ({ id: `pkg:${name}`, rootDir: PKG(name), files: [...files] })),
78
+ { id: ':root', rootDir: FIXTURE_ROOT, files: [...ROOT_FILES] },
79
+ ];
80
+ const harness = createEquivalenceHarness({
81
+ fixtureRoot: FIXTURE_ROOT,
82
+ shards: SHARDS,
83
+ allFiles: ALL_FILES,
84
+ });
85
+ const { buildSingleProgram, buildSharded, bodyHashFor } = harness;
86
+ // ── SCC + serialization helpers ───────────────────────────────────
87
+ /** Sorted-member SCC signatures (the engine's own occId-keyed Tarjan). */
88
+ function sccSignatures(catalog) {
89
+ const indexes = buildIndexes(catalog);
90
+ return computeSccs(indexes)
91
+ .map((scc) => [...scc.members].sort().join('|'))
92
+ .sort();
93
+ }
94
+ /** A catalog serialized for byte-equality, EXCLUDING the wall-clock `builtAt`. */
95
+ function structural(catalog) {
96
+ // `builtAt` is the sole intentionally-nondeterministic field; drop it from the
97
+ // structural comparison via a JSON replacer rather than an unused destructure.
98
+ return JSON.stringify(catalog, (key, value) => (key === 'builtAt' ? undefined : value));
99
+ }
100
+ /** Every call-edge target of the first occurrence of `name` in `catalog`. */
101
+ function targetsOf(catalog, name) {
102
+ return (catalog.functions[name]?.[0]?.calls ?? []).flatMap((e) => [...e.to]);
103
+ }
104
+ const CORE_CYCLE = bodyHashFor('packages/core/src/index.ts', 'coreCycle');
105
+ const UTIL_CYCLE = bodyHashFor('packages/util/src/index.ts', 'utilCycle');
106
+ /**
107
+ * The expected 2-member cross-package cycle's SCC signature, derived from the
108
+ * catalog's own occurrences (occId = `filePath:line:column`) so it tracks the
109
+ * harness's column model rather than a hardcoded guess.
110
+ */
111
+ function cycleSignature(catalog) {
112
+ const occId = (simpleName, filePath) => {
113
+ const occ = (catalog.functions[simpleName] ?? []).find((o) => o.filePath === filePath);
114
+ if (occ === undefined)
115
+ throw new Error(`missing occurrence ${simpleName} in ${filePath}`);
116
+ return `${occ.filePath}:${String(occ.line)}:${String(occ.column)}`;
117
+ };
118
+ return [
119
+ occId('coreCycle', 'packages/core/src/index.ts'),
120
+ occId('utilCycle', 'packages/util/src/index.ts'),
121
+ ]
122
+ .sort()
123
+ .join('|');
124
+ }
125
+ // ── the gate ──────────────────────────────────────────────────────
126
+ describe('repo-scale equivalence guardrail (Phase 4 gate)', () => {
127
+ it('sharded is FULLY equivalent to exact — function set + edges + SCCs (COLD)', async () => {
128
+ const exact = await buildSingleProgram();
129
+ const sharded = await buildSharded();
130
+ const eq = diffCatalogs(sharded, exact);
131
+ expect(eq.functionsOnlyInA).toEqual([]);
132
+ expect(eq.functionsOnlyInB).toEqual([]);
133
+ expect(eq.intraMismatches).toEqual([]);
134
+ expect(eq.crossDifferences).toEqual([]);
135
+ expect(eq.sccDifferences).toEqual([]);
136
+ expect(isEquivalent(eq)).toBe(true);
137
+ });
138
+ it('stays FULLY equivalent on a second (WARM) build — determinism leg', async () => {
139
+ const exact = await buildSingleProgram();
140
+ const shardedCold = await buildSharded();
141
+ const shardedWarm = await buildSharded();
142
+ // The two sharded builds are byte-identical (merge is a pure function of the
143
+ // fragment set; completion order is canonicalized away).
144
+ expect(structural(shardedWarm)).toEqual(structural(shardedCold));
145
+ // …and the warm build is equally fully-equivalent to exact.
146
+ expect(isEquivalent(diffCatalogs(shardedWarm, exact))).toBe(true);
147
+ });
148
+ it('recovers the deep cross-package chain (app → svc-b → svc-a → core/util)', async () => {
149
+ const sharded = await buildSharded();
150
+ const exact = await buildSingleProgram();
151
+ for (const cat of [sharded, exact]) {
152
+ expect(targetsOf(cat, 'appMain')).toContain(bodyHashFor('packages/svc-b/src/index.ts', 'svcBRun'));
153
+ expect(targetsOf(cat, 'svcBRun')).toContain(bodyHashFor('packages/svc-a/src/index.ts', 'svcARun'));
154
+ expect(targetsOf(cat, 'svcARun')).toContain(bodyHashFor('packages/core/src/index.ts', 'coreInit'));
155
+ expect(targetsOf(cat, 'svcARun')).toContain(bodyHashFor('packages/util/src/index.ts', 'utilFormat'));
156
+ }
157
+ });
158
+ it('forms the cross-package cycle SCC identically in both engines', async () => {
159
+ const exact = await buildSingleProgram();
160
+ const sharded = await buildSharded();
161
+ const exactSccs = sccSignatures(exact);
162
+ const shardedSccs = sccSignatures(sharded);
163
+ expect(shardedSccs).toEqual(exactSccs);
164
+ // The expected 2-member { coreCycle, utilCycle } component is actually present
165
+ // (not vacuously equal because neither engine found it).
166
+ expect(shardedSccs).toContain(cycleSignature(sharded));
167
+ // And the edges that form the cycle are recovered cross-shard in sharded.
168
+ const coreCycleEdges = sharded.functions.coreCycle?.[0]?.calls ?? [];
169
+ const utilCycleEdges = sharded.functions.utilCycle?.[0]?.calls ?? [];
170
+ expect(coreCycleEdges.some((e) => e.to.includes(UTIL_CYCLE) && e.crossShard)).toBe(true);
171
+ expect(utilCycleEdges.some((e) => e.to.includes(CORE_CYCLE) && e.crossShard)).toBe(true);
172
+ });
173
+ it('links the root-level and test-tree cross-package edges to app.appMain', async () => {
174
+ const sharded = await buildSharded();
175
+ const exact = await buildSingleProgram();
176
+ const appMain = bodyHashFor('packages/app/src/index.ts', 'appMain');
177
+ for (const cat of [sharded, exact]) {
178
+ expect(targetsOf(cat, 'rootRun')).toContain(appMain); // root shard → prod
179
+ expect(targetsOf(cat, 'testApp')).toContain(appMain); // test tree → prod
180
+ }
181
+ });
182
+ });
183
+ //# sourceMappingURL=equivalence-repo-scale.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equivalence-repo-scale.test.js","sourceRoot":"","sources":["../../../../src/cli/orchestrate/__tests__/equivalence-repo-scale.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Phase 4 equivalence guardrail: the SHARDED build must equal the
3
+ * SINGLE-PROGRAM build on a committed multi-package fixture — for the FULL
4
+ * `CatalogEquivalence` (function set + intra/cross edges + SCCs) — with the
5
+ * `canonicalize`-style phantom as a named regression case.
6
+ *
7
+ * The fixture (`../__fixtures__/multi-pkg`) is three tiny workspace packages
8
+ * plus a root-level file and an out-of-`src`-tree file:
9
+ * - @fixture/a — `main` calls `@fixture/foundation.canonicalize` (bare
10
+ * workspace specifier → genuine cross-package edge) and
11
+ * `./local.formatLocal` (relative → intra-package edge);
12
+ * `scripts/gen.ts` (OUT of src/) calls foundation too.
13
+ * - @fixture/foundation — `canonicalize` is self-recursive (the leaf-util case).
14
+ * - @fixture/b — ALSO exports `canonicalize`, which pkg-a NEVER imports.
15
+ * A name-only resolver would link pkg-a → b.canonicalize:
16
+ * the phantom trap this gate catches.
17
+ * - root-tool.ts — a ROOT-LEVEL file (no packages/* unit → `:root` shard)
18
+ * whose bare import must link from the root shard.
19
+ *
20
+ * We build the SAME files two ways through the REAL engine pipeline (the shared
21
+ * `createEquivalenceHarness`): single-program → one `buildAndResolveCatalog`
22
+ * over ALL files; sharded → one per shard (emitting boundary calls) merged +
23
+ * linked by `mergeAndResolveShards`. Then `diffCatalogs(sharded, singleProgram)`
24
+ * must report EVERY partition empty. The harness's fixture-driven adapter reuses
25
+ * the SAME engine helpers the linker uses (`resolveSpecifierToPackage` +
26
+ * `buildExportIndex`), so the single-program oracle and the sharded linker agree
27
+ * by construction — and both decline the phantom.
28
+ *
29
+ * ─────────────────────────────────────────────────────────────────────────────
30
+ * SCOPE / WHAT THIS TEST DOES *NOT* COVER — read before trusting it as the gate:
31
+ *
32
+ * This is a FAST PR-gate SANITY check, NOT the authoritative equivalence gate.
33
+ * Because BOTH engines build through the SYNTHETIC text adapter that reuses the
34
+ * production cross-package helpers, they AGREE BY CONSTRUCTION — this test
35
+ * structurally CANNOT model the REAL TypeScript `dist/*.d.ts` resolution, where
36
+ * a `@scope/pkg` import binds to a BUILT, BODILESS declaration file. That is the
37
+ * exact divergence class the exact-engine-under-resolution bug lived in, and
38
+ * this fixture-driven test could never have caught it.
39
+ *
40
+ * The REAL guardrail is the dogfood CI step `graph-equivalence-check` (npm
41
+ * `graph:equivalence:ci`), which builds BOTH catalogs on this real monorepo with
42
+ * the real adapter (real dist/*.d.ts resolution) and ratchets the production
43
+ * divergence against `.config/graph-equivalence-budget.json`. Do NOT mistake a
44
+ * green run here for byte-equivalence on real code.
45
+ */
46
+ export {};
47
+ //# sourceMappingURL=equivalence.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equivalence.test.d.ts","sourceRoot":"","sources":["../../../../src/cli/orchestrate/__tests__/equivalence.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG"}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * Phase 4 equivalence guardrail: the SHARDED build must equal the
3
+ * SINGLE-PROGRAM build on a committed multi-package fixture — for the FULL
4
+ * `CatalogEquivalence` (function set + intra/cross edges + SCCs) — with the
5
+ * `canonicalize`-style phantom as a named regression case.
6
+ *
7
+ * The fixture (`../__fixtures__/multi-pkg`) is three tiny workspace packages
8
+ * plus a root-level file and an out-of-`src`-tree file:
9
+ * - @fixture/a — `main` calls `@fixture/foundation.canonicalize` (bare
10
+ * workspace specifier → genuine cross-package edge) and
11
+ * `./local.formatLocal` (relative → intra-package edge);
12
+ * `scripts/gen.ts` (OUT of src/) calls foundation too.
13
+ * - @fixture/foundation — `canonicalize` is self-recursive (the leaf-util case).
14
+ * - @fixture/b — ALSO exports `canonicalize`, which pkg-a NEVER imports.
15
+ * A name-only resolver would link pkg-a → b.canonicalize:
16
+ * the phantom trap this gate catches.
17
+ * - root-tool.ts — a ROOT-LEVEL file (no packages/* unit → `:root` shard)
18
+ * whose bare import must link from the root shard.
19
+ *
20
+ * We build the SAME files two ways through the REAL engine pipeline (the shared
21
+ * `createEquivalenceHarness`): single-program → one `buildAndResolveCatalog`
22
+ * over ALL files; sharded → one per shard (emitting boundary calls) merged +
23
+ * linked by `mergeAndResolveShards`. Then `diffCatalogs(sharded, singleProgram)`
24
+ * must report EVERY partition empty. The harness's fixture-driven adapter reuses
25
+ * the SAME engine helpers the linker uses (`resolveSpecifierToPackage` +
26
+ * `buildExportIndex`), so the single-program oracle and the sharded linker agree
27
+ * by construction — and both decline the phantom.
28
+ *
29
+ * ─────────────────────────────────────────────────────────────────────────────
30
+ * SCOPE / WHAT THIS TEST DOES *NOT* COVER — read before trusting it as the gate:
31
+ *
32
+ * This is a FAST PR-gate SANITY check, NOT the authoritative equivalence gate.
33
+ * Because BOTH engines build through the SYNTHETIC text adapter that reuses the
34
+ * production cross-package helpers, they AGREE BY CONSTRUCTION — this test
35
+ * structurally CANNOT model the REAL TypeScript `dist/*.d.ts` resolution, where
36
+ * a `@scope/pkg` import binds to a BUILT, BODILESS declaration file. That is the
37
+ * exact divergence class the exact-engine-under-resolution bug lived in, and
38
+ * this fixture-driven test could never have caught it.
39
+ *
40
+ * The REAL guardrail is the dogfood CI step `graph-equivalence-check` (npm
41
+ * `graph:equivalence:ci`), which builds BOTH catalogs on this real monorepo with
42
+ * the real adapter (real dist/*.d.ts resolution) and ratchets the production
43
+ * divergence against `.config/graph-equivalence-budget.json`. Do NOT mistake a
44
+ * green run here for byte-equivalence on real code.
45
+ */
46
+ import { dirname, join } from 'node:path';
47
+ import { fileURLToPath } from 'node:url';
48
+ import { describe, expect, it } from 'vitest';
49
+ import { diffCatalogs, diffCatalogsByEdge, isEquivalent } from '../cross-shard-resolve.js';
50
+ import { createEquivalenceHarness } from './_equivalence-harness.js';
51
+ // ── fixture geography ─────────────────────────────────────────────
52
+ const FIXTURE_ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', '__fixtures__', 'multi-pkg');
53
+ /** The three package roots (absolute) — one shard each. */
54
+ const PKG_DIRS = {
55
+ a: join(FIXTURE_ROOT, 'packages', 'a'),
56
+ foundation: join(FIXTURE_ROOT, 'packages', 'foundation'),
57
+ b: join(FIXTURE_ROOT, 'packages', 'b'),
58
+ };
59
+ /**
60
+ * Every fixture `.ts` source, absolute, grouped by package. pkg-a additionally
61
+ * owns an OUT-OF-`src`-tree file (`scripts/gen.ts`): it lives under packages/a
62
+ * so the partitioner assigns it to the pkg-a shard, but a `src`-only tsconfig
63
+ * would exclude it — the canonical-file-set gap Phase 1 closed.
64
+ */
65
+ const PKG_FILES = {
66
+ a: [
67
+ join(PKG_DIRS.a, 'src', 'main.ts'),
68
+ join(PKG_DIRS.a, 'src', 'local.ts'),
69
+ join(PKG_DIRS.a, 'scripts', 'gen.ts'),
70
+ ],
71
+ foundation: [join(PKG_DIRS.foundation, 'src', 'canonicalize.ts')],
72
+ b: [join(PKG_DIRS.b, 'src', 'util.ts')],
73
+ };
74
+ /**
75
+ * A ROOT-LEVEL file under NO packages/* unit → the synthetic `:root` shard. A
76
+ * bare workspace import from a root file (whose `packageOf` is `<unknown>`) must
77
+ * link to the imported package's unique export, and the `:root` shard's rootDir
78
+ * (which has no package.json) must not crash the manifest index.
79
+ */
80
+ const ROOT_FILES = [join(FIXTURE_ROOT, 'root-tool.ts')];
81
+ const ALL_FILES = [...Object.values(PKG_FILES).flat(), ...ROOT_FILES];
82
+ /**
83
+ * The four shards: one per workspace package + the synthetic `:root` shard
84
+ * (rootDir = FIXTURE_ROOT). The root shard's rootDir has NO package.json, so
85
+ * `buildPackageManifestIndex` skips it — it stays a non-resolvable shard whose
86
+ * files still merge and whose bare imports link against the OTHER packages'
87
+ * manifests. Mirrors `partitionFilesIntoShards` (root shard last).
88
+ */
89
+ const FIXTURE_SHARDS = [
90
+ { id: 'pkg:a', rootDir: PKG_DIRS.a, files: [...PKG_FILES.a] },
91
+ { id: 'pkg:foundation', rootDir: PKG_DIRS.foundation, files: [...PKG_FILES.foundation] },
92
+ { id: 'pkg:b', rootDir: PKG_DIRS.b, files: [...PKG_FILES.b] },
93
+ { id: ':root', rootDir: FIXTURE_ROOT, files: [...ROOT_FILES] },
94
+ ];
95
+ const harness = createEquivalenceHarness({
96
+ fixtureRoot: FIXTURE_ROOT,
97
+ shards: FIXTURE_SHARDS,
98
+ allFiles: ALL_FILES,
99
+ });
100
+ const { buildSingleProgram, buildSharded, bodyHashFor } = harness;
101
+ // ── edge-lookup helpers for the named assertions ──────────────────
102
+ const FOUNDATION_CANON = bodyHashFor('packages/foundation/src/canonicalize.ts', 'canonicalize');
103
+ const B_CANON = bodyHashFor('packages/b/src/util.ts', 'canonicalize');
104
+ const A_LOCAL = bodyHashFor('packages/a/src/local.ts', 'formatLocal');
105
+ function mainEdges(catalog) {
106
+ return catalog.functions.main?.[0]?.calls ?? [];
107
+ }
108
+ function targetsOf(catalog) {
109
+ return mainEdges(catalog).flatMap((e) => [...e.to]);
110
+ }
111
+ /** Every call edge of a single named occurrence (first occurrence of `name`). */
112
+ function edgesOf(catalog, name) {
113
+ return catalog.functions[name]?.[0]?.calls ?? [];
114
+ }
115
+ /** Sorted, deduped set of project-relative file paths present in a catalog. */
116
+ function filesOf(catalog) {
117
+ return [
118
+ ...new Set(Object.values(catalog.functions)
119
+ .flat()
120
+ .map((o) => o.filePath)),
121
+ ].sort();
122
+ }
123
+ // ── the gate ──────────────────────────────────────────────────────
124
+ describe('exact-sharding equivalence guardrail', () => {
125
+ it('sharded build equals single-program build on BOTH intra- and cross-package edges', async () => {
126
+ const singleProgram = await buildSingleProgram();
127
+ const sharded = await buildSharded();
128
+ const diff = diffCatalogsByEdge(sharded, singleProgram);
129
+ // Intra-package edges must already match (Phase 0/Phase 2 invariant)…
130
+ expect(diff.intraMismatches).toEqual([]);
131
+ // …and with semantic linking, cross-package edges must match too: a
132
+ // non-empty crossDifferences is a correctness regression (Phase 4).
133
+ expect(diff.crossDifferences).toEqual([]);
134
+ });
135
+ it('is FULLY equivalent — function set + edges + SCCs all empty (Phase 4 gate)', async () => {
136
+ const singleProgram = await buildSingleProgram();
137
+ const sharded = await buildSharded();
138
+ const eq = diffCatalogs(sharded, singleProgram);
139
+ // Function set is byte-identical (the merge-dedup column fix) …
140
+ expect(eq.functionsOnlyInA).toEqual([]);
141
+ expect(eq.functionsOnlyInB).toEqual([]);
142
+ // … edges match on both partitions …
143
+ expect(eq.intraMismatches).toEqual([]);
144
+ expect(eq.crossDifferences).toEqual([]);
145
+ // … and the SCC membership (cycle-finding driver) matches.
146
+ expect(eq.sccDifferences).toEqual([]);
147
+ expect(isEquivalent(eq)).toBe(true);
148
+ });
149
+ it('builds the two catalogs over the same project-relative file set', async () => {
150
+ const singleProgram = await buildSingleProgram();
151
+ const sharded = await buildSharded();
152
+ expect(filesOf(sharded)).toEqual(filesOf(singleProgram));
153
+ // The set includes the root-level file and the out-of-src-tree file.
154
+ expect(filesOf(sharded)).toContain('root-tool.ts');
155
+ expect(filesOf(sharded)).toContain('packages/a/scripts/gen.ts');
156
+ });
157
+ it('links the ROOT-shard file cross-package edge (rootMain → foundation.canonicalize)', async () => {
158
+ const sharded = await buildSharded();
159
+ const singleProgram = await buildSingleProgram();
160
+ // A root-level file (under no packages/* unit, `:root` shard) must link its
161
+ // bare workspace import to the unique export — the `:root` shard neither
162
+ // crashes the manifest index nor declines a genuine boundary call.
163
+ const rootEdge = edgesOf(sharded, 'rootMain').find((e) => e.to.includes(FOUNDATION_CANON));
164
+ expect(rootEdge?.crossShard).toBe(true);
165
+ expect(rootEdge?.resolution).toBe('semantic');
166
+ // And the single-program oracle resolves the SAME edge (no cross-shard flag).
167
+ expect(edgesOf(singleProgram, 'rootMain').flatMap((e) => [...e.to])).toContain(FOUNDATION_CANON);
168
+ });
169
+ it('links the OUT-OF-src-tree file cross-package edge (genFixtures → foundation.canonicalize)', async () => {
170
+ const sharded = await buildSharded();
171
+ const singleProgram = await buildSingleProgram();
172
+ // packages/a/scripts/gen.ts is in the pkg-a shard but outside src/ — the
173
+ // canonical-file-set inclusion gap. Its cross-package call must link in both.
174
+ const genEdge = edgesOf(sharded, 'genFixtures').find((e) => e.to.includes(FOUNDATION_CANON));
175
+ expect(genEdge?.crossShard).toBe(true);
176
+ expect(genEdge?.resolution).toBe('semantic');
177
+ expect(edgesOf(singleProgram, 'genFixtures').flatMap((e) => [...e.to])).toContain(FOUNDATION_CANON);
178
+ });
179
+ it('keeps the genuine pkg-a → foundation.canonicalize cross-package edge', async () => {
180
+ const sharded = await buildSharded();
181
+ expect(targetsOf(sharded)).toContain(FOUNDATION_CANON);
182
+ // And it is recovered as a semantic cross-shard edge in the sharded build.
183
+ const edge = mainEdges(sharded).find((e) => e.to.includes(FOUNDATION_CANON));
184
+ expect(edge?.crossShard).toBe(true);
185
+ expect(edge?.resolution).toBe('semantic');
186
+ });
187
+ it('NEVER links the phantom pkg-a → b.canonicalize (name-collision trap)', async () => {
188
+ const singleProgram = await buildSingleProgram();
189
+ const sharded = await buildSharded();
190
+ expect(targetsOf(singleProgram)).not.toContain(B_CANON);
191
+ expect(targetsOf(sharded)).not.toContain(B_CANON);
192
+ });
193
+ it('keeps the relative intra-package edge pkg-a main → ./local.formatLocal', async () => {
194
+ const sharded = await buildSharded();
195
+ const singleProgram = await buildSingleProgram();
196
+ expect(targetsOf(sharded)).toContain(A_LOCAL);
197
+ expect(targetsOf(singleProgram)).toContain(A_LOCAL);
198
+ });
199
+ it('preserves the self-recursive foundation.canonicalize edge', async () => {
200
+ const sharded = await buildSharded();
201
+ const selfCalls = sharded.functions.canonicalize?.find((o) => o.filePath === 'packages/foundation/src/canonicalize.ts')?.calls;
202
+ expect(selfCalls?.some((e) => e.to.includes(FOUNDATION_CANON))).toBe(true);
203
+ });
204
+ // ── the gate has teeth (regression-detector guard) ──────────────
205
+ //
206
+ // The assertions above prove the SHIPPING semantic linker agrees with the
207
+ // single-program oracle (crossDifferences empty) and declines the phantom.
208
+ // This pair proves the gate would actually FAIL if the linker regressed — that
209
+ // the empty `crossDifferences` is a real signal, not a vacuous pass. We do NOT
210
+ // revert production code (CLAUDE.md / Phase 4): instead we synthesize the two
211
+ // canonical regressions on a COPY of the real sharded catalog and assert
212
+ // `diffCatalogsByEdge` lands them in `crossDifferences`.
213
+ it('FAILS the gate if the linker degrades to a name-only phantom (b.canonicalize)', async () => {
214
+ const singleProgram = await buildSingleProgram();
215
+ const sharded = await buildSharded();
216
+ // Sanity: the honest sharded build matches the oracle (the gate's green case).
217
+ expect(diffCatalogsByEdge(sharded, singleProgram).crossDifferences).toEqual([]);
218
+ // Simulate the OLD name-only fallback: at main's genuine cross-package edge,
219
+ // swap the target from foundation.canonicalize → b.canonicalize (the phantom
220
+ // a name-only resolver fabricates by matching the globally-unique-ish simple
221
+ // name into a package pkg-a never imported).
222
+ const degraded = rewriteCrossEdgeTarget(sharded, FOUNDATION_CANON, B_CANON);
223
+ expect(targetsOf(degraded)).toContain(B_CANON); // the phantom is now present
224
+ const diff = diffCatalogsByEdge(degraded, singleProgram);
225
+ expect(diff.crossDifferences.length).toBeGreaterThan(0); // gate catches it
226
+ });
227
+ it('FAILS the gate if the linker DROPS the genuine cross-package edge', async () => {
228
+ const singleProgram = await buildSingleProgram();
229
+ const sharded = await buildSharded();
230
+ // The other regression direction: the linker declines an edge the single
231
+ // program resolves (e.g. it stopped following the bare-specifier export
232
+ // link). Clear main's cross-package target → an empty `to` at that site.
233
+ const dropped = rewriteCrossEdgeTarget(sharded, FOUNDATION_CANON, undefined);
234
+ expect(targetsOf(dropped)).not.toContain(FOUNDATION_CANON);
235
+ const diff = diffCatalogsByEdge(dropped, singleProgram);
236
+ expect(diff.crossDifferences.length).toBeGreaterThan(0); // gate catches it
237
+ });
238
+ });
239
+ /**
240
+ * Return a COPY of `catalog` in which every cross-shard edge whose target set
241
+ * contains `from` has it replaced by `to` (or removed when `to === undefined`).
242
+ * Used ONLY by the regression-detector guards to synthesize a degraded linker
243
+ * output without touching production resolution code.
244
+ */
245
+ function rewriteCrossEdgeTarget(catalog, from, to) {
246
+ const functions = {};
247
+ for (const [name, occs] of Object.entries(catalog.functions)) {
248
+ if (!occs)
249
+ continue;
250
+ functions[name] = occs.map((o) => ({
251
+ ...o,
252
+ calls: o.calls.map((e) => e.crossShard && e.to.includes(from)
253
+ ? { ...e, to: to === undefined ? [] : e.to.map((t) => (t === from ? to : t)) }
254
+ : e),
255
+ }));
256
+ }
257
+ return { ...catalog, functions };
258
+ }
259
+ //# sourceMappingURL=equivalence.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equivalence.test.js","sourceRoot":"","sources":["../../../../src/cli/orchestrate/__tests__/equivalence.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Exact-engine boundary recovery (Phase 3, Option A) — the helpers that make
3
+ * the single-program (exact) catalog run the SAME post-merge linker as the
4
+ * sharded engine. Covers: the no-op early returns, the package-root walk
5
+ * (found / nested-ancestor / declines at the project root), per-directory
6
+ * memoization, and the end-to-end recovery path against a real on-disk package.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=exact-boundary-recovery.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exact-boundary-recovery.test.d.ts","sourceRoot":"","sources":["../../../../src/cli/orchestrate/__tests__/exact-boundary-recovery.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}