mirror of
https://github.com/ModernRelay/omnigraph.git
synced 2026-07-12 03:12:11 +02:00
release: v0.8.1
Version bump across all seven workspace crates + path-dep constraints, Cargo.lock, openapi.json, and the AGENTS.md surveyed version (also restores the RFC-process row in the topic index that was dropped during branch juggling). Release notes: docs/releases/v0.8.1.md. Channel note: crates.io publication is deferred for this release — the substrate is a rev-pinned Lance pre-release (git dependency), which published crates cannot reference. publish-crates.yml gains a self-healing guard that skips cleanly while the pin is a git dep and resumes automatically when the dependency returns to a registry version (Lance 9.0.0 stable → v0.9.0); a workflow_dispatch catch-up can then publish any skipped tag. Binaries, Homebrew, and the installer ship normally via release.yml.
This commit is contained in:
parent
ca2ad974e1
commit
e415338acb
12 changed files with 148 additions and 34 deletions
15
.github/workflows/publish-crates.yml
vendored
15
.github/workflows/publish-crates.yml
vendored
|
|
@ -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
|
||||
|
|
@ -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: |
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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/) |
|
||||
|
||||
---
|
||||
|
|
|
|||
14
Cargo.lock
generated
14
Cargo.lock
generated
|
|
@ -4962,7 +4962,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "omnigraph-api-types"
|
||||
version = "0.8.0"
|
||||
version = "0.8.1"
|
||||
dependencies = [
|
||||
"omnigraph-compiler",
|
||||
"omnigraph-engine",
|
||||
|
|
@ -4973,7 +4973,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "omnigraph-cli"
|
||||
version = "0.8.0"
|
||||
version = "0.8.1"
|
||||
dependencies = [
|
||||
"assert_cmd",
|
||||
"clap",
|
||||
|
|
@ -4997,7 +4997,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "omnigraph-cluster"
|
||||
version = "0.8.0"
|
||||
version = "0.8.1"
|
||||
dependencies = [
|
||||
"fail",
|
||||
"omnigraph-compiler",
|
||||
|
|
@ -5016,7 +5016,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "omnigraph-compiler"
|
||||
version = "0.8.0"
|
||||
version = "0.8.1"
|
||||
dependencies = [
|
||||
"ahash",
|
||||
"arrow-array",
|
||||
|
|
@ -5035,7 +5035,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "omnigraph-engine"
|
||||
version = "0.8.0"
|
||||
version = "0.8.1"
|
||||
dependencies = [
|
||||
"arc-swap",
|
||||
"arrow-array",
|
||||
|
|
@ -5082,7 +5082,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "omnigraph-policy"
|
||||
version = "0.8.0"
|
||||
version = "0.8.1"
|
||||
dependencies = [
|
||||
"cedar-policy",
|
||||
"clap",
|
||||
|
|
@ -5095,7 +5095,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "omnigraph-server"
|
||||
version = "0.8.0"
|
||||
version = "0.8.1"
|
||||
dependencies = [
|
||||
"arc-swap",
|
||||
"async-trait",
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -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 }
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -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 }
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
98
docs/releases/v0.8.1.md
Normal file
98
docs/releases/v0.8.1.md
Normal file
|
|
@ -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.
|
||||
|
|
@ -7,7 +7,7 @@
|
|||
"name": "MIT",
|
||||
"identifier": "MIT"
|
||||
},
|
||||
"version": "0.8.0"
|
||||
"version": "0.8.1"
|
||||
},
|
||||
"paths": {
|
||||
"/graphs": {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue