@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,68 @@
1
+ /**
2
+ * Shared occurrence/edge IDENTITY — the ONE module that owns how call/dependency
3
+ * edges are keyed to their owning occurrence and stitched back onto it.
4
+ *
5
+ * WHY THIS EXISTS (the drift it closes):
6
+ * ADR-0003 mandates edges be keyed by OCCURRENCE — `ownerEdgeKey(bodyHash,
7
+ * filePath)` — not by `bodyHash` alone: two functions with byte-identical
8
+ * bodies in different files (e.g. `stripStrings` duplicated across the language
9
+ * adapters) share a hash, so a hash-only bucket UNIONS their edges, inventing
10
+ * phantom cross-package coupling. The EXACT path complied (its resolver returns
11
+ * an `ownerEdgeKey`-keyed map; `catalog-builder.stitchEdges` reads it the same
12
+ * way). The CROSS-SHARD merge did NOT — it bucketed/stitched by `bc.ownerHash`
13
+ * alone (a second, drifting keying scheme). That drift is the root cause of the
14
+ * F1 ADR-0003 violation.
15
+ *
16
+ * This module is the single home of that identity. Both engines import it; no
17
+ * consumer keys edges by a bare `bodyHash`. The Phase-1 fitness check
18
+ * (`no-bodyhash-keying-outside-identity`) forbids re-deriving an owner-keyed
19
+ * edge map anywhere else, so the drift cannot recur.
20
+ *
21
+ * Pure: no fs, no engine state — both engines and the equivalence harness import
22
+ * the same helpers.
23
+ */
24
+ import { ownerEdgeKey } from '../../owner-key.js';
25
+ export { ownerEdgeKey } from '../../owner-key.js';
26
+ /**
27
+ * Bucket a flat list of edge-bearing items into a `Map<ownerEdgeKey, CallEdge[]>`,
28
+ * keyed via {@link ownerEdgeKey} (NOT by `bodyHash` alone). `keyParts` extracts
29
+ * the owning occurrence's `(bodyHash, filePath)` from each item; `edgeOf`
30
+ * extracts the edge. Append-order within a bucket is preserved (callers sort
31
+ * downstream for determinism). The canonical owner-keyed bucket: every consumer
32
+ * routes through this instead of re-deriving an owner key inline.
33
+ */
34
+ export function bucketEdgesByOwner(items, keyParts, edgeOf) {
35
+ const byOwner = new Map();
36
+ for (const item of items) {
37
+ const { bodyHash, filePath } = keyParts(item);
38
+ const key = ownerEdgeKey(bodyHash, filePath);
39
+ const bucket = byOwner.get(key);
40
+ if (bucket)
41
+ bucket.push(edgeOf(item));
42
+ else
43
+ byOwner.set(key, [edgeOf(item)]);
44
+ }
45
+ return byOwner;
46
+ }
47
+ /**
48
+ * Stitch recovered edges onto each occurrence, keyed by
49
+ * `ownerEdgeKey(o.bodyHash, o.filePath)` so ONLY the owning occurrence receives
50
+ * its edges (body-twins in different files never smear). `combine` decides how an
51
+ * occurrence's existing `calls` and its recovered edges merge (e.g. replace,
52
+ * concatenate, or drop-placeholder-then-concat) and returns the new occurrence —
53
+ * keeping the keying in one place while leaving the per-engine merge policy to
54
+ * the caller. An occurrence with no recovered edges is returned unchanged.
55
+ */
56
+ export function stitchEdgesByOwner(functions, edgesByOwnerKey, combine) {
57
+ const out = Object.create(null);
58
+ for (const [name, occs] of Object.entries(functions)) {
59
+ if (!occs)
60
+ continue;
61
+ out[name] = occs.map((o) => {
62
+ const recovered = edgesByOwnerKey.get(ownerEdgeKey(o.bodyHash, o.filePath));
63
+ return recovered === undefined || recovered.length === 0 ? o : combine(o, recovered);
64
+ });
65
+ }
66
+ return out;
67
+ }
68
+ //# sourceMappingURL=edge-identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge-identity.js","sourceRoot":"","sources":["../../../src/cli/orchestrate/edge-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAIlD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAkB,EAClB,QAA+E,EAC/E,MAA6B;IAE7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,MAAM;YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;;YACjC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAkE,EAClE,eAAyD,EACzD,OAAwF;IAExF,MAAM,GAAG,GAAkD,MAAM,CAAC,MAAM,CAAC,IAAI,CAG5E,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACzB,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC5E,OAAO,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * REAL-REPO equivalence guardrail — the dogfood gate that catches an
3
+ * edge-resolution regression on a genuine multi-package TypeScript monorepo.
4
+ *
5
+ * WHY THIS EXISTS (the gap it closes):
6
+ * The in-test equivalence gate (`__tests__/equivalence*.test.ts`) builds BOTH
7
+ * engines through a SYNTHETIC text adapter that reuses the production
8
+ * cross-package helpers (`resolveSpecifierToPackage` + `buildExportIndex`), so
9
+ * the two engines "agree by construction" — it structurally CANNOT model the
10
+ * real TypeScript `dist/*.d.ts` resolution where the
11
+ * exact-engine-under-resolution bug actually lived. That is false confidence.
12
+ *
13
+ * This guardrail instead builds BOTH catalogs on a REAL repo (default: this
14
+ * one) with the REAL TypeScript adapter — so workspace `@scope/pkg` imports
15
+ * resolve through Node16 to built `dist/*.d.ts`, exactly the divergence class
16
+ * the bug occupied. It then diffs (exact ≡ sharded) via `diffCatalogs` and
17
+ * classifies the residual by OWNER FILE:
18
+ *
19
+ * - functionsOnly{A,B} MUST be 0 (the function sets are byte-equal
20
+ * post-reconciliation) — any non-zero is a hard FAILURE.
21
+ * - TEST/FIXTURE-owned edge divergences are benign (the graph rules skip
22
+ * test files, so they are gate-invisible) — counted separately, never
23
+ * gated.
24
+ * - PRODUCTION edge divergences are the meaningful signal, classified by
25
+ * DIRECTION on the unified model (ADR-0033): phantom (sharded-only),
26
+ * decline (exact-only), conflict (both resolve to different targets). Each
27
+ * direction is compared against its COMMITTED FLOOR; the guardrail FAILS
28
+ * when any direction EXCEEDS its floor (a NEW divergence on the unified
29
+ * model) and PASSES (with a tighten hint) on a decrease. Per-direction
30
+ * gating so a fixed conflict can't mask a new phantom. A ratchet, mirroring
31
+ * the repo's net-new SARIF philosophy. (The both-engine-DECLINE blind spot
32
+ * this differential cannot see is guarded by the pinned-corpus completeness
33
+ * floor in `resolution-completeness-floor.test.ts`.)
34
+ *
35
+ * Engine-layer + language-agnostic: it drives `runGraph` (exact) and
36
+ * `runShardedGraph` (sharded) through the same shard-resolution the production
37
+ * `graph` command uses (`resolveShardsForCwd`), so there is ONE resolver, never
38
+ * a drifting copy. Cold + no-cache on both sides (a fresh oracle every run).
39
+ */
40
+ import type { EdgeDifference } from './cross-shard-resolve.js';
41
+ import type { Shard } from './shard-model.js';
42
+ import type { Catalog, ResolutionMode } from '../../types.js';
43
+ /** A function-set divergence: one engine discovered a function the other did not. */
44
+ export type FunctionSetBreach = readonly string[];
45
+ /**
46
+ * Owner-file classification of an edge divergence. Matches the paths the graph
47
+ * rules skip (so the divergence is gate-invisible): any `__tests__/` or
48
+ * `__fixtures__/` tree segment, or a `*.test.*` / `*.spec.*` filename. Operates
49
+ * on project-relative catalog `filePath`s, posix-normalized.
50
+ */
51
+ export declare function isTestOrFixturePath(filePath: string): boolean;
52
+ /**
53
+ * The DIRECTION of a resolved-edge divergence — which engine resolved the site,
54
+ * once both engines run ONE model (Phase 3 convergence, ADR-0033). Direction no
55
+ * longer encodes "wrongness" (neither engine is the oracle: a sharded-only edge
56
+ * is frequently a REAL edge the single-program type checker under-resolved, e.g.
57
+ * `scope.graph?.rules.getAll()` through an optional chain). It is a DIAGNOSTIC
58
+ * label — "which bound is insufficient" — and each direction is ratcheted to its
59
+ * measured floor so any NEW divergence on the unified model fails, with a
60
+ * documented residual class per direction.
61
+ *
62
+ * - `phantom` — sharded resolved, exact declined (exact-only gap)
63
+ * - `decline` — exact resolved, sharded declined (sharded-only gap)
64
+ * - `conflict` — BOTH resolved, to DIFFERENT targets (a real disambiguation
65
+ * bug: at least one engine picked the wrong same-name occurrence)
66
+ *
67
+ * `conflict` is the load-bearing class — both engines confidently disagree, so
68
+ * one is provably wrong. `phantom`/`decline` are one-sided gaps where the other
69
+ * engine simply has more/less reach.
70
+ */
71
+ export type DivergenceDirection = 'phantom' | 'decline' | 'conflict';
72
+ /** Classify a resolved divergence by which engine(s) resolved it. */
73
+ export declare function divergenceDirection(d: EdgeDifference): DivergenceDirection;
74
+ /**
75
+ * A committed budget: the per-direction ratchet floors for production resolved-
76
+ * edge divergences on the unified model (ADR-0033). Replaces the single
77
+ * `productionResolvedEdgeDivergences` total: after convergence, a flat total can
78
+ * hide a direction flip (a fixed conflict masking a new phantom). Each direction
79
+ * is gated independently; any count EXCEEDING its floor FAILS, a decrease passes
80
+ * with a tighten hint, equal passes.
81
+ */
82
+ export interface EquivalenceBudget {
83
+ /** Accepted sharded-only (exact-declined) production divergences. */
84
+ readonly phantomDivergences: number;
85
+ /** Accepted exact-only (sharded-declined) production divergences. */
86
+ readonly declineDivergences: number;
87
+ /** Accepted both-resolved-differently production divergences (the same-name
88
+ * disambiguation class — a real bug, tracked for follow-up). */
89
+ readonly conflictDivergences: number;
90
+ /**
91
+ * Accepted SCC membership divergences. SCCs are a DOWNSTREAM consequence of the
92
+ * resolved-edge residual (a differing cross-package edge can reshape a
93
+ * component), so on a repo with a non-zero edge residual SCC differences are
94
+ * expected and budgeted, not hard-failed. Same ratchet semantics.
95
+ */
96
+ readonly sccDivergences: number;
97
+ /**
98
+ * Optional human note recorded alongside the numbers (what each residual class
99
+ * is). Ignored by the comparison.
100
+ */
101
+ readonly note?: string;
102
+ }
103
+ /** The classified outcome of one equivalence run. */
104
+ export interface EquivalenceReport {
105
+ /** functionsOnlyInA (exact-only) — MUST be empty (a hard failure if not). */
106
+ readonly functionsOnlyInExact: FunctionSetBreach;
107
+ /** functionsOnlyInB (sharded-only) — MUST be empty (a hard failure if not). */
108
+ readonly functionsOnlyInSharded: FunctionSetBreach;
109
+ /** SCC membership divergences (budgeted — a downstream consequence of edges). */
110
+ readonly sccDifferences: readonly string[];
111
+ /** Every differing edge key, owner-attributed (resolved + structural). */
112
+ readonly allEdgeDifferences: readonly EdgeDifference[];
113
+ /**
114
+ * RESOLVED-edge divergences owned by a PRODUCTION file — the gated signal
115
+ * (dropped/added real edges in non-test code). The directional partitions
116
+ * below sum to this.
117
+ */
118
+ readonly productionResolvedDifferences: readonly EdgeDifference[];
119
+ /** Production divergences where SHARDED resolved but EXACT declined. */
120
+ readonly productionPhantom: readonly EdgeDifference[];
121
+ /** Production divergences where EXACT resolved but SHARDED declined. */
122
+ readonly productionDecline: readonly EdgeDifference[];
123
+ /** Production divergences where BOTH resolved, to DIFFERENT targets. */
124
+ readonly productionConflict: readonly EdgeDifference[];
125
+ /**
126
+ * RESOLVED-edge divergences owned by a TEST/FIXTURE file — benign
127
+ * (gate-invisible: the graph rules skip test files). Reported, not gated.
128
+ */
129
+ readonly testResolvedDifferences: readonly EdgeDifference[];
130
+ /**
131
+ * STRUCTURAL divergences — a call site recorded as UNRESOLVED (`to: []`) on one
132
+ * engine and absent on the other. Neither resolved a target, so this does not
133
+ * change the resolved call graph; reported for transparency, never gated.
134
+ */
135
+ readonly structuralDifferences: readonly EdgeDifference[];
136
+ /** Catalog function counts, for the report header. */
137
+ readonly exactFunctionCount: number;
138
+ readonly shardedFunctionCount: number;
139
+ }
140
+ /** Build the exact + sharded catalogs on `cwd`, diff, and classify by owner file. */
141
+ export interface BuildEquivalenceInput {
142
+ /** Target repo root (default: process.cwd()). */
143
+ readonly cwd: string;
144
+ /**
145
+ * The resolved shard set for `cwd` (≥2 shards). Resolved by the caller via the
146
+ * production `resolveShardsForCwd` so the guardrail shards the project the
147
+ * SAME way a real `graph` run does. An empty/≤1 set is a usage error (the repo
148
+ * must be shardable for the comparison to be meaningful).
149
+ */
150
+ readonly shards: readonly Shard[];
151
+ /** CLI entry script for spawning shard workers (`process.argv[1]`). */
152
+ readonly cliScript: string;
153
+ /** Exact single-program build (the oracle). */
154
+ readonly buildExact: (cwd: string) => Promise<Catalog | null>;
155
+ /** Sharded build. */
156
+ readonly buildSharded: (input: {
157
+ shards: readonly Shard[];
158
+ projectRoot: string;
159
+ cliScript: string;
160
+ resolutionMode: ResolutionMode;
161
+ }) => Promise<Catalog>;
162
+ }
163
+ /**
164
+ * Run the real-repo equivalence comparison and classify the residual. Diffs as
165
+ * `diffCatalogs(exact, sharded)` — so `functionsOnlyInA` is exact-only and
166
+ * `functionsOnlyInB` is sharded-only — then partitions the edge differences by
167
+ * owner file (production vs test/fixture).
168
+ *
169
+ * @throws {Error} If the exact (single-program) build produces no catalog — the
170
+ * target repo must contain analyzable source for the comparison to be meaningful.
171
+ */
172
+ export declare function buildEquivalenceReport(input: BuildEquivalenceInput): Promise<EquivalenceReport>;
173
+ /**
174
+ * Resolved CROSS-PACKAGE edge count in a catalog — the completeness metric for
175
+ * the pinned-corpus floor (ADR-0033). A `crossShard` edge with a non-empty
176
+ * target set is a recovered cross-package call; declined boundary calls are
177
+ * PRUNED from the catalog (they leave only the intra placeholder), so this count
178
+ * IS the resolved numerator. On a PINNED corpus (fixed call-site denominator) a
179
+ * non-decreasing count is equivalent to a non-decreasing resolution RATE — it
180
+ * catches a both-engine completeness regression (one that drops edges in BOTH
181
+ * engines, so the differential gate above stays silent).
182
+ */
183
+ export declare function countResolvedCrossPackageEdges(catalog: Catalog): number;
184
+ /** The verdict of comparing a report against a budget. */
185
+ export interface EquivalenceVerdict {
186
+ /** True ⇒ the guardrail FAILS (non-zero exit). */
187
+ readonly failed: boolean;
188
+ /** True ⇒ a function-set breach (a hard failure regardless of budget). */
189
+ readonly functionSetBreached: boolean;
190
+ /** Observed sharded-only (exact-declined) production divergence count. */
191
+ readonly phantomCount: number;
192
+ /** Observed exact-only (sharded-declined) production divergence count. */
193
+ readonly declineCount: number;
194
+ /** Observed both-resolved-differently production divergence count. */
195
+ readonly conflictCount: number;
196
+ /** Total observed production resolved-edge divergence count (sum of the three). */
197
+ readonly productionCount: number;
198
+ /** Observed SCC divergence count. */
199
+ readonly sccCount: number;
200
+ /** The budget's accepted SCC count. */
201
+ readonly sccBudget: number;
202
+ /** Human-readable lines for the CLI output (always populated). */
203
+ readonly lines: readonly string[];
204
+ }
205
+ /**
206
+ * Compare a report against the committed budget and produce the gate verdict +
207
+ * human-readable lines. After Phase 3 convergence (ADR-0033) the gate is the
208
+ * DIRECTIONAL soundness invariant: any NEW divergence on the unified model fails,
209
+ * each direction ratcheted to its measured floor.
210
+ *
211
+ * - Any function-set breach (functionsOnly{Exact,Sharded}) ⇒ HARD FAIL: the
212
+ * function SET must be byte-equal post-reconciliation (a discovery/merge
213
+ * regression, never an edge gap).
214
+ * - phantom / decline / conflict production divergences each > their floor ⇒
215
+ * FAIL, printing the offending owner edges for the breached direction(s).
216
+ * Gating per-direction (not a flat total) so a fixed conflict can't mask a
217
+ * new phantom.
218
+ * - SCC divergences > budget ⇒ FAIL (a downstream consequence of the edge
219
+ * residual — budgeted, not hard-failed, since the real-repo residual is
220
+ * non-zero).
221
+ * - any metric < its floor ⇒ PASS, with a hint to tighten that number.
222
+ * - == floor ⇒ PASS.
223
+ *
224
+ * Structural (unresolved-vs-absent) divergences are reported but never gated.
225
+ */
226
+ export declare function judgeEquivalence(report: EquivalenceReport, budget: EquivalenceBudget): EquivalenceVerdict;
227
+ //# sourceMappingURL=equivalence-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equivalence-check.d.ts","sourceRoot":"","sources":["../../../src/cli/orchestrate/equivalence-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,264 @@
1
+ /**
2
+ * REAL-REPO equivalence guardrail — the dogfood gate that catches an
3
+ * edge-resolution regression on a genuine multi-package TypeScript monorepo.
4
+ *
5
+ * WHY THIS EXISTS (the gap it closes):
6
+ * The in-test equivalence gate (`__tests__/equivalence*.test.ts`) builds BOTH
7
+ * engines through a SYNTHETIC text adapter that reuses the production
8
+ * cross-package helpers (`resolveSpecifierToPackage` + `buildExportIndex`), so
9
+ * the two engines "agree by construction" — it structurally CANNOT model the
10
+ * real TypeScript `dist/*.d.ts` resolution where the
11
+ * exact-engine-under-resolution bug actually lived. That is false confidence.
12
+ *
13
+ * This guardrail instead builds BOTH catalogs on a REAL repo (default: this
14
+ * one) with the REAL TypeScript adapter — so workspace `@scope/pkg` imports
15
+ * resolve through Node16 to built `dist/*.d.ts`, exactly the divergence class
16
+ * the bug occupied. It then diffs (exact ≡ sharded) via `diffCatalogs` and
17
+ * classifies the residual by OWNER FILE:
18
+ *
19
+ * - functionsOnly{A,B} MUST be 0 (the function sets are byte-equal
20
+ * post-reconciliation) — any non-zero is a hard FAILURE.
21
+ * - TEST/FIXTURE-owned edge divergences are benign (the graph rules skip
22
+ * test files, so they are gate-invisible) — counted separately, never
23
+ * gated.
24
+ * - PRODUCTION edge divergences are the meaningful signal, classified by
25
+ * DIRECTION on the unified model (ADR-0033): phantom (sharded-only),
26
+ * decline (exact-only), conflict (both resolve to different targets). Each
27
+ * direction is compared against its COMMITTED FLOOR; the guardrail FAILS
28
+ * when any direction EXCEEDS its floor (a NEW divergence on the unified
29
+ * model) and PASSES (with a tighten hint) on a decrease. Per-direction
30
+ * gating so a fixed conflict can't mask a new phantom. A ratchet, mirroring
31
+ * the repo's net-new SARIF philosophy. (The both-engine-DECLINE blind spot
32
+ * this differential cannot see is guarded by the pinned-corpus completeness
33
+ * floor in `resolution-completeness-floor.test.ts`.)
34
+ *
35
+ * Engine-layer + language-agnostic: it drives `runGraph` (exact) and
36
+ * `runShardedGraph` (sharded) through the same shard-resolution the production
37
+ * `graph` command uses (`resolveShardsForCwd`), so there is ONE resolver, never
38
+ * a drifting copy. Cold + no-cache on both sides (a fresh oracle every run).
39
+ */
40
+ import { diffCatalogs } from './cross-shard-resolve.js';
41
+ /**
42
+ * Owner-file classification of an edge divergence. Matches the paths the graph
43
+ * rules skip (so the divergence is gate-invisible): any `__tests__/` or
44
+ * `__fixtures__/` tree segment, or a `*.test.*` / `*.spec.*` filename. Operates
45
+ * on project-relative catalog `filePath`s, posix-normalized.
46
+ */
47
+ export function isTestOrFixturePath(filePath) {
48
+ const p = filePath.replaceAll('\\', '/');
49
+ return (p.includes('/__tests__/') ||
50
+ p.startsWith('__tests__/') ||
51
+ p.includes('/__fixtures__/') ||
52
+ p.startsWith('__fixtures__/') ||
53
+ /(?:^|\/)[^/]+\.(?:test|spec)\.[A-Za-z0-9]+$/.test(p));
54
+ }
55
+ /**
56
+ * A RESOLVED-edge divergence is the meaningful signal: a call site where the two
57
+ * engines disagree on a NON-EMPTY resolved target set (one resolved it, the
58
+ * other didn't, or they resolved it differently). A call site that is UNRESOLVED
59
+ * (`to: []`) on one side and simply absent on the other contributes nothing to
60
+ * the resolved call graph — both engines agree there is no target — so it is
61
+ * NOT a resolved divergence (it is reported separately as a structural/
62
+ * unresolved divergence, not gated). This is what isolates the dropped/added
63
+ * REAL cross-package edges the guardrail exists to catch.
64
+ */
65
+ function isResolvedDivergence(d) {
66
+ return d.toA !== d.toB && (d.toA.length > 0 || d.toB.length > 0);
67
+ }
68
+ /** Classify a resolved divergence by which engine(s) resolved it. */
69
+ export function divergenceDirection(d) {
70
+ if (d.toA.length === 0)
71
+ return 'phantom'; // exact empty, sharded resolved
72
+ if (d.toB.length === 0)
73
+ return 'decline'; // sharded empty, exact resolved
74
+ return 'conflict'; // both resolved, different targets
75
+ }
76
+ function functionCount(catalog) {
77
+ let n = 0;
78
+ for (const occs of Object.values(catalog.functions))
79
+ n += occs?.length ?? 0;
80
+ return n;
81
+ }
82
+ /**
83
+ * Run the real-repo equivalence comparison and classify the residual. Diffs as
84
+ * `diffCatalogs(exact, sharded)` — so `functionsOnlyInA` is exact-only and
85
+ * `functionsOnlyInB` is sharded-only — then partitions the edge differences by
86
+ * owner file (production vs test/fixture).
87
+ *
88
+ * @throws {Error} If the exact (single-program) build produces no catalog — the
89
+ * target repo must contain analyzable source for the comparison to be meaningful.
90
+ */
91
+ export async function buildEquivalenceReport(input) {
92
+ const exact = await input.buildExact(input.cwd);
93
+ if (exact === null) {
94
+ throw new Error('Equivalence check: the exact (single-program) build produced no catalog ' +
95
+ '(no parseable input). The target repo must contain analyzable source.');
96
+ }
97
+ const sharded = await input.buildSharded({
98
+ shards: input.shards,
99
+ projectRoot: input.cwd,
100
+ cliScript: input.cliScript,
101
+ resolutionMode: 'exact',
102
+ });
103
+ const eq = diffCatalogs(exact, sharded);
104
+ const resolved = eq.edgeDifferences.filter(isResolvedDivergence);
105
+ const structuralDifferences = eq.edgeDifferences.filter((d) => !isResolvedDivergence(d));
106
+ const productionResolvedDifferences = resolved.filter((d) => !isTestOrFixturePath(d.ownerFilePath));
107
+ const testResolvedDifferences = resolved.filter((d) => isTestOrFixturePath(d.ownerFilePath));
108
+ const byDirection = (dir) => productionResolvedDifferences.filter((d) => divergenceDirection(d) === dir);
109
+ return {
110
+ functionsOnlyInExact: eq.functionsOnlyInA,
111
+ functionsOnlyInSharded: eq.functionsOnlyInB,
112
+ sccDifferences: eq.sccDifferences,
113
+ allEdgeDifferences: eq.edgeDifferences,
114
+ productionResolvedDifferences,
115
+ productionPhantom: byDirection('phantom'),
116
+ productionDecline: byDirection('decline'),
117
+ productionConflict: byDirection('conflict'),
118
+ testResolvedDifferences,
119
+ structuralDifferences,
120
+ exactFunctionCount: functionCount(exact),
121
+ shardedFunctionCount: functionCount(sharded),
122
+ };
123
+ }
124
+ /**
125
+ * Resolved CROSS-PACKAGE edge count in a catalog — the completeness metric for
126
+ * the pinned-corpus floor (ADR-0033). A `crossShard` edge with a non-empty
127
+ * target set is a recovered cross-package call; declined boundary calls are
128
+ * PRUNED from the catalog (they leave only the intra placeholder), so this count
129
+ * IS the resolved numerator. On a PINNED corpus (fixed call-site denominator) a
130
+ * non-decreasing count is equivalent to a non-decreasing resolution RATE — it
131
+ * catches a both-engine completeness regression (one that drops edges in BOTH
132
+ * engines, so the differential gate above stays silent).
133
+ */
134
+ export function countResolvedCrossPackageEdges(catalog) {
135
+ let n = 0;
136
+ for (const occs of Object.values(catalog.functions)) {
137
+ for (const o of occs ?? []) {
138
+ for (const e of o.calls) {
139
+ if (e.crossShard === true && e.to.length > 0)
140
+ n++;
141
+ }
142
+ }
143
+ }
144
+ return n;
145
+ }
146
+ /**
147
+ * Compare a report against the committed budget and produce the gate verdict +
148
+ * human-readable lines. After Phase 3 convergence (ADR-0033) the gate is the
149
+ * DIRECTIONAL soundness invariant: any NEW divergence on the unified model fails,
150
+ * each direction ratcheted to its measured floor.
151
+ *
152
+ * - Any function-set breach (functionsOnly{Exact,Sharded}) ⇒ HARD FAIL: the
153
+ * function SET must be byte-equal post-reconciliation (a discovery/merge
154
+ * regression, never an edge gap).
155
+ * - phantom / decline / conflict production divergences each > their floor ⇒
156
+ * FAIL, printing the offending owner edges for the breached direction(s).
157
+ * Gating per-direction (not a flat total) so a fixed conflict can't mask a
158
+ * new phantom.
159
+ * - SCC divergences > budget ⇒ FAIL (a downstream consequence of the edge
160
+ * residual — budgeted, not hard-failed, since the real-repo residual is
161
+ * non-zero).
162
+ * - any metric < its floor ⇒ PASS, with a hint to tighten that number.
163
+ * - == floor ⇒ PASS.
164
+ *
165
+ * Structural (unresolved-vs-absent) divergences are reported but never gated.
166
+ */
167
+ export function judgeEquivalence(report, budget) {
168
+ const lines = [];
169
+ const phantomCount = report.productionPhantom.length;
170
+ const declineCount = report.productionDecline.length;
171
+ const conflictCount = report.productionConflict.length;
172
+ const productionCount = report.productionResolvedDifferences.length;
173
+ const sccCount = report.sccDifferences.length;
174
+ const sccBudget = budget.sccDivergences;
175
+ const functionSetBreached = report.functionsOnlyInExact.length > 0 || report.functionsOnlyInSharded.length > 0;
176
+ lines.push(`Graph engine equivalence (exact ≡ sharded) on the real repo:`, ` functions: exact=${String(report.exactFunctionCount)} sharded=${String(report.shardedFunctionCount)}`, ` functionsOnlyInExact=${String(report.functionsOnlyInExact.length)} ` +
177
+ `functionsOnlyInSharded=${String(report.functionsOnlyInSharded.length)}`, ` production resolved-edge divergences (total=${String(productionCount)}) by direction:`, ` phantom (sharded-only): ${String(phantomCount)} (budget ${String(budget.phantomDivergences)})`, ` decline (exact-only): ${String(declineCount)} (budget ${String(budget.declineDivergences)})`, ` conflict (both differ): ${String(conflictCount)} (budget ${String(budget.conflictDivergences)})`, ` test/fixture resolved divergences: ${String(report.testResolvedDifferences.length)} (benign)`, ` scc divergences: ${String(sccCount)} (budget ${String(sccBudget)})`, ` structural (unresolved-vs-absent) divergences: ${String(report.structuralDifferences.length)} (informational)`);
178
+ if (functionSetBreached) {
179
+ lines.push(` FAIL: function-set divergence — the two engines disagree on the FUNCTION SET.`, ` This MUST be 0 (a discovery/merge regression, not an edge gap).`);
180
+ appendSample(lines, 'exact-only function', report.functionsOnlyInExact);
181
+ appendSample(lines, 'sharded-only function', report.functionsOnlyInSharded);
182
+ }
183
+ const directions = [
184
+ {
185
+ label: 'phantom (sharded-only)',
186
+ key: 'phantomDivergences',
187
+ count: phantomCount,
188
+ budget: budget.phantomDivergences,
189
+ diffs: report.productionPhantom,
190
+ },
191
+ {
192
+ label: 'decline (exact-only)',
193
+ key: 'declineDivergences',
194
+ count: declineCount,
195
+ budget: budget.declineDivergences,
196
+ diffs: report.productionDecline,
197
+ },
198
+ {
199
+ label: 'conflict (both differ)',
200
+ key: 'conflictDivergences',
201
+ count: conflictCount,
202
+ budget: budget.conflictDivergences,
203
+ diffs: report.productionConflict,
204
+ },
205
+ ];
206
+ let directionBreached = false;
207
+ for (const d of directions) {
208
+ judgeMetric(lines, {
209
+ label: `${d.label} divergence`,
210
+ key: d.key,
211
+ count: d.count,
212
+ budget: d.budget,
213
+ });
214
+ if (d.count > d.budget) {
215
+ directionBreached = true;
216
+ lines.push(` NEW ${d.label} edges (owner file:line exact=[..] sharded=[..]):`);
217
+ for (const diff of d.diffs) {
218
+ lines.push(` ${diff.ownerFilePath}:${String(diff.line)}:${String(diff.column)} ` +
219
+ `exact=[${diff.toA}] sharded=[${diff.toB}]`);
220
+ }
221
+ }
222
+ }
223
+ const sccOverBudget = sccCount > sccBudget;
224
+ judgeMetric(lines, {
225
+ label: 'SCC divergence',
226
+ key: 'sccDivergences',
227
+ count: sccCount,
228
+ budget: sccBudget,
229
+ });
230
+ const failed = functionSetBreached || directionBreached || sccOverBudget;
231
+ lines.push(failed ? ` RESULT: FAIL` : ` RESULT: PASS`);
232
+ return {
233
+ failed,
234
+ functionSetBreached,
235
+ phantomCount,
236
+ declineCount,
237
+ conflictCount,
238
+ productionCount,
239
+ sccCount,
240
+ sccBudget,
241
+ lines,
242
+ };
243
+ }
244
+ /** Emit the PASS/FAIL/tighten line for one budgeted metric. */
245
+ function judgeMetric(lines, m) {
246
+ if (m.count > m.budget) {
247
+ lines.push(` FAIL: ${m.label} ${String(m.count)} EXCEEDS budget ${String(m.budget)} (+${String(m.count - m.budget)}).`);
248
+ }
249
+ else if (m.count < m.budget) {
250
+ lines.push(` PASS: ${m.label} ${String(m.count)} is BELOW budget ${String(m.budget)}; ` +
251
+ `tighten the ratchet: set ${m.key}=${String(m.count)} in the budget JSON.`);
252
+ }
253
+ else {
254
+ lines.push(` PASS: ${m.label} matches budget (${String(m.budget)}).`);
255
+ }
256
+ }
257
+ /** Append up to 5 sample identities of a breach list (keeps output bounded). */
258
+ function appendSample(lines, label, ids) {
259
+ for (const id of ids.slice(0, 5))
260
+ lines.push(` ${label}: ${id}`);
261
+ if (ids.length > 5)
262
+ lines.push(` … and ${String(ids.length - 5)} more ${label}(s)`);
263
+ }
264
+ //# sourceMappingURL=equivalence-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"equivalence-check.js","sourceRoot":"","sources":["../../../src/cli/orchestrate/equivalence-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Exact-engine boundary recovery (Phase 3, Option A — "exact = the 1-shard case").
3
+ *
4
+ * The single-program (exact) catalog IS the whole/merged catalog, so the cross-
5
+ * package call sites its type-checker-driven inline pass captures inconsistently
6
+ * (it only fires where `getSymbolAtLocation` succeeds and the reference kind
7
+ * dispatches) are recovered by running the SAME post-merge linker the sharded
8
+ * engine runs — `resolveCrossBoundaryCalls` — over the syntactic boundary calls
9
+ * the exact build emitted. The extractor already skips sites resolved inline, so
10
+ * a recovered edge never double-counts. This is what converges the two engines.
11
+ */
12
+ import type { Catalog, CrossBoundaryCall } from '../../types.js';
13
+ /**
14
+ * Link the syntactic boundary calls the exact build emitted against its own
15
+ * (whole-program) catalog via the shared cross-shard linker. No-op when nothing
16
+ * was emitted (e.g. an incremental rebuild that touched no cross-package site).
17
+ */
18
+ export declare function recoverExactBoundaryEdges(built: {
19
+ readonly catalog: Catalog;
20
+ readonly boundaryCalls?: readonly CrossBoundaryCall[];
21
+ }, files: readonly string[], projectRoot: string): Catalog;
22
+ /**
23
+ * The distinct workspace package ROOTS (absolute) the source files belong to —
24
+ * each file's nearest ancestor dir containing a `package.json`, up to the project
25
+ * root. Feeds `buildPackageManifestIndexFromRoots` so the exact engine resolves a
26
+ * `@scope/pkg` specifier to its package group exactly as the sharded engine does
27
+ * (which derives the same set from its `Shard[]`). Memoized per directory.
28
+ */
29
+ export declare function derivePackageRoots(files: readonly string[], projectRoot: string): string[];
30
+ /** Nearest ancestor dir of `startDir` (inclusive) containing a `package.json`,
31
+ * up to `projectRoot`; `null` if none. */
32
+ export declare function findPackageRoot(startDir: string, projectRoot: string): string | null;
33
+ //# sourceMappingURL=exact-boundary-recovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exact-boundary-recovery.d.ts","sourceRoot":"","sources":["../../../src/cli/orchestrate/exact-boundary-recovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEjE;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE;IACL,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACvD,EACD,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,WAAW,EAAE,MAAM,GAClB,OAAO,CAOT;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAa1F;AAED;2CAC2C;AAC3C,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQpF"}