codingest 0.2.17__tar.gz → 0.2.19__tar.gz

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 (105) hide show
  1. {codingest-0.2.17 → codingest-0.2.19}/Cargo.lock +8 -8
  2. {codingest-0.2.17 → codingest-0.2.19}/Cargo.toml +18 -5
  3. {codingest-0.2.17 → codingest-0.2.19}/PKG-INFO +5 -5
  4. {codingest-0.2.17 → codingest-0.2.19}/README.md +3 -3
  5. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/Cargo.toml +1 -1
  6. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-cli/Cargo.toml +1 -1
  7. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-cli/skills/codingest-code-review/SKILL.md +56 -38
  8. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-cli/skills/codingest-code-review/references/public-repositories.md +10 -0
  9. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-cli/skills/codingest-code-review/references/queries.md +4 -2
  10. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-mcp/Cargo.toml +1 -1
  11. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-py/Cargo.toml +3 -3
  12. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-py/src/lib.rs +1 -1
  13. {codingest-0.2.17 → codingest-0.2.19}/pyproject.toml +2 -2
  14. {codingest-0.2.17 → codingest-0.2.19}/LICENSE +0 -0
  15. {codingest-0.2.17 → codingest-0.2.19}/codingest/__init__.py +0 -0
  16. {codingest-0.2.17 → codingest-0.2.19}/codingest/__init__.pyi +0 -0
  17. {codingest-0.2.17 → codingest-0.2.19}/codingest/cli.py +0 -0
  18. {codingest-0.2.17 → codingest-0.2.19}/codingest/mcp_server.py +0 -0
  19. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/bin/codingest_bench.rs +0 -0
  20. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/bin/codingest_stats.rs +0 -0
  21. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/builder/call_edges.rs +0 -0
  22. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/builder/js_workspace.rs +0 -0
  23. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/builder/load/edge_frames.rs +0 -0
  24. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/builder/load/entity_frames.rs +0 -0
  25. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/builder/load.rs +0 -0
  26. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/builder/mod.rs +0 -0
  27. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/builder/other_edges.rs +0 -0
  28. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/builder/routes/django.rs +0 -0
  29. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/builder/routes/fastapi.rs +0 -0
  30. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/builder/routes/flask.rs +0 -0
  31. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/builder/routes/mod.rs +0 -0
  32. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/builder/semantic_edges.rs +0 -0
  33. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/builder/type_edges.rs +0 -0
  34. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/cross_lang.rs +0 -0
  35. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/docs/mod.rs +0 -0
  36. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/docs/rst.rs +0 -0
  37. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/lib.rs +0 -0
  38. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/manifest/mod.rs +0 -0
  39. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/models.rs +0 -0
  40. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/agc.rs +0 -0
  41. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/cpp.rs +0 -0
  42. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/csharp.rs +0 -0
  43. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/css.rs +0 -0
  44. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/dart.rs +0 -0
  45. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/go.rs +0 -0
  46. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/html.rs +0 -0
  47. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/java.rs +0 -0
  48. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/julia.rs +0 -0
  49. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/mod.rs +0 -0
  50. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/php.rs +0 -0
  51. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/python.rs +0 -0
  52. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/r.rs +0 -0
  53. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/registry.rs +0 -0
  54. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/rust_lang.rs +0 -0
  55. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/shared.rs +0 -0
  56. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/swift.rs +0 -0
  57. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/parsers/typescript.rs +0 -0
  58. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/repo.rs +0 -0
  59. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/src/rev.rs +0 -0
  60. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/agc_apollo.rs +0 -0
  61. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/README.md +0 -0
  62. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/agc_basic.sha256 +0 -0
  63. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/cpp_extern_c.sha256 +0 -0
  64. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/cpp_include.sha256 +0 -0
  65. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/cross_ts_py.sha256 +0 -0
  66. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/csharp_using_alias.sha256 +0 -0
  67. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/dart_import.sha256 +0 -0
  68. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/dart_part_of.sha256 +0 -0
  69. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/docs_ext_collide.sha256 +0 -0
  70. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/docs_mdx.sha256 +0 -0
  71. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/dup_minified_assets.sha256 +0 -0
  72. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/go_interface.sha256 +0 -0
  73. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/html_js_lang_group.sha256 +0 -0
  74. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/java_javadoc.sha256 +0 -0
  75. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/julia_basic.sha256 +0 -0
  76. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/php_group_use.sha256 +0 -0
  77. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/py_basic.sha256 +0 -0
  78. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/py_import.sha256 +0 -0
  79. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/py_inheritance.sha256 +0 -0
  80. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/py_nested_defs.sha256 +0 -0
  81. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/py_routes_dup.sha256 +0 -0
  82. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/py_src_layout.sha256 +0 -0
  83. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/r_basic.sha256 +0 -0
  84. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/rust_import.sha256 +0 -0
  85. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/rust_inline_mod.sha256 +0 -0
  86. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/rust_xfile.sha256 +0 -0
  87. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/swift_basic.sha256 +0 -0
  88. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/ts_callback.sha256 +0 -0
  89. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/ts_closure_scope.sha256 +0 -0
  90. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/ts_hof_binding.sha256 +0 -0
  91. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/ts_monorepo.sha256 +0 -0
  92. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/goldens/web_served_root.sha256 +0 -0
  93. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/grammar_kinds.rs +0 -0
  94. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/parity.rs +0 -0
  95. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest/tests/traversal_semantics.rs +0 -0
  96. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-cli/skills/codingest-code-review/references/mcp-upgrade.md +0 -0
  97. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-cli/src/code_tree_cli.rs +0 -0
  98. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-cli/src/lib.rs +0 -0
  99. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-cli/src/main.rs +0 -0
  100. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-cli/src/query.rs +0 -0
  101. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-cli/src/skill.rs +0 -0
  102. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-cli/src/skill_assets.rs +0 -0
  103. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-cli/tests/exit_codes.rs +0 -0
  104. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-mcp/src/lib.rs +0 -0
  105. {codingest-0.2.17 → codingest-0.2.19}/crates/codingest-mcp/src/main.rs +0 -0
