gitnexus 1.6.10-rc.99 → 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 (775) 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/cluster-enricher.js +8 -4
  126. package/dist/core/ingestion/community-processor.d.ts +21 -3
  127. package/dist/core/ingestion/community-processor.js +81 -82
  128. package/dist/core/ingestion/di-extractors/index.d.ts +9 -33
  129. package/dist/core/ingestion/di-extractors/spring.d.ts +1 -1
  130. package/dist/core/ingestion/di-extractors/spring.js +8 -1
  131. package/dist/core/ingestion/di-extractors/types.d.ts +60 -0
  132. package/dist/core/ingestion/di-extractors/types.js +15 -0
  133. package/dist/core/ingestion/filesystem-walker.js +30 -14
  134. package/dist/core/ingestion/finalize-orchestrator.js +1 -0
  135. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +6 -0
  136. package/dist/core/ingestion/frameworks/spring/analysis-features.js +35 -1
  137. package/dist/core/ingestion/frameworks/spring/annotation-arguments.d.ts +13 -0
  138. package/dist/core/ingestion/frameworks/spring/annotation-arguments.js +227 -0
  139. package/dist/core/ingestion/frameworks/spring/aop-candidates.d.ts +15 -0
  140. package/dist/core/ingestion/frameworks/spring/aop-candidates.js +85 -0
  141. package/dist/core/ingestion/frameworks/spring/aop.d.ts +118 -0
  142. package/dist/core/ingestion/frameworks/spring/aop.js +476 -0
  143. package/dist/core/ingestion/frameworks/spring/auto-configuration.d.ts +8 -0
  144. package/dist/core/ingestion/frameworks/spring/auto-configuration.js +16 -0
  145. package/dist/core/ingestion/frameworks/spring/bean-catalog.js +1 -0
  146. package/dist/core/ingestion/frameworks/spring/bean-factories.d.ts +33 -0
  147. package/dist/core/ingestion/frameworks/spring/bean-factories.js +65 -0
  148. package/dist/core/ingestion/frameworks/spring/conditionals.d.ts +25 -0
  149. package/dist/core/ingestion/frameworks/spring/conditionals.js +319 -0
  150. package/dist/core/ingestion/frameworks/spring/di-metadata.d.ts +3 -0
  151. package/dist/core/ingestion/frameworks/spring/di-metadata.js +162 -13
  152. package/dist/core/ingestion/frameworks/spring/non-http-handlers.d.ts +28 -0
  153. package/dist/core/ingestion/frameworks/spring/non-http-handlers.js +152 -0
  154. package/dist/core/ingestion/frameworks/spring/resource-injection.d.ts +5 -0
  155. package/dist/core/ingestion/frameworks/spring/resource-injection.js +91 -0
  156. package/dist/core/ingestion/import-resolvers/configs/csharp.js +5 -1
  157. package/dist/core/ingestion/import-resolvers/configs/swift.js +13 -0
  158. package/dist/core/ingestion/import-resolvers/csharp.d.ts +9 -1
  159. package/dist/core/ingestion/import-resolvers/csharp.js +234 -27
  160. package/dist/core/ingestion/import-resolvers/go.d.ts +11 -1
  161. package/dist/core/ingestion/import-resolvers/go.js +44 -17
  162. package/dist/core/ingestion/import-resolvers/jvm.d.ts +2 -2
  163. package/dist/core/ingestion/import-resolvers/node-workspace-packages.d.ts +90 -0
  164. package/dist/core/ingestion/import-resolvers/node-workspace-packages.js +429 -0
  165. package/dist/core/ingestion/import-resolvers/package-dir-index.d.ts +124 -0
  166. package/dist/core/ingestion/import-resolvers/package-dir-index.js +223 -0
  167. package/dist/core/ingestion/import-resolvers/pass-cache.d.ts +50 -0
  168. package/dist/core/ingestion/import-resolvers/pass-cache.js +60 -0
  169. package/dist/core/ingestion/import-resolvers/per-file-set.d.ts +71 -0
  170. package/dist/core/ingestion/import-resolvers/per-file-set.js +11 -0
  171. package/dist/core/ingestion/import-resolvers/php.d.ts +1 -1
  172. package/dist/core/ingestion/import-resolvers/php.js +65 -19
  173. package/dist/core/ingestion/import-resolvers/python-file-index.d.ts +201 -0
  174. package/dist/core/ingestion/import-resolvers/python-file-index.js +302 -0
  175. package/dist/core/ingestion/import-resolvers/python.js +25 -6
  176. package/dist/core/ingestion/import-resolvers/ruby.d.ts +1 -1
  177. package/dist/core/ingestion/import-resolvers/rust.d.ts +2 -2
  178. package/dist/core/ingestion/import-resolvers/standard.d.ts +1 -1
  179. package/dist/core/ingestion/import-resolvers/types.d.ts +1 -12
  180. package/dist/core/ingestion/import-resolvers/utils.d.ts +65 -6
  181. package/dist/core/ingestion/import-resolvers/utils.js +215 -36
  182. package/dist/core/ingestion/import-resolvers/workspace-file-index.d.ts +72 -0
  183. package/dist/core/ingestion/import-resolvers/workspace-file-index.js +58 -0
  184. package/dist/core/ingestion/language-config.d.ts +29 -1
  185. package/dist/core/ingestion/language-config.js +110 -35
  186. package/dist/core/ingestion/language-provider.d.ts +209 -7
  187. package/dist/core/ingestion/language-provider.js +37 -0
  188. package/dist/core/ingestion/languages/c/captures.js +7 -0
  189. package/dist/core/ingestion/languages/c/import-target.js +12 -16
  190. package/dist/core/ingestion/languages/c/scope-resolver.js +20 -19
  191. package/dist/core/ingestion/languages/c/static-linkage.js +12 -16
  192. package/dist/core/ingestion/languages/c-cpp.js +13 -0
  193. package/dist/core/ingestion/languages/cobol/scope-resolver.js +27 -20
  194. package/dist/core/ingestion/languages/cobol.js +13 -0
  195. package/dist/core/ingestion/languages/cpp/adl.d.ts +2 -2
  196. package/dist/core/ingestion/languages/cpp/adl.js +67 -44
  197. package/dist/core/ingestion/languages/cpp/captures.js +14 -2
  198. package/dist/core/ingestion/languages/cpp/file-local-linkage.js +11 -15
  199. package/dist/core/ingestion/languages/cpp/inline-namespaces.d.ts +28 -8
  200. package/dist/core/ingestion/languages/cpp/inline-namespaces.js +242 -68
  201. package/dist/core/ingestion/languages/cpp/interpret.d.ts +2 -0
  202. package/dist/core/ingestion/languages/cpp/interpret.js +126 -6
  203. package/dist/core/ingestion/languages/cpp/query.js +106 -0
  204. package/dist/core/ingestion/languages/cpp/scope-resolver.js +48 -20
  205. package/dist/core/ingestion/languages/csharp/accessor-unwrap.d.ts +2 -15
  206. package/dist/core/ingestion/languages/csharp/accessor-unwrap.js +18 -10
  207. package/dist/core/ingestion/languages/csharp/captures.js +19 -0
  208. package/dist/core/ingestion/languages/csharp/import-target.js +46 -72
  209. package/dist/core/ingestion/languages/csharp/namespace-siblings.js +5 -1
  210. package/dist/core/ingestion/languages/csharp/query.js +25 -5
  211. package/dist/core/ingestion/languages/csharp/scope-resolver.js +75 -2
  212. package/dist/core/ingestion/languages/dart/captures.d.ts +10 -0
  213. package/dist/core/ingestion/languages/dart/captures.js +598 -16
  214. package/dist/core/ingestion/languages/dart/import-target.js +32 -9
  215. package/dist/core/ingestion/languages/dart/index.d.ts +1 -1
  216. package/dist/core/ingestion/languages/dart/index.js +1 -1
  217. package/dist/core/ingestion/languages/dart/query.js +98 -1
  218. package/dist/core/ingestion/languages/dart/scope-resolver.js +14 -3
  219. package/dist/core/ingestion/languages/dart/simple-hooks.js +9 -0
  220. package/dist/core/ingestion/languages/dart.js +6 -1
  221. package/dist/core/ingestion/languages/go/captures.js +108 -3
  222. package/dist/core/ingestion/languages/go/generic-type-parameters.d.ts +31 -0
  223. package/dist/core/ingestion/languages/go/generic-type-parameters.js +140 -0
  224. package/dist/core/ingestion/languages/go/import-target.d.ts +3 -10
  225. package/dist/core/ingestion/languages/go/import-target.js +34 -30
  226. package/dist/core/ingestion/languages/go/index.d.ts +1 -1
  227. package/dist/core/ingestion/languages/go/interface-impls.d.ts +9 -1
  228. package/dist/core/ingestion/languages/go/interface-impls.js +693 -87
  229. package/dist/core/ingestion/languages/go/interpret.d.ts +2 -0
  230. package/dist/core/ingestion/languages/go/interpret.js +22 -8
  231. package/dist/core/ingestion/languages/go/method-owners.js +31 -12
  232. package/dist/core/ingestion/languages/go/package-clause.d.ts +46 -0
  233. package/dist/core/ingestion/languages/go/package-clause.js +75 -0
  234. package/dist/core/ingestion/languages/go/package-siblings.js +7 -11
  235. package/dist/core/ingestion/languages/go/query.js +56 -3
  236. package/dist/core/ingestion/languages/go/scope-resolver.js +39 -0
  237. package/dist/core/ingestion/languages/go.js +9 -0
  238. package/dist/core/ingestion/languages/java/analysis-features.d.ts +4 -0
  239. package/dist/core/ingestion/languages/java/analysis-features.js +12 -0
  240. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +12 -0
  241. package/dist/core/ingestion/languages/java/capture-side-channel.js +48 -0
  242. package/dist/core/ingestion/languages/java/captures.js +77 -32
  243. package/dist/core/ingestion/languages/java/import-target.d.ts +49 -9
  244. package/dist/core/ingestion/languages/java/import-target.js +68 -88
  245. package/dist/core/ingestion/languages/java/interpret.js +3 -2
  246. package/dist/core/ingestion/languages/java/module-resolution.d.ts +62 -0
  247. package/dist/core/ingestion/languages/java/module-resolution.js +142 -0
  248. package/dist/core/ingestion/languages/java/query.js +15 -3
  249. package/dist/core/ingestion/languages/java/record-components.d.ts +14 -0
  250. package/dist/core/ingestion/languages/java/record-components.js +185 -0
  251. package/dist/core/ingestion/languages/java/scope-resolver.js +10 -2
  252. package/dist/core/ingestion/languages/java/spring-aop.d.ts +12 -0
  253. package/dist/core/ingestion/languages/java/spring-aop.js +49 -0
  254. package/dist/core/ingestion/languages/java/spring-conditionals.d.ts +11 -0
  255. package/dist/core/ingestion/languages/java/spring-conditionals.js +48 -0
  256. package/dist/core/ingestion/languages/java/spring-di.d.ts +4 -1
  257. package/dist/core/ingestion/languages/java/spring-di.js +41 -9
  258. package/dist/core/ingestion/languages/java/spring-non-http-handlers.d.ts +7 -0
  259. package/dist/core/ingestion/languages/java/spring-non-http-handlers.js +32 -0
  260. package/dist/core/ingestion/languages/java.js +94 -3
  261. package/dist/core/ingestion/languages/javascript/captures.d.ts +6 -1
  262. package/dist/core/ingestion/languages/javascript/captures.js +262 -4
  263. package/dist/core/ingestion/languages/javascript/import-target.d.ts +17 -21
  264. package/dist/core/ingestion/languages/javascript/import-target.js +24 -41
  265. package/dist/core/ingestion/languages/javascript/index.d.ts +54 -5
  266. package/dist/core/ingestion/languages/javascript/index.js +54 -5
  267. package/dist/core/ingestion/languages/javascript/query.d.ts +1 -0
  268. package/dist/core/ingestion/languages/javascript/query.js +211 -5
  269. package/dist/core/ingestion/languages/javascript/scope-resolver.js +12 -0
  270. package/dist/core/ingestion/languages/javascript/simple-hooks.js +2 -1
  271. package/dist/core/ingestion/languages/jvm/package-siblings.js +77 -9
  272. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +15 -0
  273. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +48 -0
  274. package/dist/core/ingestion/languages/kotlin/captures.js +43 -1
  275. package/dist/core/ingestion/languages/kotlin/import-target.d.ts +8 -1
  276. package/dist/core/ingestion/languages/kotlin/import-target.js +20 -123
  277. package/dist/core/ingestion/languages/kotlin/index.d.ts +1 -0
  278. package/dist/core/ingestion/languages/kotlin/index.js +1 -0
  279. package/dist/core/ingestion/languages/kotlin/module-resolution.d.ts +22 -0
  280. package/dist/core/ingestion/languages/kotlin/module-resolution.js +108 -0
  281. package/dist/core/ingestion/languages/kotlin/query.js +28 -2
  282. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +23 -2
  283. package/dist/core/ingestion/languages/kotlin/spring-aop.d.ts +12 -0
  284. package/dist/core/ingestion/languages/kotlin/spring-aop.js +64 -0
  285. package/dist/core/ingestion/languages/kotlin/spring-conditionals.d.ts +12 -0
  286. package/dist/core/ingestion/languages/kotlin/spring-conditionals.js +49 -0
  287. package/dist/core/ingestion/languages/kotlin/spring-di.d.ts +2 -0
  288. package/dist/core/ingestion/languages/kotlin/spring-di.js +60 -11
  289. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.d.ts +10 -0
  290. package/dist/core/ingestion/languages/kotlin/spring-non-http-handlers.js +41 -0
  291. package/dist/core/ingestion/languages/php/captures.d.ts +5 -0
  292. package/dist/core/ingestion/languages/php/captures.js +319 -51
  293. package/dist/core/ingestion/languages/php/import-target.d.ts +3 -4
  294. package/dist/core/ingestion/languages/php/import-target.js +192 -62
  295. package/dist/core/ingestion/languages/php/query.js +31 -0
  296. package/dist/core/ingestion/languages/python/arity-metadata.d.ts +1 -0
  297. package/dist/core/ingestion/languages/python/arity-metadata.js +1 -0
  298. package/dist/core/ingestion/languages/python/captures.js +29 -0
  299. package/dist/core/ingestion/languages/python/import-decomposer.js +22 -1
  300. package/dist/core/ingestion/languages/python/import-target.d.ts +42 -1
  301. package/dist/core/ingestion/languages/python/import-target.js +277 -91
  302. package/dist/core/ingestion/languages/python/index.d.ts +1 -1
  303. package/dist/core/ingestion/languages/python/index.js +1 -1
  304. package/dist/core/ingestion/languages/python/interpret.d.ts +52 -0
  305. package/dist/core/ingestion/languages/python/interpret.js +249 -7
  306. package/dist/core/ingestion/languages/python/query.js +9 -0
  307. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +8 -6
  308. package/dist/core/ingestion/languages/python/receiver-binding.js +108 -12
  309. package/dist/core/ingestion/languages/python/scope-resolver.js +27 -4
  310. package/dist/core/ingestion/languages/python/simple-hooks.js +2 -8
  311. package/dist/core/ingestion/languages/python.js +13 -0
  312. package/dist/core/ingestion/languages/ruby/captures.js +158 -0
  313. package/dist/core/ingestion/languages/ruby/import-target.js +7 -5
  314. package/dist/core/ingestion/languages/ruby/query.js +93 -0
  315. package/dist/core/ingestion/languages/ruby/scope-resolver.js +2 -0
  316. package/dist/core/ingestion/languages/ruby/simple-hooks.d.ts +1 -1
  317. package/dist/core/ingestion/languages/ruby/simple-hooks.js +22 -1
  318. package/dist/core/ingestion/languages/rust/captures.js +39 -1
  319. package/dist/core/ingestion/languages/rust/method-owners.js +11 -1
  320. package/dist/core/ingestion/languages/rust/module-path.d.ts +126 -0
  321. package/dist/core/ingestion/languages/rust/module-path.js +214 -0
  322. package/dist/core/ingestion/languages/rust/qualified-call.d.ts +41 -0
  323. package/dist/core/ingestion/languages/rust/qualified-call.js +481 -0
  324. package/dist/core/ingestion/languages/rust/query.js +39 -6
  325. package/dist/core/ingestion/languages/rust/scope-resolver.js +21 -2
  326. package/dist/core/ingestion/languages/rust.js +17 -0
  327. package/dist/core/ingestion/languages/swift/captures.js +87 -3
  328. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.d.ts +48 -0
  329. package/dist/core/ingestion/languages/swift/conditional-directive-preprocess.js +253 -0
  330. package/dist/core/ingestion/languages/swift/import-target.js +4 -9
  331. package/dist/core/ingestion/languages/swift/query.js +17 -0
  332. package/dist/core/ingestion/languages/swift/receiver-binding.d.ts +8 -0
  333. package/dist/core/ingestion/languages/swift/receiver-binding.js +6 -2
  334. package/dist/core/ingestion/languages/swift.js +2 -0
  335. package/dist/core/ingestion/languages/typescript/captures.d.ts +90 -1
  336. package/dist/core/ingestion/languages/typescript/captures.js +267 -5
  337. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.d.ts +134 -0
  338. package/dist/core/ingestion/languages/typescript/cjs-export-assignment.js +523 -0
  339. package/dist/core/ingestion/languages/typescript/cjs-module-exports.d.ts +54 -0
  340. package/dist/core/ingestion/languages/typescript/cjs-module-exports.js +191 -0
  341. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.d.ts +7 -0
  342. package/dist/core/ingestion/languages/typescript/convex-endpoint-metadata.js +92 -0
  343. package/dist/core/ingestion/languages/typescript/file-candidates.d.ts +29 -0
  344. package/dist/core/ingestion/languages/typescript/file-candidates.js +70 -0
  345. package/dist/core/ingestion/languages/typescript/import-decomposer.d.ts +28 -1
  346. package/dist/core/ingestion/languages/typescript/import-decomposer.js +125 -10
  347. package/dist/core/ingestion/languages/typescript/import-target.d.ts +25 -37
  348. package/dist/core/ingestion/languages/typescript/import-target.js +24 -26
  349. package/dist/core/ingestion/languages/typescript/interpret.d.ts +21 -1
  350. package/dist/core/ingestion/languages/typescript/interpret.js +45 -5
  351. package/dist/core/ingestion/languages/typescript/module-resolution.d.ts +48 -0
  352. package/dist/core/ingestion/languages/typescript/module-resolution.js +171 -0
  353. package/dist/core/ingestion/languages/typescript/query.d.ts +1 -0
  354. package/dist/core/ingestion/languages/typescript/query.js +303 -14
  355. package/dist/core/ingestion/languages/typescript/receiver-binding.d.ts +17 -0
  356. package/dist/core/ingestion/languages/typescript/receiver-binding.js +27 -0
  357. package/dist/core/ingestion/languages/typescript/scope-resolver.js +27 -40
  358. package/dist/core/ingestion/languages/typescript/simple-hooks.d.ts +0 -10
  359. package/dist/core/ingestion/languages/typescript/simple-hooks.js +22 -22
  360. package/dist/core/ingestion/languages/typescript/tsconfig.d.ts +59 -0
  361. package/dist/core/ingestion/languages/typescript/tsconfig.js +292 -0
  362. package/dist/core/ingestion/languages/typescript.js +93 -2
  363. package/dist/core/ingestion/languages/vue/import-target.d.ts +6 -22
  364. package/dist/core/ingestion/languages/vue/import-target.js +11 -47
  365. package/dist/core/ingestion/languages/vue/scope-resolver.js +4 -2
  366. package/dist/core/ingestion/local-symbol-pruner.js +11 -11
  367. package/dist/core/ingestion/method-extractors/configs/csharp.js +1 -0
  368. package/dist/core/ingestion/method-extractors/generic.js +1 -0
  369. package/dist/core/ingestion/method-types.d.ts +16 -0
  370. package/dist/core/ingestion/pipeline-phases/di.d.ts +1 -1
  371. package/dist/core/ingestion/pipeline-phases/di.js +136 -21
  372. package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
  373. package/dist/core/ingestion/pipeline-phases/index.js +2 -0
  374. package/dist/core/ingestion/pipeline-phases/parse-impl.d.ts +15 -0
  375. package/dist/core/ingestion/pipeline-phases/parse-impl.js +154 -4
  376. package/dist/core/ingestion/pipeline-phases/parse.js +5 -0
  377. package/dist/core/ingestion/pipeline-phases/processes.d.ts +3 -2
  378. package/dist/core/ingestion/pipeline-phases/processes.js +91 -6
  379. package/dist/core/ingestion/pipeline-phases/routes.js +116 -25
  380. package/dist/core/ingestion/pipeline-phases/spring-aop.d.ts +34 -0
  381. package/dist/core/ingestion/pipeline-phases/spring-aop.js +439 -0
  382. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.d.ts +34 -0
  383. package/dist/core/ingestion/pipeline-phases/spring-auto-configuration.js +255 -0
  384. package/dist/core/ingestion/pipeline-phases/types.d.ts +7 -0
  385. package/dist/core/ingestion/pipeline.d.ts +26 -2
  386. package/dist/core/ingestion/pipeline.js +60 -11
  387. package/dist/core/ingestion/process-processor.d.ts +109 -2
  388. package/dist/core/ingestion/process-processor.js +464 -52
  389. package/dist/core/ingestion/resolve-references.d.ts +6 -1
  390. package/dist/core/ingestion/resolve-references.js +66 -6
  391. package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +8 -2
  392. package/dist/core/ingestion/route-extractors/constant-resolver.js +11 -7
  393. package/dist/core/ingestion/route-extractors/data-route-table.d.ts +40 -0
  394. package/dist/core/ingestion/route-extractors/data-route-table.js +876 -0
  395. package/dist/core/ingestion/route-extractors/dispatch-guard.d.ts +96 -0
  396. package/dist/core/ingestion/route-extractors/dispatch-guard.js +1184 -0
  397. package/dist/core/ingestion/route-extractors/java-const-resolver.d.ts +114 -0
  398. package/dist/core/ingestion/route-extractors/java-const-resolver.js +569 -0
  399. package/dist/core/ingestion/route-extractors/js-const-resolver.d.ts +192 -0
  400. package/dist/core/ingestion/route-extractors/js-const-resolver.js +1033 -0
  401. package/dist/core/ingestion/route-extractors/nest.d.ts +53 -0
  402. package/dist/core/ingestion/route-extractors/nest.js +523 -0
  403. package/dist/core/ingestion/route-extractors/spring-shared.d.ts +11 -0
  404. package/dist/core/ingestion/route-extractors/spring-shared.js +89 -0
  405. package/dist/core/ingestion/route-extractors/spring.js +214 -29
  406. package/dist/core/ingestion/scope-extractor-bridge.js +9 -1
  407. package/dist/core/ingestion/scope-extractor.d.ts +22 -7
  408. package/dist/core/ingestion/scope-extractor.js +309 -15
  409. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +311 -21
  410. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.js +16 -5
  411. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +12 -0
  412. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +47 -0
  413. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.d.ts +20 -15
  414. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +280 -42
  415. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.d.ts +123 -0
  416. package/dist/core/ingestion/scope-resolution/graph-bridge/imports-to-edges.js +171 -17
  417. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.d.ts +58 -1
  418. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +137 -34
  419. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.d.ts +30 -1
  420. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +39 -1
  421. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +18 -1
  422. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +113 -18
  423. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.d.ts +107 -5
  424. package/dist/core/ingestion/scope-resolution/passes/compound-receiver.js +590 -33
  425. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +3 -0
  426. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +101 -41
  427. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.d.ts +34 -0
  428. package/dist/core/ingestion/scope-resolution/passes/imported-value-refs.js +62 -0
  429. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +5 -1
  430. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +8 -1
  431. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +105 -5
  432. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.js +931 -92
  433. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.d.ts +58 -0
  434. package/dist/core/ingestion/scope-resolution/passes/return-shape-members.js +458 -0
  435. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.d.ts +180 -0
  436. package/dist/core/ingestion/scope-resolution/passes/unique-name-properties.js +418 -0
  437. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +29 -0
  438. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +57 -0
  439. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +55 -1
  440. package/dist/core/ingestion/scope-resolution/pipeline/run.js +241 -19
  441. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +112 -2
  442. package/dist/core/ingestion/scope-resolution/resolution-outcome.js +38 -1
  443. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.d.ts +25 -3
  444. package/dist/core/ingestion/scope-resolution/scope/namespace-targets.js +36 -16
  445. package/dist/core/ingestion/scope-resolution/scope/walkers.d.ts +210 -9
  446. package/dist/core/ingestion/scope-resolution/scope/walkers.js +905 -22
  447. package/dist/core/ingestion/scope-resolution/summary-maps.d.ts +28 -0
  448. package/dist/core/ingestion/scope-resolution/summary-maps.js +50 -0
  449. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.d.ts +55 -0
  450. package/dist/core/ingestion/scope-resolution/undecided-satisfaction.js +37 -0
  451. package/dist/core/ingestion/scope-resolution/unresolved-receivers.d.ts +109 -0
  452. package/dist/core/ingestion/scope-resolution/unresolved-receivers.js +204 -0
  453. package/dist/core/ingestion/scope-resolution/utils/definition-id.d.ts +13 -0
  454. package/dist/core/ingestion/scope-resolution/utils/definition-id.js +19 -0
  455. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.d.ts +171 -0
  456. package/dist/core/ingestion/scope-resolution/utils/generic-instantiation.js +218 -0
  457. package/dist/core/ingestion/scope-resolution/workspace-index-types.d.ts +34 -0
  458. package/dist/core/ingestion/scope-resolution/workspace-index-types.js +15 -0
  459. package/dist/core/ingestion/scope-resolution/workspace-index.d.ts +7 -20
  460. package/dist/core/ingestion/tree-sitter-queries.d.ts +11 -11
  461. package/dist/core/ingestion/tree-sitter-queries.js +678 -4
  462. package/dist/core/ingestion/type-env.js +11 -7
  463. package/dist/core/ingestion/type-extractors/shared.d.ts +17 -0
  464. package/dist/core/ingestion/type-extractors/shared.js +16 -0
  465. package/dist/core/ingestion/type-extractors/types.d.ts +12 -0
  466. package/dist/core/ingestion/type-extractors/typescript.d.ts +20 -0
  467. package/dist/core/ingestion/type-extractors/typescript.js +26 -0
  468. package/dist/core/ingestion/utils/ast-helpers.d.ts +297 -15
  469. package/dist/core/ingestion/utils/ast-helpers.js +578 -46
  470. package/dist/core/ingestion/utils/call-analysis.d.ts +27 -22
  471. package/dist/core/ingestion/utils/call-analysis.js +202 -7
  472. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +59 -0
  473. package/dist/core/ingestion/utils/callable-flow-captures.js +51 -1
  474. package/dist/core/ingestion/utils/callable-labels.d.ts +25 -0
  475. package/dist/core/ingestion/utils/callable-labels.js +31 -0
  476. package/dist/core/ingestion/utils/effective-ram.d.ts +40 -0
  477. package/dist/core/ingestion/utils/effective-ram.js +58 -0
  478. package/dist/core/ingestion/utils/line-base.d.ts +14 -0
  479. package/dist/core/ingestion/utils/line-base.js +14 -0
  480. package/dist/core/ingestion/utils/method-props.d.ts +27 -4
  481. package/dist/core/ingestion/utils/method-props.js +29 -4
  482. package/dist/core/ingestion/utils/receiver-chain-captures.d.ts +31 -0
  483. package/dist/core/ingestion/utils/receiver-chain-captures.js +57 -0
  484. package/dist/core/ingestion/utils/receiver-chain-codec.d.ts +89 -0
  485. package/dist/core/ingestion/utils/receiver-chain-codec.js +182 -0
  486. package/dist/core/ingestion/utils/scope-tree-walk.d.ts +22 -0
  487. package/dist/core/ingestion/utils/scope-tree-walk.js +33 -0
  488. package/dist/core/ingestion/utils/template-arguments.d.ts +96 -0
  489. package/dist/core/ingestion/utils/template-arguments.js +196 -0
  490. package/dist/core/ingestion/utils/type-parameters.d.ts +49 -0
  491. package/dist/core/ingestion/utils/type-parameters.js +206 -0
  492. package/dist/core/ingestion/workers/callable-id.d.ts +80 -0
  493. package/dist/core/ingestion/workers/callable-id.js +125 -0
  494. package/dist/core/ingestion/workers/parse-worker.d.ts +14 -1
  495. package/dist/core/ingestion/workers/parse-worker.js +493 -54
  496. package/dist/core/ingestion/workers/worker-pool.d.ts +20 -27
  497. package/dist/core/ingestion/workers/worker-pool.js +91 -3
  498. package/dist/core/lbug/csv-generator.d.ts +27 -0
  499. package/dist/core/lbug/csv-generator.js +72 -17
  500. package/dist/core/lbug/extension-load-error.js +13 -2
  501. package/dist/core/lbug/extension-loader.d.ts +29 -0
  502. package/dist/core/lbug/extension-loader.js +31 -6
  503. package/dist/core/lbug/graph-emit-sink.d.ts +264 -0
  504. package/dist/core/lbug/graph-emit-sink.js +581 -0
  505. package/dist/core/lbug/lbug-adapter.d.ts +290 -11
  506. package/dist/core/lbug/lbug-adapter.js +652 -69
  507. package/dist/core/lbug/native-check.d.ts +21 -0
  508. package/dist/core/lbug/native-check.js +248 -32
  509. package/dist/core/lbug/pdg-emit-sink.d.ts +13 -4
  510. package/dist/core/lbug/pdg-emit-sink.js +21 -111
  511. package/dist/core/lbug/pool-adapter.d.ts +9 -0
  512. package/dist/core/lbug/pool-adapter.js +164 -14
  513. package/dist/core/lbug/query-batch.d.ts +75 -0
  514. package/dist/core/lbug/query-batch.js +102 -0
  515. package/dist/core/lbug/rel-pair-routing.d.ts +160 -2
  516. package/dist/core/lbug/rel-pair-routing.js +228 -10
  517. package/dist/core/lbug/schema.d.ts +163 -4
  518. package/dist/core/lbug/schema.js +404 -159
  519. package/dist/core/lbug/sync-csv-writer.d.ts +47 -0
  520. package/dist/core/lbug/sync-csv-writer.js +108 -0
  521. package/dist/core/run-analyze.d.ts +147 -0
  522. package/dist/core/run-analyze.js +1215 -179
  523. package/dist/core/search/bm25-index.d.ts +11 -0
  524. package/dist/core/search/bm25-index.js +60 -26
  525. package/dist/core/search/fts-indexes.d.ts +150 -9
  526. package/dist/core/search/fts-indexes.js +241 -23
  527. package/dist/core/wiki/graph-queries.js +145 -112
  528. package/dist/core/wiki/llm-client.d.ts +29 -3
  529. package/dist/core/wiki/llm-client.js +47 -12
  530. package/dist/core/wiki/prompts.d.ts +19 -0
  531. package/dist/core/wiki/prompts.js +20 -1
  532. package/dist/lib/utils.d.ts +113 -0
  533. package/dist/lib/utils.js +185 -0
  534. package/dist/mcp/local/aop-metadata.d.ts +77 -0
  535. package/dist/mcp/local/aop-metadata.js +227 -0
  536. package/dist/mcp/local/bean-metadata.d.ts +2 -1
  537. package/dist/mcp/local/bean-metadata.js +22 -1
  538. package/dist/mcp/local/convex-metadata.d.ts +8 -0
  539. package/dist/mcp/local/convex-metadata.js +45 -0
  540. package/dist/mcp/local/local-backend.d.ts +174 -11
  541. package/dist/mcp/local/local-backend.js +1678 -331
  542. package/dist/mcp/local/path-predicate.d.ts +19 -0
  543. package/dist/mcp/local/path-predicate.js +21 -0
  544. package/dist/mcp/local/pdg-impact.d.ts +132 -10
  545. package/dist/mcp/local/pdg-impact.js +391 -98
  546. package/dist/mcp/repository-policy.d.ts +1 -0
  547. package/dist/mcp/repository-policy.js +5 -0
  548. package/dist/mcp/resources.js +26 -4
  549. package/dist/mcp/server.js +23 -13
  550. package/dist/mcp/tools.d.ts +8 -0
  551. package/dist/mcp/tools.js +76 -23
  552. package/dist/server/analyze-job.d.ts +37 -2
  553. package/dist/server/analyze-job.js +13 -2
  554. package/dist/server/analyze-launch.d.ts +1 -1
  555. package/dist/server/analyze-launch.js +79 -10
  556. package/dist/server/analyze-worker-core.d.ts +1 -1
  557. package/dist/server/analyze-worker-core.js +10 -1
  558. package/dist/server/analyze-worker-ipc.d.ts +1 -1
  559. package/dist/server/analyze-worker-ipc.js +4 -0
  560. package/dist/server/analyze-worker-protocol.d.ts +59 -0
  561. package/dist/server/analyze-worker-protocol.js +1 -0
  562. package/dist/server/analyze-worker.d.ts +1 -17
  563. package/dist/server/api.d.ts +2 -11
  564. package/dist/server/api.js +164 -163
  565. package/dist/server/embed-run-outcome.d.ts +89 -0
  566. package/dist/server/embed-run-outcome.js +88 -0
  567. package/dist/server/git-clone.js +6 -2
  568. package/dist/server/middleware.d.ts +116 -9
  569. package/dist/server/middleware.js +291 -22
  570. package/dist/server/sse-progress.d.ts +41 -0
  571. package/dist/server/sse-progress.js +125 -0
  572. package/dist/storage/branch-index.d.ts +11 -6
  573. package/dist/storage/branch-index.js +15 -7
  574. package/dist/storage/file-hash.js +2 -2
  575. package/dist/storage/fs-atomic.d.ts +25 -0
  576. package/dist/storage/fs-atomic.js +42 -0
  577. package/dist/storage/git.d.ts +131 -0
  578. package/dist/storage/git.js +236 -2
  579. package/dist/storage/index-lock.d.ts +102 -0
  580. package/dist/storage/index-lock.js +660 -0
  581. package/dist/storage/parse-cache.js +588 -6
  582. package/dist/storage/parsedfile-store.js +76 -6
  583. package/dist/storage/repo-manager.d.ts +54 -441
  584. package/dist/storage/repo-manager.js +312 -221
  585. package/dist/storage/repo-meta.d.ts +530 -0
  586. package/dist/storage/repo-meta.js +100 -0
  587. package/dist/types/pipeline.d.ts +37 -0
  588. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +1 -1
  589. package/hooks/claude/gitnexus-hook.cjs +1 -1
  590. package/hooks/claude/resolve-analyze-cmd.cjs +80 -13
  591. package/package.json +11 -2
  592. package/scripts/cross-platform-shard.ts +153 -0
  593. package/scripts/cross-platform-tests.ts +122 -0
  594. package/scripts/run-cross-platform.ts +16 -5
  595. package/skills/gitnexus-cli.md +3 -3
  596. package/skills/gitnexus-debugging.md +37 -7
  597. package/skills/gitnexus-exploring.md +26 -4
  598. package/skills/gitnexus-impact-analysis.md +71 -10
  599. package/skills/gitnexus-plan/README.md +11 -6
  600. package/skills/gitnexus-plan/references/evidence-provenance.md +49 -12
  601. package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +654 -372
  602. package/skills/gitnexus-refactoring.md +48 -5
  603. package/skills/gitnexus-review/SKILL.md +12 -6
  604. package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +1 -1
  605. package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +1 -1
  606. package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +1 -1
  607. package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +1 -1
  608. package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +1 -1
  609. package/skills/gitnexus-review/ci-personas/ci-security-lens.md +1 -1
  610. package/skills/gitnexus-taint-analysis.md +13 -7
  611. package/skills/gitnexus-work/SKILL.md +4 -1
  612. package/skills/gitnexus-work/references/evidence-provenance.md +49 -12
  613. package/skills/gitnexus-work/scripts/evidence-provenance.mjs +654 -372
  614. package/vendor/leiden/utils.cjs +28 -1
  615. package/web/assets/ProcessFlowModal-Badh2Pbg.js +24 -0
  616. package/web/assets/{__vite-browser-external-bMKyYQkO.js → __vite-browser-external-COxE8F0G.js} +1 -1
  617. package/web/assets/abnfDiagram-QNN2D4NM-Cq2djWWe.js +1 -0
  618. package/web/assets/agent-Dr4l5EOp.js +662 -0
  619. package/web/assets/architecture-TIHT7OUA-V6N4J3SY-fTePvLoe.js +1 -0
  620. package/web/assets/architectureDiagram-OT7VKSJ7-mKEXxkeF.js +36 -0
  621. package/web/assets/{blockDiagram-7IZFK4PR-DBefcjof.js → blockDiagram-54WLDVWM-Dg_hrRWE.js} +4 -4
  622. package/web/assets/{c4Diagram-Y2BXMSZH-EjWnjEJl.js → c4Diagram-X2LASM7V-CnhoT4aV.js} +2 -2
  623. package/web/assets/chunk-224SPVON-B8gxtXpy.js +1 -0
  624. package/web/assets/chunk-2AEHWXPW-CV4r6-1I.js +127 -0
  625. package/web/assets/chunk-2SREHG4O-Dip42xOq.js +1 -0
  626. package/web/assets/chunk-4RFN2BYJ-DHHWuC-n.js +1 -0
  627. package/web/assets/chunk-66DQ2XMT-CM0xjFAN.js +1 -0
  628. package/web/assets/chunk-6BELYETK-ChsYtfHW.js +1 -0
  629. package/web/assets/{chunk-LII3EMHJ-BL6lKJ_P.js → chunk-6L755F7B-CMhLBxi2.js} +1 -1
  630. package/web/assets/{chunk-QA3QBVWF-DVXPOIxe.js → chunk-7CWYLC5S-DRgGkkpF.js} +1 -1
  631. package/web/assets/{chunk-ZXARS5L4-C3v-4Fsw.js → chunk-A7VWPJGB-B4O3oQdQ.js} +1 -1
  632. package/web/assets/chunk-BI6VK774-D0oaWk8V.js +1 -0
  633. package/web/assets/chunk-D6VWDJW2-BxcBdZ9c.js +2 -0
  634. package/web/assets/chunk-DMV4VAQV-Bn6WXDSX.js +4 -0
  635. package/web/assets/chunk-E5QJAATJ-dh-5CtIV.js +2 -0
  636. package/web/assets/chunk-EQFTRU2I-1ix7TzW9.js +2 -0
  637. package/web/assets/chunk-FWYVLQTC-BgDItRzJ.js +1 -0
  638. package/web/assets/chunk-HNC4WDU7-DoU3KnA7.js +1 -0
  639. package/web/assets/chunk-L5GCOVLC-CE2w8Nm_.js +161 -0
  640. package/web/assets/chunk-LAHSG3N2-Bz4hcn0N.js +321 -0
  641. package/web/assets/chunk-LORZLZWG-B57uGw2N.js +88 -0
  642. package/web/assets/chunk-NLANEA3F-XpH_NPA5.js +62 -0
  643. package/web/assets/chunk-NV3KIAZN-5yvcpMiu.js +1 -0
  644. package/web/assets/chunk-OIYT25JQ-CQ6KOZGX.js +1 -0
  645. package/web/assets/chunk-PE7DX7ZZ-CCvRVj43.js +10 -0
  646. package/web/assets/chunk-Q67WD55A-BWCH2SVz.js +156 -0
  647. package/web/assets/chunk-RRFMTAIC-CMN0wcYA.js +1 -0
  648. package/web/assets/{chunk-RLI5ZMPA-CkXZ0y0U.js → chunk-SATU7PGQ-B1zhgOvc.js} +1 -1
  649. package/web/assets/chunk-STOV2HOB-GnExfzIX.js +1 -0
  650. package/web/assets/{chunk-INKRHTLW-Ckl3_KkO.js → chunk-SZD42YQK-ijyKKVr1.js} +21 -21
  651. package/web/assets/{chunk-LCXTWHL2-C162wE5z.js → chunk-TFPGFQPA-Dj6a-0pC.js} +3 -3
  652. package/web/assets/chunk-TGVD4F4B-BMc31Gj2.js +2 -0
  653. package/web/assets/chunk-TZUXEDM2-B7p9AcTw.js +1 -0
  654. package/web/assets/chunk-UAT7B5JY-DW-A_fpI.js +1 -0
  655. package/web/assets/{chunk-6764PJDD-C7xxk063.js → chunk-VE5CLXGZ-C1vB7wpY.js} +1 -1
  656. package/web/assets/{chunk-RG4AUYOV-ZNgyLFq6.js → chunk-VJFVEZTB-CX66F2ep.js} +3 -3
  657. package/web/assets/chunk-VY5UBI4V-yxPQAWxw.js +1 -0
  658. package/web/assets/chunk-WJBAP47W-BckNkuEN.js +1 -0
  659. package/web/assets/chunk-XNMVGMAZ-Cg_LnPtj.js +1 -0
  660. package/web/assets/classDiagram-VPOSVPXH-BjOiXA_C.js +1 -0
  661. package/web/assets/classDiagram-v2-5VFNUXQA-BjOiXA_C.js +1 -0
  662. package/web/assets/{cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js → cose-bilkent-RZA4XIPR-BHpK4Crp.js} +1 -1
  663. package/web/assets/cynefin-VYW2F7L2-2VAHYKR6-DAsF6GZv.js +1 -0
  664. package/web/assets/cynefinDiagram-TR7LZUCG-C3Iar9lZ.js +62 -0
  665. package/web/assets/dagre-K64A6Z3X-CUwi79mA.js +4 -0
  666. package/web/assets/diagram-2TLGJV2N-C2F5Nfym.js +30 -0
  667. package/web/assets/diagram-JCD7PQ7C-DC5-9FRr.js +24 -0
  668. package/web/assets/{diagram-HNR7UZ2L-DVRltWbL.js → diagram-KFBZAVDW-Dfmf_4ti.js} +3 -3
  669. package/web/assets/diagram-L7DVE3PN-GIRyVUtt.js +41 -0
  670. package/web/assets/diagram-YP3FGXHI-CyNFYtkd.js +24 -0
  671. package/web/assets/ebnfDiagram-DRHRQJWO-D8_CI4ZF.js +1 -0
  672. package/web/assets/erDiagram-SZLJLQMB-CohQjznC.js +85 -0
  673. package/web/assets/error-D9MtuG9s.js +1 -0
  674. package/web/assets/eventmodeling-45OFAUF4-AOUJWSLX-BvTc6iQi.js +1 -0
  675. package/web/assets/flowDiagram-BWE6NHOH-B6RnEvD9.js +1 -0
  676. package/web/assets/ganttDiagram-2QTCJSNI-Cks_mEcF.js +292 -0
  677. package/web/assets/gitGraph-TEB2WS4Q-U5VWYIBC-Dy7CCSZ5.js +1 -0
  678. package/web/assets/gitGraphDiagram-VVZAVV5G-CG41cIVc.js +106 -0
  679. package/web/assets/{index-D7mTFcvQ.js → index-2zdvEdzg.js} +51 -51
  680. package/web/assets/index-CJDpyH-n.css +2 -0
  681. package/web/assets/info-DKCQHKI2-DX6KST54-BLJg1ikX.js +1 -0
  682. package/web/assets/infoDiagram-FY4PZKRE-BJ3vPVwW.js +2 -0
  683. package/web/assets/{ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js → ishikawaDiagram-4JDSWWDM-DmqWtjkl.js} +2 -2
  684. package/web/assets/{journeyDiagram-M6C3CM3L-C6wjooas.js → journeyDiagram-QUS3FAKT-XAzVzrQW.js} +3 -3
  685. package/web/assets/{kanban-definition-75IXJCU3-5_UVY79g.js → kanban-definition-D4L7SQKK-YurRnmYn.js} +6 -6
  686. package/web/assets/katex-C5OPUE3Q-Bnbavtmu.js +257 -0
  687. package/web/assets/{mindmap-definition-2TDM6QVE-8xDLzk2e.js → mindmap-definition-66QP5TD6-ChrWWnil.js} +5 -5
  688. package/web/assets/node.browser-U-KyT5AW.js +1 -0
  689. package/web/assets/packet-7NZHBO7P-5WG45QPS-KUxcuvaA.js +1 -0
  690. package/web/assets/pegDiagram-YKIO5C6U-QGeQLEq2.js +1 -0
  691. package/web/assets/pie-RZYD4A2V-2OCZ2VTD-DPs08kJY.js +1 -0
  692. package/web/assets/pieDiagram-YPY3TKG5-BuT3MYzm.js +39 -0
  693. package/web/assets/{quadrantDiagram-VICAPDV7-DR54jOeR.js → quadrantDiagram-VO5QLCXA-B7098wSc.js} +3 -3
  694. package/web/assets/radar-I7S5WNFK-EPLSA35B-w5F0K3a7.js +1 -0
  695. package/web/assets/railroad-3IZDKUUU-PWFQV6Y6-Bu668yqY.js +1 -0
  696. package/web/assets/railroad-abnf-AHOZXSZD-JYYJX3BS-B6ghpETS.js +1 -0
  697. package/web/assets/railroad-ebnf-EBAXGLYW-RBZ4ONAP-D-XmHh3M.js +1 -0
  698. package/web/assets/railroad-peg-LSFZ7HO6-KHNPXGPG-mhkrhzEn.js +1 -0
  699. package/web/assets/railroadDiagram-M77LTMSB-AXu4vxk_.js +1 -0
  700. package/web/assets/{requirementDiagram-JXO7QTGE-PEkg7sKC.js → requirementDiagram-RASO5HTO-B-l8InpK.js} +4 -4
  701. package/web/assets/{sankeyDiagram-URQDO5SZ-DDWEtjcs.js → sankeyDiagram-F32LOJ6L-Kd7zjJgX.js} +3 -3
  702. package/web/assets/{sequenceDiagram-VS2MUI6T-Bv-uwANx.js → sequenceDiagram-URATNSBD-BlcdY9DS.js} +7 -7
  703. package/web/assets/sizeCapture-5GORAGP4-BEqQzsxs.js +1 -0
  704. package/web/assets/src-C5sx_gMp.js +1 -0
  705. package/web/assets/stateDiagram-DODFXNG5-DTdHc-fF.js +1 -0
  706. package/web/assets/stateDiagram-v2-JNMM5JRA-DioNLDDo.js +1 -0
  707. package/web/assets/swimlanes-OSWOYLSK-CA0ofdwY.js +2 -0
  708. package/web/assets/swimlanesDiagram-RHGX2RDE-PkwUdckC.js +8 -0
  709. package/web/assets/{timeline-definition-O6YCAMPW-Qmsuo7qS.js → timeline-definition-WJXWRH4I-DUfp1R3E.js} +3 -3
  710. package/web/assets/treeView-QDETBFTQ-EHYTSQNO-C5lpBgPm.js +1 -0
  711. package/web/assets/treemap-6X3UGDF4-CCWCF7EK-BB0ZyO-B.js +1 -0
  712. package/web/assets/vennDiagram-K3VCMQLI-Bj-FN-XS.js +34 -0
  713. package/web/assets/wardley-OPB4EBWU-6OWERDVT-CEA3Nq0j.js +1 -0
  714. package/web/assets/wardleyDiagram-XK6FUAWV-CVV0dHFr.js +78 -0
  715. package/web/assets/xychartDiagram-5VRUVLCW-CK_rbSWE.js +7 -0
  716. package/web/index.html +16 -15
  717. package/dist/core/ingestion/languages/python/index-stats.d.ts +0 -18
  718. package/dist/core/ingestion/languages/python/index-stats.js +0 -25
  719. package/web/assets/ProcessFlowModal-CwkpVkv-.js +0 -22
  720. package/web/assets/agent-Ds-lkZjX.js +0 -626
  721. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +0 -1
  722. package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +0 -36
  723. package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +0 -4
  724. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +0 -1
  725. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +0 -321
  726. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +0 -159
  727. package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +0 -124
  728. package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +0 -10
  729. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +0 -1
  730. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +0 -1
  731. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +0 -1
  732. package/web/assets/chunk-KGFNY3KK-BZeP-55u.js +0 -62
  733. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +0 -1
  734. package/web/assets/chunk-KNLZD3CH-BGlP6X9R.js +0 -1
  735. package/web/assets/chunk-LRIF4GLE-n59lhprL.js +0 -1
  736. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +0 -1
  737. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +0 -1
  738. package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +0 -1
  739. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +0 -1
  740. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +0 -1
  741. package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +0 -1
  742. package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +0 -2
  743. package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +0 -1
  744. package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +0 -1
  745. package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +0 -4
  746. package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +0 -43
  747. package/web/assets/diagram-GF46GFSD-B2atbzmU.js +0 -24
  748. package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +0 -24
  749. package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +0 -10
  750. package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +0 -85
  751. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +0 -1
  752. package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +0 -162
  753. package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +0 -292
  754. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +0 -1
  755. package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +0 -106
  756. package/web/assets/index-CX_fADmQ.css +0 -2
  757. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +0 -1
  758. package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +0 -2
  759. package/web/assets/katex-K3KEBU37-qRQBy-EZ.js +0 -261
  760. package/web/assets/node-Ct_zna8U.js +0 -8
  761. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +0 -1
  762. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +0 -1
  763. package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +0 -30
  764. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +0 -1
  765. package/web/assets/sdk-CzHHH8tD.js +0 -37
  766. package/web/assets/src-Cv1eWg0o.js +0 -1
  767. package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +0 -1
  768. package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +0 -1
  769. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +0 -1
  770. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +0 -1
  771. package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +0 -34
  772. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +0 -1
  773. package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +0 -78
  774. package/web/assets/xychartDiagram-N2JHSOCM-CoZ_Tits.js +0 -7
  775. /package/web/assets/{chunk-7W6UQGC5-pyKGssV3.js → chunk-LIEV3EAG-pyKGssV3.js} +0 -0
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Last-resort property resolution by UNIQUE NAME (A1/A5).
3
+ *
4
+ * Idiomatic JS reads configuration off a plain object whose receiver cannot be
5
+ * typed — an options bag passed as a parameter, a destructured handle, an
6
+ * imported literal. The precise passes resolve none of those, so a field read
7
+ * and written across a live code path produced no `ACCESSES` edge at all and
8
+ * "who reads this setting?" answered a confident zero.
9
+ *
10
+ * This pass runs AFTER every precise pass and only sees what they left behind.
11
+ * For each still-unresolved read/write site it asks one question: does exactly
12
+ * ONE `Property` node in the graph carry this name? If so the read almost
13
+ * certainly means it, and an edge is emitted at REDUCED CONFIDENCE with a
14
+ * reason that names the inference. If two or more carry the name, nothing is
15
+ * emitted — a guess between them would be a coin flip, and a wrong edge in the
16
+ * pre-edit safety gate is worse than a missing one.
17
+ *
18
+ * Why uniqueness is the right gate: the names this recovers are the ones worth
19
+ * recovering. Distinctive domain fields (`exitMinAtrMult`, `bookNotionalUsdt`)
20
+ * are unique in a repo and resolve; generic keys (`id`, `name`, `data`) are not
21
+ * and are skipped, which is exactly where name matching would over-connect.
22
+ * That is the `fieldFallbackOnMethodLookup` trade this codebase already accepts
23
+ * for dynamic languages, bounded so it cannot fire on the ambiguous majority.
24
+ *
25
+ * Confidence is 0.5 — the same tier the 3-tier import resolver assigns its
26
+ * global fallback, because this is the same kind of claim: a name matched
27
+ * workspace-wide with no scope evidence behind it.
28
+ *
29
+ * ── R2: workspace uniqueness is too blunt on its own ────────────────────────
30
+ *
31
+ * Measured on the repo this pass was written for: `exitMinAtrMult` has 26
32
+ * `Property` definitions — 16 of them in one-off `scripts/`, 7 in the frontend,
33
+ * one in a test, and exactly ONE in the backend that actually reads it. Strict
34
+ * uniqueness declined every backend read because research scripts the backend
35
+ * has no relationship with each carry a same-named key. The gate was not
36
+ * wrong, it was scope-blind: it compared against the whole workspace when the
37
+ * reader can only plausibly mean something it can SEE.
38
+ *
39
+ * So a name with several definitions is now narrowed before being abandoned:
40
+ * Tier 1 — a definition in the READING FILE itself.
41
+ * Tier 2 — a definition in a file the reading file DIRECTLY IMPORTS.
42
+ * Exactly one survivor at the first non-empty tier resolves; anything else is
43
+ * still refused. Narrowing uses the finalized import graph, so it is real
44
+ * evidence rather than a path-shape heuristic, and it is language-neutral.
45
+ *
46
+ * A tier that finds SEVERAL candidates stops the walk instead of falling
47
+ * through to the next one. Two same-named keys in the reading file mean the
48
+ * read is genuinely ambiguous where the reader is standing; reaching past them
49
+ * to an imported file would answer a question the local evidence already
50
+ * contradicts.
51
+ *
52
+ * Confidence stays 0.5 for every tier. Narrowing improves which candidate is
53
+ * chosen, not the kind of claim being made — it is still a name match, and the
54
+ * round-1 contract is that a consumer filtering on confidence can drop all
55
+ * name inference without dropping scope-resolved edges. The reason string
56
+ * records which tier fired.
57
+ *
58
+ * WHY GRAPH NODES, NOT SCOPE DEFS: an object-literal key mints a `Property`
59
+ * NODE (parse query) but no scope-resolution DEF, so `scope.bindings` and
60
+ * `localDefs` are both empty for exactly the population this pass exists to
61
+ * serve. Indexing the graph is therefore not a shortcut — it is the only place
62
+ * these symbols exist. It also means the pass emits straight to the graph
63
+ * rather than through `tryEmitEdge`, whose target side takes a def.
64
+ */
65
+ import type { ImportEdge, ParsedFile, ScopeId } from '../../../../_shared/index.js';
66
+ import type { KnowledgeGraph } from '../../../graph/types.js';
67
+ import type { ScopeResolutionIndexes } from '../../model/scope-resolution-indexes.js';
68
+ import type { GraphNodeLookup } from '../graph-bridge/node-lookup.js';
69
+ interface PropertyCandidate {
70
+ readonly id: string;
71
+ readonly filePath: string;
72
+ /**
73
+ * True when this definition is the RETURN SHAPE of a function (R3-4) rather
74
+ * than a declared surface — a named object literal, a class field, an
75
+ * interface or alias member.
76
+ *
77
+ * Return shapes are the weaker anchor and are ranked below declared ones, so
78
+ * adding them cannot change an answer that already resolved. That is what
79
+ * reconciles this with R2-1b, which deliberately modelled returned keys as
80
+ * WRITES to avoid adding same-named competitors to narrowing: they are
81
+ * definitions now, but they never outrank a real declaration, so the
82
+ * competitor problem it was avoiding does not come back.
83
+ */
84
+ readonly fromReturnShape: boolean;
85
+ }
86
+ /**
87
+ * The only part of the finalized scope model this pass reads. Narrowed to a
88
+ * structural type so the pass does not depend on the full finalize result.
89
+ */
90
+ interface FinalizedImportView {
91
+ readonly imports: ReadonlyMap<ScopeId, readonly ImportEdge[]>;
92
+ }
93
+ export interface UniqueNamePropertyStats {
94
+ /** Edges emitted from a name match at any tier. */
95
+ readonly emitted: number;
96
+ /**
97
+ * Sites skipped because the name could not be narrowed to one definition,
98
+ * so a match would have been a coin flip. Reported rather than silently
99
+ * dropped: this is the population a receiver-typing improvement would
100
+ * convert into precise edges.
101
+ */
102
+ readonly ambiguous: number;
103
+ /**
104
+ * Of {@link emitted}, how many needed scope narrowing — the name carried
105
+ * several definitions and same-file or direct-import evidence picked one.
106
+ * Strict workspace uniqueness would have refused every one of these.
107
+ */
108
+ readonly narrowed: number;
109
+ /**
110
+ * The distinct names behind {@link ambiguous}, capped. A bare count says a
111
+ * gap exists; the names say WHICH fields are unanswerable, which is the
112
+ * difference between a metric and something a reader can act on.
113
+ */
114
+ readonly ambiguousNames: readonly string[];
115
+ /**
116
+ * Read/write sites whose name IS defined in the workspace, but only in
117
+ * ANOTHER language — so per-language inference correctly declined, and the
118
+ * caller got an empty result byte-identical to "this field is unused".
119
+ *
120
+ * Keeping this separate from {@link ambiguous} matters: ambiguity means the
121
+ * analyzer saw several candidates and refused to choose, while this means it
122
+ * saw candidates it was not allowed to consider. The remedies differ — one
123
+ * wants better receiver typing, the other wants an anchor in this language
124
+ * (or a text search) — so collapsing them would tell a reader the wrong thing
125
+ * to do.
126
+ */
127
+ readonly crossLanguageOnly: number;
128
+ /**
129
+ * The distinct names behind {@link crossLanguageOnly}, capped, each with the
130
+ * languages its definitions actually live in. That is the actionable half:
131
+ * "wickRatio is defined only in TypeScript" tells a reader why their
132
+ * JavaScript query came back empty and what to do about it.
133
+ */
134
+ readonly crossLanguageOnlyNames: readonly {
135
+ readonly name: string;
136
+ readonly languages: string[];
137
+ }[];
138
+ }
139
+ /**
140
+ * Every `Property` node in the graph, grouped by name.
141
+ *
142
+ * WHOLE-GRAPH AND LANGUAGE-AGNOSTIC, so it is built ONCE by the caller and
143
+ * shared across every language pass — the same treatment `sharedNodeLookup` and
144
+ * `sharedFnNodeIndex` already get in `phase.ts`, and for the same reason: a
145
+ * per-language rebuild scans every node in the repo N times, and on a large
146
+ * repo a small language's full copy overlaps the next language's.
147
+ *
148
+ * Deliberately NOT capped here. The cap belongs after the language filter (see
149
+ * {@link candidatesForLanguage}) — a name carried by forty properties across a
150
+ * polyglot monorepo but only two in the language being resolved is answerable,
151
+ * and capping globally would refuse it. One entry per Property node is the same
152
+ * order as the node-lookup map built beside it.
153
+ */
154
+ export type PropertyNameIndex = ReadonlyMap<string, readonly PropertyCandidate[]>;
155
+ export declare function buildPropertyNameIndex(graph: KnowledgeGraph): PropertyNameIndex;
156
+ export declare function emitUniqueNamePropertyAccesses(graph: KnowledgeGraph, indexes: ScopeResolutionIndexes, parsedFiles: readonly ParsedFile[], nodeLookup: GraphNodeLookup,
157
+ /** Sites a precise pass already owns — never second-guessed here. */
158
+ skipSites: ReadonlySet<string>,
159
+ /** Finalized import graph; narrows a name carried by several definitions. */
160
+ finalized?: FinalizedImportView,
161
+ /**
162
+ * Whole-graph `Property`-by-name index built ONCE by the caller and shared
163
+ * across every language pass. It is a full node scan and language-agnostic,
164
+ * so rebuilding it per language repeats that scan N times — the pattern
165
+ * `phase.ts` already hoisted out for `sharedNodeLookup`. Built locally when
166
+ * omitted (tests / isolated calls).
167
+ */
168
+ prebuiltPropertyNameIndex?: PropertyNameIndex,
169
+ /**
170
+ * DETECT WITHOUT EMITTING. A language that sets
171
+ * `fieldFallbackOnMethodLookup: false` (TypeScript) opts out of name
172
+ * inference because a real type system should answer precisely — that opt-out
173
+ * is right and stays. But skipping the pass wholesale also skipped its
174
+ * REPORTING, so a TypeScript read whose only anchor is JavaScript got the
175
+ * same silent empty answer R3-1 exists to remove, just in the other
176
+ * direction. Detection is not inference: counting what could not be linked
177
+ * asserts nothing about what it means.
178
+ */
179
+ reportOnly?: boolean): UniqueNamePropertyStats;
180
+ export {};
@@ -0,0 +1,418 @@
1
+ /**
2
+ * Last-resort property resolution by UNIQUE NAME (A1/A5).
3
+ *
4
+ * Idiomatic JS reads configuration off a plain object whose receiver cannot be
5
+ * typed — an options bag passed as a parameter, a destructured handle, an
6
+ * imported literal. The precise passes resolve none of those, so a field read
7
+ * and written across a live code path produced no `ACCESSES` edge at all and
8
+ * "who reads this setting?" answered a confident zero.
9
+ *
10
+ * This pass runs AFTER every precise pass and only sees what they left behind.
11
+ * For each still-unresolved read/write site it asks one question: does exactly
12
+ * ONE `Property` node in the graph carry this name? If so the read almost
13
+ * certainly means it, and an edge is emitted at REDUCED CONFIDENCE with a
14
+ * reason that names the inference. If two or more carry the name, nothing is
15
+ * emitted — a guess between them would be a coin flip, and a wrong edge in the
16
+ * pre-edit safety gate is worse than a missing one.
17
+ *
18
+ * Why uniqueness is the right gate: the names this recovers are the ones worth
19
+ * recovering. Distinctive domain fields (`exitMinAtrMult`, `bookNotionalUsdt`)
20
+ * are unique in a repo and resolve; generic keys (`id`, `name`, `data`) are not
21
+ * and are skipped, which is exactly where name matching would over-connect.
22
+ * That is the `fieldFallbackOnMethodLookup` trade this codebase already accepts
23
+ * for dynamic languages, bounded so it cannot fire on the ambiguous majority.
24
+ *
25
+ * Confidence is 0.5 — the same tier the 3-tier import resolver assigns its
26
+ * global fallback, because this is the same kind of claim: a name matched
27
+ * workspace-wide with no scope evidence behind it.
28
+ *
29
+ * ── R2: workspace uniqueness is too blunt on its own ────────────────────────
30
+ *
31
+ * Measured on the repo this pass was written for: `exitMinAtrMult` has 26
32
+ * `Property` definitions — 16 of them in one-off `scripts/`, 7 in the frontend,
33
+ * one in a test, and exactly ONE in the backend that actually reads it. Strict
34
+ * uniqueness declined every backend read because research scripts the backend
35
+ * has no relationship with each carry a same-named key. The gate was not
36
+ * wrong, it was scope-blind: it compared against the whole workspace when the
37
+ * reader can only plausibly mean something it can SEE.
38
+ *
39
+ * So a name with several definitions is now narrowed before being abandoned:
40
+ * Tier 1 — a definition in the READING FILE itself.
41
+ * Tier 2 — a definition in a file the reading file DIRECTLY IMPORTS.
42
+ * Exactly one survivor at the first non-empty tier resolves; anything else is
43
+ * still refused. Narrowing uses the finalized import graph, so it is real
44
+ * evidence rather than a path-shape heuristic, and it is language-neutral.
45
+ *
46
+ * A tier that finds SEVERAL candidates stops the walk instead of falling
47
+ * through to the next one. Two same-named keys in the reading file mean the
48
+ * read is genuinely ambiguous where the reader is standing; reaching past them
49
+ * to an imported file would answer a question the local evidence already
50
+ * contradicts.
51
+ *
52
+ * Confidence stays 0.5 for every tier. Narrowing improves which candidate is
53
+ * chosen, not the kind of claim being made — it is still a name match, and the
54
+ * round-1 contract is that a consumer filtering on confidence can drop all
55
+ * name inference without dropping scope-resolved edges. The reason string
56
+ * records which tier fired.
57
+ *
58
+ * WHY GRAPH NODES, NOT SCOPE DEFS: an object-literal key mints a `Property`
59
+ * NODE (parse query) but no scope-resolution DEF, so `scope.bindings` and
60
+ * `localDefs` are both empty for exactly the population this pass exists to
61
+ * serve. Indexing the graph is therefore not a shortcut — it is the only place
62
+ * these symbols exist. It also means the pass emits straight to the graph
63
+ * rather than through `tryEmitEdge`, whose target side takes a def.
64
+ */
65
+ import { resolveCallerGraphId } from '../graph-bridge/ids.js';
66
+ import { callableFlowSiteKey } from './callable-value-flow.js';
67
+ import { isTestFile } from '../../entry-point-scoring.js';
68
+ import { getLanguageFromFilename } from '../../../../_shared/index.js';
69
+ /** Language a definition lives in, for reporting which anchor a reader cannot reach. */
70
+ function languageOf(filePath) {
71
+ return getLanguageFromFilename(filePath) ?? 'unknown';
72
+ }
73
+ /**
74
+ * Confidence for a workspace-unique name match. Deliberately the global tier's
75
+ * 0.5 and not the 0.85 default: a consumer filtering on confidence must be able
76
+ * to drop these without dropping scope-resolved edges.
77
+ */
78
+ const UNIQUE_NAME_CONFIDENCE = 0.5;
79
+ const EDGE_REASON = 'scope-resolution: unique-name property';
80
+ /**
81
+ * Most candidates any one name will keep for narrowing. A name carried by more
82
+ * definitions than this is a generic key (`id`, `type`, `value`) that no tier
83
+ * is going to disambiguate, so the candidate list is dropped and the name is
84
+ * treated as ambiguous outright. This is what keeps the index from
85
+ * materializing a long array per generic key in a large repo — the concern
86
+ * that made the original implementation store a sentinel instead of a list.
87
+ */
88
+ const MAX_TRACKED_CANDIDATES = 32;
89
+ /** Sentinel for "too many nodes carry this name to narrow" — never resolved. */
90
+ const OVERSATURATED = null;
91
+ /** Most distinct names reported back; enough to act on, bounded for logs. */
92
+ const MAX_REPORTED_AMBIGUOUS_NAMES = 25;
93
+ export function buildPropertyNameIndex(graph) {
94
+ const byName = new Map();
95
+ for (const node of graph.iterNodes()) {
96
+ if (node.label !== 'Property')
97
+ continue;
98
+ const name = node.properties.name;
99
+ if (typeof name !== 'string' || name.length === 0)
100
+ continue;
101
+ const filePath = node.properties.filePath;
102
+ if (typeof filePath !== 'string')
103
+ continue;
104
+ const candidate = {
105
+ id: node.id,
106
+ filePath,
107
+ fromReturnShape: node.properties.fromReturnShape === true,
108
+ };
109
+ const existing = byName.get(name);
110
+ if (existing === undefined) {
111
+ byName.set(name, [candidate]);
112
+ continue;
113
+ }
114
+ if (existing.some((c) => c.id === node.id))
115
+ continue;
116
+ existing.push(candidate);
117
+ }
118
+ return byName;
119
+ }
120
+ /**
121
+ * The candidates a read in THIS language may consider, or {@link OVERSATURATED}
122
+ * when there are too many to disambiguate.
123
+ *
124
+ * SAME LANGUAGE ONLY. The graph is shared across every language in the repo, and
125
+ * `fieldFallbackOnMethodLookup` only decides whether this pass RUNS for a
126
+ * language — it never restricted which nodes could be TARGETS. So a Java backend
127
+ * declaring `private int loyaltyPoints` was the unique carrier of that name, and
128
+ * a JS frontend writing `cfg.loyaltyPoints` on an untyped parameter got an edge
129
+ * to it: no owner, file, or language evidence, and inference across a language
130
+ * boundary that has no call path at all. The confidence tier does not save it,
131
+ * since `minConfidence` defaults to 0.
132
+ *
133
+ * `parsedFiles` is exactly this language's file set, so matching on it is a
134
+ * precise restriction rather than a heuristic — no node property needed.
135
+ *
136
+ * The cap is applied HERE, to the filtered set, so it means what it says: this
137
+ * many same-named keys IN THE LANGUAGE BEING RESOLVED is a generic name no tier
138
+ * can disambiguate.
139
+ */
140
+ function candidatesForLanguage(all, ownFilePaths) {
141
+ const mine = [];
142
+ for (const candidate of all) {
143
+ if (!ownFilePaths.has(candidate.filePath))
144
+ continue;
145
+ if (mine.length >= MAX_TRACKED_CANDIDATES)
146
+ return OVERSATURATED;
147
+ mine.push(candidate);
148
+ }
149
+ // Three outcomes, and they are not interchangeable: `undefined` means no
150
+ // property of this name exists in this language (nothing to say HERE, though
151
+ // see `crossLanguageAnchors` for why the CALLER still needs to know), `null`
152
+ // means too many to choose between (reportable), and a list means proceed to
153
+ // narrowing.
154
+ return mine.length === 0 ? undefined : mine;
155
+ }
156
+ /**
157
+ * Files each file directly imports, from the FINALIZED import graph.
158
+ *
159
+ * Built from `finalized.imports` rather than the raw per-scope edges because
160
+ * only the finalized form has `targetFile` linked — pre-finalize the field is
161
+ * still null for anything the resolver had to look up, which would silently
162
+ * narrow every read to nothing.
163
+ */
164
+ function buildDirectImportMap(indexes, finalized) {
165
+ // Resolve each importing scope to its file by POINT LOOKUP on the scope tree,
166
+ // not by walking `parsed.scopes`.
167
+ //
168
+ // The out-of-core seal replaces `emitParsedFiles` with a scope-STRIPPED copy —
169
+ // `scopes: []` for every file — and that is the documented contract: after the
170
+ // seal, scopes are reachable only via `scopeTree.getScope`. Building the map
171
+ // from `parsed.scopes` therefore produced an EMPTY map under
172
+ // `GITNEXUS_DISK_SCOPE_INDEX=1`, every `directImports` lookup returned
173
+ // undefined, tier-2 narrowing died, and — worst of it — the loss was
174
+ // misreported as `ambiguous`: "several candidates, refused to choose" when the
175
+ // truth was "the evidence was discarded one function earlier". Same commit,
176
+ // same repo, two different graphs depending on an env var.
177
+ //
178
+ // This is the SECOND consumer of `parsed.scopes` on this branch to hit the
179
+ // seal. The first was hoisted above it; this one is converted to the point
180
+ // lookup instead, which is stronger — there is no ordering left to get wrong.
181
+ const byFile = new Map();
182
+ for (const [scopeId, edges] of finalized.imports) {
183
+ const fromFile = indexes.scopeTree.getScope(scopeId)?.filePath;
184
+ if (fromFile === undefined)
185
+ continue;
186
+ for (const edge of edges) {
187
+ if (edge.targetFile === null || edge.targetFile === fromFile)
188
+ continue;
189
+ let set = byFile.get(fromFile);
190
+ if (set === undefined) {
191
+ set = new Set();
192
+ byFile.set(fromFile, set);
193
+ }
194
+ set.add(edge.targetFile);
195
+ }
196
+ }
197
+ return byFile;
198
+ }
199
+ /** Is this Property id qualified by `<owner>.`, allowing a position suffix? */
200
+ function idOwnedBy(id, owner) {
201
+ const at = id.indexOf(`:${owner}.`);
202
+ if (at === -1)
203
+ return false;
204
+ const rest = id.slice(at + owner.length + 2);
205
+ return !rest.includes('.') || rest.indexOf('@') < rest.indexOf('.');
206
+ }
207
+ /** Trailing symbol name of a graph id (`Function:a/b.js:buildB` -> `buildB`). */
208
+ function simpleNameOfGraphId(graphId) {
209
+ const tail = graphId.slice(graphId.lastIndexOf(':') + 1);
210
+ const at = tail.indexOf('@');
211
+ return at === -1 ? tail : tail.slice(0, at);
212
+ }
213
+ /**
214
+ * Pick the single candidate a read in `readingFile` can plausibly mean.
215
+ *
216
+ * Tiers are tried in order and the FIRST non-empty one decides — including
217
+ * deciding to refuse. A tier holding several candidates returns null rather
218
+ * than falling through, because local evidence that is itself ambiguous is
219
+ * still evidence: reaching past two same-named keys in the reading file to an
220
+ * imported third would answer a question the reader's own file contradicts.
221
+ */
222
+ function narrowToSingleCandidate(candidatesIn, readingFile, importedFiles,
223
+ /** Simple name of the callable the site sits in, when it could be resolved. */
224
+ ownerName) {
225
+ // DECLARED ANCHORS FIRST. A return shape is a real definition but a weaker
226
+ // one: it says "some function builds an object with this key", where a named
227
+ // literal or a class/interface member says "this IS the field". Whenever both
228
+ // exist, the declared one is what a reader means — and ranking it first is
229
+ // what guarantees R3-4 cannot change an answer that already resolved before
230
+ // return shapes were indexed at all.
231
+ let candidates = candidatesIn;
232
+ // A SITE INSIDE ITS OWN RETURN SHAPE BINDS TO ITS OWN KEY.
233
+ //
234
+ // `export function buildB(row) { return { tickIntervalMs: row.b } }` writes
235
+ // the key that IS `buildB.tickIntervalMs`. Ranking declared anchors above
236
+ // return shapes is right for a READ through a receiver, but applied here it
237
+ // handed that write to a same-named module const (`fnSettings.tickIntervalMs`)
238
+ // that `buildB` never touches — a wrong edge, reported at the confident tier,
239
+ // and the node the key actually defines was left with no writer at all.
240
+ //
241
+ // Checked before every other rule because it is evidence rather than ranking:
242
+ // the owner qualifier on the candidate id and the enclosing callable are the
243
+ // same symbol. Nothing else can outrank that.
244
+ if (ownerName !== undefined && ownerName.length > 0) {
245
+ const own = candidates.filter((c) => c.fromReturnShape && idOwnedBy(c.id, ownerName));
246
+ if (own.length === 1)
247
+ return { id: own[0].id, tier: 'own-return-shape' };
248
+ }
249
+ // PRODUCTION CODE FIRST. A test constructs throwaway shapes with the same
250
+ // field names as the thing it exercises — measured on the reporting repo,
251
+ // four of the seven JavaScript anchors for `wickRatio` are in `tests/` — and
252
+ // a read in production code cannot mean any of them. Applied before the
253
+ // declared/return-shape split because "is this the shipped program" is the
254
+ // stronger signal: a declaration in a test fixture is still a test fixture.
255
+ //
256
+ // Only when the READER is production. A read inside a test legitimately means
257
+ // the test's own shape, so this must not fire there.
258
+ if (!isTestFile(readingFile)) {
259
+ const production = candidates.filter((c) => !isTestFile(c.filePath));
260
+ if (production.length > 0)
261
+ candidates = production;
262
+ }
263
+ const declared = candidates.filter((c) => !c.fromReturnShape);
264
+ const ranked = declared.length > 0 ? declared : candidates;
265
+ if (ranked.length === 1) {
266
+ // TIER HONESTY. `workspace-unique` is a claim that exactly one node in the
267
+ // workspace carries this name — a fact about the graph. Reaching one
268
+ // survivor by FILTERING (tests out, return shapes down-ranked) is a
269
+ // different and weaker claim, and reporting it under the same label told a
270
+ // reader "unambiguous workspace-wide match" for an answer that was
271
+ // narrowed. The edge is the same; what it is allowed to say about itself is
272
+ // not. `narrowed` counts it correctly now too, since that keys off the tier.
273
+ const tier = candidatesIn.length === 1 ? 'workspace-unique' : 'ranked';
274
+ return { id: ranked[0].id, tier };
275
+ }
276
+ candidates = ranked;
277
+ const sameFile = candidates.filter((c) => c.filePath === readingFile);
278
+ if (sameFile.length > 0) {
279
+ return sameFile.length === 1 ? { id: sameFile[0].id, tier: 'same-file' } : null;
280
+ }
281
+ if (importedFiles === undefined)
282
+ return null;
283
+ const imported = candidates.filter((c) => importedFiles.has(c.filePath));
284
+ if (imported.length > 0) {
285
+ return imported.length === 1 ? { id: imported[0].id, tier: 'imported-file' } : null;
286
+ }
287
+ return null;
288
+ }
289
+ export function emitUniqueNamePropertyAccesses(graph, indexes, parsedFiles, nodeLookup,
290
+ /** Sites a precise pass already owns — never second-guessed here. */
291
+ skipSites,
292
+ /** Finalized import graph; narrows a name carried by several definitions. */
293
+ finalized,
294
+ /**
295
+ * Whole-graph `Property`-by-name index built ONCE by the caller and shared
296
+ * across every language pass. It is a full node scan and language-agnostic,
297
+ * so rebuilding it per language repeats that scan N times — the pattern
298
+ * `phase.ts` already hoisted out for `sharedNodeLookup`. Built locally when
299
+ * omitted (tests / isolated calls).
300
+ */
301
+ prebuiltPropertyNameIndex,
302
+ /**
303
+ * DETECT WITHOUT EMITTING. A language that sets
304
+ * `fieldFallbackOnMethodLookup: false` (TypeScript) opts out of name
305
+ * inference because a real type system should answer precisely — that opt-out
306
+ * is right and stays. But skipping the pass wholesale also skipped its
307
+ * REPORTING, so a TypeScript read whose only anchor is JavaScript got the
308
+ * same silent empty answer R3-1 exists to remove, just in the other
309
+ * direction. Detection is not inference: counting what could not be linked
310
+ * asserts nothing about what it means.
311
+ */
312
+ reportOnly = false) {
313
+ const byName = prebuiltPropertyNameIndex ?? buildPropertyNameIndex(graph);
314
+ const ownFilePaths = new Set(parsedFiles.map((p) => p.filePath));
315
+ if (byName.size === 0) {
316
+ return {
317
+ emitted: 0,
318
+ ambiguous: 0,
319
+ narrowed: 0,
320
+ ambiguousNames: [],
321
+ crossLanguageOnly: 0,
322
+ crossLanguageOnlyNames: [],
323
+ };
324
+ }
325
+ const directImports = finalized === undefined
326
+ ? new Map()
327
+ : buildDirectImportMap(indexes, finalized);
328
+ let emitted = 0;
329
+ let ambiguous = 0;
330
+ let narrowed = 0;
331
+ let crossLanguageOnly = 0;
332
+ const ambiguousNames = new Set();
333
+ /** name -> the languages its definitions actually live in. */
334
+ const crossLanguageAnchors = new Map();
335
+ const seen = new Set();
336
+ for (const parsed of parsedFiles) {
337
+ for (const site of parsed.referenceSites) {
338
+ if (site.kind !== 'read' && site.kind !== 'write')
339
+ continue;
340
+ // A bare identifier is not a property access — without a receiver there
341
+ // is no object whose member this could be, and matching one by name
342
+ // would link a local variable to an unrelated object's key.
343
+ if (site.explicitReceiver === undefined)
344
+ continue;
345
+ const siteKey = callableFlowSiteKey(parsed.filePath, site.atRange);
346
+ if (skipSites.has(siteKey))
347
+ continue;
348
+ const allWithName = byName.get(site.name);
349
+ if (allWithName === undefined)
350
+ continue;
351
+ const candidates = candidatesForLanguage(allWithName, ownFilePaths);
352
+ if (candidates === undefined) {
353
+ // The name IS defined in this workspace, just not in a language this
354
+ // pass may infer across — so declining is correct, and staying silent
355
+ // about it is not. An empty answer here is byte-identical to "this
356
+ // field is unused", which is the confident-empty failure this whole
357
+ // series exists to remove; the only difference is that the missing
358
+ // fact is now about the ANALYZER's reach rather than the code's.
359
+ crossLanguageOnly++;
360
+ if (!crossLanguageAnchors.has(site.name)) {
361
+ crossLanguageAnchors.set(site.name, new Set(allWithName.map((c) => languageOf(c.filePath))));
362
+ }
363
+ continue;
364
+ }
365
+ if (candidates === OVERSATURATED) {
366
+ ambiguous++;
367
+ ambiguousNames.add(site.name);
368
+ continue;
369
+ }
370
+ // Resolved BEFORE narrowing: the enclosing callable is evidence the
371
+ // ranking needs, not just the edge's source.
372
+ const callerGraphId = resolveCallerGraphId(site.inScope, indexes, nodeLookup, site.atRange);
373
+ if (callerGraphId === undefined)
374
+ continue;
375
+ const choice = narrowToSingleCandidate(candidates, parsed.filePath, directImports.get(parsed.filePath), simpleNameOfGraphId(callerGraphId));
376
+ if (choice === null) {
377
+ ambiguous++;
378
+ ambiguousNames.add(site.name);
379
+ continue;
380
+ }
381
+ const targetId = choice.id;
382
+ if (choice.tier !== 'workspace-unique')
383
+ narrowed++;
384
+ // A property reading itself is not a fact about anything.
385
+ if (callerGraphId === targetId)
386
+ continue;
387
+ const dedupKey = `ACCESSES:${callerGraphId}->${targetId}:${site.atRange.startLine}:${site.atRange.startCol}`;
388
+ if (seen.has(dedupKey))
389
+ continue;
390
+ seen.add(dedupKey);
391
+ if (reportOnly)
392
+ continue;
393
+ // `addRelationship` is first-write-wins, so a precise edge already
394
+ // emitted for this exact id keeps ownership over the inference.
395
+ graph.addRelationship({
396
+ id: `rel:${dedupKey}`,
397
+ sourceId: callerGraphId,
398
+ targetId,
399
+ type: 'ACCESSES',
400
+ confidence: UNIQUE_NAME_CONFIDENCE,
401
+ reason: `${EDGE_REASON} (${choice.tier}): ${site.kind}`,
402
+ evidence: [],
403
+ });
404
+ emitted++;
405
+ }
406
+ }
407
+ return {
408
+ emitted,
409
+ ambiguous,
410
+ narrowed,
411
+ ambiguousNames: Array.from(ambiguousNames).sort().slice(0, MAX_REPORTED_AMBIGUOUS_NAMES),
412
+ crossLanguageOnly,
413
+ crossLanguageOnlyNames: Array.from(crossLanguageAnchors)
414
+ .sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
415
+ .slice(0, MAX_REPORTED_AMBIGUOUS_NAMES)
416
+ .map(([name, languages]) => ({ name, languages: Array.from(languages).sort() })),
417
+ };
418
+ }
@@ -26,6 +26,7 @@
26
26
  import type { PipelinePhase } from '../../pipeline-phases/types.js';
