graphforge 0.5.0__tar.gz → 0.5.2__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.

Potentially problematic release.


This version of graphforge might be problematic. Click here for more details.

Files changed (442) hide show
  1. {graphforge-0.5.0 → graphforge-0.5.2}/Cargo.lock +17 -17
  2. {graphforge-0.5.0 → graphforge-0.5.2}/Cargo.toml +1 -1
  3. graphforge-0.5.2/PKG-INFO +74 -0
  4. graphforge-0.5.2/README.md +48 -0
  5. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/Cargo.toml +10 -10
  6. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/algorithm_runs.rs +97 -1
  7. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/belief_projection.rs +230 -1
  8. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/bulk_construction.rs +996 -134
  9. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/canonical_arrow.rs +177 -0
  10. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/checkpoints.rs +795 -62
  11. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/composite_publish.rs +293 -0
  12. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/composite_transaction.rs +49 -0
  13. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/concurrency_test_support.rs +37 -0
  14. graphforge-0.5.2/crates/graphforge-api/src/graph_inspection.rs +363 -0
  15. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/hypotheses.rs +103 -39
  16. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/invocation_descriptor.rs +243 -0
  17. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/knowledge.rs +640 -16
  18. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/lib.rs +734 -58
  19. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/provider_embedding_execution.rs +286 -0
  20. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/provider_find.rs +103 -0
  21. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/provider_rerank.rs +54 -0
  22. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/provider_session.rs +58 -0
  23. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/repository.rs +715 -1
  24. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/valid_time.rs +31 -0
  25. graphforge-0.5.2/crates/graphforge-api/tests/bdd/api_steps.rs +1787 -0
  26. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/bdd/main.rs +41 -7
  27. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/bdd/timing.rs +2 -2
  28. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/bdd_timing.rs +5 -4
  29. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/public_facade_remaining_conformance.rs +15 -27
  30. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ast/Cargo.toml +1 -1
  31. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ast/src/tests.rs +109 -0
  32. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/Cargo.toml +2 -2
  33. graphforge-0.5.2/crates/graphforge-bindings-py/README.md +48 -0
  34. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/src/lib.rs +3 -39
  35. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/bulk_construction.py +2 -0
  36. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/composite_transaction.py +141 -0
  37. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/non_cypher_release.py +57 -34
  38. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/smoke.py +25 -26
  39. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cli/Cargo.toml +1 -1
  40. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cli/src/lib.rs +591 -0
  41. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-core/src/algorithms.rs +28 -0
  42. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-core/src/canonical.rs +167 -0
  43. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-core/src/embedding_options.rs +60 -0
  44. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-core/src/lib.rs +152 -0
  45. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-core/src/manifest.rs +11 -0
  46. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-core/src/uuid.rs +9 -0
  47. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cypher/Cargo.toml +4 -4
  48. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cypher/src/parser/clauses.rs +64 -0
  49. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cypher/src/parser/expr.rs +80 -0
  50. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cypher/src/parser/patterns.rs +64 -0
  51. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/Cargo.toml +6 -6
  52. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze.rs +345 -1
  53. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_graph.rs +314 -0
  54. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_matching_state.rs +49 -0
  55. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_output.rs +141 -0
  56. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths.rs +177 -0
  57. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/demand.rs +267 -0
  58. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/lib.rs +1952 -6
  59. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/write_driver.rs +760 -52
  60. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/Cargo.toml +3 -3
  61. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/src/binder.rs +684 -0
  62. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-knowledge/Cargo.toml +1 -1
  63. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-knowledge/src/belief_projection.rs +80 -0
  64. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-knowledge/src/hypothesis.rs +154 -0
  65. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-knowledge/src/lib.rs +346 -0
  66. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-knowledge/src/reasoning.rs +24 -0
  67. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-knowledge/src/status.rs +17 -0
  68. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/Cargo.toml +1 -1
  69. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/src/error.rs +37 -0
  70. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/src/handle.rs +32 -1
  71. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/src/migration.rs +111 -0
  72. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-plan/Cargo.toml +2 -2
  73. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-plan/src/lib.rs +267 -0
  74. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-provenance/Cargo.toml +1 -1
  75. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-provenance/src/lib.rs +128 -0
  76. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/Cargo.toml +5 -5
  77. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/src/expr.rs +2779 -303
  78. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/src/lowerer.rs +1155 -116
  79. graphforge-0.5.2/crates/graphforge-rel/tests/expression_lowering_matrix.rs +102 -0
  80. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/Cargo.toml +1 -1
  81. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/embedding_scheduler.rs +28 -0
  82. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/embedding_source.rs +78 -0
  83. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/lifecycle.rs +333 -0
  84. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/provider_batching.rs +60 -0
  85. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/provider_execution.rs +68 -0
  86. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/provider_openrouter.rs +148 -0
  87. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/provider_publication.rs +23 -0
  88. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/provider_reranking.rs +28 -0
  89. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/provider_response.rs +82 -0
  90. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/source.rs +180 -0
  91. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/text_index.rs +303 -0
  92. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/vector_lifecycle.rs +17 -0
  93. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/Cargo.toml +3 -3
  94. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/adjacency.rs +200 -0
  95. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/catalog.rs +256 -1
  96. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/embedding_catalog.rs +133 -0
  97. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/embedding_discovery.rs +73 -0
  98. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/embedding_identity.rs +54 -0
  99. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/embedding_mutations.rs +25 -1
  100. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/embedding_publication.rs +645 -0
  101. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/embedding_refresh_config.rs +328 -0
  102. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/graph_projection.rs +651 -4
  103. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/project_checkpoints.rs +508 -14
  104. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/project_generation.rs +291 -0
  105. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/project_portable.rs +396 -0
  106. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/project_publication.rs +667 -9
  107. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/search_publication.rs +196 -0
  108. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/vector_store.rs +258 -0
  109. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/writer.rs +339 -1
  110. {graphforge-0.5.0 → graphforge-0.5.2}/pyproject.toml +1 -1
  111. {graphforge-0.5.0 → graphforge-0.5.2}/python/graphforge/_graphforge_rs.pyi +0 -3
  112. graphforge-0.5.0/PKG-INFO +0 -80
  113. graphforge-0.5.0/README.md +0 -54
  114. graphforge-0.5.0/crates/graphforge-api/tests/bdd/api_steps.rs +0 -1270
  115. graphforge-0.5.0/crates/graphforge-bindings-py/README.md +0 -54
  116. {graphforge-0.5.0 → graphforge-0.5.2}/LICENSE +0 -0
  117. {graphforge-0.5.0 → graphforge-0.5.2}/NOTICE +0 -0
  118. {graphforge-0.5.0 → graphforge-0.5.2}/THIRD_PARTY_NOTICES.md +0 -0
  119. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/LICENSE +0 -0
  120. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/NOTICE +0 -0
  121. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/examples/atomic_recovery_workflow.rs +0 -0
  122. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/examples/correction_churn_workflow.rs +0 -0
  123. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/examples/cyber_intrusion_workflow.rs +0 -0
  124. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/examples/derived_state_freshness_workflow.rs +0 -0
  125. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/examples/finance_fraud_workflow.rs +0 -0
  126. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/examples/knowledge_evolution_workflow.rs +0 -0
  127. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/examples/ontology_emergence_strict_handoff.rs +0 -0
  128. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/examples/probate_genealogy_workflow.rs +0 -0
  129. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/examples/release_load_probe.rs +0 -0
  130. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/examples/sna_intelligence_workflow.rs +0 -0
  131. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/examples/strict_add_node_fixture.rs +0 -0
  132. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/adjacency_rebuild_barrier.rs +0 -0
  133. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/algorithm_writeback.rs +0 -0
  134. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/capabilities.rs +0 -0
  135. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/checkpoint_graph_diff.rs +0 -0
  136. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/composite_receipt.rs +0 -0
  137. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/composite_recovery_tests.rs +0 -0
  138. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/composite_validation.rs +0 -0
  139. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/construction.rs +0 -0
  140. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/embedding_freshness.rs +0 -0
  141. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/embedding_publication.rs +0 -0
  142. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/embedding_refresh.rs +0 -0
  143. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/embedding_spaces.rs +0 -0
  144. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/epistemic_snapshot.rs +0 -0
  145. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/find_execution.rs +0 -0
  146. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/graph_snapshot.rs +0 -0
  147. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/m18_embedding_publication.rs +0 -0
  148. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/multi_process_publication_tests.rs +0 -0
  149. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/node_selector.rs +0 -0
  150. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/ontology_lifecycle.rs +0 -0
  151. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/paging.rs +0 -0
  152. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/portable.rs +0 -0
  153. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/provenance.rs +0 -0
  154. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/provider_embedding.rs +0 -0
  155. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/same_process_concurrency_tests.rs +0 -0
  156. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/schema_inventory.rs +0 -0
  157. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/search_find.rs +0 -0
  158. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/search_index.rs +0 -0
  159. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/search_output.rs +0 -0
  160. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/shared_directory_semantics_tests.rs +0 -0
  161. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/stream_cancellation_isolation_tests.rs +0 -0
  162. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/workspace_ontology.rs +0 -0
  163. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/src/write_modes.rs +0 -0
  164. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/bdd/fixture.rs +0 -0
  165. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/bdd/tck_steps.rs +0 -0
  166. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/belief_subject_contract.rs +0 -0
  167. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/bind_error_spans.rs +0 -0
  168. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/clear.rs +0 -0
  169. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/conductance.rs +0 -0
  170. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/create_scaling.rs +0 -0
  171. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/e2e_baseline.rs +0 -0
  172. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/existential_subquery.rs +0 -0
  173. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/facade_methods.rs +0 -0
  174. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/fixed_hop_limit.rs +0 -0
  175. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/graph_internal_metadata.rs +0 -0
  176. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/inference_provenance.rs +0 -0
  177. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/knowledge_isolation.rs +0 -0
  178. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/list_semantics.rs +0 -0
  179. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/m22_m18_public_surface.rs +0 -0
  180. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/m22_m19_public_surface.rs +0 -0
  181. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/m22_provider_public_surface.rs +0 -0
  182. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/max_bipartite_matching.rs +0 -0
  183. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/max_cardinality_matching.rs +0 -0
  184. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/max_weight_matching.rs +0 -0
  185. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/minimum_k_spanning_tree.rs +0 -0
  186. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/modularity.rs +0 -0
  187. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/multi_label_scaling.rs +0 -0
  188. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/pattern_comprehension.rs +0 -0
  189. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/percentile_aggregates.rs +0 -0
  190. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/provider_session.rs +0 -0
  191. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/public_lifecycle_conformance.rs +0 -0
  192. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/release_load_construction.rs +0 -0
  193. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/strict_runtime_properties.rs +0 -0
  194. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/support/project_fixture.rs +0 -0
  195. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/value_access_semantics.rs +0 -0
  196. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/value_semantics.rs +0 -0
  197. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/with_aggregation.rs +0 -0
  198. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-api/tests/xor_scaling.rs +0 -0
  199. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ast/LICENSE +0 -0
  200. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ast/NOTICE +0 -0
  201. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ast/src/ast.rs +0 -0
  202. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ast/src/lib.rs +0 -0
  203. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ast/src/parse_error.rs +0 -0
  204. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ast/src/token.rs +0 -0
  205. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/LICENSE +0 -0
  206. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/NOTICE +0 -0
  207. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/THIRD_PARTY_NOTICES.md +0 -0
  208. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/src/composite.rs +0 -0
  209. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/caller_embeddings.py +0 -0
  210. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/checkpoints.py +0 -0
  211. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/cli_entrypoint.py +0 -0
  212. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/cli_lifecycle.py +0 -0
  213. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/cli_smoke.py +0 -0
  214. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/concurrency_parity.py +0 -0
  215. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/embedding_options.py +0 -0
  216. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/embedding_refresh.py +0 -0
  217. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/embedding_space_deletion.py +0 -0
  218. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/embedding_spaces.py +0 -0
  219. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/gil_release.py +0 -0
  220. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/gomory_hu.py +0 -0
  221. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/m18_embedding_publication.py +0 -0
  222. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/ontology_lifecycle.py +0 -0
  223. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/project_skills.py +0 -0
  224. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/provider_workflow.py +0 -0
  225. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/search_index.py +0 -0
  226. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/steiner.py +0 -0
  227. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/strict_add_node.py +0 -0
  228. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/stub_surface.py +0 -0
  229. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-bindings-py/tests/test_invocation_descriptor.py +0 -0
  230. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cli/LICENSE +0 -0
  231. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cli/NOTICE +0 -0
  232. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cli/THIRD_PARTY_NOTICES.md +0 -0
  233. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cli/build.rs +0 -0
  234. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cli/src/main.rs +0 -0
  235. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cli/tests/checkpoints.rs +0 -0
  236. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cli/tests/portable.rs +0 -0
  237. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cli/tests/repository.rs +0 -0
  238. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-core/Cargo.toml +0 -0
  239. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-core/LICENSE +0 -0
  240. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-core/NOTICE +0 -0
  241. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cypher/LICENSE +0 -0
  242. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cypher/NOTICE +0 -0
  243. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cypher/src/lexer.rs +0 -0
  244. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cypher/src/lib.rs +0 -0
  245. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cypher/src/parser/mod.rs +0 -0
  246. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cypher/tests/corpus/valid.json +0 -0
  247. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-cypher/tests/corpus.rs +0 -0
  248. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/LICENSE +0 -0
  249. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/NOTICE +0 -0
  250. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/adjacency.rs +0 -0
  251. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_automorphism.rs +0 -0
  252. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_automorphism_count.rs +0 -0
  253. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_bipartite.rs +0 -0
  254. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_bipartite_matching.rs +0 -0
  255. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_chromatic_number.rs +0 -0
  256. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_conductance.rs +0 -0
  257. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_dag_longest_path.rs +0 -0
  258. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_dag_longest_path_weighted.rs +0 -0
  259. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_dag_topology.rs +0 -0
  260. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_dyad_census.rs +0 -0
  261. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_edge_coloring.rs +0 -0
  262. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_euler.rs +0 -0
  263. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_find_cycles.rs +0 -0
  264. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_has_euler_circuit.rs +0 -0
  265. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_has_euler_path.rs +0 -0
  266. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_is_planar.rs +0 -0
  267. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_k1_coloring.rs +0 -0
  268. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_lowlink.rs +0 -0
  269. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_max_cardinality_matching.rs +0 -0
  270. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_minimum_k_spanning_tree.rs +0 -0
  271. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_minimum_spanning_forest.rs +0 -0
  272. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_modularity.rs +0 -0
  273. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_node_coloring.rs +0 -0
  274. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_transitivity.rs +0 -0
  275. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_triad_census.rs +0 -0
  276. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_analyze_triangle_count.rs +0 -0
  277. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_cluster.rs +0 -0
  278. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_cluster_biconnected.rs +0 -0
  279. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_cluster_hdbscan.rs +0 -0
  280. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_cluster_kmeans.rs +0 -0
  281. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_cluster_max_cut.rs +0 -0
  282. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_cluster_scc.rs +0 -0
  283. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_cluster_spectral.rs +0 -0
  284. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_cluster_spinglass.rs +0 -0
  285. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_cluster_walktrap.rs +0 -0
  286. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_dispatch.rs +0 -0
  287. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_embedding_control.rs +0 -0
  288. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_embedding_fastrp.rs +0 -0
  289. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_embedding_graphsage.rs +0 -0
  290. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_embedding_hashgnn.rs +0 -0
  291. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_embedding_invocation.rs +0 -0
  292. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_embedding_node2vec.rs +0 -0
  293. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_embedding_options.rs +0 -0
  294. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_embedding_output.rs +0 -0
  295. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_embedding_rng.rs +0 -0
  296. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_k_core.rs +0 -0
  297. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_matching_blossom.rs +0 -0
  298. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_neighbors.rs +0 -0
  299. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_partition.rs +0 -0
  300. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_astar.rs +0 -0
  301. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_bellman_ford.rs +0 -0
  302. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_delta_stepping.rs +0 -0
  303. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_dfs.rs +0 -0
  304. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_dijkstra.rs +0 -0
  305. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_floyd_warshall.rs +0 -0
  306. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_gomory_hu.rs +0 -0
  307. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_max_flow.rs +0 -0
  308. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_min_cost_flow.rs +0 -0
  309. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_min_cut.rs +0 -0
  310. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_min_steiner.rs +0 -0
  311. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_prize_steiner.rs +0 -0
  312. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_random_walk.rs +0 -0
  313. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_steiner.rs +0 -0
  314. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_transitive_closure.rs +0 -0
  315. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_paths_yens.rs +0 -0
  316. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_rank.rs +0 -0
  317. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_similar.rs +0 -0
  318. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_similar_jaccard.rs +0 -0
  319. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_similar_knn.rs +0 -0
  320. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/src/algorithm_weighted_undirected.rs +0 -0
  321. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/adjacency_expand.rs +0 -0
  322. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/bench_traversal_scaling.rs +0 -0
  323. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/create_execution.rs +0 -0
  324. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/create_input_driven.rs +0 -0
  325. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/differential_traversal.rs +0 -0
  326. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/explain_goldens/explain_snapshots__single_hop_index_absent_expand_exec.snap +0 -0
  327. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/explain_goldens/explain_snapshots__single_hop_index_present_expand_exec.snap +0 -0
  328. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/explain_goldens/explain_snapshots__var_len_index_absent.snap +0 -0
  329. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/explain_goldens/explain_snapshots__var_len_index_present.snap +0 -0
  330. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/explain_snapshots.rs +0 -0
  331. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/optional_match.rs +0 -0
  332. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/persistent_adjacency.rs +0 -0
  333. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/read_execution.rs +0 -0
  334. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/unwind.rs +0 -0
  335. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/var_len_expand.rs +0 -0
  336. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-exec/tests/write_statement.rs +0 -0
  337. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/LICENSE +0 -0
  338. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/NOTICE +0 -0
  339. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/src/catalog.rs +0 -0
  340. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/src/expr.rs +0 -0
  341. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/src/lib.rs +0 -0
  342. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/src/plan.rs +0 -0
  343. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/src/procedure.rs +0 -0
  344. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/tests/golden.rs +0 -0
  345. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/tests/ir_goldens/golden__aggregation.snap +0 -0
  346. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/tests/ir_goldens/golden__filtered_scan.snap +0 -0
  347. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/tests/ir_goldens/golden__named_path_fixed_segment_and_return_p.snap +0 -0
  348. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/tests/ir_goldens/golden__named_path_variable_functions.snap +0 -0
  349. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/tests/ir_goldens/golden__one_hop_expand.snap +0 -0
  350. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/tests/ir_goldens/golden__optional_match.snap +0 -0
  351. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/tests/ir_goldens/golden__order_by_limit.snap +0 -0
  352. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/tests/ir_goldens/golden__parameter.snap +0 -0
  353. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/tests/ir_goldens/golden__simple_node_scan.snap +0 -0
  354. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/tests/ir_goldens/golden__two_hop_expand.snap +0 -0
  355. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/tests/ir_goldens/golden__unwind.snap +0 -0
  356. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/tests/ir_goldens/golden__variable_length_expand.snap +0 -0
  357. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ir/tests/ir_goldens/golden__with_pipeline.snap +0 -0
  358. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-knowledge/LICENSE +0 -0
  359. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-knowledge/NOTICE +0 -0
  360. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-knowledge/src/supersession.rs +0 -0
  361. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-knowledge/src/valid_time.rs +0 -0
  362. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/LICENSE +0 -0
  363. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/NOTICE +0 -0
  364. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/src/compiler.rs +0 -0
  365. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/src/lib.rs +0 -0
  366. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/src/loader.rs +0 -0
  367. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/src/ontology.rs +0 -0
  368. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/src/persistence.rs +0 -0
  369. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/src/registry.rs +0 -0
  370. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/src/schemas.rs +0 -0
  371. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/src/validator.rs +0 -0
  372. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/tests/fixtures/hr.json +0 -0
  373. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/tests/fixtures/hr.yaml +0 -0
  374. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-ontology/tests/integration.rs +0 -0
  375. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-plan/LICENSE +0 -0
  376. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-plan/NOTICE +0 -0
  377. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-provenance/LICENSE +0 -0
  378. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-provenance/NOTICE +0 -0
  379. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/LICENSE +0 -0
  380. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/NOTICE +0 -0
  381. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/src/calendar.rs +0 -0
  382. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/src/lib.rs +0 -0
  383. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/src/temporal.rs +0 -0
  384. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_golden.rs +0 -0
  385. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_goldens/logical_plan_golden__filtered_scan.snap +0 -0
  386. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_goldens/logical_plan_golden__named_path_fixed_segment_and_return_p.snap +0 -0
  387. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_goldens/logical_plan_golden__named_path_variable_functions.snap +0 -0
  388. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_goldens/logical_plan_golden__one_hop_expand.snap +0 -0
  389. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_goldens/logical_plan_golden__optional_match.snap +0 -0
  390. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_goldens/logical_plan_golden__order_by_limit.snap +0 -0
  391. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_goldens/logical_plan_golden__parameter.snap +0 -0
  392. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_goldens/logical_plan_golden__property_read.snap +0 -0
  393. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_goldens/logical_plan_golden__simple_node_scan.snap +0 -0
  394. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_goldens/logical_plan_golden__undirected_expand.snap +0 -0
  395. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_goldens/logical_plan_golden__unlabeled_scan.snap +0 -0
  396. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_goldens/logical_plan_golden__unwind.snap +0 -0
  397. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_goldens/logical_plan_golden__unwind_list_literal.snap +0 -0
  398. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_goldens/logical_plan_golden__variable_length_edge_var_length.snap +0 -0
  399. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-rel/tests/logical_plan_goldens/logical_plan_golden__variable_length_expand.snap +0 -0
  400. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/LICENSE +0 -0
  401. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/NOTICE +0 -0
  402. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/analyzer.rs +0 -0
  403. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/embedding_lifecycle.rs +0 -0
  404. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/embedding_proactive.rs +0 -0
  405. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/embedding_query.rs +0 -0
  406. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/embedding_refresh.rs +0 -0
  407. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/find.rs +0 -0
  408. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/fusion.rs +0 -0
  409. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/indexing.rs +0 -0
  410. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/lib.rs +0 -0
  411. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/provider.rs +0 -0
  412. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-search/src/provider_adapter.rs +0 -0
  413. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/LICENSE +0 -0
  414. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/NOTICE +0 -0
  415. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/adjacency_delta.rs +0 -0
  416. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/embedding_batch.rs +0 -0
  417. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/embedding_freshness.rs +0 -0
  418. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/embedding_manifest.rs +0 -0
  419. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/generation.rs +0 -0
  420. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/io_stats.rs +0 -0
  421. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/lib.rs +0 -0
  422. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/mutator.rs +0 -0
  423. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/project_failpoint.rs +0 -0
  424. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/project_recovery.rs +0 -0
  425. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/schemas.rs +0 -0
  426. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/search_manifest.rs +0 -0
  427. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/staging.rs +0 -0
  428. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/src/workspace_participants.rs +0 -0
  429. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/tests/adjacency_delta_write.rs +0 -0
  430. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/tests/filtered_read.rs +0 -0
  431. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/tests/graph_writer.rs +0 -0
  432. {graphforge-0.5.0 → graphforge-0.5.2}/crates/graphforge-storage/tests/io_stats.rs +0 -0
  433. {graphforge-0.5.0 → graphforge-0.5.2}/python/graphforge/__init__.py +0 -0
  434. {graphforge-0.5.0 → graphforge-0.5.2}/python/graphforge/_project_skills/README.md +0 -0
  435. {graphforge-0.5.0 → graphforge-0.5.2}/python/graphforge/_project_skills/graphforge-bootstrap/SKILL.md +0 -0
  436. {graphforge-0.5.0 → graphforge-0.5.2}/python/graphforge/_project_skills/graphforge-build-knowledge/SKILL.md +0 -0
  437. {graphforge-0.5.0 → graphforge-0.5.2}/python/graphforge/_project_skills/manifest.json +0 -0
  438. {graphforge-0.5.0 → graphforge-0.5.2}/python/graphforge/api.py +0 -0
  439. {graphforge-0.5.0 → graphforge-0.5.2}/python/graphforge/cli.py +0 -0
  440. {graphforge-0.5.0 → graphforge-0.5.2}/python/graphforge/exceptions.py +0 -0
  441. {graphforge-0.5.0 → graphforge-0.5.2}/python/graphforge/py.typed +0 -0
  442. {graphforge-0.5.0 → graphforge-0.5.2}/python/graphforge/recipes/__init__.py +0 -0
