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
@@ -1,5 +1,5 @@
1
1
  export type ContractType = 'http' | 'grpc' | 'thrift' | 'topic' | 'lib' | 'custom' | 'include';
2
- export type MatchType = 'exact' | 'manifest' | 'wildcard' | 'bm25' | 'embedding';
2
+ export type MatchType = 'exact' | 'manifest' | 'wildcard';
3
3
  export type ContractRole = 'provider' | 'consumer';
4
4
  export interface GroupConfig {
5
5
  version: number;
@@ -23,15 +23,10 @@ export interface DetectConfig {
23
23
  grpc: boolean;
24
24
  thrift: boolean;
25
25
  topics: boolean;
26
- shared_libs: boolean;
27
- embedding_fallback: boolean;
28
26
  includes: boolean;
29
27
  workspace_deps: boolean;
30
28
  }
31
29
  export interface MatchingConfig {
32
- bm25_threshold: number;
33
- embedding_threshold: number;
34
- max_candidates_per_step: number;
35
30
  /**
36
31
  * HTTP paths to exclude from cross-link matching. Contracts at these paths
37
32
  * are still extracted and visible in the registry, but they don't produce
@@ -90,7 +85,34 @@ export interface ContractRegistry {
90
85
  version: number;
91
86
  generatedAt: string;
92
87
  repoSnapshots: Record<string, RepoSnapshot>;
88
+ /** Configured repos with no entry in the registry. */
93
89
  missingRepos: string[];
90
+ /**
91
+ * Configured repos that ARE registered but that this sync could not extract
92
+ * from — the index would not open (version skew, lock, corruption), or an
93
+ * extractor threw partway through. The two are one bucket because the
94
+ * consequence is one thing: NONE of that repo's contracts are in this
95
+ * registry. Distinct from `missingRepos`, which is "no entry in the
96
+ * registry at all" and needs a different answer from the operator.
97
+ *
98
+ * Optional so a registry written before this field existed still parses —
99
+ * absent means "not recorded", not "none".
100
+ */
101
+ unreadableRepos?: string[];
102
+ /**
103
+ * Matching stages this sync was ASKED to skip, so a later reader can tell a
104
+ * short cross-link list from a complete one. `--exact-only` / `exactOnly`
105
+ * suppresses the wildcard stage, and the registry it writes is otherwise
106
+ * indistinguishable from one where that stage ran and matched nothing.
107
+ *
108
+ * Same tri-state as `unreadableRepos` and for the same reason: absent means
109
+ * "not recorded" (written before this field existed), `[]` means "measured,
110
+ * nothing was suppressed", and a populated list names the stages. Distinct
111
+ * from `truncated` / `truncationReason`, which report limits this run hit by
112
+ * accident — a suppressed stage is a deliberate request, and its remedy is
113
+ * "re-sync without exactOnly", not "fix the unreadable repo".
114
+ */
115
+ suppressedMatchStages?: MatchType[];
94
116
  contracts: StoredContract[];
95
117
  crossLinks: CrossLink[];
96
118
  }
@@ -104,8 +126,30 @@ export interface RepoHandle {
104
126
  repoPath: string;
105
127
  storagePath: string;
106
128
  }
107
- /** Why local impact or fan-out stopped early (e.g. wall-clock budget exhausted). */
108
- export type GroupImpactTruncationReason = 'timeout' | 'partial';
129
+ /**
130
+ * Why local impact or fan-out stopped early (e.g. wall-clock budget exhausted).
131
+ *
132
+ * `'timeout'` and `'partial'` are runtime limits — the same query can succeed on
133
+ * a retry. `'incomplete-sync'` is structural: the bridge itself was built from a
134
+ * sync that could not read every configured repo, so those repos' contracts are
135
+ * absent from every query against it until `gitnexus group sync` succeeds.
136
+ * `'suppressed-stage'` is structural too but has its own remedy: the sync was
137
+ * ASKED to skip a matching stage (`--exact-only`), so cross-links that stage
138
+ * would have found are absent by request. Retrying returns the same floor, and
139
+ * so does re-running the sync — the fix is to re-run it WITHOUT the flag. Kept a
140
+ * separate member rather than folded into `'incomplete-sync'` precisely because
141
+ * that remedy differs; telling an agent to repair a repo it read fine is the
142
+ * failure this distinction exists to prevent.
143
+ *
144
+ * A runtime array rather than a bare type union: every value here has to be
145
+ * explained on the agent-facing surface that returns it, and only an enumerable
146
+ * list lets a guard test assert that. A test that hand-lists the members passes
147
+ * forever once a fourth is added — which is the exact drift the guard exists to
148
+ * catch, so the list an agent is promised and the list the code can emit have
149
+ * to come from the same place.
150
+ */
151
+ export declare const GROUP_IMPACT_TRUNCATION_REASONS: readonly ["timeout", "partial", "incomplete-sync", "suppressed-stage"];
152
+ export type GroupImpactTruncationReason = (typeof GROUP_IMPACT_TRUNCATION_REASONS)[number];
109
153
  export interface GroupImpactResult {
110
154
  local: unknown;
111
155
  group: string;
@@ -120,6 +164,18 @@ export interface GroupImpactResult {
120
164
  cross_repo_hits: number;
121
165
  };
122
166
  risk: string;
167
+ /**
168
+ * `'lower-bound'` when the fan-out was cut short, so `risk` is a FLOOR, not a
169
+ * verdict. Same vocabulary as single-repo `impact`'s `epistemic` field.
170
+ *
171
+ * `mergeRisk` is monotone increasing in the number of traversed crossings, so
172
+ * dropping a crossing can only move the reported risk DOWN — a fully
173
+ * truncated fan-out returns bare `localRisk`, making a symbol whose blast
174
+ * radius crosses a repo boundary indistinguishable from one with no
175
+ * cross-repo consumers. Absent this marker a truncated run emits a
176
+ * confident-looking `risk` byte-identical to a complete one.
177
+ */
178
+ riskEpistemic?: 'lower-bound';
123
179
  /**
124
180
  * Milliseconds budget applied to the **Phase 1 local impact** leg (`safeLocalImpact`).
125
181
  * If the walk hits this wall first, expect `truncationReason: 'timeout'` and a partial `local` payload.
@@ -160,6 +216,12 @@ export interface CrossRepoImpact {
160
216
  };
161
217
  by_depth: Record<string, unknown[]>;
162
218
  affected_processes: string[];
219
+ /**
220
+ * Present when the bridge proves a repository boundary but the far endpoint
221
+ * has no graph symbol, so local fan-out cannot be attempted. Omitted for
222
+ * completed fan-out to preserve the existing serialized result shape.
223
+ */
224
+ fanout_status?: 'not_attempted';
163
225
  }
164
226
  export interface OutOfScopeLink {
165
227
  from: string;
@@ -184,5 +246,118 @@ export interface BridgeHandle {
184
246
  export interface BridgeMeta {
185
247
  version: number;
186
248
  generatedAt: string;
249
+ /**
250
+ * Size and mtime of the `bridge.lbug` this metadata was written for, so a
251
+ * reader can tell whether the two still belong together.
252
+ *
253
+ * `writeBridge` replaces the database and writes this file as two operations;
254
+ * a sync that stops between them leaves the PREVIOUS sync's metadata beside a
255
+ * new database, and `runGroupImpact` reads completeness from that metadata.
256
+ * Stamping the pair is what lets `bridgeMetaMatchesFile` reject the mismatch
257
+ * without anything having to be deleted — deleting the old metadata up front
258
+ * would lose it permanently on a swap that fails with the old database still
259
+ * in place, which is a normal Windows outcome when a read-only handle is held.
260
+ *
261
+ * Optional: metadata written before this existed carries no stamp. Such a
262
+ * file is not waved through — `bridgeMetaMatchesFile` falls back to comparing
263
+ * the two files' modification times, since a successful write orders the
264
+ * database rename before the metadata write and a database NEWER than the
265
+ * metadata beside it therefore cannot be the one it describes.
266
+ *
267
+ * That fallback proves WRITE ORDER, not provenance, and is wrong in both
268
+ * directions — a non-monotonic clock can make a mis-paired set read as
269
+ * ordered, and any copy or restore that rewrites the database's times after
270
+ * the metadata's demotes an intact legacy pair to a lower bound until the
271
+ * next sync re-stamps it. A stamped pair never reaches that fallback, which
272
+ * is the reason to prefer stamping over widening the heuristic. Both
273
+ * directions are spelled out at `bridgeMetaMatchesFile`.
274
+ */
275
+ bridgeSize?: number;
276
+ bridgeMtimeMs?: number;
277
+ /**
278
+ * Reader-side only: true when `meta.json` parsed but one of its repo lists
279
+ * held a value that was not a list of repo paths.
280
+ *
281
+ * NEVER PERSISTED. `readBridgeMeta` sets it to describe what it found in the
282
+ * file; `writeBridgeMeta`'s only caller builds a fresh literal, so it cannot
283
+ * round-trip back to disk. It lives on this interface rather than on a
284
+ * reader-only subtype so that `readBridgeMeta` keeps the exact signature
285
+ * every caller already compiles against.
286
+ *
287
+ * The unusable value is dropped rather than normalized, so `missingRepos: []`
288
+ * on such a result is inert filler — this flag, not the empty list, is what
289
+ * says the bridge's provenance is unknown.
290
+ */
291
+ repoListsUnreadable?: boolean;
292
+ /**
293
+ * Reader-side only: did this metadata pair with the `bridge.lbug` beside it,
294
+ * measured BEFORE anything opened that database?
295
+ *
296
+ * NEVER PERSISTED, for the same reason as `repoListsUnreadable`.
297
+ *
298
+ * The measurement has to happen before the open, and the answer has to be
299
+ * carried rather than recomputed. `runGroupImpact` and `runGroupTrace` open
300
+ * the bridge and only then ask about provenance, so a platform where a
301
+ * read-only open advances the database's mtime would fail every unstamped
302
+ * pair the moment it was read — turning back-compat for pre-stamp bridges
303
+ * into a repo-wide "everything is a lower bound". Whether any given
304
+ * LadybugDB build and OS does that is not something a reader should have to
305
+ * know, and it cannot be observed on Windows, where the in-process
306
+ * write→read reopen this would need is a documented limitation. Ordering the
307
+ * check ahead of the open makes the question moot on every platform instead
308
+ * of true on the ones that happen to be testable.
309
+ */
310
+ pairedWithDatabase?: boolean;
311
+ /**
312
+ * PERSISTED, unlike the two fields above: the writer of this metadata could
313
+ * not establish that it describes the `bridge.lbug` beside it, and no reader
314
+ * may conclude otherwise from the files alone.
315
+ *
316
+ * Written by `refreshPreservedBridgeMeta` — the preserve path in `syncGroup`,
317
+ * which refreshes the diagnostic lists of a bridge it deliberately does NOT
318
+ * rebuild. That refresh rewrites `meta.json` ATOMICALLY, so this file's mtime
319
+ * becomes now while the database's stays old; and "metadata newer than the
320
+ * database beside it" is exactly the write order that
321
+ * `unstampedMetaPairsByWriteOrder` accepts. A refresh that simply carried the
322
+ * old fields forward would therefore convert a pair that check had been
323
+ * REJECTING into one it waves through — laundering unknown provenance into
324
+ * verified provenance, which is the fail-open this whole channel exists to
325
+ * close.
326
+ *
327
+ * "Just don't write a stamp" is not a substitute, and is worse: an unstamped
328
+ * metadata file is judged on the two file times, and the refresh has already
329
+ * moved them into the accepting order. The verdict has to be recorded IN the
330
+ * file, because the write that records it is itself what destroys the
331
+ * evidence a reader would otherwise use.
332
+ *
333
+ * `bridgeMetaMatchesFile` rejects on this ahead of both the stamp and the
334
+ * write-order heuristic, so `ensureBridgeReady` answers
335
+ * `pairedWithDatabase: false` and `bridgeProvenanceUnknown` reports the
336
+ * cross-repo answer as a lower bound. That is the ONE enforcement point; do
337
+ * not add a second reader for this field.
338
+ *
339
+ * Self-clearing: a successful `writeBridge` builds fresh metadata from a
340
+ * literal and never sets it, so the next good sync retires the marker without
341
+ * anything having to delete it.
342
+ */
343
+ provenanceUnknown?: boolean;
187
344
  missingRepos: string[];
345
+ /**
346
+ * Configured repos the sync that produced this bridge could not extract from
347
+ * (see `ContractRegistry.unreadableRepos`). Their contracts and every
348
+ * cross-link touching them are absent from `bridge.lbug`, so a cross-repo
349
+ * impact query against this bridge is a lower bound, not a verdict —
350
+ * `runGroupImpact` folds a non-empty value into its truncation fields for
351
+ * exactly that reason.
352
+ * Optional: a bridge written before this field existed does not record it.
353
+ */
354
+ unreadableRepos?: string[];
355
+ /**
356
+ * Matching stages the sync that built this bridge was asked to skip.
357
+ * PERSISTED, like `unreadableRepos` and unlike `repoListsUnreadable` — a
358
+ * later `group_impact` or `trace` reads this bridge with no access to the run
359
+ * that produced it, and a narrowed graph is otherwise indistinguishable from
360
+ * a complete one. Same tri-state: absent is "not recorded".
361
+ */
362
+ suppressedMatchStages?: MatchType[];
188
363
  }
@@ -1 +1,28 @@
1
- export {};
1
+ /**
2
+ * Why local impact or fan-out stopped early (e.g. wall-clock budget exhausted).
3
+ *
4
+ * `'timeout'` and `'partial'` are runtime limits — the same query can succeed on
5
+ * a retry. `'incomplete-sync'` is structural: the bridge itself was built from a
6
+ * sync that could not read every configured repo, so those repos' contracts are
7
+ * absent from every query against it until `gitnexus group sync` succeeds.
8
+ * `'suppressed-stage'` is structural too but has its own remedy: the sync was
9
+ * ASKED to skip a matching stage (`--exact-only`), so cross-links that stage
10
+ * would have found are absent by request. Retrying returns the same floor, and
11
+ * so does re-running the sync — the fix is to re-run it WITHOUT the flag. Kept a
12
+ * separate member rather than folded into `'incomplete-sync'` precisely because
13
+ * that remedy differs; telling an agent to repair a repo it read fine is the
14
+ * failure this distinction exists to prevent.
15
+ *
16
+ * A runtime array rather than a bare type union: every value here has to be
17
+ * explained on the agent-facing surface that returns it, and only an enumerable
18
+ * list lets a guard test assert that. A test that hand-lists the members passes
19
+ * forever once a fourth is added — which is the exact drift the guard exists to
20
+ * catch, so the list an agent is promised and the list the code can emit have
21
+ * to come from the same place.
22
+ */
23
+ export const GROUP_IMPACT_TRUNCATION_REASONS = [
24
+ 'timeout',
25
+ 'partial',
26
+ 'incomplete-sync',
27
+ 'suppressed-stage',
28
+ ];
@@ -6,8 +6,8 @@
6
6
  * replaced, produce a smaller KnowledgeGraph that contains:
7
7
  *
8
8
  * - Every node whose `properties.filePath` is in `toWriteSet`.
9
- * - Every graph-wide node (Community, Process) — these are regenerated
10
- * each run by the communities/processes phases and must be fully
9
+ * - Every graph-wide node (Community, Process, and Spring metadata
10
+ * placeholders) — these are regenerated each run and must be fully
11
11
  * rewritten.
12
12
  * - Every relationship where AT LEAST ONE endpoint is in the writable
13
13
  * set above. Relationships entirely between unchanged-file nodes
@@ -51,10 +51,13 @@ import type { KnowledgeGraph } from '../graph/types.js';
51
51
  export declare const extractChangedSubgraph: (fullGraph: KnowledgeGraph, toWriteSet: ReadonlySet<string>) => KnowledgeGraph;
52
52
  /**
53
53
  * Public — derive the EFFECTIVE write-set: `toWriteSet` expanded by one
54
- * hop along every edge in the new graph that crosses the writable
55
- * boundary (one endpoint in a writable file, the other in an unchanged
56
- * file). The unchanged-side file is pulled in so its stale rows are
57
- * deleted + rewritten in lockstep with the changed side.
54
+ * hop along every file-owned edge in the new graph that crosses the
55
+ * writable boundary (one endpoint in a writable file, the other in an
56
+ * unchanged file). Graph-wide relationships are excluded: their owner
57
+ * phase delete-alls and re-extracts them independently, so following them
58
+ * here would turn high-fan-out metadata into a near-full-repository write.
59
+ * For ordinary edges, the unchanged-side file is pulled in so its stale
60
+ * rows are deleted + rewritten in lockstep with the changed side.
58
61
  *
59
62
  * Single pass over the edge list. Does NOT mutate `toWriteSet`. The
60
63
  * orchestrator MUST feed the returned set to both `deleteNodesForFiles`
@@ -6,8 +6,8 @@
6
6
  * replaced, produce a smaller KnowledgeGraph that contains:
7
7
  *
8
8
  * - Every node whose `properties.filePath` is in `toWriteSet`.
9
- * - Every graph-wide node (Community, Process) — these are regenerated
10
- * each run by the communities/processes phases and must be fully
9
+ * - Every graph-wide node (Community, Process, and Spring metadata
10
+ * placeholders) — these are regenerated each run and must be fully
11
11
  * rewritten.
12
12
  * - Every relationship where AT LEAST ONE endpoint is in the writable
13
13
  * set above. Relationships entirely between unchanged-file nodes
@@ -48,7 +48,12 @@
48
48
  * IMPORTS from the pre-pipeline DB) covers that case instead.
49
49
  */
50
50
  import { createKnowledgeGraph } from '../graph/graph.js';
51
- const isGraphWide = (label) => label === 'Community' || label === 'Process';
51
+ import { isSpringAutoConfigurationDeclaration, isSpringAutoConfigurationSyntheticClass, } from '../ingestion/frameworks/spring/auto-configuration.js';
52
+ import { isSpringAopEvidenceNode } from '../ingestion/frameworks/spring/aop.js';
53
+ const isGraphWideNode = (node) => node.label === 'Community' ||
54
+ node.label === 'Process' ||
55
+ isSpringAopEvidenceNode(node) ||
56
+ isSpringAutoConfigurationSyntheticClass(node);
52
57
  /**
53
58
  * Relationship types whose VALIDITY is a whole-program property, not a
54
59
  * function of their endpoints' files (#2084 M4 U6). `TAINT_PATH` (cross-
@@ -76,7 +81,20 @@ const isGraphWide = (label) => label === 'Community' || label === 'Process';
76
81
  // analyze, and the `incrementalInProgress` dirty flag (saved before any
77
82
  // delete) forces a full rebuild on the next run. Temporary absence is
78
83
  // possible; duplicates are not.
79
- const isGraphWideRelType = (type) => type === 'TAINT_PATH' || type === 'CALL_SUMMARY' || type === 'INJECTS';
84
+ //
85
+ // Spring auto-configuration DECLARES edges (#2415) are also recomputed from
86
+ // repository-wide metadata. A third-file class addition/removal can retarget
87
+ // an unchanged declaration, so they need the same global re-extract contract.
88
+ // DECLARES itself is generic, however: only the two Spring-owned reasons are
89
+ // graph-wide, leaving future metadata systems under their own lifecycle.
90
+ const isGraphWideRelationship = (relationship) => relationship.type === 'TAINT_PATH' ||
91
+ relationship.type === 'CALL_SUMMARY' ||
92
+ relationship.type === 'INJECTS' ||
93
+ // Spring pointcut matching (#2416) is repository-wide. A third-file change
94
+ // can alter annotation-name visibility or the set matched by a wildcard,
95
+ // even when neither endpoint file changed.
96
+ relationship.type === 'ADVISED_BY' ||
97
+ isSpringAutoConfigurationDeclaration(relationship);
80
98
  /**
81
99
  * Build a Map<nodeId, filePath> for every File-bound node in the graph.
82
100
  * Graph-wide nodes (Community/Process) have no filePath and are filtered.
@@ -95,7 +113,7 @@ export const extractChangedSubgraph = (fullGraph, toWriteSet) => {
95
113
  const writableNodeIds = new Set();
96
114
  fullGraph.forEachNode((n) => {
97
115
  const filePath = n.properties?.filePath;
98
- const include = (filePath && toWriteSet.has(filePath)) || isGraphWide(n.label);
116
+ const include = (filePath && toWriteSet.has(filePath)) || isGraphWideNode(n);
99
117
  if (include) {
100
118
  sub.addNode(n);
101
119
  writableNodeIds.add(n.id);
@@ -104,7 +122,7 @@ export const extractChangedSubgraph = (fullGraph, toWriteSet) => {
104
122
  fullGraph.forEachRelationship((r) => {
105
123
  if (writableNodeIds.has(r.sourceId) ||
106
124
  writableNodeIds.has(r.targetId) ||
107
- isGraphWideRelType(r.type)) {
125
+ isGraphWideRelationship(r)) {
108
126
  sub.addRelationship(r);
109
127
  }
110
128
  });
@@ -112,10 +130,13 @@ export const extractChangedSubgraph = (fullGraph, toWriteSet) => {
112
130
  };
113
131
  /**
114
132
  * Public — derive the EFFECTIVE write-set: `toWriteSet` expanded by one
115
- * hop along every edge in the new graph that crosses the writable
116
- * boundary (one endpoint in a writable file, the other in an unchanged
117
- * file). The unchanged-side file is pulled in so its stale rows are
118
- * deleted + rewritten in lockstep with the changed side.
133
+ * hop along every file-owned edge in the new graph that crosses the
134
+ * writable boundary (one endpoint in a writable file, the other in an
135
+ * unchanged file). Graph-wide relationships are excluded: their owner
136
+ * phase delete-alls and re-extracts them independently, so following them
137
+ * here would turn high-fan-out metadata into a near-full-repository write.
138
+ * For ordinary edges, the unchanged-side file is pulled in so its stale
139
+ * rows are deleted + rewritten in lockstep with the changed side.
119
140
  *
120
141
  * Single pass over the edge list. Does NOT mutate `toWriteSet`. The
121
142
  * orchestrator MUST feed the returned set to both `deleteNodesForFiles`
@@ -126,6 +147,8 @@ export const computeEffectiveWriteSet = (fullGraph, toWriteSet) => {
126
147
  const nodeFilePaths = indexNodeFilePaths(fullGraph);
127
148
  const expanded = new Set(toWriteSet);
128
149
  fullGraph.forEachRelationship((r) => {
150
+ if (isGraphWideRelationship(r))
151
+ return;
129
152
  const sourcePath = nodeFilePaths.get(r.sourceId);
130
153
  const targetPath = nodeFilePaths.get(r.targetId);
131
154
  if (!sourcePath || !targetPath)
@@ -1,5 +1,80 @@
1
1
  import type { RepoMeta } from '../storage/repo-manager.js';
2
- export declare const INDEX_INCOMPLETE_REASONS: readonly ["incremental-in-progress", "embedding-checkpoint-pending"];
2
+ export declare const INDEX_INCOMPLETE_REASONS: readonly ["incremental-in-progress", "embedding-checkpoint-pending", "embedding-count-unverified", "graph-write-collapsed"];
3
3
  export type IndexIncompleteReason = (typeof INDEX_INCOMPLETE_REASONS)[number];
4
+ /**
5
+ * Fraction of the pipeline's relationship count that must survive into the DB
6
+ * before the write counts as collapsed. Deliberately generous: this detects
7
+ * "most of the graph did not persist" (the reported case lost ~91%), not a
8
+ * per-edge reconciliation.
9
+ */
10
+ export declare const GRAPH_WRITE_COLLAPSE_RATIO = 0.5;
11
+ /**
12
+ * Below this many relationships the ratio is meaningless — a handful of edges
13
+ * lost to legitimate filtering would trip it — so small repos are exempt.
14
+ */
15
+ export declare const GRAPH_WRITE_COLLAPSE_MIN_EDGES = 100;
16
+ /** Why {@link detectGraphWriteCollapse} could reach no verdict at all. */
17
+ export type GraphWriteCollapseUnmeasurableReason =
18
+ /** The pipeline's own total was not a usable number (or was zero). */
19
+ 'expected-unavailable'
20
+ /** The DB-side count could not be READ — a query that threw, no connection. */
21
+ | 'persisted-unreadable'
22
+ /** Set by the CALLER: an incremental write persists only the changed
23
+ * subgraph, so whole-scope counts are not comparable to it. */
24
+ | 'incremental-write';
25
+ /**
26
+ * The three outcomes of the collapse check, kept APART because two of them used
27
+ * to share `undefined` and the conflation erased a stamp recording real,
28
+ * unrepaired edge loss.
29
+ *
30
+ * `'healthy'` is a POSITIVE all-clear — the counts were both taken and enough
31
+ * rows persisted — and is the only outcome that licenses clearing a previous
32
+ * `graph-write-collapsed` stamp. `'unmeasurable'` says the comparison never
33
+ * happened; the previous stamp must survive it, because nothing has repaired
34
+ * whatever it recorded.
35
+ */
36
+ export type GraphWriteCollapseVerdict = {
37
+ verdict: 'collapsed';
38
+ expected: number;
39
+ persisted: number;
40
+ } | {
41
+ verdict: 'healthy';
42
+ } | {
43
+ verdict: 'unmeasurable';
44
+ reason: GraphWriteCollapseUnmeasurableReason;
45
+ };
46
+ /**
47
+ * Decide whether a finished write collapsed, comparing what the pipeline
48
+ * produced against what the DB hands back.
49
+ *
50
+ * A RATIO, not equality: some relationship types do not round-trip one-for-one
51
+ * and `--pdg` writes MORE rows into the same table, so demanding equality would
52
+ * fire on healthy runs. Only a collapse is a defect.
53
+ *
54
+ * FAIL-SAFE at `expected === 0`: an implementation that offloads relationships
55
+ * out of memory may not be able to report a total, and a false "your index is
56
+ * broken" is worse than a missed one. That case is `'unmeasurable'`, NOT
57
+ * `'healthy'` — nothing was compared, so nothing was cleared.
58
+ *
59
+ * Returns a THREE-WAY verdict rather than `{...} | undefined`. The absent value
60
+ * meant both "measured, fine" and "could not measure", and the caller — which
61
+ * decides whether to keep or erase the persisted `graph-write-collapsed` stamp —
62
+ * cannot tell those apart from a shared `undefined`. It guessed by write mode
63
+ * instead, so a full run whose structural count threw took the
64
+ * "no collapse ⇒ clear it" branch and deleted a stamp recording real loss.
65
+ */
66
+ export declare function detectGraphWriteCollapse(expected: number,
67
+ /**
68
+ * Relationships readable from the DB, or `undefined` when the count could
69
+ * not be READ at all (no connection, a query that threw).
70
+ *
71
+ * The distinction is load-bearing and was got wrong once: `getLbugStats`
72
+ * reports `edges: 0` for "no connection", "query threw" AND "empty table"
73
+ * alike, so passing it straight in made every run without a readable DB look
74
+ * like a total collapse. An unmeasurable count is not a measured zero —
75
+ * accepting `undefined` here is what keeps this check from committing the
76
+ * same confident-zero error it exists to catch.
77
+ */
78
+ persisted: number | undefined): GraphWriteCollapseVerdict;
4
79
  /** Stable machine-readable reasons an index cannot be certified complete. */
5
- export declare function getIndexIncompleteReasons(meta: Pick<RepoMeta, 'incrementalInProgress' | 'embeddingCheckpoint'> | null | undefined): IndexIncompleteReason[];
80
+ export declare function getIndexIncompleteReasons(meta: Pick<RepoMeta, 'incrementalInProgress' | 'embeddingCheckpoint' | 'graphWriteCollapsed'> | null | undefined): IndexIncompleteReason[];
@@ -1,13 +1,120 @@
1
+ import { checkpointKind } from './embedding-checkpoint.js';
1
2
  export const INDEX_INCOMPLETE_REASONS = [
2
3
  'incremental-in-progress',
3
4
  'embedding-checkpoint-pending',
5
+ 'embedding-count-unverified',
6
+ 'graph-write-collapsed',
4
7
  ];
8
+ /**
9
+ * Fraction of the pipeline's relationship count that must survive into the DB
10
+ * before the write counts as collapsed. Deliberately generous: this detects
11
+ * "most of the graph did not persist" (the reported case lost ~91%), not a
12
+ * per-edge reconciliation.
13
+ */
14
+ export const GRAPH_WRITE_COLLAPSE_RATIO = 0.5;
15
+ /**
16
+ * Below this many relationships the ratio is meaningless — a handful of edges
17
+ * lost to legitimate filtering would trip it — so small repos are exempt.
18
+ */
19
+ export const GRAPH_WRITE_COLLAPSE_MIN_EDGES = 100;
20
+ /**
21
+ * Decide whether a finished write collapsed, comparing what the pipeline
22
+ * produced against what the DB hands back.
23
+ *
24
+ * A RATIO, not equality: some relationship types do not round-trip one-for-one
25
+ * and `--pdg` writes MORE rows into the same table, so demanding equality would
26
+ * fire on healthy runs. Only a collapse is a defect.
27
+ *
28
+ * FAIL-SAFE at `expected === 0`: an implementation that offloads relationships
29
+ * out of memory may not be able to report a total, and a false "your index is
30
+ * broken" is worse than a missed one. That case is `'unmeasurable'`, NOT
31
+ * `'healthy'` — nothing was compared, so nothing was cleared.
32
+ *
33
+ * Returns a THREE-WAY verdict rather than `{...} | undefined`. The absent value
34
+ * meant both "measured, fine" and "could not measure", and the caller — which
35
+ * decides whether to keep or erase the persisted `graph-write-collapsed` stamp —
36
+ * cannot tell those apart from a shared `undefined`. It guessed by write mode
37
+ * instead, so a full run whose structural count threw took the
38
+ * "no collapse ⇒ clear it" branch and deleted a stamp recording real loss.
39
+ */
40
+ export function detectGraphWriteCollapse(expected,
41
+ /**
42
+ * Relationships readable from the DB, or `undefined` when the count could
43
+ * not be READ at all (no connection, a query that threw).
44
+ *
45
+ * The distinction is load-bearing and was got wrong once: `getLbugStats`
46
+ * reports `edges: 0` for "no connection", "query threw" AND "empty table"
47
+ * alike, so passing it straight in made every run without a readable DB look
48
+ * like a total collapse. An unmeasurable count is not a measured zero —
49
+ * accepting `undefined` here is what keeps this check from committing the
50
+ * same confident-zero error it exists to catch.
51
+ */
52
+ persisted) {
53
+ // Both sides must be REAL NUMBERS before any comparison. A non-numeric
54
+ // `expected` (a graph implementation that reports no total, a lightweight
55
+ // pipeline result) does not merely skip the guards — it INVERTS them:
56
+ // `undefined < 100` is false, so the min-edges exemption never fires, and
57
+ // `0 >= undefined * 0.5` is `0 >= NaN`, also false, so the ratio check
58
+ // "passes" too and a healthy run is reported as a total collapse. Comparing
59
+ // against a non-number is the one way this check can manufacture the exact
60
+ // false certainty it was written to prevent.
61
+ if (!Number.isFinite(expected)) {
62
+ return { verdict: 'unmeasurable', reason: 'expected-unavailable' };
63
+ }
64
+ if (typeof persisted !== 'number' || !Number.isFinite(persisted)) {
65
+ return { verdict: 'unmeasurable', reason: 'persisted-unreadable' };
66
+ }
67
+ const expectedCount = expected;
68
+ const persistedCount = persisted;
69
+ // FAIL-SAFE, and `'unmeasurable'` rather than `'healthy'`: a zero expectation
70
+ // is the documented "could not report a total" case, not evidence the write
71
+ // went well. Reporting it as an all-clear would let a run that measured
72
+ // nothing erase a stamp recording a previous run's real loss.
73
+ if (expectedCount === 0) {
74
+ return { verdict: 'unmeasurable', reason: 'expected-unavailable' };
75
+ }
76
+ // A TOTAL loss is never small enough to excuse. The min-edges exemption
77
+ // exists for "a handful of edges lost to legitimate filtering", which its own
78
+ // docstring says — it does not describe a persisted count of zero. Evaluated
79
+ // before the exemption because the exemption looked only at `expected`:
80
+ // `expected = 99, persisted = 0` lost every single edge and still returned
81
+ // no verdict, leaving the metadata fresh and the CLI reporting success.
82
+ if (expectedCount > 0 && persistedCount === 0) {
83
+ return { verdict: 'collapsed', expected: expectedCount, persisted: persistedCount };
84
+ }
85
+ // The small-repo exemption and the cleared ratio are both `'healthy'`, not
86
+ // `'unmeasurable'`: both counts WERE taken, and the comparison ran. Calling
87
+ // the exemption a non-verdict would make a stamp unclearable on any repo that
88
+ // shrank below the threshold — a permanent forced-rebuild wedge, which is the
89
+ // failure this taxonomy exists to avoid rather than to relocate.
90
+ if (expectedCount < GRAPH_WRITE_COLLAPSE_MIN_EDGES)
91
+ return { verdict: 'healthy' };
92
+ if (persistedCount >= expectedCount * GRAPH_WRITE_COLLAPSE_RATIO)
93
+ return { verdict: 'healthy' };
94
+ return { verdict: 'collapsed', expected: expectedCount, persisted: persistedCount };
95
+ }
5
96
  /** Stable machine-readable reasons an index cannot be certified complete. */
6
97
  export function getIndexIncompleteReasons(meta) {
7
98
  const reasons = [];
8
99
  if (meta?.incrementalInProgress)
9
100
  reasons.push('incremental-in-progress');
10
- if (meta?.embeddingCheckpoint)
11
- reasons.push('embedding-checkpoint-pending');
101
+ // The run finished and wrote metadata, but far fewer edges reached the DB
102
+ // than the pipeline produced — the "refresh reported success, the index is
103
+ // unusable" failure. Without this the index reads as fresh and every tool
104
+ // answers from a graph missing most of its edges, which is indistinguishable
105
+ // from a codebase that genuinely has no such relationships.
106
+ if (meta?.graphWriteCollapsed)
107
+ reasons.push('graph-write-collapsed');
108
+ if (meta?.embeddingCheckpoint) {
109
+ // The three checkpoint kinds are not one operator-facing state. GUARDRAILS
110
+ // and the runbook document `embedding-checkpoint-pending` as "N node(s)
111
+ // lost their embeddings to endpoint failures" — true for 'interrupted' and
112
+ // 'partial', a lie for 'unverified-count', whose pending set is empty and
113
+ // whose only defect is a count nobody could measure (see the `kind` doc in
114
+ // repo-manager.ts).
115
+ reasons.push(checkpointKind(meta.embeddingCheckpoint) === 'unverified-count'
116
+ ? 'embedding-count-unverified'
117
+ : 'embedding-checkpoint-pending');
118
+ }
12
119
  return reasons;
13
120
  }
@@ -16,11 +16,22 @@
16
16
  */
17
17
  import { KnowledgeGraph } from '../graph/types.js';
18
18
  import type { SemanticModel, SymbolTableReader } from './model/index.js';
19
+ import type { ParsedImport, SymbolDefinition } from '../../_shared/index.js';
19
20
  import type { ExtractedRoute, ExtractedFetchCall } from './workers/parse-worker.js';
20
21
  import type { ExtractedDecoratorRoute } from './workers/parse-worker.js';
21
22
  /** Per-file resolved type bindings for exported symbols.
22
23
  * Consumed by the cross-file re-resolution / enrichment pass. */
23
24
  export type ExportedTypeMap = Map<string, Map<string, string>>;
25
+ interface RouteResolutionFile {
26
+ readonly filePath: string;
27
+ readonly parsedImports: readonly ParsedImport[];
28
+ readonly localDefs: readonly SymbolDefinition[];
29
+ }
30
+ interface RouteHandlerResolutionContext {
31
+ readonly files: readonly RouteResolutionFile[];
32
+ readonly resolveImportTarget: (parsedImport: ParsedImport, fromFile: string) => string | null;
33
+ readonly isExportedSymbol: (nodeId: string) => boolean;
34
+ }
24
35
  /** Record one exported graph node into the incremental ExportedTypeMap. */
25
36
  export declare const accumulateExportedTypesFromParsedNode: (result: ExportedTypeMap, node: {
26
37
  id: string;
@@ -86,7 +97,7 @@ export declare const processRoutesFromExtracted: (graph: KnowledgeGraph, extract
86
97
  * `handlerSymbolId`; the extractor then falls back to source scan for that route
87
98
  * (fail-open, no regression, never a wrong handler).
88
99
  */
89
- export declare function resolveRouteHandlerSymbols(model: SemanticModel, extractedRoutes: readonly ExtractedRoute[], decoratorRoutes: readonly ExtractedDecoratorRoute[]): Map<string, string>;
100
+ export declare function resolveRouteHandlerSymbols(model: SemanticModel, extractedRoutes: readonly ExtractedRoute[], decoratorRoutes: readonly ExtractedDecoratorRoute[], routeContext?: RouteHandlerResolutionContext): Map<string, string>;
90
101
  /**
91
102
  * Extract property access keys from a consumer file's source code near fetch calls.
92
103
  *
@@ -112,3 +123,4 @@ export declare const extractConsumerAccessedKeys: (content: string) => string[];
112
123
  */
113
124
  export declare const processNextjsFetchRoutes: (graph: KnowledgeGraph, fetchCalls: ExtractedFetchCall[], routeUrlToKeys: Map<string, string[]>, // routeURL → route node keys at that URL
114
125
  consumerContents?: Map<string, string>) => void;
126
+ export {};