mirror of
https://github.com/ModernRelay/omnigraph.git
synced 2026-06-15 01:55:13 +02:00
Some checks failed
CI / Classify Changes (push) Has been cancelled
CI / Check AGENTS.md Links (push) Has been cancelled
CI / Container Entrypoint (push) Has been cancelled
Release Edge / Prepare edge release (push) Has been cancelled
CI / Test Workspace (push) Has been cancelled
CI / Test omnigraph-server --features aws (push) Has been cancelled
CI / Test Windows release binaries (push) Has been cancelled
CI / RustFS S3 Integration (push) Has been cancelled
Release Edge / Build edge omnigraph-linux-x86_64 (push) Has been cancelled
Release Edge / Build edge omnigraph-macos-arm64 (push) Has been cancelled
Release Edge / Build edge omnigraph-windows-x86_64 (push) Has been cancelled
Release Edge / Smoke Windows installer (push) Has been cancelled
* test(optimize): pin Lance blob-column compaction failure as a surface guard
Lance compact_files mis-decodes blob-v2 columns under its forced BlobHandling::AllBinary read ("more fields in the schema than provided column indices"), failing even a pristine uniform-V2_2 multi-fragment blob table; reads use descriptor handling and are unaffected.
Guard 10 reproduces this and is self-retiring: it turns red on the Lance bump that fixes the bug, forcing LANCE_SUPPORTS_BLOB_COMPACTION to flip.
* fix(optimize): skip blob-bearing tables instead of crashing compaction
omnigraph optimize aborted the whole sweep when any node/edge table had a Blob property: Lance compact_files cannot decode blob-v2 columns under AllBinary (the column-index error pinned by the surface guard). Skip blob-bearing tables behind a LANCE_SUPPORTS_BLOB_COMPACTION gate and report them via TableOptimizeStats.skipped / SkipReason (surfaced in the CLI and a tracing::warn) instead of erroring, which also isolates the failure so the other tables still compact.
Reads/writes are unaffected; only fragment/space reclamation on blob tables is deferred until the upstream Lance fix. Adds a maintenance.rs regression test (validated red with the column-index symptom before the fix, green after), a concise v0.6.1 release note, and updates docs (maintenance, cli-reference, AGENTS capability matrix, invariants Known Gaps, lance.md audit, constants).
* refactor(optimize): make TableOptimizeStats and SkipReason non_exhaustive
Both are returned result types, never built by callers, so #[non_exhaustive] makes this the last field/variant addition that can break downstream literal construction and keeps future ones non-breaking (review feedback on the public-field addition). The v0.6.1 Compatibility Notes call out the source-level change.
Also drops the now-stale "RED today / GREEN after the fix lands" narration in the optimize_skips_blob_table_and_reports_skip test (historical regression context now that the fix is in this branch), and folds in the expanded v0.6.1 release note.
* chore(release): bump workspace to v0.6.1
Coherent version bump to accompany the v0.6.1 release note: all five crate manifests + path-dependency constraints, Cargo.lock, the AGENTS.md surveyed-version line, and openapi.json info.version move 0.6.0 -> 0.6.1. Matches the established release pattern (#118 landed the v0.6.0 note + bump together) and resolves the Codex/Devin review flag that a v0.6.1 note without a bump leaves CARGO_PKG_VERSION reporting 0.6.0 and mixed package versions.
3.5 KiB
3.5 KiB
Omnigraph v0.6.1
v0.6.1 focuses on operational polish after v0.6.0: stored-query registries, safer branch cleanup, more complete release artifacts, and a Lance blob-compaction workaround.
Highlights
- Stored-query registries.
omnigraph.yamlcan declare curatedqueries:blocks per graph. Servers load and type-check them at startup,omnigraph queries validatechecks them offline,omnigraph queries listshows exposed queries and typed params,GET /queriesexposes a typed catalog, andPOST /queries/{name}invokes a stored query without accepting ad hoc.gqsource from the client. - Stored-query policy gate. New Cedar action
invoke_querygates the stored-query invocation surface. Stored mutations are double-gated:invoke_queryto reach the stored query andchangefor the actual write. - Safer branch deletion.
branch_deletenow treats the manifest as the authority, flips branch visibility atomically, and reclaims per-table/commit-graph forks as derived state. If best-effort reclaim is interrupted,cleanupreconciles orphaned forks; reusing a branch name before cleanup reports an actionable error. - Blob-safe optimize.
omnigraph optimizeskips tables withBlobproperties instead of failing the whole sweep on Lance's blob-v2 compaction decode bug. Skips are visible in human output,--jsonasskipped,TableOptimizeStats.skipped, and logs; non-blob tables still compact normally. - Deployment improvements. The container entrypoint now composes
OMNIGRAPH_TARGET_URIwithOMNIGRAPH_CONFIG, so operators can keep the graph URI in env while loading policy/query config from a mounted file. The local RustFS bootstrap pins RustFS beta.3 and allows the current insecure local-dev default credentials. - Windows release support. Tagged and edge releases now publish Windows x86_64 archives containing
omnigraph.exeandomnigraph-server.exe, with a PowerShell installer and Windows install docs. - Release tooling. Homebrew formula generation was tightened to produce audit-clean formulas.
Compatibility Notes
- A graph selected by name (
--targetorserver.graph) now usesgraphs.<name>.policyandgraphs.<name>.queries. Top-levelpolicy/queriesblocks are only for anonymous bare-URI single-graph mode; using them with a named graph now fails loudly with migration guidance. mcp.exposedefaults totruefor stored-query registry entries. Setmcp: { expose: false }for service-only queries that should not appear in the catalog.invoke_queryis graph-scoped, not branch-scoped. Branch/snapshot access remains enforced by the innerread/changegate.- Blob tables are not compacted until the upstream Lance fix lands, so fragment count and deleted-row space on blob tables are not reclaimed by
optimize. Reads, writes, and query results are unaffected; no on-disk migration is required. TableOptimizeStatsis now#[non_exhaustive]and gains askipped: Option<SkipReason>field (so does the newSkipReasonenum). This is a source-level change only for downstream code that built this returned result struct by literal — rare, since it is produced byoptimizeand consumed by reading its fields; field access is unaffected, and#[non_exhaustive]keeps future additions non-breaking.
Docs And Cleanup
- Public docs were updated for stored queries, policy, server routes, deployment, Windows installation, branch deletion, maintenance, and the
runsdocs rename towrites. - README copy and release documentation were refreshed; older release notes had small typo/wording fixes.