diff --git a/Cargo.lock b/Cargo.lock index 7b9d36f..3daa7ce 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4505,7 +4505,7 @@ dependencies = [ [[package]] name = "omnigraph" -version = "0.1.0" +version = "0.2.0" dependencies = [ "arrow-array", "arrow-cast", @@ -4542,7 +4542,7 @@ dependencies = [ [[package]] name = "omnigraph-cli" -version = "0.1.0" +version = "0.2.0" dependencies = [ "assert_cmd", "clap", @@ -4562,7 +4562,7 @@ dependencies = [ [[package]] name = "omnigraph-compiler" -version = "0.1.0" +version = "0.2.0" dependencies = [ "ahash", "arrow-array", @@ -4583,7 +4583,7 @@ dependencies = [ [[package]] name = "omnigraph-server" -version = "0.1.0" +version = "0.2.0" dependencies = [ "axum", "cedar-policy", diff --git a/crates/omnigraph-cli/Cargo.toml b/crates/omnigraph-cli/Cargo.toml index df60889..af128cc 100644 --- a/crates/omnigraph-cli/Cargo.toml +++ b/crates/omnigraph-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "omnigraph-cli" -version = "0.1.0" +version = "0.2.0" edition = "2024" description = "CLI for the Omnigraph graph database." license = "MIT" @@ -10,9 +10,9 @@ name = "omnigraph" path = "src/main.rs" [dependencies] -omnigraph = { path = "../omnigraph", version = "0.1.0" } -omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.1.0" } -omnigraph-server = { path = "../omnigraph-server", version = "0.1.0" } +omnigraph = { path = "../omnigraph", version = "0.2.0" } +omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.2.0" } +omnigraph-server = { path = "../omnigraph-server", version = "0.2.0" } clap = { workspace = true } color-eyre = { workspace = true } serde = { workspace = true } diff --git a/crates/omnigraph-compiler/Cargo.toml b/crates/omnigraph-compiler/Cargo.toml index d6ac7ad..12f959a 100644 --- a/crates/omnigraph-compiler/Cargo.toml +++ b/crates/omnigraph-compiler/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "omnigraph-compiler" -version = "0.1.0" +version = "0.2.0" edition = "2024" description = "Schema/query compiler for Omnigraph. Zero Lance dependency." license = "MIT" diff --git a/crates/omnigraph-server/Cargo.toml b/crates/omnigraph-server/Cargo.toml index c4a83dd..fcdf4f6 100644 --- a/crates/omnigraph-server/Cargo.toml +++ b/crates/omnigraph-server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "omnigraph-server" -version = "0.1.0" +version = "0.2.0" edition = "2024" description = "HTTP server for the Omnigraph graph database." license = "MIT" @@ -10,8 +10,8 @@ name = "omnigraph-server" path = "src/main.rs" [dependencies] -omnigraph = { path = "../omnigraph", version = "0.1.0" } -omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.1.0" } +omnigraph = { path = "../omnigraph", version = "0.2.0" } +omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.2.0" } axum = { workspace = true } clap = { workspace = true } color-eyre = { workspace = true } diff --git a/crates/omnigraph/Cargo.toml b/crates/omnigraph/Cargo.toml index 3e2089b..defff18 100644 --- a/crates/omnigraph/Cargo.toml +++ b/crates/omnigraph/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "omnigraph" -version = "0.1.0" +version = "0.2.0" edition = "2024" description = "Lance-native graph database with git-style branching." license = "MIT" @@ -10,7 +10,7 @@ default = [] failpoints = ["dep:fail", "fail/failpoints"] [dependencies] -omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.1.0" } +omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.2.0" } lance = { workspace = true } lance-datafusion = { workspace = true } lance-file = { workspace = true } @@ -41,7 +41,7 @@ async-trait = { workspace = true } url = { workspace = true } [dev-dependencies] -omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.1.0" } +omnigraph-compiler = { path = "../omnigraph-compiler", version = "0.2.0" } tokio = { workspace = true } lance-namespace-impls = { workspace = true } serial_test = "3" diff --git a/docs/releases/v0.2.0.md b/docs/releases/v0.2.0.md new file mode 100644 index 0000000..7872ecf --- /dev/null +++ b/docs/releases/v0.2.0.md @@ -0,0 +1,86 @@ +# Omnigraph v0.2.0 + +Omnigraph v0.2.0 focuses on day-to-day operability: safer schema evolution, more capable mutation queries, better local and remote ergonomics, and a documented HTTP surface for clients and tooling. + +This release is especially relevant if you are running Omnigraph locally on RustFS or using the CLI and server together as a graph application backend. + +## Highlights + +### Schema planning and apply + +Schema changes can now move from planning to execution with first-class CLI and server support. + +- Added `omnigraph schema apply --schema ...` alongside `schema plan` +- Added `POST /schema/apply` on the server +- Added policy support for schema application through the `schema_apply` action +- Persisted accepted schema updates as part of a supported apply flow + +This makes schema evolution an actual product capability instead of a plan-only diagnostic. + +### Safer schema apply on live repos + +After the initial schema-apply rollout, the apply path was hardened to avoid clobbering concurrent writes and to preserve indexes during table rewrites. + +- Blocks writes while schema apply is in progress +- Verifies source heads before publishing rewritten tables +- Rebuilds the full expected index set after rewrite operations +- Keeps schema apply constrained to repos whose only branch is `main` + +The result is a much more defensible v1 schema migration path. + +### Multi-statement mutations + +Mutation queries can now contain multiple sequential statements that execute atomically within one run. + +Example: + +```gq +query add_and_link($name: String, $age: I32, $friend: String) { + insert Person { name: $name, age: $age } + insert Knows { from: $name, to: $friend } +} +``` + +This is a meaningful step toward richer write-side workflows without forcing multiple client round trips. + +### OpenAPI support + +The server now publishes an OpenAPI document at `/openapi.json`. + +- Added schema-backed endpoint documentation for the Omnigraph HTTP API +- Documented request and response types for the current server surface +- Made the published spec reflect runtime auth mode, so open local deployments are documented correctly + +This makes Omnigraph easier to integrate with generated clients, inspection tools, and API consumers that want a machine-readable contract. + +### CLI and export ergonomics + +Several rough edges in the CLI were fixed. + +- Export now streams instead of buffering the full snapshot in memory first +- Load summaries now report actual loaded row counts +- Alias handling no longer steals legitimate first arguments +- `commit show` matches the documented `--uri` usage +- Remote and local usage are more consistent for common admin flows + +## Additional Improvements + +- RustFS CI is now scoped to relevant changes instead of burning time on unrelated pull requests +- README and install docs were tightened around public binary install behavior +- The local RustFS bootstrap remains aligned with the rolling `edge` binary channel + +## Upgrade Notes + +- If you use local or remote schema administration, prefer `schema plan` before `schema apply` +- `schema apply` is intentionally conservative in v1 and rejects repos with non-`main` branches +- If policy is enabled, make sure admin actors are allowed to perform `schema_apply` +- If you rely on published binaries, this release is the point where stable installers can pick up schema apply and the newer CLI/runtime behavior without using `edge` + +## Included Changes + +- PR #2: CLI ergonomics and streamed export output +- PR #5: schema apply command and policy support +- PR #7: schema apply concurrency and index-preservation hardening +- PR #4: multi-statement mutations +- PR #1: OpenAPI generation and auth-aware `/openapi.json` +- PR #8: RustFS CI scoping improvements