Skip to content

0.59.0 — GFQL correctness, native Polars, and verified benchmarks

Latest

Choose a tag to compare

@lmeyerov lmeyerov released this 02 Sep 00:47
· 65 commits to master since this release
3fb216d

The headline: 0.59.0 makes absent-schema behavior explicit, closes a broad set
of silent-answer and cross-engine correctness gaps, expands native Polars and
resident-index execution, and replaces untraceable benchmark claims with
contract-checked measurements.

Breaking behavior

  • GFQL absent labels and properties now use one strictness contract across
    validation, local execution, and remote execution: "strict" raises,
    "warn" (the new default) warns once per absent name and resolves it to null,
    and "quiet" has the same openCypher answer without warnings. Legacy
    strict=True / strict=False remain aliases for "strict" / "quiet".

Correctness and safety

  • Fixed silent multiplicity errors in whole-entity returns, seeded hops, and
    OPTIONAL MATCH; aligned endpoint closure, null endpoints, variable-length
    paths, aggregate types/errors, temporal expressions, and index invalidation
    across engines.
  • Remote GFQL/Python now preserves typed error surfaces, rejects unsupported
    engines before credentials/uploads/requests, preserves None filters and
    output parameters, and refuses lossy CSV decoding instead of silently
    rewriting values.
  • Graph-preserving Cypher CALL returns the requested Polars engine instead of
    leaking pandas frames. Explicit Polars-GPU paths no longer report CPU fast
    paths as GPU execution.

Native Polars, indexing, and performance

  • engine="auto" follows bound Polars frames into the native Polars engine and
    can target Polars GPU for genuinely usable all-cuDF inputs.
  • Added native directed unbounded variable-length bindings, secondary node
    property indexes, verified column-stat and degree facts, index-planner
    diagnostics, and fast-path engagement in gfql_explain.
  • Reduced repeated compilation, eager materialization, redundant semi-joins,
    wide projections, and degree-table work in grouped aggregates and two-hop
    count(*), with proof-gated declines to the established general paths.

Benchmarks and documentation

  • The GFQL q1–q9 board and filter → PageRank → filter page now render from a
    vendored pyg-bench artifact plus contract v3. CI rejects stale, diagnostic,
    disclosure-dropping, or unproven derived numbers.
  • The completed 30,494,866-edge GPlus Neo4j + GDS arm reports a direct 354.47 s
    median-of-slot-medians with exact selected-node parity. No GFQL-vs-Neo4j
    ratio is published because the profiles differ: Neo4j includes server round
    trips and rebuilds its GDS projection per iteration, while GFQL retains
    resident frames.
  • Removed benchmark figures without surviving raw measurements, commits,
    environments, or reproducible derivations; restored reproducible charts and
    added/updated GFQL strictness, engine, indexing, performance, and benchmark
    guidance.

Release assurance and follow-ups

  • Exact-head CI covers Python 3.8–3.14, GFQL/TCK, Polars 3.9–3.14, compatibility,
    AI/UMAP, Spark, Neo4j, package build, docs, benchmark contracts, changed-line
    coverage, actionlint/zizmor, and Read the Docs.
  • GPU claims remain bounded by the repository's documented lack of a public
    cuDF CI lane; no new unsupported GPU-wide claim is made here.
  • Non-blocking maintenance follow-ups: Spark Python 3.14 security-pin refresh
    #2014 and Node
    24-native GitHub Actions upgrades
    #2015.

Links