mirror of
https://github.com/ModernRelay/omnigraph.git
synced 2026-07-03 02:51:04 +02:00
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:
parent
2d34d7c432
commit
b38b36e48f
11 changed files with 101 additions and 34 deletions
|
|
@ -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`.
|
`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`
|
**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)
|
**Storage substrate:** Lance 7.x (columnar, versioned, branchable)
|
||||||
**License:** MIT
|
**License:** MIT
|
||||||
|
|
|
||||||
14
Cargo.lock
generated
14
Cargo.lock
generated
|
|
@ -4851,7 +4851,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "omnigraph-api-types"
|
name = "omnigraph-api-types"
|
||||||
version = "0.7.0"
|
version = "0.7.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"omnigraph-compiler",
|
"omnigraph-compiler",
|
||||||
"omnigraph-engine",
|
"omnigraph-engine",
|
||||||
|
|
@ -4862,7 +4862,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "omnigraph-cli"
|
name = "omnigraph-cli"
|
||||||
version = "0.7.0"
|
version = "0.7.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"assert_cmd",
|
"assert_cmd",
|
||||||
"clap",
|
"clap",
|
||||||
|
|
@ -4886,7 +4886,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "omnigraph-cluster"
|
name = "omnigraph-cluster"
|
||||||
version = "0.7.0"
|
version = "0.7.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fail",
|
"fail",
|
||||||
"omnigraph-compiler",
|
"omnigraph-compiler",
|
||||||
|
|
@ -4904,7 +4904,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "omnigraph-compiler"
|
name = "omnigraph-compiler"
|
||||||
version = "0.7.0"
|
version = "0.7.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ahash",
|
"ahash",
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
|
|
@ -4923,7 +4923,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "omnigraph-engine"
|
name = "omnigraph-engine"
|
||||||
version = "0.7.0"
|
version = "0.7.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arc-swap",
|
"arc-swap",
|
||||||
"arrow-array",
|
"arrow-array",
|
||||||
|
|
@ -4967,7 +4967,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "omnigraph-policy"
|
name = "omnigraph-policy"
|
||||||
version = "0.7.0"
|
version = "0.7.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cedar-policy",
|
"cedar-policy",
|
||||||
"clap",
|
"clap",
|
||||||
|
|
@ -4980,7 +4980,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "omnigraph-server"
|
name = "omnigraph-server"
|
||||||
version = "0.7.0"
|
version = "0.7.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arc-swap",
|
"arc-swap",
|
||||||
"async-trait",
|
"async-trait",
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "omnigraph-api-types"
|
name = "omnigraph-api-types"
|
||||||
version = "0.7.0"
|
version = "0.7.1"
|
||||||
edition = "2024"
|
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."
|
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"
|
license = "MIT"
|
||||||
|
|
@ -9,8 +9,8 @@ homepage = "https://github.com/ModernRelay/omnigraph"
|
||||||
documentation = "https://docs.rs/omnigraph-api-types"
|
documentation = "https://docs.rs/omnigraph-api-types"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.0" }
|
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.1" }
|
||||||
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.0" }
|
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.1" }
|
||||||
serde = { workspace = true }
|
serde = { workspace = true }
|
||||||
serde_json = { workspace = true }
|
serde_json = { workspace = true }
|
||||||
utoipa = { workspace = true }
|
utoipa = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "omnigraph-cli"
|
name = "omnigraph-cli"
|
||||||
version = "0.7.0"
|
version = "0.7.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
description = "CLI for the Omnigraph graph database."
|
description = "CLI for the Omnigraph graph database."
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
@ -13,12 +13,12 @@ name = "omnigraph"
|
||||||
path = "src/main.rs"
|
path = "src/main.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.0" }
|
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.1" }
|
||||||
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.0" }
|
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.1" }
|
||||||
omnigraph-api-types = { path = "../omnigraph-api-types", version = "0.7.0" }
|
omnigraph-api-types = { path = "../omnigraph-api-types", version = "0.7.1" }
|
||||||
omnigraph-cluster = { path = "../omnigraph-cluster", version = "0.7.0" }
|
omnigraph-cluster = { path = "../omnigraph-cluster", version = "0.7.1" }
|
||||||
omnigraph-policy = { path = "../omnigraph-policy", version = "0.7.0" }
|
omnigraph-policy = { path = "../omnigraph-policy", version = "0.7.1" }
|
||||||
omnigraph-server = { path = "../omnigraph-server", version = "0.7.0" }
|
omnigraph-server = { path = "../omnigraph-server", version = "0.7.1" }
|
||||||
clap = { workspace = true }
|
clap = { workspace = true }
|
||||||
color-eyre = { workspace = true }
|
color-eyre = { workspace = true }
|
||||||
serde = { workspace = true }
|
serde = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "omnigraph-cluster"
|
name = "omnigraph-cluster"
|
||||||
version = "0.7.0"
|
version = "0.7.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
description = "Cluster configuration validation, planning, and config-only apply for Omnigraph."
|
description = "Cluster configuration validation, planning, and config-only apply for Omnigraph."
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
@ -14,8 +14,8 @@ documentation = "https://docs.rs/omnigraph-cluster"
|
||||||
failpoints = ["dep:fail", "fail/failpoints", "omnigraph/failpoints"]
|
failpoints = ["dep:fail", "fail/failpoints", "omnigraph/failpoints"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.0" }
|
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.1" }
|
||||||
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.0" }
|
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.1" }
|
||||||
fail = { workspace = true, optional = true }
|
fail = { workspace = true, optional = true }
|
||||||
serde = { workspace = true }
|
serde = { workspace = true }
|
||||||
serde_json = { workspace = true }
|
serde_json = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "omnigraph-compiler"
|
name = "omnigraph-compiler"
|
||||||
version = "0.7.0"
|
version = "0.7.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
description = "Schema/query compiler for Omnigraph. Zero Lance dependency."
|
description = "Schema/query compiler for Omnigraph. Zero Lance dependency."
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "omnigraph-policy"
|
name = "omnigraph-policy"
|
||||||
version = "0.7.0"
|
version = "0.7.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
description = "Policy / authorization layer for Omnigraph — Cedar-backed PolicyEngine, PolicyChecker trait, ResourceScope enum."
|
description = "Policy / authorization layer for Omnigraph — Cedar-backed PolicyEngine, PolicyChecker trait, ResourceScope enum."
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "omnigraph-server"
|
name = "omnigraph-server"
|
||||||
version = "0.7.0"
|
version = "0.7.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
description = "HTTP server for the Omnigraph graph database."
|
description = "HTTP server for the Omnigraph graph database."
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
@ -19,11 +19,11 @@ default = []
|
||||||
aws = ["dep:aws-config", "dep:aws-sdk-secretsmanager"]
|
aws = ["dep:aws-config", "dep:aws-sdk-secretsmanager"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.0" }
|
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.7.1" }
|
||||||
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.0" }
|
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.1" }
|
||||||
omnigraph-policy = { path = "../omnigraph-policy", version = "0.7.0" }
|
omnigraph-policy = { path = "../omnigraph-policy", version = "0.7.1" }
|
||||||
omnigraph-api-types = { path = "../omnigraph-api-types", version = "0.7.0" }
|
omnigraph-api-types = { path = "../omnigraph-api-types", version = "0.7.1" }
|
||||||
omnigraph-cluster = { path = "../omnigraph-cluster", version = "0.7.0" }
|
omnigraph-cluster = { path = "../omnigraph-cluster", version = "0.7.1" }
|
||||||
axum = { workspace = true }
|
axum = { workspace = true }
|
||||||
clap = { workspace = true }
|
clap = { workspace = true }
|
||||||
color-eyre = { workspace = true }
|
color-eyre = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "omnigraph-engine"
|
name = "omnigraph-engine"
|
||||||
version = "0.7.0"
|
version = "0.7.1"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
description = "Runtime engine for the Omnigraph graph database."
|
description = "Runtime engine for the Omnigraph graph database."
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
@ -16,8 +16,8 @@ default = []
|
||||||
failpoints = ["dep:fail", "fail/failpoints"]
|
failpoints = ["dep:fail", "fail/failpoints"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.0" }
|
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.1" }
|
||||||
omnigraph-policy = { path = "../omnigraph-policy", version = "0.7.0" }
|
omnigraph-policy = { path = "../omnigraph-policy", version = "0.7.1" }
|
||||||
lance = { workspace = true }
|
lance = { workspace = true }
|
||||||
lance-datafusion = { workspace = true }
|
lance-datafusion = { workspace = true }
|
||||||
datafusion = { workspace = true }
|
datafusion = { workspace = true }
|
||||||
|
|
@ -52,7 +52,7 @@ chrono = { workspace = true }
|
||||||
arc-swap = { workspace = true }
|
arc-swap = { workspace = true }
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.0" }
|
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.7.1" }
|
||||||
tokio = { workspace = true }
|
tokio = { workspace = true }
|
||||||
lance-namespace-impls = { workspace = true }
|
lance-namespace-impls = { workspace = true }
|
||||||
lance-io = "7.0.0"
|
lance-io = "7.0.0"
|
||||||
|
|
|
||||||
67
docs/releases/v0.7.1.md
Normal file
67
docs/releases/v0.7.1.md
Normal 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.
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
"name": "MIT",
|
"name": "MIT",
|
||||||
"identifier": "MIT"
|
"identifier": "MIT"
|
||||||
},
|
},
|
||||||
"version": "0.7.0"
|
"version": "0.7.1"
|
||||||
},
|
},
|
||||||
"paths": {
|
"paths": {
|
||||||
"/graphs": {
|
"/graphs": {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue