Skip to content

v0.3.0

Release Date: 2026-08-24

Highlights

  • Durable SQLite/Ent-backed implementation of consolidate.Store, so signals and root causes survive across process runs
  • sqlite-vec similarity search (NearestRootCauses) over persisted root cause embeddings, pure Go with no cgo
  • Roadmap scoped to the full signals → clustering → proposed roadmap items vision across six new phases

Added

Persistent Store

  • store/sqlite package: Signal, RootCause, and SignalRootCauseLink Ent schemas, with embeddings excluded from the relational tables and stored separately in sqlite-vec vec0 tables
  • sqlite.Store implementing consolidate.Store (SaveRootCause, GetRootCause, ListRootCauses, LinkSignal, GetLinkedSignals), plus SaveSignal/GetSignal for full signal persistence
  • sqlite.Store.NearestRootCauses for embedding similarity search via sqlite-vec vec0 KNN queries, with configurable DistanceCosine (default) or DistanceL2 metrics
  • sqlite.Open(dbPath string, opts ...Option) with WithEmbeddingDimension (required) and WithDistanceMetric options; safe to call repeatedly against an existing, populated database file
  • Signal↔RootCause links use a dedicated join table rather than a root_cause_id column on Signal, since LinkSignal can be called before SaveSignal is ever called for that signal — a column would silently no-op the link
  • Ent row writes and vec0 embedding writes are sequenced (row first) rather than sharing a transaction, so a partial failure is safe to repair via a retried, idempotent Save* call

Tests

  • Table-driven SQLite store tests against real temp database files (no mocking): round-trip save/get for signals and root causes, ListRootCauses filter behavior, LinkSignal/GetLinkedSignals including reattachment, fingerprint-based upsert idempotency, schema-recreate-is-safe on reopen, and NearestRootCauses KNN ordering/topK correctness

Documentation

  • Added Storage guide covering store/sqlite usage, wiring into consolidate.Pipeline, and similarity search
  • Marked Phase 6 (durable signal store) complete; added Phases 7-12 scoping the remaining gaps to the full signals → clustering → proposed roadmap items vision: proposed opportunity bridge into omniroadmap (Phase 7, in progress in a downstream repo), additional ticketing sources, incremental attach via similarity search, rubric-driven RICE/MoSCoW scoring, opportunity promotion to real items, and agentic code-analysis fix synthesis
  • Added an Ent codegen convention to CLAUDE.md for regenerating store/sqlite/ent

Dependencies

  • Added entgo.io/ent and modernc.org/sqlite (with modernc.org/sqlite/vec) for the SQLite/Ent store — both pure Go, no cgo required
  • Bumped github.com/santhosh-tekuri/jsonschema/v6 from 6.0.2 to 6.0.3

Breaking Changes

None. store/sqlite is a new, additive package; existing providers, metrics, and consolidate APIs are unchanged.

Installation

go get github.com/plexusone/omnisignal@v0.3.0

Migration Guide

From v0.2.0

No code changes are required for existing users of omnisignal.Provider, metrics, or consolidate without a store. To adopt durable persistence:

  1. Open a store: st, err := sqlite.Open("omnisignal.db", sqlite.WithEmbeddingDimension(n)), where n matches your embedder's output vector length.
  2. Pass it to the pipeline: consolidate.NewPipeline(consolidate.WithStore(st), ...).
  3. Call st.Close() when done; st.NearestRootCauses(ctx, embedding, topK) is available for corpus-scale similarity search independent of the pipeline.

Full Changelog

See CHANGELOG.md for the complete list of changes.