Skip to content

SignalQL v0.2 language scope

This document defines the operational scope for v0.2. Historical scope for analytics-first v0.1 remains available in v0.1 spec and spec versions.

In scope (v0.2)

  • Domain-agnostic evidence retrieval over events, entities, relationships, and AI-created memory objects.
  • Entity-based sources (FROM entity(type)) and event sources.
  • Graph traversal via explicit relationship edges and bounded depth.
  • Temporal reasoning primitives such as trend checks over explicit windows.
  • Sequence pattern detection for ordered activity states in bounded windows.
  • External computed signals through signal(name) and probability(name) references.
  • Optional semantic retrieval primitive through semantic_match("...").
  • Revision-aware retrieval through evidence fields (for example version, superseded, updated_at).
  • Provenance-aware retrieval through evidence fields (for example source, created_by, derived_from, confidence).
  • Domain-pack namespacing in entity types (for example work.memory_item).
  • Permissions-aware execution with caller access filtering before evidence leaves runtime.
  • Deterministic execution metadata for explainability and AI review.

Non-negotiable constraints

  • SignalQL returns structured evidence only.
  • SignalQL core has no business opinion and no domain pack semantics embedded.
  • SignalQL core has no mutation/action language.

Explicitly out of scope (core)

FeatureReason
Domain-specific nouns (sprint, epic, story_points)Causes product lock-in
Actions (ASSIGN, EXECUTE, mutations)Breaks retrieval-only contract
Built-in interpretation labels (blocked, priority)Belongs to AI/reasoning layer
Hardcoded signal formulasMust remain external/extensible

Canonical valid examples

  1. FROM entity(memory_object) WHERE signal(relevance_score) > 0.8 RETURN entity_id, signal(relevance_score)
  2. FROM entity(note) TRAVERSE references DEPTH <= 2 RETURN entity_id, count
  3. FROM entity(memory_object) WHERE version > 3 RETURN entity_id, version, updated_at
  4. FROM entity(decision) WHERE superseded = false RETURN entity_id, summary
  5. FROM entity(memory_object) WHERE semantic_match("why did we choose redis") > 0.75 RETURN entity_id, summary

Invalid or non-goal examples

  1. FROM entity(work_item) WHERE sprint = "Q2" — domain-specific concept.
  2. ASSIGN owner = "sam" — mutation/action language is not allowed.
  3. FROM entity(work_item) WHERE blocked = true — implied business meaning in core.
  4. FROM entity(work_item) WHERE risk_score = "high" — use signal(risk_score) from external signal systems.
  5. EXECUTE remind_owner — execution actions are not part of SignalQL.

Domain packs

Domain packs are external, versioned artifacts that may define:

  • reusable derived signals,
  • interpretation templates,
  • reusable query bundles.

They do not extend core grammar with product-specific nouns.