v0.2.0¶
Release Date: 2026-07-25
Highlights¶
- Metrics engine with 4 formulas: frustration, momentum, reach, and urgency
- LLM-based consolidation pipeline: embed, cluster, summarize, review, attach
- Analyst findings provider for Gartner, Forrester, and IDC
- Competitive intelligence provider for win/loss and gaps from CRM sources
- Curated signal support to skip clustering for pre-aggregated sources
- Config helpers for typed mapping options (customer, capability, market)
Added¶
Metrics Engine¶
metricspackage with a pluggable formula registry (Register,Get,MustGet,Compute,ComputeAll,List,IsRegistered)frustrationformula: weighted signal count multiplied by the age (in days) of the oldest signalmomentumformula: count of signals observed within a trailing window (default 30 days)reachformula: count of distinct customer references across signalsurgencyformula: sum of severity-weighted signal countsmetrics.ConfigwithLoadConfig,LoadConfigOrDefault,Merge, andToOptionshelpers, plusConfigFromProviderOptionsfor reading weight overrides fromConfig.Options["metrics"]
Consolidation Pipeline¶
consolidatepackage implementing a 5-stage pipeline (embed → cluster → summarize → review → attach) viaconsolidate.NewPipelineOmniLLMEmbedderfor batched embedding generation with configurableTextFuncextractors (TextFromSummary,TextFromMetadata,TextWithEntities)- Cosine-similarity
ClustererandIncrementalClustererfor grouping signals and incrementally attaching new signals to existing clusters LLMSummarizerfor generating root cause titles, descriptions, and symptom patterns from signal clustersMemoryReviewerin-memory human review queue with approve/reject workflow, submit/approve/reject hooks, and an auto-approve threshold based on signal count- Curated signals (
metadata["curated"] == true) skip clustering and map directly to root causes, preserving existing aggregation
Analyst Provider¶
provider/analystpackage ingesting analyst findings from Gartner, Forrester, and IDCFindingtype with report ID, category, severity, markets, and competitors- Findings normalized to
signal.TypeAnalystFindingsignals withanalyst_report_ref,market_ref, andcompetitor_refMarketSpec typed refs MemoryAdapterfor testing and manual finding ingestion
Competitive Provider¶
provider/competitivepackage ingesting win/loss data and competitive gaps from CRM sources (Salesforce, HubSpot, Clari, Gong)DealRecordtype mapped to competitive win/loss signals, withcustomer_ref,market_ref, andcompetitor_reftyped refsCompetitiveGaptype mapped tosignal.TypeCompetitiveGapsignals, withcompetitor_ref,market_ref, andcapability_reftyped refsMemoryAdapterfor testing with separate deal and gap stores
Provider and Config Helpers¶
omnisignal.IsCurated()for detecting pre-consolidated signals that should skip the clustering stageConfig.GetStringMap()for typedmap[string]stringoption retrieval (handles bothmap[string]stringandmap[string]any)OptCustomerMappings,OptCapabilityMappings, andOptMarketMappingswell-known config option keys for mapping source system values to typed refs
Bug Fixes¶
- Updated Jira and PagerDuty providers to use the
common.SourceSystemstruct instead of a plain string, matching signal-spec v0.2.0, and added customer/capability mapping support via config options
Documentation¶
- Added PRD, TRD, PLAN, ROADMAP, and ARCHITECTURE specs covering the OmniSignal signal engine design across 6 phases (28 RMIs)
- Added CLAUDE.md with repo-specific contributor guidelines
- Added metadata conventions, PRISM-Roadmap handoff guide, and Aha provider guide covering enhancement request metadata, cross-repo reference format, and curated vs. raw signal handling
- Updated README shields
Dependencies¶
- Updated
github.com/plexusone/signal-specto v0.2.0 and removed the localreplacedirective - Added
github.com/grokify/oscompatfor cross-platform test assertions
Breaking Changes¶
None. The common.SourceSystem change in the Jira and PagerDuty providers is a downstream effect of the signal-spec v0.2.0 upgrade and does not change the omnisignal.Provider interface.
Installation¶
Migration Guide¶
From v0.1.0¶
- Update
github.com/plexusone/signal-specto v0.2.0 in your own code if you constructsignal.Signalvalues directly;Signal.Sourceis now acommon.SourceSystemstruct rather than a string. - If you want new signals to skip consolidation clustering (e.g., pre-aggregated feedback), set
Metadata["curated"] = trueor useomnisignal.IsCurated()to check. - To compute derived metrics, register the built-in formulas are already registered via
metricspackageinit(); callmetrics.Compute(ctx, "frustration", signals, opts)ormetrics.ComputeAll(ctx, signals, opts).
Full Changelog¶
See CHANGELOG.md for the complete list of changes.