gitnexus 1.6.10-rc.98 → 1.6.10

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 (777) hide show
  1. package/README.md +177 -18
  2. package/dist/_shared/graph/types.d.ts +21 -2
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +3 -3
  5. package/dist/_shared/index.d.ts.map +1 -1
  6. package/dist/_shared/index.js +1 -1
  7. package/dist/_shared/index.js.map +1 -1
  8. package/dist/_shared/integrations/circuit-breaker.d.ts.map +1 -1
  9. package/dist/_shared/integrations/circuit-breaker.js.map +1 -1
  10. package/dist/_shared/integrations/resilient-fetch.d.ts +16 -0
  11. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
  12. package/dist/_shared/integrations/resilient-fetch.js +19 -7
  13. package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
  14. package/dist/_shared/language-detection.d.ts.map +1 -1
  15. package/dist/_shared/lbug/schema-constants.d.ts +2 -2
  16. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  17. package/dist/_shared/lbug/schema-constants.js +3 -0
  18. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  19. package/dist/_shared/scope-resolution/evidence-weights.d.ts.map +1 -1
  20. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +5 -0
  21. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
  22. package/dist/_shared/scope-resolution/finalize-algorithm.js +315 -36
  23. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
  24. package/dist/_shared/scope-resolution/reference-site.d.ts +115 -0
  25. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  26. package/dist/_shared/scope-resolution/registries/field-registry.js.map +1 -1
  27. package/dist/_shared/scope-resolution/registries/lookup-core.d.ts.map +1 -1
  28. package/dist/_shared/scope-resolution/registries/lookup-core.js +58 -2
  29. package/dist/_shared/scope-resolution/registries/lookup-core.js.map +1 -1
  30. package/dist/_shared/scope-resolution/registries/method-registry.js.map +1 -1
  31. package/dist/_shared/scope-resolution/scope-tree.d.ts.map +1 -1
  32. package/dist/_shared/scope-resolution/scope-tree.js.map +1 -1
  33. package/dist/_shared/scope-resolution/symbol-definition.d.ts +47 -0
  34. package/dist/_shared/scope-resolution/symbol-definition.d.ts.map +1 -1
  35. package/dist/_shared/scope-resolution/types.d.ts +278 -3
  36. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  37. package/dist/cli/ai-context.d.ts +3 -2
  38. package/dist/cli/ai-context.js +71 -16
  39. package/dist/cli/analyze-config.d.ts +1 -1
  40. package/dist/cli/analyze-options.d.ts +131 -0
  41. package/dist/cli/analyze-options.js +1 -0
  42. package/dist/cli/analyze.d.ts +21 -113
  43. package/dist/cli/analyze.js +172 -29
  44. package/dist/cli/cli-message.d.ts +1 -1
  45. package/dist/cli/detect-changes-format.js +19 -2
  46. package/dist/cli/doctor.d.ts +12 -0
  47. package/dist/cli/doctor.js +32 -5
  48. package/dist/cli/editor-targets.js +6 -0
  49. package/dist/cli/eval-server.js +2 -1
  50. package/dist/cli/format-symbol.d.ts +15 -0
  51. package/dist/cli/format-symbol.js +17 -0
  52. package/dist/cli/generated-skill.d.ts +17 -0
  53. package/dist/cli/generated-skill.js +1 -0
  54. package/dist/cli/group.js +229 -21
  55. package/dist/cli/help-i18n.js +1 -2
  56. package/dist/cli/i18n/en.d.ts +11 -9
  57. package/dist/cli/i18n/en.js +13 -9
  58. package/dist/cli/i18n/resources.d.ts +15 -11
  59. package/dist/cli/i18n/zh-CN.d.ts +4 -2
  60. package/dist/cli/i18n/zh-CN.js +11 -9
  61. package/dist/cli/index.js +8 -4
  62. package/dist/cli/resolve-invocation.d.ts +7 -3
  63. package/dist/cli/resolve-invocation.js +7 -3
  64. package/dist/cli/setup.js +4 -3
  65. package/dist/cli/skill-gen.d.ts +1 -6
  66. package/dist/cli/tool.d.ts +1 -0
  67. package/dist/cli/tool.js +74 -17
  68. package/dist/cli/wiki.js +53 -10
  69. package/dist/config/ignore-service.d.ts +2 -0
  70. package/dist/config/ignore-service.js +54 -13
  71. package/dist/core/analyzer-identity.d.ts +80 -0
  72. package/dist/core/analyzer-identity.js +364 -26
  73. package/dist/core/augmentation/engine.js +86 -71
  74. package/dist/core/embedding-checkpoint.d.ts +143 -0
  75. package/dist/core/embedding-checkpoint.js +221 -0
  76. package/dist/core/embedding-count.d.ts +61 -0
  77. package/dist/core/embedding-count.js +69 -0
  78. package/dist/core/embeddings/ast-utils.js +9 -1
  79. package/dist/core/embeddings/embedding-pipeline.d.ts +8 -0
  80. package/dist/core/embeddings/embedding-pipeline.js +253 -14
  81. package/dist/core/embeddings/http-client.d.ts +5 -0
  82. package/dist/core/embeddings/http-client.js +142 -27
  83. package/dist/core/graph/graph.js +3 -0
  84. package/dist/core/graph/import-cycles.d.ts +194 -3
  85. package/dist/core/graph/import-cycles.js +522 -73
  86. package/dist/core/graph/types.d.ts +18 -0
  87. package/dist/core/group/bridge-db.d.ts +204 -1
  88. package/dist/core/group/bridge-db.js +401 -28
  89. package/dist/core/group/completeness.d.ts +130 -0
  90. package/dist/core/group/completeness.js +83 -0
  91. package/dist/core/group/config-parser.js +0 -5
  92. package/dist/core/group/cross-impact.d.ts +46 -1
  93. package/dist/core/group/cross-impact.js +220 -19
  94. package/dist/core/group/cross-trace.d.ts +32 -11
  95. package/dist/core/group/cross-trace.js +114 -20
  96. package/dist/core/group/extractors/http-patterns/java.js +278 -22
  97. package/dist/core/group/extractors/http-patterns/node.js +332 -216
  98. package/dist/core/group/extractors/http-patterns/types.d.ts +8 -0
  99. package/dist/core/group/extractors/http-route-extractor.d.ts +1 -0
  100. package/dist/core/group/extractors/http-route-extractor.js +122 -48
  101. package/dist/core/group/extractors/include-extractor.js +20 -2
  102. package/dist/core/group/extractors/manifest-extractor.d.ts +1 -1
  103. package/dist/core/group/extractors/manifest-extractor.js +7 -7
  104. package/dist/core/group/extractors/python-workspace-extractor.js +5 -2
  105. package/dist/core/group/group-lock.d.ts +31 -0
  106. package/dist/core/group/group-lock.js +166 -0
  107. package/dist/core/group/service.js +297 -16
  108. package/dist/core/group/storage.d.ts +3 -0
  109. package/dist/core/group/storage.js +7 -39
  110. package/dist/core/group/sync.d.ts +49 -3
  111. package/dist/core/group/sync.js +0 -0
  112. package/dist/core/group/types.d.ts +183 -8
  113. package/dist/core/group/types.js +28 -1
  114. package/dist/core/incremental/subgraph-extract.d.ts +9 -6
  115. package/dist/core/incremental/subgraph-extract.js +33 -10
  116. package/dist/core/index-freshness.d.ts +77 -2
  117. package/dist/core/index-freshness.js +109 -2
  118. package/dist/core/ingestion/call-processor.d.ts +13 -1
  119. package/dist/core/ingestion/call-processor.js +110 -3
  120. package/dist/core/ingestion/cfg/callee-cell-format.d.ts +42 -0
  121. package/dist/core/ingestion/cfg/callee-cell-format.js +42 -0
  122. package/dist/core/ingestion/cfg/emit.d.ts +8 -23
  123. package/dist/core/ingestion/cfg/emit.js +9 -23
  124. package/dist/core/ingestion/class-extractors/configs/go.js +10 -5
  125. package/dist/core/ingestion/class-extractors/configs/jvm.js +6 -6
  126. package/dist/core/ingestion/cluster-enricher.js +8 -4
  127. package/dist/core/ingestion/community-processor.d.ts +21 -3
  128. package/dist/core/ingestion/community-processor.js +81 -82
  129. package/dist/core/ingestion/di-extractors/index.d.ts +9 -33
  130. package/dist/core/ingestion/di-extractors/spring.d.ts +1 -1
  131. package/dist/core/ingestion/di-extractors/spring.js +8 -1
  132. package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
  133. package/dist/core/ingestion/di-extractors/types.js +15 -0
  134. package/dist/core/ingestion/filesystem-walker.js +30 -14
  135. package/dist/core/ingestion/finalize-orchestrator.js +1 -0
  136. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +6 -0
  137. package/dist/core/ingestion/frameworks/spring/analysis-features.js +35 -1
  138. package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
  139. package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
  140. package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
  141. package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
  142. package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
  143. package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
  144. package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
  145. package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
  146. package/dist/core/ingestion/frameworks/spring/bean-catalog.js +1 -0
  147. package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
  148. package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
  149. package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
  150. package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
  151. package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +3 -0
  152. package/dist/core/ingestion/frameworks/spring/di-metadata.js +162 -13
  153. package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
  154. package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
  155. package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
  156. package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
  157. package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
  158. package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
  159. package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
  160. package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
  161. package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
  162. package/dist/core/ingestion/import-resolvers/go.js +44 -17
  163. package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
  164. package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
  165. package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +429 -0
  166. package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
  167. package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
  168. package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
  169. package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
  170. package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
  171. package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
  172. package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
  173. package/dist/core/ingestion/import-resolvers/php.js +65 -19
  174. package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
  175. package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
  176. package/dist/core/ingestion/import-resolvers/python.js +25 -6
  177. package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
  178. package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
  179. package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
  180. package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
  181. package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
  182. package/dist/core/ingestion/import-resolvers/utils.js +215 -36
  183. package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
  184. package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
  185. package/dist/core/ingestion/language-config.d.ts +29 -1
  186. package/dist/core/ingestion/language-config.js +110 -35
  187. package/dist/core/ingestion/language-provider.d.ts +209 -7
  188. package/dist/core/ingestion/language-provider.js +37 -0
  189. package/dist/core/ingestion/languages/c/captures.js +7 -0
  190. package/dist/core/ingestion/languages/c/import-target.js +12 -16
  191. package/dist/core/ingestion/languages/c/scope-resolver.js +20 -19
  192. package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
  193. package/dist/core/ingestion/languages/c-cpp.js +13 -0
  194. package/dist/core/ingestion/languages/cobol/scope-resolver.js +27 -20
  195. package/dist/core/ingestion/languages/cobol.js +13 -0
  196. package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
  197. package/dist/core/ingestion/languages/cpp/adl.js +67 -44
  198. package/dist/core/ingestion/languages/cpp/captures.js +14 -2
  199. package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
  200. package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
  201. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
  202. package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
  203. package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
  204. package/dist/core/ingestion/languages/cpp/query.js +106 -0
  205. package/dist/core/ingestion/languages/cpp/scope-resolver.js +48 -20
  206. package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
  207. package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
  208. package/dist/core/ingestion/languages/csharp/captures.js +19 -0
  209. package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
  210. package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
  211. package/dist/core/ingestion/languages/csharp/query.js +25 -5
  212. package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
  213. package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
  214. package/dist/core/ingestion/languages/dart/captures.js +598 -16
  215. package/dist/core/ingestion/languages/dart/import-target.js +32 -9
  216. package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
  217. package/dist/core/ingestion/languages/dart/index.js +1 -1
  218. package/dist/core/ingestion/languages/dart/query.js +98 -1
  219. package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
  220. package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
  221. package/dist/core/ingestion/languages/dart.js +6 -1
  222. package/dist/core/ingestion/languages/go/captures.js +108 -3
  223. package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
  224. package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
  225. package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
  226. package/dist/core/ingestion/languages/go/import-target.js +34 -30
  227. package/dist/core/ingestion/languages/go/index.d.ts +1 -1
  228. package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
  229. package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
  230. package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
  231. package/dist/core/ingestion/languages/go/interpret.js +22 -8
  232. package/dist/core/ingestion/languages/go/method-owners.js +31 -12
  233. package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
  234. package/dist/core/ingestion/languages/go/package-clause.js +75 -0
  235. package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
  236. package/dist/core/ingestion/languages/go/query.js +56 -3
  237. package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
  238. package/dist/core/ingestion/languages/go.js +9 -0
  239. package/dist/core/ingestion/languages/java/analysis-features.d.ts +4 -0
  240. package/dist/core/ingestion/languages/java/analysis-features.js +12 -0
  241. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +12 -0
  242. package/dist/core/ingestion/languages/java/capture-side-channel.js +48 -0
  243. package/dist/core/ingestion/languages/java/captures.js +129 -44
  244. package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
  245. package/dist/core/ingestion/languages/java/import-target.js +68 -88
  246. package/dist/core/ingestion/languages/java/interpret.js +3 -2
  247. package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
  248. package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
  249. package/dist/core/ingestion/languages/java/query.js +16 -3
  250. package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
  251. package/dist/core/ingestion/languages/java/record-components.js +185 -0
  252. package/dist/core/ingestion/languages/java/scope-resolver.js +10 -2
  253. package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
  254. package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
  255. package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
  256. package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
  257. package/dist/core/ingestion/languages/java/spring-di.d.ts +4 -1
  258. package/dist/core/ingestion/languages/java/spring-di.js +41 -9
  259. package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
  260. package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
  261. package/dist/core/ingestion/languages/java.js +94 -3
  262. package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
  263. package/dist/core/ingestion/languages/javascript/captures.js +262 -4
  264. package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
  265. package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
  266. package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
  267. package/dist/core/ingestion/languages/javascript/index.js +54 -5
  268. package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
  269. package/dist/core/ingestion/languages/javascript/query.js +211 -5
  270. package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
  271. package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
  272. package/dist/core/ingestion/languages/jvm/package-siblings.js +77 -9
  273. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
  274. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +48 -0
  275. package/dist/core/ingestion/languages/kotlin/captures.js +43 -1
  276. package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
  277. package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
  278. package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
  279. package/dist/core/ingestion/languages/kotlin/index.js +1 -0
  280. package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
  281. package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
  282. package/dist/core/ingestion/languages/kotlin/query.js +28 -2
  283. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +23 -2
  284. package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
  285. package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
  286. package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
  287. package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
  288. package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +2 -0
  289. package/dist/core/ingestion/languages/kotlin/spring-di.js +60 -11
  290. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
  291. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
  292. package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
  293. package/dist/core/ingestion/languages/php/captures.js +319 -51
  294. package/dist/core/ingestion/languages/php/import-target.d.ts +3 -4
  295. package/dist/core/ingestion/languages/php/import-target.js +192 -62
  296. package/dist/core/ingestion/languages/php/query.js +31 -0
  297. package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
  298. package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
  299. package/dist/core/ingestion/languages/python/captures.js +29 -0
  300. package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
  301. package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
  302. package/dist/core/ingestion/languages/python/import-target.js +277 -91
  303. package/dist/core/ingestion/languages/python/index.d.ts +1 -1
  304. package/dist/core/ingestion/languages/python/index.js +1 -1
  305. package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
  306. package/dist/core/ingestion/languages/python/interpret.js +249 -7
  307. package/dist/core/ingestion/languages/python/query.js +9 -0
  308. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +8 -6
  309. package/dist/core/ingestion/languages/python/receiver-binding.js +108 -12
  310. package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
  311. package/dist/core/ingestion/languages/python/simple-hooks.js +2 -8
  312. package/dist/core/ingestion/languages/python.js +13 -0
  313. package/dist/core/ingestion/languages/ruby/captures.js +158 -0
  314. package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
  315. package/dist/core/ingestion/languages/ruby/query.js +93 -0
  316. package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
  317. package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
  318. package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
  319. package/dist/core/ingestion/languages/rust/captures.js +39 -1
  320. package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
  321. package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
  322. package/dist/core/ingestion/languages/rust/module-path.js +214 -0
  323. package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
  324. package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
  325. package/dist/core/ingestion/languages/rust/query.js +39 -6
  326. package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
  327. package/dist/core/ingestion/languages/rust.js +17 -0
  328. package/dist/core/ingestion/languages/swift/captures.js +87 -3
  329. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
  330. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
  331. package/dist/core/ingestion/languages/swift/import-target.js +4 -9
  332. package/dist/core/ingestion/languages/swift/query.js +17 -0
  333. package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
  334. package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
  335. package/dist/core/ingestion/languages/swift.js +2 -0
  336. package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
  337. package/dist/core/ingestion/languages/typescript/captures.js +267 -5
  338. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
  339. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
  340. package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
  341. package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
  342. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.d.ts +7 -0
  343. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.js +92 -0
  344. package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
  345. package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
  346. package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
  347. package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
  348. package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
  349. package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
  350. package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
  351. package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
  352. package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
  353. package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
  354. package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
  355. package/dist/core/ingestion/languages/typescript/query.js +303 -14
  356. package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
  357. package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
  358. package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
  359. package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
  360. package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
  361. package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
  362. package/dist/core/ingestion/languages/typescript/tsconfig.js +292 -0
  363. package/dist/core/ingestion/languages/typescript.js +93 -2
  364. package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
  365. package/dist/core/ingestion/languages/vue/import-target.js +11 -47
  366. package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
  367. package/dist/core/ingestion/local-symbol-pruner.js +11 -11
  368. package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
  369. package/dist/core/ingestion/method-extractors/generic.js +1 -0
  370. package/dist/core/ingestion/method-types.d.ts +16 -0
  371. package/dist/core/ingestion/pipeline-phases/di.d.ts +1 -1
  372. package/dist/core/ingestion/pipeline-phases/di.js +136 -21
  373. package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
  374. package/dist/core/ingestion/pipeline-phases/index.js +2 -0
  375. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
  376. package/dist/core/ingestion/pipeline-phases/parse-impl.js +154 -4
  377. package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
  378. package/dist/core/ingestion/pipeline-phases/processes.d.ts +3 -2
  379. package/dist/core/ingestion/pipeline-phases/processes.js +91 -6
  380. package/dist/core/ingestion/pipeline-phases/routes.js +116 -25
  381. package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
  382. package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
  383. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
  384. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
  385. package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
  386. package/dist/core/ingestion/pipeline.d.ts +26 -2
  387. package/dist/core/ingestion/pipeline.js +60 -11
  388. package/dist/core/ingestion/process-processor.d.ts +109 -2
  389. package/dist/core/ingestion/process-processor.js +464 -52
  390. package/dist/core/ingestion/resolve-references.d.ts +6 -1
  391. package/dist/core/ingestion/resolve-references.js +66 -6
  392. package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +8 -2
  393. package/dist/core/ingestion/route-extractors/constant-resolver.js +11 -7
  394. package/dist/core/ingestion/route-extractors/data-route-table.d.ts +40 -0
  395. package/dist/core/ingestion/route-extractors/data-route-table.js +876 -0
  396. package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
  397. package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
  398. package/dist/core/ingestion/route-extractors/java-const-resolver.d.ts +114 -0
  399. package/dist/core/ingestion/route-extractors/java-const-resolver.js +569 -0
  400. package/dist/core/ingestion/route-extractors/js-const-resolver.d.ts +192 -0
  401. package/dist/core/ingestion/route-extractors/js-const-resolver.js +1033 -0
  402. package/dist/core/ingestion/route-extractors/nest.d.ts +53 -0
  403. package/dist/core/ingestion/route-extractors/nest.js +523 -0
  404. package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
  405. package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
  406. package/dist/core/ingestion/route-extractors/spring.js +214 -29
  407. package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
  408. package/dist/core/ingestion/scope-extractor.d.ts +22 -7
  409. package/dist/core/ingestion/scope-extractor.js +311 -16
  410. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +311 -21
  411. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
  412. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -0
  413. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +47 -0
  414. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
  415. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +280 -42
  416. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
  417. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
  418. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +58 -1
  419. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +137 -34
  420. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
  421. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +39 -1
  422. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +18 -1
  423. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +113 -18
  424. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
  425. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
  426. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +3 -0
  427. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +101 -41
  428. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
  429. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
  430. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +5 -1
  431. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +8 -1
  432. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +105 -5
  433. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
  434. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
  435. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
  436. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
  437. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
  438. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +29 -0
  439. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +57 -0
  440. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +55 -1
  441. package/dist/core/ingestion/scope-resolution/pipeline/run.js +241 -19
  442. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
  443. package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
  444. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
  445. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
  446. package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
  447. package/dist/core/ingestion/scope-resolution/scope/walkers.js +905 -22
  448. package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
  449. package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
  450. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
  451. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
  452. package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
  453. package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
  454. package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
  455. package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
  456. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
  457. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
  458. package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
  459. package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
  460. package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
  461. package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
  462. package/dist/core/ingestion/tree-sitter-queries.js +678 -4
  463. package/dist/core/ingestion/type-env.js +11 -7
  464. package/dist/core/ingestion/type-extractors/jvm.js +2 -2
  465. package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
  466. package/dist/core/ingestion/type-extractors/shared.js +16 -0
  467. package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
  468. package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
  469. package/dist/core/ingestion/type-extractors/typescript.js +26 -0
  470. package/dist/core/ingestion/utils/ast-helpers.d.ts +322 -16
  471. package/dist/core/ingestion/utils/ast-helpers.js +727 -150
  472. package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
  473. package/dist/core/ingestion/utils/call-analysis.js +202 -7
  474. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +59 -0
  475. package/dist/core/ingestion/utils/callable-flow-captures.js +51 -1
  476. package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
  477. package/dist/core/ingestion/utils/callable-labels.js +31 -0
  478. package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
  479. package/dist/core/ingestion/utils/effective-ram.js +58 -0
  480. package/dist/core/ingestion/utils/line-base.d.ts +14 -0
  481. package/dist/core/ingestion/utils/line-base.js +14 -0
  482. package/dist/core/ingestion/utils/method-props.d.ts +27 -4
  483. package/dist/core/ingestion/utils/method-props.js +29 -4
  484. package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
  485. package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
  486. package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
  487. package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
  488. package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
  489. package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
  490. package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
  491. package/dist/core/ingestion/utils/template-arguments.js +196 -0
  492. package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
  493. package/dist/core/ingestion/utils/type-parameters.js +206 -0
  494. package/dist/core/ingestion/workers/callable-id.d.ts +80 -0
  495. package/dist/core/ingestion/workers/callable-id.js +125 -0
  496. package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
  497. package/dist/core/ingestion/workers/parse-worker.js +493 -54
  498. package/dist/core/ingestion/workers/worker-pool.d.ts +20 -27
  499. package/dist/core/ingestion/workers/worker-pool.js +91 -3
  500. package/dist/core/lbug/csv-generator.d.ts +27 -0
  501. package/dist/core/lbug/csv-generator.js +72 -17
  502. package/dist/core/lbug/extension-load-error.js +13 -2
  503. package/dist/core/lbug/extension-loader.d.ts +29 -0
  504. package/dist/core/lbug/extension-loader.js +31 -6
  505. package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
  506. package/dist/core/lbug/graph-emit-sink.js +581 -0
  507. package/dist/core/lbug/lbug-adapter.d.ts +290 -11
  508. package/dist/core/lbug/lbug-adapter.js +652 -69
  509. package/dist/core/lbug/native-check.d.ts +21 -0
  510. package/dist/core/lbug/native-check.js +248 -32
  511. package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
  512. package/dist/core/lbug/pdg-emit-sink.js +21 -111
  513. package/dist/core/lbug/pool-adapter.d.ts +9 -0
  514. package/dist/core/lbug/pool-adapter.js +164 -14
  515. package/dist/core/lbug/query-batch.d.ts +75 -0
  516. package/dist/core/lbug/query-batch.js +102 -0
  517. package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
  518. package/dist/core/lbug/rel-pair-routing.js +228 -10
  519. package/dist/core/lbug/schema.d.ts +163 -4
  520. package/dist/core/lbug/schema.js +404 -159
  521. package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
  522. package/dist/core/lbug/sync-csv-writer.js +108 -0
  523. package/dist/core/run-analyze.d.ts +147 -0
  524. package/dist/core/run-analyze.js +1215 -179
  525. package/dist/core/search/bm25-index.d.ts +11 -0
  526. package/dist/core/search/bm25-index.js +60 -26
  527. package/dist/core/search/fts-indexes.d.ts +150 -9
  528. package/dist/core/search/fts-indexes.js +241 -23
  529. package/dist/core/wiki/graph-queries.js +145 -112
  530. package/dist/core/wiki/llm-client.d.ts +29 -3
  531. package/dist/core/wiki/llm-client.js +47 -12
  532. package/dist/core/wiki/prompts.d.ts +19 -0
  533. package/dist/core/wiki/prompts.js +20 -1
  534. package/dist/lib/utils.d.ts +113 -0
  535. package/dist/lib/utils.js +185 -0
  536. package/dist/mcp/local/aop-metadata.d.ts +77 -0
  537. package/dist/mcp/local/aop-metadata.js +227 -0
  538. package/dist/mcp/local/bean-metadata.d.ts +2 -1
  539. package/dist/mcp/local/bean-metadata.js +22 -1
  540. package/dist/mcp/local/convex-metadata.d.ts +8 -0
  541. package/dist/mcp/local/convex-metadata.js +45 -0
  542. package/dist/mcp/local/local-backend.d.ts +174 -11
  543. package/dist/mcp/local/local-backend.js +1678 -331
  544. package/dist/mcp/local/path-predicate.d.ts +19 -0
  545. package/dist/mcp/local/path-predicate.js +21 -0
  546. package/dist/mcp/local/pdg-impact.d.ts +132 -10
  547. package/dist/mcp/local/pdg-impact.js +391 -98
  548. package/dist/mcp/repository-policy.d.ts +1 -0
  549. package/dist/mcp/repository-policy.js +5 -0
  550. package/dist/mcp/resources.js +26 -4
  551. package/dist/mcp/server.js +23 -13
  552. package/dist/mcp/tools.d.ts +8 -0
  553. package/dist/mcp/tools.js +76 -23
  554. package/dist/server/analyze-job.d.ts +37 -2
  555. package/dist/server/analyze-job.js +13 -2
  556. package/dist/server/analyze-launch.d.ts +1 -1
  557. package/dist/server/analyze-launch.js +79 -10
  558. package/dist/server/analyze-worker-core.d.ts +1 -1
  559. package/dist/server/analyze-worker-core.js +10 -1
  560. package/dist/server/analyze-worker-ipc.d.ts +1 -1
  561. package/dist/server/analyze-worker-ipc.js +4 -0
  562. package/dist/server/analyze-worker-protocol.d.ts +59 -0
  563. package/dist/server/analyze-worker-protocol.js +1 -0
  564. package/dist/server/analyze-worker.d.ts +1 -17
  565. package/dist/server/api.d.ts +2 -11
  566. package/dist/server/api.js +164 -163
  567. package/dist/server/embed-run-outcome.d.ts +89 -0
  568. package/dist/server/embed-run-outcome.js +88 -0
  569. package/dist/server/git-clone.js +6 -2
  570. package/dist/server/middleware.d.ts +116 -9
  571. package/dist/server/middleware.js +291 -22
  572. package/dist/server/sse-progress.d.ts +41 -0
  573. package/dist/server/sse-progress.js +125 -0
  574. package/dist/storage/branch-index.d.ts +11 -6
  575. package/dist/storage/branch-index.js +15 -7
  576. package/dist/storage/file-hash.js +2 -2
  577. package/dist/storage/fs-atomic.d.ts +25 -0
  578. package/dist/storage/fs-atomic.js +42 -0
  579. package/dist/storage/git.d.ts +131 -0
  580. package/dist/storage/git.js +236 -2
  581. package/dist/storage/index-lock.d.ts +102 -0
  582. package/dist/storage/index-lock.js +660 -0
  583. package/dist/storage/parse-cache.js +588 -3
  584. package/dist/storage/parsedfile-store.js +76 -6
  585. package/dist/storage/repo-manager.d.ts +54 -435
  586. package/dist/storage/repo-manager.js +312 -215
  587. package/dist/storage/repo-meta.d.ts +530 -0
  588. package/dist/storage/repo-meta.js +100 -0
  589. package/dist/types/pipeline.d.ts +37 -0
  590. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
  591. package/hooks/claude/gitnexus-hook.cjs +1 -1
  592. package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
  593. package/package.json +11 -2
  594. package/scripts/cross-platform-shard.ts +153 -0
  595. package/scripts/cross-platform-tests.ts +122 -0
  596. package/scripts/run-cross-platform.ts +16 -5
  597. package/skills/gitnexus-cli.md +3 -3
  598. package/skills/gitnexus-debugging.md +37 -7
  599. package/skills/gitnexus-exploring.md +26 -4
  600. package/skills/gitnexus-impact-analysis.md +71 -10
  601. package/skills/gitnexus-plan/README.md +11 -6
  602. package/skills/gitnexus-plan/references/evidence-provenance.md +49 -12
  603. package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +654 -372
  604. package/skills/gitnexus-refactoring.md +48 -5
  605. package/skills/gitnexus-review/SKILL.md +12 -6
  606. package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +1 -1
  607. package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +1 -1
  608. package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +1 -1
  609. package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +1 -1
  610. package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +1 -1
  611. package/skills/gitnexus-review/ci-personas/ci-security-lens.md +1 -1
  612. package/skills/gitnexus-taint-analysis.md +13 -7
  613. package/skills/gitnexus-work/SKILL.md +4 -1
  614. package/skills/gitnexus-work/references/evidence-provenance.md +49 -12
  615. package/skills/gitnexus-work/scripts/evidence-provenance.mjs +654 -372
  616. package/vendor/leiden/utils.cjs +28 -1
  617. package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
  618. package/web/assets/{__vite-browser-external-bMKyYQkO.js → __vite-browser-external-COxE8F0G.js} +1 -1
  619. package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
  620. package/web/assets/agent-Dr4l5EOp.js +662 -0
  621. package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
  622. package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
  623. package/web/assets/{blockDiagram-7IZFK4PR-DBefcjof.js → blockDiagram-54WLDVWM-Dg_hrRWE.js} +4 -4
  624. package/web/assets/{c4Diagram-Y2BXMSZH-EjWnjEJl.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +2 -2
  625. package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
  626. package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
  627. package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
  628. package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
  629. package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
  630. package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
  631. package/web/assets/{chunk-LII3EMHJ-BL6lKJ_P.js → chunk-6L755F7B-CMhLBxi2.js} +1 -1
  632. package/web/assets/{chunk-QA3QBVWF-DVXPOIxe.js → chunk-7CWYLC5S-DRgGkkpF.js} +1 -1
  633. package/web/assets/{chunk-ZXARS5L4-C3v-4Fsw.js → chunk-A7VWPJGB-B4O3oQdQ.js} +1 -1
  634. package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
  635. package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
  636. package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
  637. package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
  638. package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
  639. package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
  640. package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
  641. package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
  642. package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
  643. package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
  644. package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
  645. package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
  646. package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
  647. package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
  648. package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
  649. package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
  650. package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
  651. package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
  652. package/web/assets/{chunk-INKRHTLW-Ckl3_KkO.js → chunk-SZD42YQK-ijyKKVr1.js} +21 -21
  653. package/web/assets/{chunk-LCXTWHL2-C162wE5z.js → chunk-TFPGFQPA-Dj6a-0pC.js} +3 -3
  654. package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
  655. package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
  656. package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
  657. package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
  658. package/web/assets/{chunk-RG4AUYOV-ZNgyLFq6.js → chunk-VJFVEZTB-CX66F2ep.js} +3 -3
  659. package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
  660. package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
  661. package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
  662. package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
  663. package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
  664. package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
  665. package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
  666. package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
  667. package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
  668. package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
  669. package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
  670. package/web/assets/{diagram-HNR7UZ2L-DVRltWbL.js → diagram-KFBZAVDW-Dfmf_4ti.js} +3 -3
  671. package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
  672. package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
  673. package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
  674. package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
  675. package/web/assets/error-D9MtuG9s.js +1 -0
  676. package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
  677. package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
  678. package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
  679. package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
  680. package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
  681. package/web/assets/{index-D7mTFcvQ.js → index-2zdvEdzg.js} +51 -51
  682. package/web/assets/index-CJDpyH-n.css +2 -0
  683. package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
  684. package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
  685. package/web/assets/{ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +2 -2
  686. package/web/assets/{journeyDiagram-M6C3CM3L-C6wjooas.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +3 -3
  687. package/web/assets/{kanban-definition-75IXJCU3-5_UVY79g.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +6 -6
  688. package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
  689. package/web/assets/{mindmap-definition-2TDM6QVE-8xDLzk2e.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +5 -5
  690. package/web/assets/node.browser-U-KyT5AW.js +1 -0
  691. package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
  692. package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
  693. package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
  694. package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
  695. package/web/assets/{quadrantDiagram-VICAPDV7-DR54jOeR.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +3 -3
  696. package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
  697. package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
  698. package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
  699. package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
  700. package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
  701. package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
  702. package/web/assets/{requirementDiagram-JXO7QTGE-PEkg7sKC.js → requirementDiagram-RASO5HTO-B-l8InpK.js} +4 -4
  703. package/web/assets/{sankeyDiagram-URQDO5SZ-DDWEtjcs.js → sankeyDiagram-F32LOJ6L-Kd7zjJgX.js} +3 -3
  704. package/web/assets/{sequenceDiagram-VS2MUI6T-Bv-uwANx.js → sequenceDiagram-URATNSBD-BlcdY9DS.js} +7 -7
  705. package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
  706. package/web/assets/src-C5sx_gMp.js +1 -0
  707. package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
  708. package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
  709. package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
  710. package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
  711. package/web/assets/{timeline-definition-O6YCAMPW-Qmsuo7qS.js → timeline-definition-WJXWRH4I-DUfp1R3E.js} +3 -3
  712. package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
  713. package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
  714. package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
  715. package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
  716. package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
  717. package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
  718. package/web/index.html +16 -15
  719. package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
  720. package/dist/core/ingestion/languages/python/index-stats.js +0 -25
  721. package/web/assets/ProcessFlowModal-CwkpVkv-.js +0 -22
  722. package/web/assets/agent-Ds-lkZjX.js +0 -626
  723. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
  724. package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +0 -36
  725. package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +0 -4
  726. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
  727. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
  728. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
  729. package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +0 -124
  730. package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +0 -10
  731. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
  732. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
  733. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
  734. package/web/assets/chunk-KGFNY3KK-BZeP-55u.js +0 -62
  735. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
  736. package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
  737. package/web/assets/chunk-LRIF4GLE-n59lhprL.js +0 -1
  738. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
  739. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
  740. package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +0 -1
  741. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
  742. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
  743. package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +0 -1
  744. package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +0 -2
  745. package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +0 -1
  746. package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +0 -1
  747. package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +0 -4
  748. package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +0 -43
  749. package/web/assets/diagram-GF46GFSD-B2atbzmU.js +0 -24
  750. package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +0 -24
  751. package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +0 -10
  752. package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +0 -85
  753. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
  754. package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +0 -162
  755. package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +0 -292
  756. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
  757. package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +0 -106
  758. package/web/assets/index-CX_fADmQ.css +0 -2
  759. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
  760. package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +0 -2
  761. package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
  762. package/web/assets/node-Ct_zna8U.js +0 -8
  763. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
  764. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
  765. package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +0 -30
  766. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
  767. package/web/assets/sdk-CzHHH8tD.js +0 -37
  768. package/web/assets/src-Cv1eWg0o.js +0 -1
  769. package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +0 -1
  770. package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +0 -1
  771. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
  772. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
  773. package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +0 -34
  774. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
  775. package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +0 -78
  776. package/web/assets/xychartDiagram-N2JHSOCM-CoZ_Tits.js +0 -7
  777. /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
@@ -34,6 +34,7 @@ import { isDev, isSemanticModelValidatorEnabled } from '../../utils/env.js';
34
34
  import { logHeapProbe } from '../../utils/heap-probe.js';
35
35
  import { clearParsedFileStore, loadParsedFilesForPaths, forceGc, } from '../../../../storage/parsedfile-store.js';
36
36
  import { buildFunctionNodeIndex } from '../../taint/summary-harvest-driver.js';
37
+ import { buildPropertyNameIndex } from '../passes/unique-name-properties.js';
37
38
  import { PdgEmitSink } from '../../../lbug/pdg-emit-sink.js';
38
39
  import { resolveNativeSafeStorageDir } from '../../../lbug/lbug-config.js';
39
40
  import { logger } from '../../../logger.js';
@@ -43,9 +44,11 @@ const NOOP_OUTPUT = Object.freeze({
43
44
  importsEmitted: 0,
44
45
  referenceEdgesEmitted: 0,
45
46
  resolutionOutcomes: [],
47
+ // Deliberately absent, not `[]`: nothing ran, so nothing was decided either.
46
48
  perLanguage: new Map(),
47
49
  functionSummaries: [],
48
50
  callSummaries: [],
51
+ propertyInference: { ambiguous: 0, ambiguousNames: [], crossLanguage: 0, crossLanguageNames: [] },
49
52
  });
50
53
  /** Select source files that must be materialized for one resolver pass. */
51
54
  export function selectScopeSourcePathsToRead(provider, primaryFilePaths, preExtractedByPath) {
@@ -118,6 +121,7 @@ export const scopeResolutionPhase = {
118
121
  let totalRefs = 0;
119
122
  let anyRan = false;
120
123
  const resolutionOutcomes = [];
124
+ const undecidedSatisfaction = [];
121
125
  // M4 (#2084 U1): per-function taint summaries accumulated across every
122
126
  // language pass; the cross-function fixpoint phase reads this output.
123
127
  const functionSummaries = [];
@@ -192,6 +196,13 @@ export const scopeResolutionPhase = {
192
196
  const sharedFnNodeIndex = ctx.options?.pdg === true && totalScopeFiles > 0
193
197
  ? buildFunctionNodeIndex(ctx.graph)
194
198
  : undefined;
199
+ // Same treatment for the `Property`-by-name index the unique-name pass
200
+ // consults: a whole-graph node scan, language-agnostic, and previously
201
+ // rebuilt inside every qualifying language pass. Language filtering happens
202
+ // at LOOKUP time against that language's own file set, so one shared index
203
+ // serves all of them without widening what any single language can resolve
204
+ // to.
205
+ const sharedPropertyNameIndex = totalScopeFiles > 0 ? buildPropertyNameIndex(ctx.graph) : undefined;
195
206
  // Streaming/chunked PDG emit (#2202): when enabled (the caller has already
196
207
  // gated this to full-rebuild + `--pdg`), route the BasicBlock + intra-file
197
208
  // PDG-edge layer to CSV-on-disk through one sink shared across every
@@ -223,6 +234,11 @@ export const scopeResolutionPhase = {
223
234
  // finalize/propagate/a provider hook) must still release the sink's file
224
235
  // descriptors. finalize() runs on the success path; the finally closes the
225
236
  // sink only when finalize did not (idempotent via the sink's `finalized`).
237
+ // R3-1 accumulators — see the warning after the language loop.
238
+ let crossLanguagePropertyReads = 0;
239
+ const crossLanguageAnchorsByName = new Map();
240
+ let ambiguousPropertyReads = 0;
241
+ const ambiguousPropertyNames = new Set();
226
242
  let pdgEmitManifest;
227
243
  let pdgSinkSettled = false;
228
244
  try {
@@ -322,6 +338,7 @@ export const scopeResolutionPhase = {
322
338
  files,
323
339
  resolutionConfig,
324
340
  prebuiltNodeLookup: sharedNodeLookup,
341
+ prebuiltPropertyNameIndex: sharedPropertyNameIndex,
325
342
  prebuiltFunctionNodeIndex: sharedFnNodeIndex,
326
343
  preExtractedParsedFiles: preExtractedByPath,
327
344
  scopeIndexStorePath: parsedFileStorePath,
@@ -406,6 +423,7 @@ export const scopeResolutionPhase = {
406
423
  processedScopeFiles += langFileCount;
407
424
  anyRan = true;
408
425
  functionSummaries.push(...stats.functionSummaries);
426
+ undecidedSatisfaction.push(...stats.undecidedSatisfaction);
409
427
  callSummaries.push(...stats.callSummaries);
410
428
  totalFiles += stats.filesProcessed;
411
429
  totalImports += stats.importsEmitted;
@@ -418,6 +436,35 @@ export const scopeResolutionPhase = {
418
436
  if (isDev) {
419
437
  logger.info(`[scope-resolution:${lang}] ${stats.filesProcessed} files → ${stats.importsEmitted} IMPORTS + ${stats.referenceEdgesEmitted} reference edges (${stats.resolve.unresolved} unresolved sites, ${stats.referenceSkipped} skipped)`);
420
438
  }
439
+ // R3-1. Accumulated across languages and reported once below, NOT gated
440
+ // on isDev: a field whose only definition lives in another language
441
+ // answers an empty ACCESSES query that is byte-identical to "unused",
442
+ // and that is the confident-empty failure this whole series removes.
443
+ ambiguousPropertyReads += stats.uniqueNamePropertyAmbiguous;
444
+ for (const n of stats.uniqueNamePropertyAmbiguousNames)
445
+ ambiguousPropertyNames.add(n);
446
+ crossLanguagePropertyReads += stats.uniqueNamePropertyCrossLanguage;
447
+ for (const entry of stats.uniqueNamePropertyCrossLanguageNames) {
448
+ const existing = crossLanguageAnchorsByName.get(entry.name);
449
+ if (existing === undefined) {
450
+ crossLanguageAnchorsByName.set(entry.name, new Set(entry.languages));
451
+ }
452
+ else {
453
+ for (const l of entry.languages)
454
+ existing.add(l);
455
+ }
456
+ }
457
+ }
458
+ if (crossLanguagePropertyReads > 0) {
459
+ const sample = Array.from(crossLanguageAnchorsByName)
460
+ .slice(0, 10)
461
+ .map(([name, langs]) => `${name} (${Array.from(langs).sort().join('/')})`)
462
+ .join(', ');
463
+ logger.warn(`[scope-resolution] ${crossLanguagePropertyReads} property read/write site(s) name a field ` +
464
+ `that IS defined in this workspace, but only in another language, so per-language inference ` +
465
+ `declined to link them. Queries for these fields return an empty result that does NOT mean ` +
466
+ `"unused" — it means the definition anchor is in a different language. ` +
467
+ `Affected: ${sample}${crossLanguageAnchorsByName.size > 10 ? ', …' : ''}`);
421
468
  }
422
469
  // Finalize the streaming PDG sink (#2202) once after the last language:
423
470
  // flush + close its CSV writers and capture the COPY manifest. forceGc at
@@ -464,10 +511,20 @@ export const scopeResolutionPhase = {
464
511
  importsEmitted: totalImports,
465
512
  referenceEdgesEmitted: totalRefs,
466
513
  resolutionOutcomes,
514
+ undecidedSatisfaction,
467
515
  perLanguage,
468
516
  functionSummaries,
469
517
  callSummaries,
470
518
  pdgEmitManifest,
519
+ propertyInference: {
520
+ ambiguous: ambiguousPropertyReads,
521
+ ambiguousNames: Array.from(ambiguousPropertyNames).sort().slice(0, 25),
522
+ crossLanguage: crossLanguagePropertyReads,
523
+ crossLanguageNames: Array.from(crossLanguageAnchorsByName)
524
+ .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
525
+ .slice(0, 25)
526
+ .map(([name, languages]) => ({ name, languages: Array.from(languages).sort() })),
527
+ },
471
528
  };
472
529
  },
473
530
  };
@@ -30,7 +30,8 @@ import { buildGraphNodeLookup } from '../graph-bridge/node-lookup.js';
30
30
  import { type FunctionNodeIndex } from '../../taint/summary-harvest-driver.js';
31
31
  import type { FunctionSummary } from '../../taint/summary-model.js';
32
32
  import type { CallSummary } from '../../taint/call-summary-model.js';
33
- import type { ScopeResolver } from '../contract/scope-resolver.js';
33
+ import { type PropertyNameIndex } from '../passes/unique-name-properties.js';
34
+ import type { ScopeResolver, UndecidedSatisfaction } from '../contract/scope-resolver.js';
34
35
  import type { ResolutionOutcome, ResolutionOutcomeRecorder } from '../resolution-outcome.js';
35
36
  export type ScopeResolutionSubPhase = 'extracting' | 'analyzing types' | 'resolving references' | 'linking symbols';
36
37
  interface RunScopeResolutionInput {
@@ -129,6 +130,14 @@ interface RunScopeResolutionInput {
129
130
  * (tests / isolated calls) it is built locally for the pdg-enabled language.
130
131
  */
131
132
  readonly prebuiltFunctionNodeIndex?: FunctionNodeIndex;
133
+ /**
134
+ * `Property`-by-name index built ONCE by the caller and shared across every
135
+ * language pass. Like the two above it is a whole-graph scan and is
136
+ * language-agnostic; the per-language restriction is applied at lookup time
137
+ * against that language's own file set, so sharing the index does not widen
138
+ * what any single language can resolve to. Built locally when omitted.
139
+ */
140
+ readonly prebuiltPropertyNameIndex?: PropertyNameIndex;
132
141
  /**
133
142
  * Opaque per-language import-resolution config (e.g. tsconfig path
134
143
  * aliases for TypeScript). Loaded once by the caller via
@@ -191,7 +200,52 @@ interface RunScopeResolutionStats {
191
200
  * #2437 false-safe gap for exactly those keys (names are in the warn log).
192
201
  */
193
202
  readonly propertyDispatchSkippedKeys: number;
203
+ /** Cross-file value references resolved through finalized import bindings. */
204
+ readonly importedValueRefEdges: number;
205
+ /**
206
+ * ACCESSES edges recovered by property NAME (A1/A5) — the last-resort pass
207
+ * for receivers no precise pass could type.
208
+ */
209
+ readonly uniqueNamePropertyEdges: number;
210
+ /**
211
+ * Read/write sites left unresolved because two or more `Property` defs share
212
+ * the name, so a unique-name match would have been a coin flip. This is the
213
+ * population a receiver-typing improvement would convert into precise edges.
214
+ */
215
+ readonly uniqueNamePropertyAmbiguous: number;
216
+ /**
217
+ * Of `uniqueNamePropertyEdges`, how many the name carried several definitions
218
+ * for and same-file or direct-import evidence narrowed to one. Strict
219
+ * workspace uniqueness refused every one of these (R2).
220
+ */
221
+ readonly uniqueNamePropertyNarrowed: number;
222
+ /**
223
+ * The distinct field names behind `uniqueNamePropertyAmbiguous`, capped. A
224
+ * count says a coverage gap exists; the names say WHICH fields are
225
+ * unanswerable, so the gap is actionable rather than merely measured.
226
+ */
227
+ readonly uniqueNamePropertyAmbiguousNames: readonly string[];
228
+ /**
229
+ * Read/write sites whose name IS defined in the workspace but only in another
230
+ * LANGUAGE, so per-language inference declined. Separate from
231
+ * `uniqueNamePropertyAmbiguous` because the remedy differs: ambiguity wants
232
+ * better receiver typing, this wants an anchor in the reading language (R3-1).
233
+ */
234
+ readonly uniqueNamePropertyCrossLanguage: number;
235
+ /** Those names with the languages their definitions actually live in. */
236
+ readonly uniqueNamePropertyCrossLanguageNames: readonly {
237
+ readonly name: string;
238
+ readonly languages: string[];
239
+ }[];
194
240
  readonly resolutionOutcomes: readonly ResolutionOutcome[];
241
+ /**
242
+ * Interfaces whose structural-satisfaction check could not be completed for
243
+ * at least one candidate type (#2873). NOT the same as "no implementors" —
244
+ * these are questions the analyzer could not answer, and they are reported so
245
+ * `impact` can hedge a zero instead of asserting one. Empty for every
246
+ * language whose resolver has no `detectInterfaceImplementations` hook.
247
+ */
248
+ readonly undecidedSatisfaction: readonly UndecidedSatisfaction[];
195
249
  /**
196
250
  * Per-function taint summaries harvested in the pdg window (#2084 M4 U1).
197
251
  * Empty unless `input.pdg === true` and the language has a registered taint
@@ -40,17 +40,22 @@ import { harvestFileCallSummaries } from '../../taint/summary-harvest-driver.js'
40
40
  import { resolveDefGraphId } from '../graph-bridge/ids.js';
41
41
  import { buildPopulatedMethodDispatch } from '../graph-bridge/method-dispatch.js';
42
42
  import { propagateImportedReturnTypes } from '../passes/imported-return-types.js';
43
- import { emitReceiverBoundCalls } from '../passes/receiver-bound-calls.js';
43
+ import { emitReceiverBoundCalls, MAX_INTERFACE_DISPATCH_FANOUT, } from '../passes/receiver-bound-calls.js';
44
44
  import { emitFreeCallFallback } from '../passes/free-call-fallback.js';
45
45
  import { emitPropertyDispatchCalls, MAX_PROPERTY_DISPATCH_FANOUT, } from '../passes/property-dispatch.js';
46
46
  import { emitReferencesViaLookup } from '../graph-bridge/references-to-edges.js';
47
+ import { buildPropertyNameIndex, emitUniqueNamePropertyAccesses, } from '../passes/unique-name-properties.js';
48
+ import { emitReturnShapeMemberAccesses } from '../passes/return-shape-members.js';
49
+ import { emitImportedValueReferences } from '../passes/imported-value-refs.js';
47
50
  import { createCalleeIdAccumulator, } from '../graph-bridge/callee-id-sink.js';
48
51
  import { emitImportEdges } from '../graph-bridge/imports-to-edges.js';
49
52
  import { callableFlowSiteKey, collectDeferredIndirectSites, emitCallableValueFlow, } from '../passes/callable-value-flow.js';
50
53
  import { findEnclosingClassDef, resolveInheritanceBaseInScope } from '../scope/walkers.js';
54
+ import { heritageTypeArgumentsKey, } from '../utils/generic-instantiation.js';
51
55
  import { buildWorkspaceResolutionIndex } from '../workspace-index.js';
52
56
  import { logHeapProbe } from '../../utils/heap-probe.js';
53
57
  import { parseTruthyEnv } from '../../utils/env.js';
58
+ import { isValueDefinitionLabel } from '../../utils/ast-helpers.js';
54
59
  import { TransitionalScopeTree } from '../../../../storage/scope-index-store.js';
55
60
  import { forceGc } from '../../../../storage/parsedfile-store.js';
56
61
  import { logger } from '../../../logger.js';
@@ -90,8 +95,18 @@ function emitInheritanceEdgeDirect(graph, seen, existing, callerGraphId, targetG
90
95
  * reference-edge bridge from re-emitting the same sites later.
91
96
  *
92
97
  * @returns Site keys to seed the downstream handled-site skip set.
98
+ *
99
+ * The generic INSTANTIATION each heritage edge was written with (#2912) goes to
100
+ * `recordTypeArguments` rather than out through the return, because the caller
101
+ * shares that sink with the language heritage hook — see
102
+ * `HeritageTypeArguments` in `utils/generic-instantiation.ts`. This pass is
103
+ * where the pairing exists at all: the site carries the arguments and this is
104
+ * the only code that resolves the site to a (subtype, supertype) pair, so
105
+ * recording it here costs one map write per generic heritage edge, while
106
+ * recovering it downstream would mean redoing the resolution against a graph
107
+ * edge that no longer carries the spelling.
93
108
  */
94
- function preEmitInheritanceEdges(graph, scopes, nodeLookup) {
109
+ function preEmitInheritanceEdges(graph, scopes, nodeLookup, recordTypeArguments) {
95
110
  const handledSites = new Set();
96
111
  const seen = new Set();
97
112
  // Tracks inheritance edges emitted during this pass so the structural
@@ -104,9 +119,7 @@ function preEmitInheritanceEdges(graph, scopes, nodeLookup) {
104
119
  if (site.kind !== 'inherits')
105
120
  continue;
106
121
  const scope = scopes.scopeTree.getScope(site.inScope);
107
- const siteKey = scope?.filePath !== undefined
108
- ? `${scope.filePath}:${site.atRange.startLine}:${site.atRange.startCol}`
109
- : undefined;
122
+ const siteKey = scope?.filePath !== undefined ? callableFlowSiteKey(scope.filePath, site.atRange) : undefined;
110
123
  if (siteKey !== undefined) {
111
124
  // Intentionally suppress every `inherits` site from the generic
112
125
  // reference bridge, even when this pre-pass can't emit an EXTENDS
@@ -139,6 +152,12 @@ function preEmitInheritanceEdges(graph, scopes, nodeLookup) {
139
152
  // EXTENDS branch, so such languages are unchanged.
140
153
  const edgeType = targetDef.type === 'Interface' || targetDef.type === 'Trait' ? 'IMPLEMENTS' : 'EXTENDS';
141
154
  emitInheritanceEdgeDirect(graph, seen, existing, callerGraphId, targetGraphId, edgeType, site);
155
+ // The instantiation this heritage clause wrote (`: IValidator<string>`),
156
+ // keyed by the same graph-id pair the edge itself carries. Only generic
157
+ // bases produce an entry; the sink owns the first-writer-wins rule.
158
+ if (site.typeArguments !== undefined) {
159
+ recordTypeArguments(callerGraphId, targetGraphId, site.typeArguments);
160
+ }
142
161
  }
143
162
  return handledSites;
144
163
  }
@@ -156,7 +175,7 @@ function preEmitInheritanceEdges(graph, scopes, nodeLookup) {
156
175
  */
157
176
  function emitDetectedInterfaceImplementations(graph, parsedFiles, nodeLookup, provider, indexes, model) {
158
177
  if (provider.detectInterfaceImplementations === undefined)
159
- return 0;
178
+ return [];
160
179
  const graphIdByDefId = new Map();
161
180
  for (const parsed of parsedFiles) {
162
181
  for (const def of parsed.localDefs) {
@@ -171,14 +190,13 @@ function emitDetectedInterfaceImplementations(graph, parsedFiles, nodeLookup, pr
171
190
  for (const rel of graph.iterRelationshipsByType('IMPLEMENTS')) {
172
191
  existing.add(`${rel.sourceId}->${rel.targetId}`);
173
192
  }
174
- let emitted = 0;
175
193
  const detected = provider.detectInterfaceImplementations(parsedFiles, indexes, model);
176
- for (const [interfaceDefId, implementorDefIds] of detected) {
194
+ for (const [interfaceDefId, implementorDefIds] of detected.implementations) {
177
195
  const targetId = graphIdByDefId.get(interfaceDefId);
178
196
  if (targetId === undefined)
179
197
  continue;
180
- for (const implementorDefId of implementorDefIds) {
181
- const sourceId = graphIdByDefId.get(implementorDefId);
198
+ for (const implementor of implementorDefIds) {
199
+ const sourceId = graphIdByDefId.get(implementor.structDefId);
182
200
  if (sourceId === undefined)
183
201
  continue;
184
202
  const edgeKey = `${sourceId}->${targetId}`;
@@ -191,18 +209,30 @@ function emitDetectedInterfaceImplementations(graph, parsedFiles, nodeLookup, pr
191
209
  targetId,
192
210
  type: 'IMPLEMENTS',
193
211
  confidence: 0.85,
194
- reason: `${provider.language}-structural-implements`,
212
+ // The receiver form rides in `reason` because relationships carry no
213
+ // arbitrary properties — adding one would change the relation DDL and
214
+ // move SCHEMA_FINGERPRINT, forcing a full re-analyze for a fact that a
215
+ // string already expresses. `-pointer` means ONLY the pointer type
216
+ // implements: `var x I = T{}` is invalid, `var x I = &T{}` is fine.
217
+ // The unsuffixed form is unchanged from before, so a consumer matching
218
+ // the old string keeps seeing exactly the value-form implementors.
219
+ reason: implementor.receiverForm === 'pointer'
220
+ ? `${provider.language}-structural-implements-pointer`
221
+ : `${provider.language}-structural-implements`,
195
222
  });
196
- emitted++;
197
223
  }
198
224
  }
199
- return emitted;
225
+ // The interfaces this provider could not decide. They mint no edges — they
226
+ // exist so a query can report a lower bound instead of a confident zero
227
+ // (#2873); see `undecided-satisfaction.ts`.
228
+ return detected.undecided;
200
229
  }
201
230
  export function runScopeResolution(input, provider) {
202
231
  const { graph, files } = input;
203
232
  const callableFlowOnly = provider.scopeResolutionEdgeMode === 'callable-flow-only';
204
233
  const onWarn = input.onWarn ?? (() => { });
205
234
  const resolutionOutcomes = [];
235
+ const undecidedSatisfaction = [];
206
236
  const recordResolutionOutcome = (outcome) => {
207
237
  resolutionOutcomes.push(outcome);
208
238
  input.recordResolutionOutcome?.(outcome);
@@ -289,7 +319,15 @@ export function runScopeResolution(input, provider) {
289
319
  referenceEdgesEmitted: 0,
290
320
  referenceSkipped: 0,
291
321
  propertyDispatchSkippedKeys: 0,
322
+ importedValueRefEdges: 0,
323
+ uniqueNamePropertyEdges: 0,
324
+ uniqueNamePropertyAmbiguous: 0,
325
+ uniqueNamePropertyNarrowed: 0,
326
+ uniqueNamePropertyAmbiguousNames: [],
327
+ uniqueNamePropertyCrossLanguage: 0,
328
+ uniqueNamePropertyCrossLanguageNames: [],
292
329
  resolutionOutcomes,
330
+ undecidedSatisfaction,
293
331
  functionSummaries: [],
294
332
  callSummaries: [],
295
333
  };
@@ -316,7 +354,15 @@ export function runScopeResolution(input, provider) {
316
354
  referenceEdgesEmitted: 0,
317
355
  referenceSkipped: 0,
318
356
  propertyDispatchSkippedKeys: 0,
357
+ importedValueRefEdges: 0,
358
+ uniqueNamePropertyEdges: 0,
359
+ uniqueNamePropertyAmbiguous: 0,
360
+ uniqueNamePropertyNarrowed: 0,
361
+ uniqueNamePropertyAmbiguousNames: [],
362
+ uniqueNamePropertyCrossLanguage: 0,
363
+ uniqueNamePropertyCrossLanguageNames: [],
319
364
  resolutionOutcomes,
365
+ undecidedSatisfaction,
320
366
  functionSummaries: [],
321
367
  callSummaries: [],
322
368
  };
@@ -335,21 +381,36 @@ export function runScopeResolution(input, provider) {
335
381
  parsedFiles,
336
382
  parsedImport,
337
383
  }),
384
+ isNamespaceImport: (parsedImport, targetFile, fromFile) => provider.isNamespaceImport?.(parsedImport, targetFile, fromFile) ?? false,
338
385
  expandsWildcardTo: (targetModuleScope) => provider.expandsWildcardTo?.(targetModuleScope, parsedFiles) ?? [],
339
386
  mergeBindings: (existing, incoming, scopeId) => provider.mergeBindings(existing, incoming, scopeId),
340
387
  },
341
388
  });
342
389
  logHeapProbe('sr-post-finalize', `lang=${provider.language}`);
390
+ // One store and ONE writer rule for heritage instantiations (#2912), shared by
391
+ // the pre-pass below and by the language hook further down — a heritage shape
392
+ // the pre-pass cannot express (Rust `impl T for S`, Dart `implements`) records
393
+ // through the same sink. FIRST writer wins: a repeated (sub, super) pair is a
394
+ // partial declaration or a re-listed base, and letting a later entry overwrite
395
+ // the first would make dispatch depend on file order.
396
+ const heritageTypeArguments = new Map();
397
+ const recordHeritageTypeArguments = (subtypeGraphId, supertypeGraphId, typeArguments) => {
398
+ if (typeArguments.length === 0)
399
+ return;
400
+ const key = heritageTypeArgumentsKey(subtypeGraphId, supertypeGraphId);
401
+ if (!heritageTypeArguments.has(key))
402
+ heritageTypeArguments.set(key, typeArguments);
403
+ };
343
404
  const preEmittedInheritanceSites = callableFlowOnly
344
405
  ? new Set()
345
- : preEmitInheritanceEdges(graph, finalized, nodeLookup);
406
+ : preEmitInheritanceEdges(graph, finalized, nodeLookup, recordHeritageTypeArguments);
346
407
  // Call-based heritage hook (e.g., Ruby include/extend/prepend) — emits
347
408
  // IMPLEMENTS edges that `preEmitInheritanceEdges` cannot produce because
348
409
  // the heritage declarations are syntactic method calls, not grammar-level
349
410
  // heritage clauses. Must run BEFORE `buildMro` so MRO construction sees
350
411
  // the freshly-emitted IMPLEMENTS edges.
351
412
  if (!callableFlowOnly) {
352
- provider.emitHeritageEdges?.(graph, parsedFiles, nodeLookup, finalized);
413
+ provider.emitHeritageEdges?.(graph, parsedFiles, nodeLookup, finalized, recordHeritageTypeArguments);
353
414
  }
354
415
  // Implicit IMPORTS-edge hook — for languages whose files have compiler-
355
416
  // implicit cross-file visibility (no syntactic import statement). The
@@ -368,7 +429,7 @@ export function runScopeResolution(input, provider) {
368
429
  ? buildGraphNodeLookup(graph)
369
430
  : nodeLookup;
370
431
  if (!callableFlowOnly) {
371
- emitDetectedInterfaceImplementations(graph, parsedFiles, postHeritageNodeLookup, provider, finalized, readonlyModel);
432
+ undecidedSatisfaction.push(...emitDetectedInterfaceImplementations(graph, parsedFiles, postHeritageNodeLookup, provider, finalized, readonlyModel));
372
433
  }
373
434
  const mroByClassDefId = provider.buildMro(graph, parsedFiles, postHeritageNodeLookup);
374
435
  const extendsOnlyMroByClassDefId = provider.buildExtendsOnlyMro?.(graph, parsedFiles, postHeritageNodeLookup);
@@ -447,6 +508,76 @@ export function runScopeResolution(input, provider) {
447
508
  });
448
509
  const tResolve = PROF ? process.hrtime.bigint() : 0n;
449
510
  logHeapProbe('sr-post-resolve', `lang=${provider.language}`);
511
+ // Value defs bound at MODULE LEVEL. A read of a block-local `const` must not
512
+ // mint an edge — that would retain the inert locals `pruneLocalSymbols` drops.
513
+ //
514
+ // Built HERE, above the out-of-core seal, and deliberately from `parsedFiles`
515
+ // rather than `emitParsedFiles`. The seal below replaces the latter with a
516
+ // scope-STRIPPED copy, so building this after it walked `scopes: []` for every
517
+ // file and produced an empty set — which the filter then reads as "no def is
518
+ // module-level" and drops EVERY `Const`/`Variable`/`Static` ACCESSES edge in
519
+ // the repo, in all languages, on the one path (`GITNEXUS_DISK_SCOPE_INDEX=1`)
520
+ // taken by the largest repos. Nothing failed and nothing logged; the edges
521
+ // were simply absent, which is the confident-empty answer this PR exists to
522
+ // remove.
523
+ //
524
+ // ── The question is "is this def FUNCTION-LOCAL?", so ask exactly that ──
525
+ //
526
+ // This was first written as an ALLOWLIST of module-scope value defs, and that
527
+ // shape carried a defect that only shows outside JavaScript. A value def is
528
+ // not partitioned into {module-level, block-local}; there is a third home —
529
+ // a CLASS body. Java/C# fields and Python class attributes live there, and an
530
+ // allowlist keyed on "module level" excludes all of them by construction.
531
+ // Worse, the guard written to make that safe could not fire: the set is armed
532
+ // whenever a Module scope is FOUND, and Java has module scopes while having no
533
+ // module-level values at all, so for Java it armed permanently empty.
534
+ //
535
+ // Inverting it removes the whole class. A BLOCKLIST of defs positively
536
+ // identified as function-local fails safe: anything the walk does not
537
+ // recognise — a Java field, a Python class attribute, a language whose scopes
538
+ // could not be inspected at all — is emitted rather than dropped. That also
539
+ // retires `moduleScopesInspected`; there is nothing left to arm, because an
540
+ // empty blocklist and an uninspected one mean the same thing and both mean
541
+ // "emit". The failure mode moves from "silently deletes a whole edge class"
542
+ // to "retains an inert local", which is the direction this work wants.
543
+ //
544
+ // Built HERE, above the out-of-core seal, and deliberately from `parsedFiles`
545
+ // rather than `emitParsedFiles`. The seal below replaces the latter with a
546
+ // scope-STRIPPED copy, so building this after it walked `scopes: []` for every
547
+ // file and produced an empty set. Under the old allowlist that read as "no def
548
+ // is module-level" and dropped EVERY `Const`/`Variable`/`Static` ACCESSES edge
549
+ // in the repo on the one path (`GITNEXUS_DISK_SCOPE_INDEX=1`) taken by the
550
+ // largest repos. Under the blocklist the same mistake would merely stop
551
+ // filtering — still wrong, still worth the ordering, no longer catastrophic.
552
+ //
553
+ // A scope is function-local when its chain to the root passes through a
554
+ // `Function`. `Block`/`Expression`/`Object` alone are not enough: a bare block
555
+ // at module level still holds module-level values, and a `Namespace` nested in
556
+ // a function IS local, which the chain walk gets right for free.
557
+ const functionLocalValueDefIds = new Set();
558
+ for (const parsed of parsedFiles) {
559
+ const scopeById = new Map(parsed.scopes.map((sc) => [sc.id, sc]));
560
+ for (const scope of parsed.scopes) {
561
+ let cursor = scope;
562
+ let insideFunction = false;
563
+ while (cursor !== undefined) {
564
+ if (cursor.kind === 'Function') {
565
+ insideFunction = true;
566
+ break;
567
+ }
568
+ cursor = cursor.parent === null ? undefined : scopeById.get(cursor.parent);
569
+ }
570
+ if (!insideFunction)
571
+ continue;
572
+ for (const [, refs] of scope.bindings) {
573
+ for (const ref of refs) {
574
+ if (isValueDefinitionLabel(ref.def.type)) {
575
+ functionLocalValueDefIds.add(ref.def.nodeId);
576
+ }
577
+ }
578
+ }
579
+ }
580
+ }
450
581
  // ── Out-of-core scope seal boundary ─────────────────────────────────────
451
582
  // Pass-A (finalize + propagate + resolve) is done; all whole-language reads
452
583
  // of `Scope.bindings` are behind us. Emit reaches scopes ONLY via
@@ -494,12 +625,37 @@ export function runScopeResolution(input, provider) {
494
625
  ? undefined
495
626
  : (filePath, line, col) => callableArgumentSites.has(`${filePath}:${line}:${col}`))
496
627
  : undefined;
497
- const receiverExtras = callableFlowOnly
498
- ? 0
628
+ const receiverBound = callableFlowOnly
629
+ ? {
630
+ emitted: 0,
631
+ dispatchFanoutSkipped: 0,
632
+ dispatchFanoutSkippedNames: [],
633
+ }
499
634
  : emitReceiverBoundCalls(graph, indexes, emitParsedFiles, postHeritageNodeLookup, handledSites, provider, workspaceIndex, readonlyModel, {
500
635
  recordResolutionOutcome,
501
636
  calleeIdSink: calleeIdAccumulator,
637
+ // The pass's only source of positive EXTERNAL evidence for a dropped
638
+ // receiver (`console.log`, `fetch(...)`). Same hook, same spelling as
639
+ // the `emitFreeCallFallback` wiring below.
640
+ isBuiltInName: provider.languageProvider.isBuiltInName,
641
+ // What each heritage clause instantiated its base with, so the
642
+ // interface-dispatch fan-out can refuse an incompatible instantiation
643
+ // (#2912). Empty under `callableFlowOnly`, which emits no dispatch.
644
+ heritageTypeArguments,
502
645
  });
646
+ const receiverExtras = receiverBound.emitted;
647
+ if (receiverBound.dispatchFanoutSkipped > 0) {
648
+ // Never drop dispatch coverage silently (#2829) — same contract as the
649
+ // property-dispatch cap below. An interface member over the cap loses real
650
+ // implementors, so `impact()` on those implementations under-reports; an
651
+ // operator has to be able to see WHICH member lost them.
652
+ logger.warn({
653
+ lang: provider.language,
654
+ dispatchFanoutSkipped: receiverBound.dispatchFanoutSkipped,
655
+ dispatchFanoutSkippedNames: receiverBound.dispatchFanoutSkippedNames,
656
+ fanoutCap: MAX_INTERFACE_DISPATCH_FANOUT,
657
+ }, 'interface-dispatch: members over the fan-out cap dropped implementors (their CALLS edges were not emitted)');
658
+ }
503
659
  const unresolvedReceiverExtras = !callableFlowOnly && provider.emitUnresolvedReceiverEdges !== undefined
504
660
  ? provider.emitUnresolvedReceiverEdges(graph, indexes, emitParsedFiles, postHeritageNodeLookup, handledSites, readonlyModel)
505
661
  : 0;
@@ -513,6 +669,7 @@ export function runScopeResolution(input, provider) {
513
669
  freeCallsRequireInstanceOwnership: provider.freeCallsRequireInstanceOwnership === true,
514
670
  isCallableVisibleFromCaller: provider.isCallableVisibleFromCaller,
515
671
  resolveAdlCandidates: provider.resolveAdlCandidates,
672
+ resolveQualifiedFreeCall: provider.resolveQualifiedFreeCall,
516
673
  conversionRankFn: provider.conversionRankFn,
517
674
  conversionOnlyArgTypePrefixes: provider.conversionOnlyArgTypePrefixes,
518
675
  constraintCompatibility: provider.constraintCompatibility,
@@ -525,7 +682,64 @@ export function runScopeResolution(input, provider) {
525
682
  referenceSkipSites.add(key);
526
683
  const { emitted, skipped } = callableFlowOnly
527
684
  ? { emitted: 0, skipped: 0 }
528
- : emitReferencesViaLookup(graph, indexes, referenceIndex, postHeritageNodeLookup, referenceSkipSites, calleeIdAccumulator);
685
+ : emitReferencesViaLookup(graph, indexes, referenceIndex, postHeritageNodeLookup, referenceSkipSites, calleeIdAccumulator,
686
+ // A blocklist, so it needs no arming: empty means "nothing identified as
687
+ // function-local", which is also what an uninspected repo means, and
688
+ // both correctly emit. See the build site above for why the earlier
689
+ // allowlist could not be made safe this way.
690
+ functionLocalValueDefIds);
691
+ // Last-resort property resolution by workspace-unique name (A1/A5). Runs
692
+ // after every precise pass and only sees what they left behind, so a
693
+ // scope-resolved target always wins. Sites the generic bridge already
694
+ // resolved are excluded explicitly: `graph.addRelationship` is
695
+ // first-write-wins per edge id, which stops a DUPLICATE but not a second
696
+ // edge to a DIFFERENT target, and second-guessing a resolved receiver is
697
+ // exactly the wrong-edge-in-the-safety-gate case this must not create.
698
+ const uniqueNameSkipSites = new Set(referenceSkipSites);
699
+ for (const [fromScope, refs] of referenceIndex.bySourceScope) {
700
+ const fromFilePath = indexes.scopeTree.getScope(fromScope)?.filePath;
701
+ if (fromFilePath === undefined)
702
+ continue;
703
+ for (const ref of refs) {
704
+ uniqueNameSkipSites.add(callableFlowSiteKey(fromFilePath, ref.atRange));
705
+ }
706
+ }
707
+ // Gated on the language's own field-name-fallback policy. A statically-typed
708
+ // language sets `fieldFallbackOnMethodLookup: false` precisely because
709
+ // matching a member by name over-connects when a real type system could have
710
+ // answered exactly; inferring an ACCESSES edge by name is the same claim, so
711
+ // it must obey the same opt-out rather than route around it.
712
+ // Cross-file value references (A2): the read/write counterpart to
713
+ // `emitFreeCallFallback`. Runs BEFORE unique-name inference so a precise
714
+ // import-resolved target always wins over a name guess.
715
+ const importedValueRefs = callableFlowOnly
716
+ ? { emitted: 0 }
717
+ : emitImportedValueReferences(graph, indexes, emitParsedFiles, postHeritageNodeLookup, uniqueNameSkipSites);
718
+ // A language that opts out of name fallback still gets DETECTION. Skipping
719
+ // the pass outright also skipped its reporting, so a TypeScript read whose
720
+ // only anchor is JavaScript answered the same silent empty as the JS-read /
721
+ // TS-anchor case R3-1 was filed about — the identical defect, mirrored.
722
+ // `reportOnly` counts without emitting: no edge, no inference, no change to
723
+ // what the opt-out protects.
724
+ // PRECISE first (R3-5). A call result's return shape names WHICH producer a
725
+ // receiver holds, so it answers exactly the case name inference must refuse:
726
+ // several functions returning the same field name. Sites it resolves are
727
+ // added to the skip set, so the fallback below never second-guesses them.
728
+ const sharedPropertyIndex = input.prebuiltPropertyNameIndex ?? buildPropertyNameIndex(graph);
729
+ const returnShapeMembers = callableFlowOnly
730
+ ? { emitted: 0, memberNotOnShape: 0 }
731
+ : emitReturnShapeMemberAccesses(graph, indexes, emitParsedFiles, postHeritageNodeLookup, uniqueNameSkipSites, sharedPropertyIndex, uniqueNameSkipSites);
732
+ const nameFallbackDisabled = provider.fieldFallbackOnMethodLookup === false;
733
+ const uniqueNameProperties = callableFlowOnly
734
+ ? {
735
+ emitted: 0,
736
+ ambiguous: 0,
737
+ narrowed: 0,
738
+ ambiguousNames: [],
739
+ crossLanguageOnly: 0,
740
+ crossLanguageOnlyNames: [],
741
+ }
742
+ : emitUniqueNamePropertyAccesses(graph, indexes, emitParsedFiles, postHeritageNodeLookup, uniqueNameSkipSites, finalized, sharedPropertyIndex, nameFallbackDisabled);
529
743
  // value-ref registrations (#2437): USES edges at the registration sites
530
744
  // plus field-based dispatch — synthesized CALLS from member-call sites to
531
745
  // functions registered under the same property key. This runs after the
@@ -933,7 +1147,15 @@ export function runScopeResolution(input, provider) {
933
1147
  propertyDispatch.callsEmitted,
934
1148
  referenceSkipped: skipped,
935
1149
  propertyDispatchSkippedKeys: propertyDispatch.skippedKeys,
1150
+ importedValueRefEdges: importedValueRefs.emitted,
1151
+ uniqueNamePropertyEdges: uniqueNameProperties.emitted,
1152
+ uniqueNamePropertyAmbiguous: uniqueNameProperties.ambiguous,
1153
+ uniqueNamePropertyNarrowed: uniqueNameProperties.narrowed,
1154
+ uniqueNamePropertyAmbiguousNames: uniqueNameProperties.ambiguousNames,
1155
+ uniqueNamePropertyCrossLanguage: uniqueNameProperties.crossLanguageOnly,
1156
+ uniqueNamePropertyCrossLanguageNames: uniqueNameProperties.crossLanguageOnlyNames,
936
1157
  resolutionOutcomes,
1158
+ undecidedSatisfaction,
937
1159
  functionSummaries: harvestedSummaries,
938
1160
  callSummaries: harvestedCallSummaries,
939
1161
  };