mirror of
https://github.com/ModernRelay/omnigraph.git
synced 2026-06-15 01:55:13 +02:00
All six crate manifests + their path-dependency constraints, Cargo.lock, the regenerated openapi.json version metadata, AGENTS.md's surveyed version, and the v0.7.0 release notes (object-storage clusters, config-free --cluster serving, the operator config surface, keyed credentials, operator targeting/aliases, and the omnigraph.yaml deprecation stages). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.9 KiB
4.9 KiB
Omnigraph v0.7.0
v0.7.0 takes the cluster control plane to object storage and overhauls the
configuration architecture around two single-owner surfaces. A cluster —
state ledger, content-addressed catalog, and graph data — can now live
entirely on an S3-compatible bucket, and a server can boot from that bucket
with no local files at all. Operator identity, credentials, and personal
aliases move to a home-level config; the legacy combined omnigraph.yaml
enters a guided, staged deprecation.
Highlights
- Clusters on object storage (
storage:).cluster.yamlgains an optionalstorage: s3://bucket/prefixroot. Every stored byte — the state ledger, lock, recovery sidecars, approval artifacts, catalog blobs, and the derived graph roots (<storage>/graphs/<id>.omni) — flows through one storage layer, sofile://(the default, byte-compatible with existing clusters) ands3://are a single code path. The ledger's compare-and-swap uses S3 conditional writes (If-Match/If-None-Match), verified against AWS semantics, RustFS, and Tigris-backed stores; the state lock is genuinely cross-machine on object storage. - Config-free serving:
--cluster s3://bucket/prefix. The server accepts a bare storage-root URI and boots from the applied revision on the bucket — the ledger and catalog are the whole deployment artifact. Policy bundles serve as digest-verified content from the catalog (never re-read from disk), closing the last gap for fully remote clusters. The preferred container shape becomes bucket, no volume (seedocs/user/deployment.md). - Per-operator configuration (
~/.omnigraph/). A home-level config carries operator identity (operator.actor, the new last hop of the--aschain), output defaults, named servers, and personal aliases.$OMNIGRAPH_HOMErelocates it;$OMNIGRAPH_CONFIGnow stands in for--configin both binaries. - Credentials keyed by server name.
omnigraph login <server>stores a bearer token in~/.omnigraph/credentials(created0600; over- permissive files are refused). Token resolution for a request whose URL matches an operator-defined server:OMNIGRAPH_TOKEN_<NAME>env → the credentials file → the legacybearer_token_envchain unchanged. A token is only ever sent to the server it is keyed to. - Operator targeting and aliases.
--server <name>(with--graph <id>for multi-graph servers) addresses operator-defined endpoints on every remote-capable command. Operator aliases are pure bindings — personal name → (server, graph, stored-query name, default params) — invoking catalog-owned stored queries; they carry no query content. omnigraph.yamldeprecation begins. Loading the legacy file prints a per-key notice naming each present key's new home (OMNIGRAPH_SUPPRESS_YAML_DEPRECATION=1to silence in CI).omnigraph config migrateproposes — and with--write, applies — the split: team half to a ready-to-reviewcluster.yaml, personal half merged into the operator config (existing entries always win).omnigraph initno longer scaffolds the file. Migrated teams can setOMNIGRAPH_NO_LEGACY_CONFIG=1to turn any legacy-file load into a hard error. The file itself keeps working until its removal at the next major version.
Breaking / behavior changes
omnigraph initno longer writes anomnigraph.yamlinto the working directory. Start cluster configs from the documentation templates, or runomnigraph config migrateagainst an existing legacy file.- Loading a legacy
omnigraph.yamlnow emits a deprecation block on stderr (suppressible; see above). Output on stdout is unchanged. ServingPolicy(cluster crate API) carries verified policy content instead of a blob path;read_serving_snapshotand several cluster command entry points are now async.
Upgrade notes
- Existing clusters need no migration: an absent
storage:key keeps the config-directory layout byte-for-byte. - Existing
omnigraph.yamlsetups keep working through the deprecation window;omnigraph config migrateproduces the recommended split. - Operator setup is three lines:
mkdir -p ~/.omnigraph, writeoperator.actor(andservers:) into~/.omnigraph/config.yaml, thenecho $TOKEN | omnigraph login <server>.
Internals
- The cluster, server, and CLI crates were modularized (the 7.9k-line
cluster
lib.rsis now eight focused modules; the server and CLI test monoliths split into per-area suites) — pure code movement, no behavior change. - New gated end-to-end suites run the full cluster lifecycle against a real S3-compatible store in CI, including a lock-release regression and a config-free server boot from a bare bucket URI.
- The deployment guide gains the bucket-no-volume container recipe for AWS and Railway, validated against a live Railway deployment (Railway buckets are S3-compatible and pass the conditional-write contract test).