@@ -2018,7 +2018,7 @@ dependencies = [
2018
2018
 
2019
2019
  [[package]]
2020
2020
  name = "graphforge-api"
2021
- version = "0.5.0"
2021
+ version = "0.5.2"
2022
2022
  dependencies = [
2023
2023
  "arrow",
2024
2024
  "cucumber",
@@ -2048,7 +2048,7 @@ dependencies = [
2048
2048
 
2049
2049
  [[package]]
2050
2050
  name = "graphforge-ast"
2051
- version = "0.5.0"
2051
+ version = "0.5.2"
2052
2052
  dependencies = [
2053
2053
  "graphforge-core",
2054
2054
  "serde",
@@ -2058,7 +2058,7 @@ dependencies = [
2058
2058
 
2059
2059
  [[package]]
2060
2060
  name = "graphforge-bindings-node"
2061
- version = "0.5.0"
2061
+ version = "0.5.2"
2062
2062
  dependencies = [
2063
2063
  "arrow",
2064
2064
  "graphforge-api",
@@ -2072,7 +2072,7 @@ dependencies = [
2072
2072
 
2073
2073
  [[package]]
2074
2074
  name = "graphforge-bindings-py"
2075
- version = "0.5.0"
2075
+ version = "0.5.2"
2076
2076
  dependencies = [
2077
2077
  "arrow",
2078
2078
  "futures",
@@ -2085,7 +2085,7 @@ dependencies = [
2085
2085
 
2086
2086
  [[package]]
2087
2087
  name = "graphforge-cli"
2088
- version = "0.5.0"
2088
+ version = "0.5.2"
2089
2089
  dependencies = [
2090
2090
  "arrow",
2091
2091
  "clap",
@@ -2098,7 +2098,7 @@ dependencies = [
2098
2098
 
2099
2099
  [[package]]
2100
2100
  name = "graphforge-core"
2101
- version = "0.5.0"
2101
+ version = "0.5.2"
2102
2102
  dependencies = [
2103
2103
  "serde",
2104
2104
  "serde_yaml_ng",
@@ -2109,7 +2109,7 @@ dependencies = [
2109
2109
 
2110
2110
  [[package]]
2111
2111
  name = "graphforge-cypher"
2112
- version = "0.5.0"
2112
+ version = "0.5.2"
2113
2113
  dependencies = [
2114
2114
  "graphforge-ast",
2115
2115
  "graphforge-core",
@@ -2121,7 +2121,7 @@ dependencies = [
2121
2121
 
2122
2122
  [[package]]
2123
2123
  name = "graphforge-exec"
2124
- version = "0.5.0"
2124
+ version = "0.5.2"
2125
2125
  dependencies = [
2126
2126
  "anyhow",
2127
2127
  "arrow",
@@ -2146,7 +2146,7 @@ dependencies = [
2146
2146
 
2147
2147
  [[package]]
2148
2148
  name = "graphforge-io"
2149
- version = "0.5.0"
2149
+ version = "0.5.2"
2150
2150
  dependencies = [
2151
2151
  "graphforge-core",
2152
2152
  "graphforge-storage",
@@ -2155,7 +2155,7 @@ dependencies = [
2155
2155
 
2156
2156
  [[package]]
2157
2157
  name = "graphforge-ir"
2158
- version = "0.5.0"
2158
+ version = "0.5.2"
2159
2159
  dependencies = [
2160
2160
  "arrow",
2161
2161
  "graphforge-ast",
@@ -2170,7 +2170,7 @@ dependencies = [
2170
2170
 
2171
2171
  [[package]]
2172
2172
  name = "graphforge-knowledge"
2173
- version = "0.5.0"
2173
+ version = "0.5.2"
2174
2174
  dependencies = [
2175
2175
  "arrow",
2176
2176
  "graphforge-core",
@@ -2183,7 +2183,7 @@ dependencies = [
2183
2183
 
2184
2184
  [[package]]
2185
2185
  name = "graphforge-ontology"
2186
- version = "0.5.0"
2186
+ version = "0.5.2"
2187
2187
  dependencies = [
2188
2188
  "arrow",
2189
2189
  "graphforge-core",
@@ -2198,7 +2198,7 @@ dependencies = [
2198
2198
 
2199
2199
  [[package]]
2200
2200
  name = "graphforge-plan"
2201
- version = "0.5.0"
2201
+ version = "0.5.2"
2202
2202
  dependencies = [
2203
2203
  "datafusion",
2204
2204
  "graphforge-core",
@@ -2208,7 +2208,7 @@ dependencies = [
2208
2208
 
2209
2209
  [[package]]
2210
2210
  name = "graphforge-provenance"
2211
- version = "0.5.0"
2211
+ version = "0.5.2"
2212
2212
  dependencies = [
2213
2213
  "arrow",
2214
2214
  "graphforge-core",
@@ -2219,7 +2219,7 @@ dependencies = [
2219
2219
 
2220
2220
  [[package]]
2221
2221
  name = "graphforge-rel"
2222
- version = "0.5.0"
2222
+ version = "0.5.2"
2223
2223
  dependencies = [
2224
2224
  "arrow-data",
2225
2225
  "chrono",
@@ -2239,7 +2239,7 @@ dependencies = [
2239
2239
 
2240
2240
  [[package]]
2241
2241
  name = "graphforge-search"
2242
- version = "0.5.0"
2242
+ version = "0.5.2"
2243
2243
  dependencies = [
2244
2244
  "arrow",
2245
2245
  "graphforge-core",
@@ -2254,7 +2254,7 @@ dependencies = [
2254
2254
 
2255
2255
  [[package]]
2256
2256
  name = "graphforge-storage"
2257
- version = "0.5.0"
2257
+ version = "0.5.2"
2258
2258
  dependencies = [
2259
2259
  "arrow",
2260
2260
  "async-trait",
@@ -3,7 +3,7 @@ resolver = "2"
3
3
  members = ["crates/graphforge-core", "crates/graphforge-ast", "crates/graphforge-cypher", "crates/graphforge-ir", "crates/graphforge-rel", "crates/graphforge-exec", "crates/graphforge-search", "crates/graphforge-storage", "crates/graphforge-provenance", "crates/graphforge-knowledge", "crates/graphforge-ontology", "crates/graphforge-plan", "crates/graphforge-api", "crates/graphforge-bindings-py", "crates/graphforge-cli"]
4
4
 
5
5
  [workspace.package]
6
- version = "0.5.0"
6
+ version = "0.5.2"
7
7
  edition = "2024"
8
8
  license = "Apache-2.0"
9
9
  license-file = "LICENSE"
@@ -0,0 +1,74 @@
1
+ Metadata-Version: 2.4
2
+ Name: graphforge
3
+ Version: 0.5.2
4
+ Classifier: Development Status :: 4 - Beta
5
+ Classifier: License :: OSI Approved :: Apache Software License
6
+ Classifier: Programming Language :: Python :: 3
7
+ Classifier: Programming Language :: Python :: 3 :: Only
8
+ Classifier: Programming Language :: Rust
9
+ Classifier: Topic :: Database :: Database Engines/Servers
10
+ Requires-Dist: pyarrow>=14
11
+ Requires-Dist: polars>=0.20 ; extra == 'polars'
12
+ Provides-Extra: polars
13
+ License-File: LICENSE
14
+ License-File: NOTICE
15
+ License-File: THIRD_PARTY_NOTICES.md
16
+ Summary: GraphForge native graph engine, bindings, and repository lifecycle CLI
17
+ Keywords: graph,openCypher,Arrow,embedded,database
18
+ License-Expression: Apache-2.0
19
+ Requires-Python: >=3.10
20
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
21
+ Project-URL: Documentation, https://docs.graphforge.sh/
22
+ Project-URL: Homepage, https://docs.graphforge.sh/
23
+ Project-URL: Issues, https://github.com/CurateLabs/graphforge/issues
24
+ Project-URL: Repository, https://github.com/CurateLabs/graphforge
25
+
26
+ # GraphForge for Python
27
+
28
+ Native Python bindings for GraphForge — an embedded openCypher graph engine
29
+ with Rust-owned behavior, Arrow results, and a thin repository lifecycle CLI.
30
+
31
+ ## Install
32
+
33
+ **pip**
34
+
35
+ ```bash
36
+ pip install graphforge
37
+ ```
38
+
39
+ **uv** (recommended)
40
+
41
+ ```bash
42
+ uv add graphforge
43
+ ```
44
+
45
+ ## First use
46
+
47
+ ```python
48
+ from graphforge import GraphForge
49
+
50
+ forge = GraphForge() # in-memory; pass a directory path for persistence
51
+
52
+ alice = forge.add_node("Person", name="Alice", age=30)
53
+ bob = forge.add_node("Person", name="Bob", age=25)
54
+ forge.add_edge(alice, "KNOWS", bob, since=2020)
55
+
56
+ table = forge.execute("""
57
+ MATCH (p:Person)-[:KNOWS]->(friend:Person)
58
+ WHERE p.age > 25
59
+ RETURN p.name AS person, friend.name AS friend
60
+ """)
61
+ print(table.to_pandas())
62
+ ```
63
+
64
+ `execute()` returns an Apache Arrow `Table`. The `graphforge` console entry
65
+ point launches the same Rust-owned repository CLI used by `gf` and
66
+ `npx @curatelabs/graphforge-cli`.
67
+
68
+ ## Documentation
69
+
70
+ - [Quick start](https://docs.graphforge.sh/guide/quickstart/)
71
+ - [Installation](https://docs.graphforge.sh/guide/installation/)
72
+ - [Repository integration](https://docs.graphforge.sh/guides/repository-integration/)
73
+ - [Full documentation](https://docs.graphforge.sh/)
74
+
@@ -0,0 +1,48 @@
1
+ # GraphForge for Python
2
+
3
+ Native Python bindings for GraphForge — an embedded openCypher graph engine
4
+ with Rust-owned behavior, Arrow results, and a thin repository lifecycle CLI.
5
+
6
+ ## Install
7
+
8
+ **pip**
9
+
10
+ ```bash
11
+ pip install graphforge
12
+ ```
13
+
14
+ **uv** (recommended)
15
+
16
+ ```bash
17
+ uv add graphforge
18
+ ```
19
+
20
+ ## First use
21
+
22
+ ```python
23
+ from graphforge import GraphForge
24
+
25
+ forge = GraphForge() # in-memory; pass a directory path for persistence
26
+
27
+ alice = forge.add_node("Person", name="Alice", age=30)
28
+ bob = forge.add_node("Person", name="Bob", age=25)
29
+ forge.add_edge(alice, "KNOWS", bob, since=2020)
30
+
31
+ table = forge.execute("""
32
+ MATCH (p:Person)-[:KNOWS]->(friend:Person)
33
+ WHERE p.age > 25
34
+ RETURN p.name AS person, friend.name AS friend
35
+ """)
36
+ print(table.to_pandas())
37
+ ```
38
+
39
+ `execute()` returns an Apache Arrow `Table`. The `graphforge` console entry
40
+ point launches the same Rust-owned repository CLI used by `gf` and
41
+ `npx @curatelabs/graphforge-cli`.
42
+
43
+ ## Documentation
44
+
45
+ - [Quick start](https://docs.graphforge.sh/guide/quickstart/)
46
+ - [Installation](https://docs.graphforge.sh/guide/installation/)
47
+ - [Repository integration](https://docs.graphforge.sh/guides/repository-integration/)
48
+ - [Full documentation](https://docs.graphforge.sh/)
@@ -8,16 +8,16 @@ license-file = "LICENSE"
8
8
  repository.workspace = true
9
9
 
10
10
  [dependencies]
11
- graphforge-core = { version = "0.5.0", path = "../graphforge-core" }
12
- graphforge-ir = { version = "0.5.0", path = "../graphforge-ir" }
13
- graphforge-ontology = { version = "0.5.0", path = "../graphforge-ontology" }
14
- graphforge-provenance = { version = "0.5.0", path = "../graphforge-provenance" }
15
- graphforge-knowledge = { version = "0.5.0", path = "../graphforge-knowledge" }
16
- graphforge-cypher = { version = "0.5.0", path = "../graphforge-cypher" }
17
- graphforge-rel = { version = "0.5.0", path = "../graphforge-rel" }
18
- graphforge-storage = { version = "0.5.0", path = "../graphforge-storage" }
19
- graphforge-exec = { version = "0.5.0", path = "../graphforge-exec" }
20
- graphforge-search = { version = "0.5.0", path = "../graphforge-search" }
11
+ graphforge-core = { version = "0.5.2", path = "../graphforge-core" }
12
+ graphforge-ir = { version = "0.5.2", path = "../graphforge-ir" }
13
+ graphforge-ontology = { version = "0.5.2", path = "../graphforge-ontology" }
14
+ graphforge-provenance = { version = "0.5.2", path = "../graphforge-provenance" }
15
+ graphforge-knowledge = { version = "0.5.2", path = "../graphforge-knowledge" }
16
+ graphforge-cypher = { version = "0.5.2", path = "../graphforge-cypher" }
17
+ graphforge-rel = { version = "0.5.2", path = "../graphforge-rel" }
18
+ graphforge-storage = { version = "0.5.2", path = "../graphforge-storage" }
19
+ graphforge-exec = { version = "0.5.2", path = "../graphforge-exec" }
20
+ graphforge-search = { version = "0.5.2", path = "../graphforge-search" }
21
21
  arrow = { workspace = true }
22
22
  datafusion = { workspace = true }
23
23
  futures = { workspace = true }
@@ -749,7 +749,7 @@ fn api_error(code: ApiErrorCode, message: impl Into<String>) -> GfError {
749
749
 
750
750
  #[cfg(test)]
751
751
  mod tests {
752
- use std::collections::HashMap;
752
+ use std::collections::{BTreeMap, HashMap};
753
753
  use std::process::{Command, Stdio};
754
754
  use std::time::{Duration, Instant};
755
755
 
@@ -795,6 +795,102 @@ mod tests {
795
795
  (graph, descriptor)
796
796
  }
797
797
 
798
+ #[test]
799
+ fn wave10_request_identity_and_error_translation_guards_are_structured() {
800
+ let root = tempfile::tempdir().unwrap();
801
+ let (_, descriptor) = recorded_fixture(&root);
802
+ let base = RecordedAlgorithmRequest {
803
+ context: WriteContext {
804
+ operation_uuid: OperationId(uuid7(20)),
805
+ actor_uuid: None,
806
+ },
807
+ run_uuid: uuid7(21),
808
+ descriptor,
809
+ cancellation: None,
810
+ };
811
+
812
+ let mut request = base.clone();
813
+ request.context.operation_uuid = OperationId(Uuid::nil());
814
+ assert_eq!(
815
+ validate_request(&request).unwrap_err().code(),
816
+ "GF_VALIDATION"
817
+ );
818
+ let mut request = base.clone();
819
+ request.context.actor_uuid = Some(Uuid::nil());
820
+ assert_eq!(
821
+ validate_request(&request).unwrap_err().code(),
822
+ "GF_VALIDATION"
823
+ );
824
+ let mut request = base.clone();
825
+ request.run_uuid = Uuid::nil();
826
+ assert_eq!(
827
+ validate_request(&request).unwrap_err().code(),
828
+ "GF_VALIDATION"
829
+ );
830
+ let mut request = base;
831
+ request.run_uuid = Uuid::from_u128(1);
832
+ assert_eq!(
833
+ validate_request(&request).unwrap_err().code(),
834
+ "GF_VALIDATION"
835
+ );
836
+
837
+ assert_eq!(
838
+ invocation_error(InvocationError::SchemaMismatch).code(),
839
+ "GF_SCHEMA_MISMATCH"
840
+ );
841
+ assert_eq!(
842
+ invocation_error(InvocationError::ProjectionChanged).code(),
843
+ "GF_EXECUTION"
844
+ );
845
+ assert_eq!(
846
+ invocation_error(InvocationError::Graph(GfError::Validation("bad".into()))).code(),
847
+ "GF_VALIDATION"
848
+ );
849
+ let descriptor_error = InvocationDescriptor::new(
850
+ Algorithm::Rank(RankAlgorithm::Degree),
851
+ [0; 32],
852
+ BTreeMap::new(),
853
+ )
854
+ .unwrap_err();
855
+ assert_eq!(
856
+ invocation_error(InvocationError::Descriptor(descriptor_error)).code(),
857
+ "GF_VALIDATION"
858
+ );
859
+ }
860
+
861
+ #[test]
862
+ fn wave10_existing_run_lifecycle_errors_distinguish_all_terminal_states() {
863
+ let completed = AlgorithmRunEvent::new(
864
+ uuid7(30),
865
+ uuid7(31),
866
+ AlgorithmRunState::Completed,
867
+ Some([1; 32]),
868
+ None,
869
+ 2,
870
+ uuid7(32),
871
+ )
872
+ .unwrap();
873
+ assert_eq!(
874
+ existing_lifecycle_error(Some(&completed)).code(),
875
+ "GF_RESULT_NOT_RETAINED"
876
+ );
877
+ let failed = AlgorithmRunEvent::new(
878
+ uuid7(33),
879
+ uuid7(31),
880
+ AlgorithmRunState::Failed,
881
+ None,
882
+ Some("GF_TEST".into()),
883
+ 3,
884
+ uuid7(34),
885
+ )
886
+ .unwrap();
887
+ assert_eq!(
888
+ existing_lifecycle_error(Some(&failed)).code(),
889
+ "GF_EXECUTION"
890
+ );
891
+ assert_eq!(existing_lifecycle_error(None).code(), "GF_EXECUTION");
892
+ }
893
+
798
894
  #[test]
799
895
  fn recorded_dispatch_commits_start_and_completed_before_return() {
800
896
  let root = tempfile::tempdir().unwrap();
@@ -1393,7 +1393,7 @@ mod tests {
1393
1393
  use std::sync::{Arc, mpsc};
1394
1394
  use std::time::Duration;
1395
1395
 
1396
- use arrow::array::{FixedSizeBinaryBuilder, ListBuilder, StringBuilder};
1396
+ use arrow::array::{FixedSizeBinaryArray, FixedSizeBinaryBuilder, ListBuilder, StringBuilder};
1397
1397
  use arrow::datatypes::{DataType, Field, Schema};
1398
1398
 
1399
1399
  use super::*;
@@ -1411,6 +1411,226 @@ mod tests {
1411
1411
  Uuid::from_bytes(bytes)
1412
1412
  }
1413
1413
 
1414
+ #[test]
1415
+ fn wave12_attachment_and_projection_helper_errors_are_exact_and_closed() {
1416
+ let duplicate_policy = BeliefProjectionPolicyV1 {
1417
+ included_statuses: vec![AssertionStatus::Supported, AssertionStatus::Supported],
1418
+ statusless: StatuslessPolicyV1::Include,
1419
+ supersession_branches: SupersessionBranchPolicyV1::Reject,
1420
+ hypotheses: HypothesisSelectionPolicyV1::IncludeAllCurrentMembers,
1421
+ };
1422
+ assert_eq!(
1423
+ duplicate_policy.canonical_bytes().unwrap_err().code(),
1424
+ "GF_VALIDATION"
1425
+ );
1426
+ let descriptor = InvocationDescriptor::new(
1427
+ graphforge_core::algorithms::Algorithm::Rank(
1428
+ graphforge_core::algorithms::RankAlgorithm::Degree,
1429
+ ),
1430
+ [0; 32],
1431
+ BTreeMap::from([
1432
+ ("directed".into(), crate::InvocationParameter::Bool(false)),
1433
+ (
1434
+ "label".into(),
1435
+ crate::InvocationParameter::Utf8("Person".into()),
1436
+ ),
1437
+ ("via".into(), crate::InvocationParameter::Utf8("*".into())),
1438
+ ]),
1439
+ )
1440
+ .unwrap();
1441
+ let valid = AttachResolvedRunRequest {
1442
+ context: WriteContext {
1443
+ operation_uuid: OperationId(uuid7(1)),
1444
+ actor_uuid: None,
1445
+ },
1446
+ attachment_uuid: uuid7(2),
1447
+ run_uuid: uuid7(3),
1448
+ descriptor,
1449
+ };
1450
+ assert!(validate_attachment_request(&valid).is_ok());
1451
+ for (mut request, message) in [
1452
+ (
1453
+ AttachResolvedRunRequest {
1454
+ context: WriteContext {
1455
+ operation_uuid: OperationId(Uuid::nil()),
1456
+ actor_uuid: None,
1457
+ },
1458
+ ..valid.clone()
1459
+ },
1460
+ "operation_uuid must not be nil",
1461
+ ),
1462
+ (
1463
+ AttachResolvedRunRequest {
1464
+ attachment_uuid: Uuid::nil(),
1465
+ ..valid.clone()
1466
+ },
1467
+ "attachment_uuid must not be nil",
1468
+ ),
1469
+ (
1470
+ AttachResolvedRunRequest {
1471
+ run_uuid: Uuid::nil(),
1472
+ ..valid.clone()
1473
+ },
1474
+ "run_uuid must not be nil",
1475
+ ),
1476
+ (
1477
+ AttachResolvedRunRequest {
1478
+ context: WriteContext {
1479
+ operation_uuid: OperationId(uuid7(4)),
1480
+ actor_uuid: Some(Uuid::nil()),
1481
+ },
1482
+ ..valid.clone()
1483
+ },
1484
+ "actor_uuid must not be nil",
1485
+ ),
1486
+ (
1487
+ AttachResolvedRunRequest {
1488
+ attachment_uuid: Uuid::from_u128(5),
1489
+ ..valid
1490
+ },
1491
+ "attachment_uuid must be UUIDv7",
1492
+ ),
1493
+ ] {
1494
+ let error = validate_attachment_request(&request).unwrap_err();
1495
+ assert_eq!(error.code(), "GF_VALIDATION");
1496
+ assert_eq!(error.to_string(), format!("validation error: {message}"));
1497
+ request.context.actor_uuid = None;
1498
+ }
1499
+ assert_eq!(schema("bad schema").code(), "GF_SCHEMA_MISMATCH");
1500
+ assert_eq!(ambiguous("two branches").code(), "GF_AMBIGUOUS_PROJECTION");
1501
+ assert_eq!(
1502
+ transaction_conflict("drift").code(),
1503
+ "GF_IDEMPOTENCY_CONFLICT"
1504
+ );
1505
+ assert_eq!(
1506
+ descriptor_fingerprint(b"not a descriptor")
1507
+ .unwrap_err()
1508
+ .code(),
1509
+ "GF_SCHEMA_MISMATCH"
1510
+ );
1511
+
1512
+ let empty = RecordBatch::new_empty(Arc::new(Schema::empty()));
1513
+ assert_eq!(
1514
+ exact_fingerprint(
1515
+ &empty,
1516
+ &FixedSizeBinaryArray::try_from_iter([vec![0; 32]].into_iter()).unwrap(),
1517
+ )
1518
+ .unwrap_err()
1519
+ .code(),
1520
+ "GF_SCHEMA_MISMATCH"
1521
+ );
1522
+ for result in [
1523
+ strings(&empty, "missing").map(|_| ()),
1524
+ fixed(&empty, "missing").map(|_| ()),
1525
+ lists(&empty, "missing").map(|_| ()),
1526
+ ] {
1527
+ assert_eq!(result.unwrap_err().code(), "GF_SCHEMA_MISMATCH");
1528
+ }
1529
+ let no_batches = graphforge_exec::ExecutionResult {
1530
+ schema: Arc::new(Schema::empty()),
1531
+ batches: vec![],
1532
+ stats: graphforge_exec::ExecutionStats::default(),
1533
+ side_effects: None,
1534
+ mutation_receipt: None,
1535
+ };
1536
+ assert_eq!(
1537
+ one_batch(&no_batches, "empty").unwrap_err().code(),
1538
+ "GF_SCHEMA_MISMATCH"
1539
+ );
1540
+ let null_uuid =
1541
+ FixedSizeBinaryArray::try_from_sparse_iter_with_size([None::<Vec<u8>>].into_iter(), 16)
1542
+ .unwrap();
1543
+ assert_eq!(
1544
+ uuid_at(&null_uuid, 0, "assertion_uuid").unwrap_err().code(),
1545
+ "GF_SCHEMA_MISMATCH"
1546
+ );
1547
+ let fingerprints =
1548
+ FixedSizeBinaryArray::try_from_iter([vec![1; 32], vec![2; 32]].into_iter()).unwrap();
1549
+ let fingerprint_batch = RecordBatch::try_new(
1550
+ Arc::new(Schema::new(vec![Field::new(
1551
+ "result_fingerprint",
1552
+ DataType::FixedSizeBinary(32),
1553
+ false,
1554
+ )])),
1555
+ vec![Arc::new(fingerprints.clone())],
1556
+ )
1557
+ .unwrap();
1558
+ assert_eq!(
1559
+ exact_fingerprint(&fingerprint_batch, &fingerprints)
1560
+ .unwrap_err()
1561
+ .code(),
1562
+ "GF_SCHEMA_MISMATCH"
1563
+ );
1564
+ }
1565
+
1566
+ #[test]
1567
+ fn attachment_replay_requires_exact_resolved_content() {
1568
+ let graph = GraphForge::new(None).unwrap();
1569
+ let policy = BeliefProjectionPolicyV1 {
1570
+ included_statuses: vec![AssertionStatus::Supported],
1571
+ statusless: StatuslessPolicyV1::Include,
1572
+ supersession_branches: SupersessionBranchPolicyV1::Reject,
1573
+ hypotheses: HypothesisSelectionPolicyV1::IncludeAllCurrentMembers,
1574
+ };
1575
+ let (policy_bytes, policy_fingerprint) = policy_fingerprint(&policy).unwrap();
1576
+ let descriptor = InvocationDescriptor::new(
1577
+ graphforge_core::algorithms::Algorithm::Rank(
1578
+ graphforge_core::algorithms::RankAlgorithm::Degree,
1579
+ ),
1580
+ [0; 32],
1581
+ BTreeMap::from([
1582
+ ("directed".into(), crate::InvocationParameter::Bool(false)),
1583
+ (
1584
+ "label".into(),
1585
+ crate::InvocationParameter::Utf8("Person".into()),
1586
+ ),
1587
+ ("via".into(), crate::InvocationParameter::Utf8("*".into())),
1588
+ ]),
1589
+ )
1590
+ .unwrap();
1591
+ let projection = ResolvedBeliefProjection {
1592
+ graph: Box::new(graph),
1593
+ source_generation_uuid: uuid7(20),
1594
+ transaction_cutoff_micros: 10,
1595
+ valid_time_micros: None,
1596
+ policy_bytes: policy_bytes.clone(),
1597
+ policy_fingerprint,
1598
+ snapshot_fingerprint: [1; 32],
1599
+ valid_time_fingerprint: None,
1600
+ graph_content_fingerprint: [2; 32],
1601
+ source_record_uuids: vec![uuid7(21)],
1602
+ };
1603
+ let request = AttachResolvedRunRequest {
1604
+ context: context(22),
1605
+ attachment_uuid: uuid7(23),
1606
+ run_uuid: uuid7(24),
1607
+ descriptor,
1608
+ };
1609
+ let row = BeliefProjectionAttachment::new(
1610
+ request.attachment_uuid,
1611
+ uuid7(25),
1612
+ projection.source_generation_uuid,
1613
+ projection.transaction_cutoff_micros,
1614
+ projection.valid_time_micros,
1615
+ BELIEF_PROJECTION_POLICY_VERSION,
1616
+ policy_bytes,
1617
+ projection.snapshot_fingerprint,
1618
+ projection.valid_time_fingerprint,
1619
+ projection.graph_content_fingerprint,
1620
+ *request.descriptor.fingerprint(),
1621
+ projection.source_record_uuids.clone(),
1622
+ uuid7(26),
1623
+ 11,
1624
+ )
1625
+ .unwrap();
1626
+ assert_eq!(
1627
+ verify_existing_attachment(&row, &projection, &request)
1628
+ .unwrap_err()
1629
+ .code(),
1630
+ "GF_IDEMPOTENCY_CONFLICT"
1631
+ );
1632
+ }
1633
+
1414
1634
  fn context(seed: u8) -> WriteContext {
1415
1635
  WriteContext {
1416
1636
  operation_uuid: OperationId(uuid7(seed)),
@@ -1485,6 +1705,15 @@ mod tests {
1485
1705
  policy: policy.clone(),
1486
1706
  })
1487
1707
  .unwrap();
1708
+ assert_ne!(projection.source_generation_uuid(), Uuid::nil());
1709
+ assert!(!projection.policy_bytes().is_empty());
1710
+ assert_ne!(projection.policy_fingerprint(), [0; 32]);
1711
+ assert_ne!(projection.snapshot_fingerprint(), [0; 32]);
1712
+ assert_eq!(projection.transaction_cutoff_micros(), i64::MAX);
1713
+ assert_eq!(projection.valid_time_micros(), None);
1714
+ assert_eq!(projection.valid_time_fingerprint(), None);
1715
+ assert_ne!(projection.graph_content_fingerprint(), [0; 32]);
1716
+ assert_eq!(projection.source_record_uuids(), &[uuid7(5)]);
1488
1717
  assert_eq!(
1489
1718
  graphforge_storage::read_nodes(&projection.graph.dir)
1490
1719
  .unwrap()