gitnexus 1.6.9 → 1.6.10-aptos.1

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 (540) hide show
  1. package/README.md +236 -53
  2. package/dist/_shared/graph/types.d.ts +67 -3
  3. package/dist/_shared/graph/types.d.ts.map +1 -1
  4. package/dist/_shared/index.d.ts +1 -0
  5. package/dist/_shared/index.d.ts.map +1 -1
  6. package/dist/_shared/index.js.map +1 -1
  7. package/dist/_shared/integrations/resilient-fetch.d.ts +3 -1
  8. package/dist/_shared/integrations/resilient-fetch.d.ts.map +1 -1
  9. package/dist/_shared/integrations/resilient-fetch.js +4 -3
  10. package/dist/_shared/integrations/resilient-fetch.js.map +1 -1
  11. package/dist/_shared/language-detection.d.ts.map +1 -1
  12. package/dist/_shared/language-detection.js +2 -0
  13. package/dist/_shared/language-detection.js.map +1 -1
  14. package/dist/_shared/languages.d.ts +2 -0
  15. package/dist/_shared/languages.d.ts.map +1 -1
  16. package/dist/_shared/languages.js +2 -0
  17. package/dist/_shared/languages.js.map +1 -1
  18. package/dist/_shared/lbug/schema-constants.d.ts +2 -2
  19. package/dist/_shared/lbug/schema-constants.d.ts.map +1 -1
  20. package/dist/_shared/lbug/schema-constants.js +8 -0
  21. package/dist/_shared/lbug/schema-constants.js.map +1 -1
  22. package/dist/_shared/pipeline.d.ts +1 -1
  23. package/dist/_shared/pipeline.d.ts.map +1 -1
  24. package/dist/_shared/scope-resolution/callable-flow-site.d.ts +110 -0
  25. package/dist/_shared/scope-resolution/callable-flow-site.d.ts.map +1 -0
  26. package/dist/_shared/scope-resolution/callable-flow-site.js +11 -0
  27. package/dist/_shared/scope-resolution/callable-flow-site.js.map +1 -0
  28. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts +1 -1
  29. package/dist/_shared/scope-resolution/finalize-algorithm.d.ts.map +1 -1
  30. package/dist/_shared/scope-resolution/finalize-algorithm.js +1 -1
  31. package/dist/_shared/scope-resolution/finalize-algorithm.js.map +1 -1
  32. package/dist/_shared/scope-resolution/language-classification.d.ts.map +1 -1
  33. package/dist/_shared/scope-resolution/language-classification.js +1 -0
  34. package/dist/_shared/scope-resolution/language-classification.js.map +1 -1
  35. package/dist/_shared/scope-resolution/parsed-file.d.ts +7 -0
  36. package/dist/_shared/scope-resolution/parsed-file.d.ts.map +1 -1
  37. package/dist/_shared/scope-resolution/reference-site.d.ts +9 -1
  38. package/dist/_shared/scope-resolution/reference-site.d.ts.map +1 -1
  39. package/dist/_shared/scope-resolution/types.d.ts +20 -3
  40. package/dist/_shared/scope-resolution/types.d.ts.map +1 -1
  41. package/dist/cli/ai-context.d.ts +1 -1
  42. package/dist/cli/ai-context.js +25 -44
  43. package/dist/cli/analyze.d.ts +5 -2
  44. package/dist/cli/analyze.js +205 -11
  45. package/dist/cli/clean.js +17 -3
  46. package/dist/cli/cli-message.d.ts +1 -1
  47. package/dist/cli/doctor.d.ts +18 -0
  48. package/dist/cli/doctor.js +96 -5
  49. package/dist/cli/editor-targets.d.ts +17 -2
  50. package/dist/cli/editor-targets.js +44 -0
  51. package/dist/cli/embeddings.d.ts +12 -0
  52. package/dist/cli/embeddings.js +49 -0
  53. package/dist/cli/eval-server.d.ts +23 -1
  54. package/dist/cli/eval-server.js +126 -8
  55. package/dist/cli/help-i18n.js +6 -0
  56. package/dist/cli/i18n/en.d.ts +18 -8
  57. package/dist/cli/i18n/en.js +18 -8
  58. package/dist/cli/i18n/resources.d.ts +28 -8
  59. package/dist/cli/i18n/zh-CN.d.ts +10 -0
  60. package/dist/cli/i18n/zh-CN.js +18 -8
  61. package/dist/cli/index.js +21 -7
  62. package/dist/cli/lazy-action.d.ts +7 -0
  63. package/dist/cli/lazy-action.js +27 -0
  64. package/dist/cli/mcp.js +6 -3
  65. package/dist/cli/move-availability.d.ts +5 -0
  66. package/dist/cli/move-availability.js +11 -0
  67. package/dist/cli/setup.d.ts +8 -0
  68. package/dist/cli/setup.js +230 -32
  69. package/dist/cli/skill-gen.js +38 -18
  70. package/dist/cli/standard-skills.d.ts +76 -0
  71. package/dist/cli/standard-skills.js +45 -0
  72. package/dist/cli/status.d.ts +4 -1
  73. package/dist/cli/status.js +57 -4
  74. package/dist/cli/tool.js +11 -0
  75. package/dist/cli/uninstall.js +77 -18
  76. package/dist/cli/wiki.d.ts +1 -0
  77. package/dist/cli/wiki.js +7 -1
  78. package/dist/config/ignore-service.d.ts +2 -0
  79. package/dist/config/ignore-service.js +27 -0
  80. package/dist/core/analysis-features.d.ts +21 -0
  81. package/dist/core/analysis-features.js +59 -0
  82. package/dist/core/analyzer-identity.d.ts +74 -0
  83. package/dist/core/analyzer-identity.js +1820 -0
  84. package/dist/core/augmentation/engine.js +13 -8
  85. package/dist/core/embeddings/embedder.d.ts +3 -2
  86. package/dist/core/embeddings/embedder.js +24 -7
  87. package/dist/core/embeddings/embedding-identity.d.ts +11 -0
  88. package/dist/core/embeddings/embedding-identity.js +24 -0
  89. package/dist/core/embeddings/embedding-pipeline.d.ts +36 -1
  90. package/dist/core/embeddings/embedding-pipeline.js +100 -9
  91. package/dist/core/embeddings/http-client.d.ts +33 -3
  92. package/dist/core/embeddings/http-client.js +237 -25
  93. package/dist/core/embeddings/node-module-compat.d.ts +25 -0
  94. package/dist/core/embeddings/node-module-compat.js +25 -0
  95. package/dist/core/embeddings/onnxruntime-common-resolver.js +8 -5
  96. package/dist/core/embeddings/onnxruntime-node-resolver.js +33 -7
  97. package/dist/core/embeddings/runtime-install.d.ts +119 -0
  98. package/dist/core/embeddings/runtime-install.js +372 -0
  99. package/dist/core/embeddings/runtime-support.d.ts +48 -17
  100. package/dist/core/embeddings/runtime-support.js +96 -0
  101. package/dist/core/git-staleness.js +1 -1
  102. package/dist/core/group/bridge-db.js +2 -0
  103. package/dist/core/group/extractors/http-patterns/python.js +246 -108
  104. package/dist/core/group/extractors/manifest-extractor.js +4 -0
  105. package/dist/core/incremental/escalation-gate.d.ts +38 -0
  106. package/dist/core/incremental/escalation-gate.js +48 -0
  107. package/dist/core/incremental/shadow-candidates.d.ts +3 -3
  108. package/dist/core/incremental/shadow-candidates.js +3 -3
  109. package/dist/core/incremental/subgraph-extract.d.ts +2 -2
  110. package/dist/core/incremental/subgraph-extract.js +2 -2
  111. package/dist/core/index-freshness.d.ts +5 -0
  112. package/dist/core/index-freshness.js +13 -0
  113. package/dist/core/ingestion/class-extractors/configs/jvm.js +29 -0
  114. package/dist/core/ingestion/cobol/cobol-preprocessor.js +1 -1
  115. package/dist/core/ingestion/cobol/jcl-processor.js +9 -8
  116. package/dist/core/ingestion/cobol-processor.js +27 -26
  117. package/dist/core/ingestion/community-processor.d.ts +51 -1
  118. package/dist/core/ingestion/community-processor.js +323 -64
  119. package/dist/core/ingestion/emit-references.js +7 -2
  120. package/dist/core/ingestion/filesystem-walker.js +4 -0
  121. package/dist/core/ingestion/frameworks/spring/analysis-features.d.ts +3 -0
  122. package/dist/core/ingestion/frameworks/spring/analysis-features.js +7 -0
  123. package/dist/core/ingestion/frameworks/spring/bean-candidates.d.ts +30 -0
  124. package/dist/core/ingestion/frameworks/spring/bean-candidates.js +182 -0
  125. package/dist/core/ingestion/frameworks/spring/bean-catalog.d.ts +12 -0
  126. package/dist/core/ingestion/frameworks/spring/bean-catalog.js +26 -0
  127. package/dist/core/ingestion/frameworks/spring/config-bindings.d.ts +24 -0
  128. package/dist/core/ingestion/frameworks/spring/config-bindings.js +115 -0
  129. package/dist/core/ingestion/languages/c/captures.js +56 -0
  130. package/dist/core/ingestion/languages/c/query.js +17 -0
  131. package/dist/core/ingestion/languages/c/scope-resolver.js +6 -0
  132. package/dist/core/ingestion/languages/cobol/captures.js +93 -0
  133. package/dist/core/ingestion/languages/cobol/scope-resolver.js +7 -0
  134. package/dist/core/ingestion/languages/cpp/captures.js +365 -75
  135. package/dist/core/ingestion/languages/cpp/scope-resolver.js +14 -0
  136. package/dist/core/ingestion/languages/csharp/captures.js +25 -0
  137. package/dist/core/ingestion/languages/dart/captures.js +90 -2
  138. package/dist/core/ingestion/languages/dart/extension-type-preprocess.d.ts +7 -0
  139. package/dist/core/ingestion/languages/dart/extension-type-preprocess.js +30 -0
  140. package/dist/core/ingestion/languages/dart.js +2 -0
  141. package/dist/core/ingestion/languages/go/captures.js +34 -0
  142. package/dist/core/ingestion/languages/index.d.ts +1 -0
  143. package/dist/core/ingestion/languages/index.js +2 -0
  144. package/dist/core/ingestion/languages/java/analysis-features.d.ts +3 -0
  145. package/dist/core/ingestion/languages/java/analysis-features.js +13 -0
  146. package/dist/core/ingestion/languages/java/capture-side-channel.d.ts +22 -0
  147. package/dist/core/ingestion/languages/java/capture-side-channel.js +58 -0
  148. package/dist/core/ingestion/languages/java/captures.d.ts +4 -3
  149. package/dist/core/ingestion/languages/java/captures.js +193 -17
  150. package/dist/core/ingestion/languages/java/package-facts.d.ts +5 -0
  151. package/dist/core/ingestion/languages/java/package-facts.js +9 -0
  152. package/dist/core/ingestion/languages/java/package-siblings.d.ts +3 -16
  153. package/dist/core/ingestion/languages/java/package-siblings.js +8 -147
  154. package/dist/core/ingestion/languages/java/query.js +23 -0
  155. package/dist/core/ingestion/languages/java/scope-resolver.js +23 -0
  156. package/dist/core/ingestion/languages/java/spring-bean-metadata.d.ts +2 -0
  157. package/dist/core/ingestion/languages/java/spring-bean-metadata.js +8 -0
  158. package/dist/core/ingestion/languages/java/spring-config-bindings.d.ts +23 -0
  159. package/dist/core/ingestion/languages/java/spring-config-bindings.js +215 -0
  160. package/dist/core/ingestion/languages/java.js +3 -0
  161. package/dist/core/ingestion/languages/javascript/captures.js +16 -0
  162. package/dist/core/ingestion/languages/javascript/query.js +21 -0
  163. package/dist/core/ingestion/languages/jvm/package-facts.d.ts +35 -0
  164. package/dist/core/ingestion/languages/jvm/package-facts.js +40 -0
  165. package/dist/core/ingestion/languages/jvm/package-siblings.d.ts +14 -0
  166. package/dist/core/ingestion/languages/jvm/package-siblings.js +129 -0
  167. package/dist/core/ingestion/languages/kotlin/capture-side-channel.d.ts +17 -3
  168. package/dist/core/ingestion/languages/kotlin/capture-side-channel.js +42 -8
  169. package/dist/core/ingestion/languages/kotlin/captures.js +59 -0
  170. package/dist/core/ingestion/languages/kotlin/package-facts.d.ts +5 -0
  171. package/dist/core/ingestion/languages/kotlin/package-facts.js +9 -0
  172. package/dist/core/ingestion/languages/kotlin/package-siblings.d.ts +4 -0
  173. package/dist/core/ingestion/languages/kotlin/package-siblings.js +8 -0
  174. package/dist/core/ingestion/languages/kotlin/query.js +19 -0
  175. package/dist/core/ingestion/languages/kotlin/scope-resolver.js +9 -1
  176. package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.d.ts +2 -0
  177. package/dist/core/ingestion/languages/kotlin/spring-bean-metadata.js +8 -0
  178. package/dist/core/ingestion/languages/kotlin.js +5 -6
  179. package/dist/core/ingestion/languages/move.d.ts +1 -0
  180. package/dist/core/ingestion/languages/move.js +27 -0
  181. package/dist/core/ingestion/languages/php/captures.js +40 -0
  182. package/dist/core/ingestion/languages/php/import-decomposer.js +12 -0
  183. package/dist/core/ingestion/languages/php/import-target.d.ts +2 -1
  184. package/dist/core/ingestion/languages/php/import-target.js +110 -2
  185. package/dist/core/ingestion/languages/php/interpret.js +10 -0
  186. package/dist/core/ingestion/languages/php/scope-resolver.js +1 -1
  187. package/dist/core/ingestion/languages/python/captures.d.ts +3 -4
  188. package/dist/core/ingestion/languages/python/captures.js +24 -5
  189. package/dist/core/ingestion/languages/python/interpret.js +4 -0
  190. package/dist/core/ingestion/languages/python/receiver-binding.d.ts +15 -2
  191. package/dist/core/ingestion/languages/python/receiver-binding.js +96 -2
  192. package/dist/core/ingestion/languages/python/simple-hooks.d.ts +5 -5
  193. package/dist/core/ingestion/languages/python/simple-hooks.js +15 -5
  194. package/dist/core/ingestion/languages/ruby/captures.js +42 -0
  195. package/dist/core/ingestion/languages/rust/captures.js +13 -0
  196. package/dist/core/ingestion/languages/rust/interpret.js +18 -0
  197. package/dist/core/ingestion/languages/rust/query.js +9 -0
  198. package/dist/core/ingestion/languages/rust/range-binding.js +6 -2
  199. package/dist/core/ingestion/languages/swift/captures.js +12 -0
  200. package/dist/core/ingestion/languages/typescript/captures.js +21 -0
  201. package/dist/core/ingestion/languages/typescript/nuxt-auto-imports.js +2 -1
  202. package/dist/core/ingestion/languages/typescript/query.js +37 -0
  203. package/dist/core/ingestion/markdown-processor.js +3 -2
  204. package/dist/core/ingestion/model/registration-table.js +1 -0
  205. package/dist/core/ingestion/parsing-processor.d.ts +3 -1
  206. package/dist/core/ingestion/parsing-processor.js +36 -1
  207. package/dist/core/ingestion/pipeline-phases/index.d.ts +2 -0
  208. package/dist/core/ingestion/pipeline-phases/index.js +2 -0
  209. package/dist/core/ingestion/pipeline-phases/parse-impl.js +56 -2
  210. package/dist/core/ingestion/pipeline-phases/parse.d.ts +0 -2
  211. package/dist/core/ingestion/pipeline-phases/parse.js +12 -3
  212. package/dist/core/ingestion/pipeline-phases/processes.d.ts +8 -0
  213. package/dist/core/ingestion/pipeline-phases/processes.js +11 -1
  214. package/dist/core/ingestion/pipeline-phases/spring-config.d.ts +37 -0
  215. package/dist/core/ingestion/pipeline-phases/spring-config.js +433 -0
  216. package/dist/core/ingestion/pipeline-phases/standalone-ingest.d.ts +16 -0
  217. package/dist/core/ingestion/pipeline-phases/standalone-ingest.js +6 -0
  218. package/dist/core/ingestion/pipeline.d.ts +4 -2
  219. package/dist/core/ingestion/pipeline.js +14 -2
  220. package/dist/core/ingestion/resolve-references.js +12 -0
  221. package/dist/core/ingestion/route-extractors/constant-resolver.d.ts +83 -0
  222. package/dist/core/ingestion/route-extractors/constant-resolver.js +131 -0
  223. package/dist/core/ingestion/route-extractors/python-const-resolver.d.ts +75 -0
  224. package/dist/core/ingestion/route-extractors/python-const-resolver.js +299 -0
  225. package/dist/core/ingestion/scope-extractor.js +306 -43
  226. package/dist/core/ingestion/scope-resolution/contract/scope-resolver.d.ts +71 -2
  227. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.d.ts +7 -7
  228. package/dist/core/ingestion/scope-resolution/graph-bridge/callee-id-sink.js +8 -7
  229. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.d.ts +3 -1
  230. package/dist/core/ingestion/scope-resolution/graph-bridge/edges.js +6 -0
  231. package/dist/core/ingestion/scope-resolution/graph-bridge/ids.js +1 -0
  232. package/dist/core/ingestion/scope-resolution/graph-bridge/node-lookup.js +4 -1
  233. package/dist/core/ingestion/scope-resolution/graph-bridge/references-to-edges.js +7 -2
  234. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.d.ts +47 -0
  235. package/dist/core/ingestion/scope-resolution/passes/callable-value-flow.js +1138 -0
  236. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.d.ts +16 -4
  237. package/dist/core/ingestion/scope-resolution/passes/free-call-fallback.js +97 -1
  238. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.d.ts +60 -0
  239. package/dist/core/ingestion/scope-resolution/passes/property-dispatch.js +111 -0
  240. package/dist/core/ingestion/scope-resolution/passes/receiver-bound-calls.d.ts +4 -3
  241. package/dist/core/ingestion/scope-resolution/pipeline/phase.d.ts +5 -0
  242. package/dist/core/ingestion/scope-resolution/pipeline/phase.js +25 -38
  243. package/dist/core/ingestion/scope-resolution/pipeline/run.d.ts +6 -0
  244. package/dist/core/ingestion/scope-resolution/pipeline/run.js +147 -35
  245. package/dist/core/ingestion/scope-resolution/resolution-outcome.d.ts +1 -1
  246. package/dist/core/ingestion/scope-resolution/scope/walkers.js +73 -44
  247. package/dist/core/ingestion/taint/typescript-model.js +34 -2
  248. package/dist/core/ingestion/tree-sitter-queries.d.ts +2 -2
  249. package/dist/core/ingestion/tree-sitter-queries.js +23 -2
  250. package/dist/core/ingestion/type-extractors/jvm.js +17 -2
  251. package/dist/core/ingestion/utils/ast-helpers.d.ts +1 -0
  252. package/dist/core/ingestion/utils/ast-helpers.js +153 -2
  253. package/dist/core/ingestion/utils/callable-flow-captures.d.ts +94 -0
  254. package/dist/core/ingestion/utils/callable-flow-captures.js +878 -0
  255. package/dist/core/ingestion/utils/line-base.d.ts +20 -0
  256. package/dist/core/ingestion/utils/line-base.js +20 -0
  257. package/dist/core/ingestion/utils/symbol-labels.d.ts +21 -0
  258. package/dist/core/ingestion/utils/symbol-labels.js +45 -0
  259. package/dist/core/ingestion/workers/parse-worker.d.ts +34 -0
  260. package/dist/core/ingestion/workers/parse-worker.js +40 -5
  261. package/dist/core/ingestion/workers/result-merge.js +4 -0
  262. package/dist/core/ingestion/workers/worker-pool.d.ts +28 -0
  263. package/dist/core/ingestion/workers/worker-pool.js +128 -28
  264. package/dist/core/lbug/csv-generator.d.ts +15 -0
  265. package/dist/core/lbug/csv-generator.js +124 -27
  266. package/dist/core/lbug/cypher-escape.d.ts +20 -0
  267. package/dist/core/lbug/cypher-escape.js +20 -0
  268. package/dist/core/lbug/extension-load-error.d.ts +67 -0
  269. package/dist/core/lbug/extension-load-error.js +326 -0
  270. package/dist/core/lbug/extension-loader.d.ts +17 -2
  271. package/dist/core/lbug/extension-loader.js +38 -13
  272. package/dist/core/lbug/lbug-adapter.d.ts +203 -2
  273. package/dist/core/lbug/lbug-adapter.js +527 -86
  274. package/dist/core/lbug/lbug-config.d.ts +56 -2
  275. package/dist/core/lbug/lbug-config.js +267 -7
  276. package/dist/core/lbug/move-columns.d.ts +7 -0
  277. package/dist/core/lbug/move-columns.js +86 -0
  278. package/dist/core/lbug/native-check.d.ts +40 -0
  279. package/dist/core/lbug/native-check.js +90 -0
  280. package/dist/core/lbug/node-table-layout.d.ts +29 -0
  281. package/dist/core/lbug/node-table-layout.js +119 -0
  282. package/dist/core/lbug/pool-adapter.d.ts +23 -1
  283. package/dist/core/lbug/pool-adapter.js +115 -8
  284. package/dist/core/lbug/schema.d.ts +4 -3
  285. package/dist/core/lbug/schema.js +16 -16
  286. package/dist/core/lbug/sidecar-recovery.d.ts +172 -0
  287. package/dist/core/lbug/sidecar-recovery.js +418 -16
  288. package/dist/core/lbug/wal-checkpoint-driver.js +3 -0
  289. package/dist/core/move/artifact-download.d.ts +19 -0
  290. package/dist/core/move/artifact-download.js +179 -0
  291. package/dist/core/move/compiler-facts.d.ts +120 -0
  292. package/dist/core/move/compiler-facts.js +9 -0
  293. package/dist/core/move/consistency.d.ts +74 -0
  294. package/dist/core/move/consistency.js +182 -0
  295. package/dist/core/move/constants.d.ts +98 -0
  296. package/dist/core/move/constants.js +136 -0
  297. package/dist/core/move/discovery.d.ts +10 -0
  298. package/dist/core/move/discovery.js +22 -0
  299. package/dist/core/move/entry-points.d.ts +14 -0
  300. package/dist/core/move/entry-points.js +40 -0
  301. package/dist/core/move/facts-mapper.d.ts +75 -0
  302. package/dist/core/move/facts-mapper.js +534 -0
  303. package/dist/core/move/install-lock.d.ts +14 -0
  304. package/dist/core/move/install-lock.js +102 -0
  305. package/dist/core/move/install.d.ts +39 -0
  306. package/dist/core/move/install.js +391 -0
  307. package/dist/core/move/mcp-client.d.ts +115 -0
  308. package/dist/core/move/mcp-client.js +436 -0
  309. package/dist/core/move/move-ingest.d.ts +52 -0
  310. package/dist/core/move/move-ingest.js +403 -0
  311. package/dist/core/move/provision.d.ts +19 -0
  312. package/dist/core/move/provision.js +91 -0
  313. package/dist/core/move/release.d.ts +6 -0
  314. package/dist/core/move/release.js +10 -0
  315. package/dist/core/move/symbol-id.d.ts +35 -0
  316. package/dist/core/move/symbol-id.js +65 -0
  317. package/dist/core/move/type-parser.d.ts +11 -0
  318. package/dist/core/move/type-parser.js +38 -0
  319. package/dist/core/platform/capabilities.d.ts +0 -1
  320. package/dist/core/platform/capabilities.js +39 -8
  321. package/dist/core/run-analyze.d.ts +9 -3
  322. package/dist/core/run-analyze.js +1002 -184
  323. package/dist/core/search/fts-indexes.d.ts +31 -0
  324. package/dist/core/search/fts-indexes.js +73 -0
  325. package/dist/core/search/fts-schema.js +2 -0
  326. package/dist/core/tree-sitter/safe-parse.d.ts +8 -3
  327. package/dist/core/tree-sitter/safe-parse.js +21 -7
  328. package/dist/core/wiki/graph-queries.js +6 -5
  329. package/dist/core/wiki/llm-client.d.ts +8 -2
  330. package/dist/core/wiki/llm-client.js +41 -5
  331. package/dist/mcp/core/embedder.js +16 -2
  332. package/dist/mcp/http-transport.d.ts +5 -0
  333. package/dist/mcp/http-transport.js +19 -5
  334. package/dist/mcp/local/bean-metadata.d.ts +2 -0
  335. package/dist/mcp/local/bean-metadata.js +25 -0
  336. package/dist/mcp/local/line-display.d.ts +22 -0
  337. package/dist/mcp/local/line-display.js +3 -0
  338. package/dist/mcp/local/local-backend.d.ts +19 -1
  339. package/dist/mcp/local/local-backend.js +402 -155
  340. package/dist/mcp/local/pdg-impact.d.ts +5 -3
  341. package/dist/mcp/local/pdg-impact.js +5 -2
  342. package/dist/mcp/output-budget.d.ts +5 -0
  343. package/dist/mcp/output-budget.js +52 -0
  344. package/dist/mcp/read-only-policy.d.ts +12 -0
  345. package/dist/mcp/read-only-policy.js +102 -0
  346. package/dist/mcp/repository-policy.d.ts +34 -0
  347. package/dist/mcp/repository-policy.js +328 -0
  348. package/dist/mcp/resources.js +32 -5
  349. package/dist/mcp/server.d.ts +5 -2
  350. package/dist/mcp/server.js +29 -9
  351. package/dist/mcp/tools.d.ts +0 -8
  352. package/dist/mcp/tools.js +102 -5
  353. package/dist/server/analyze-job.d.ts +3 -0
  354. package/dist/server/analyze-job.js +17 -0
  355. package/dist/server/analyze-launch.d.ts +6 -0
  356. package/dist/server/analyze-launch.js +82 -6
  357. package/dist/server/analyze-worker-core.d.ts +2 -1
  358. package/dist/server/analyze-worker-core.js +5 -2
  359. package/dist/server/analyze-worker.js +29 -6
  360. package/dist/server/api.d.ts +30 -0
  361. package/dist/server/api.js +120 -34
  362. package/dist/server/mcp-http.d.ts +1 -1
  363. package/dist/server/mcp-http.js +4 -2
  364. package/dist/server/upload-ingest.js +2 -1
  365. package/dist/server/validation.js +2 -1
  366. package/dist/storage/git.d.ts +31 -0
  367. package/dist/storage/git.js +111 -1
  368. package/dist/storage/parse-cache.js +7 -1
  369. package/dist/storage/parsedfile-store.d.ts +8 -0
  370. package/dist/storage/parsedfile-store.js +165 -1
  371. package/dist/storage/repo-manager.d.ts +194 -2
  372. package/dist/storage/repo-manager.js +56 -1
  373. package/dist/types/pipeline.d.ts +7 -0
  374. package/hooks/antigravity/gitnexus-antigravity-hook.cjs +50 -3
  375. package/hooks/claude/gitnexus-hook.cjs +59 -9
  376. package/hooks/claude/pre-tool-use.sh +0 -0
  377. package/hooks/claude/session-start.sh +0 -0
  378. package/package.json +21 -15
  379. package/scripts/cross-platform-tests.ts +56 -0
  380. package/scripts/ensure-fts.ts +43 -0
  381. package/scripts/install-duckdb-extension.mjs +85 -24
  382. package/scripts/run-cross-platform.ts +61 -6
  383. package/scripts/shard-arg.ts +30 -0
  384. package/scripts/sync-plugin-manifests.mjs +192 -0
  385. package/skills/gitnexus-lfg/README.md +55 -0
  386. package/skills/gitnexus-lfg/SKILL.md +86 -0
  387. package/skills/gitnexus-plan/README.md +142 -0
  388. package/skills/gitnexus-plan/SKILL.md +348 -0
  389. package/skills/gitnexus-plan/references/context-ledger.md +137 -0
  390. package/skills/gitnexus-plan/references/context-pack.md +126 -0
  391. package/skills/gitnexus-plan/references/evidence-provenance.md +272 -0
  392. package/skills/gitnexus-plan/references/pdg-slice.md +109 -0
  393. package/skills/gitnexus-plan/references/plan-template.md +201 -0
  394. package/skills/gitnexus-plan/scripts/evidence-provenance.mjs +2084 -0
  395. package/skills/gitnexus-review/SKILL.md +273 -0
  396. package/skills/gitnexus-review/ci-personas/ci-adversarial-lens.md +42 -0
  397. package/skills/gitnexus-review/ci-personas/ci-blast-radius-lens.md +39 -0
  398. package/skills/gitnexus-review/ci-personas/ci-correctness-lens.md +37 -0
  399. package/skills/gitnexus-review/ci-personas/ci-coverage-lens.md +40 -0
  400. package/skills/gitnexus-review/ci-personas/ci-critic-lens.md +42 -0
  401. package/skills/gitnexus-review/ci-personas/ci-security-lens.md +39 -0
  402. package/skills/gitnexus-work/README.md +71 -0
  403. package/skills/gitnexus-work/SKILL.md +269 -0
  404. package/skills/gitnexus-work/references/evidence-provenance.md +272 -0
  405. package/skills/gitnexus-work/scripts/evidence-provenance.mjs +2084 -0
  406. package/web/assets/ProcessFlowModal-B_bfBySy.js +22 -0
  407. package/web/assets/__vite-browser-external-bMKyYQkO.js +1 -0
  408. package/web/assets/agent-Bqxn-abU.js +626 -0
  409. package/web/assets/architecture-7EHR7CIX-6QZW5X65-BVWFvYz2.js +1 -0
  410. package/web/assets/architectureDiagram-UL44E2DR-CmG3uPWf.js +36 -0
  411. package/web/assets/{blockDiagram-7IZFK4PR-BkWhpzWB.js → blockDiagram-7IZFK4PR-DBefcjof.js} +7 -7
  412. package/web/assets/{c4Diagram-Y2BXMSZH-DtBvpzWD.js → c4Diagram-Y2BXMSZH-EjWnjEJl.js} +6 -6
  413. package/web/assets/chunk-2T2R6R2M-Bb6Sy3_j.js +4 -0
  414. package/web/assets/chunk-2UTLFMKG-CXlhF3Pt.js +1 -0
  415. package/web/assets/chunk-3SSMPTDK-rPsRM1x0.js +321 -0
  416. package/web/assets/chunk-4R4BOZG6-Be_F0JoX.js +159 -0
  417. package/web/assets/{chunk-6764PJDD-DpIS7hxD.js → chunk-6764PJDD-C7xxk063.js} +1 -1
  418. package/web/assets/chunk-67TQ5CYL-CA7OhIEf.js +124 -0
  419. package/web/assets/chunk-7FYTHRHK-CsmYIswB.js +32 -0
  420. package/web/assets/chunk-7J6CGLKN-BlKwgXKs.js +10 -0
  421. package/web/assets/chunk-7W6UQGC5-pyKGssV3.js +1 -0
  422. package/web/assets/chunk-C62D2QBJ-3gdL8EKc.js +1 -0
  423. package/web/assets/chunk-CEXFNPSA-CjwtMDkc.js +1 -0
  424. package/web/assets/{chunk-INKRHTLW-Nu4ri9P-.js → chunk-INKRHTLW-Ckl3_KkO.js} +13 -13
  425. package/web/assets/chunk-J5EP6P6S-L19oz55R.js +1 -0
  426. package/web/assets/{chunk-KGFNY3KK-JGMJvKCK.js → chunk-KGFNY3KK-BZeP-55u.js} +17 -17
  427. package/web/assets/chunk-KGYTTC2M-zm6n242I.js +1 -0
  428. package/web/assets/{chunk-KRXBNO2N-BW5o0KUN.js → chunk-KRXBNO2N-C-UNuKKf.js} +1 -1
  429. package/web/assets/{chunk-LCXTWHL2-CfLLCywY.js → chunk-LCXTWHL2-C162wE5z.js} +5 -5
  430. package/web/assets/chunk-LII3EMHJ-BL6lKJ_P.js +1 -0
  431. package/web/assets/chunk-LRIF4GLE-n59lhprL.js +1 -0
  432. package/web/assets/chunk-QA3QBVWF-DVXPOIxe.js +2 -0
  433. package/web/assets/chunk-RERM46MO-B5dAdWpP.js +1 -0
  434. package/web/assets/chunk-RG4AUYOV-ZNgyLFq6.js +206 -0
  435. package/web/assets/chunk-RKZBBQEN-MyIQbGgD.js +1 -0
  436. package/web/assets/chunk-RLI5ZMPA-CkXZ0y0U.js +1 -0
  437. package/web/assets/chunk-T2UQINTJ-BEyXhZWe.js +1 -0
  438. package/web/assets/chunk-UP6H54XL-BG-n7qDp.js +1 -0
  439. package/web/assets/chunk-UXSXWOXI-CW1_r5cS.js +1 -0
  440. package/web/assets/chunk-UY5QBCOK-ByqTVLvh.js +1 -0
  441. package/web/assets/chunk-VU6ZFW4Y-BLeasdkU.js +2 -0
  442. package/web/assets/{chunk-W44A43WB-JqMLIpR0.js → chunk-W44A43WB-BN8EQc_u.js} +1 -1
  443. package/web/assets/chunk-ZXARS5L4-C3v-4Fsw.js +1 -0
  444. package/web/assets/classDiagram-KGZ6W3CR-olpO3fMe.js +1 -0
  445. package/web/assets/classDiagram-v2-72OJOZXJ-olpO3fMe.js +1 -0
  446. package/web/assets/cose-bilkent-UX7MHV2Q-BmnZ7Mvj.js +1 -0
  447. package/web/assets/dagre-ND4H6XIP-CY4iIF7v.js +4 -0
  448. package/web/assets/diagram-3NCE3AQN-CO6QpzEE.js +43 -0
  449. package/web/assets/diagram-GF46GFSD-B2atbzmU.js +24 -0
  450. package/web/assets/diagram-HNR7UZ2L-DVRltWbL.js +3 -0
  451. package/web/assets/diagram-QXG6HAR7-DR6AHD2h.js +24 -0
  452. package/web/assets/diagram-WEQXMOUZ-DkpoMwTL.js +10 -0
  453. package/web/assets/erDiagram-L5TCEMPS-n8g_90bc.js +85 -0
  454. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-CgFBM7e-.js +1 -0
  455. package/web/assets/flowDiagram-H6V6AXG4-SGMDiCkB.js +162 -0
  456. package/web/assets/ganttDiagram-JCBTUEKG-Cb3UBqRS.js +292 -0
  457. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-DCJv7SII.js +1 -0
  458. package/web/assets/gitGraphDiagram-S2ZK5IYY-Bs9CR7tq.js +106 -0
  459. package/web/assets/index-CX_fADmQ.css +2 -0
  460. package/web/assets/index-D1Z3dGGz.js +575 -0
  461. package/web/assets/info-J43DQDTF-KCYPFFUO-BfNy-9Nd.js +1 -0
  462. package/web/assets/infoDiagram-3YFTVSEB-T368on4D.js +2 -0
  463. package/web/assets/{ishikawaDiagram-BNXS4ZKH-DfYpxnE5.js → ishikawaDiagram-BNXS4ZKH-XpjJRU9h.js} +6 -6
  464. package/web/assets/journeyDiagram-M6C3CM3L-C6wjooas.js +139 -0
  465. package/web/assets/kanban-definition-75IXJCU3-5_UVY79g.js +89 -0
  466. package/web/assets/{katex-K3KEBU37-CTc5BslQ.js → katex-K3KEBU37-qRQBy-EZ.js} +2 -2
  467. package/web/assets/{mindmap-definition-2TDM6QVE-DypvbOMQ.js → mindmap-definition-2TDM6QVE-8xDLzk2e.js} +29 -29
  468. package/web/assets/node-Ct_zna8U.js +8 -0
  469. package/web/assets/packet-YPE3B663-LP52Z2RK-D4qkeG9k.js +1 -0
  470. package/web/assets/pie-LRSECV5Y-TCRJHUBD-B_yMKyQa.js +1 -0
  471. package/web/assets/pieDiagram-CU6KROY3-Bv4LpAbr.js +30 -0
  472. package/web/assets/preload-helper-Czpn1I53.js +1 -0
  473. package/web/assets/{quadrantDiagram-VICAPDV7-yXSZ2lLz.js → quadrantDiagram-VICAPDV7-DR54jOeR.js} +6 -6
  474. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DeD6yN_0.js +1 -0
  475. package/web/assets/requirementDiagram-JXO7QTGE-PEkg7sKC.js +84 -0
  476. package/web/assets/rolldown-runtime-QTnfLwEv.js +1 -0
  477. package/web/assets/sankeyDiagram-URQDO5SZ-DDWEtjcs.js +40 -0
  478. package/web/assets/sdk-CzHHH8tD.js +37 -0
  479. package/web/assets/sequenceDiagram-VS2MUI6T-Bv-uwANx.js +162 -0
  480. package/web/assets/src-JV30wyV8.js +1 -0
  481. package/web/assets/stateDiagram-7D4R322I-DVNjmkEq.js +1 -0
  482. package/web/assets/stateDiagram-v2-36443NZ5-CyN4Fh7_.js +1 -0
  483. package/web/assets/timeline-definition-O6YCAMPW-Qmsuo7qS.js +120 -0
  484. package/web/assets/treeView-BLDUP644-QA4HXRO3-CDuSYnd4.js +1 -0
  485. package/web/assets/treemap-LRROVOQU-LLAWBHMP-imazucyJ.js +1 -0
  486. package/web/assets/vennDiagram-MWXL3ELB-BD1iK1SX.js +34 -0
  487. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-DqrT9tB8.js +1 -0
  488. package/web/assets/wardleyDiagram-CUQ6CDDI-D6TzLVob.js +78 -0
  489. package/web/assets/{xychartDiagram-N2JHSOCM-BOLm0eNm.js → xychartDiagram-N2JHSOCM-CoZ_Tits.js} +6 -6
  490. package/web/index.html +18 -10
  491. package/skills/gitnexus-pr-review.md +0 -163
  492. package/web/assets/agent-Dli_x7bU.js +0 -660
  493. package/web/assets/architecture-7EHR7CIX-6QZW5X65-DxJw65fT.js +0 -1
  494. package/web/assets/architectureDiagram-UL44E2DR-dEkqUZN9.js +0 -36
  495. package/web/assets/chunk-3SSMPTDK-B4_etUhr.js +0 -321
  496. package/web/assets/chunk-67TQ5CYL-4sNPJU1q.js +0 -124
  497. package/web/assets/chunk-7W6UQGC5-KyEG0HQg.js +0 -1
  498. package/web/assets/chunk-KGYTTC2M-CWC_c3H9.js +0 -161
  499. package/web/assets/chunk-LII3EMHJ-D-jm-dLa.js +0 -1
  500. package/web/assets/chunk-QA3QBVWF-BgRW3SXd.js +0 -2
  501. package/web/assets/chunk-RG4AUYOV-CqWzWsV3.js +0 -206
  502. package/web/assets/chunk-T2UQINTJ-DSBqkzH7.js +0 -1
  503. package/web/assets/chunk-UY5QBCOK-DyF0vyGd.js +0 -1
  504. package/web/assets/chunk-ZXARS5L4-CxN8oiwI.js +0 -1
  505. package/web/assets/classDiagram-KGZ6W3CR-CMne4tG9.js +0 -1
  506. package/web/assets/classDiagram-v2-72OJOZXJ-CMne4tG9.js +0 -1
  507. package/web/assets/cose-bilkent-UX7MHV2Q-D71wNYRJ.js +0 -1
  508. package/web/assets/dagre-ND4H6XIP-Co5rRx9X.js +0 -4
  509. package/web/assets/diagram-3NCE3AQN-DBp4O00j.js +0 -43
  510. package/web/assets/diagram-GF46GFSD-6N_8yS0i.js +0 -24
  511. package/web/assets/diagram-HNR7UZ2L-DFCfd5LI.js +0 -3
  512. package/web/assets/diagram-QXG6HAR7-Di093rFg.js +0 -24
  513. package/web/assets/diagram-WEQXMOUZ-DZWi4SUN.js +0 -10
  514. package/web/assets/erDiagram-L5TCEMPS-8X1y6R4Y.js +0 -85
  515. package/web/assets/eventmodeling-FCH6USID-MREXMVOE-BQm9QzEa.js +0 -1
  516. package/web/assets/flowDiagram-H6V6AXG4-CMpY8Ufn.js +0 -162
  517. package/web/assets/ganttDiagram-JCBTUEKG-D3iL2Aet.js +0 -292
  518. package/web/assets/gitGraph-WXDBUCRP-R675I2BI-Cr_Bm2Nb.js +0 -1
  519. package/web/assets/gitGraphDiagram-S2ZK5IYY-CPIDgxGm.js +0 -106
  520. package/web/assets/index-KctnI3Vq.js +0 -635
  521. package/web/assets/index-_lgn7hs5.css +0 -2
  522. package/web/assets/info-J43DQDTF-KCYPFFUO-Cs4p2oyk.js +0 -1
  523. package/web/assets/infoDiagram-3YFTVSEB-BaLMZkUg.js +0 -2
  524. package/web/assets/journeyDiagram-M6C3CM3L-CvArszLo.js +0 -139
  525. package/web/assets/kanban-definition-75IXJCU3-CpfVLLf9.js +0 -89
  526. package/web/assets/packet-YPE3B663-LP52Z2RK-CKCrztD2.js +0 -1
  527. package/web/assets/pie-LRSECV5Y-TCRJHUBD-BB7pHqoD.js +0 -1
  528. package/web/assets/pieDiagram-CU6KROY3-s27EFWgP.js +0 -30
  529. package/web/assets/radar-GUYGQ44K-RDLRG3WG-DhoTOcuK.js +0 -1
  530. package/web/assets/requirementDiagram-JXO7QTGE-CWhqInuf.js +0 -84
  531. package/web/assets/sankeyDiagram-URQDO5SZ-1qEjlFIB.js +0 -40
  532. package/web/assets/sequenceDiagram-VS2MUI6T-RyTlZ5cR.js +0 -162
  533. package/web/assets/stateDiagram-7D4R322I-DTjVfX4A.js +0 -1
  534. package/web/assets/stateDiagram-v2-36443NZ5-xY9_k9_Q.js +0 -1
  535. package/web/assets/timeline-definition-O6YCAMPW-DrrqLYAf.js +0 -120
  536. package/web/assets/treeView-BLDUP644-QA4HXRO3-ODehyGKL.js +0 -1
  537. package/web/assets/treemap-LRROVOQU-LLAWBHMP-BfpgC-7o.js +0 -1
  538. package/web/assets/vennDiagram-MWXL3ELB-B0RkWAim.js +0 -34
  539. package/web/assets/wardley-L42UT6IY-5TKZOOLJ-CNeL6VHE.js +0 -1
  540. package/web/assets/wardleyDiagram-CUQ6CDDI-boUxiQ5F.js +0 -78
