Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .github/workflows/publish-crates.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ jobs:
echo "CARGO_REGISTRY_TOKEN is not set; skipping crates.io publish."
echo "CARGO_PUBLISH_SKIP=1" >> "$GITHUB_ENV"


- name: Resolve ref
if: env.CARGO_PUBLISH_SKIP != '1'
id: ref
Expand All @@ -50,6 +51,20 @@ jobs:
with:
ref: ${{ steps.ref.outputs.ref }}

# crates.io rejects git dependencies, so while the storage substrate is
# rev-pinned to a Lance pre-release (git dep in the workspace manifest)
# registry publication is deliberately deferred — binaries/Homebrew still
# ship from release.yml. This self-heals: the step stops matching the
# moment the dependency returns to a crates.io version (Lance 9 stable),
# and a workflow_dispatch catch-up run can then publish the skipped tag.
- name: Skip while the storage substrate is git-pinned
if: env.CARGO_PUBLISH_SKIP != '1'
run: |
if grep -qE '^lance = \{ git' Cargo.toml; then
echo "lance is git-pinned (pre-release substrate); deferring crates.io publish for this tag."
echo "CARGO_PUBLISH_SKIP=1" >> "$GITHUB_ENV"
fi

- name: Install Linux dependencies
if: env.CARGO_PUBLISH_SKIP != '1'
run: |
Expand Down
3 changes: 2 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.8.0
**Version surveyed:** 0.8.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 9.x (columnar, versioned, branchable; 9.0.0-beta.15 git-rev pin until 9.0.0 stable)
**License:** MIT
Expand Down Expand Up @@ -106,6 +106,7 @@ Full diagram and concurrency model: [docs/dev/architecture.md](docs/dev/architec
| CI / release workflows | [docs/dev/ci.md](docs/dev/ci.md) |
| Branch protection policy (declarative, applied via `scripts/apply-branch-protection.sh`) | [docs/dev/branch-protection.md](docs/dev/branch-protection.md) |
| Constants & tunables cheat sheet | [docs/user/reference/constants.md](docs/user/reference/constants.md) |
| RFC process — public contribution track (substantial / irreversible changes) | [docs/rfcs/README.md](docs/rfcs/README.md) |
| Per-version release notes | [docs/releases/](docs/releases/) |

---
Expand Down
14 changes: 7 additions & 7 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions crates/omnigraph-api-types/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "omnigraph-api-types"
version = "0.8.0"
version = "0.8.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"
Expand All @@ -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.8.0" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.8.0" }
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.8.1" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.8.1" }
serde = { workspace = true }
serde_json = { workspace = true }
utoipa = { workspace = true }
14 changes: 7 additions & 7 deletions crates/omnigraph-cli/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "omnigraph-cli"
version = "0.8.0"
version = "0.8.1"
edition = "2024"
description = "CLI for the Omnigraph graph database."
license = "MIT"
Expand All @@ -13,12 +13,12 @@ name = "omnigraph"
path = "src/main.rs"

