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)andprobability(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)
| Feature | Reason |
|---|---|
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 formulas | Must remain external/extensible |
Canonical valid examples
FROM entity(memory_object) WHERE signal(relevance_score) > 0.8 RETURN entity_id, signal(relevance_score)FROM entity(note) TRAVERSE references DEPTH <= 2 RETURN entity_id, countFROM entity(memory_object) WHERE version > 3 RETURN entity_id, version, updated_atFROM entity(decision) WHERE superseded = false RETURN entity_id, summaryFROM entity(memory_object) WHERE semantic_match("why did we choose redis") > 0.75 RETURN entity_id, summary
Invalid or non-goal examples
FROM entity(work_item) WHERE sprint = "Q2"— domain-specific concept.ASSIGN owner = "sam"— mutation/action language is not allowed.FROM entity(work_item) WHERE blocked = true— implied business meaning in core.FROM entity(work_item) WHERE risk_score = "high"— usesignal(risk_score)from external signal systems.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.