codingest 0.2.13__tar.gz → 0.2.15__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.13 → codingest-0.2.15}/Cargo.lock +15 -21
  2. {codingest-0.2.13 → codingest-0.2.15}/Cargo.toml +62 -5
  3. {codingest-0.2.13 → codingest-0.2.15}/PKG-INFO +5 -5
  4. {codingest-0.2.13 → codingest-0.2.15}/README.md +3 -3
  5. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/Cargo.toml +1 -1
  6. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-cli/Cargo.toml +1 -1
  7. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-cli/src/code_tree_cli.rs +7 -1
  8. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-mcp/Cargo.toml +1 -1
  9. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-py/Cargo.toml +3 -3
  10. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-py/src/lib.rs +1 -1
  11. {codingest-0.2.13 → codingest-0.2.15}/pyproject.toml +2 -2
  12. {codingest-0.2.13 → codingest-0.2.15}/LICENSE +0 -0
  13. {codingest-0.2.13 → codingest-0.2.15}/codingest/__init__.py +0 -0
  14. {codingest-0.2.13 → codingest-0.2.15}/codingest/__init__.pyi +0 -0
  15. {codingest-0.2.13 → codingest-0.2.15}/codingest/cli.py +0 -0
  16. {codingest-0.2.13 → codingest-0.2.15}/codingest/mcp_server.py +0 -0
  17. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/bin/codingest_bench.rs +0 -0
  18. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/bin/codingest_stats.rs +0 -0
  19. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/builder/call_edges.rs +0 -0
  20. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/builder/js_workspace.rs +0 -0
  21. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/builder/load/edge_frames.rs +0 -0
  22. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/builder/load/entity_frames.rs +0 -0
  23. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/builder/load.rs +0 -0
  24. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/builder/mod.rs +0 -0
  25. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/builder/other_edges.rs +0 -0
  26. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/builder/routes/django.rs +0 -0
  27. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/builder/routes/fastapi.rs +0 -0
  28. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/builder/routes/flask.rs +0 -0
  29. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/builder/routes/mod.rs +0 -0
  30. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/builder/semantic_edges.rs +0 -0
  31. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/builder/type_edges.rs +0 -0
  32. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/cross_lang.rs +0 -0
  33. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/docs/mod.rs +0 -0
  34. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/docs/rst.rs +0 -0
  35. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/lib.rs +0 -0
  36. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/manifest/mod.rs +0 -0
  37. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/models.rs +0 -0
  38. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/agc.rs +0 -0
  39. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/cpp.rs +0 -0
  40. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/csharp.rs +0 -0
  41. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/css.rs +0 -0
  42. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/dart.rs +0 -0
  43. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/go.rs +0 -0
  44. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/html.rs +0 -0
  45. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/java.rs +0 -0
  46. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/julia.rs +0 -0
  47. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/mod.rs +0 -0
  48. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/php.rs +0 -0
  49. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/python.rs +0 -0
  50. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/r.rs +0 -0
  51. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/registry.rs +0 -0
  52. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/rust_lang.rs +0 -0
  53. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/shared.rs +0 -0
  54. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/swift.rs +0 -0
  55. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/parsers/typescript.rs +0 -0
  56. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/repo.rs +0 -0
  57. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/src/rev.rs +0 -0
  58. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/agc_apollo.rs +0 -0
  59. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/README.md +0 -0
  60. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/agc_basic.sha256 +0 -0
  61. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/cpp_extern_c.sha256 +0 -0
  62. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/cpp_include.sha256 +0 -0
  63. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/cross_ts_py.sha256 +0 -0
  64. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/csharp_using_alias.sha256 +0 -0
  65. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/dart_import.sha256 +0 -0
  66. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/dart_part_of.sha256 +0 -0
  67. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/docs_ext_collide.sha256 +0 -0
  68. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/docs_mdx.sha256 +0 -0
  69. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/dup_minified_assets.sha256 +0 -0
  70. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/go_interface.sha256 +0 -0
  71. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/html_js_lang_group.sha256 +0 -0
  72. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/java_javadoc.sha256 +0 -0
  73. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/julia_basic.sha256 +0 -0
  74. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/php_group_use.sha256 +0 -0
  75. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/py_basic.sha256 +0 -0
  76. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/py_import.sha256 +0 -0
  77. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/py_inheritance.sha256 +0 -0
  78. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/py_nested_defs.sha256 +0 -0
  79. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/py_routes_dup.sha256 +0 -0
  80. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/py_src_layout.sha256 +0 -0
  81. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/r_basic.sha256 +0 -0
  82. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/rust_import.sha256 +0 -0
  83. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/rust_inline_mod.sha256 +0 -0
  84. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/rust_xfile.sha256 +0 -0
  85. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/swift_basic.sha256 +0 -0
  86. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/ts_callback.sha256 +0 -0
  87. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/ts_closure_scope.sha256 +0 -0
  88. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/ts_hof_binding.sha256 +0 -0
  89. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/ts_monorepo.sha256 +0 -0
  90. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/goldens/web_served_root.sha256 +0 -0
  91. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/grammar_kinds.rs +0 -0
  92. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/parity.rs +0 -0
  93. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest/tests/traversal_semantics.rs +0 -0
  94. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-cli/skills/codingest-code-review/SKILL.md +0 -0
  95. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-cli/skills/codingest-code-review/references/mcp-upgrade.md +0 -0
  96. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-cli/skills/codingest-code-review/references/public-repositories.md +0 -0
  97. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-cli/skills/codingest-code-review/references/queries.md +0 -0
  98. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-cli/src/lib.rs +0 -0
  99. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-cli/src/main.rs +0 -0
  100. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-cli/src/query.rs +0 -0
  101. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-cli/src/skill.rs +0 -0
  102. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-cli/src/skill_assets.rs +0 -0
  103. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-cli/tests/exit_codes.rs +0 -0
  104. {codingest-0.2.13 → codingest-0.2.15}/crates/codingest-mcp/src/lib.rs +0 -0
  105. {codingest-0.2.13 → codingest-0.2.15}/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.13"
