Releases: deeplethe/utopia
Release list
v0.1.0-rc3
The third release candidate. A security fix reported against rc2, the fix that lets the connectors added in rc2 actually be created, and everything else that landed since. latest still does not point here.
ghcr.io/deeplethe/utopia:0.1.0-rc3
docker-compose.yml defaults to this tag, so the quick start in the README works unchanged.
Security
Source credentials stay on the server. Until now only the custom fetcher's auth_header was stripped from responses; the S3 / Azure / GCS keys, the WebDAV password and the Notion token went out to every viewer of a knowledge base, on listing as well as on create and update. One list of credential keys now governs the listing, the responses, the update merge (an empty field keeps the stored value) and the audit log. Every source endpoint also confirms the source belongs to the knowledge base in the path. Reported by @hekr4jivs (#246). Vulnerability reports go to security@deeplethe.com, see SECURITY.md.
Sources
S3, Azure Blob, Google Cloud Storage, WebDAV and Notion sources can be created — rc2 shipped them in the UI and the sync engine but not in the creation allowlist (#247, also @hekr4jivs). The kinds now come from one enum that the allowlist, the sync dispatcher and the UI list all derive from, with a test that keeps them aligned.
Reasoning
A derivation that contradicts an assertion is no longer silently dropped: it appears under Review > Axioms with the derived triple, the assertion it hit, one clue (the assertion has no end date, two entities share the name, low extraction confidence) and the repairs — give the assertion an end date, retract it, see duplicates, open the ontology, or let both stand. Two rules that produce contradicting derivations are reported once per rule pair under Ontology. On the graph a contested assertion is drawn in an alert colour and a blocked derivation as a ghost edge; the entity panel marks disputed facts and lists the derivations that did not land, each with its proof chain. A derivation's proof chain reads down to the sentence it came from.
Resolution
A declared owl:disjointWith keeps same-name entities apart ahead of class kinship and the built-in confusable list; disjointness is inherited, so a declaration on a parent class reaches its children.
Ask the data
Trino (Iceberg / Delta / Hive), Databricks and Snowflake are query engines behind the same trait; the connection string's scheme picks the engine.
Also
The decision records under docs/decisions are condensed into English.
v0.1.0-rc2
The second release candidate. Everything that landed between rc1 and this tag, plus the fixes from a full end-to-end pass over every feature in the README table. latest still does not point here.
ghcr.io/deeplethe/utopia:0.1.0-rc2
docker-compose.yml defaults to this tag, so the quick start in the README works unchanged.
Sources
S3-compatible buckets (MinIO included), Azure Blob and Google Cloud Storage are sources; so are WebDAV shares and Notion pages, each keeping the document's own clock. A push to an API source without content now marks the document missing as the guide says, and a rejected payload stays in the run history instead of being reported as a source that failed to sync.
Ontology and extraction
Pack import resolves domains and ranges across packs: org:headOf gets its foaf:Agent domain whichever pack came first. Direction is judged by the range as well as the domain, so a fact that only reads correctly backwards is swapped rather than stored as written. The facts a document just produced go through the signature check immediately and any violation waits under Review > Axioms without anyone pressing Run check.
Resolution and review
Same-name entities of sibling classes (Organization / Corporation / OnlineBusiness) now reach the Duplicates queue the entity panel points to. A fact drawn from a remembered sentence waits for a nod before it enters the graph. Activity names the engine — "AI adjudicator" for automatic review decisions, "the engine" for the rest — instead of calling them a removed user.
Data mapping
Explore creates the Metric and Dimension classes it needs, so a fresh base gets proposals; when the model proposes nothing, the alert bell says so, and the Pending list refreshes on its own.
Agents and tools
Personal access tokens have a page of their own under Persona, and the agent gets the configuration to use them.
Also
The Library page no longer crashes on a refresh or a deep link. A citation list is rendered as a block. An empty model balance stops the retry budget from being spent. The README's feature table says each thing once.
v0.1.0-rc1
A release candidate. 0.1.0 was withdrawn — its tag, its GitHub release and its images are gone, and this is what replaces them. latest deliberately does not point here: a candidate that takes latest is not a candidate.
ghcr.io/deeplethe/utopia:0.1.0-rc1
docker-compose.yml defaults to this tag, so the quick start in the README works unchanged.
Reasoning
inverseOf and subPropertyOf reach the reasoner, and both can be declared from the ontology page instead of through SQL. A rule is looked up by the predicate that declared it rather than the one it produced; the two are the same for transitivity and symmetry, which is why the difference stayed invisible until a rule crossed predicates and its results were silently dropped.
Agents and tools
MCP, with personal access tokens that carry a scope without carrying the whole person.
A tool call whose arguments did not parse, or that is missing a required argument, is refused instead of falling back to the user's own question — that fallback produced answers which looked ordinary and were built on the wrong input.
Tool calls and their results replay across turns, so the model can see what it already did. Without that, "translate that" re-ran the whole round and, with several entities sharing a name, came back describing a different set.
Chat
An answer survives the reader leaving. Generation is detached from the request, the in-flight answer lives outside the component that displays it, and a running generation can be reattached to after a reload. The action trace is drawn at the point in the reply where each call happened rather than stacked above it, and citations appear once the answer is finished.
Graph
Edges between the same two nodes fan out into separate arcs instead of overlapping on one line, where their labels used to pile into unreadable stacks. An inverse-derived edge is folded into the edge it came from — one fact said two ways is not two facts.
Also
Rate limits are waited out and reported, and an empty balance is distinguished from one. Switching knowledge base moves the URL, which is what actually changes the base. Star history, from @Danmushu's contribution in #163, rendered by a script in this repository.
Schema migrations run on startup. This is still v0.1: the schema moves between versions.