Limits & Caveats

This is the code-verified status of every major feature — what works, what is partial, and what is explicitly deferred.

The governed core is real: bi-temporal store, planner with ACL and org isolation, provenance / audit hash chain, SmartIngest identity detection, and all protocol-compatibility doors are implemented and smoke-tested.

SQL query surface

FeatureStatusNotes
SELECT + WHERE / ORDER BY / LIMIT / JOIN / GROUP BYWorkingJOIN = INNER hash join (O(n+m)); GROUP BY + COUNT(*) in executor
PURPOSE '…' prefixWorking, optionalRecorded for audit when declared
AS OF <ts> / AS OF SYSTEM TIME <ts>WorkingUTC ISO-8601 or i64 ns UTC; non-UTC offsets rejected
LIMIT n AFTER 'cursor'Workingcursor = decimal system_from ns; cannot combine with ORDER BY
ORDER BYWorkingMulti-column with ASC/DESC tiebreakers (ast.rs:1316, executor.rs:2665)
WITH PROVENANCEWorkingMust be a trailing modifier (after LIMIT)
WHERE expressionsWorkingcol op literal, arithmetic, now(), now() - INTERVAL 'N …'
MATCH(col, 'q'[, PHRASE|FUZZY|STEMMED])WorkingDefault from BM25 posting list; PHRASE from positional index; FUZZY/STEMMED fall back to substring scan
TUMBLE / HOP / SESSION windowsWorkingHOP = overlapping bucket fan-out; SESSION = per-key activity-gap grouping
EXPLAIN PATHWorkingReturns {strategy, graph_node_count, pll_warm} JSON
EXPLAIN REPLAY('<id>', SEQ => n)WorkingRe-derives a logged exhibit link's seal byte-identically
EXPLAIN POLICYPartialPrefix parsed but flag not consulted on execute path; use the explain_policy MCP tool
CTE incl. WITH RECURSIVEWorkingparse_ctes_opt (parser.rs:1119); recursive iteration cap WITH_RECURSIVE_MAX_ITER (executor.rs:5980)
UNION / UNION ALL / INTERSECT / EXCEPTWorkingexecute_set_ops (executor.rs:2985); SetOpKind enum (ast.rs:1675)

Operators and TVFs

Working and SQL-reachable: LOOKUP_IDENTITY, RESOLVE_IDENTITIES, IDENTITY_CLUSTER, SAME_IDENTITY, PATHS_BETWEEN, NETWORK_EXPAND, PREGEL_BFS, DEGREE(), HYBRID_SEARCH, fts_search, SIMILAR TO, FACE_SEARCH, all 10 graph TVFs (GRAPH_DIJKSTRA, GRAPH_SCC, GRAPH_CYCLES, GRAPH_SSSP, GRAPH_SPANNING_TREE, GRAPH_APSP, GRAPH_DIAMETER, GRAPH_SIMILARITY, GRAPH_NODE_METRIC, GRAPH_LINK_PREDICT), all 13 ScorerOp analytics operators, BENEFICIAL_OWNERSHIP_CHAIN, SANCTIONS_SCREEN, CRYPTO_TRACE, WIRE_RECONSTRUCTION, HAWALA_TRACE, GRAPH_COMMUNITY, GEOFENCE, ANPR_TRACE, DISPATCH_PRIORITY, CRIME_PATTERN_CLUSTER, WATCH PURPOSE.

The DataFusion TVF form SELECT * FROM <tvf>(...) works for all registered TVFs. Each TVF call is translated to its governed keyword form and runs under the same purpose + ACL + org-isolation path.

DDL

StatementStatusNotes
CREATE EXTENSION vector / DROP EXTENSION vectorWorking (pgwire)No-op OK tag
CREATE TABLE (pgvector)Working (pgwire)Registers the type; column list is ignored
INSERT / UPDATE / DELETEWorking (pgwire)The only native SQL DML path
CREATE MATERIALIZED VIEW … REFRESH (INCREMENTAL|FULL) EVERY <s>WorkingInitial full refresh + background loop
ALTER TABLE … ADD/DROP COLUMNParses, then 501sUse the ontology API
CREATE INDEX / CREATE TYPE / CREATE SCHEMANot implemented

Agent memory surface