305
+ version = "0.2.15"
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.13"
341
+ version = "0.2.15"
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.13"
353
+ version = "0.2.15"
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.13"
362
+ version = "0.2.15"
363
363
  dependencies = [
364
364
  "codingest",
365
365
  "codingest-cli",
@@ -959,26 +959,20 @@ dependencies = [
959
959
 
960
960
  [[package]]
961
961
  name = "hashbrown"
962
- version = "0.16.1"
962
+ version = "0.17.1"
963
963
  source = "registry+https://github.com/rust-lang/crates.io-index"
964
- checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
964
+ checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
965
965
  dependencies = [
966
966
  "foldhash 0.2.0",
967
967
  ]
968
968
 
969
- [[package]]
970
- name = "hashbrown"
971
- version = "0.17.1"
972
- source = "registry+https://github.com/rust-lang/crates.io-index"
973
- checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a"
974
-
975
969
  [[package]]
976
970
  name = "hashlink"
977
- version = "0.11.1"
971
+ version = "0.12.1"
978
972
  source = "registry+https://github.com/rust-lang/crates.io-index"
979
- checksum = "824e001ac4f3012dd16a264bec811403a67ca9deb6c102fc5049b32c4574b35f"
973
+ checksum = "32069d97bb81e38fa67eab65e3393bf804bb85969f2bc06bf13f64aef5aba248"
980
974
  dependencies = [
981
- "hashbrown 0.16.1",
975
+ "hashbrown 0.17.1",
982
976
  ]
983
977
 
984
978
  [[package]]
@@ -1372,9 +1366,9 @@ dependencies = [
1372
1366
 
1373
1367
  [[package]]
1374
1368
  name = "kglite"
1375
- version = "0.16.18"
1369
+ version = "0.16.20"
1376
1370
  source = "registry+https://github.com/rust-lang/crates.io-index"
1377
- checksum = "3189d864d1d6b31c214dd15f2a300c2d067fa6a008140a71aea10b8846513ae4"
1371
+ checksum = "994cc3d33bc74e6eb248eeb93c33c3b64ed70a6d587798ad22849d91fc49c447"
1378
1372
  dependencies = [
1379
1373
  "bzip2",
1380
1374
  "chrono",
@@ -1408,9 +1402,9 @@ dependencies = [
1408
1402
 
1409
1403
  [[package]]
1410
1404
  name = "kglite-mcp-server"
1411
- version = "0.16.18"
1405
+ version = "0.16.20"
1412
1406
  source = "registry+https://github.com/rust-lang/crates.io-index"
1413
- checksum = "1e8fa20ca384ec23de4ad7f6fa554ee87390e8ae67abfc4543989a4bc9f71cbe"
1407
+ checksum = "9e8daafc887ec2144e987e7dc9f034c674df8460fd6a5eb4cad22d406e473952"
1414
1408
  dependencies = [
1415
1409
  "anyhow",
1416
1410
  "bytes",
@@ -3229,9 +3223,9 @@ checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4"
3229
3223
 
3230
3224
  [[package]]
3231
3225
  name = "yaml-rust2"
3232
- version = "0.11.0"
3226
+ version = "0.12.0"
3233
3227
  source = "registry+https://github.com/rust-lang/crates.io-index"
3234
- checksum = "631a50d867fafb7093e709d75aaee9e0e0d5deb934021fcea25ac2fe09edc51e"
3228
+ checksum = "c6edb26322e610d4f04b7cd34478317685d24d0999437e551fb97c5441151041"
3235
3229
  dependencies = [
3236
3230
  "arraydeque",
3237
3231
  "encoding_rs",
@@ -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.13"
6
+ version = "0.2.15"
7
7
  edition = "2021"
8
8
  rust-version = "1.88"
9
9
  license = "MIT"
@@ -12,8 +12,65 @@ 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.16.18
16
- # floor is an MCP-server robustness release — every change lives in
15
+ # kglite engine + MCP server — imported as crates.io libraries. The 0.16.20
16
+ # floor renames the MCP identity counter and makes a clean save a no-op.
17
+ # Where it lands for us:
18
+ # * kglite-mcp-server (embedded unchanged via codingest-mcp's
19
+ # run_with_extensions): the `<active_graph>` header and the
20
+ # `— active graph:` footer now say `load="N"` / `· load N ·` instead of
21
+ # `generation`, and gain a preceding `file_saved="<T>"` / `· file saved
22
+ # <T>` field — the served path's publish time, omitted for a workspace
23
+ # graph, which is every `--watch` / `set_root_dir` server. `reload_graph`
24
+ # says "Load N on this server." codingest parses none of that text
25
+ # (`git grep -n 'generation=\"\|· generation'` is empty here), so the
26
+ # rename reaches our users only as changed server output. A write-enabled
27
+ # server's `save_graph` is now a no-op ("Nothing to save: …") unless a
28
+ # boot-time manifest ontology is unpersisted or `force: true` is passed —
29
+ # codingest ships no manifest and declares no ontology, so the affected
30
+ # path is one an operator reaches by hand. `extensions.writable: true` is
31
+ # now equivalent to `--writable`; `builtins.save_graph: true` alone
32
+ # registers only `save_graph` and leaves `cypher_query` read-only (that
33
+ # was always true — 0.2.14's CHANGELOG entry here repeated the upstream
34
+ # docs' error and said it enabled writes). Unknown `extensions.*` keys
35
+ # warn at boot; every read on a `--writable` server now carries the
36
+ # identity footer it was missing.
37
+ # * kglite core: additive only. `kglite::api::io::GraphFileIdentity` gains
38
+ # `modified()`; a released `GraphWriterLease` appends `released=<time>`
39
+ # to `<path>.lock-owner`. codingest names neither type and reads no
40
+ # `.lock-owner`. `save_graph` / `write_kgl` / `prepare_kgl_write` — every
41
+ # persistence entry we call — are byte-identical, and the goldens prove
42
+ # it. The optional `fastembed` backend moved 5 -> 6; codingest enables no
43
+ # kglite features (`default-features = false`), so it is not in our tree.
44
+ # It sits on the 0.16.19
45
+ # floor, the lazy-writer-lease + automatic-refresh release. Where that landed
46
+ # for us:
47
+ # * kglite-mcp-server (embedded unchanged via codingest-mcp's
48
+ # run_with_extensions): a write-enabled server now takes the served
49
+ # `.kgl`'s writer lease at its first unsaved change instead of at boot,
50
+ # so several clients can boot off one manifest; a `--graph` server
51
+ # stats the file per call and re-reads it when its identity moved, so a
52
+ # `codingest build` that replaces the artifact reaches the server on
53
+ # the next tool call with no `reload_graph`; `extensions.graph_watch` is
54
+ # retired (a boolean only logs a warning — codingest ships no manifest
55
+ # naming it); `save_graph` refuses to overwrite a file changed on disk;
56
+ # `reload_graph` gains `discard_unsaved`; `--lease-label` /
57
+ # `KGLITE_LEASE_LABEL` name the holder. Our workspace-graph hooks
58
+ # (`build` / `is_relevant`) are untouched — the `--watch` path compiles
59
+ # and behaves as before.
60
+ # * kglite core: additive only. `kglite::api::io::WriteOwnership` (+
61
+ # `BeginWrite`, `Discarded`, `WriteRefusal`), `GraphWriterLease::
62
+ # acquire_labeled`, and `kglite::api::make_dir_graph_mut_preserving_
63
+ # lineage` are new; `LeaseHolder` gains a `label` field (a struct-literal
64
+ # break codingest cannot hit — it never constructs one, never names
65
+ # `GraphWriterLease`). `save_graph` / `write_kgl` / `prepare_kgl_write`
66
+ # — every persistence entry we call — are byte-identical, and the goldens
67
+ # prove it. The one code change on our side ADOPTS the new accessor:
68
+ # codingest-cli's working-tree `set_instructions` is a configuration
69
+ # write, exactly the case the accessor was published for, and on a
70
+ # uniquely owned freshly built graph it is the same bytes as the
71
+ # `Arc::make_mut` it replaces.
72
+ # It sits on the 0.16.18
73
+ # floor, an MCP-server robustness release — every change lives in
17
74
  # kglite-mcp-server boot/extension handling, none in the engine:
18
75
  # * `extensions.csv_http_server` with no `port:` (or `port: 0`) binds an
19
76
  # OS-assigned port again (restores pre-rewrite behaviour; explicit
@@ -331,8 +388,8 @@ sha2 = "0.11"
331
388
  # and no disk storage. Neither 0.15.7 nor 0.15.8 changes the `kglite::api` we
332
389
  # call, graph output, property encoding, or `.kgl` serialization.
333
390
  # Keep both libraries aligned so the graph and server share one engine release.
334
- kglite = { version = "0.16.18", default-features = false }
335
- kglite-mcp-server = { version = "0.16.18", default-features = false }
391
+ kglite = { version = "0.16.20", default-features = false }
392
+ kglite-mcp-server = { version = "0.16.20", default-features = false }
336
393
 
337
394
  # Dependency debuginfo capped at line tables (kglite coordination, 2026-08-31,
338
395
  # 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.13
3
+ Version: 0.2.15
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.16.18,<0.17
15
+ Requires-Dist: kglite>=0.16.20,<0.17
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.16.18 is installed automatically as the query/storage
195
+ commands. KGLite ≥0.16.20 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.16.18"
208
+ kglite = "0.16.20"
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.16.18 minimum and a shared lockfile. This keeps the builder, persistence
280
+ 0.16.20 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.16.18 is installed automatically as the query/storage
168
+ commands. KGLite ≥0.16.20 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.16.18"
181
+ kglite = "0.16.20"
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.16.18 minimum and a shared lockfile. This keeps the builder, persistence
253
+ 0.16.20 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.16.18).
13
+ # workspace pins the current engine floor (0.16.20).
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.13", path = "../codingest" }
17
+ codingest = { version = "0.2.15", path = "../codingest" }
18
18
  kglite = { workspace = true }
19
19
  anyhow = "1.0.104"
20
20
  clap = { version = "4.6.4", features = ["derive"] }
@@ -210,7 +210,13 @@ fn construct_graph(args: &BuildArgs, plan: &BuildPlan) -> Result<Arc<DirGraph>>
210
210
  "Code graph built from the current working tree at {}. Refresh the artifact after source changes and verify review findings against exact source lines.",
211
211
  plan.source.display()
212
212
  );
213
- Arc::make_mut(&mut graph).set_instructions(&instructions, None);
213
+ // A configuration write, not a semantic mutation: kglite 0.16.19's
214
+ // lineage-preserving accessor is the published route for exactly this
215
+ // (it neither bumps the graph version nor forfeits disk writer
216
+ // authority on a shared snapshot). On the uniquely owned graph a fresh
217
+ // build hands us it is byte-for-byte the `Arc::make_mut` it replaces.
218
+ kglite::api::make_dir_graph_mut_preserving_lineage(&mut graph)
219
+ .set_instructions(&instructions, None);
214
220
  }
215
221
  Ok(graph)
216
222
  }
@@ -14,6 +14,6 @@ name = "codingest-mcp"
14
14
  path = "src/main.rs"
15
15
 
16
16
  [dependencies]
17
- codingest = { version = "0.2.13", path = "../codingest" }
17
+ codingest = { version = "0.2.15", 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.13", path = "../codingest", default-features = false }
45
+ codingest = { version = "0.2.15", 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.13", path = "../codingest-cli" }
56
+ codingest-cli = { version = "0.2.15", 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.13", path = "../codingest-mcp" }
61
+ codingest-mcp = { version = "0.2.15", 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.16.18,<0.17'`."
77
+ 'kglite>=0.16.20,<0.17'`."
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.16.18"` == `>=0.16.18,<0.17.0`) exactly — bump both together.
45
+ # (`version = "0.16.20"` == `>=0.16.20,<0.17.0`) exactly — bump both together.
46
46
  dependencies = [
47
- "kglite>=0.16.18,<0.17",
47
+ "kglite>=0.16.20,<0.17",
48
48
  ]
49
49
 
50
50
  [project.urls]
File without changes
File without changes