Skip to content

Release 0.5.44 - #541

Merged
StevenBtw merged 68 commits into
mainfrom
release/0.5.44
Oct 4, 2026
Merged

StevenBtw merged 68 commits into
mainfrom
release/0.5.44

Conversation

@StevenBtw

@StevenBtw StevenBtw commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

What does this PR do?(tldr it adds a whole bunch of tests)

Release 0.5.44. Release checklist (the work left before the tag):

  • Subqueries: EXISTS, COUNT and VALUE subqueries share one correlated plan in WHERE, WITH and RETURN (EXISTS and COUNT subqueries tied to the outer row by a value return wrong rows or fail #543), and one that shares nothing with the row runs once; CALL subqueries return their nodes and edges as references, GQL CALL sees the outer row, CALL (a, b) { ... } scope clauses in GQL and Cypher, RETURN * in CALL, and the importing WITH follows openCypher
  • CALL bodies: ORDER BY, SKIP, LIMIT, UNION, a nested CALL and writes (DELETE, MERGE, REMOVE, FOREACH) in Cypher; UNION, EXCEPT, INTERSECT and OTHERWISE in GQL; a subquery returns new names only
  • Nodes and edges keep their kind through joins, CALL subqueries and UNWIND; keys() of an edge; a variable used as both a node and an edge is rejected
  • An OPTIONAL MATCH condition that reads earlier variables keeps the row with null; MERGE binds every match; GQL NEXT passes on what the RETURN before it returns; GQL VALUE { ... } in RETURN and WITH
  • Regressions from earlier in this cycle: COUNT { ... } compared in WHERE over duplicate rows, CDC events of one transaction that writes to several graphs (events now name their graph), and SET on a node deleted earlier in the same statement (now an error)
  • Brought forward from 0.5.45: a statement that uses a parameter nobody supplied fails before it writes anything, and unaliased columns are named after the parameter; writes fail while a session reads at an earlier epoch; compact() keeps a read-only database read-only; a failed statement inside a transaction is undone and the transaction goes on
  • Review comments addressed
  • Differential test against 0.5.43, every difference reviewed (scripts/difftest/reviewed/0.5.44.txt)
  • CHANGELOG pass, docs changelog in sync
  • npm and PyPI (grafeo-cli) publishing works: a failed publish fails the release; the trusted publishers on npm and PyPI are still to be set up
  • Full verification: tests in debug and release mode, the concurrent-session stress tests, spec tests in every binding, the feature profiles and the WASM check

Later releases: writes after compact() reaching the WAL (a known gap, noted in the CHANGELOG, #448), CREATE GRAPH ... AS COPY OF (#423), imported variables after a WITH in a CALL subquery (#545), and a failed statement with auto-commit off and no transaction open (#536). The removal of the dormant property compression (#450) is planned for 0.5.47.

Fixes #

How was it tested?

Every fix comes with a regression test that failed before it: spec tests in tests/spec (run in Rust, Python, Node.js, Go, C# and Dart), Rust integration and unit tests, and cases in the differential test (scripts/difftest), which runs the same GQL and Cypher corpus on 0.5.43 and on this branch and lists every difference. Each change was checked with cargo fmt --check, cargo clippy --workspace --all-targets --all-features -- -D warnings, cargo test --workspace --all-features and the spec runners in every binding. The differential gate lists 367 differences against 0.5.43, each with its reason in scripts/difftest/reviewed/0.5.44.txt. Release-mode tests (13,803 passed), the concurrent-session stress tests and the WASM check (grafeo-web typecheck and its 345 tests against this build) pass.

AI assistance

AI tools used: Claude Code for implementation, tests, review fixes and docs

  • I have read every line of this change, I understand it, and I can explain and defend it in review.

Contributor checklist

  • No naming or concept conflicts. I searched the code, issues and discussions for the names this change introduces.
  • Agreed scope. New dependencies, crates, feature flags or CI changes were asked for in the linked issue or agreed in a discussion.

Summary by cubic

Prepares the 0.5.44 release: fixes query correctness bugs (sort order, subqueries, entity typing, cyclic patterns), keeps schema/stats views correct after compaction, applies grant checks to EXPLAIN and streaming queries, and publishes npm through trusted publishing. Verified by a differential test against 0.5.43, with the CHANGELOG rewritten for the release.

Bug Fixes

  • All five sort paths share one total-order comparator (openCypher order), so values of different types no longer compare as equal and integers/floats compare exactly; null order holds in both directions, and a later clause can order by a property of a return alias.
  • label_count(), property_key_count(), edge_type_count(), detailed_stats() and schema() read the graph store, and the rdf profile keeps its data across a reopen via the LPG store workaround (Persistence without the lpg feature: RDF-only builds lose their data on reopen #544).
  • EXPLAIN and streaming queries check grants and the selected graph before running.
  • Nodes and edges keep their type through ORDER BY, LIMIT, SKIP, DISTINCT and set operations; joins, aggregates, UNWIND and MERGE build output in the input columns' types.
  • EXISTS/COUNT subqueries in WHERE run per row when they start from a row's node and share nothing else, otherwise as a semi-join; CALL subqueries (GQL and Cypher) return their nodes and edges as references and import the outer row; VALUE { count(x) } counts non-null distinct values; GQL subqueries chain their MATCH clauses.
  • A MATCH after a write sees the written rows; a path returning to an earlier variable closes the cycle; a bound edge matches only that edge; transactions read the type of edges they created even after compact(), concurrent direct writes after compact() replay to the last state, and CDC events name the graph they happened in.
  • A statement using a parameter nobody supplied fails before it writes anything; EXPLAIN without parameters still shows the plan.
  • Upserts skip rows with ambiguous endpoint keys, Node.js rejects fractional entity IDs, stored-procedure writes count once per distinct label, and CI no longer runs out of disk.

Written for commit 0898031. Summary will update on new commits.

Review in cubic

Closes #479
Closes #480
Closes #459
Closes #482
Closes #543

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 7 files

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread crates/grafeo-engine/src/session/mod.rs Outdated
Comment thread crates/grafeo-engine/src/database/admin.rs
Comment thread CHANGELOG.md
@codspeed

codspeed Bot commented Sep 30, 2026 •

Copy link
Copy Markdown
Contributor

Merging this PR will improve performance by 22.06%

⚠️ Different runtime environments detected

Some benchmarks with significant performance changes were compared across different runtime environments,
which may affect the accuracy of the results.

Open the report in CodSpeed to investigate

⚡ 1 improved benchmark
✅ 69 untouched benchmarks

Performance Changes

Benchmark BASE HEAD Efficiency
⚡ int_eq/100000 3.2 ms 2.6 ms +22.06%

Tip

Curious why performance improved? Comment @codspeedbot explain why performance improved on this PR, or directly use the CodSpeed MCP with your agent.


Comparing release/0.5.44 (0898031) with main (7005985)1

Open in CodSpeed

Footnotes

  1. No successful run was found on main (0898031) during the generation of this report, so 7005985 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report. ↩

@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

Benchmark Comparison (base vs PR)

Measured on the same runner to eliminate hardware variance.

Full results
group                                                 base                                    pr
-----                                                 ----                                    --
_memory_flush                                         1.00      0.6±0.02ns        ? ?/sec     1.02      0.6±0.02ns        ? ?/sec
adjacency_insert_1000                                 1.09     29.3±0.52µs        ? ?/sec     1.00     26.8±1.47µs        ? ?/sec
adjacency_lookup                                      1.13     63.7±2.01µs        ? ?/sec     1.00     56.1±2.79µs        ? ?/sec
brute_force_knn_1k_k10                                1.10     31.4±0.61µs        ? ?/sec     1.00     28.5±1.57µs        ? ?/sec
bump_allocate_1000                                    1.00   983.3±21.33ns        ? ?/sec     1.00   984.9±16.76ns        ? ?/sec
compact/edges_from_outgoing_10K                       1.11   601.2±14.23µs        ? ?/sec     1.00   542.1±25.92µs        ? ?/sec
compact/find_nodes_by_property/dict_eq/1000           1.00  1364.2±34.28ns        ? ?/sec     1.07  1460.5±66.44ns        ? ?/sec
compact/find_nodes_by_property/dict_eq/10000          1.00      8.1±0.18µs        ? ?/sec     1.22      9.8±0.59µs        ? ?/sec
compact/find_nodes_by_property/dict_eq/100000         1.00     81.5±2.54µs        ? ?/sec     1.22     99.1±5.73µs        ? ?/sec
compact/find_nodes_by_property/int_eq/1000            1.03      2.5±0.05µs        ? ?/sec     1.00      2.4±0.12µs        ? ?/sec
compact/find_nodes_by_property/int_eq/10000           1.05     20.7±0.40µs        ? ?/sec     1.00     19.7±1.25µs        ? ?/sec
compact/find_nodes_by_property/int_eq/100000          1.07    207.0±3.62µs        ? ?/sec     1.00    194.3±9.59µs        ? ?/sec
compact/find_nodes_in_range/score_gt_7/1000           1.08      4.8±0.11µs        ? ?/sec     1.00      4.4±0.29µs        ? ?/sec
compact/find_nodes_in_range/score_gt_7/10000          1.07     43.0±1.04µs        ? ?/sec     1.00     40.4±2.36µs        ? ?/sec
compact/find_nodes_in_range/score_gt_7/100000         1.04    426.1±9.94µs        ? ?/sec     1.00   408.1±18.94µs        ? ?/sec
compact/get_node_property_10K                         1.09    215.8±5.94µs        ? ?/sec     1.00    198.7±5.97µs        ? ?/sec
compact/nodes_by_label_100K                           1.05     16.5±0.23µs        ? ?/sec     1.00     15.7±0.78µs        ? ?/sec
distance/cosine_384d                                  1.14     51.1±1.69ns        ? ?/sec     1.00     45.0±1.06ns        ? ?/sec
distance/dot_product_384d                             1.19     42.8±0.76ns        ? ?/sec     1.00     36.1±1.57ns        ? ?/sec
distance/euclidean_384d                               1.19     44.6±0.71ns        ? ?/sec     1.00     37.5±1.71ns        ? ?/sec
edge_filter/regression_edge_filter_any                1.00   630.5±31.56µs        ? ?/sec     1.10   694.0±16.50µs        ? ?/sec
edge_filter/regression_edge_filter_follows            1.00   616.6±32.71µs        ? ?/sec     1.19    735.5±8.64µs        ? ?/sec
edge_filter/regression_edge_filter_single             1.00   609.8±26.83µs        ? ?/sec     1.17   713.4±10.79µs        ? ?/sec
epoch_arena_allocate_1000                             1.03      7.8±0.12µs        ? ?/sec     1.00      7.6±0.13µs        ? ?/sec
hash_index_insert_1000                                1.15     54.4±1.17µs        ? ?/sec     1.00     47.4±2.50µs        ? ?/sec
hash_index_lookup                                     1.16     11.9±0.34µs        ? ?/sec     1.00     10.3±0.15µs        ? ?/sec
hnsw_insert_500                                       1.15     37.8±0.95ms        ? ?/sec     1.00     32.9±1.61ms        ? ?/sec
hnsw_search_2k_k10                                    1.10    121.9±3.19µs        ? ?/sec     1.00    110.8±5.73µs        ? ?/sec
memory_10k_nodes_50k_edges                            1.00     43.4±1.47ms        ? ?/sec     1.14     49.6±1.70ms        ? ?/sec
memory_1k_nodes_5k_edges                              1.00      3.1±0.07ms        ? ?/sec     1.10      3.4±0.06ms        ? ?/sec
memory_after_100_queries                              1.00     38.1±1.32ms        ? ?/sec     1.05     40.1±1.16ms        ? ?/sec
memory_empty_db                                       1.00     69.4±1.37µs        ? ?/sec     1.06     73.6±0.91µs        ? ?/sec
memory_vector_index_1k                                1.01     83.6±1.68ms        ? ?/sec     1.00     82.6±1.22ms        ? ?/sec
multihop/regression_1hop_1k                           1.02    395.5±7.09µs        ? ?/sec     1.00   386.3±21.32µs        ? ?/sec
multihop/regression_1hop_5k                           1.00  1978.7±102.69µs        ? ?/sec    1.13      2.2±0.06ms        ? ?/sec
multihop/regression_2hop_1k                           1.00    406.9±3.98µs        ? ?/sec     1.01   409.8±19.93µs        ? ?/sec
multihop/regression_3hop_1k                           1.05    480.7±6.82µs        ? ?/sec     1.00   457.2±23.07µs        ? ?/sec
multihop/regression_fan_out_5k                        1.00      4.1±0.26ms        ? ?/sec     2.69     10.9±0.54ms        ? ?/sec
object_pool_get_put_1000                              1.04      2.1±0.04µs        ? ?/sec     1.00      2.0±0.03µs        ? ?/sec
product_quantization/asymmetric_distance_128d_pq8     1.10     51.1±1.09µs        ? ?/sec     1.00     46.4±2.80µs        ? ?/sec
product_quantization/build_distance_table_128d_pq8    1.10     51.3±0.66µs        ? ?/sec     1.00     46.7±2.70µs        ? ?/sec
product_quantization/distance_with_table_pq8          1.00      4.8±0.08ns        ? ?/sec     1.07      5.2±0.30ns        ? ?/sec
product_quantization/quantize_128d_pq8                1.46     21.9±0.52µs        ? ?/sec     1.00     15.0±0.88µs        ? ?/sec
product_quantization/train_500x128_pq8                1.10     45.1±0.80ms        ? ?/sec     1.00     41.2±2.71ms        ? ?/sec
query_1hop_pattern                                    1.00   349.5±20.39µs        ? ?/sec     1.00   349.6±17.96µs        ? ?/sec
query_2hop_pattern                                    1.04   382.2±29.29µs        ? ?/sec     1.00   367.3±20.03µs        ? ?/sec
query_count_all                                       1.00     40.2±2.40µs        ? ?/sec     1.05     42.2±2.40µs        ? ?/sec
query_fan_out_expand_1k                               1.04   763.7±33.88µs        ? ?/sec     1.00   736.4±34.70µs        ? ?/sec
query_filter_range                                    1.00   315.6±16.18µs        ? ?/sec     1.11   350.3±15.99µs        ? ?/sec
query_insert_single_node                              1.00     10.2±0.92µs        ? ?/sec     1.13     11.5±0.73µs        ? ?/sec
query_node_lookup_by_property                         1.00   333.2±19.64µs        ? ?/sec     1.08   360.4±17.71µs        ? ?/sec
rdf_chain_join                                        1.00   340.4±20.49µs        ? ?/sec     1.02   346.5±24.24µs        ? ?/sec
rdf_count_all                                         1.00    137.6±5.21µs        ? ?/sec     1.06    146.4±8.97µs        ? ?/sec
rdf_filter_string                                     1.00    240.4±9.28µs        ? ?/sec     1.08   258.9±20.92µs        ? ?/sec
rdf_insert_single_triple                              1.00      3.4±1.31ms        ? ?/sec     1.07      3.6±1.27ms        ? ?/sec
rdf_join_chain_10k                                    1.00      5.0±0.59ms        ? ?/sec     1.16      5.8±0.69ms        ? ?/sec
rdf_join_chain_2hop_10k                               1.00     12.2±1.18ms        ? ?/sec     1.06     12.9±1.13ms        ? ?/sec
rdf_join_optional_10k                                 1.00     11.6±0.87ms        ? ?/sec     1.16     13.5±0.88ms        ? ?/sec
rdf_join_star_2_10k                                   1.00     15.8±1.71ms        ? ?/sec     1.05     16.7±1.37ms        ? ?/sec
rdf_join_star_3_10k                                   1.01     29.8±2.21ms        ? ?/sec     1.00     29.4±2.49ms        ? ?/sec
rdf_join_star_4_10k                                   1.00     36.6±2.96ms        ? ?/sec     1.04     38.0±5.04ms        ? ?/sec
rdf_optional_pattern                                  1.00   732.1±35.15µs        ? ?/sec     1.00   729.9±42.02µs        ? ?/sec
rdf_single_pattern_lookup                             1.00      4.0±0.25µs        ? ?/sec     1.09      4.3±0.25µs        ? ?/sec
rdf_star_join_2pattern                                1.00   957.6±60.38µs        ? ?/sec     1.02   974.8±51.23µs        ? ?/sec
rdf_star_join_3pattern                                1.03  1798.0±89.63µs        ? ?/sec     1.00  1753.6±94.96µs        ? ?/sec
repeated/regression_repeat_cached_500                 1.00    171.8±7.41ms        ? ?/sec     1.03    177.1±3.68ms        ? ?/sec
repeated/regression_repeat_unique_100                 1.00     34.7±1.49ms        ? ?/sec     1.11     38.6±1.17ms        ? ?/sec
repeated/regression_repeat_unique_500                 1.00    175.2±8.49ms        ? ?/sec     1.05    184.5±5.23ms        ? ?/sec
scalar_quantization/distance_u8_384d                  1.07    546.8±7.48ns        ? ?/sec     1.00   513.2±29.14ns        ? ?/sec
scalar_quantization/quantize_384d                     1.11    326.1±6.46ns        ? ?/sec     1.00   292.9±18.42ns        ? ?/sec
scalar_quantization/train_1000x384                    1.12    119.4±2.87µs        ? ?/sec     1.00    106.3±6.46µs        ? ?/sec
snapshot_export_50n_100e                              1.00     72.6±2.57µs        ? ?/sec     1.18     86.0±1.79µs        ? ?/sec
snapshot_import_50n_100e                              1.00    207.7±3.59µs        ? ?/sec     1.04    216.6±4.74µs        ? ?/sec
snapshot_roundtrip_50n_100e                           1.00    311.7±5.30µs        ? ?/sec     1.01    314.2±7.54µs        ? ?/sec
value_decode_mixed_6                                  1.00    263.3±3.85ns        ? ?/sec     1.02    268.6±4.68ns        ? ?/sec
value_encode_mixed_6                                  1.01    181.2±3.41ns        ? ?/sec     1.00    179.8±3.04ns        ? ?/sec

Performance regressions

Benchmark Regression Threshold
compact/find_nodes_by_property/dict_eq/10000 +22.0% 15%
compact/find_nodes_by_property/dict_eq/100000 +22.0% 15%
edge_filter/regression_edge_filter_follows +19.0% 15%
edge_filter/regression_edge_filter_single +17.0% 15%
multihop/regression_fan_out_5k +169.0% 15%
query_insert_single_node +13.0% 12%
rdf_join_chain_10k +16.0% 12%
rdf_join_optional_10k +16.0% 12%
snapshot_export_50n_100e +18.0% 12%

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 9 files (changes from recent commits).

Reply with feedback, questions, or to request a fix.

Re-trigger cubic

Comment thread crates/grafeo-engine/src/session/mod.rs
Comment thread crates/grafeo-core/src/execution/operators/project.rs Outdated

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 18 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread crates/grafeo-engine/src/session/mod.rs Outdated
Comment thread docs/api/python/database.md Outdated
Comment thread crates/bindings/python/tests/lpg/test_upserts.py Outdated
Comment thread crates/grafeo-common/src/testing/child_process.rs Outdated
Comment thread crates/grafeo-common/src/testing/child_process.rs

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 32 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread crates/grafeo-storage/src/file/manager.rs
Comment thread crates/bindings/node/src/database/upsert.rs Outdated
Comment thread crates/grafeo-engine/tests/row_order.rs Outdated
Comment thread crates/grafeo-engine/src/query/planner/lpg/mod.rs

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 23 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread crates/bindings/python/Cargo.toml Outdated
Comment thread docs/user-guide/compact-store.md Outdated

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 14 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread crates/grafeo-engine/src/query/translators/sql_pgq.rs Outdated
Comment thread crates/grafeo-engine/src/query/optimizer/cycles.rs Outdated
Comment thread crates/grafeo-engine/tests/cyclic_patterns.rs Outdated
Comment thread crates/bindings/python/src/database.rs Outdated
Comment thread crates/bindings/python/src/graph_handle.rs Outdated
Comment thread crates/grafeo-engine/tests/row_order.rs

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 11 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread crates/grafeo-engine/src/query/translators/gql/mod.rs
Comment thread crates/grafeo-adapters/src/query/gql/parser.rs

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 14 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread crates/grafeo-engine/tests/subquery_integration.rs Outdated

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 9 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="crates/grafeo-engine/tests/node_seek.rs">

<violation number="1" location="crates/grafeo-engine/tests/node_seek.rs:192">
P2: This wall-clock timing assertion can fail intermittently when the CI runner is loaded, and it is the only timing-based test in this file: every other test here verifies the seek deterministically via the plan (`a_key_from_the_row_is_looked_up_in_the_index` checks for `[index: id]`, `profile_shows_the_seek` checks for `NodeSeek`, and `index_persistence.rs` checks the labeled point lookup's plan). The same regression can be caught without measuring time — assert on `PROFILE` that `MATCH (s:File {id: 'n10'}) RETURN s.id` plans a `NodeSeek` and no `NodeScan`, which also removes the 60,000-node insert and the 1000-query loop from the suite. If you keep the timing check, note that both measured queries take near-identical paths in the fixed code, so the 5x ratio has a large margin; a future slowdown of the labeled path up to 5x would silently pass.</violation>
</file>

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread crates/grafeo-engine/tests/node_seek.rs

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 25 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="crates/grafeo-engine/src/query/planner/lpg/mod.rs">

<violation number="1" location="crates/grafeo-engine/src/query/planner/lpg/mod.rs:184">
P1: Mixed set-operation branches can bind the same output name to different value kinds, but the merged metadata records all classifications without representing per-row types. A later `RETURN` therefore applies one resolver to every branch, potentially resolving node IDs as edges; reject incompatible branch kinds or materialize each branch before combining them.</violation>
</file>

Comment thread crates/grafeo-engine/src/query/planner/lpg/mod.rs
Comment thread crates/grafeo-engine/src/query/planner/rdf/mod.rs Outdated
Comment thread crates/grafeo-core/src/execution/operators/shuffle.rs
Comment thread tests/spec/rosetta/set_operations_on_entities.gtest

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 8 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. When an issue isn't valid or won't be fixed in this PR, reply in its thread with the reason and then resolve the thread. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="tests/spec/rosetta/values_through_ordering.gtest">

<violation number="1" location="tests/spec/rosetta/values_through_ordering.gtest:29">
P3: This ~900-character seed `INSERT` is duplicated verbatim in ten tests (all entity tests up to `a_let_copy_of_an_edge`), and the node/edge batch seed is repeated again in `skip_across_a_row_batch`/`edge_properties_after_a_cut_across_row_batches`. Every expected `w` in the file depends on this exact data, so a dataset change has to be applied in a dozen places and kept in sync with the header comment. Consider hoisting the shared seed into a `.setup` file under `tests/spec/datasets/` and referencing it per-test via the `dataset:` field. The file is otherwise correct: it parses cleanly (21 tests), all expected rows verify against the setup data, and the 2048-row batch boundary matches the engine's `DEFAULT_CHUNK_SIZE`.</violation>
</file>

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread crates/grafeo-core/src/execution/pipeline_convert.rs Outdated
Comment thread crates/grafeo-engine/src/query/planner/lpg/mod.rs
Comment thread tests/spec/rosetta/values_through_ordering.gtest Outdated
- an expand whose edge variable is already bound binds a fresh edge under an
  equality filter, like the check for a bound target node; CALL subqueries
  pass the variables they import (WITH r, WITH *) to these checks, so a cycle
  on imported nodes closes too
- the cross join of a later MATCH keeps its inputs' column types: a node
  without a property no longer returns the property of the edge with the same
  ID, and an edge no longer reads the node's
- tests: bound_edges integration tests, a subquery cycle test, a join unit
  test, spec bound_before_a_later_match (GQL and Cypher)

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 32 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread crates/grafeo-engine/src/query/planner/lpg/subquery.rs
Comment thread crates/grafeo-engine/src/query/planner/lpg/filter.rs Outdated
Comment thread crates/grafeo-engine/src/query/translators/cypher.rs
Comment thread crates/grafeo-engine/src/database/admin.rs

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 32 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread crates/grafeo-engine/src/query/translators/common.rs
Comment thread crates/grafeo-core/src/execution/operators/join.rs
Comment thread crates/grafeo-engine/src/query/translators/gql/mod.rs Outdated
Comment thread crates/grafeo-engine/src/query/translators/gql/mod.rs Outdated
Comment thread crates/grafeo-engine/src/query/planner/lpg/mutation.rs
Comment thread crates/grafeo-engine/src/query/planner/lpg/subquery.rs
Comment thread docs/user-guide/cdc.md Outdated
Comment thread crates/grafeo-engine/tests/cdc_session_mutations.rs

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 8 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread crates/grafeo-engine/src/query/translators/gql/mod.rs Outdated

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 2 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread tests/spec/lpg/gql/14.1_next.gtest Outdated

@cubic-dev-ai cubic-dev-ai Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All reported issues were addressed across 12 files (changes from recent commits).

Tip: Review your code locally with the cubic CLI to iterate faster.

Re-trigger cubic

Comment thread docs/user-guide/cypher/mutations.md Outdated
Comment thread CHANGELOG.md Outdated
@StevenBtw
StevenBtw merged commit 2150b0f into main Oct 4, 2026
28 of 29 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment