@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,153 @@
1
+ /**
2
+ * `graph-shard-worker` — the per-shard build subprocess entry
3
+ * (`executeShardWorker`). It reads a `ShardWorkerSpec` JSON file, runs
4
+ * the build over the shard's files via the scope's language adapter, and
5
+ * writes a `ShardBuildResult` JSON to stdout, exiting 0. A bad spec path
6
+ * (or any build error) is attributed to the shard: stderr names it and
7
+ * the exit code is 1.
8
+ */
9
+ import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
10
+ import { tmpdir } from 'node:os';
11
+ import { join } from 'node:path';
12
+ import { enterScope, LanguageRegistry } from '@opensip-cli/core';
13
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
14
+ import { makeGraphTestScope } from '../../__tests__/test-utils/with-graph-scope.js';
15
+ import { currentAdapterRegistry } from '../../lang-adapter/registry.js';
16
+ import { executeShardWorker } from '../shard-worker.js';
17
+ function fakeAdapter(id = 'typescript', fileExtension = '.ts') {
18
+ return {
19
+ id,
20
+ fileExtensions: [fileExtension],
21
+ displayName: 'Fake',
22
+ discoverFiles: () => ({
23
+ projectDirAbs: '/unused',
24
+ files: [],
25
+ configPathAbs: undefined,
26
+ compilerOptions: undefined,
27
+ }),
28
+ parseProject: () => ({ project: { dummy: true }, parseErrors: [] }),
29
+ walkProject: () => ({
30
+ occurrences: {
31
+ fn: [
32
+ {
33
+ bodyHash: 'h1',
34
+ simpleName: 'fn',
35
+ qualifiedName: `pkg/a.${id}.fn`,
36
+ filePath: `pkg/a${fileExtension}`,
37
+ line: 1,
38
+ column: 0,
39
+ endLine: 2,
40
+ kind: 'function-declaration',
41
+ params: [],
42
+ returnType: null,
43
+ enclosingClass: null,
44
+ decorators: [],
45
+ visibility: 'exported',
46
+ inTestFile: false,
47
+ definedInGenerated: false,
48
+ calls: [],
49
+ },
50
+ ],
51
+ },
52
+ callSites: [],
53
+ parseErrors: [],
54
+ }),
55
+ resolveCallSites: () => ({
56
+ edgesByOwner: new Map([['h1', []]]),
57
+ stats: {
58
+ totalCallSites: 0,
59
+ resolvedHigh: 0,
60
+ resolvedMedium: 0,
61
+ resolvedLow: 0,
62
+ unresolved: 0,
63
+ },
64
+ }),
65
+ cacheKey: () => `fake-shard-v1:${id}`,
66
+ };
67
+ }
68
+ function mockCli() {
69
+ const setExitCode = vi.fn();
70
+ return {
71
+ cli: {
72
+ setExitCode,
73
+ scope: { languages: new LanguageRegistry() },
74
+ },
75
+ setExitCode,
76
+ };
77
+ }
78
+ let dir;
79
+ let stdoutSpy;
80
+ let stderrSpy;
81
+ let stdout = '';
82
+ let stderr = '';
83
+ beforeEach(() => {
84
+ enterScope(makeGraphTestScope());
85
+ dir = mkdtempSync(join(tmpdir(), 'shard-worker-'));
86
+ stdout = '';
87
+ stderr = '';
88
+ stdoutSpy = vi.spyOn(process.stdout, 'write').mockImplementation((c) => {
89
+ stdout += typeof c === 'string' ? c : c.toString();
90
+ return true;
91
+ });
92
+ stderrSpy = vi.spyOn(process.stderr, 'write').mockImplementation((c) => {
93
+ stderr += typeof c === 'string' ? c : c.toString();
94
+ return true;
95
+ });
96
+ });
97
+ afterEach(() => {
98
+ currentAdapterRegistry().clear();
99
+ stdoutSpy.mockRestore();
100
+ stderrSpy.mockRestore();
101
+ rmSync(dir, { recursive: true, force: true });
102
+ });
103
+ describe('executeShardWorker', () => {
104
+ it('builds the shard and emits a ShardBuildResult JSON on stdout, exit 0', async () => {
105
+ currentAdapterRegistry().register(fakeAdapter());
106
+ const specPath = join(dir, 'spec.json');
107
+ const spec = {
108
+ shard: { id: 'pkg:a', rootDir: dir, files: ['pkg/a.ts'] },
109
+ projectRoot: dir,
110
+ resolutionMode: 'exact',
111
+ };
112
+ writeFileSync(specPath, JSON.stringify(spec), 'utf8');
113
+ const { cli, setExitCode } = mockCli();
114
+ await executeShardWorker(specPath, cli);
115
+ expect(setExitCode).toHaveBeenCalledWith(0);
116
+ const result = JSON.parse(stdout);
117
+ expect(result.shardId).toBe('pkg:a');
118
+ expect(result.fragment.language).toBe('typescript');
119
+ expect(result.fragment.functions.fn).toHaveLength(1);
120
+ expect(result.fingerprint).toContain('pkg/a.ts');
121
+ expect(result.boundaryCalls).toEqual([]);
122
+ expect(result.parseErrors).toEqual([]);
123
+ });
124
+ it('honors the explicit language in the shard spec when selecting an adapter', async () => {
125
+ currentAdapterRegistry().register(fakeAdapter('typescript', '.ts'));
126
+ currentAdapterRegistry().register(fakeAdapter('python', '.py'));
127
+ const specPath = join(dir, 'spec.json');
128
+ const spec = {
129
+ shard: { id: 'pkg:a', rootDir: dir, files: ['pkg/a.py'] },
130
+ projectRoot: dir,
131
+ language: 'python',
132
+ resolutionMode: 'exact',
133
+ };
134
+ writeFileSync(specPath, JSON.stringify(spec), 'utf8');
135
+ const { cli, setExitCode } = mockCli();
136
+ await executeShardWorker(specPath, cli);
137
+ expect(setExitCode).toHaveBeenCalledWith(0);
138
+ const result = JSON.parse(stdout);
139
+ expect(result.fragment.language).toBe('python');
140
+ expect(result.fragment.cacheKey).toContain('python');
141
+ expect(result.fingerprint).toContain('pkg/a.py');
142
+ });
143
+ it('attributes a read/parse failure to the shard: stderr names it, exit 1', async () => {
144
+ currentAdapterRegistry().register(fakeAdapter());
145
+ // Spec file does not exist → readFileSync throws inside the worker.
146
+ const { cli, setExitCode } = mockCli();
147
+ await executeShardWorker(join(dir, 'missing.json'), cli);
148
+ expect(setExitCode).toHaveBeenCalledWith(1);
149
+ expect(stderr).toContain('graph-shard-worker');
150
+ expect(stdout).toBe('');
151
+ });
152
+ });
153
+ //# sourceMappingURL=shard-worker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shard-worker.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/shard-worker.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAqB,MAAM,QAAQ,CAAC;AAE5F,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAYxD,SAAS,WAAW,CAAC,EAAE,GAAG,YAAY,EAAE,aAAa,GAAG,KAAK;IAC3D,OAAO;QACL,EAAE;QACF,cAAc,EAAE,CAAC,aAAa,CAAC;QAC/B,WAAW,EAAE,MAAM;QACnB,aAAa,EAAE,GAAmB,EAAE,CAAC,CAAC;YACpC,aAAa,EAAE,SAAS;YACxB,KAAK,EAAE,EAAE;YACT,aAAa,EAAE,SAAS;YACxB,eAAe,EAAE,SAAS;SAC3B,CAAC;QACF,YAAY,EAAE,GAAgB,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;QAChF,WAAW,EAAE,GAAe,EAAE,CAAC,CAAC;YAC9B,WAAW,EAAE;gBACX,EAAE,EAAE;oBACF;wBACE,QAAQ,EAAE,IAAI;wBACd,UAAU,EAAE,IAAI;wBAChB,aAAa,EAAE,SAAS,EAAE,KAAK;wBAC/B,QAAQ,EAAE,QAAQ,aAAa,EAAE;wBACjC,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,CAAC;wBACT,OAAO,EAAE,CAAC;wBACV,IAAI,EAAE,sBAAsB;wBAC5B,MAAM,EAAE,EAAE;wBACV,UAAU,EAAE,IAAI;wBAChB,cAAc,EAAE,IAAI;wBACpB,UAAU,EAAE,EAAE;wBACd,UAAU,EAAE,UAAU;wBACtB,UAAU,EAAE,KAAK;wBACjB,kBAAkB,EAAE,KAAK;wBACzB,KAAK,EAAE,EAAE;qBACV;iBACF;aACF;YACD,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,EAAE;SAChB,CAAC;QACF,gBAAgB,EAAE,GAAkB,EAAE,CAAC,CAAC;YACtC,YAAY,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;YACnC,KAAK,EAAE;gBACL,cAAc,EAAE,CAAC;gBACjB,YAAY,EAAE,CAAC;gBACf,cAAc,EAAE,CAAC;gBACjB,WAAW,EAAE,CAAC;gBACd,UAAU,EAAE,CAAC;aACd;SACF,CAAC;QACF,QAAQ,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE,EAAE;KACtC,CAAC;AACJ,CAAC;AAED,SAAS,OAAO;IACd,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAC5B,OAAO;QACL,GAAG,EAAE;YACH,WAAW;YACX,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,gBAAgB,EAAE,EAAE;SAChB;QAC9B,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,IAAI,GAAW,CAAC;AAChB,IAAI,SAAoD,CAAC;AACzD,IAAI,SAAoD,CAAC;AACzD,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,IAAI,MAAM,GAAG,EAAE,CAAC;AAEhB,UAAU,CAAC,GAAG,EAAE;IACd,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACjC,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;IACnD,MAAM,GAAG,EAAE,CAAC;IACZ,MAAM,GAAG,EAAE,CAAC;IACZ,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAsB,EAAE,EAAE;QAC1F,MAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,SAAS,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAsB,EAAE,EAAE;QAC1F,MAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,sBAAsB,EAAE,CAAC,KAAK,EAAE,CAAC;IACjC,SAAS,CAAC,WAAW,EAAE,CAAC;IACxB,SAAS,CAAC,WAAW,EAAE,CAAC;IACxB,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,sBAAsB,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACxC,MAAM,IAAI,GAAoB;YAC5B,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE;YACzD,WAAW,EAAE,GAAG;YAChB,cAAc,EAAE,OAAO;SACxB,CAAC;QACF,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAEtD,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC;QACvC,MAAM,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAExC,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAqB,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,sBAAsB,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;QACpE,sBAAsB,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACxC,MAAM,IAAI,GAAoB;YAC5B,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,UAAU,CAAC,EAAE;YACzD,WAAW,EAAE,GAAG;YAChB,QAAQ,EAAE,QAAQ;YAClB,cAAc,EAAE,OAAO;SACxB,CAAC;QACF,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAEtD,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC;QACvC,MAAM,kBAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAExC,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAqB,CAAC;QACtD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACrF,sBAAsB,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QACjD,oEAAoE;QACpE,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,OAAO,EAAE,CAAC;QACvC,MAAM,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,EAAE,GAAG,CAAC,CAAC;QAEzD,MAAM,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * `graph --workspace` report renderers — the human terminal report and
3
+ * the JSON shape. Both are pure functions over a `WorkspaceUnitRunResult[]`.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=workspace-report.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-report.test.d.ts","sourceRoot":"","sources":["../../../src/cli/__tests__/workspace-report.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * `graph --workspace` report renderers — the human terminal report and
3
+ * the JSON shape. Both are pure functions over a `WorkspaceUnitRunResult[]`.
4
+ */
5
+ import { afterEach, describe, expect, it, vi } from 'vitest';
6
+ import { renderWorkspaceJson, workspaceReportLines } from '../workspace-report.js';
7
+ function signal(over = {}) {
8
+ return {
9
+ id: 'sig_cycle',
10
+ source: 'graph.architecture.cycle',
11
+ provider: 'opensip-cli',
12
+ severity: 'medium',
13
+ category: 'quality',
14
+ ruleId: 'graph.architecture.cycle',
15
+ message: 'cyclic dependency',
16
+ filePath: 'src/a.ts',
17
+ line: 12,
18
+ metadata: {},
19
+ createdAt: '2026-06-04T00:00:00.000Z',
20
+ ...over,
21
+ };
22
+ }
23
+ function unit(over = {}) {
24
+ return {
25
+ unitId: 'core',
26
+ rootDir: '/abs/packages/core',
27
+ displayPath: 'packages/core',
28
+ signals: [],
29
+ exitCode: 0,
30
+ stderr: '',
31
+ ...over,
32
+ };
33
+ }
34
+ afterEach(() => {
35
+ vi.restoreAllMocks();
36
+ });
37
+ // The human report is composed as plain lines (workspaceReportLines) and then
38
+ // emitted through the render seam by writeWorkspaceReport; cross-renderer
39
+ // equivalence is covered in the cli's renderer tests. Here we assert the
40
+ // content composition directly.
41
+ const text = (perUnit, durationMs) => workspaceReportLines(perUnit, durationMs).join('\n');
42
+ describe('workspaceReportLines', () => {
43
+ it('renders an ok unit with its finding count and project-relative display path', () => {
44
+ const out = text([unit({ signals: [signal()] })], 1234);
45
+ expect(out).toContain('opensip graph --workspace');
46
+ expect(out).toContain('== Units (1) ==');
47
+ expect(out).toContain('packages/core: 1 finding(s) — ok');
48
+ expect(out).toContain('1 total finding(s) across 1 unit(s) in 1234 ms.');
49
+ // The single finding is previewed with its file:line and message.
50
+ expect(out).toContain('src/a.ts:12 — cyclic dependency');
51
+ });
52
+ it('marks a failed unit and includes a truncated stderr preview', () => {
53
+ const out = text([unit({ exitCode: 2, stderr: 'line1\nline2\nline3\nline4\nline5' })], 5);
54
+ expect(out).toContain('FAILED (exit 2)');
55
+ expect(out).toContain('stderr: line1');
56
+ expect(out).toContain('line3');
57
+ // Only the first three stderr lines are kept.
58
+ expect(out).not.toContain('line4');
59
+ });
60
+ it('falls back to rootDir when displayPath is empty', () => {
61
+ const out = text([unit({ displayPath: '', signals: [signal()] })], 1);
62
+ expect(out).toContain('/abs/packages/core: 1 finding(s)');
63
+ });
64
+ it('omits the line suffix when a finding has no line number', () => {
65
+ const out = text([unit({ signals: [signal({ line: undefined })] })], 1);
66
+ expect(out).toContain('src/a.ts — cyclic dependency');
67
+ expect(out).not.toContain('src/a.ts: ');
68
+ });
69
+ it('truncates a finding preview past the cap and reports the remainder', () => {
70
+ const many = Array.from({ length: 13 }, (_v, i) => signal({ message: `m${String(i)}`, line: i + 1 }));
71
+ const out = text([unit({ signals: many })], 1);
72
+ expect(out).toContain('... 3 more (use --json for full list)');
73
+ expect(out).toContain('13 total finding(s)');
74
+ });
75
+ });
76
+ describe('renderWorkspaceJson', () => {
77
+ it('produces a stable JSON document mirroring every unit', () => {
78
+ const json = renderWorkspaceJson([unit({ signals: [signal()] }), unit({ unitId: 'cli', signals: [] })], 99);
79
+ const parsed = JSON.parse(json);
80
+ expect(parsed.version).toBe('1.0');
81
+ expect(parsed.tool).toBe('graph');
82
+ expect(parsed.mode).toBe('workspace');
83
+ expect(parsed.durationMs).toBe(99);
84
+ expect(parsed.totalFindings).toBe(1);
85
+ expect(parsed.units.map((u) => u.unitId)).toEqual(['core', 'cli']);
86
+ expect(parsed.units[0]?.signals).toHaveLength(1);
87
+ });
88
+ });
89
+ //# sourceMappingURL=workspace-report.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-report.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/workspace-report.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * @fileoverview Graph inline-suppression application (ADR-0014).
3
+ *
4
+ * Binds the shared core suppression primitive to graph's explicit
5
+ * `@graph-ignore-file` / `@graph-ignore-next-line` directives, applied to a
6
+ * run's signals before they reach the gate baseline, the dashboard, or render.
7
+ * Suppression is unconditional (a directive with no `-- reason` still
8
+ * suppresses); reason quality is audited out-of-band by `graph-ignore-hygiene`.
9
+ *
10
+ * `graph:cycle` is one-signal-per-SCC anchored at a computed member, so a
11
+ * directive above ANY member must waive it — graph's `locate()` feeds the
12
+ * SCC's `memberLocations` (attached in `rules/cycle.ts`) as candidate
13
+ * locations. Every other rule falls back to the signal's own anchor.
14
+ */
15
+ import type { Signal } from '@opensip-cli/core';
16
+ export interface GraphSuppressionOutcome {
17
+ readonly kept: readonly Signal[];
18
+ readonly suppressedCount: number;
19
+ }
20
+ /**
21
+ * Phantom brand stamped onto a signal set that has crossed the single
22
+ * suppression chokepoint ({@link finalizeGraphSignals}). It carries no runtime
23
+ * data — `FINALIZED_BRAND` is a compile-time-only marker — so a `FinalizedSignals`
24
+ * serializes to a plain `{ signals, suppressedCount }` object across the worker
25
+ * IPC boundary, yet the type system forbids constructing one anywhere except the
26
+ * seam below.
27
+ */
28
+ declare const FINALIZED_BRAND: unique symbol;
29
+ /**
30
+ * The run's signal set AFTER `@graph-ignore` waivers have been applied — the
31
+ * ONLY signal shape that may be persisted, verdict-computed, or rendered.
32
+ *
33
+ * Structural-typing escape hatch closed via the {@link FINALIZED_BRAND} phantom:
34
+ * a raw `readonly Signal[]` is NOT assignable to `FinalizedSignals`, and the
35
+ * brand can only be minted by {@link finalizeGraphSignals}. A future fourth
36
+ * output path therefore CANNOT hand un-waived signals to the persist / verdict /
37
+ * render functions — the compiler rejects it. This is the structural guardrail
38
+ * that makes the TTY-leak class of bug (suppression applied on one path only)
39
+ * un-regressable rather than patched.
40
+ */
41
+ export interface FinalizedSignals {
42
+ readonly signals: readonly Signal[];
43
+ readonly suppressedCount: number;
44
+ readonly [FINALIZED_BRAND]: true;
45
+ }
46
+ /**
47
+ * THE single suppression/finalize chokepoint. Apply `@graph-ignore` waivers to a
48
+ * run's raw engine signals and brand the result {@link FinalizedSignals}. Every
49
+ * output path — the static `dispatchGraphResult` family AND the live-view
50
+ * in-process + off-process-worker producers (via `buildLiveGraphOutput`) — MUST
51
+ * route through here; the branded return type is what enforces "one build → one
52
+ * finalize → many renderers" at compile time.
53
+ *
54
+ * `buildRoot` is the directory the signals' project-relative `code.file` paths
55
+ * are RELATIVE TO (the positional subtree / sharded-child / workspace-unit root,
56
+ * not necessarily `opts.cwd`). Resolving against the wrong base makes every
57
+ * directive file unreadable (ENOENT) and silently leaks the waiver — the
58
+ * `743fab98` class of regression.
59
+ */
60
+ export declare function finalizeGraphSignals(rawSignals: readonly Signal[], buildRoot: string): Promise<FinalizedSignals>;
61
+ /**
62
+ * Re-establish the {@link FinalizedSignals} brand on a signal set that has
63
+ * ALREADY crossed {@link finalizeGraphSignals} but lost its phantom brand by
64
+ * crossing a serialization boundary (the off-process graph worker streams back a
65
+ * plain `{ signals, suppressedCount }` payload over IPC). This is NOT a second
66
+ * suppression entry point — it ASSERTS a prior finalize, it does not perform one
67
+ * — so the "one seam" invariant holds: the worker finalizes once inside itself,
68
+ * and the parent merely re-stamps the brand the structured-clone dropped.
69
+ *
70
+ * @internal
71
+ */
72
+ export declare function assertFinalizedAcrossBoundary(signals: readonly Signal[], suppressedCount: number): FinalizedSignals;
73
+ /**
74
+ * Apply `@graph-ignore` waivers to a run's signals. `projectRoot` resolves the
75
+ * project-relative `code.file` paths the signals carry.
76
+ *
77
+ * Read-failure posture (ADR-0014 + fail-loud Phase 5): the core primitive is
78
+ * fail-loud. A genuinely-removed (`ENOENT`) directive file is non-fatal but
79
+ * attributed (the primitive logs `signals.suppress.directive-file-missing`);
80
+ * ANY other read failure PROPAGATES. This function deliberately does NOT
81
+ * catch it — the error reaches the CLI error boundary, which classifies it and
82
+ * exits, rather than letting a dropped waiver leak a signal as a finding.
83
+ */
84
+ export declare function applyGraphSuppressions(signals: readonly Signal[], projectRoot: string): Promise<GraphSuppressionOutcome>;
85
+ export {};
86
+ //# sourceMappingURL=apply-suppressions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-suppressions.d.ts","sourceRoot":"","sources":["../../src/cli/apply-suppressions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,OAAO,KAAK,EAAE,MAAM,EAA4C,MAAM,mBAAmB,CAAC;AAO1F,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;;GAOG;AACH,OAAO,CAAC,MAAM,eAAe,EAAE,OAAO,MAAM,CAAC;AAE7C;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC;CAClC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,CAAC,CAG3B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,eAAe,EAAE,MAAM,GACtB,gBAAgB,CAElB;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,uBAAuB,CAAC,CAUlC"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * @fileoverview Graph inline-suppression application (ADR-0014).
3
+ *
4
+ * Binds the shared core suppression primitive to graph's explicit
5
+ * `@graph-ignore-file` / `@graph-ignore-next-line` directives, applied to a
6
+ * run's signals before they reach the gate baseline, the dashboard, or render.
7
+ * Suppression is unconditional (a directive with no `-- reason` still
8
+ * suppresses); reason quality is audited out-of-band by `graph-ignore-hygiene`.
9
+ *
10
+ * `graph:cycle` is one-signal-per-SCC anchored at a computed member, so a
11
+ * directive above ANY member must waive it — graph's `locate()` feeds the
12
+ * SCC's `memberLocations` (attached in `rules/cycle.ts`) as candidate
13
+ * locations. Every other rule falls back to the signal's own anchor.
14
+ */
15
+ import { readFile as fsReadFile } from 'node:fs/promises';
16
+ import { resolve as resolvePath } from 'node:path';
17
+ import { filterSignalsBySuppressions } from '@opensip-cli/core';
18
+ const GRAPH_KEYWORDS = {
19
+ file: '@graph-ignore-file',
20
+ nextLine: '@graph-ignore-next-line',
21
+ };
22
+ /**
23
+ * THE single suppression/finalize chokepoint. Apply `@graph-ignore` waivers to a
24
+ * run's raw engine signals and brand the result {@link FinalizedSignals}. Every
25
+ * output path — the static `dispatchGraphResult` family AND the live-view
26
+ * in-process + off-process-worker producers (via `buildLiveGraphOutput`) — MUST
27
+ * route through here; the branded return type is what enforces "one build → one
28
+ * finalize → many renderers" at compile time.
29
+ *
30
+ * `buildRoot` is the directory the signals' project-relative `code.file` paths
31
+ * are RELATIVE TO (the positional subtree / sharded-child / workspace-unit root,
32
+ * not necessarily `opts.cwd`). Resolving against the wrong base makes every
33
+ * directive file unreadable (ENOENT) and silently leaks the waiver — the
34
+ * `743fab98` class of regression.
35
+ */
36
+ export async function finalizeGraphSignals(rawSignals, buildRoot) {
37
+ const { kept, suppressedCount } = await applyGraphSuppressions(rawSignals, buildRoot);
38
+ return brandFinalized(kept, suppressedCount);
39
+ }
40
+ /**
41
+ * Re-establish the {@link FinalizedSignals} brand on a signal set that has
42
+ * ALREADY crossed {@link finalizeGraphSignals} but lost its phantom brand by
43
+ * crossing a serialization boundary (the off-process graph worker streams back a
44
+ * plain `{ signals, suppressedCount }` payload over IPC). This is NOT a second
45
+ * suppression entry point — it ASSERTS a prior finalize, it does not perform one
46
+ * — so the "one seam" invariant holds: the worker finalizes once inside itself,
47
+ * and the parent merely re-stamps the brand the structured-clone dropped.
48
+ *
49
+ * @internal
50
+ */
51
+ export function assertFinalizedAcrossBoundary(signals, suppressedCount) {
52
+ return brandFinalized(signals, suppressedCount);
53
+ }
54
+ function brandFinalized(signals, suppressedCount) {
55
+ return { signals, suppressedCount };
56
+ }
57
+ /**
58
+ * Apply `@graph-ignore` waivers to a run's signals. `projectRoot` resolves the
59
+ * project-relative `code.file` paths the signals carry.
60
+ *
61
+ * Read-failure posture (ADR-0014 + fail-loud Phase 5): the core primitive is
62
+ * fail-loud. A genuinely-removed (`ENOENT`) directive file is non-fatal but
63
+ * attributed (the primitive logs `signals.suppress.directive-file-missing`);
64
+ * ANY other read failure PROPAGATES. This function deliberately does NOT
65
+ * catch it — the error reaches the CLI error boundary, which classifies it and
66
+ * exits, rather than letting a dropped waiver leak a signal as a finding.
67
+ */
68
+ export async function applyGraphSuppressions(signals, projectRoot) {
69
+ const readFile = (file) => fsReadFile(resolvePath(projectRoot, file), 'utf8');
70
+ const { kept, suppressed } = await filterSignalsBySuppressions({
71
+ signals,
72
+ keywords: GRAPH_KEYWORDS,
73
+ readFile,
74
+ locate: graphLocate,
75
+ });
76
+ return { kept, suppressedCount: suppressed.length };
77
+ }
78
+ /** Candidate locations a `@graph-ignore` directive may target for `signal`. */
79
+ function graphLocate(signal) {
80
+ const members = signal.metadata.memberLocations;
81
+ if (Array.isArray(members)) {
82
+ const locations = [];
83
+ for (const member of members) {
84
+ if (isLocation(member))
85
+ locations.push({ file: member.file, line: member.line });
86
+ }
87
+ if (locations.length > 0)
88
+ return locations;
89
+ }
90
+ const file = signal.code?.file;
91
+ if (file === undefined)
92
+ return [];
93
+ return [{ file, line: signal.code?.line }];
94
+ }
95
+ function isLocation(value) {
96
+ return (typeof value === 'object' &&
97
+ value !== null &&
98
+ typeof value.file === 'string' &&
99
+ typeof value.line === 'number');
100
+ }
101
+ //# sourceMappingURL=apply-suppressions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-suppressions.js","sourceRoot":"","sources":["../../src/cli/apply-suppressions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAIhE,MAAM,cAAc,GAAwB;IAC1C,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,yBAAyB;CACpC,CAAC;AAmCF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAA6B,EAC7B,SAAiB;IAEjB,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,MAAM,sBAAsB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACtF,OAAO,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,6BAA6B,CAC3C,OAA0B,EAC1B,eAAuB;IAEvB,OAAO,cAAc,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,cAAc,CAAC,OAA0B,EAAE,eAAuB;IACzE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAsB,CAAC;AAC1D,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAA0B,EAC1B,WAAmB;IAEnB,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAmB,EAAE,CACjD,UAAU,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,MAAM,2BAA2B,CAAC;QAC7D,OAAO;QACP,QAAQ,EAAE,cAAc;QACxB,QAAQ;QACR,MAAM,EAAE,WAAW;KACpB,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC;AACtD,CAAC;AAED,+EAA+E;AAC/E,SAAS,WAAW,CAAC,MAAc;IACjC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;IAChD,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAA0B,EAAE,CAAC;QAC5C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,UAAU,CAAC,MAAM,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;IAC7C,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC;IAC/B,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ;QACtD,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ,CACvD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Coverage for `applyGraphSuppressions` (ADR-0014) — graph's binding of the
3
+ * shared core suppression primitive to `@graph-ignore` directives.
4
+ *
5
+ * Unlike the core primitive's test (which uses an in-memory readFile),
6
+ * `applyGraphSuppressions` reads files from disk via
7
+ * `fs.readFile(resolve(projectRoot, file))`. So these tests write real source
8
+ * fixtures into an `os.tmpdir()`-based directory and point `projectRoot` at it.
9
+ * Signals are built with the same `createSignal` the production rules use.
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=apply-suppressions.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-suppressions.test.d.ts","sourceRoot":"","sources":["../../src/cli/apply-suppressions.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Coverage for `applyGraphSuppressions` (ADR-0014) — graph's binding of the
3
+ * shared core suppression primitive to `@graph-ignore` directives.
4
+ *
5
+ * Unlike the core primitive's test (which uses an in-memory readFile),
6
+ * `applyGraphSuppressions` reads files from disk via
7
+ * `fs.readFile(resolve(projectRoot, file))`. So these tests write real source
8
+ * fixtures into an `os.tmpdir()`-based directory and point `projectRoot` at it.
9
+ * Signals are built with the same `createSignal` the production rules use.
10
+ */
11
+ import { mkdtemp, rm, writeFile } from 'node:fs/promises';
12
+ import { tmpdir } from 'node:os';
13
+ import { join } from 'node:path';
14
+ import { createSignal } from '@opensip-cli/core';
15
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
16
+ import { applyGraphSuppressions } from './apply-suppressions.js';
17
+ let root;
18
+ beforeEach(async () => {
19
+ root = await mkdtemp(join(tmpdir(), 'graph-suppress-'));
20
+ });
21
+ afterEach(async () => {
22
+ await rm(root, { recursive: true, force: true });
23
+ });
24
+ /** Write `content` to `file` (project-relative) under the temp root. */
25
+ async function fixture(file, content) {
26
+ await writeFile(join(root, file), content, 'utf8');
27
+ }
28
+ /** Build a graph Signal anchored at `file:line`, optionally with metadata. */
29
+ function sig(ruleId, file, line, metadata) {
30
+ return createSignal({
31
+ source: 'graph',
32
+ severity: 'medium',
33
+ category: 'architecture',
34
+ ruleId,
35
+ message: `${ruleId} at ${file}:${String(line)}`,
36
+ code: { file, line },
37
+ metadata,
38
+ });
39
+ }
40
+ describe('applyGraphSuppressions', () => {
41
+ it('removes a signal waived by a matching next-line directive', async () => {
42
+ await fixture('a.ts', [
43
+ '// @graph-ignore-next-line graph:large-function -- intentionally long',
44
+ 'function big() {}',
45
+ ].join('\n'));
46
+ const res = await applyGraphSuppressions([sig('graph:large-function', 'a.ts', 2)], root);
47
+ expect(res.kept).toHaveLength(0);
48
+ expect(res.suppressedCount).toBe(1);
49
+ });
50
+ it('does not suppress when the directive names a different rule id', async () => {
51
+ await fixture('a.ts', ['// @graph-ignore-next-line graph:cycle -- not this rule', 'function big() {}'].join('\n'));
52
+ const res = await applyGraphSuppressions([sig('graph:large-function', 'a.ts', 2)], root);
53
+ expect(res.kept).toHaveLength(1);
54
+ expect(res.suppressedCount).toBe(0);
55
+ });
56
+ it('waives a graph:cycle signal via a directive above ANY member location', async () => {
57
+ // The signal anchors at anchor.ts but the directive sits above a DIFFERENT
58
+ // member (member.ts) — the any-member semantics graphLocate() implements
59
+ // from metadata.memberLocations.
60
+ await fixture('anchor.ts', 'function a() {}');
61
+ await fixture('member.ts', ['// @graph-ignore-next-line graph:cycle -- intentional recursion', 'function b() {}'].join('\n'));
62
+ const signal = sig('graph:cycle', 'anchor.ts', 1, {
63
+ memberLocations: [
64
+ { file: 'anchor.ts', line: 1 },
65
+ { file: 'member.ts', line: 2 },
66
+ ],
67
+ });
68
+ const res = await applyGraphSuppressions([signal], root);
69
+ expect(res.kept).toHaveLength(0);
70
+ expect(res.suppressedCount).toBe(1);
71
+ });
72
+ it('suppresses unconditionally — a directive with no -- reason still waives', async () => {
73
+ await fixture('a.ts', ['// @graph-ignore-next-line graph:cycle', 'function visit() {}'].join('\n'));
74
+ const res = await applyGraphSuppressions([sig('graph:cycle', 'a.ts', 2)], root);
75
+ expect(res.kept).toHaveLength(0);
76
+ expect(res.suppressedCount).toBe(1);
77
+ });
78
+ it('keeps a signal with no matching directive', async () => {
79
+ await fixture('a.ts', ['function visit() {}', 'function other() {}'].join('\n'));
80
+ const res = await applyGraphSuppressions([sig('graph:cycle', 'a.ts', 1)], root);
81
+ expect(res.kept).toHaveLength(1);
82
+ expect(res.suppressedCount).toBe(0);
83
+ });
84
+ });
85
+ //# sourceMappingURL=apply-suppressions.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apply-suppressions.test.js","sourceRoot":"","sources":["../../src/cli/apply-suppressions.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @fileoverview Graph's signal-envelope assembly (ADR-0011, Phase 5).
3
+ *
4
+ * Collapses a graph run's flat `Signal[]` into the one tool-run
5
+ * {@link SignalEnvelope}: the shared output currency the composition root
6
+ * renders (table), emits (`--json`), and delivers (cloud + `--report-to`).
7
+ *
8
+ * SARIF ruleId decision — Option A (ADR-0011, Phase 5): at envelope assembly
9
+ * each signal's engine slug (`graph:<rule>`) is mapped to its OpenSIP-
10
+ * convention rule ID (`graph.<family>.<rule>`) via
11
+ * {@link mapEngineSlugToOpenSipRuleId}, set on BOTH `ruleId` AND `source`. One
12
+ * canonical id then flows to `--json`, the terminal table (grouped by
13
+ * `signal.source`), and SARIF (`signal.ruleId`). `mapEngineSlugToOpenSipRuleId`
14
+ * stays graph-owned (tool vocabulary does not belong in the tool-agnostic
15
+ * output layer).
16
+ *
17
+ * Fingerprints (ADR-0036): this builder passes `graphFingerprintStrategy`
18
+ * (`ruleId|filePath|line|col`, `baseline-strategy.ts`) to
19
+ * {@link buildSignalEnvelope}, which stamps every signal at construction — so
20
+ * each built envelope (gate, `--json`, cloud, SARIF) is gate-ready, not just
21
+ * the gate path. The strategy is applied AFTER the Option-A `ruleId` remap
22
+ * below, so fingerprints are computed over the canonical (OpenSIP-convention)
23
+ * rule IDs — byte-identical to the prior post-hoc gate-path stamping. The
24
+ * dashboard session payload (`persistence/session-payload.ts`) keeps
25
+ * the engine slug (its metric-column keys are engine slugs).
26
+ *
27
+ * Pure: no IO, no clock, no id generation — `runId`/`createdAt` arrive on the
28
+ * input (formatter-purity contract).
29
+ */
30
+ import type { SignalEnvelope } from '@opensip-cli/contracts';
31
+ import type { Signal } from '@opensip-cli/core';
32
+ /** Inputs to {@link buildGraphEnvelope}. */
33
+ export interface BuildGraphEnvelopeInput {
34
+ readonly signals: readonly Signal[];
35
+ readonly recipe?: string;
36
+ readonly runId: string;
37
+ readonly createdAt: string;
38
+ /** Whole-run wall-clock; attributed to each unit row when known (else 0). */
39
+ readonly durationMs?: number;
40
+ readonly resolutionMode?: 'exact' | 'fast';
41
+ }
42
+ /**
43
+ * Assemble the graph run's {@link SignalEnvelope}.
44
+ *
45
+ * Each signal is remapped to its OpenSIP rule ID (Option A) on both `ruleId`
46
+ * and `source`; signals are then grouped by that mapped source into one
47
+ * {@link UnitResult} per rule that fired (`passed` ⇔ no `critical`/`high` in
48
+ * that group). A rule that emitted no signals produces no unit row — graph's
49
+ * `RunGraphResult` does not carry the full ran-rule set, matching the prior
50
+ * `buildCliOutput` behaviour (one `CheckOutput` per rule that fired).
51
+ */
52
+ export declare function buildGraphEnvelope(input: BuildGraphEnvelopeInput): SignalEnvelope;
53
+ //# sourceMappingURL=build-envelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-envelope.d.ts","sourceRoot":"","sources":["../../src/cli/build-envelope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAQH,OAAO,KAAK,EAAE,cAAc,EAAc,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,4CAA4C;AAC5C,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC5C;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,cAAc,CA4CjF"}