[dependencies]
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.8.0" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.8.0" }
omnigraph-api-types = { path = "../omnigraph-api-types", version = "0.8.0" }
omnigraph-cluster = { path = "../omnigraph-cluster", version = "0.8.0" }
omnigraph-policy = { path = "../omnigraph-policy", version = "0.8.0" }
omnigraph-server = { path = "../omnigraph-server", version = "0.8.0" }
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.8.1" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.8.1" }
omnigraph-api-types = { path = "../omnigraph-api-types", version = "0.8.1" }
omnigraph-cluster = { path = "../omnigraph-cluster", version = "0.8.1" }
omnigraph-policy = { path = "../omnigraph-policy", version = "0.8.1" }
omnigraph-server = { path = "../omnigraph-server", version = "0.8.1" }
clap = { workspace = true }
color-eyre = { workspace = true }
serde = { workspace = true }
Expand Down
6 changes: 3 additions & 3 deletions crates/omnigraph-cluster/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "omnigraph-cluster"
version = "0.8.0"
version = "0.8.1"
edition = "2024"
description = "Cluster configuration validation, planning, and config-only apply for Omnigraph."
license = "MIT"
Expand All @@ -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.8.0" }
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.8.0" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.8.1" }
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.8.1" }
fail = { workspace = true, optional = true }
serde = { workspace = true }
serde_json = { workspace = true }
Expand Down
2 changes: 1 addition & 1 deletion crates/omnigraph-compiler/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "omnigraph-compiler"
version = "0.8.0"
version = "0.8.1"
edition = "2024"
description = "Schema/query compiler for Omnigraph. Zero Lance dependency."
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion crates/omnigraph-policy/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "omnigraph-policy"
version = "0.8.0"
version = "0.8.1"
edition = "2024"
description = "Policy / authorization layer for Omnigraph — Cedar-backed PolicyEngine, PolicyChecker trait, ResourceScope enum."
license = "MIT"
Expand Down
12 changes: 6 additions & 6 deletions crates/omnigraph-server/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "omnigraph-server"
version = "0.8.0"
version = "0.8.1"
edition = "2024"
description = "HTTP server for the Omnigraph graph database."
license = "MIT"
Expand All @@ -19,11 +19,11 @@ default = []
aws = ["dep:aws-config", "dep:aws-sdk-secretsmanager"]

