context
2
ctx:discord/blah/donto/2Source document
full textdonto-2
text/plain2 KB
doc:agent/donto-2/c453c873-7238-4e5f-ac1a-979d0bdb410f[2026-04-27 03:38] ajaxdavis: ``` The shape Donto is a quad-store with bitemporal + epistemic metadata. Every fact is a Statement: - subject, predicate, object (IRI or Literal{v, dt, lang}) — the claim - context — the provenance handle: an IRI naming who/what is asserting it - polarity — positive | negative (negative = assertion of falsehood, not deletion) - valid_from / valid_to — when the claim is true in the world (valid time) - maturity — numeric confidence/lifecycle marker - meta — free-form bag attached to the assertion See packages/donto-client/src/ingest.ts:17 for the wire shape. Contexts carry the provenance Provenance lives in the context graph, not on the statement itself. ensureContext (ingest.ts:4) takes: - iri — the context's identity - kind — source | hypothesis | derived | snapshot | user | … - parent — another context IRI, so contexts form a typed DAG - mode — permissive | strict (schema enforcement at write time) So lineage is: statement → context (kind=derived, parent=…) → … → context (kind=source). A derived context points back to whatever it was derived from; a snapshot freezes a view; user/source are leaves. Mutation model - assert adds a statement in a context. - retract (ingest.ts:56) takes either an id or a (subject, predicate, context) match — retraction is scoped to a context, so you can't silently rewrite history asserted by someone else. - A negative polarity assertion is not the same as retraction; it's an explicit "X claims ¬p" record, which is what lets you keep contradictions across contexts instead of collapsing them. Querying it back history(subject) returns the full StatementDetail[] for a subject (index.ts:67), and the client-side helpers in history.ts do the temporal filtering: isLiveAt(p, t) checks validFrom ≤ t < validTo, distinctContexts enumerates the provenance sources contributing to a subject, cubeBounds gives the temporal envelope. The mental model Three orthogonal axes, all client-visible: 1. Who said it — context (+ its kind and parent chain) 2. When it's true — valid_from / valid_to 3. How much we believe it — polarity + maturity Transaction time (when the row was written) isn't on the client surface — only createdAt on StatementDetail (index.ts:22), so a full bitemporal query has to go through dontosrv directly. If you want the server-side authoritative version, you'd need to point me at dontosrv — it's not in this working directory. ```
Facts in this context
Grouped by subject. Each subject links to its full article.
Statement12 factsex:statement
| doesNotContain | Provenance |
| hasComponent | Polarity |
| hasComponent | Subject |
| hasComponent | Valid From |
| hasComponent | Predicate |
| hasComponent | Meta |
| hasComponent | Maturity |
| hasComponent | Object |
| hasComponent | Context |
| hasComponent | Valid to |
| rdfs:label | Statement |
| rdf:type | Concept |