27
27
  import { SupportedLanguages } from '../../../../_shared/index.js';
28
28
  import type { ResolutionOutcome } from '../resolution-outcome.js';
29
+ import type { UndecidedSatisfaction } from '../contract/scope-resolver.js';
29
30
  import type { FunctionSummary } from '../../taint/summary-model.js';
30
31
  import type { CallSummary } from '../../taint/call-summary-model.js';
31
32
  import { type PdgEmitManifest } from '../../../lbug/pdg-emit-sink.js';
@@ -41,6 +42,34 @@ export interface ScopeResolutionOutput {
41
42
  readonly referenceEdgesEmitted: number;
42
43
  /** Additive stream of resolver diagnostics; does not affect graph edges. */
43
44
  readonly resolutionOutcomes: readonly ResolutionOutcome[];
45
+ /**
46
+ * Interfaces whose structural-satisfaction check could not be completed
47
+ * (#2873). Emits no edges — it is what lets a query distinguish "nothing
48
+ * implements this" from "we could not tell what implements this".
49
+ *
50
+ * Absent when no language ran; `[]` when one ran and decided everything.
51
+ */
52
+ readonly undecidedSatisfaction?: readonly UndecidedSatisfaction[];
53
+ /**
54
+ * Property inference facts a CALLER needs in order to read an empty result
55
+ * correctly (R3-1). Without these, "no ACCESSES for this field" is
56
+ * byte-identical whether the field is unused, ambiguous, or anchored in a
57
+ * language this pass may not infer across — three different situations with
58
+ * three different remedies.
59
+ */
60
+ readonly propertyInference: {
61
+ /** Sites declined because the name could not be narrowed to one definition. */
62
+ readonly ambiguous: number;
63
+ /** Those field names, capped. */
64
+ readonly ambiguousNames: readonly string[];
65
+ /** Sites declined because every definition of the name is another language. */
66
+ readonly crossLanguage: number;
67
+ /** Those field names with the languages their definitions live in, capped. */
68
+ readonly crossLanguageNames: readonly {
69
+ readonly name: string;
70
+ readonly languages: string[];
71
+ }[];
72
+ };
44
73
  /** Per-language breakdown for telemetry. */
45
74
  readonly perLanguage: ReadonlyMap<SupportedLanguages, {
46
75
  readonly filesProcessed: number;