# 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