@@ -302,7 +302,7 @@ dependencies = [
302
302
 
303
303
  [[package]]
304
304
  name = "codingest"
305
- version = "0.2.17"
305
+ version = "0.2.19"
306
306
  dependencies = [
307
307
  "aho-corasick",
308
308
  "base64 0.22.1",
@@ -338,7 +338,7 @@ dependencies = [
338
338
 
339
339
  [[package]]
340
340
  name = "codingest-cli"
341
- version = "0.2.17"
341
+ version = "0.2.19"
342
342
  dependencies = [
343
343
  "anyhow",
344
344
  "clap",
@@ -350,7 +350,7 @@ dependencies = [
350
350
 
351
351
  [[package]]
352
352
  name = "codingest-mcp"
353
- version = "0.2.17"
353
+ version = "0.2.19"
354
354
  dependencies = [
355
355
  "anyhow",
356
356
  "codingest",
@@ -359,7 +359,7 @@ dependencies = [
359
359
 
360
360
  [[package]]
361
361
  name = "codingest-py"
362
- version = "0.2.17"
362
+ version = "0.2.19"
363
363
  dependencies = [
364
364
  "codingest",
365
365
  "codingest-cli",
@@ -1366,9 +1366,9 @@ dependencies = [
1366
1366
 
1367
1367
  [[package]]
1368
1368
  name = "kglite"
1369
- version = "0.17.1"
1369
+ version = "0.17.3"
1370
1370
  source = "registry+https://github.com/rust-lang/crates.io-index"
1371
- checksum = "a28e49b7ad2d0489043994eedb1f8234e355d5b3a32797cbb43013f32682ea72"
1371
+ checksum = "c414d1f4ae2d7d0af3ce088b843fbc3622cac2c29467cc81bc2dc639006136e0"
1372
1372
  dependencies = [
1373
1373
  "bzip2",
1374
1374
  "chrono",
@@ -1402,9 +1402,9 @@ dependencies = [
1402
1402
 
1403
1403
  [[package]]
1404
1404
  name = "kglite-mcp-server"
1405
- version = "0.17.1"
1405
+ version = "0.17.3"
1406
1406
  source = "registry+https://github.com/rust-lang/crates.io-index"
1407
- checksum = "cc38e9f116553e64e560edf72c83a17bbc7f2ab947a1f47be39659d6d86890e2"
1407
+ checksum = "764efb5d817e481d9c96302c185a71bceba6ed09a79b3c6ad2f131688c7384c9"
1408
1408
  dependencies = [
1409
1409
  "anyhow",
1410
1410
  "bytes",
@@ -3,7 +3,7 @@ members = ["crates/codingest", "crates/codingest-cli", "crates/codingest-mcp", "
3
3
  resolver = "2"
4
4
 
5
5
  [workspace.package]
6
- version = "0.2.17"
6
+ version = "0.2.19"
7
7
  edition = "2021"
8
8
  rust-version = "1.88"
9
9
  license = "MIT"
@@ -12,8 +12,21 @@ repository = "https://github.com/kkollsga/codingest"
12
12
  [workspace.dependencies]
13
13
  base64 = "0.22"
14
14
  sha2 = "0.11"
15
- # kglite engine + MCP server — imported as crates.io libraries. The 0.17.1
16
- # floor spans four upstream releases: codingest took none of 0.16.23, 0.16.24
15
+ # kglite engine + MCP server — imported as crates.io libraries. The 0.17.3
16
+ # floor spans the 0.17.2 and 0.17.3 query releases. Nothing in codingest's
17
+ # builder source moved for either release; the changes reach users through
18
+ # `codingest query` and the embedded `codingest-mcp` server:
19
+ # * read `CALL` subqueries gain modern scope clauses plus UNION / INTERSECT /
20
+ # EXCEPT composition, and Cypher 25 adds FILTER, OFFSET, NODETACH DELETE,
21
+ # FINISH and INSERT. Procedure calls now execute per incoming row instead
22
+ # of reviving an empty pipeline. `PassCtx`'s new private fields are a Rust
23
+ # break for struct-literal callers, but codingest never constructs one.
24
+ # * typed and undirected relationship counts, correlated EXISTS patterns,
25
+ # and fused OPTIONAL MATCH / two-MATCH aggregates are faster or corrected.
26
+ # Those are engine query paths only. The builder's `prepare_kgl_write`,
27
+ # `write_kgl` and `save_graph` persistence entries are unchanged.
28
+ # The preceding 0.17.1 floor spanned four upstream releases: codingest took
29
+ # none of 0.16.23, 0.16.24
17
30
  # or 0.17.0, so all four land here together. Nothing in our source moved for
18
31
  # it — the workspace builds, clippys and tests clean against 0.17.1 with zero
19
32
  # edits, and every corpus golden is byte-identical across the move. Where they
@@ -486,8 +499,8 @@ sha2 = "0.11"
486
499
  # and no disk storage. Neither 0.15.7 nor 0.15.8 changes the `kglite::api` we
487
500
  # call, graph output, property encoding, or `.kgl` serialization.
488
501
  # Keep both libraries aligned so the graph and server share one engine release.
489
- kglite = { version = "0.17.1", default-features = false }
490
- kglite-mcp-server = { version = "0.17.1", default-features = false }
502
+ kglite = { version = "0.17.3", default-features = false }
503
+ kglite-mcp-server = { version = "0.17.3", default-features = false }
491
504
 
492
505
  # Dependency debuginfo capped at line tables (kglite coordination, 2026-08-31,
493
506
  # after unbounded debug trees filled the build-cache disk to zero): a
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codingest
3
- Version: 0.2.17
3
+ Version: 0.2.19
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: Programming Language :: Python :: 3
@@ -12,7 +12,7 @@ Classifier: Programming Language :: Python :: 3.14
12
12
  Classifier: Programming Language :: Rust
13
13
  Classifier: Topic :: Software Development
14
14
  Classifier: Topic :: Software Development :: Libraries
15
- Requires-Dist: kglite>=0.17.1,<0.18
15
+ Requires-Dist: kglite>=0.17.3,<0.18
16
16
  License-File: LICENSE
17
17
  Summary: Build fast, queryable code graphs for AI agents, MCP code review, and local or GitHub repository analysis.
18
18
  Keywords: ai-agents,mcp,code-review,knowledge-graph,code-analysis,github,tree-sitter,cypher
@@ -192,7 +192,7 @@ codingest skill install # code-review Agent Skill
192
192
  ```
193
193
 
194
194
  The wheel bundles every grammar plus the `codingest` and `codingest-mcp`
195
- commands. KGLite ≥0.17.1 is installed automatically as the query/storage
195
+ commands. KGLite ≥0.17.3 is installed automatically as the query/storage
196
196
  engine; its MCP server and the transitive `mcp-methods` framework power the
197
197
  builder-aware Codingest server. Nothing else needs to be installed.
198
198
 
@@ -205,7 +205,7 @@ Python prerequisites.
205
205
  ```toml
206
206
  [dependencies]
207
207
  codingest = "0.2"
208
- kglite = "0.17.1"
208
+ kglite = "0.17.3"
209
209
  ```
210
210
 
211
211
  ```rust
@@ -277,7 +277,7 @@ diagnostic.
277
277
  ## Dependency policy
278
278
 
279
279
  `kglite` and `kglite-mcp-server` use matching crates.io requirements with a
280
- 0.17.1 minimum and a shared lockfile. This keeps the builder, persistence
280
+ 0.17.3 minimum and a shared lockfile. This keeps the builder, persistence
281
281
  handoff, and embedded MCP server on one compatible engine patch line.
282
282
 
283
283
  ## Parity with the (now-removed) in-tree component
@@ -165,7 +165,7 @@ codingest skill install # code-review Agent Skill
165
165
  ```
166
166
 
167
167
  The wheel bundles every grammar plus the `codingest` and `codingest-mcp`
168
- commands. KGLite ≥0.17.1 is installed automatically as the query/storage
168
+ commands. KGLite ≥0.17.3 is installed automatically as the query/storage
169
169
  engine; its MCP server and the transitive `mcp-methods` framework power the
170
170
  builder-aware Codingest server. Nothing else needs to be installed.
171
171
 
@@ -178,7 +178,7 @@ Python prerequisites.
178
178
  ```toml
179
179
  [dependencies]
180
180
  codingest = "0.2"
181
- kglite = "0.17.1"
181
+ kglite = "0.17.3"
182
182
  ```
183
183
 
184
184
  ```rust
@@ -250,7 +250,7 @@ diagnostic.
250
250
  ## Dependency policy
251
251
 
252
252
  `kglite` and `kglite-mcp-server` use matching crates.io requirements with a
253
- 0.17.1 minimum and a shared lockfile. This keeps the builder, persistence
253
+ 0.17.3 minimum and a shared lockfile. This keeps the builder, persistence
254
254
  handoff, and embedded MCP server on one compatible engine patch line.
255
255
 
256
256
  ## Parity with the (now-removed) in-tree component
@@ -10,7 +10,7 @@ keywords = ["knowledge-graph", "code-analysis", "tree-sitter", "cypher", "kglite
10
10
  categories = ["development-tools", "parser-implementations"]
11
11
 
12
12
  # Requires the kglite 0.15 engine API (`kglite::api::code_entities`); the
13
- # workspace pins the current engine floor (0.17.1).
13
+ # workspace pins the current engine floor (0.17.3).
14
14
 
15
15
  [lib]
16
16
  name = "codingest"
@@ -14,7 +14,7 @@ name = "codingest"
14
14
  path = "src/main.rs"
15
15
 
16
16
  [dependencies]
17
- codingest = { version = "0.2.17", path = "../codingest" }
17
+ codingest = { version = "0.2.19", path = "../codingest" }
18
18
  kglite = { workspace = true }
19
19
  anyhow = "1.0.104"
20
20
  clap = { version = "4.6.4", features = ["derive"] }
@@ -14,43 +14,60 @@ git diff, source reading, and literal-text search; it does not replace them.
14
14
  > `pip install codingest` provides both plus the builder-aware
15
15
  > `codingest-mcp` server. Rust-only environments can alternatively use Cargo.
16
16
 
17
- 1. Inspect the diff and repository guidance first. Identify changed symbols and
18
- the base/head revisions.
19
- 2. Build or refresh the graph without executing repository code:
20
-
21
- ```bash
22
- codingest build . --output .kglite/code-review.kgl --format json
23
- ```
24
-
25
- For a committed comparison, use one graph spanning both revisions:
26
-
27
- ```bash
28
- codingest build . --revs '<base>' '<head>' \
29
- --output .kglite/code-review.kgl --format json
30
- ```
31
-
32
- 3. Always discover the actual schema before writing Cypher:
33
-
34
- ```bash
35
- kglite describe .kglite/code-review.kgl --connections --cypher
36
- ```
37
-
38
- 4. Query the smallest structural question that can confirm or reject a review
39
- hypothesis. Use JSON for agent parsing:
40
-
41
- ```bash
42
- kglite query .kglite/code-review.kgl '<cypher>' --format json
43
- ```
44
-
45
- 5. Open every implicated file and verify the behavior at exact lines. Report
46
- only findings supported by source evidence. Do not infer runtime behavior
47
- from an edge alone.
48
-
49
- 6. Before reusing an artifact, check freshness:
50
-
51
- ```bash
52
- codingest status --output .kglite/code-review.kgl --format json
53
- ```
17
+ Inspect the diff and repository guidance first. Identify changed symbols and
18
+ the base/head revisions, then build or refresh the graph without executing
19
+ repository code:
20
+
21
+ ```bash
22
+ codingest build . --output .kglite/code-review.kgl --format json
23
+ ```
24
+
25
+ For a committed comparison, use one graph spanning both revisions:
26
+
27
+ ```bash
28
+ codingest build . --revs '<base>' '<head>' \
29
+ --output .kglite/code-review.kgl --format json
30
+ ```
31
+
32
+ Before reusing an artifact, check freshness:
33
+
34
+ ```bash
35
+ codingest status --output .kglite/code-review.kgl --format json
36
+ ```
37
+
38
+ ## Retrieve only what answers the question
39
+
40
+ Choose the narrowest route for the uncertainty in front of you; these are
41
+ alternatives, not a compulsory sequence. Reuse tool signatures already known
42
+ in the current session; if a needed tool is not visible, discover that tool
43
+ rather than loading a broad catalog.
44
+
45
+ - **Known symbol or location:** read it directly. With MCP, use
46
+ `read_code_source` for a qualified name or `read_source` for a path, applying
47
+ `start_line`, `end_line`, and `max_chars` when a full body or file is not
48
+ needed.
49
+ - **Exact structural question:** use `cypher_query`, or `kglite query` at the
50
+ CLI. Reuse a schema already observed for the same unchanged graph. Otherwise
51
+ inspect only the needed node or connection shape with `graph_overview` or
52
+ `kglite describe`; do not retrieve the whole schema by habit.
53
+ - **Broad explanation or unfamiliar subsystem:** use bounded `explore`, starting
54
+ with a short topic, a few `max_entities`, shallow `max_depth`, and
55
+ `include_source: false` unless bodies are needed. Narrow to selected symbols
56
+ before reading source.
57
+ - **Literal text:** use grep/ripgrep for error strings, comments, and config
58
+ keys, then open only the relevant matches.
59
+
60
+ Every additional read should resolve a concrete uncertainty needed for the
61
+ answer. Project only useful Cypher properties, return a few relevant candidates,
62
+ and exclude unrelated fixtures, generated code, vendors, or examples when the
63
+ question does not cover them. If output truncates, narrow the query or source
64
+ range instead of repeatedly increasing output. Reuse evidence already seen
65
+ unless its source or active graph changed.
66
+
67
+ Open implicated code at exact lines before claiming behavior; an edge alone is
68
+ not runtime proof. Stop when the requested conclusions are supported. Expand
69
+ only for a contradiction, missing evidence, or a correctness risk that could
70
+ change the answer.
54
71
 
55
72
  See [queries.md](references/queries.md) for query patterns,
56
73
  [public-repositories.md](references/public-repositories.md) for safe public-repo
@@ -88,7 +105,8 @@ prior question — what is eligible to be a finding at all.
88
105
 
89
106
  ## Honesty rules
90
107
 
91
- - Never invent labels, properties, or connection types: `describe()` first.
108
+ - Never invent labels, properties, or connection types. Discover an unfamiliar
109
+ shape before querying it; reuse a known shape while the graph is unchanged.
92
110
  - Treat unresolved or missing graph edges as absence of evidence, not proof.
93
111
  - Quote paths and revisions passed through the shell.
94
112
  - Never build, import, or execute code from a repository merely to review it.
@@ -18,3 +18,13 @@ For an existing cache, fetch only the explicit refs needed. The revision build
18
18
  uses `git archive` and never checks out or runs the repository. Do not silently
19
19
  switch a user's working checkout. Verify GitHub claims against the resolved
20
20
  commit and cite stable source links when reporting findings.
21
+
22
+ ## Keep repository investigations bounded
23
+
24
+ When using the open-source MCP, activate the requested repository and revision,
25
+ then follow the routing policy in the parent skill. Reuse tool signatures and
26
+ schema shapes already observed for the same active graph. If a tool or shape is
27
+ unknown, discover only that tool or the node/connection types needed for the
28
+ next query; broad tool catalogs and full schemas are not prerequisites. Start
29
+ from the named symbol or subsystem, and exclude fixtures, generated sources,
30
+ vendored trees, and examples unless they bear on the question.
@@ -1,7 +1,9 @@
1
1
  # Code-review query patterns
2
2
 
3
- Run `kglite describe <graph> --connections --cypher` first and adapt these
4
- patterns to the labels and properties it reports.
3
+ Adapt these patterns to the labels and properties already known for the active
4
+ graph. If the needed node or connection shape is unfamiliar, inspect that shape
5
+ with `graph_overview` or `kglite describe <graph> --connections --cypher` before
6
+ querying it.
5
7
 
6
8
  Find a symbol before asking about its relationships:
7
9
 
@@ -14,6 +14,6 @@ name = "codingest-mcp"
14
14
  path = "src/main.rs"
15
15
 
16
16
  [dependencies]
17
- codingest = { version = "0.2.17", path = "../codingest" }
17
+ codingest = { version = "0.2.19", path = "../codingest" }
18
18
  kglite-mcp-server = { workspace = true }
19
19
  anyhow = "1.0.104"
@@ -42,7 +42,7 @@ doctest = false
42
42
  pyo3 = { version = "0.29" }
43
43
  # The engine-free builder (parsers, call/type/route edges, rev merge, repo
44
44
  # clone, manifest reader). Docs pass gated by this crate's `docs` feature.
45
- codingest = { version = "0.2.17", path = "../codingest", default-features = false }
45
+ codingest = { version = "0.2.19", path = "../codingest", default-features = false }
46
46
  # `.kgl` persistence (`kglite::api::io::save_graph`) for the serialize half of
47
47
  # the build-then-load handoff, plus the `DirGraph` type the builder returns.
48
48
  kglite = { workspace = true }
@@ -53,9 +53,9 @@ tempfile = "3.27.0"
53
53
  # through `_run_cli`, so `pip install codingest` also installs the `codingest`
54
54
  # command without a second wheel or a duplicated builder build. Mirrors
55
55
  # kglite-py's `kglite-cli` bundling.
56
- codingest-cli = { version = "0.2.17", path = "../codingest-cli" }
56
+ codingest-cli = { version = "0.2.19", path = "../codingest-cli" }
57
57
  # Source-building MCP composition. The graph server and generic MCP lifecycle
58
58
  # remain owned by its existing kglite-mcp-server -> mcp-methods Rust dependency
59
59
  # chain; linking this thin library into the extension gives pip users the same
60
60
  # builder-aware server as the standalone `codingest-mcp` binary.
61
- codingest-mcp = { version = "0.2.17", path = "../codingest-mcp" }
61
+ codingest-mcp = { version = "0.2.19", path = "../codingest-mcp" }
@@ -74,7 +74,7 @@ fn load_via_kglite(py: Python<'_>, path: &Path) -> PyResult<Py<PyAny>> {
74
74
  PyRuntimeError::new_err(format!(
75
75
  "codingest.build() returns a kglite.KnowledgeGraph, but importing \
76
76
  `kglite` failed ({e}). Install it: `pip install \
77
- 'kglite>=0.17.1,<0.18'`."
77
+ 'kglite>=0.17.3,<0.18'`."
78
78
  ))
79
79
  })?;
80
80
  let graph = kglite.call_method1("load", (path.to_string_lossy().as_ref(),))?;
@@ -42,9 +42,9 @@ dynamic = ["version"]
42
42
  # minor releases (e.g. the v3->v4 break, which refuses old files outright), so
43
43
  # pip must never be free to pair our writer with a reader from a different
44
44
  # minor. This range therefore mirrors the Cargo semver range for the pin above
45
- # (`version = "0.17.1"` == `>=0.17.1,<0.18.0`) exactly — bump both together.
45
+ # (`version = "0.17.3"` == `>=0.17.3,<0.18.0`) exactly — bump both together.
46
46
  dependencies = [
47
- "kglite>=0.17.1,<0.18",
47
+ "kglite>=0.17.3,<0.18",
48
48
  ]
49
49
 
50
50
  [project.urls]
File without changes
File without changes