@@ -0,0 +1,272 @@
1
+ # Evidence provenance serializer v2 and safe plan writer
2
+
3
+ This file is the normative byte contract for `evidence_provenance` schema 2.
4
+ The adjacent `scripts/evidence-provenance.mjs` is its executable definition.
5
+ `gitnexus-plan` and `gitnexus-work` carry byte-identical copies so either skill
6
+ can produce the same snapshot without relying on the other skill's install.
7
+ It is also the only supported write boundary for a generated plan. Never
8
+ recreate the digest with an ad-hoc shell pipeline or write the plan destination
9
+ directly.
10
+
11
+ ## Invocation
12
+
13
+ From the target repository root, run the helper belonging to the active skill:
14
+
15
+ ```bash
16
+ node <skill-dir>/scripts/evidence-provenance.mjs read-plan \
17
+ --repo "$PWD" \
18
+ --generated-plan docs/plans/YYYY-MM-DD-gitnexus-plan-example-change-plan.md
19
+ ```
20
+
21
+ `read-plan` is the only supported way to load an existing plan for Deepen or
22
+ execution. It emits a JSON receipt with the canonical `generated_plan_path`,
23
+ `bytes_read`, exact `plan_bytes_base64`, and `plan_digest` (`sha256:<hex>`).
24
+ Decode and consume those exact bytes; do not reopen the lexical path. Retain
25
+ the canonical path and digest together for the complete Deepen session; a
26
+ receipt for one path never authorizes another, even when their bytes match.
27
+
28
+ ```bash
29
+ node <skill-dir>/scripts/evidence-provenance.mjs snapshot \
30
+ --repo "$PWD" \
31
+ --schema-version 2 \
32
+ --generated-plan docs/plans/YYYY-MM-DD-gitnexus-plan-example-change-plan.md \
33
+ --cited src/one.ts \
34
+ --cited test/one.test.ts
35
+ ```
36
+
37
+ Pass one `--cited` argument for every cited path. The helper emits the complete
38
+ JSON value for `evidence_provenance`; copy that value without rewriting fields.
39
+ `gitnexus-work` passes the plan's `schema_version`, `generated_plan_path`, and
40
+ every path in `cited_path_manifest`. Schema 1 is legacy and deliberately
41
+ rejected, so the executor must conservatively re-anchor it under schema 2.
42
+
43
+ After the snapshot is in the fully composed document, publish its exact UTF-8
44
+ bytes through the same helper:
45
+
46
+ ```bash
47
+ node <skill-dir>/scripts/evidence-provenance.mjs write-plan \
48
+ --repo "$PWD" \
49
+ --generated-plan docs/plans/YYYY-MM-DD-gitnexus-plan-example-change-plan.md \
50
+ < /path/to/outside-repo-scratch-plan.md
51
+ ```
52
+
53
+ For Deepen only:
54
+
55
+ ```bash
56
+ node <skill-dir>/scripts/evidence-provenance.mjs write-plan \
57
+ --repo "$PWD" \
58
+ --generated-plan docs/plans/YYYY-MM-DD-gitnexus-plan-example-change-plan.md \
59
+ --replace \
60
+ --expected-plan-path docs/plans/YYYY-MM-DD-gitnexus-plan-example-change-plan.md \
61
+ --expected-plan-digest 'sha256:<digest-from-read-plan>' \
62
+ < /path/to/outside-repo-scratch-plan.md
63
+ ```
64
+
65
+ Initial planning never passes `--replace`; an existing destination is an
66
+ error. Deepen mode rewrites the same path by adding `--replace`,
67
+ `--expected-plan-path <generated_plan_path-from-read-plan>`, and
68
+ `--expected-plan-digest <plan_digest-from-that-same-receipt>`. Standard input must be
69
+ valid UTF-8 and at most 16 MiB. A successful write prints a JSON receipt with
70
+ the normalized `generated_plan_path` and `bytes_written`. A successful Deepen
71
+ write also returns `prior_plan_backup_git_path`, a durable Git-admin path for
72
+ the displaced plan. The CLI rejects every option that does not apply to its
73
+ selected command; the direct API likewise requires literal booleans and exact
74
+ digest strings rather than truthy coercion.
75
+
76
+ ## Path contract
77
+
78
+ Every Git path and CLI path must be valid UTF-8, already normalized to Unicode
79
+ NFC, and a nonempty POSIX repo-relative path. NUL, backslash, absolute/drive
80
+ paths, empty components, and `.` or `..` components are rejected. The helper
81
+ does not silently repair or alias them. Invalid UTF-8 from Git, non-NFC names,
82
+ unmerged index stages, unsupported Git modes, sockets/devices/FIFOs, unreadable
83
+ objects, symlink traversal in a parent path component, or a repository mutation
84
+ observed during the snapshot fail closed.
85
+
86
+ The generated-plan path is always repo-relative under schema 2. Snapshot
87
+ exclusion and writing require exactly
88
+ `docs/plans/YYYY-MM-DD-gitnexus-plan-<3-5-word-kebab-slug>.md`, including a
89
+ valid calendar date; they cannot target `.git`, source, configuration, or an
90
+ arbitrary repo file. For compatibility with documented and legacy plans,
91
+ `read-plan` accepts normalized files matching `docs/plans/*gitnexus-plan*.md`,
92
+ while retaining the same descriptor-anchored containment checks. That read
93
+ compatibility does not widen the writer. External output has no schema-2
94
+ representation. The snapshot exclusion is one exact normalized path
95
+ comparison. No glob, directory, basename, or `docs/plans/`-wide exclusion is
96
+ permitted. If the exact path is a rename endpoint, only that endpoint record is
97
+ excluded.
98
+
99
+ ## Safe existing-plan read contract
100
+
101
+ `read-plan` fails closed unless Linux `/proc/self/fd`, `O_DIRECTORY`, and
102
+ `O_NOFOLLOW` are available. It resolves the exact Git top-level, opens the
103
+ repository root and every plan parent as held no-follow directory descriptors,
104
+ rejects missing, symlink, non-directory, and escaping parents, and opens the
105
+ leaf with `O_NOFOLLOW`. It reads at most 16 MiB from that held file descriptor,
106
+ requires valid UTF-8, hashes the exact bytes, then proves both the parent chain
107
+ and lexical leaf still name the same held objects before returning its receipt.
108
+ Neither Deepen nor work may parse bytes obtained before or outside this receipt.
109
+
110
+ ## Safe generated-plan write contract
111
+
112
+ The writer fails closed unless Linux `/proc/self/fd`, `O_DIRECTORY`,
113
+ `O_NOFOLLOW`, and Python 3 with libc `renameat2(RENAME_NOREPLACE)` support are
114
+ available. Python may live in `/usr/local`, a Nix profile, or another absolute
115
+ PATH directory, but the helper accepts only a resolved executable and
116
+ containing directory owned by root or the current user and not writable by
117
+ group/other. The resolved executable is opened without following links and
118
+ invoked through that held descriptor. Relative PATH entries are ignored. The plan parent and the
119
+ repository's Git-admin directory must also share a filesystem. It resolves
120
+ the target repository's exact Git top-level, opens that root and every
121
+ destination parent as held no-follow directory descriptors, creates missing
122
+ parents relative to those descriptors, and proves the descriptor and lexical
123
+ chains still identify the same directories at the write boundary. A symlink
124
+ or non-directory parent, an escaping resolved path, a symlink/non-regular final
125
+ target, or a parent swap is an error.
126
+
127
+ The writer creates a random exclusive temporary file relative to the held final
128
+ parent descriptor and keeps its no-follow descriptor open. It writes and
129
+ flushes the bytes, binds the temporary name to the opened inode, and hashes the
130
+ open file before publication. Immediately before publication it revalidates
131
+ the parent and the temporary path, inode, size, and digest. Publication uses an
132
+ atomic no-replace move relative to the held directory descriptor. Initial mode
133
+ therefore cannot overwrite a destination that appears after the absent check.
134
+ The writer then flushes the directory and revalidates the committed path by
135
+ opening it with `O_NOFOLLOW`, hashing both the original temporary fd and the
136
+ path-bound fd, and performing a second descriptor-anchored path identity check
137
+ after hashing. A detected mutation or replacement aborts instead of accepting
138
+ mixed-era output.
139
+
140
+ `--replace` accepts only a pre-existing regular file and is reserved for
141
+ Deepen; without it, accidental overwrite is rejected. It also requires the
142
+ exact canonical `generated_plan_path` and `plan_digest` from the same session's
143
+ `read-plan` receipt. The expected path must exactly equal the write
144
+ destination, so identical bytes from one plan cannot authorize another plan.
145
+ Immediately before
146
+ preservation, the writer hashes the still-held prior-plan fd and rejects any
147
+ digest, inode, or path mismatch, including same-inode edits and changes between
148
+ read and write. It then atomically moves the current destination without
149
+ replacement to a random `gitnexus-plan-backups/` file under the resolved
150
+ Git-admin directory and verifies the moved inode and digest against that held
151
+ fd. Only then does it publish the new plan with the same atomic no-replace
152
+ primitive. A destination that reappears at either boundary is left untouched.
153
+
154
+ Every newly created plan or vault directory is fsynced and then fsynced into
155
+ its containing directory. Every cross-directory preservation move fsyncs both
156
+ its source and destination directories before success or a recovery path is
157
+ reported. After temporary bytes exist, a failed publication or verification preserves
158
+ every available prior, displaced, unpublished, or intended plan in that
159
+ Git-admin vault before reporting failure. Each reported recovery is reopened
160
+ from a freshly resolved Git root and verified before the error names it as
161
+ `git-path:gitnexus-plan-backups/<random-name>`. Resolve that value with
162
+ `git rev-parse --git-path gitnexus-plan-backups/<random-name>`; never interpret
163
+ it as a repo-relative working-tree path. This remains valid if the held plan
164
+ parent was renamed after publication. The writer never reports recovery
165
+ through a stale lexical parent and never performs an identity-check-then-unlink
166
+ rollback that could delete a racer's replacement. Read-only or unsupported
167
+ checkouts produce a blocking error. Callers must not bypass the helper,
168
+ redirect to an external path, or weaken these checks.
169
+
170
+ ## Canonical bytes
171
+
172
+ The `global_dirty_digest.value` is lowercase SHA-256 (without a `sha256:`
173
+ prefix) over this byte stream. All textual values are their exact UTF-8 bytes.
174
+ `NUL` below is one `0x00` byte.
175
+
176
+ 1. Prefix fields, each followed by NUL, then one additional NUL:
177
+ `gitnexus-evidence-provenance`, `schema_version`, `2`.
178
+ 2. Zero or more records sorted by unsigned lexicographic comparison of the
179
+ normalized path's UTF-8 bytes. Locale and filesystem order are forbidden.
180
+ 3. Each record is `record` + NUL, then the following fixed-order sequence of
181
+ `field-name` + NUL + `field-value` + NUL pairs, then one additional NUL:
182
+ `path`, `state`, `head_kind`, `index_kind`, `worktree_kind`,
183
+ `untracked_kind`, `rename_from`, `rename_to`, `head_digest`,
184
+ `index_digest`, `worktree_digest`, `untracked_digest`.
185
+ 4. The literal `absent` represents every unavailable rename endpoint, object
186
+ kind, and layer digest in canonical bytes. It is never an empty string.
187
+
188
+ The schema's canonicalization literal is exactly
189
+ `gitnexus-evidence-provenance-v2 NUL-framed UTF-8 records`. The fixed field
190
+ count plus the extra NUL after prefix/record makes framing unambiguous; values
191
+ cannot contain NUL. Duplicate normalized paths are rejected.
192
+
193
+ ## Records, renames, and states
194
+
195
+ The raw dirty set comes from Git porcelain v2 with NUL termination, all
196
+ untracked files, submodule inspection enabled, a fixed 50% rename threshold,
197
+ and both `diff.renameLimit=0` and `status.renameLimit=0`, so repository config
198
+ cannot cap rename candidates. Raw porcelain facts that share a path are merged
199
+ into one canonical record. A rename contributes two endpoint facts:
200
+
201
+ - old endpoint: `path=<old>`, `rename_from=absent`, `rename_to=<new>`;
202
+ - new endpoint: `path=<new>`, `rename_from=<old>`, `rename_to=absent`.
203
+
204
+ Both normally have state `renamed`; record sorting, not old/new role,
205
+ determines order. A worktree-dirty rename destination or any endpoint that also
206
+ has another fact is `mixed`, with rename metadata retained. When either endpoint
207
+ is cited, the cited manifest expands to include both.
208
+
209
+ Ordinary `XY` status maps to `mixed` when index and worktree columns are both
210
+ dirty, otherwise `deleted` for a deletion, `staged` for index-only change, and
211
+ `unstaged` for worktree-only change. `?` is `untracked`. Multiple distinct
212
+ facts for the same path become `mixed`; a staged deletion plus a recreated file
213
+ therefore retains HEAD/index facts while the filesystem object is recorded in
214
+ the untracked layer. `? child/` is Git's embedded-directory marker: the trailing
215
+ slash is removed before path normalization and `child` is materialized as one
216
+ bounded directory object. A cited path outside the dirty set is `clean`,
217
+ `untracked` when it exists only outside Git layers, or `absent` when no layer
218
+ exists.
219
+
220
+ ## Object and digest rules
221
+
222
+ Every present layer digest is `sha256:<lowercase-hex>`:
223
+
224
+ - HEAD regular/symlink: SHA-256 of the exact Git blob bytes. HEAD directory:
225
+ SHA-256 of the exact raw Git tree bytes. HEAD gitlink: SHA-256 of the ASCII
226
+ object ID stored by the tree.
227
+ - Index regular/symlink: SHA-256 of the stage-0 Git blob bytes. Index gitlink:
228
+ SHA-256 of its ASCII object ID. The index has no directory layer. Any
229
+ non-stage-0 entry is rejected.
230
+ - Tracked worktree regular: raw file bytes, opened without following symlinks.
231
+ Symlink: raw link-target bytes. Gitlink: ASCII object ID at the checked-out
232
+ nested HEAD, but only after `rev-parse --show-toplevel` proves that the
233
+ directory itself is the nested repository root, `HEAD` resolves there, and
234
+ porcelain v2 reports no staged, unstaged, untracked, or ignored nested changes. The
235
+ same root, HEAD, and clean-status proof is repeated by the mutation guard. A
236
+ dirty, empty, uninitialized, or parent-falling-through gitlink fails closed.
237
+ Directory: the v1 directory stream described below.
238
+ - A path absent from both HEAD and index places the filesystem object in the
239
+ `untracked` layer and marks `worktree` absent. A Git-backed path places it in
240
+ `worktree` and marks `untracked` absent. A missing layer uses literal
241
+ `absent` for both kind and digest; an empty file is the SHA-256 of zero bytes.
242
+
243
+ Filesystem directory bytes use prefix fields
244
+ `gitnexus-evidence-directory`, `schema_version`, `1`, the same NUL framing,
245
+ and recursive entries sorted by unsigned UTF-8 relative-path bytes. Each entry
246
+ has fixed fields `path`, `kind`, `digest`. A single bottom-up filesystem walk
247
+ visits each node once and returns each child digest plus the flattened subtree
248
+ needed to preserve those canonical bytes; links are never followed. When the
249
+ directory is proven to be an exact nested Git top-level, only its administrative
250
+ `.git` entry is excluded. Every other child, including working files and nested
251
+ directories, remains evidence.
252
+
253
+ Each directory object is bounded to 10,000 visited entries, depth 256, and 256
254
+ MiB of regular-file content. Exceeding a bound fails closed. These bounds apply
255
+ independently to each top-level directory object materialized by a record.
256
+
257
+ HEAD objects are read only from the full object ID captured at snapshot start;
258
+ the symbolic `HEAD` name is never re-resolved for layers. Index layers are
259
+ parsed from one captured stage-0 listing. The helper guards the corresponding
260
+ HEAD/ref/reflog controls and raw index file, compares the captured listing at
261
+ the end, and rejects ordinary A-to-B-to-A mutations instead of accepting
262
+ mixed-era layers.
263
+
264
+ Regular files are read through an `O_NOFOLLOW` descriptor with before/after
265
+ identity checks. Symlinks use lstat/readlink/lstat; directories record identity
266
+ before and after their inventory. The helper also compares raw porcelain-v2
267
+ status and HEAD at the start and end, then rechecks filesystem guards. An
268
+ absent cited path holds a no-follow descriptor for the nearest existing parent
269
+ and records the first missing component or leaf; that anchored absence is
270
+ checked both before and after the final Git status pass, so a newly created
271
+ ignored path cannot evade porcelain. Any observed race rejects the snapshot
272
+ rather than emitting mixed-era evidence.
@@ -0,0 +1,109 @@
1
+ # Building the PDG context slice
2
+
3
+ Statement-level evidence for the 1–3 functions most central to the change.
4
+ Goal: a compact slice the planning LLM can hold, never a graph dump.
5
+
6
+ ## Tools (all verified against `gitnexus/src/mcp/tools.ts`)
7
+
8
+ | Question | Call |
9
+ | --- | --- |
10
+ | Under what condition does X run? Guards? | `pdg_query {mode: "controls", target}` |
11
+ | Where does variable Y flow inside the function? | `pdg_query {mode: "flows", target, variable}` |
12
+ | What depends on the statement at line N? | `impact {mode: "pdg", target, direction: "upstream", line: N}` |
13
+ | Source→sink taint paths (security mode) | `explain {target}` |
14
+
15
+ Contract caveats that shape interpretation:
16
+
17
+ - `impact` requires `direction` in every mode, `mode: "pdg"` included —
18
+ `"upstream"` for "what depends on this statement", `"downstream"` for what
19
+ it depends on. Omitting it fails schema validation.
20
+ - CDG branch sense is `'T'`/`'F'` in the result's `label` field; a guard's
21
+ sense depends on its predicate (`if (!ok) return;` rides `'T'`) — never
22
+ filter guards by a fixed label. Early return/throw edges carry `guard:
23
+ true`. (The raw edge stores the sense in `reason`, visible only via
24
+ `cypher`.)
25
+ - `pdg_query` is intra-procedural and always anchored. Cross-function flow is
26
+ taint's domain (`explain`) or `impact {mode:"pdg"}`'s inter-procedural reach.
27
+ - Every `switch` case arm is `'T'` (per-case conditions not distinguished).
28
+ - No `--pdg` layer → the tools return a "no PDG layer" note, not an error.
29
+ The note is repo-wide: one probe settles it — do not re-probe per function.
30
+ Under `freshness: strict` (default), run `analyze --index-only --pdg` via
31
+ the runner resolved in SKILL.md Phase 1 — this is the one `--pdg` upgrade
32
+ Phase 1's refresh budget allows (skip it if Phase 1 already refreshed
33
+ with `--pdg`; apply the runner build check first) — then re-probe. If the refresh failed, is impractical, or `freshness: accept` was
34
+ passed: record "PDG unavailable" in the ledger, skip the slice, say so in
35
+ plan §5, and recommend the command. Never reconstruct edges from source by
36
+ hand.
37
+
38
+ ## Inclusion criteria
39
+
40
+ A statement enters the slice only if it is at least one of:
41
+
42
+ - directly matched to the task;
43
+ - a data-flow predecessor or successor of a relevant statement (within
44
+ `pdg_data_depth`, default 2);
45
+ - a control dependency of a relevant statement (within `pdg_control_depth`,
46
+ default 2);
47
+ - a state mutation affecting the requested behavior;
48
+ - an external call on the execution path;
49
+ - an error-handling or fallback branch;
50
+ - part of an affected return value;
51
+ - required to explain a test assertion.
52
+
53
+ Everything else is cut. If the slice exceeds ~15 statements per function,
54
+ tighten relevance rather than raising depth.
55
+
56
+ ## Slice representation
57
+
58
+ Working-memory material: keep the full slice in working context while
59
+ planning, summarize it into the ledger's one-line `pdg_slices` entries, and
60
+ distill it into plan §5.
61
+
62
+ ```yaml
63
+ pdg_context:
64
+ entry_symbol: "processFileGroup"
65
+ source: { file: "gitnexus/src/core/ingestion/worker.ts", start_line: 120, end_line: 188 }
66
+ relevant_statements:
67
+ - id: "stmt-12" # stable id or "<file>:<line>"
68
+ lines: "128-130"
69
+ type: "condition | call | mutation | return | throw"
70
+ code: "if (request.retryable) {"
71
+ relevance: "Controls whether retry scheduling is entered"
72
+ defines: []
73
+ uses: ["request.retryable"]
74
+ control_dependencies: ["stmt-4"]
75
+ data_dependencies: []
76
+ execution_flow: # ordered, prose steps
77
+ - "Validate request"
78
+ - "Schedule retry"
79
+ critical_dependencies:
80
+ - { from: "stmt-7", to: "stmt-18", type: "data", explanation: "Validated request becomes scheduler input" }
81
+ behavioural_observations:
82
+ - "Persistence occurs before scheduler invocation"
83
+ planning_implications:
84
+ - "Changes to scheduling must account for partial failure"
85
+ ```
86
+
87
+ Adapt field names to what the tools actually returned; keep it
88
+ machine-readable and short. `behavioural_observations` are confirmed facts;
89
+ `planning_implications` are inferences — keep the distinction.
90
+
91
+ ## Security mode (task category: security)
92
+
93
+ Additionally identify and record: untrusted inputs, validation points,
94
+ sanitisation points, authn/authz checks, privilege boundaries, sensitive data,
95
+ persistence operations, network calls, dangerous sinks, and error paths that
96
+ bypass validation. Run `explain {target}` for persisted source→sink taint
97
+ paths (intra-procedural TAINTED edges and cross-function TAINT_PATH flows)
98
+ and include the hop paths for findings relevant to the task. Absence of a
99
+ taint finding is **not** proof of safety — closure/callback flows,
100
+ property/field flows, and implicit flows are not modeled, and guard-style
101
+ sanitizers may be missed — say so when it matters.
102
+
103
+ ## Performance mode (task category: performance)
104
+
105
+ Additionally scan the slice for: loops, repeated calls, blocking operations,
106
+ network calls, database calls, allocation-heavy paths, caching boundaries,
107
+ concurrency, fan-out, repeated data transformations. State likely hot-path
108
+ implications as inferences; never claim measured improvements without
109
+ benchmark evidence.
@@ -0,0 +1,201 @@
1
+ # Plan document template
2
+
3
+ Two forms, chosen by the Phase 0 category (`form` knob overrides): **compact**
4
+ for narrow/default work, **full** for deep work. Repo-relative paths for all
5
+ repo artifacts in both.
6
+
7
+ ## Compact form
8
+
9
+ Same evidence header, then only the load-bearing sections — keep the §
10
+ numbers in the headings so `gitnexus-work`'s § references resolve:
11
+
12
+ ```markdown
13
+ # GitNexus Engineering Plan
14
+
15
+ > Task: <one line>
16
+ > Evidence verified at commit <sha>; GitNexus index <...>.
17
+ > Evidence provenance schema 2; global dirty digest <sha256>; cited-path manifest <count> sorted entries; exact generated plan path excluded.
18
+
19
+ ## Objective (§1)
20
+
21
+ ## Current Behaviour (§2–3) — ≤10 lines, architecture folded in
22
+
23
+ ## Findings (§4–5) — only load-bearing, each tagged + tool-named
24
+
25
+ ## Proposed Changes (§6)
26
+
27
+ ## Implementation Sequence (§7) — risks inline as step notes
28
+
29
+ ## Test Strategy (§8)
30
+
31
+ ## Implementation Context (§11) — the mini-pack (see context-pack.md)
32
+
33
+ ## Assumptions and Open Questions (§12)
34
+
35
+ ## Definition of Done (§13)
36
+ ```
37
+
38
+ Hard cap: **80 lines excluding the §11 pack**. Anything cut that still
39
+ matters becomes one line in §12 — never padded prose. A compact plan that
40
+ outgrows the cap is a signal the task was misclassified: reclassify to full
41
+ rather than overflowing.
42
+
43
+ ## Full form
44
+
45
+ Fill every section below. If a section is genuinely empty for this task
46
+ (e.g. no PDG layer indexed), keep the heading and state why in one line —
47
+ never silently drop it.
48
+
49
+ **Claim tagging.** Tag every load-bearing claim with its evidence class:
50
+ `[verified]` (source-read at the pinned commit), `[graph]` (GitNexus/PDG
51
+ output, not source-confirmed), `[inferred]` (evidence-backed reasoning),
52
+ `[assumed]` (unverified — must also appear in §12). Untagged prose is
53
+ narrative, not evidence.
54
+
55
+ ```markdown
56
+ # GitNexus Engineering Plan
57
+
58
+ > Task: <one line>
59
+ > Evidence verified at commit <HEAD sha>; GitNexus index <fresh | refreshed this session (--index-only [--pdg]) | N commits behind, refresh skipped: <reason> | not used>.
60
+ > Evidence provenance schema 2; global dirty digest <sha256>; cited-path manifest <count> sorted entries; exact generated plan path excluded.
61
+
62
+ ## 1. Objective
63
+
64
+ A concise description of the requested outcome.
65
+
66
+ ## 2. Current Behaviour
67
+
68
+ Describe the current implementation and execution path.
69
+
70
+ Include the most relevant symbols, files, and statement-level observations.
71
+
72
+ ## 3. Relevant Architecture
73
+
74
+ Explain the involved modules, boundaries, dependencies, and established patterns.
75
+
76
+ ## 4. GitNexus Findings
77
+
78
+ Summarise:
79
+
80
+ - primary symbols;
81
+ - callers and callees;
82
+ - impact radius;
83
+ - related implementations;
84
+ - related tests;
85
+ - important cross-module relationships.
86
+
87
+ ## 5. Statement-Level PDG Findings
88
+
89
+ For each critical symbol, explain:
90
+
91
+ - relevant statements;
92
+ - control dependencies;
93
+ - data dependencies;
94
+ - state mutations;
95
+ - error branches;
96
+ - side effects;
97
+ - ordering constraints;
98
+ - planning implications.
99
+
100
+ Do not paste an unfiltered graph dump.
101
+
102
+ ## 6. Proposed Changes
103
+
104
+ For every proposed change include:
105
+
106
+ - file;
107
+ - symbol;
108
+ - exact responsibility;
109
+ - intended behavioural change;
110
+ - dependencies;
111
+ - constraints;
112
+ - implementation notes.
113
+
114
+ ## 7. Implementation Sequence
115
+
116
+ Provide an ordered sequence of implementation steps.
117
+
118
+ Each step must be independently actionable.
119
+
120
+ ## 8. Test Strategy
121
+
122
+ Describe:
123
+
124
+ - tests to add;
125
+ - tests to update;
126
+ - edge cases;
127
+ - failure paths;
128
+ - regression coverage;
129
+ - integration boundaries;
130
+ - relevant verification commands.
131
+
132
+ ## 9. Risk and Impact Analysis
133
+
134
+ Include:
135
+
136
+ - high-risk symbols;
137
+ - downstream consumers;
138
+ - compatibility concerns;
139
+ - performance concerns;
140
+ - concurrency or transaction risks;
141
+ - migration risks;
142
+ - observability requirements.
143
+
144
+ ## 10. Files Expected to Change
145
+
146
+ | File | Symbols | Reason |
147
+ | ---- | ------- | ------ |
148
+
149
+ ## 11. Reusable Implementation Context
150
+
151
+ The machine-readable context pack — see `context-pack.md`. Its mandatory
152
+ `evidence_provenance` field carries the full pinned commit, canonical
153
+ repository-wide dirty digest, and sorted cited-path manifest.
154
+
155
+ ## 12. Assumptions and Open Questions
156
+
157
+ Clearly separate assumptions from confirmed facts. Explicitly-deferred
158
+ follow-up suggestions (adjacent work the task didn't ask for) land here too.
159
+
160
+ ## 13. Definition of Done
161
+
162
+ Concrete, testable completion criteria.
163
+ ```
164
+
165
+ Composition notes:
166
+
167
+ - Immediately before composition, emit `evidence_provenance.schema_version`,
168
+ the full HEAD commit, the canonical `global_dirty_digest`, and the
169
+ `cited_path_manifest` sorted by normalized repo-relative path. Include
170
+ object kinds, rename endpoints, and HEAD/index/worktree/untracked layer
171
+ digests. Exclude only the generated plan path from the global digest.
172
+ - Invoke `scripts/evidence-provenance.mjs` per `evidence-provenance.md` and
173
+ copy its schema-2 JSON; never recreate canonical records in prose or shell.
174
+ - Publish the fully composed UTF-8 plan only with that helper's `write-plan`
175
+ command. Initial planning must not replace an existing file; Deepen rewrites
176
+ the same repo-relative path with `write-plan --replace
177
+ --expected-plan-path <path-from-read-plan>
178
+ --expected-plan-digest <digest-from-read-plan>`, which preserves the prior
179
+ plan in the receipt's `prior_plan_backup_git_path`. Both expected values must
180
+ come from the same receipt. Deepen must load and bind that canonical path and
181
+ those original bytes through `read-plan` first. Snapshot, read, and
182
+ publication must pass the same strict generated-plan filename/date validator.
183
+ - §2/§5 quote source excerpts at most `max_snippet_lines` (30) lines each, and
184
+ only when the excerpt carries the argument.
185
+ - §4 findings each name the tool call they came from (tool + key args), plus a
186
+ one-line quote of the result when the plan leans on it — that is what makes
187
+ a tool claim auditable later. Stale-index or fallback-mode findings are
188
+ labelled as such.
189
+ - §6 changes may only name symbols the ledger marks `source_verified`.
190
+ - §7 steps are ordered by dependency and independently actionable — an
191
+ executor can stop after any step with the tree still coherent. Steps that
192
+ change output guarded by fingerprints, goldens, or recorded baselines
193
+ regenerate those artifacts ONCE, in the final step of the sequence — CI
194
+ judges only the tip, and per-step refreshes churn every intermediate
195
+ commit and re-drift as later steps land.
196
+ - §8 names real, located test files for updates; new tests get concrete
197
+ scenario lists (input → action → expected outcome). Verification commands
198
+ must exist AND be runnable: prefer the npm/CI script form that carries its
199
+ prerequisites (pre-hooks, builds) over invoking underlying binaries directly.
200
+ - §9 must account for every direct (depth-1) dependent the impact pass
201
+ reported.