Skip to content

Release v0.13.0 - #14

Merged
bhensley5 merged 1 commit into
mainfrom
release/v0.13.0
Jun 13, 2026
Merged

Release v0.13.0#14
bhensley5 merged 1 commit into
mainfrom
release/v0.13.0

Conversation

@bhensley5

Copy link
Copy Markdown
Owner

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

[0.13.0] - 2026-06-13

Breaking Changes

Compound Secondary Index APIs

  • Property-index APIs now accept field-list specs. The Rust, Node.js, and Python ensure_*_property_index, drop_*_property_index, and list APIs now use one unified declaration shape for single-field and compound secondary indexes instead of the older (label, property, kind) signature.
  • GQL property-index DDL now distinguishes metadata functions from property fields. Index field lists use dot access for user properties and function calls for metadata fields, matching the new GQL metadata rule.

GQL Metadata Syntax

  • Function calls are now the only GQL metadata surface. Metadata reads and writes now use functions such as elementKey(n), updatedAt(n), weight(r), validFrom(r), validTo(r), id(startNode(r)), and id(endNode(r)).
  • Dot access is now always a user-property lookup. Expressions such as n.updated_at, n.key, r.valid_from, and n.weight now read ordinary properties with those names instead of engine metadata.
  • GQL CREATE and MERGE node identity maps now use elementKey. Node creation and keyed merge maps use {elementKey: ...} for the node key; key is now an ordinary property name.
  • Path and scalar helper names are camelCase. Path helpers now use startNode, endNode, nodeIds, and edgeIds; scalar conversion helpers now use toString, toInteger, and toFloat.

Added

Compound Secondary Indexes

  • Manifest-backed compound secondary indexes. Added ordered node and edge secondary-index declarations over one to eight fields, combining user properties with supported metadata fields such as node key, IDs, weights, timestamps, endpoints, and edge validity windows.
  • Tuple-capable sidecars. Added a tuple secondary-index sidecar family for multi-field and metadata-field declarations while preserving the hardened single-property sidecars for one-property declarations.
  • Compound-aware planning. Node, edge, graph-row, and GQL planning can use Ready declarations for equality prefixes, bounded IN expansion, and equality-prefix-plus-one-range query shapes, with final visible-record verification preserved for correctness.
  • Compound index DDL and connector parity. Rust, Node.js, Python, async connector APIs, TypeScript declarations, Python stubs, GQL CREATE / DROP / SHOW PROPERTY INDEXES, explain output, and benchmark scenarios now cover compound declarations.

Changed

Secondary Index Lifecycle

  • Secondary-index lifecycle is shared across single-field and compound declarations. Ensures, drops, retry from failed declarations, active and frozen memtable maintenance, flush, compaction, reopen validation, background builds, optional refresh, drop cleanup, and planner stats now use one declaration lifecycle.
  • Index explain and SHOW output surface ordered fields. Public diagnostics report declaration fields, prefix eligibility, range eligibility, lifecycle state, and planner warnings for compound declarations without exposing internal token IDs.

GQL Metadata Model

  • Metadata parsing, validation, lowering, and execution now share one resolver. GQL expression handling and property-index DDL use the same metadata-field mapping, keeping function spelling, target-kind checks, and display output aligned.
  • Metadata SET targets use function l-values. SET weight(n) = ..., SET weight(r) = ..., SET validFrom(r) = ..., and SET validTo(r) = ... route to the existing metadata mutation paths, including MERGE ON CREATE SET and MERGE ON MATCH SET.
  • Pattern maps can filter metadata directly. MATCH maps route elementKey, weight, validFrom, and validTo through native metadata filters where valid, while snake_case keys remain ordinary properties.

Fixed

  • Compound index correctness hardening. Compound declarations stay in sync across active writes, frozen memtables, flush, compaction, background build, reopen repair, missing/corrupt sidecar fallback, stale posting verification, label changes, tombstones, and prune visibility.
  • Metadata syntax hardening. Fixed endpoint-id validation over projection aliases, kind checks for reused-alias pattern maps, metadata explain spelling, and mutation-return validation for endpoint ID functions.
  • Connector and docs parity. Updated Rust, Node.js, Python, benchmark, README, getting-started, API reference, architecture overview, and GQL subset examples for compound indexes and function-style metadata.

## What's New
- Add manifest-backed compound secondary indexes over ordered node and edge field tuples.
- Add tuple-capable secondary-index sidecars for multi-field and metadata-field declarations.
- Add compound-aware planning for equality prefixes, bounded IN expansion, and equality-prefix-plus-one-range shapes.
- Make function calls the only GQL metadata surface while dot access is always user properties.

## Improvements
- Share secondary-index lifecycle across single-field and compound declarations.
- Align GQL expression metadata and property-index DDL on one metadata resolver.
- Support metadata SET targets through function l-values.

## Documentation
- Update README, getting-started, API reference, architecture overview, GQL docs, connector docs, examples, and changelog for v0.13.0.
@bhensley5
bhensley5 marked this pull request as ready for review June 13, 2026 19:23
@bhensley5
bhensley5 merged commit 72cd71f into main Jun 13, 2026
3 checks passed
@bhensley5
bhensley5 deleted the release/v0.13.0 branch June 13, 2026 19:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant