release: v0.7.1 (#290)

Patch release over v0.7.0: three correctness fixes (#283 camelCase filters,
#284 cluster-apply crash-loop, #277 branch-merge OOM on embedding tables), the
#280 queries-list catalog-metadata improvement, and the #268 warm-read perf
fix. No breaking changes, no on-disk format change, no migration.

Version coherence: all 7 crate manifests + path-dep constraints, Cargo.lock,
openapi.json, and AGENTS.md surveyed version bumped 0.7.0 -> 0.7.1. Full
workspace gate green (1472 tests).


Claude-Session: https://claude.ai/code/session_01FQ1Hf4eXLsJmeLUkTYBEw7

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Andrew Altshuler 2026-06-19 23:12:44 +03:00 committed by GitHub
parent 2d34d7c432
commit b38b36e48f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 101 additions and 34 deletions

View file

@ -16,7 +16,7 @@ Tools that support `@`-imports (Claude Code) auto-include all three files via th
`CLAUDE.md` is a symlink to this file — there is exactly one source of truth. Edit `AGENTS.md`.
**Version surveyed:** 0.7.0
**Version surveyed:** 0.7.1
**Workspace crates:** `omnigraph-compiler`, `omnigraph` (engine), `omnigraph-policy`, `omnigraph-api-types` (shared HTTP wire DTOs), `omnigraph-cluster`, `omnigraph-cli`, `omnigraph-server`
**Storage substrate:** Lance 7.x (columnar, versioned, branchable)
**License:** MIT

14
Cargo.lock generated
View file

@ -4851,7 +4851,7 @@ dependencies = [
[[package]]
name = "omnigraph-api-types"
version = "0.7.0"
version = "0.7.1"
dependencies = [
"omnigraph-compiler",
"omnigraph-engine",
@ -4862,7 +4862,7 @@ dependencies = [
[[package]]
name = "omnigraph-cli"
version = "0.7.0"
version = "0.7.1"
dependencies = [
"assert_cmd",
"clap",
@ -4886,7 +4886,7 @@ dependencies = [
[[package]]
name = "omnigraph-cluster"
version = "0.7.0"
version = "0.7.1"
dependencies = [
"fail",
"omnigraph-compiler",
@ -4904,7 +4904,7 @@ dependencies = [
[[package]]
name = "omnigraph-compiler"
version = "0.7.0"
version = "0.7.1"
dependencies = [
"ahash",
"arrow-array",
@ -4923,7 +4923,7 @@ dependencies = [
[[package]]
name = "omnigraph-engine"
version = "0.7.0"
version = "0.7.1"
dependencies = [
"arc-swap",
"arrow-array",
@ -4967,7 +4967,7 @@ dependencies = [
[[package]]
name = "omnigraph-policy"
version = "0.7.0"
version = "0.7.1"
dependencies = [
"cedar-policy",
"clap",
@ -4980,7 +4980,7 @@ dependencies = [
[[package]]
name = "omnigraph-server"
version = "0.7.0"
version = "0.7.1"
dependencies = [
"arc-swap",
"async-trait",

View file

@ -1,6 +1,6 @@
[package]
name = "omnigraph-api-types"
version = "0.7.0"
version = "0.7.1"
edition = "2024"
description = "Shared HTTP wire DTOs for Omnigraph — request/response types and engine-result → DTO mappings used by both omnigraph-server and omnigraph-cli (RFC-009). Plain serde/utoipa types; no transport or server internals."
license = "MIT"
@ -9,8 +9,8 @@ homepage = "https://github.com/ModernRelay/omnigraph"
documentation = "https://docs.rs/omnigraph-api-types"
[dependencies]
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.0" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.0" }
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.1" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.1" }
serde = { workspace = true }
serde_json = { workspace = true }
utoipa = { workspace = true }

View file

@ -1,6 +1,6 @@
[package]
name = "omnigraph-cli"
version = "0.7.0"
version = "0.7.1"
edition = "2024"
description = "CLI for the Omnigraph graph database."
license = "MIT"
@ -13,12 +13,12 @@ name = "omnigraph"
path = "src/main.rs"
[dependencies]
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.0" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.0" }
omnigraph-api-types = { path = "../omnigraph-api-types", version = "0.7.0" }
omnigraph-cluster = { path = "../omnigraph-cluster", version = "0.7.0" }
omnigraph-policy = { path = "../omnigraph-policy", version = "0.7.0" }
omnigraph-server = { path = "../omnigraph-server", version = "0.7.0" }
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.1" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.1" }
omnigraph-api-types = { path = "../omnigraph-api-types", version = "0.7.1" }
omnigraph-cluster = { path = "../omnigraph-cluster", version = "0.7.1" }
omnigraph-policy = { path = "../omnigraph-policy", version = "0.7.1" }
omnigraph-server = { path = "../omnigraph-server", version = "0.7.1" }
clap = { workspace = true }
color-eyre = { workspace = true }
serde = { workspace = true }

View file

@ -1,6 +1,6 @@
[package]
name = "omnigraph-cluster"
version = "0.7.0"
version = "0.7.1"
edition = "2024"
description = "Cluster configuration validation, planning, and config-only apply for Omnigraph."
license = "MIT"
@ -14,8 +14,8 @@ documentation = "https://docs.rs/omnigraph-cluster"
failpoints = ["dep:fail", "fail/failpoints", "omnigraph/failpoints"]
[dependencies]
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.0" }
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.0" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.1" }
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.1" }
fail = { workspace = true, optional = true }
serde = { workspace = true }
serde_json = { workspace = true }

View file

@ -1,6 +1,6 @@
[package]
name = "omnigraph-compiler"
version = "0.7.0"
version = "0.7.1"
edition = "2024"
description = "Schema/query compiler for Omnigraph. Zero Lance dependency."
license = "MIT"

View file

@ -1,6 +1,6 @@
[package]
name = "omnigraph-policy"
version = "0.7.0"
version = "0.7.1"
edition = "2024"
description = "Policy / authorization layer for Omnigraph — Cedar-backed PolicyEngine, PolicyChecker trait, ResourceScope enum."
license = "MIT"

View file

@ -1,6 +1,6 @@
[package]
name = "omnigraph-server"
version = "0.7.0"
version = "0.7.1"
edition = "2024"
description = "HTTP server for the Omnigraph graph database."
license = "MIT"
@ -19,11 +19,11 @@ default = []
aws = ["dep:aws-config", "dep:aws-sdk-secretsmanager"]
[dependencies]
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.0" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.0" }
omnigraph-policy = { path = "../omnigraph-policy", version = "0.7.0" }
omnigraph-api-types = { path = "../omnigraph-api-types", version = "0.7.0" }
omnigraph-cluster = { path = "../omnigraph-cluster", version = "0.7.0" }
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.1" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.1" }
omnigraph-policy = { path = "../omnigraph-policy", version = "0.7.1" }
omnigraph-api-types = { path = "../omnigraph-api-types", version = "0.7.1" }
omnigraph-cluster = { path = "../omnigraph-cluster", version = "0.7.1" }
axum = { workspace = true }
clap = { workspace = true }
color-eyre = { workspace = true }

View file

@ -1,6 +1,6 @@
[package]
name = "omnigraph-engine"
version = "0.7.0"
version = "0.7.1"
edition = "2024"
description = "Runtime engine for the Omnigraph graph database."
license = "MIT"
@ -16,8 +16,8 @@ default = []
failpoints = ["dep:fail", "fail/failpoints"]
[dependencies]
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.0" }
omnigraph-policy = { path = "../omnigraph-policy", version = "0.7.0" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.1" }
omnigraph-policy = { path = "../omnigraph-policy", version = "0.7.1" }
lance = { workspace = true }
lance-datafusion = { workspace = true }
datafusion = { workspace = true }
@ -52,7 +52,7 @@ chrono = { workspace = true }
arc-swap = { workspace = true }
[dev-dependencies]
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.0" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.1" }
tokio = { workspace = true }
lance-namespace-impls = { workspace = true }
lance-io = "7.0.0"

67
docs/releases/v0.7.1.md Normal file
View file

@ -0,0 +1,67 @@
# Omnigraph v0.7.1
A patch release on top of v0.7.0: three correctness fixes (camelCase filters,
cluster-apply crash loops, branch-merge OOM on embedding tables), one CLI
catalog-metadata improvement, and a warm-read performance fix. No breaking
changes, no on-disk format change, and no migration — drop-in over v0.7.0.
## Fixes
- **camelCase property filters now execute (#283).** A query — or a chained
mutation — that filtered on a camelCase schema field (e.g. `repoName`) linted
and planned cleanly but failed at run time with `No field named reponame.
Column names are case sensitive.` The identifier's case was destroyed at two
engine→Lance boundaries: the read-filter pushdown built the column with a
case-normalizing constructor, and the pending-batch mutation scan re-parsed
the predicate through a normalizing SQL context. Both now preserve case (the
read path uses a case-preserving column reference; the pending scan disables
SQL identifier normalization), so camelCase fields work consistently in read
and write predicates and a camelCase `@index` equality still routes to the
scalar index. The fix is correct-by-construction rather than a per-query
guard; a regression test pins index routing so a silent full-scan fallback
can't slip back in.
- **`cluster apply` no longer crash-loops a booting server (#284).** Applying a
schema change while a graph had non-main (agent/review) branches, or a
migration that needed a backfill, could throw a freshly-booting
`omnigraph-server --cluster` into an unescapable crash loop. Neither input is
an engine bug — the engine rejects both cleanly and before moving any graph
state — but `cluster apply` wrote a recovery sidecar before calling the
engine and left it in place on the clean rejection, and the server refuses to
boot while a sidecar is pending. The asymmetric-cleanup path is fixed so a
pre-movement rejection leaves no stale sidecar, breaking the loop.
- **Branch-merge fast-forward no longer OOMs on embedding tables (#277).** A
branch→main fast-forward merge of a forked, embedding-bearing table
re-derived the whole branch through a single Lance `merge_insert` — a
full-outer hash join over the entire delta — which exhausted the DataFusion
memory pool on high-dimensional embeddings (e.g. 8k rows × 3072-dim) and hung
or failed the merge. New rows now stream through `stage_append` (no hash
join), only genuinely-changed rows are upserted, embeddings are no longer
stringified to diff them, and index coverage defers to the reconciler, so a
fast-forward merge completes in bounded work. The three-way merge path is
unchanged.
## Improvements
- **`omnigraph queries list` surfaces stored-query `@description` /
`@instruction` (#280).** The CLI now shows a stored query's catalog metadata —
what it does and how to invoke it — in both human and `--json` output,
matching what `GET /queries` already returned. Previously both fields were
silently dropped on the CLI side.
- **Warm reads no longer pay an O(history) metadata tax (#268).** Warm reads
used to re-derive per-query metadata (coordinator re-open, `__manifest` +
commit-graph re-scans, per-table re-open, double schema validation) on a cost
that scaled with commit history and never warmed up. A warm same-branch read
now does one cheap version probe, one schema read, and zero table opens on a
warm repeat (warm coordinator reuse, open-by-location+version, validate-once,
held `Dataset` handles + one shared Lance `Session` per graph). This also
closes a commit-DAG fork where a same-branch write after an external commit
could append off a stale cached head.
## Upgrade notes
Drop-in over v0.7.0 — no configuration, schema, or data changes. Upgrade the
server and CLI together as usual. Graphs created on v0.7.0 read and write
identically on v0.7.1.

View file

@ -7,7 +7,7 @@
"name": "MIT",
"identifier": "MIT"
},
"version": "0.7.0"
"version": "0.7.1"
},
"paths": {
"/graphs": {