A truth layer, not a dashboard.
How the corpus is built, why every value carries its own audit trail, and what you get through each of the three doors.
The problem.
AI agents are graduating from drafting text to making decisions — approving a counterparty, validating a route, classifying goods. The moment an answer has regulatory or financial consequence, “the model said so” is not a provenance story. Retrieval over documents gives agents plausible text; decisions need auditable facts.
The reference truth those decisions rest on — what’s a real port, which jurisdiction is high-risk, who is on which list, what category of goods is moving — is scattered across dozens of sources, each with its own format, freshness, and license. Scientia Basis unifies them into one corpus an agent can query, trust, and cite.
The bet.
The interface layer is being commoditized by assistants; the data layer isn’t.
That’s why there is no dashboard: the UI for a non-technical user is any assistant with the MCP server attached. What can’t be commoditized is a corpus where every value carries its own audit trail.
Everything is a statement.
Most databases store values. Scientia Basis stores claims about values — every fact carries which dataset asserted it, the exact source URL, which ingest run produced it, and when it was last confirmed. No fact is ever deleted: facts that vanish from a source go stale, visibly. Conflicting sources coexist as two statements, never a silent overwrite.
- Property
- postal_code_regex
- Value
- ^\d{5}(-\d{4})?$
- Dataset
- sci-bas_countries
- Source
- sci-bas://country_master
- Run
- 3 · sci-bas_countries
- Seen
- first 2026-08-08 · last 2026-08-08
Registry-driven connectors; every run that parses a file records a content hash of it.
Conflicting sources coexist as visible statements — every value returned, each with the dataset that asserted it. Nothing silently overwritten, and nothing silently picked.
Any value → dataset → source URL → run. Licenses are machine-readable.
Re-ingest is idempotent; vanished facts go stale, never deleted.
Four capabilities, one schema decision.
The pipeline.
Fetch, normalize, record, validate, release — then everything reads from the same query service.
Registry inventory is not a promise of customer access. The offered scope follows entitlements and unresolved-rights holds.
/screenA corpus you can pin.
Data responses identify the served corpus release. Pin that current label; older-artifact and historical time reads are unavailable. Precomputed diff totals are release bookkeeping, not reconstructed history.
Every dataset carries the timestamp of its last successful ingest and the run that produced it, queryable through /datasets and /runs. A stale answer is a visible answer.
Screening returns candidates, not verdicts. When the Yente matcher is available it supports transliteration-aware matching; lexical fallback is clearly identified in the response.
Dataset metadata records upstream licence and redistribution terms. Account/key entitlements and source-specific legal holds are applied before data is returned; a metadata label is not proof of a licence grant.
Updating & audit.
No fact is ever deleted — every value carries when it appeared and when it was last confirmed, and the model extends to full point-in-time queries without a rebuild.
This is the operator view. run is each dataset’s own ingest count and is what a citation carries; run_id is a corpus-wide counter, returned only to a key that already reaches every dataset, because its gaps would otherwise tell a narrower key how many ingests it is not being shown.
$ scientia runs --limit 3 --pretty
{
"corpus_release": "2026.08.7",
"count": 3,
"results": [
{ "run": 12, "run_id": 37, "dataset": "sci-bas_factbook",
"started_at": "2026-08-09T02:17:28Z",
"finished_at": "2026-08-09T02:17:47Z",
"source_version": "sha256:52e1c8aee8ab4d78",
"snapshot_digest": "52e1c8aee8ab4d78f6fc…",
"status": "ok", "entities": 248, "statements": 62478,
"release": "2026.08.7" },
{ "run": 9, "run_id": 36, "dataset": "cldr_names", … },
{ "run": 9, "run_id": 35, "dataset": "iso_country_names", … }
]
}Historical operator output from August 2026. The legacy Factbook dataset shown here is held from external serving; corrected releases use the independently sourced cia_factbook dataset. Its new acquisition does not rewrite this historical run.
Honest screening.
Two historical Yente responses from release 2026.08.6 illustrate transliteration-aware matching. Their different-script queries resolve to the same designation, csl:SDN:8279, with engine-specific scores and explanations. These are recorded examples, not a claim about current matching availability.
Initial launch is pinned to snapshot 2026.10.2 and currently uses the explicitly degraded lexical fallback because the stronger index is unaligned. It does not provide Yente's transliteration capability. Check the current screening limits and reject degraded results when that capability is required.
Screening returns candidates, not verdicts. A score ranks likelihood, the threshold is yours to set, and the record behind a hit is a citable id you can fetch, pin to a release and diff. Nothing here decides whether to file a report — that judgement stays with the person accountable for it, and the point of the explanations is that they can disagree on specifics.
{
"corpus_release": "2026.08.7",
"match_count": 1,
"matches": [{
"id": "csl:SDN:8279",
"caption": "BOUT, Viktor Anatolijevitch",
"dataset": "us_csl",
"score": 0.864,
"explanations": { "name_match": 0.864 }
}]
}{
"corpus_release": "2026.08.7",
"match_count": 1,
"matches": [{
"id": "csl:SDN:8279",
"caption": "BOUT, Viktor Anatolijevitch",
"dataset": "us_csl",
"score": 0.909,
"explanations": { "name_match": 0.909 }
}]
}Three doors, one corpus.
All three surfaces are thin doors over one query service — an agent, a pipeline, and a terminal get identical answers with identical provenance.
$ claude mcp add --transport http scientia-basis https://scientia-api-go.fly.dev/mcp \ --header "Authorization: Bearer $SCIENTIA_API_KEY" # tools: search_entities · get_entity · screen_name · # get_country_profile · get_country_factbook · list_datasets
$ curl -H "Authorization: Bearer $SCIENTIA_API_KEY" \ 'https://scientia-api-go.fly.dev/v1/countries/VN' $ curl -H "Authorization: Bearer $SCIENTIA_API_KEY" \ 'https://scientia-api-go.fly.dev/v1/screen?name=Aerocom+SRL&threshold=0.7'
$ export SCIENTIA_API_URL=https://scientia-api-go.fly.dev $ scientia search "vladivostok" --schema Location $ scientia country VN # reference + risk.fatf_list · risk.cpi_score · risk.wgi_* $ scientia datasets # license, redistribution term and freshness
Start free. Pay for volume, not for access.
Dataset access and screening behavior follow the entitlement policy configured for the deployment. Plans differ in how much you can spend, and nothing else.
Enough to evaluate properly.
The working plan, 120 req / min.
Production workloads at 600 req / min.
Where this goes.
Richer decision data & crosswalks — HS ↔ export-control ↔ product taxonomy.
The operational graph — senders, receivers and shipments as first-class, continuously screened entities, where longitudinal operational truth becomes the moat.
The investigation tier — an agent walks the graph and drafts an evidence-backed, provenance-cited brief for a human. The corpus was designed to be citable from day one.