[dependencies]
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.8.0" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.8.0" }
omnigraph-policy = { path = "../omnigraph-policy", version = "0.8.0" }
omnigraph-api-types = { path = "../omnigraph-api-types", version = "0.8.0" }
omnigraph-cluster = { path = "../omnigraph-cluster", version = "0.8.0" }
omnigraph = { package = "omnigraph-engine", path = "../omnigraph", version = "0.8.1" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.8.1" }
omnigraph-policy = { path = "../omnigraph-policy", version = "0.8.1" }
omnigraph-api-types = { path = "../omnigraph-api-types", version = "0.8.1" }
omnigraph-cluster = { path = "../omnigraph-cluster", version = "0.8.1" }
axum = { workspace = true }
clap = { workspace = true }
color-eyre = { workspace = true }
Expand Down
8 changes: 4 additions & 4 deletions crates/omnigraph/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "omnigraph-engine"
version = "0.8.0"
version = "0.8.1"
edition = "2024"
description = "Runtime engine for the Omnigraph graph database."
license = "MIT"
Expand All @@ -16,8 +16,8 @@ default = []
failpoints = ["dep:fail", "fail/failpoints"]

[dependencies]
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.8.0" }
omnigraph-policy = { path = "../omnigraph-policy", version = "0.8.0" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.8.1" }
omnigraph-policy = { path = "../omnigraph-policy", version = "0.8.1" }
lance = { workspace = true }
lance-core = { workspace = true }
lance-select = { workspace = true }
Expand Down Expand Up @@ -54,7 +54,7 @@ chrono = { workspace = true }
arc-swap = { workspace = true }

[dev-dependencies]
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.8.0" }
omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.8.1" }
tokio = { workspace = true }
lance-namespace-impls = { workspace = true }
# test-util gates IoStats.requests + assert_io_eq! (failure diagnostics only); dev-dep,
Expand Down
98 changes: 98 additions & 0 deletions docs/releases/v0.8.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# Omnigraph v0.8.1

A reliability and features release. The storage substrate moves to Lance
9.0.0-beta.15, adopting two upstream fixes that matter for embedding-heavy
workloads; filtered vector search now applies filters before the search;
schema migration learns enum widening; and the query language gains
undirected edge traversal. **The on-disk format is unchanged (internal schema
v4)** — v0.8.0 graphs are served as-is, no rebuild.

**Channel note:** this release ships as binaries, Homebrew, and the
installer. crates.io publication is deferred for one release: the substrate
is pinned to a Lance pre-release, which exists as a git tag rather than a
registry version, and published crates can only reference registry versions.
`cargo install` users can build the tag directly —
`cargo install --git https://github.com/ModernRelay/omnigraph --tag v0.8.1 omnigraph-cli`
— or use the installer. Registry publication resumes at v0.9.0 with Lance
9.0.0 stable.

## Highlights

- **Storage substrate: Lance 9.0.0-beta.15.** The Lance team resolved two
issues upstream that this release adopts (lance#7480, lance#7320); both
could surface on embedding-heavy graphs under routine write-then-maintain
patterns. If you have seen filtered reads fail with a record-batch length
error after refresh-style updates and deletes, or keyed lookups fail after
`optimize` on a recently-updated table, upgrading the binary resolves both
— **the data on disk was always intact, and no repair step is needed.**
The interim vendored patch omnigraph carried for the first issue is
retired now that the fix is upstream. The bump was validated against a
full review of the upstream changes (382 commits) plus the complete local
and CI test matrix, including S3 integration.

- **Filtered vector search returns what it should.** Combining a `match`
filter with `nearest()` (or `bm25()`) previously applied the filter after
the ANN top-k, so a selective filter could return far fewer rows than
requested. Filters now apply *before* the search: `limit k` means the
top-k of *matching* rows. Filtered search results will change — they are
now correct.

- **Undirected edge traversal.** `$a <edgeName> $b` matches an edge in either
direction with set semantics (a pair connected both ways appears once), for
same-endpoint-type edges (e.g. `Related: Issue -> Issue`); asymmetric edges
are rejected at typecheck (T22). Composes with hop bounds
(`$a <knows>{1,3} $b`) and `not { }` ("no edge in either direction"). One
pattern replaces the query-both-directions-and-merge workaround.

- **Enum widening in schema migration.** Adding variants to an `enum(...)`
property is now a supported, metadata-only migration step — `schema plan`
shows `extend enum`, `apply` touches no table data, and the new variants
are accepted immediately on every write surface. Narrowing, variant
renames, and enum↔String conversions still refuse (OG-MF-106).

- **Embedding validation hardened.** Non-finite embeddings (NaN/Inf) and
zero vectors are rejected at the client boundary instead of being stored;
the JSONL loader rejects non-numeric vector elements (previously coerced
to 0.0); and forcing the mock embedding provider over an explicitly
configured real one now logs a warning.

- **Blob-bearing tables rejoin maintenance.** With Lance 9's blob-column
compaction support, `optimize` now includes tables with `Blob` properties
— fragment reclamation and index folding cover them like any other table.

- **Self-service upgrade refusals.** Opening a graph from an older storage
format now names the release line that wrote it (e.g. "created by omnigraph
0.6.2 to 0.7.2") and the exact export → init → load commands, instead of
asking the operator to identify the right binary themselves.

## Behavior changes

- Filtered `nearest()`/`bm25()` result sets change (see above) — previously
missing results now appear.
- New inverted indexes are written in Lance's FTS v2 format (readable by
omnigraph ≥ 0.8.0 binaries), and text-search `AND` semantics were refined
upstream, so `match_text`/`bm25` rankings may shift slightly.
- Loads that previously succeeded with non-numeric vector elements or
non-finite embeddings now fail loudly at write time.

## Upgrade notes

- **No storage-format change.** v0.8.0 graphs open unchanged; downgrade to
v0.8.0 remains possible (same internal schema v4).
- Upgrading the binary is the complete fix for the two substrate issues
above — no data repair, no rebuild.
- The substrate is a rev-pinned Lance pre-release (9.0.0-beta.15), adopted
ahead of the stable release to deliver the fixes above promptly. v0.9.0
moves to Lance 9.0.0 stable.

## Developer-facing

- Scenario benchmark harness (`cargo bench -p omnigraph-engine --bench
scenarios`): cold subprocess runs measuring wall-clock + peak RSS, JSON-line
results with a persistent log — a decision instrument, never a CI gate.
- A gated cross-version upgrade test (`OMNIGRAPH_OLD_BIN`) proves a genuine
v3-format graph is refused with the release-named message and rebuilds via
the documented path; run on demand, not in CI.
- One dataset-open chokepoint (`instrumentation::open_dataset`) with the
shared per-graph Lance `Session` attached to write-side opens — the local
merge-scan cost term is now flat in commit history.
2 changes: 1 addition & 1 deletion openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"name": "MIT",
"identifier": "MIT"
},
"version": "0.8.0"
"version": "0.8.1"
},
"paths": {
"/graphs": {
Expand Down