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=Falseremain 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, preservesNonefilters and
output parameters, and refuses lossy CSV decoding instead of silently
rewriting values. - Graph-preserving Cypher
CALLreturns 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 ingfql_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.