Deep Work with Telha (Analysts & Power Users)¶
For people who interrogate the state layer directly: risk, compliance, finance, ops, anyone whose job is "what is actually going on, and can I prove it".
The three time questions, precisely¶
Every query can pin two independent axes. Learn these three shapes and you can answer almost anything:
1. As-of (world time): "What was in force on March 15?"
{ "find": "CONTRACT_VERSION", "where": { "party": { "$eq": "Meridian" } },
"atValidTime": "2026-03-15T00:00:00Z" }
2. Believed-at (knowledge time): "What did we think on March 15, before the April correction?"
{ "find": "CONTRACT_VERSION", "where": { "party": { "$eq": "Meridian" } },
"atValidTime": "2026-03-15T00:00:00Z",
"atTxTime": "2026-03-15T00:00:00Z" }
The difference between these two results IS the correction history. If an audit asks "why did you act that way in March", the second query is your defense: it reproduces exactly the information picture you had.
3. Compare (delta): "What changed between the Q1 and Q2 assessments?"
POST /v1/compare
{ "from": { "atValidTime": "2026-03-31", "atTxTime": "2026-03-31" },
"to": { "atValidTime": "2026-06-30", "atTxTime": "2026-06-30" },
"find": "RISK_ASSESSMENT" }
Added, removed, modified, with property-level diffs. This is the query behind the flagship chat scenario; using it directly gives you pagination and machine-readable output for reports.
Evidence discipline¶
- Snapshot before you report.
POST /v1/snapshotexports the exact subgraph your analysis used, pinned to coordinates. Attach the snapshot reference to your report; anyone can re-derive your numbers from precisely your inputs, forever. - Trace every generated number. If you used
/v1/generatefor narrative, keep the trace id. The trace stores the plan, the claims, the verdicts, and the span links; it is the difference between "the AI said" and "here is the evidence chain". - Watch the confidence and pending markers. Results carry scores (semantic similarity fused with graph-distance decay) and pending-clarification flags. A pending fact in your critical path is a reason to nudge the clarification (see below), not to silently proceed.
- Interpret
relatedcorrectly. Graph expansion results never repeat your primary results; they are the surrounding context (amendments, parties, linked risks) at your requested depth.
Recipes¶
Entity dossier: history + neighbors + sources in three calls: GET /v1/records/:id/history, a query with expand: {depth: 2}, and the trace links from any generated summary.
"When did we first learn X?" Query with a where on the fact, walk history, read the transaction-time starts. The earliest tx start is the moment of first knowledge; later versions show how the belief evolved.
Find contradictions worth clarifying: query a label with trace: true and look for low applied_candidate_confidence or pending flags; these are the facts Telha is least sure about. Stewards can trigger questions to the right people from there.
Semantic sweep with a time fence: vector search plus atValidTime finds passages ABOUT a topic that were true in a window, not just documents that mention it now:
{ "find": "PARAGRAPH",
"vector": { "text": "penalty for late delivery", "k": 25, "minScore": 0.35 },
"atValidTime": "2026-01-15T00:00:00Z" }
Working from your own tools¶
If your tools speak MCP (agents, IDEs, notebooks), connect to the Telha MCP server and you get findRecords, compareSnapshots, getHistory, semanticSearch, generate, and getTrace as first-class tools, scoped to your identity and role. The same queries above work verbatim; results come back shaped for tool use (truncated fields marked, counts summarized).
Practical notes: where clauses always use operator objects ({"$gte": 3}); datetimes return as microsecond integers; expansion depth caps at 3; vector queries return ranked results and therefore do not paginate with cursors.