All 10 cognitive verbs are wired through to the runtime — 10 MCP tools and 10 HTTP /memory/* routes:

ClaimReality
10 cognitive verbs10 implemented: original 7 + associate / resolve / summarise
recall = hybrid retrievalBM25 + vector fused via RRF, re-scored by confidence × recency × forgetting curve
recognize returns a memoryReturns a MemoryItem projection
consolidate supersedesCloses the superseded row's valid_to and inserts the new belief
forget deletesRetentionMark enforced by ForgetScheduler on a background cadence (not a hard delete)
5 memory canonical typesAll producers wired: MemoryItem, AgentSession, ToolCall, DecisionRecord, Episode

Canonical types and SmartIngest

  • 76 canonical kinds ship. The often-cited ~170 is the target catalogue, not the shipped count. The enum is #[non_exhaustive] with reserved headroom.
  • A few kinds (GSTIN, BTC address, FARA) have validators but no SmartIngest detection gate — they round-trip but are not auto-detected from free text.
  • OT/ICS kinds (Modbus, OPC UA, DNP3, S7, IEC 61850) are auto-detected via the opt-in ics detector pack; ambiguous forms require a label (MODBUS:17).
  • relata detect "<text>" runs all detector packs regardless of RELATA_DETECT_PACKS (which governs HTTP /ingest only).
  • Default packs: network,contact,crypto. Opt-in: financial,payment,social,transport,device,ics. Or all / none.

Protocol compatibility doors

DoorWrites?Known limits
ClickHouse HTTP + native TCPRead-onlyCannot create Relata types
Neo4j HTTP + BoltYes (CREATE/MERGE)Governed write door: run_protocol_cypher_write routes through governed_upsert for nodes and validate_link_write for edges
Postgres / pgvectorYesANN index is cosine-only; &lt;->/&lt;#> correct via over-fetch + re-rank
MongoDBYesNo transactions, change streams, $push/$pull/$unset; nested equality via flattened columns only
RedisYesNo MULTI/EXEC, BLPOP, scripting, cluster; Pub/Sub is in-memory (zero persistence)
S3YesBuckets must be empty to delete; ETag = SHA-256; large objects streamed from object store

All doors bind to 127.0.0.1 and share RELATA_BEARER_TOKEN. pgwire refuses to start without a token; others default to open dev mode when unset.

Capacity and scaling

The execution path no longer materialises results in memory. Streaming scan, spilling hash-join + aggregate, streaming results, and spill-to-disk that frees RAM have all shipped.

StructurePaged backendDefault profile
Authoritative rowsSpill-to-diskserver/cluster
Secondary / range indexesDiskIndexSourceserver/cluster
Full-text postingsDiskIndexSourceserver/cluster
Vector index (HNSW)PagedAnnIndex + IVF cold tierserver/cluster
Graph adjacency (CSR)PagedCsrGraphserver/cluster
Identity indexLive-pagedserver/cluster

Measured performance characteristics

OperationMeasured overhead
Conditional ACL~1.32× raw-scan p50. Budget gate: <2.5×
Bitmap row filtering~1.0× (branch-predicted bitset)
Cell masking~2.6× raw-scan p50 — avoid on hot scan paths in latency-sensitive deployments
Cold-restart RTO at 10M rowsWAL+Parquet flush ~15s; cold-load from Parquet ~55s. Single-node RTO ≈ 1 minute

Aggregation note

GROUP BY without a filter predicate uses the columnar path. Filtered aggregates fall back to per-row field access and scale super-linearly at 10M rows.

Async embedding resilience

KnobDefaultEffect
RELATA_EMBED_QUEUE_MAX100000At cap, tasks are dropped (metric relata_embed_queue_dropped_total)
RELATA_EMBED_TIMEOUT_MS30000Prevents a GPU hang from stalling the drain worker
RELATA_EMBED_CIRCUIT_COOLDOWN_MS60000After 5 consecutive errors, circuit opens; /health/ready returns 503 with reason: embedder_unhealthy. Writes always succeed.

Explicitly deferred

These capabilities are advertised as design targets but are not shipping:

CapabilityCurrent state
Hardware attestation (SEV-SNP / TDX)Software stub — synthetic report for dev/CI; no /dev/sev-guest / TDX-driver-backed report
Real Cedar SDK integrationThe cedar-policy crate (v4) is a workspace dependency, wired as a secondary policy filter via AclEngine::set_cedar_policy / apply_cedar_policy. A native ABAC engine (deny-wins, attribute conditions) owns the primary evaluation path; Cedar is consulted as a deny-wins overlay only when a policy text is configured
Cypher MATCH patterns + WITH WARRANTParser only handles WITH PROVENANCE; these are target syntax only
SQL:2011 period predicatesFOR SYSTEM_TIME FROM/TO/BETWEEN, OVERLAPS, CONTAINS, PRECEDES, auto period-splitting are not parsed; use explicit valid_from/system_from predicates (AS OF covers point-in-time)
Biometric ACLDeferred pending legal review
Sub-tenant namespacesNamespacePath on Row — accepted but deferred

Release-readiness rule

A capability is release-ready only when it has: (1) committed implementation, (2) public-safe documentation if user-facing, (3) tests or validation output, (4) known limits documented here. Items listed above as "parses, then errors" or "not wired" are not release-ready.